home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 1 / FishNMoreVol1.bin / more / code_examples / librar / key.c < prev    next >
Text File  |  1989-02-08  |  6KB  |  253 lines

  1. /*--------------------------------------*/
  2. /*                    */
  3. /*               KEY(X,X)               */
  4. /*                    */
  5. /* Functionality:            */
  6. /*    Inputs characters from the    */
  7. /*    keyboard.            */
  8. /* Arguments:                 */
  9. /*    0: If -1: Any key accepted.    */
  10. /*       If  0: Upper case forced.    */
  11. /*       If  1: 'Y' or 'N' input.    */
  12. /*      1: Any value > 1, accepts only    */
  13. /*       these keys.            */
  14. /* Examples:                */
  15. /*                    */
  16. /*    Any key: key(-1,0);        */
  17. /*    Upper case: key(0,0);        */
  18. /*    'Y' or 'N': key(1,0);        */
  19. /*    <CR> or Spc-bar: key(13,32);    */
  20. /* Returns: The key value hit.        */
  21. /* Functions used:            */
  22. /*     GETCH(),TOUPPER()        */
  23. /* Author: John Callicotte        */
  24. /* Date created/modified: 09/01/88    */
  25. /*                    */
  26. /*--------------------------------------*/
  27.  
  28. # include "ctype.h"
  29. # include "dos.h"
  30. key(a,b)
  31. int a,b;
  32. {
  33.         int d,flag;
  34.         flag=0;
  35.  
  36. KY1:    d=getch();        /* Get a key */
  37.  
  38.     if (!d){        /* Check for extended i/o. */
  39.         flag=1;
  40.         goto KY1;
  41.     }
  42.     if (d==3)               /* Check for ^C. */
  43.         exit(0);
  44.     if (flag){
  45.         switch(d){
  46.         case 15: d=222;        /* Shift Tab */
  47.              break;
  48.         case 16: d=190;        /* Alt-Q */
  49.              break;
  50.         case 17: d=196;        /* Alt-W */
  51.              break;
  52.         case 18: d=178;        /* Alt-E */
  53.              break;
  54.         case 19: d=191;        /* Alt-R */
  55.              break;
  56.         case 20: d=193;        /* Alt-T */
  57.              break;
  58.         case 21: d=198;        /* Alt-Y */
  59.              break;
  60.         case 22: d=194;        /* Alt-U */
  61.              break;
  62.         case 23: d=182;        /* Alt-I */
  63.              break;
  64.         case 24: d=188;        /* Alt-O */
  65.              break;
  66.         case 25: d=189;        /* Alt-P */
  67.              break;
  68.         case 30: d=174;        /* Alt-A */
  69.              break;
  70.         case 31: d=192;        /* Alt-S */
  71.              break;
  72.         case 32: d=177;      /* Alt-D */
  73.              break;
  74.         case 33: d=179;        /* Alt-F */
  75.              break;
  76.         case 34: d=180;        /* Alt-G */
  77.              break;
  78.         case 35: d=181;        /* Alt-H */
  79.              break;
  80.         case 36: d=183;        /* Alt-J */
  81.              break;
  82.         case 37: d=184;        /* Alt-K */
  83.              break;
  84.         case 38: d=185;        /* Alt-L */
  85.              break;
  86.         case 44: d=199;        /* Alt-Z */
  87.              break;
  88.         case 45: d=197;        /* Alt-X */
  89.              break;
  90.         case 46: d=176;        /* Alt-C */
  91.              break;
  92.         case 47: d=195;        /* Alt-V */
  93.              break;
  94.         case 48: d=175;        /* Alt-B */
  95.              break;
  96.         case 49: d=187;        /* Alt-N */
  97.              break;
  98.         case 50: d=186;        /* Alt-M */
  99.              break;
  100.         case 59: d=128;        /* F1 */
  101.              break;
  102.         case 60: d=129;        /* F2 */
  103.              break;
  104.         case 61: d=130;        /* F3 */
  105.              break;
  106.         case 62: d=131;        /* F4 */
  107.              break;
  108.         case 63: d=132;     /* F5 */
  109.              break;
  110.         case 64: d=133;        /* F6 */
  111.              break;
  112.         case 65: d=134;        /* F7 */
  113.              break;
  114.         case 66: d=135;        /* F8 */
  115.              break;
  116.         case 67: d=136;        /* F9 */
  117.              break;
  118.         case 68: d=137;        /* F10 */
  119.              break;
  120.         case 71: d=138;        /* Home */
  121.              break;
  122.         case 72: d=139;        /* Up arrow */
  123.              break;
  124.         case 73: d=140;        /* PgUp */
  125.              break;
  126.         case 75: d=145;        /* Left arrow */
  127.              break;
  128.         case 77: d=141;        /* Right arrow */
  129.              break;
  130.         case 79: d=144;        /* End */
  131.              break;
  132.         case 80: d=143;        /* Down arrow */
  133.              break;
  134.         case 81: d=142;        /* PgDn */
  135.              break;
  136.         case 82: d=146;        /* Ins */
  137.              break;
  138.         case 83: d=147;        /* Del */
  139.              break;
  140.         case 94: d=158;        /* Cntl-F1 */
  141.              break;
  142.         case 95: d=159;        /* Cntl-F2 */
  143.              break;
  144.         case 96: d=160;        /* Cntl-F3 */
  145.              break;
  146.         case 97: d=161;        /* Cntl-F4 */
  147.              break;
  148.         case 98: d=162;        /* Cntl-F5 */
  149.              break;
  150.         case 99: d=163;        /* Cntl-F6 */
  151.              break;
  152.            case 100: d=164;        /* Cntl-F7 */
  153.              break;
  154.            case 101: d=165;        /* Cntl-F8 */
  155.              break;
  156.            case 102: d=166;        /* Cntl-F9 */
  157.              break;
  158.            case 103: d=167;        /* Cntl-F10 */
  159.              break;
  160.            case 104: d=148;        /* Alt-F1 */
  161.              break;
  162.            case 105: d=149;        /* Alt-F2 */
  163.              break;
  164.            case 106: d=150;        /* Alt-F3 */
  165.              break;
  166.            case 107: d=151;        /* Alt-F4 */
  167.              break;
  168.            case 108: d=152;        /* Alt-F5 */
  169.              break;
  170.            case 109: d=153;        /* Alt-F6 */
  171.              break;
  172.            case 110: d=154;        /* Alt-F7 */
  173.              break;
  174.            case 111: d=155;        /* Alt-F8 */
  175.              break;
  176.            case 112: d=156;        /* Alt-F9 */
  177.              break;
  178.            case 113: d=157;        /* Alt-F10 */
  179.              break;
  180.            case 115: d=173;        /* Cntl-Left arrow */
  181.              break;
  182.            case 116: d=170;        /* Cntl-Right arrow */
  183.              break;
  184.            case 117: d=172;        /* Cntl-End */
  185.              break;
  186.            case 118: d=171;        /* Cntl-PgDn */
  187.              break;
  188.            case 119: d=168;        /* Cntl-Home */
  189.              break;
  190.            case 120: d=210;        /* Alt-1 */
  191.              break;
  192.            case 121: d=211;        /* Alt-2 */
  193.              break;
  194.            case 122: d=212;        /* Alt-3 */
  195.              break;
  196.            case 123: d=213;        /* Alt-4 */
  197.              break;
  198.            case 124: d=214;        /* Alt-5 */
  199.              break;
  200.            case 125: d=215;        /* Alt-6 */
  201.              break;
  202.            case 126: d=216;        /* Alt-7 */
  203.              break;
  204.            case 127: d=217;        /* Alt-8 */
  205.              break;
  206.            case 128: d=218;        /* Alt-9 */
  207.              break;
  208.            case 129: d=219;     /* Alt-0 */
  209.              break;
  210.            case 130: d=220;        /* Alt--*/
  211.              break;
  212.            case 131: d=221;        /* Alt-+*/
  213.              break;
  214.            case 132: d=169;        /* Alt-PgUp */
  215.              break;
  216.            case 184: d=200;        /* Shift-F1 */
  217.              break;
  218.            case 185: d=201;        /* Shift-F2 */
  219.              break;
  220.            case 186: d=202;        /* Shift-F3 */
  221.              break;
  222.            case 187: d=203;        /* Shift-F4 */
  223.              break;
  224.            case 188: d=204;        /* Shift-F5 */
  225.              break;
  226.            case 189: d=205;        /* Shift-F6 */
  227.              break;
  228.            case 190: d=206;        /* Shift-F7 */
  229.              break;
  230.            case 191: d=207;        /* Shift-F8 */
  231.              break;
  232.            case 192: d=208;        /* Shift-F9 */
  233.              break;
  234.            case 193: d=209;        /* Shift-F10 */
  235.         }
  236.         return(d);
  237.     }
  238.         if (a>=0)
  239.             d=toupper(d);
  240.     if (a>1){
  241.             if (d==a)
  242.                 goto END;
  243.     }
  244.     if (b>1 && b!=d)
  245.             goto KY1;
  246.     if (a>=0){
  247.             if (a==1 && d!='Y' && d!='N')
  248.                 goto KY1;
  249.     }
  250.  
  251. END:    return(d);
  252. }
  253.