113979Sedward #ifndef lint 2*16116Sedward static char *sccsid = "@(#)cmd2.c 3.23 84/03/03"; 313979Sedward #endif 413979Sedward 513979Sedward #include "defs.h" 613979Sedward 715675Sedward char *help_shortcmd[] = { 815675Sedward "{1-9} Select window {1-9} and return to conversation mode.", 915675Sedward "%{1-9} Select window {1-9} but stay in command mode.", 1015675Sedward "escape Return to conversation mode", 1115675Sedward " and don't change the current window.", 1215675Sedward "^^ Return to conversation mode", 1315675Sedward " and change to previously selected window.", 1415675Sedward "c{1-9} Close window {1-9}.", 1515675Sedward "C Close all windows.", 1615675Sedward "S Show all windows in sequence.", 1715675Sedward "L List all windows with their labels.", 1815675Sedward "w Open a new window.", 1915675Sedward "m{1-9} Move window {1-9}.", 2015675Sedward "M{1-9} Move window {1-9} to previous position.", 2115675Sedward "v List all variables.", 2215675Sedward "{^Y^E} Scroll {up, down} one line", 2315675Sedward "{^U^D} Scroll {up, down} half a window.", 2415675Sedward "{^B^F} Scroll {up, down} a full window.", 2515675Sedward "{hjkl} Move cursor {left, down, up, right}.", 2615675Sedward "^L Redraw screen.", 2715675Sedward "^Z Suspend.", 2815675Sedward "q Quit.", 2915675Sedward 0 3015675Sedward }; 3115675Sedward char *help_longcmd[] = { 3215675Sedward ":%{1-9} Select window {1-9}.", 3315675Sedward ":buffer lines Set the default window buffer size.", 3415675Sedward ":close {1-9} Close window.", 3515675Sedward ":cursor modes Set the cursor modes.", 3615675Sedward ":escape C Set escape character to C.", 3715675Sedward ":label {1-9} string Label window {1-9}.", 3815675Sedward ":source filename Execute commands in ``filename''.", 3915675Sedward ":terse [off] Turn on (or off) terse mode.", 4015845Sedward ":unset variable Deallocate ``variable''.", 4115675Sedward ":window row col nrow ncol [nline label]", 4215675Sedward " Open a window at ``row'', ``col''", 4315675Sedward " of size ``nrow'', ``ncol'',", 4415675Sedward " with ``nline'', and ``label''.", 4515675Sedward ":write {1-9} string Write ``string'' to window {1-9}.", 4615675Sedward 0 4715675Sedward }; 4815675Sedward 4914408Sedward c_help() 5013979Sedward { 5113979Sedward register struct ww *w; 5213979Sedward 5314665Sedward if ((w = openiwin(wwnrow - 3, "Help")) == 0) { 5414857Sedward error("Can't open help window: %s.", wwerror()); 5513979Sedward return; 5614027Sedward } 57*16116Sedward wwprintf(w, "The escape character is %s, which gets you into command mode.\n\n", 5814189Sedward unctrl(escapec)); 5915856Sedward if (help_print(w, "Short commands", help_shortcmd) >= 0) 6015856Sedward (void) help_print(w, "Long commands", help_longcmd); 6114408Sedward closeiwin(w); 6213979Sedward } 6313979Sedward 6415675Sedward help_print(w, name, list) 6515675Sedward register struct ww *w; 6615675Sedward char *name; 6715856Sedward register char **list; 6815675Sedward { 69*16116Sedward wwprintf(w, "%s:\n\n", name); 7015856Sedward while (*list) 7115856Sedward switch (more(w, 0)) { 7215856Sedward case 0: 73*16116Sedward wwputs(*list++, w); 74*16116Sedward wwputc('\n', w); 7515856Sedward break; 7615856Sedward case 1: 77*16116Sedward wwprintf(w, "%s: (continued)\n\n", name); 7815856Sedward break; 7915856Sedward case 2: 8015856Sedward return -1; 8115675Sedward } 8215856Sedward return more(w, 1) == 2 ? -1 : 0; 8315675Sedward } 8415675Sedward 8515364Sedward #ifndef O_4_1A 8614408Sedward char *strtime(); 8714408Sedward 8814408Sedward c_time(flag) 8913979Sedward { 9013979Sedward register struct ww *w; 9113979Sedward struct rusage rusage; 9213979Sedward struct timeval timeval; 9313979Sedward 9414408Sedward if ((w = openiwin(6, "Timing and Resource Usage")) == 0) { 9514857Sedward error("Can't open time window: %s.", wwerror()); 9613979Sedward return; 9714027Sedward } 9813979Sedward 99*16116Sedward (void) gettimeofday(&timeval, (struct timezone *)0); 10013979Sedward timeval.tv_sec -= starttime.tv_sec; 10113979Sedward if ((timeval.tv_usec -= starttime.tv_usec) < 0) { 10213979Sedward timeval.tv_sec--; 10313979Sedward timeval.tv_usec += 1000000; 10413979Sedward } 10514408Sedward (void) getrusage(flag, &rusage); 10613979Sedward 107*16116Sedward wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\n"); 108*16116Sedward wwprintf(w, "%-16s", strtime(&timeval)); 109*16116Sedward wwprintf(w, "%-16s", strtime(&rusage.ru_utime)); 110*16116Sedward wwprintf(w, "%-16s", strtime(&rusage.ru_stime)); 111*16116Sedward wwprintf(w, "%D\t%D\t%D\t%D\n", 11213979Sedward rusage.ru_maxrss, rusage.ru_ixrss, 11313979Sedward rusage.ru_idrss, rusage.ru_isrss); 114*16116Sedward wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\n"); 115*16116Sedward wwprintf(w, "%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\n", 11613979Sedward rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap, 11713979Sedward rusage.ru_inblock, rusage.ru_oublock, 11813979Sedward rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals, 11913979Sedward rusage.ru_nvcsw, rusage.ru_nivcsw); 12013979Sedward 12113994Sedward waitnl(w); 12214408Sedward closeiwin(w); 12313979Sedward } 12413979Sedward 12513979Sedward char * 12613979Sedward strtime(t) 12713979Sedward register struct timeval *t; 12813979Sedward { 12913979Sedward char fill = 0; 13013979Sedward static char buf[20]; 13113979Sedward register char *p = buf; 13213979Sedward 13313979Sedward if (t->tv_sec > 60*60) { 13414408Sedward (void) sprintf(p, "%D:", t->tv_sec / (60*60)); 13513979Sedward while (*p++) 13613979Sedward ; 13713979Sedward p--; 13813979Sedward t->tv_sec %= 60*60; 13913979Sedward fill++; 14013979Sedward } 14113979Sedward if (t->tv_sec > 60) { 14214408Sedward (void) sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60); 14313979Sedward while (*p++) 14413979Sedward ; 14513979Sedward p--; 14613979Sedward t->tv_sec %= 60; 14713979Sedward fill++; 14813979Sedward } 14914408Sedward (void) sprintf(p, fill ? "%02D.%02d" : "%D.%02D", 15013979Sedward t->tv_sec, t->tv_usec / 10000); 15113979Sedward return buf; 15213979Sedward } 15315364Sedward #endif 15413979Sedward 15514408Sedward c_stat() 15614073Sedward { 15714073Sedward register struct ww *w; 15814073Sedward 159*16116Sedward if ((w = openiwin(14, "IO Statistics")) == 0) { 16014857Sedward error("Can't open statistics window: %s.", wwerror()); 16114073Sedward return; 16214073Sedward } 163*16116Sedward wwprintf(w, "ttflush\twrite\terror\tzero\tchar\n"); 164*16116Sedward wwprintf(w, "%d\t%d\t%d\t%d\t%d\n", 165*16116Sedward wwnflush, wwnwr, wwnwre, wwnwrz, wwnwrc); 166*16116Sedward wwprintf(w, "wwwrite\tattmpt\tchar\n"); 167*16116Sedward wwprintf(w, "%d\t%d\t%d\n", 168*16116Sedward wwnwwr, wwnwwra, wwnwwrc); 169*16116Sedward wwprintf(w, "wwupdat\tline\tmiss\tmajor\tmiss\n"); 170*16116Sedward wwprintf(w, "%d\t%d\t%d\t%d\t%d\n", 17115872Sedward wwnupdate, wwnupdline, wwnupdmiss, wwnmajline, wwnmajmiss); 172*16116Sedward wwprintf(w, "select\terror\tzero\n"); 173*16116Sedward wwprintf(w, "%d\t%d\t%d\n", 174*16116Sedward wwnselect, wwnselecte, wwnselectz); 175*16116Sedward wwprintf(w, "read\terror\tzero\tchar\n"); 176*16116Sedward wwprintf(w, "%d\t%d\t%d\t%d\n", 177*16116Sedward wwnread, wwnreade, wwnreadz, wwnreadc); 178*16116Sedward wwprintf(w, "ptyread\terror\tzero\tcontrol\tdata\tchar\n"); 179*16116Sedward wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\n", 180*16116Sedward wwnwread, wwnwreade, wwnwreadz, 181*16116Sedward wwnwreadp, wwnwreadd, wwnwreadc); 18214073Sedward waitnl(w); 18314408Sedward closeiwin(w); 18414073Sedward } 18514073Sedward 18614408Sedward c_list() 18714189Sedward { 18814893Sedward register struct ww *w, *wp; 18914408Sedward register i; 19014408Sedward int n; 19114189Sedward 19214408Sedward for (n = 0, i = 0; i < NWINDOW; i++) 19314408Sedward if (window[i] != 0) 19414408Sedward n++; 19515675Sedward if (n == 0) { 19615675Sedward error("No windows."); 19715675Sedward return; 19815675Sedward } 19915675Sedward if ((w = openiwin(n + 2, "Windows")) == 0) { 20014857Sedward error("Can't open listing window: %s.", wwerror()); 20114189Sedward return; 20214189Sedward } 20315675Sedward for (i = 0; i < NWINDOW; i++) { 20415675Sedward if ((wp = window[i]) == 0) 20515675Sedward continue; 206*16116Sedward wwprintf(w, "%c %c %-13s %-.*s\n", 20715675Sedward wp == selwin ? '*' : ' ', 20815675Sedward i + '1', 20915856Sedward wp->ww_state == WWS_HASPROC ? "" : "(No process)", 21015675Sedward wwncol - 20, 21115856Sedward wp->ww_label ? wp->ww_label : "(No label)"); 21214189Sedward } 21314189Sedward waitnl(w); 21414408Sedward closeiwin(w); 21514189Sedward } 21614189Sedward 21714408Sedward c_quit() 21814027Sedward { 21914189Sedward if (terse) 22014408Sedward wwadd(cmdwin, &wwhead); 221*16116Sedward wwputs("Really quit [yn]? ", cmdwin); 22214408Sedward wwcurtowin(cmdwin); 22315872Sedward while (wwpeekc() < 0) 22415872Sedward wwiomux(); 22515872Sedward if (wwgetc() == 'y') { 226*16116Sedward wwputs("Yes", cmdwin); 22714027Sedward quit++; 22814027Sedward } else 229*16116Sedward wwputs("\r\n", cmdwin); 23014408Sedward if (terse && !quit) 23114408Sedward wwdelete(cmdwin); 23214027Sedward } 233