home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / usr.bin / window / cmd2.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-18  |  5.4 KB  |  153 lines

  1. /*
  2.  * Copyright (c) 1983 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * This code is derived from software contributed to Berkeley by
  6.  * Edward Wang at The University of California, Berkeley.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  * 2. Redistributions in binary form must reproduce the above copyright
  14.  *    notice, this list of conditions and the following disclaimer in the
  15.  *    documentation and/or other materials provided with the distribution.
  16.  * 3. All advertising materials mentioning features or use of this software
  17.  *    must display the following acknowledgement:
  18.  *    This product includes software developed by the University of
  19.  *    California, Berkeley and its contributors.
  20.  * 4. Neither the name of the University nor the names of its contributors
  21.  *    may be used to endorse or promote products derived from this software
  22.  *    without specific prior written permission.
  23.  *
  24.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  25.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  27.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  28.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  30.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  31.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  32.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  33.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  34.  * SUCH DAMAGE.
  35.  */
  36.  
  37. #ifndef lint
  38. static char sccsid[] = "@(#)cmd2.c    3.40 (Berkeley) 6/6/90";
  39. #endif /* not lint */
  40.  
  41. #include "defs.h"
  42.  
  43. char *help_shortcmd[] = {
  44.     "#       Select window # and return to conversation mode",
  45.     "%#      Select window # but stay in command mode",
  46.     "escape  Return to conversation mode without changing window",
  47.     "^^      Return to conversation mode and change to previous window",
  48.     "c#      Close window #",
  49.     "w       Open a new window",
  50.     "m#      Move window #",
  51.     "M#      Move window # to its previous position",
  52.     "s#      Change the size of window #",
  53.     "S#      Change window # to its previous size",
  54.     "^Y      Scroll up one line",
  55.     "^E      Scroll down one line",
  56.     "^U      Scroll up half a window",
  57.     "^D      Scroll down half a window",
  58.     "^B      Scroll up a full window",
  59.     "^F      Scroll down a full window",
  60.     "h       Move cursor left",
  61.     "j       Move cursor down",
  62.     "k       Move cursor up",
  63.     "l       Move cursor right",
  64.     "^S      Stop output in current window",
  65.     "^Q      Restart output in current window",
  66.     "^L      Redraw screen",
  67.     "^Z      Suspend",
  68.     "q       Quit",
  69.     ":       Enter a long command",
  70.     0
  71. };
  72. char *help_longcmd[] = {
  73.     ":alias name string ...  Make `name' an alias for `string ...'",
  74.     ":alias                  Show all aliases",
  75.     ":close # ...            Close windows",
  76.     ":close all              Close all windows",
  77.     ":cursor modes           Set the cursor modes",
  78.     ":echo # string ...      Print `string ...' in window #",
  79.     ":escape c               Set escape character to `c'",
  80.     ":foreground # flag      Make # a foreground window, if `flag' is true",
  81.     ":label # string         Set label of window # to `string'",
  82.     ":list                   List all open windows",
  83.     ":default_nline lines    Set default window buffer size to `lines'",
  84.     ":default_shell string ...",
  85.     "                        Set default shell to `string ...'",
  86.     ":default_smooth flag    Set default smooth scroll flag",
  87.     ":select #               Select window #",
  88.     ":smooth # flag          Set window # to smooth scroll mode",
  89.     ":source filename        Execute commands in `filename'",
  90.     ":terse flag             Set terse mode",
  91.     ":unalias name           Undefine `name' as an alias",
  92.     ":unset variable         Deallocate `variable'",
  93.     ":variable               List all variables",
  94.     ":window [row col nrow ncol nline label pty frame mapnl keepopen smooth shell]",
  95.     "                        Open a window at `row', `col' of size `nrow', `ncol',",
  96.     "                        with `nline' lines in the buffer, and `label'",
  97.     ":write # string ...     Write `string ...' to window # as input",
  98.     0
  99. };
  100.  
  101. c_help()
  102. {
  103.     register struct ww *w;
  104.  
  105.     if ((w = openiwin(wwnrow - 3, "Help")) == 0) {
  106.         error("Can't open help window: %s.", wwerror());
  107.         return;
  108.     }
  109.     wwprintf(w, "The escape character is %c.\n", escapec);
  110.     wwprintf(w, "(# represents one of the digits from 1 to 9.)\n\n");
  111.     if (help_print(w, "Short commands", help_shortcmd) >= 0)
  112.         (void) help_print(w, "Long commands", help_longcmd);
  113.     closeiwin(w);
  114. }
  115.  
  116. help_print(w, name, list)
  117. register struct ww *w;
  118. char *name;
  119. register char **list;
  120. {
  121.     wwprintf(w, "%s:\n\n", name);
  122.     while (*list)
  123.         switch (more(w, 0)) {
  124.         case 0:
  125.             wwputs(*list++, w);
  126.             wwputc('\n', w);
  127.             break;
  128.         case 1:
  129.             wwprintf(w, "%s: (continued)\n\n", name);
  130.             break;
  131.         case 2:
  132.             return -1;
  133.         }
  134.     return more(w, 1) == 2 ? -1 : 0;
  135. }
  136.  
  137. c_quit()
  138. {
  139.     char oldterse = terse;
  140.  
  141.     setterse(0);
  142.     wwputs("Really quit [yn]? ", cmdwin);
  143.     wwcurtowin(cmdwin);
  144.     while (wwpeekc() < 0)
  145.         wwiomux();
  146.     if (wwgetc() == 'y') {
  147.         wwputs("Yes", cmdwin);
  148.         quit++;
  149.     } else
  150.         wwputc('\n', cmdwin);
  151.     setterse(!quit && oldterse);
  152. }
  153.