home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / cpm68k / kmince.lbr / KEYPAD.CQ / KEYPAD.C
Text File  |  1986-08-29  |  9KB  |  276 lines

  1. /* -*-C,save-*- */
  2. /******************************************************************
  3.  *    KEYPAD.C - KMince code (adapted from Keymacs, ((C) copyright by Andrew
  4.  *           S. Cromarty, 1982), by Robert Heller)
  5.  *
  6.  *-------------------------------------------------------------------------
  7.  *
  8.  *    (C) copyright 1984, by Robert Heller.  This document may be copied by
  9.  *    anyone for any non-profit purpose as long as the following 2 conditions
  10.  *    are observed:
  11.  *    1.  Partial reproduction or duplication of the Keypad Editor for MINCE
  12.  *        is strictly forbidden.  DOCUMENTATION IS INCLUDED IN THIS
  13.  *        RESTRICTION.  Only the complete package may be copied, stored,
  14.  *        reproduced, or transmitted.
  15.  *    2.  This copyright notice MUST accompany any and all parts of said
  16.  *        package as is exists in this document.  Any modification of this
  17.  *        copyright notice shall constitute violation of copyright.
  18.  *
  19.  *-------------------------------------------------------------------------
  20.  *
  21.  * This code makes use of the "numeric keypad" which many popular smart 
  22.  * terminals (such as H/Z-19's, Z29's, VT1xx's, VK100's, etc.) have.  This 
  23.  * keypad is used to control movement, delete, and search functions in a
  24.  */
  25. #include "mince.gbl"
  26. /* only ONE of the following defines should be enabled */
  27. /*    #define H19    1    */    /* Heath/Zenith H-/Z-19 */
  28. #define Z29    1        /* Heath/Zenith H-/Z-29 */
  29. /*    #define VT100    1    */    /* DEC ANSI-type terminals: VT1xx series*/
  30. /*    #define VT52    1    */    /* VT52 type terminals (esp. InfoTon) */
  31. /*    #define VI50    1    */    /* Visual 50 terminal */
  32. KeyPad()
  33. {
  34.     int MPrevChar(), MPrevLin(), MNextChar();
  35.     int BWord(), MPrevPage(), FWord();
  36.     int MBegLin(), MNextLin(), MEndLin();
  37.     int MRSearch(), MNextPage(), MSearch();
  38.  
  39.     int MRDelChar(), MDelRgn(), MDelChar();
  40.     int MRDelWord(), MSetMrk(), MDelWord();
  41.     int MRDelLin(), MYank(), MDelLin();
  42.  
  43.     int MNotImpl(), MQryRplc(), MReplace();
  44.  
  45.     int MKeyPad();
  46.  
  47. #ifdef H19
  48. #include "H19keys.c"
  49. #endif
  50. #ifdef Z29
  51. #include "Z29Keys.C"
  52. #endif
  53. #ifdef VT52
  54. #include "VT52Keys.C"
  55. #endif
  56. #ifdef VI50
  57. #include "VI50Keys.C"
  58. #endif
  59. #ifdef VT100
  60. #include "VT100Key.C"
  61. #endif
  62.     functs[256+('K'-64)] = MRDelLin;
  63. }
  64. MKeyPad()
  65. {
  66.     int ch;
  67.     int (*funct)();
  68.  
  69.     int MPrevChar(), MPrevLin(), MNextChar();
  70.     int BWord(), MPrevPage(), FWord();
  71.     int MBegLin(), MNextLin(), MEndLin();
  72.     int MRSearch(), MNextPage(), MSearch();
  73.     int MNotImpl();
  74.     int MReplace(), MQryRplc();
  75. #ifdef H19
  76. #else
  77.     int MDKeyPad();
  78. #endif
  79.  
  80.     ch = TGetKb();
  81.     switch (ch) {
  82.     case 'p' : funct = MRSearch; break;    /* 0-key */
  83.     case 'n' : funct = MNextPage; break;    /* .-key */
  84.     case 'M' : funct = MSearch; break;    /* enter-key */
  85.     case 'q' : funct = MBegLin; break;    /* 1-key */
  86.     case 'r' : funct = MNextLin; break;    /* 2-key */
  87.     case 's' : funct = MEndLin; break;    /* 3-key */
  88.     case 't' : funct = BWord; break;    /* 4-key */
  89.     case 'u' : funct = MPrevPage; break;    /* 5-key */
  90.     case 'v' : funct = FWord; break;    /* 6-key */
  91.     case 'w' : funct = MPrevChar; break;    /* 7-key */
  92.     case 'x' : funct = MPrevLin; break;    /* 8-key */
  93.     case 'y' : funct = MNextChar; break;    /* 9-key */
  94. #ifdef H19
  95. #else
  96.     case 'l' : funct = MDKeyPad; break;    /* ,-key (Destructor shift) */
  97. #endif
  98. #ifdef VT100
  99.     case 'Q' : funct = MQryRplc; break;    /* PF2-key */
  100.     case 'R' : funct = MReplace; break;    /* PF3-key */
  101. #endif
  102.     default: funct = MNotImpl; break;
  103.     }
  104.     (*funct)();
  105.     cmnd = fndkey(funct);
  106.     lfunct = funct;
  107. }
  108. #ifdef VT100
  109. MVT100Arw()
  110. {
  111.     int ch;
  112.     int (*funct)();
  113.  
  114.     int MNextLin(), MPrevLin(), BWord(), FWord();
  115.     int MNotImpl();
  116.  
  117.     ch = TGetKb();
  118.     switch (ch) {
  119.     case 'B' : funct = MNextLin; break;    /* M-O-B (Down arrow key) */
  120.     case 'D' : funct = BWord; break;    /* M-O-D (Left arrow key) */
  121.     case 'C' : funct = FWord; break;    /* M-O-C (Right arrow key) */
  122.     case 'A' : funct = MPrevLin; break;    /* M-O-A (Up arrow key) */
  123.     default : funct = MNotImpl; break;
  124.     }
  125.     (*funct)();
  126.     cmnd = fndkey(funct);
  127.     lfunct = funct;
  128. }
  129. #endif
  130. #ifdef H19
  131. #else
  132. MDKeyPad()
  133. {
  134.     int ch;
  135.     int (*funct)();
  136.  
  137.     int MRDelChar(), MDelRgn(), MDelChar();
  138.     int MRDelWord(), MSetMrk(), MDelWord();
  139.     int MRDelLin(), MYank(), MDelLin();
  140.  
  141.     int MAbort(), MNotImpl();
  142.  
  143.     DelayPrompt("KeyPad destructor: ");
  144.     while(!TKbRdy()) ;
  145.  
  146.     if (TGetKb() != ESC) {MNotImpl(); return;}
  147. #ifdef VT100
  148.     if (TGetKb() != 'O') {MNotImpl(); return;}
  149. #else
  150.     if (TGetKb() != '?') {MNotImpl(); return;}
  151. #endif
  152.  
  153.     ch = TGetKb();
  154.     switch (ch) {
  155.     case 'q' : funct = MRDelLin; break;    /* 1-key */
  156.     case 'r' : funct = MYank; break;    /* 2-key */
  157.     case 's' : funct = MDelLin; break;    /* 3-key */
  158.     case 't' : funct = MRDelWord; break;    /* 4-key */
  159.     case 'u' : funct = MSetMrk; break;    /* 5-key */
  160.     case 'v' : funct = MDelWord; break;    /* 6-key */
  161.     case 'w' : funct = MRDelChar; break;    /* 7-key */
  162.     case 'x' : funct = MDelRgn; break;    /* 8-key */
  163.     case 'y' : funct = MDelChar; break;    /* 9-key */
  164.     case 'm' : funct = MAbort; break;    /* dash-key (unshift) */
  165.     default: funct = MNotImpl; break;
  166.     }
  167.     (*funct)();
  168.     lfunct = funct;
  169.     cmnd = fndkey(funct);
  170. }
  171. #endif
  172. MRDelLin()                /* delete the current line (reversely) */
  173. {
  174.     tmark=BCreMrk();
  175.     if (arg>0) {
  176.         if (!BIsStart() && (prevch()&255)==NL) BMove(-1);
  177.         else ToBegLine();
  178.         }
  179.     else ToEndLine();
  180.     KillToMrk(tmark,!(arg>0));
  181.     BKillMrk(tmark);
  182.     }
  183. static int prevch()
  184. {int tempch;
  185.  
  186.     if (!BIsStart()) {BMove(-1); tempch = Buff(); BMove(1);}
  187.     else tempch = 0;
  188.     return(tempch);
  189. }
  190. static int fndkey(cmd)
  191. int (*cmd)();
  192. {int i;
  193.  
  194.     for (i=0;i<384;i++)
  195.         if (cmd == functs[i]) return(i);
  196.     return(cmnd);
  197. }
  198. /*****************************************************************
  199.  *    WY-50 hacks.  Assumes that the function keys have be setup
  200.  *    to xmit ESC-{ x, where x is:
  201.  *    A for F1, B for F2, etc and a for shift-F1, b for shift-f2, etc.
  202.  *
  203.  *    Robert Heller
  204.  *    last mod 17-aug-1985 (this section only)
  205.  */
  206.  
  207. wy50_finit()
  208. {
  209.     int MWY50_Fn(),MRDelLin();
  210.  
  211.     functs[256+('K'-64)] = MRDelLin;
  212.     functs[128+'{'] = MWY50_Fn;
  213.     }
  214. static MWY50_Fn()
  215. {
  216.     int ch;
  217.     int (*funct)();
  218.  
  219.     int MPrevChar(), MPrevLin(), MNextChar();
  220.     int BWord(), MPrevPage(), FWord();
  221.     int MBegLin(), MNextLin(), MEndLin();
  222.     int MRSearch(), MNextPage(), MSearch();
  223.     int MNotImpl();
  224.     int MReplace(), MQryRplc();
  225.     int MRDelChar(), MDelRgn(), MDelChar();
  226.     int MRDelWord(), MSetMrk(), MDelWord();
  227.     int MRDelLin(), MYank(), MDelLin();
  228.  
  229.     int MAbort(), MNotImpl();
  230.  
  231.     ch = TGetKb();
  232.     switch (ch) {
  233.     case 'A' : funct = BWord; break;        /* F1 key */
  234.     case 'B' : funct = FWord; break;        /* F2 key */
  235.     case 'C' : funct = MNextLin; break;        /* F3 key */
  236.     case 'D' : funct = MPrevLin; break;        /* F4 key */
  237.     case 'a' : funct = BWord; break;        /* shift-F1 key */
  238.     case 'b' : funct = FWord; break;        /* shift-F2 key */
  239.     case 'c' : funct = MNextLin; break;        /* shift-F3 key */
  240.     case 'd' : funct = MPrevLin; break;        /* shift-F4 key */
  241.     case 'E' : funct = MPrevChar; break;    /* F5 key */
  242.     case 'e' : funct = MRDelChar; break;    /* shift-F5 key */
  243.     case 'F' : funct = MNextChar; break;    /* F6 key */
  244.     case 'f' : funct = MDelChar; break;        /* shift-F6 key */
  245.     case 'G' : funct = BWord; break;        /* F7 key */
  246.     case 'g' : funct = MRDelWord; break;    /* shift-F7 key */
  247.     case 'H' : funct = FWord; break;        /* F8 key */
  248.     case 'h' : funct = MDelWord; break;        /* shift-F8 key */
  249.     case 'I' : funct = MPrevLin; break;        /* F9 key */
  250.     case 'i' : funct = MDelRgn; break;        /* shift-F9 key */
  251.     case 'J' : funct = MNextLin; break;        /* F10 key */
  252.     case 'j' : funct = MYank; break;        /* shift-F10 key */
  253.     case 'K' : funct = MPrevPage; break;    /* F11 key */
  254.     case 'k' : funct = MSetMrk; break;        /* shift-F11 key */
  255.     case 'L' : funct = MNextPage; break;    /* F12 key */
  256.     case 'l' : funct = MNextPage; break;    /* shift-F12 key */
  257.     case 'M' : funct = MBegLin; break;        /* F13 key */
  258.     case 'm' : funct = MRDelLin; break;        /* shift-F13 key */
  259.     case 'N' : funct = MEndLin; break;        /* F14 key */
  260.     case 'n' : funct = MDelLin; break;        /* shift-F14 key */
  261.     case 'O' : funct = MRSearch; break;        /* F15 key */
  262.     case 'o' : funct = MQryRplc; break;        /* shift-F15 key */
  263.     case 'P' : funct = MSearch; break;        /* F16 key */
  264.     case 'p' : funct = MReplace; break;        /* shift-F16 key */
  265.     default : funct = MNotImpl; break;
  266.     }
  267.     (*funct)();
  268.     lfunct = funct;
  269.     cmnd = fndkey(funct);
  270.     }
  271. key */
  272.     default : funct = MNotImpl; break;
  273.     }
  274.     (*funct)();
  275.     lfunct = funct;
  276.