home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume26 / most-3.2 / part02 / keym.c next >
Encoding:
C/C++ Source or Header  |  1993-04-13  |  31.9 KB  |  1,411 lines

  1. #include <stdio.h>
  2. #include "externs.h"  
  3. #include "keym.h"
  4. #include "sysdep.h"
  5. #include "display.h"
  6. #include "buffer.h"
  7. #include "window.h"
  8. #include "search.h"
  9.  
  10. int *DIGIT_ARG;
  11. char LAST_CHAR;
  12. int EDT_DIRECTION = 1;
  13.  
  14. void (*root_map[128])() =
  15.   {
  16.       beep_cmd,                 /* ^@ */
  17.       beep_cmd,                 /* ^A */
  18.       beep_cmd,                 /* ^B */
  19.       beep_cmd,                 /* ^C */
  20.       page_down_cmd,            /* ^D */
  21.       beep_cmd, /* ^E */
  22.       search_cmd,               /* ^F */
  23.       beep_cmd, /* ^G */
  24.       help_cmd,                 /* ^H */
  25.       page_right_cmd,           /* ^I */
  26.       next_line_cmd,            /* ^J */
  27.       ctrl_k_map_cmd,           /* ^K */
  28.       beep_cmd, /* ^L */
  29.       next_line_cmd,            /* ^M */
  30.       next_line_cmd,            /* ^N */
  31.       beep_cmd, /* ^O */
  32.       previous_line_cmd,        /* ^P */
  33.       beep_cmd, /* ^Q */
  34.       redraw_cmd,               /* ^R */
  35.       beep_cmd, /* ^S */
  36.       time_cmd,                 /* ^T */
  37.       page_up_cmd,              /* ^U */
  38.       page_down_cmd,            /* ^V */
  39.       ctrl_w_map_cmd,           /* ^W */
  40.       ctrl_x_map_cmd,           /* ^X */
  41.       beep_cmd, /* ^Y */
  42.       sys_spawn_cmd,            /* ^Z */
  43.       esc_map_cmd,              /* ^[ */
  44.       beep_cmd, /* ^\ */
  45.       beep_cmd, /* ^] */
  46.       beep_cmd, /* ^^ */
  47.       beep_cmd, /* ^_ */
  48.       page_down_cmd,            /*   */
  49.       beep_cmd, /* ! */
  50.       beep_cmd, /* " */
  51.       beep_cmd, /* # */
  52.       sys_spawn_cmd,            /* $ */
  53.       goto_percent_cmd,         /* % */
  54.       beep_cmd, /* & */
  55.       beep_cmd, /* ' */
  56.       beep_cmd, /* ( */
  57.       beep_cmd, /* ) */
  58.       beep_cmd, /* * */
  59.       beep_cmd, /* + */
  60.       goto_mark_cmd,            /* , */
  61.       digit_arg_cmd,            /* - */
  62.       beep_cmd, /* . */
  63.       search_cmd,               /* / */
  64.       digit_arg_cmd,            /* 0 */
  65.       digit_arg_cmd,            /* 1 */
  66.       digit_arg_cmd,            /* 2 */
  67.       digit_arg_cmd,            /* 3 */
  68.       digit_arg_cmd,            /* 4 */
  69.       digit_arg_cmd,            /* 5 */
  70.       digit_arg_cmd,            /* 6 */
  71.       digit_arg_cmd,            /* 7 */
  72.       digit_arg_cmd,            /* 8 */
  73.       digit_arg_cmd,            /* 9 */
  74.       extended_key_cmd,         /* : */
  75.       beep_cmd, /* ; */
  76.       page_left_cmd,            /* < */
  77.       beep_cmd, /* = */
  78.       page_right_cmd,           /* > */
  79.       search_back_cmd,          /* ? */
  80.       beep_cmd, /* @ */
  81.       beep_cmd, /* A */
  82.       end_of_buffer_cmd,        /* B */
  83.       beep_cmd, /* C */
  84.       page_down_cmd,            /* D */
  85.       edit_cmd, /* E */
  86.       search_cmd,               /* F */
  87.       goto_line_cmd,            /* G */
  88.       help_cmd,                 /* H */
  89.       beep_cmd, /* I */
  90.       goto_line_cmd,            /* J */
  91.       beep_cmd, /* K */
  92.       toggle_lock,              /* L */
  93.       set_mark_cmd,             /* M */
  94.       find_next_cmd,            /* N */
  95.       other_window_cmd,         /* O */
  96.       beep_cmd, /* P */
  97.       exit_cmd,                 /* Q */
  98.       redraw_cmd,               /* R */
  99.       beep_cmd, /* S */
  100.       top_of_buffer_cmd,        /* T */
  101.       page_up_cmd,              /* U */
  102.       next_line_cmd,            /* V */
  103.       toggle_width_cmd,         /* W */
  104.       exit_cmd, /* X */
  105.       beep_cmd, /* Y */
  106.       beep_cmd, /* Z */
  107.       beep_cmd, /* [ */
  108.       beep_cmd, /* \ */
  109.       beep_cmd, /* ] */
  110.       beep_cmd, /* ^ */
  111.       beep_cmd, /* _ */
  112.       beep_cmd, /* ` */
  113.       beep_cmd, /* a */
  114.       end_of_buffer_cmd,        /* b */
  115.       beep_cmd, /* c */
  116.       page_down_cmd,            /* d */
  117.       edit_cmd, /* e */
  118.       search_cmd,               /* f */
  119.       goto_line_cmd,            /* g */
  120.       help_cmd,                 /* h */
  121.       beep_cmd, /* i */
  122.       goto_line_cmd,            /* j */
  123.       beep_cmd, /* k */
  124.       toggle_lock,              /* l */
  125.       set_mark_cmd,             /* m */
  126.       find_next_cmd,            /* n */
  127.       other_window_cmd,         /* o */
  128.       beep_cmd, /* p */
  129.       exit_cmd,                 /* q */
  130.       redraw_cmd,               /* r */
  131.       beep_cmd, /* s */
  132.       top_of_buffer_cmd,        /* t */
  133.       page_up_cmd,              /* u */
  134.       next_line_cmd,            /* v */
  135.       toggle_width_cmd,         /* w */
  136.       exit_cmd, /* x */
  137.       beep_cmd, /* y */
  138.       beep_cmd, /* z */
  139.       beep_cmd, /* { */
  140.       beep_cmd, /* | */
  141.       beep_cmd, /* } */
  142.       beep_cmd, /* ~ */
  143.       page_up_cmd               /* ^? */
  144.     };
  145.  
  146. /*  escape map  */
  147. void (*escape_map[128])() =
  148.   {
  149.       beep_cmd, /* ^@ */
  150.       beep_cmd, /* ^A */
  151.       beep_cmd, /* ^B */
  152.       beep_cmd, /* ^C */
  153.       beep_cmd, /* ^D */
  154.       beep_cmd, /* ^E */
  155.       beep_cmd, /* ^F */
  156.       beep_cmd, /* ^G */
  157.       beep_cmd, /* ^H */
  158.       beep_cmd, /* ^I */
  159.       beep_cmd, /* ^J */
  160.       beep_cmd, /* ^K */
  161.       beep_cmd, /* ^L */
  162.       beep_cmd, /* ^M */
  163.       beep_cmd, /* ^N */
  164.       beep_cmd, /* ^O */
  165.       beep_cmd, /* ^P */
  166.       beep_cmd, /* ^Q */
  167.       beep_cmd, /* ^R */
  168.       beep_cmd, /* ^S */
  169.       beep_cmd, /* ^T */
  170.       beep_cmd, /* ^U */
  171.       beep_cmd, /* ^V */
  172.       beep_cmd, /* ^W */
  173.       beep_cmd, /* ^X */
  174.       beep_cmd, /* ^Y */
  175.       beep_cmd, /* ^Z */
  176.       beep_cmd, /* ^[ */
  177.       beep_cmd, /* ^\ */
  178.       beep_cmd, /* ^] */
  179.       beep_cmd, /* ^^ */
  180.       beep_cmd, /* ^_ */
  181.       beep_cmd, /*   */
  182.       beep_cmd, /* ! */
  183.       beep_cmd, /* " */
  184.       beep_cmd, /* # */
  185.       sys_spawn_cmd,            /* $ */
  186.       beep_cmd, /* % */
  187.       beep_cmd, /* & */
  188.       beep_cmd, /* ' */
  189.       beep_cmd, /* ( */
  190.       beep_cmd, /* ) */
  191.       beep_cmd, /* * */
  192.       beep_cmd, /* + */
  193.       beep_cmd, /* , */
  194.       digit_arg_cmd,            /* - */
  195.       beep_cmd, /* . */
  196.       beep_cmd, /* / */
  197.       beep_cmd, /* 0 */
  198.       digit_arg_cmd,            /* 1 */
  199.       digit_arg_cmd,            /* 2 */
  200.       digit_arg_cmd,            /* 3 */
  201.       digit_arg_cmd,            /* 4 */
  202.       digit_arg_cmd,            /* 5 */
  203.       digit_arg_cmd,            /* 6 */
  204.       digit_arg_cmd,            /* 7 */
  205.       digit_arg_cmd,            /* 8 */
  206.       digit_arg_cmd,            /* 9 */
  207.       beep_cmd, /* : */
  208.       beep_cmd, /* ; */
  209.       beep_cmd, /* < */
  210.       beep_cmd, /* = */
  211.       beep_cmd, /* > */
  212.       beep_cmd, /* ? */
  213.       beep_cmd, /* @ */
  214.       beep_cmd, /* A */
  215.       beep_cmd, /* B */
  216.       beep_cmd, /* C */
  217.       beep_cmd, /* D */
  218.       beep_cmd, /* E */
  219.       beep_cmd, /* F */
  220.       beep_cmd, /* G */
  221.       beep_cmd, /* H */
  222.       beep_cmd, /* I */
  223.       beep_cmd, /* J */
  224.       beep_cmd, /* K */
  225.       beep_cmd, /* L */
  226.       beep_cmd, /* M */
  227.       beep_cmd, /* N */
  228.       O_map_cmd,                /* O */
  229.       beep_cmd, /* P */
  230.       beep_cmd, /* Q */
  231.       beep_cmd, /* R */
  232.       beep_cmd, /* S */
  233.       beep_cmd, /* T */
  234.       beep_cmd, /* U */
  235.       beep_cmd, /* V */
  236.       beep_cmd, /* W */
  237.       extended_cmd_cmd,         /* X */
  238.       beep_cmd, /* Y */
  239.       beep_cmd, /* Z */
  240.       O_map_cmd,                /* [ */
  241.       beep_cmd, /* \ */
  242.       beep_cmd, /* ] */
  243.       beep_cmd, /* ^ */
  244.       beep_cmd, /* _ */
  245.       beep_cmd, /* ` */
  246.       beep_cmd, /* a */
  247.       beep_cmd, /* b */
  248.       beep_cmd, /* c */
  249.       beep_cmd, /* d */
  250.       beep_cmd, /* e */
  251.       beep_cmd, /* f */
  252.       beep_cmd, /* g */
  253.       beep_cmd, /* h */
  254.       beep_cmd, /* i */
  255.       beep_cmd, /* j */
  256.       beep_cmd, /* k */
  257.       beep_cmd, /* l */
  258.       beep_cmd, /* m */
  259.       beep_cmd, /* n */
  260.       beep_cmd, /* o */
  261.       beep_cmd, /* p */
  262.       beep_cmd, /* q */
  263.       beep_cmd, /* r */
  264.       beep_cmd, /* s */
  265.       beep_cmd, /* t */
  266.       beep_cmd, /* u */
  267.       beep_cmd, /* v */
  268.       beep_cmd, /* w */
  269.       extended_cmd_cmd,         /* x */
  270.       beep_cmd, /* y */
  271.       beep_cmd, /* z */
  272.       beep_cmd, /* { */
  273.       beep_cmd, /* | */
  274.       beep_cmd, /* } */
  275.       beep_cmd, /* ~ */
  276.       beep_cmd  /* ^? */
  277.   };
  278.  
  279. void (*ctrl_x_map[128])() =
  280.   {
  281.       beep_cmd, /* ^@ */
  282.       beep_cmd, /* ^A */
  283.       beep_cmd, /* ^B */
  284.       exit_cmd, /* ^C */
  285.       beep_cmd, /* ^D */
  286.       beep_cmd, /* ^E */
  287.       find_file_cmd,            /* ^F */
  288.       beep_cmd, /* ^G */
  289.       beep_cmd, /* ^H */
  290.       beep_cmd, /* ^I */
  291.       beep_cmd, /* ^J */
  292.       beep_cmd, /* ^K */
  293.       beep_cmd, /* ^L */
  294.       beep_cmd, /* ^M */
  295.       beep_cmd, /* ^N */
  296.       beep_cmd, /* ^O */
  297.       beep_cmd, /* ^P */
  298.       beep_cmd, /* ^Q */
  299.       beep_cmd, /* ^R */
  300.       beep_cmd, /* ^S */
  301.       beep_cmd, /* ^T */
  302.       beep_cmd, /* ^U */
  303.       beep_cmd, /* ^V */
  304.       beep_cmd, /* ^W */
  305.       beep_cmd, /* ^X */
  306.       beep_cmd, /* ^Y */
  307.       beep_cmd, /* ^Z */
  308.       beep_cmd, /* ^[ */
  309.       beep_cmd, /* ^\ */
  310.       beep_cmd, /* ^] */
  311.       beep_cmd, /* ^^ */
  312.       beep_cmd, /* ^_ */
  313.       beep_cmd, /*   */
  314.       beep_cmd, /* ! */
  315.       beep_cmd, /* " */
  316.       beep_cmd, /* # */
  317.       beep_cmd, /* $ */
  318.       beep_cmd, /* % */
  319.       beep_cmd, /* & */
  320.       beep_cmd, /* ' */
  321.       beep_cmd, /* ( */
  322.       beep_cmd, /* ) */
  323.       beep_cmd, /* * */
  324.       beep_cmd, /* + */
  325.       beep_cmd, /* , */
  326.       beep_cmd, /* - */
  327.       beep_cmd, /* . */
  328.       beep_cmd, /* / */
  329.       del_window_cmd,           /* 0 */
  330.       one_window_cmd,           /* 1 */
  331.       two_window_cmd,           /* 2 */
  332.       beep_cmd, /* 3 */
  333.       beep_cmd, /* 4 */
  334.       beep_cmd, /* 5 */
  335.       beep_cmd, /* 6 */
  336.       beep_cmd, /* 7 */
  337.       beep_cmd, /* 8 */
  338.       beep_cmd, /* 9 */
  339.       beep_cmd, /* : */
  340.       beep_cmd, /* ; */
  341.       beep_cmd, /* < */
  342.       beep_cmd, /* = */
  343.       beep_cmd, /* > */
  344.       beep_cmd, /* ? */
  345.       beep_cmd, /* @ */
  346.       beep_cmd, /* A */
  347.       beep_cmd, /* B */
  348.       beep_cmd, /* C */
  349.       beep_cmd, /* D */
  350.       beep_cmd, /* E */
  351.       beep_cmd, /* F */
  352.       beep_cmd, /* G */
  353.       beep_cmd, /* H */
  354.       beep_cmd, /* I */
  355.       beep_cmd, /* J */
  356.       beep_cmd, /* K */
  357.       beep_cmd, /* L */
  358.       beep_cmd, /* M */
  359.       beep_cmd, /* N */
  360.       other_window_cmd,         /* O */
  361.       beep_cmd, /* P */
  362.       beep_cmd, /* Q */
  363.       beep_cmd, /* R */
  364.       beep_cmd, /* S */
  365.       beep_cmd, /* T */
  366.       beep_cmd, /* U */
  367.       beep_cmd, /* V */
  368.       beep_cmd, /* W */
  369.       beep_cmd, /* X */
  370.       beep_cmd, /* Y */
  371.       beep_cmd, /* Z */
  372.       beep_cmd, /* [ */
  373.       beep_cmd, /* \ */
  374.       beep_cmd, /* ] */
  375.       beep_cmd, /* ^ */
  376.       beep_cmd, /* _ */
  377.       beep_cmd, /* ` */
  378.       beep_cmd, /* a */
  379.       beep_cmd, /* b */
  380.       beep_cmd, /* c */
  381.       beep_cmd, /* d */
  382.       beep_cmd, /* e */
  383.       beep_cmd, /* f */
  384.       beep_cmd, /* g */
  385.       beep_cmd, /* h */
  386.       beep_cmd, /* i */
  387.       beep_cmd, /* j */
  388.       beep_cmd, /* k */
  389.       beep_cmd, /* l */
  390.       beep_cmd, /* m */
  391.       beep_cmd, /* n */
  392.       other_window_cmd,         /* o */
  393.       beep_cmd, /* p */
  394.       beep_cmd, /* q */
  395.       beep_cmd, /* r */
  396.       beep_cmd, /* s */
  397.       beep_cmd, /* t */
  398.       beep_cmd, /* u */
  399.       beep_cmd, /* v */
  400.       beep_cmd, /* w */
  401.       beep_cmd, /* x */
  402.       beep_cmd, /* y */
  403.       beep_cmd, /* z */
  404.       beep_cmd, /* { */
  405.       beep_cmd, /* | */
  406.       beep_cmd, /* } */
  407.       beep_cmd, /* ~ */
  408.       beep_cmd  /* ^? */
  409.   };
  410.  
  411. void (*ctrl_w_map[128])() =
  412.   {
  413.       beep_cmd, /* ^@ */
  414.       beep_cmd, /* ^A */
  415.       beep_cmd, /* ^B */
  416.       beep_cmd, /* ^C */
  417.       beep_cmd, /* ^D */
  418.       beep_cmd, /* ^E */
  419.       beep_cmd, /* ^F */
  420.       beep_cmd, /* ^G */
  421.       beep_cmd, /* ^H */
  422.       beep_cmd, /* ^I */
  423.       beep_cmd, /* ^J */
  424.       beep_cmd, /* ^K */
  425.       beep_cmd, /* ^L */
  426.       beep_cmd, /* ^M */
  427.       beep_cmd, /* ^N */
  428.       beep_cmd, /* ^O */
  429.       beep_cmd, /* ^P */
  430.       beep_cmd, /* ^Q */
  431.       beep_cmd, /* ^R */
  432.       beep_cmd, /* ^S */
  433.       beep_cmd, /* ^T */
  434.       beep_cmd, /* ^U */
  435.       beep_cmd, /* ^V */
  436.       beep_cmd, /* ^W */
  437.       beep_cmd, /* ^X */
  438.       beep_cmd, /* ^Y */
  439.       beep_cmd, /* ^Z */
  440.       beep_cmd, /* ^[ */
  441.       beep_cmd, /* ^\ */
  442.       beep_cmd, /* ^] */
  443.       beep_cmd, /* ^^ */
  444.       beep_cmd, /* ^_ */
  445.       beep_cmd, /*   */
  446.       beep_cmd, /* ! */
  447.       beep_cmd, /* " */
  448.       beep_cmd, /* # */
  449.       beep_cmd, /* $ */
  450.       beep_cmd, /* % */
  451.       beep_cmd, /* & */
  452.       beep_cmd, /* ' */
  453.       beep_cmd, /* ( */
  454.       beep_cmd, /* ) */
  455.       beep_cmd, /* * */
  456.       beep_cmd, /* + */
  457.       beep_cmd, /* , */
  458.       beep_cmd, /* - */
  459.       beep_cmd, /* . */
  460.       beep_cmd, /* / */
  461.       del_window_cmd,           /* 0 */
  462.       one_window_cmd,           /* 1 */
  463.       two_window_cmd,           /* 2 */
  464.       beep_cmd, /* 3 */
  465.       beep_cmd, /* 4 */
  466.       beep_cmd, /* 5 */
  467.       beep_cmd, /* 6 */
  468.       beep_cmd, /* 7 */
  469.       beep_cmd, /* 8 */
  470.       beep_cmd, /* 9 */
  471.       beep_cmd, /* : */
  472.       beep_cmd, /* ; */
  473.       beep_cmd, /* < */
  474.       beep_cmd, /* = */
  475.       beep_cmd, /* > */
  476.       beep_cmd, /* ? */
  477.       beep_cmd, /* @ */
  478.       beep_cmd, /* A */
  479.       beep_cmd, /* B */
  480.       beep_cmd, /* C */
  481.       beep_cmd, /* D */
  482.       beep_cmd, /* E */
  483.       beep_cmd, /* F */
  484.       beep_cmd, /* G */
  485.       beep_cmd, /* H */
  486.       beep_cmd, /* I */
  487.       beep_cmd, /* J */
  488.       beep_cmd, /* K */
  489.       beep_cmd, /* L */
  490.       beep_cmd, /* M */
  491.       beep_cmd, /* N */
  492.       other_window_cmd,         /* O */
  493.       beep_cmd, /* P */
  494.       beep_cmd, /* Q */
  495.       beep_cmd, /* R */
  496.       beep_cmd, /* S */
  497.       beep_cmd, /* T */
  498.       beep_cmd, /* U */
  499.       beep_cmd, /* V */
  500.       beep_cmd, /* W */
  501.       beep_cmd, /* X */
  502.       beep_cmd, /* Y */
  503.       beep_cmd, /* Z */
  504.       beep_cmd, /* [ */
  505.       beep_cmd, /* \ */
  506.       beep_cmd, /* ] */
  507.       beep_cmd, /* ^ */
  508.       beep_cmd, /* _ */
  509.       beep_cmd, /* ` */
  510.       beep_cmd, /* a */
  511.       beep_cmd, /* b */
  512.       beep_cmd, /* c */
  513.       beep_cmd, /* d */
  514.       beep_cmd, /* e */
  515.       beep_cmd, /* f */
  516.       beep_cmd, /* g */
  517.       beep_cmd, /* h */
  518.       beep_cmd, /* i */
  519.       beep_cmd, /* j */
  520.       beep_cmd, /* k */
  521.       beep_cmd, /* l */
  522.       beep_cmd, /* m */
  523.       beep_cmd, /* n */
  524.       other_window_cmd, /* o */
  525.       beep_cmd, /* p */
  526.       beep_cmd, /* q */
  527.       beep_cmd, /* r */
  528.       beep_cmd, /* s */
  529.       beep_cmd, /* t */
  530.       beep_cmd, /* u */
  531.       beep_cmd, /* v */
  532.       beep_cmd, /* w */
  533.       beep_cmd, /* x */
  534.       beep_cmd, /* y */
  535.       beep_cmd, /* z */
  536.       beep_cmd, /* { */
  537.       beep_cmd, /* | */
  538.       beep_cmd, /* } */
  539.       beep_cmd, /* ~ */
  540.       beep_cmd  /* ^? */
  541.   };
  542.  
  543. void (*ctrl_k_map[128])() =
  544.   {
  545.       beep_cmd, /* ^@ */
  546.       beep_cmd, /* ^A */
  547.       set_mark_cmd,             /* ^B */
  548.       beep_cmd, /* ^C */
  549.       beep_cmd, /* ^D */
  550.       beep_cmd, /* ^E */
  551.       beep_cmd, /* ^F */
  552.       beep_cmd, /* ^G */
  553.       beep_cmd, /* ^H */
  554.       beep_cmd, /* ^I */
  555.       goto_mark_cmd,            /* ^J */
  556.       beep_cmd, /* ^K */
  557.       beep_cmd, /* ^L */
  558.       goto_mark_cmd,            /* ^M */
  559.       beep_cmd, /* ^N */
  560.       beep_cmd, /* ^O */
  561.       beep_cmd, /* ^P */
  562.       beep_cmd, /* ^Q */
  563.       beep_cmd, /* ^R */
  564.       beep_cmd, /* ^S */
  565.       beep_cmd, /* ^T */
  566.       beep_cmd, /* ^U */
  567.       beep_cmd, /* ^V */
  568.       beep_cmd, /* ^W */
  569.       beep_cmd, /* ^X */
  570.       beep_cmd, /* ^Y */
  571.       beep_cmd, /* ^Z */
  572.       beep_cmd, /* ^[ */
  573.       beep_cmd, /* ^\ */
  574.       beep_cmd, /* ^] */
  575.       beep_cmd, /* ^^ */
  576.       beep_cmd, /* ^_ */
  577.       beep_cmd, /*   */
  578.       beep_cmd, /* ! */
  579.       beep_cmd, /* " */
  580.       beep_cmd, /* # */
  581.       beep_cmd, /* $ */
  582.       beep_cmd, /* % */
  583.       beep_cmd, /* & */
  584.       beep_cmd, /* ' */
  585.       beep_cmd, /* ( */
  586.       beep_cmd, /* ) */
  587.       beep_cmd, /* * */
  588.       beep_cmd, /* + */
  589.       beep_cmd, /* , */
  590.       beep_cmd, /* - */
  591.       beep_cmd, /* . */
  592.       beep_cmd, /* / */
  593.       beep_cmd, /* 0 */
  594.       beep_cmd, /* 1 */
  595.       beep_cmd, /* 2 */
  596.       beep_cmd, /* 3 */
  597.       beep_cmd, /* 4 */
  598.       beep_cmd, /* 5 */
  599.       beep_cmd, /* 6 */
  600.       beep_cmd, /* 7 */
  601.       beep_cmd, /* 8 */
  602.       beep_cmd, /* 9 */
  603.       beep_cmd, /* : */
  604.       beep_cmd, /* ; */
  605.       beep_cmd, /* < */
  606.       beep_cmd, /* = */
  607.       beep_cmd, /* > */
  608.       beep_cmd, /* ? */
  609.       beep_cmd, /* @ */
  610.       beep_cmd, /* A */
  611.       beep_cmd, /* B */
  612.       beep_cmd, /* C */
  613.       extended_cmd_cmd,         /* D */
  614.       exit_cmd,                 /* E */
  615.       beep_cmd, /* F */
  616.       find_file_cmd,            /* G */
  617.       beep_cmd, /* H */
  618.       beep_cmd, /* I */
  619.       beep_cmd, /* J */
  620.       beep_cmd, /* K */
  621.       beep_cmd, /* L */
  622.       set_mark_cmd,             /* M */
  623.       beep_cmd, /* N */
  624.       beep_cmd, /* O */
  625.       beep_cmd, /* P */
  626.       beep_cmd, /* Q */
  627.       beep_cmd, /* R */
  628.       beep_cmd, /* S */
  629.       beep_cmd, /* T */
  630.       beep_cmd, /* U */
  631.       beep_cmd, /* V */
  632.       beep_cmd, /* W */
  633.       beep_cmd, /* X */
  634.       beep_cmd, /* Y */
  635.       beep_cmd, /* Z */
  636.       beep_cmd, /* [ */
  637.       beep_cmd, /* \ */
  638.       beep_cmd, /* ] */
  639.       beep_cmd, /* ^ */
  640.       beep_cmd, /* _ */
  641.       beep_cmd, /* ` */
  642.       beep_cmd, /* a */
  643.       beep_cmd, /* b */
  644.       beep_cmd, /* c */
  645.       extended_cmd_cmd,         /* d */
  646.       exit_cmd,                 /* e */
  647.       beep_cmd, /* f */
  648.       find_file_cmd,            /* g */
  649.       beep_cmd, /* h */
  650.       beep_cmd, /* i */
  651.       beep_cmd, /* j */
  652.       beep_cmd, /* k */
  653.       beep_cmd, /* l */
  654.       set_mark_cmd,             /* m */
  655.       beep_cmd, /* n */
  656.       beep_cmd, /* o */
  657.       beep_cmd, /* p */
  658.       beep_cmd, /* q */
  659.       beep_cmd, /* r */
  660.       beep_cmd, /* s */
  661.       beep_cmd, /* t */
  662.       beep_cmd, /* u */
  663.       beep_cmd, /* v */
  664.       beep_cmd, /* w */
  665.       beep_cmd, /* x */
  666.       beep_cmd, /* y */
  667.       beep_cmd, /* z */
  668.       beep_cmd, /* { */
  669.       beep_cmd, /* | */
  670.       beep_cmd, /* } */
  671.       beep_cmd, /* ~ */
  672.       beep_cmd  /* ^? */
  673.   };
  674.  
  675. void (*esc_O_map[128])() =
  676.   {
  677.       beep_cmd, /* ^@ */
  678.       beep_cmd, /* ^A */
  679.       beep_cmd, /* ^B */
  680.       beep_cmd, /* ^C */
  681.       beep_cmd, /* ^D */
  682.       beep_cmd, /* ^E */
  683.       beep_cmd, /* ^F */
  684.       beep_cmd, /* ^G */
  685.       beep_cmd, /* ^H */
  686.       beep_cmd, /* ^I */
  687.       beep_cmd, /* ^J */
  688.       beep_cmd, /* ^K */
  689.       beep_cmd, /* ^L */
  690.       beep_cmd, /* ^M */
  691.       beep_cmd, /* ^N */
  692.       beep_cmd, /* ^O */
  693.       beep_cmd, /* ^P */
  694.       beep_cmd, /* ^Q */
  695.       beep_cmd, /* ^R */
  696.       beep_cmd, /* ^S */
  697.       beep_cmd, /* ^T */
  698.       beep_cmd, /* ^U */
  699.       beep_cmd, /* ^V */
  700.       beep_cmd, /* ^W */
  701.       beep_cmd, /* ^X */
  702.       beep_cmd, /* ^Y */
  703.       beep_cmd, /* ^Z */
  704.       beep_cmd, /* ^[ */
  705.       beep_cmd, /* ^\ */
  706.       beep_cmd, /* ^] */
  707.       beep_cmd, /* ^^ */
  708.       beep_cmd, /* ^_ */
  709.       beep_cmd, /*   */
  710.       beep_cmd, /* ! */
  711.       beep_cmd, /* " */
  712.       beep_cmd, /* # */
  713.       beep_cmd, /* $ */
  714.       beep_cmd, /* % */
  715.       beep_cmd, /* & */
  716.       beep_cmd, /* ' */
  717.       beep_cmd, /* ( */
  718.       beep_cmd, /* ) */
  719.       beep_cmd, /* * */
  720.       beep_cmd, /* + */
  721.       beep_cmd, /* , */
  722.       beep_cmd, /* - */
  723.       beep_cmd, /* . */
  724.       beep_cmd, /* / */
  725.       dec_extended_map_cmd,     /* 0 */
  726.       dec_extended_map_cmd,     /* 1 */
  727.       dec_extended_map_cmd,     /* 2 */
  728.       dec_extended_map_cmd,     /* 3 */
  729.       dec_extended_map_cmd,     /* 4 */
  730.       dec_extended_map_cmd,     /* 5 */
  731.       dec_extended_map_cmd,     /* 6 */
  732.       dec_extended_map_cmd,     /* 7 */
  733.       dec_extended_map_cmd,     /* 8 */
  734.       dec_extended_map_cmd,     /* 9 */
  735.       beep_cmd, /* : */
  736.       beep_cmd, /* ; */
  737.       beep_cmd, /* < */
  738.       beep_cmd, /* = */
  739.       beep_cmd, /* > */
  740.       beep_cmd, /* ? */
  741.       beep_cmd, /* @ */
  742.       previous_line_cmd,        /* A */
  743.       next_line_cmd,            /* B */
  744.       page_right_cmd,           /* C */
  745.       page_left_cmd,            /* D */
  746.       beep_cmd, /* E */
  747.       beep_cmd, /* F */
  748.       beep_cmd, /* G */
  749.       beep_cmd, /* H */
  750.       beep_cmd, /* I */
  751.       beep_cmd, /* J */
  752.       beep_cmd, /* K */
  753.       beep_cmd, /* L */
  754.       next_line_cmd, /* M */
  755.       beep_cmd, /* N */
  756.       beep_cmd, /* O */
  757.       pf1_map_cmd, /* P */    /* PF1 */
  758.       help_cmd, /* Q */ /* PF2 */
  759.       edt_find_next_cmd, /* R */ /* PF3 */
  760.       beep_cmd, /* S */ /* PF4 */
  761.       beep_cmd, /* T */
  762.       beep_cmd, /* U */
  763.       beep_cmd, /* V */
  764.       beep_cmd, /* W */
  765.       beep_cmd, /* X */
  766.       beep_cmd, /* Y */
  767.       beep_cmd, /* Z */
  768.       beep_cmd, /* [ */
  769.       beep_cmd, /* \ */
  770.       beep_cmd, /* ] */
  771.       beep_cmd, /* ^ */
  772.       beep_cmd, /* _ */
  773.       beep_cmd, /* ` */
  774.       beep_cmd, /* a */
  775.       beep_cmd, /* b */
  776.       beep_cmd, /* c */
  777.       beep_cmd, /* d */
  778.       beep_cmd, /* e */
  779.       beep_cmd, /* f */
  780.       beep_cmd, /* g */
  781.       beep_cmd, /* h */
  782.       beep_cmd, /* i */
  783.       beep_cmd, /* j */
  784.       beep_cmd, /* k */
  785.       beep_cmd, /* l */
  786.       beep_cmd, /* m */
  787.       set_mark_cmd, /* n */
  788.       beep_cmd, /* o */
  789.       edt_line_cmd, /* p */ /* KP0 */
  790.       beep_cmd, /* q */ /* KP1 */
  791.       beep_cmd, /* r */ /* KP2 */
  792.       beep_cmd, /* s */ /* KP3 */
  793.       edt_forward_cmd, /* t */ /* KP4 */
  794.       edt_back_cmd, /* u */ /* KP5 */
  795.       beep_cmd, /* v */ /* KP6 */
  796.       beep_cmd, /* w */ /* KP7 */
  797.       edt_page_cmd, /* x */ /* KP8 */
  798.       beep_cmd, /* y */ /* KP9 */
  799.       beep_cmd, /* z */
  800.       beep_cmd, /* { */
  801.       beep_cmd, /* | */
  802.       beep_cmd, /* } */
  803.       beep_cmd, /* ~ */
  804.       beep_cmd  /* ^? */
  805.   };
  806.  
  807. void (*pf1_map[128])() =    /* Gold */
  808.   {
  809.       beep_cmd, /* ^@ */
  810.       beep_cmd, /* ^A */
  811.       beep_cmd, /* ^B */
  812.       beep_cmd, /* ^C */
  813.       beep_cmd, /* ^D */
  814.       beep_cmd, /* ^E */
  815.       beep_cmd, /* ^F */
  816.       beep_cmd, /* ^G */
  817.       beep_cmd, /* ^H */
  818.       beep_cmd, /* ^I */
  819.       beep_cmd, /* ^J */
  820.       beep_cmd, /* ^K */
  821.       beep_cmd, /* ^L */
  822.       beep_cmd, /* ^M */
  823.       beep_cmd, /* ^N */
  824.       beep_cmd, /* ^O */
  825.       beep_cmd, /* ^P */
  826.       beep_cmd, /* ^Q */
  827.       beep_cmd, /* ^R */
  828.       beep_cmd, /* ^S */
  829.       beep_cmd, /* ^T */
  830.       beep_cmd, /* ^U */
  831.       beep_cmd, /* ^V */
  832.       beep_cmd, /* ^W */
  833.       beep_cmd, /* ^X */
  834.       beep_cmd, /* ^Y */
  835.       beep_cmd, /* ^Z */
  836.       pf1_esc_map_cmd, /* ^[ */
  837.       beep_cmd, /* ^\ */
  838.       beep_cmd, /* ^] */
  839.       beep_cmd, /* ^^ */
  840.       beep_cmd, /* ^_ */
  841.       beep_cmd, /*   */
  842.       beep_cmd, /* ! */
  843.       beep_cmd, /* " */
  844.       beep_cmd, /* # */
  845.       beep_cmd, /* $ */
  846.       beep_cmd, /* % */
  847.       beep_cmd, /* & */
  848.       beep_cmd, /* ' */
  849.       beep_cmd, /* ( */
  850.       beep_cmd, /* ) */
  851.       beep_cmd, /* * */
  852.       beep_cmd, /* + */
  853.       beep_cmd, /* , */
  854.       beep_cmd, /* - */
  855.       beep_cmd, /* . */
  856.       beep_cmd, /* / */
  857.       digit_arg_cmd, /* 0 */
  858.       digit_arg_cmd, /* 1 */
  859.       digit_arg_cmd, /* 2 */
  860.       digit_arg_cmd, /* 3 */
  861.       digit_arg_cmd, /* 4 */
  862.       digit_arg_cmd, /* 5 */
  863.       digit_arg_cmd, /* 6 */
  864.       digit_arg_cmd, /* 7 */
  865.       digit_arg_cmd, /* 8 */
  866.       digit_arg_cmd, /* 9 */
  867.       beep_cmd, /* : */
  868.       beep_cmd, /* ; */
  869.       beep_cmd, /* < */
  870.       beep_cmd, /* = */
  871.       beep_cmd, /* > */
  872.       beep_cmd, /* ? */
  873.       beep_cmd, /* @ */
  874.       beep_cmd, /* A */
  875.       beep_cmd, /* B */
  876.       beep_cmd, /* C */
  877.       beep_cmd, /* D */
  878.       beep_cmd, /* E */
  879.       beep_cmd, /* F */
  880.       beep_cmd, /* G */
  881.       beep_cmd, /* H */
  882.       beep_cmd, /* I */
  883.       beep_cmd, /* J */
  884.       beep_cmd, /* K */
  885.       beep_cmd, /* L */
  886.       beep_cmd, /* M */
  887.       beep_cmd, /* N */
  888.       one_window_cmd, /* O */
  889.       beep_cmd, /* P */
  890.       exit_cmd, /* Q */
  891.       beep_cmd, /* R */
  892.       sys_spawn_cmd, /* S */
  893.       beep_cmd, /* T */
  894.       beep_cmd, /* U */
  895.       del_window_cmd, /* V */
  896.       beep_cmd, /* W */
  897.       two_window_cmd, /* X */
  898.       beep_cmd, /* Y */
  899.       beep_cmd, /* Z */
  900.       beep_cmd, /* [ */
  901.       beep_cmd, /* \ */
  902.       beep_cmd, /* ] */
  903.       beep_cmd, /* ^ */
  904.       beep_cmd, /* _ */
  905.       beep_cmd, /* ` */
  906.       beep_cmd, /* a */
  907.       beep_cmd, /* b */
  908.       beep_cmd, /* c */
  909.       beep_cmd, /* d */
  910.       beep_cmd, /* e */
  911.       beep_cmd, /* f */
  912.       beep_cmd, /* g */
  913.       beep_cmd, /* h */
  914.       beep_cmd, /* i */
  915.       beep_cmd, /* j */
  916.       beep_cmd, /* k */
  917.       beep_cmd, /* l */
  918.       beep_cmd, /* m */
  919.       beep_cmd, /* n */
  920.       one_window_cmd, /* o */
  921.       beep_cmd, /* p */
  922.       exit_cmd, /* q */
  923.       beep_cmd, /* r */
  924.       sys_spawn_cmd, /* s */
  925.       beep_cmd, /* t */
  926.       beep_cmd, /* u */
  927.       del_window_cmd, /* v */
  928.       beep_cmd, /* w */
  929.       two_window_cmd, /* x */
  930.       beep_cmd, /* y */
  931.       beep_cmd, /* z */
  932.       beep_cmd, /* { */
  933.       beep_cmd, /* | */
  934.       beep_cmd, /* } */
  935.       beep_cmd, /* ~ */
  936.       beep_cmd  /* ^? */
  937.   };
  938.  
  939. void execute_key()
  940. {
  941.     char ch;
  942.     int r,c;
  943.     c = CURS_COL - COLUMN + 1;
  944.     r = CURS_ROW;
  945.     if (MINI_BUF[0] != '\0') put_message();
  946.     if (r < 1) r = 1;
  947.     else if (r > (WIN->bot - WIN->top + 1))
  948.       r = WIN->bot - WIN->top + 1;
  949.     if (c > SCREEN_WIDTH) c = SCREEN_WIDTH;
  950.     else if (c < 1) c = 1;
  951.     goto_rc(r,c);
  952.     fflush(stdout);
  953.     DIGIT_ARG = (int *) NULL;
  954.     ch = getkey();
  955.     if (MINI_BUF[0] != '\0') clear_minibuffer();
  956.     LAST_CHAR = ch;
  957.     (*root_map[ (int) ch ])();
  958. }
  959.  
  960. void ctrl_x_map_cmd()
  961. {
  962.     char ch;
  963.  
  964.     ch = getkey();
  965.     (*ctrl_x_map[ (int) ch ])();
  966. }
  967.  
  968. void ctrl_k_map_cmd()
  969. {
  970.     char ch;
  971.  
  972.     ch = getkey();
  973.     (*ctrl_k_map[ (int) ch ])();
  974. }
  975.  
  976. void ctrl_w_map_cmd()
  977. {
  978.     char ch;
  979.  
  980.     ch = getkey();
  981.     (*ctrl_w_map[ (int) ch ])();
  982. }
  983.  
  984. void O_map_cmd()
  985. {
  986.     char ch;
  987.  
  988.     ch = getkey();
  989.     LAST_CHAR = ch;
  990.     (*esc_O_map[ (int) ch ])();
  991. }
  992.  
  993. void esc_map_cmd()
  994. {
  995.     char ch;
  996.  
  997.     ch = getkey();
  998.     LAST_CHAR = ch;
  999.     (*escape_map[ (int) ch ])();
  1000. }
  1001.  
  1002. /* weird sequences of form ^[[n~ where n is an integer */
  1003. void dec_extended_map_cmd()
  1004. {
  1005.     char ch, numstr[5];
  1006.     int i, num;
  1007.     
  1008.     ch = LAST_CHAR;  /* should be integer */
  1009.     i = 0;
  1010.     numstr[i++] = ch;
  1011.  
  1012.     while (ch = getkey(), isdigit(ch)) numstr[i++] = ch;
  1013.     if (ch == '~')
  1014.       {
  1015.           numstr[i++] =  '\0';
  1016.           sscanf(numstr,"%d",&num);
  1017.           switch (num)
  1018.             {
  1019.               case 5:
  1020.                 page_up_cmd(); break; /* prev screen */
  1021.               case 6:
  1022.                 page_down_cmd(); break; /* next screen */
  1023.               case 1:
  1024.                 search_cmd(); break; /* find */
  1025.               case 4:
  1026.                 set_mark_cmd(); break; /* select */
  1027.               case 2:   
  1028.                 goto_mark_cmd(); break; /* insert here */
  1029.               case 28:
  1030.                 help_cmd(); break; /* Help */
  1031.               case 29:  /* do */
  1032.                 extended_cmd_cmd(); break;
  1033.               default:
  1034.                 beep_cmd(); break;
  1035.             }
  1036.       }
  1037.     else beep_cmd();
  1038. }
  1039.  
  1040. /* weird sequences of form ^[[n~ where n is an integer */
  1041. void pf1_esc_map_cmd()
  1042. {
  1043.     char ch, numstr[5];
  1044.     int i, num;
  1045.     
  1046.     LAST_CHAR = ch = getkey();
  1047.     switch (ch)
  1048.     {
  1049.     case 'O':
  1050.         LAST_CHAR = ch = getkey();
  1051.         switch (ch)
  1052.         {
  1053.         case 't': /* KP4 */
  1054.             end_of_buffer_cmd(); break;
  1055.         case 'u': /* KP5 */
  1056.             top_of_buffer_cmd(); break;
  1057.         case 'w': /* KP7 */
  1058.             extended_cmd_cmd(); break;
  1059.         case 'n': /* KP7 */
  1060.             goto_mark_cmd(); break;
  1061.         case 'R': /* PF3 */
  1062.             edt_find_cmd(); break;
  1063.         default :
  1064.             beep_cmd(); break;
  1065.         }
  1066.         break;
  1067.     case '[':
  1068.         LAST_CHAR = ch = getkey();
  1069.         switch (ch)
  1070.         {
  1071.         case 'A':
  1072.             other_window_cmd(); break;
  1073.         case 'B':
  1074.             other_window_cmd(); break;
  1075.         case 'C':
  1076.             page_left_cmd(); break;
  1077.         case 'D':
  1078.             page_right_cmd(); break;
  1079.         default :
  1080.             beep_cmd(); break;
  1081.         };
  1082.         break;
  1083.     default :
  1084.             beep_cmd(); break;
  1085.     }
  1086. }
  1087.  
  1088. void pf1_map_cmd()
  1089. {
  1090.     char ch;
  1091.  
  1092.     ch = getkey();
  1093.     LAST_CHAR = ch;
  1094.     (*pf1_map[ (int) ch ])();
  1095. }
  1096.  
  1097. void beep_cmd()
  1098. {
  1099.     fputc('\007',stdout);
  1100. }
  1101.  
  1102. void page_down_cmd()
  1103. {
  1104.     int n = 1;
  1105.     if (DIGIT_ARG != (int *) NULL) n = *DIGIT_ARG;
  1106.     update_windows(C_LINE + n * (WIN->bot - WIN->top + 1));
  1107. }
  1108. void page_up_cmd()
  1109. {
  1110.     int n = 1;
  1111.     if (DIGIT_ARG != (int *) NULL) n = *DIGIT_ARG;
  1112.     update_windows(C_LINE - n * (WIN->bot - WIN->top + 1));
  1113. }
  1114.  
  1115. void page_right_cmd()
  1116. {
  1117.     int n = 1;
  1118.     if (DIGIT_ARG != (int *) NULL) n = *DIGIT_ARG;
  1119.     COLUMN = COLUMN + n * 59;
  1120.     update_windows(C_LINE);
  1121. }
  1122.  
  1123. void page_left_cmd()
  1124. {
  1125.     int n = 1;
  1126.     if (DIGIT_ARG != (int *) NULL) n = *DIGIT_ARG;
  1127.     COLUMN = COLUMN - n * 59;
  1128.     update_windows(C_LINE);
  1129. }
  1130.  
  1131. void next_line_cmd()
  1132. {
  1133.     int n = 1;
  1134.     if (DIGIT_ARG != (int *) NULL) n = *DIGIT_ARG;
  1135.     update_windows(C_LINE + n);
  1136. }
  1137.  
  1138. void previous_line_cmd()
  1139. {
  1140.     int n = 1;
  1141.     if (DIGIT_ARG != (int *) NULL) n = *DIGIT_ARG;
  1142.     update_windows(C_LINE - n);
  1143. }
  1144.  
  1145. void top_of_buffer_cmd()
  1146. {
  1147.     update_windows(1);
  1148. }
  1149.  
  1150. void end_of_buffer_cmd()
  1151. {
  1152.     update_windows(NUM_LINES);
  1153. }
  1154.  
  1155. extern void sys_spawn_cmd()
  1156. {
  1157.     int update = 0;
  1158.     reset_tty();
  1159.     reset_display();
  1160.     fflush(stdout);
  1161. #ifdef VMS
  1162.     if (LAST_CHAR == '\032') exit(0);
  1163.     if (do_shell_command()) update = 1; /* scroll region reset by message facility */
  1164. #else                          
  1165.     killpg(getpgrp(0),18);
  1166.     update = 1;
  1167. #endif
  1168.     init_tty();
  1169.     if (update) redraw_display();
  1170. }
  1171.  
  1172. void redraw_cmd()
  1173. {
  1174.     redraw_display();
  1175. }
  1176.  
  1177. void goto_line_cmd()
  1178. {
  1179.     int n = C_LINE;
  1180.     if (DIGIT_ARG != (int *) NULL) n = *DIGIT_ARG;
  1181.     else
  1182.       {
  1183.           MINI_BUF[0] = 0;
  1184.           if (!read_from_minibuffer("Line: ", MINI_BUF)) return;
  1185.           sscanf(MINI_BUF,"%d",&n);
  1186.           MINI_BUF[0] = 0;
  1187.       }
  1188.     update_windows(n);
  1189. }
  1190.  
  1191. void goto_percent_cmd()
  1192. {
  1193.     unsigned char *pos;
  1194.     int n;
  1195.     if (DIGIT_ARG != (int *) NULL) n = *DIGIT_ARG;
  1196.     else
  1197.       {
  1198.           MINI_BUF[0] = 0;
  1199.           if (!read_from_minibuffer("%: ", MINI_BUF)) return;
  1200.           sscanf(MINI_BUF,"%d",&n);
  1201.           MINI_BUF[0] = 0;
  1202.       }
  1203.     if (n < 0) n = 0; else if (n > 100) n = 100;
  1204.     pos = BEG + (int) (n * (int) (EOB - BEG)) / 100;
  1205.     n = what_line(pos);
  1206.     update_windows(n);
  1207. }
  1208.  
  1209. void extended_key_cmd()
  1210. {
  1211.     if (-1 == do_extended_key()) exit_cmd();
  1212. }
  1213.  
  1214. void extended_cmd_cmd()
  1215. {
  1216.     if (-1 == do_extended_cmd()) exit_cmd();
  1217. }
  1218.  
  1219. void set_mark_cmd()
  1220. {
  1221.     BUF->mark = C_LINE;
  1222.     message("Mark Set.",0);
  1223. }
  1224.  
  1225. void goto_mark_cmd()
  1226. {
  1227.     int mark = BUF->mark;
  1228.     BUF->mark = C_LINE;
  1229.     update_window(mark);
  1230.     message("Mark Set.",0);
  1231. }
  1232.  
  1233. void one_window_cmd()
  1234. {
  1235.     one_window();
  1236. }
  1237.  
  1238. void two_window_cmd()
  1239. {
  1240.     two_windows();
  1241. }
  1242.  
  1243. void del_window_cmd()
  1244. {
  1245.     delete_window();
  1246. }
  1247.  
  1248. void other_window_cmd()
  1249. {
  1250.     int n = 1;
  1251.     if (DIGIT_ARG != (int *) NULL) n = *DIGIT_ARG;
  1252.     other_window(n);
  1253. }
  1254.  
  1255.  
  1256. void find_next_cmd()
  1257. {
  1258.     int col, line, n = 1;
  1259.     unsigned char *pos;
  1260.     
  1261.     if (DIGIT_ARG != NULL) n = *DIGIT_ARG;
  1262.     line = search(CURS_POS + SEARCH_DIR, n, &col);
  1263.     if (line < 1) return;
  1264.     pos = CURS_POS;
  1265.     if ((line < WIN->beg_line) || (line > WIN->beg_line + WIN->bot - WIN->top))
  1266.       update_window(line);
  1267.     CURS_POS = pos;
  1268.     CURS_ROW = line - C_LINE + 1;
  1269.     CURS_COL = col;
  1270. }
  1271.  
  1272. void search_cmd()
  1273. {
  1274.     SEARCH_DIR = 1;
  1275.     if (read_from_minibuffer("Search: ",SEARCH_STR) == -1)
  1276.       return;
  1277.     CURS_POS = C_POS;
  1278.     find_next_cmd();
  1279. }
  1280.  
  1281. void search_back_cmd()
  1282. {
  1283.     SEARCH_DIR = -1;
  1284.     if (read_from_minibuffer("Search: ",SEARCH_STR) == -1)
  1285.       return;
  1286.     find_next_cmd();
  1287. }
  1288.  
  1289. void help_cmd()
  1290. {
  1291.     do_help_command();
  1292. }
  1293.  
  1294. void find_file_cmd()
  1295. {
  1296.     user_get_file();
  1297. }
  1298.  
  1299. void time_cmd()
  1300. {
  1301.     message(get_time(),0);
  1302. }
  1303.  
  1304. void exit_cmd()
  1305. {
  1306.     reset_tty();
  1307.     reset_display();
  1308. #ifndef  VMS
  1309.     fputc('\n',stdout);
  1310. #endif    
  1311.     exit(0);
  1312. }
  1313.  
  1314. void digit_arg_cmd()
  1315. {
  1316.     char num[15], ch;
  1317.     int j = 0;
  1318.     static int digits;
  1319.     
  1320.     num[j++] = LAST_CHAR;
  1321.     ch = getkey();
  1322.     while ((ch >= '0') && (ch <= '9'))
  1323.       {
  1324.           num[j++] = ch;
  1325.           ch = getkey();
  1326.       }
  1327.     
  1328.     if (((j == 1) && (LAST_CHAR != '-')) || (j > 1))
  1329.       {
  1330.           num[j] = '\0';
  1331.           sscanf(num,"%d",&digits);
  1332.           DIGIT_ARG = &digits;
  1333.       }
  1334.     LAST_CHAR = ch;
  1335.     (*root_map[ (int) ch ])();
  1336. }
  1337.  
  1338.     
  1339. void toggle_width_cmd()
  1340. {
  1341.     if (SCREEN_WIDTH == 80)
  1342.       {
  1343.           if (!RESTORE_WIDTH_TO) RESTORE_WIDTH_TO = 80;
  1344.           set_width(132, 1);
  1345.       }          
  1346.     else if (SCREEN_WIDTH == 132)
  1347.       {
  1348.           if (!RESTORE_WIDTH_TO) RESTORE_WIDTH_TO = 132;
  1349.           set_width(80, 1);
  1350.       }          
  1351. }
  1352.  
  1353. void edt_forward_cmd()
  1354. {
  1355.     EDT_DIRECTION = 1;
  1356. }
  1357.  
  1358. void edt_back_cmd()
  1359. {
  1360.     EDT_DIRECTION = 0;
  1361. }
  1362.  
  1363. void edt_page_cmd()
  1364. {
  1365.     if (EDT_DIRECTION == 0)
  1366.     {
  1367.         page_up_cmd();
  1368.     }
  1369.     else
  1370.     {
  1371.         page_down_cmd();
  1372.     }
  1373. }
  1374.  
  1375. void edt_line_cmd()
  1376. {
  1377.     if (EDT_DIRECTION == 0)
  1378.     {
  1379.         previous_line_cmd();
  1380.     }
  1381.     else
  1382.     {
  1383.         next_line_cmd();
  1384.     }
  1385. }
  1386.  
  1387. void edt_find_cmd()
  1388. {
  1389.     if (EDT_DIRECTION == 0)
  1390.     {
  1391.         search_back_cmd();
  1392.     }
  1393.     else
  1394.     {
  1395.         search_cmd();
  1396.     }
  1397. }
  1398.  
  1399. void edt_find_next_cmd()
  1400. {
  1401.     if (EDT_DIRECTION == 0)
  1402.     {
  1403.         SEARCH_DIR = -1;
  1404.     }
  1405.     else
  1406.     {
  1407.         SEARCH_DIR = 1;
  1408.     }
  1409.     find_next_cmd();
  1410. }
  1411.