static void drawhead (int nm) { register i, reverse; VSetDim (); reverse = VStandOut (); VMove (0, 0); for (i=0; i<80; ++i) VPutChar (' '); VMove (0, 2); for (i=0; menu[i].name; ++i) { if (i == nm) { VStandEnd (); VSetBold (); } VPutChar (' '); VPutChar (i==nm && !reverse ? '[' : ' '); VPutString (menu[i].name); VPutChar (i==nm && !reverse ? ']' : ' '); VPutChar (' '); if (i == nm) { VStandOut (); VSetDim (); } } VSetNormal (); VStandEnd (); }
drawcmd () { int c; CURSOR cursor; if (H==LINES-7 && strlen (cur->shortcwd) + 3 + esclen (command) > 79) { fullscreen (); draw (); } for (c=H+5; c<LINES-1; ++c) { VMove (c, 0); VClearLine (); } VSetDim (); VMPutString (H+5, 0, cur->shortcwd); VSetBold (); VPutString (" > "); VSetNormal (); cursor = VGetCursor (); putescstr (command); if (c = command [cpos]) { VSetCursor (cursor); command [cpos] = 0; putescstr (command); command [cpos] = c; } }
static void drawmenu (struct menu *m) { register i, reverse; VClearBox (1, m->col-1, m->hgh+3, m->wid+4); VSetBold (); VDrawBox (1, m->col, m->hgh+2, m->wid+2); VSetDim (); for (i=0; m->submenu[i].name; ++i) if (! m->submenu[i].name[0]) VHorLine (i+2, m->col+2, m->wid-2); VSetNormal (); for (i=0; m->submenu[i].name; ++i) { if (! m->submenu[i].name[0]) continue; reverse = 0; if (i == m->nsm) reverse = VStandOut (); else if (! m->submenu[i].active) VSetDim (); VMove (2+i, m->col+1); VPutChar (i==m->nsm && !reverse ? '[' : ' '); VPrint ("%c %-*s", m->submenu[i].tag ? '*' : ' ', m->wid-4, m->submenu[i].name); VPutChar (i==m->nsm && !reverse ? ']' : ' '); if (i == m->nsm) VStandEnd (); else if (! m->submenu[i].active) VSetNormal (); } }
/* cmd, com */ void quitdeco(void) { VMove (LINES-1, 0); VClearLine (); VSync (); v.VClose (); exit (0); }
void run_unix () { static char command[COMMAND_LENGTH] = ""; register char *s; register ret, o_errno; CURSOR Old; if ((s = getstring(COMMAND_LENGTH, command, "Выполнение команды SHELL", "Введите команду SHELL")) != NULL) { strncpy (command, s, COMMAND_LENGTH); Old = VGetCursor (); VMove (0, 0); VSync (); VIClear (); VFlush (); s = strcmp (command, "") == 0 ? "/bin/sh" : command; TtyReset (); ret = system (s); o_errno = errno; /* VRedraw () портит errno */ fprintf (stderr, "Нажмите 'Enter' для продолжения."); (void) getchar (); TtySet (); VSetCursor( Old ); VRedraw (); if (ret == -1) error ("SHELL : %s", sys_errlist[o_errno]); } }
void run_dos () { static char command[COMMAND_LENGTH] = ""; register char *s; register ret, o_errno; CURSOR Old; if ((s = getstring(COMMAND_LENGTH, command, "Выполнение команды DOS", "Введите команду DOS")) != NULL) { strncpy (command, s, COMMAND_LENGTH); _dos_setvect (0x1C, old_timer); Old = VGetCursor (); VMove (0, 0); VSync (); VIClear (); s = strcmp (command, "") == 0 ? "COMMAND.COM" : command; ret = system (s); o_errno = errno; /* VRedraw () портит errno */ fprintf (stderr, "Нажмите 'Enter' для продолжения."); (void) getchar (); VSetCursor( Old ); VRedraw (); _dos_setvect (0x1C, timer_int); old_addr = -1; if (ret == -1) error ("DOS : %s", sys_errlist[o_errno]); } }
void doquit() { if (! saved_batch && loaded_batch) save_batch (); VMove (LINES - 1, 0); VClearLine (); VMove (LINES - 2, 0); VSetPalette (2, 0, 7, 1, 15, 0, 15, 7, 14, 0, 15, 1); VSetBold (); VSync (); VClose (); # ifdef MSDOS _dos_setvect (0x1C, old_timer); # endif exit (0); }
static void printudm () { register n; for (n=0; n<nm; ++n) { VMove (menurow+n, menucol+1); switch (um[n].key) { case 1: VPutString ("F1"); break; case 2: VPutString ("F2"); break; case 3: VPutString ("F3"); break; case 4: VPutString ("F4"); break; case 5: VPutString ("F5"); break; case 6: VPutString ("F6"); break; case 7: VPutString ("F7"); break; case 8: VPutString ("F8"); break; case 9: VPutString ("F9"); break; default: VPutChar (um[n].key); break; } if (um[n].menu) VMPutString (menurow+n, menucol+3, "->"); if (um[n].str) VMPutString (menurow+n, menucol+5, um[n].str); } }
static char *editstring (int r, int c, int w, char *str, int cp) { register key, k; int firstkey = 1; if (cp) { for (cp=0; str[cp]; ++cp); firstkey = 0; } for (; ; firstkey=0) { VClearBox (r, c, 1, w); VMPutString (r, c, str); VMove (r, c+cp); VSync (); switch (key = KeyGet ()) { default: if (key<' ' || (key>'~' && key<0300) || key>0377) { VBeep (); continue; } if (firstkey) { str[0] = key; str[1] = 0; cp = 1; continue; } for (k=cp; str[k]; ++k) SWAP (key, str[k]); str [k] = key; str [w] = str [k+1] = 0; /* fall through */ case meta ('r'): /* right */ if (str [cp]) { ++cp; if (cp >= w) cp = w-1; } continue; case meta ('l'): /* left */ if (--cp < 0) cp = 0; continue; case cntrl (']'): /* redraw screen */ VRedraw (); continue; case cntrl ('C'): case cntrl ('['): case meta ('J'): /* f0 */ return (0); case cntrl ('M'): case cntrl ('J'): return (str); case cntrl ('I'): if (str [cp]) while (str [++cp]); else cp = 0; continue; case meta ('h'): /* home */ cp = 0; continue; case meta ('e'): /* end */ while (str [cp]) ++cp; continue; case meta ('b'): /* back space */ if (cp) { for (k=cp--; str[k]; ++k) str[k-1] = str[k]; str [k-1] = 0; } continue; case cntrl ('G'): /* delete */ if (! str [cp]) continue; for (k=cp+1; str[k]; ++k) str[k-1] = str[k]; str [k-1] = 0; continue; case cntrl ('Y'): /* clear line */ str [cp = 0] = 0; continue; } } }