home *** CD-ROM | disk | FTP | other *** search
/ Mega Top 1 / os2_top1.zip / os2_top1 / APPS / UTILS / H-O / LESS177 / OPTTBL.C < prev    next >
C/C++ Source or Header  |  1993-01-17  |  7KB  |  272 lines

  1. /*
  2.  * The option table.
  3.  */
  4.  
  5. #include "less.h"
  6. #include "option.h"
  7.  
  8. extern int globnocase;
  9. extern int showZfile;
  10.  
  11. #define    toupper(c)    ((c)-'a'+'A')
  12.  
  13. /*
  14.  * Variables controlled by command line options.
  15.  */
  16. public int quiet;        /* Should we suppress the audible bell? */
  17. public int how_search;        /* Where should forward searches start? */
  18. public int top_scroll;        /* Repaint screen from top?
  19.                    (alternative is scroll from bottom) */
  20. public int pr_type;        /* Type of prompt (short, medium, long) */
  21. public int bs_mode;        /* How to process backspaces */
  22. public int know_dumb;        /* Don't complain about dumb terminals */
  23. public int quit_at_eof;        /* Quit after hitting end of file twice */
  24. public int squeeze;        /* Squeeze multiple blank lines into one */
  25. public int tabstop;        /* Tab settings */
  26. public int back_scroll;        /* Repaint screen on backwards movement */
  27. public int forw_scroll;        /* Repaint screen on forward movement */
  28. public int twiddle;        /* Display "~" for lines after EOF */
  29. public int caseless;        /* Do "caseless" searches */
  30. public int linenums;        /* Use line numbers */
  31. public int cbufs;        /* Current number of buffers */
  32. public int autobuf;        /* Automatically allocate buffers as needed */
  33. public int nohelp;        /* Disable the HELP command */
  34. public int ctldisp;        /* Send control chars to screen untranslated */
  35. public int force_open;        /* Open the file even if not regular file */
  36. public int swindow;        /* Size of scrolling window */
  37. public int jump_sline;        /* Screen line of "jump target" */
  38. public int chopline;        /* Truncate displayed lines at screen width */
  39. #if __MSDOS__
  40. public int output_mode;        /* Which screen output method */
  41. public int refresh_on_quit;    /* Repaint screen on quit, if possible */
  42. #endif
  43.  
  44. /*
  45.  * Table of all options and their semantics.
  46.  */
  47. static struct option option[] =
  48. {
  49.     { 'a', BOOL, 0, &how_search, NULL,
  50.         "Search includes displayed screen",
  51.         "Search skips displayed screen",
  52.         NULL
  53.     },
  54.     { 'b', NUMBER, 10, &cbufs, opt_b, 
  55.         "Buffers: ",
  56.         "%d buffers",
  57.         NULL
  58.     },
  59.     { 'B', BOOL, 1, &autobuf, NULL,
  60.         "Don't automatically allocate buffers",
  61.         "Automatically allocate buffers when needed",
  62.         NULL
  63.     },
  64.     { 'c', TRIPLE, 0, &top_scroll, NULL,
  65.         "Repaint by scrolling from bottom of screen",
  66.         "Repaint by clearing each line",
  67.         "Repaint by painting from top of screen"
  68.     },
  69.     { 'd', BOOL|NO_TOGGLE, 0, &know_dumb, NULL,
  70.         "Assume intelligent terminal",
  71.         "Assume dumb terminal",
  72.         NULL
  73.     },
  74.     { 'e', TRIPLE, 0, &quit_at_eof, NULL,
  75.         "Don't quit at end-of-file",
  76.         "Quit at end-of-file",
  77.         "Quit immediately at end-of-file"
  78.     },
  79.     { 'f', BOOL, 0, &force_open, NULL,
  80.         "Open only regular files",
  81.         "Open even non-regular files",
  82.         NULL
  83.     },
  84.     { 'h', NUMBER, -1, &back_scroll, NULL,
  85.         "Backwards scroll limit: ",
  86.         "Backwards scroll limit is %d lines",
  87.         NULL
  88.     },
  89.     { 'H', BOOL|NO_TOGGLE, 0, &nohelp, NULL,
  90.         "Allow help command",
  91.         "Don't allow help command",
  92.         NULL
  93.     },
  94.     { 'i', BOOL, 0, &caseless, NULL,
  95.         "Case is significant in searches",
  96.         "Ignore case in searches",
  97.         NULL
  98.     },
  99.     { 'I', BOOL, 1, &globnocase, NULL,
  100.         "Case is significant in globbing",
  101.         "Ignore case in globbing",
  102.         NULL
  103.     },
  104.     { 'j', NUMBER, 1, &jump_sline, NULL,
  105.         "Target line: ",
  106.         "Position target at screen line %d",
  107.         NULL
  108.     },
  109. #if USERFILE
  110.     { 'k', STRING|NO_TOGGLE, 0, NULL, opt_k,
  111.         NULL, NULL, NULL
  112.     },
  113. #endif
  114. #if LOGFILE
  115.     { 'l', STRING, 0, NULL, opt_l,
  116.         NULL, NULL, NULL
  117.     },
  118.     { 'L', STRING, 0, NULL, opt__L,
  119.         NULL, NULL, NULL
  120.     },
  121. #endif
  122.     { 'm', TRIPLE, 0, &pr_type, NULL,
  123.         "Short prompt",
  124.         "Medium prompt",
  125.         "Long prompt"
  126.     },
  127.     { 'n', TRIPLE|REPAINT, 1, &linenums, NULL,
  128.         "Don't use line numbers",
  129.         "Use line numbers",
  130.         "Constantly display line numbers"
  131.     },
  132. #if LOGFILE
  133.     { 'o', STRING, 0, NULL, opt_o,
  134.         "log file: ", NULL, NULL
  135.     },
  136.     { 'O', STRING, 0, NULL, opt__O,
  137.         "Log file: ", NULL, NULL
  138.     },
  139. #endif
  140.     { 'p', STRING|NO_TOGGLE, 0, NULL, opt_p,
  141.         NULL, NULL, NULL
  142.     },
  143.     { 'P', STRING, 0, NULL, opt__P,
  144.         "prompt: ", NULL, NULL
  145.     },
  146.     { 'q', TRIPLE, 0, &quiet, NULL,
  147.         "Ring the bell for errors AND at eof/bof",
  148.         "Ring the bell for errors but not at eof/bof",
  149.         "Never ring the bell"
  150.     },
  151.     { 'r', BOOL|REPAINT, 1, &ctldisp, NULL,
  152.         "Display control characters directly",
  153.         "Display control characters as ^X",
  154.         NULL
  155.     },
  156. #if __MSDOS__
  157.     { 'R', BOOL|REPAINT, 0, &refresh_on_quit, NULL,
  158.         "Don't repaint screen on quit",
  159.         "Repaint screen on quit",
  160.         NULL
  161.     },
  162. #endif
  163.     { 's', BOOL|REPAINT, 0, &squeeze, NULL,
  164.         "Display all blank lines",
  165.         "Squeeze multiple blank lines",
  166.         NULL
  167.     },
  168.     { 'S', BOOL|REPAINT, 0, &chopline, NULL,
  169.         "Fold long lines",
  170.         "Chop long lines",
  171.         NULL
  172.     },
  173. #if TAGS
  174.     { 't', STRING, 0, NULL, opt_t,
  175.         "tag: ", NULL, NULL
  176.     },
  177.     { 'T', STRING, 0, NULL, opt__T,
  178.         "tags file: ", NULL, NULL
  179.     },
  180. #endif
  181.     { 'u', TRIPLE|REPAINT, 0, &bs_mode, NULL,
  182.         "Display underlined text in underline mode",
  183.         "Backspaces cause overstrike",
  184.         "Print backspace as ^H"
  185.     },
  186. #if __MSDOS__
  187.     { 'v', TRIPLE|NO_TOGGLE, 0, &output_mode, opt_v,
  188.         "Output is to standard output, using ansi screen control",
  189.         "Output is to video BIOS",
  190.         "Output is directly to memory mapped video"
  191.     },
  192. #endif
  193.     { 'w', BOOL|REPAINT, 1, &twiddle, NULL,
  194.         "Display nothing for lines after end-of-file",
  195.         "Display ~ for lines after end-of-file",
  196.         NULL
  197.     },
  198. #if __MSDOS__
  199. #if MOVE_WINDOW
  200. #define    W_FLAGS    STRING
  201. #else
  202. #define    W_FLAGS    STRING|NO_TOGGLE
  203. #endif
  204.     { 'W', W_FLAGS, 0, NULL, opt_W,
  205.         "window boundaries: ", NULL, NULL
  206.     },
  207. #undef W_FLAGS
  208. #endif
  209.     { 'x', NUMBER|REPAINT, 8, &tabstop, NULL,
  210.         "Tab stops: ",
  211.         "Tab stops every %d spaces", 
  212.         NULL
  213.     },
  214.     { 'y', NUMBER, -1, &forw_scroll, NULL,
  215.         "Forward scroll limit: ",
  216.         "Forward scroll limit is %d lines",
  217.         NULL
  218.     },
  219.     { 'z', NUMBER, -1, &swindow, NULL,
  220.         "Scroll window size: ",
  221.         "Scroll window size is %d lines",
  222.         NULL
  223.     },
  224.     { 'Z', BOOL, 1, &showZfile, NULL,
  225.         "Do not uncompress compressed file",
  226.         "Uncompress compressed file",
  227.         NULL
  228.     },
  229.     { '?', NOVAR, 0, NULL, opt_query,
  230.         NULL, NULL, NULL
  231.     },
  232.     { '\0' }
  233. };
  234.  
  235.  
  236. /*
  237.  * Initialize each option to its default value.
  238.  */
  239.     public void
  240. init_option()
  241. {
  242.     register struct option *o;
  243.  
  244.     for (o = option;  o->oletter != '\0';  o++)
  245.     {
  246.         /*
  247.          * Set each variable to its default.
  248.          */
  249.         if (o->ovar != NULL)
  250.             *(o->ovar) = o->odefault;
  251.     }
  252. }
  253.  
  254. /*
  255.  * Find an option in the option table.
  256.  */
  257.     public struct option *
  258. findopt(c)
  259.     int c;
  260. {
  261.     register struct option *o;
  262.  
  263.     for (o = option;  o->oletter != '\0';  o++)
  264.     {
  265.         if (o->oletter == c)
  266.             return (o);
  267.         if ((o->otype & TRIPLE) && toupper(o->oletter) == c)
  268.             return (o);
  269.     }
  270.     return (NULL);
  271. }
  272.