113979Sedward #ifndef lint 2*15872Sedward static char *sccsid = "@(#)cmd2.c 3.22 84/01/16"; 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 } 5714660Sedward (void) 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 { 6915856Sedward (void) wwprintf(w, "%s:\n\n", name); 7015856Sedward while (*list) 7115856Sedward switch (more(w, 0)) { 7215856Sedward case 0: 7315856Sedward (void) wwputs(*list++, w); 7415675Sedward (void) wwputc('\n', w); 7515856Sedward break; 7615856Sedward case 1: 7715861Sedward (void) 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; 9314408Sedward struct timezone timezone; 9413979Sedward 9514408Sedward if ((w = openiwin(6, "Timing and Resource Usage")) == 0) { 9614857Sedward error("Can't open time window: %s.", wwerror()); 9713979Sedward return; 9814027Sedward } 9913979Sedward 10014408Sedward (void) gettimeofday(&timeval, &timezone); 10113979Sedward timeval.tv_sec -= starttime.tv_sec; 10213979Sedward if ((timeval.tv_usec -= starttime.tv_usec) < 0) { 10313979Sedward timeval.tv_sec--; 10413979Sedward timeval.tv_usec += 1000000; 10513979Sedward } 10614408Sedward (void) getrusage(flag, &rusage); 10713979Sedward 10814660Sedward (void) wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\n"); 10914408Sedward (void) wwprintf(w, "%-16s", strtime(&timeval)); 11014408Sedward (void) wwprintf(w, "%-16s", strtime(&rusage.ru_utime)); 11114408Sedward (void) wwprintf(w, "%-16s", strtime(&rusage.ru_stime)); 11214660Sedward (void) wwprintf(w, "%D\t%D\t%D\t%D\n", 11313979Sedward rusage.ru_maxrss, rusage.ru_ixrss, 11413979Sedward rusage.ru_idrss, rusage.ru_isrss); 11514660Sedward (void) wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\n"); 11614660Sedward (void) wwprintf(w, "%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\n", 11713979Sedward rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap, 11813979Sedward rusage.ru_inblock, rusage.ru_oublock, 11913979Sedward rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals, 12013979Sedward rusage.ru_nvcsw, rusage.ru_nivcsw); 12113979Sedward 12213994Sedward waitnl(w); 12314408Sedward closeiwin(w); 12413979Sedward } 12513979Sedward 12613979Sedward char * 12713979Sedward strtime(t) 12813979Sedward register struct timeval *t; 12913979Sedward { 13013979Sedward char fill = 0; 13113979Sedward static char buf[20]; 13213979Sedward register char *p = buf; 13313979Sedward 13413979Sedward if (t->tv_sec > 60*60) { 13514408Sedward (void) sprintf(p, "%D:", t->tv_sec / (60*60)); 13613979Sedward while (*p++) 13713979Sedward ; 13813979Sedward p--; 13913979Sedward t->tv_sec %= 60*60; 14013979Sedward fill++; 14113979Sedward } 14213979Sedward if (t->tv_sec > 60) { 14314408Sedward (void) sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60); 14413979Sedward while (*p++) 14513979Sedward ; 14613979Sedward p--; 14713979Sedward t->tv_sec %= 60; 14813979Sedward fill++; 14913979Sedward } 15014408Sedward (void) sprintf(p, fill ? "%02D.%02d" : "%D.%02D", 15113979Sedward t->tv_sec, t->tv_usec / 10000); 15213979Sedward return buf; 15313979Sedward } 15415364Sedward #endif 15513979Sedward 15614408Sedward c_stat() 15714073Sedward { 15814073Sedward register struct ww *w; 15914073Sedward 160*15872Sedward if ((w = openiwin(8, "IO Statistics")) == 0) { 16114857Sedward error("Can't open statistics window: %s.", wwerror()); 16214073Sedward return; 16314073Sedward } 164*15872Sedward (void) wwprintf(w, "nwrite\tnwritec\tnupdate\tnupdlin\tnupdmis\tnmajlin\tnmajmis\n"); 165*15872Sedward (void) wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\t%d\n", 166*15872Sedward wwnwrite, wwnwritec, 167*15872Sedward wwnupdate, wwnupdline, wwnupdmiss, wwnmajline, wwnmajmiss); 168*15872Sedward (void) wwprintf(w, "nsel\tnselz\tnsele\tnread\tnreadz\tnreade\tnreadc\n"); 169*15872Sedward (void) wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\t%d\n", 170*15872Sedward wwnselect, wwnselectz, wwnselecte, 171*15872Sedward wwnread, wwnreadz, wwnreade, wwnreadc); 172*15872Sedward (void) wwprintf(w, "nwread\tnwreadz\tnwreade\tnwreadd\tnwreadc\tnwreadp\n"); 17315653Sedward (void) wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\n", 174*15872Sedward wwnwread, wwnwreadz, wwnwreade, 175*15872Sedward wwnwreadd, wwnwreadc, wwnwreadp); 17614073Sedward waitnl(w); 17714408Sedward closeiwin(w); 17814073Sedward } 17914073Sedward 18014408Sedward c_list() 18114189Sedward { 18214893Sedward register struct ww *w, *wp; 18314408Sedward register i; 18414408Sedward int n; 18514189Sedward 18614408Sedward for (n = 0, i = 0; i < NWINDOW; i++) 18714408Sedward if (window[i] != 0) 18814408Sedward n++; 18915675Sedward if (n == 0) { 19015675Sedward error("No windows."); 19115675Sedward return; 19215675Sedward } 19315675Sedward if ((w = openiwin(n + 2, "Windows")) == 0) { 19414857Sedward error("Can't open listing window: %s.", wwerror()); 19514189Sedward return; 19614189Sedward } 19715675Sedward for (i = 0; i < NWINDOW; i++) { 19815675Sedward if ((wp = window[i]) == 0) 19915675Sedward continue; 20015675Sedward (void) wwprintf(w, "%c %c %-13s %-.*s\n", 20115675Sedward wp == selwin ? '*' : ' ', 20215675Sedward i + '1', 20315856Sedward wp->ww_state == WWS_HASPROC ? "" : "(No process)", 20415675Sedward wwncol - 20, 20515856Sedward wp->ww_label ? wp->ww_label : "(No label)"); 20614189Sedward } 20714189Sedward waitnl(w); 20814408Sedward closeiwin(w); 20914189Sedward } 21014189Sedward 21114408Sedward c_quit() 21214027Sedward { 21314189Sedward if (terse) 21414408Sedward wwadd(cmdwin, &wwhead); 21514408Sedward (void) wwputs("Really quit [yn]? ", cmdwin); 21614408Sedward wwcurtowin(cmdwin); 217*15872Sedward while (wwpeekc() < 0) 218*15872Sedward wwiomux(); 219*15872Sedward if (wwgetc() == 'y') { 22014408Sedward (void) wwputs("Yes", cmdwin); 22114027Sedward quit++; 22214027Sedward } else 22314408Sedward (void) wwputs("\r\n", cmdwin); 22414408Sedward if (terse && !quit) 22514408Sedward wwdelete(cmdwin); 22614027Sedward } 227