home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 10 / Fresh_Fish_10_2352.bin / useful / util / edit / mg / src.lzh / h / kbd.h < prev    next >
C/C++ Source or Header  |  1990-05-23  |  3KB  |  127 lines

  1. /*
  2.  * kbd.h: type definitions for symbol.c and kbd.c for mg experimental
  3.  */
  4.  
  5. #ifndef    KBD_H
  6. #define    KBD_H
  7.  
  8. /*
  9.  * function holds a union of all the things that a keystroke can point to.
  10.  */
  11. struct function {
  12. #ifdef    NOTDEF
  13.     union {
  14.         int             (*ff_funcp) ();    /* function pointer */
  15.         struct macro   *ff_macro;    /* Macro string */
  16.         struct keymap  *ff_pref;    /* Prefix map */
  17.     }               f_funct;
  18. #define    f_funcp    f_funct.ff_funcp
  19. #define    f_macro    f_funct.ff_macro
  20. #define f_pref    f_funct.ff_pref
  21. #endif
  22.     int             (*f_funcp) PROTO((int, int));
  23.     char            f_type;
  24. };
  25.  
  26. #define    f_macro    f_funcp
  27. #define f_pref    f_funcp
  28.  
  29. /* Typenames for mg_type */
  30. #define    F_CFUNCT    0
  31. #define    F_MACRO        1
  32. #define    F_PREFIX    2
  33.  
  34. /*
  35.  * This is a single element of a keymap, giving the function pointers for all
  36.  * keys between base and num in that map.
  37.  */
  38. struct map_element {
  39.     KCHAR           k_base;    /* first key in element     */
  40.     KCHAR           k_num;    /* last key in element     */
  41.     struct function *k_entry;    /* entries for this element */
  42. };
  43.  
  44. /* Kludge to make conversion easier */
  45. #define    k_funcp        k_entry->f_funct.ff_funcp
  46.  
  47. /*
  48.  * A keymap has max elements in it, of which num are used. The elements are
  49.  * sorted by k_base, and it is guaranteed that map_element[n].k_base <
  50.  * map_element[n].k_num. Breaking this rule will cause strange things to
  51.  * happen.
  52.  * 
  53.  * predefined keymaps are NOT type struct keymap because final array needs
  54.  * dimension.  If any changes are made to this struct, they must be reflected
  55.  * in all keymap declarations.
  56.  */
  57.  
  58. #define KEYMAPE(NUM)    {\
  59.     short    map_num;\
  60.     short    map_max;\
  61.     struct function *map_default;\
  62.     struct map_element map_element[NUM];\
  63. }
  64. /* elements used         */
  65. /* elements allocated         */
  66. /* default function         */
  67. /* realy [e_max]         */
  68.  
  69. struct keymap
  70.                 KEYMAPE(1);
  71.  
  72. #define none    ctrlg
  73.  
  74. /* number of map_elements to grow an overflowed keymap by */
  75. #define IMAPEXT 0
  76. #define MAPGROW 3
  77. #define MAPINIT (MAPGROW+1)
  78.  
  79. /*
  80.  * max number of default bindings added to avoid creating new element;
  81.  * 
  82.  * Note: this uses up more memory than is optimal. On the other hand, the keymap
  83.  * code is designed so that it leaks memory. So we trade away extra space
  84.  * here, in return for (hopefully) not reallocating maps & elements later,
  85.  * which would waste their memory.
  86.  */
  87. #define MAPELEDEF 3
  88.  
  89. struct maps {
  90.     struct keymap  *p_map;
  91.     char           *p_name;
  92. };
  93.  
  94. extern struct maps map_table[];
  95.  
  96. struct functnames {
  97.     int             (*n_funct) ();
  98.     char           *n_name;
  99. };
  100.  
  101. extern struct map_element *ele;
  102. extern struct functnames functnames[];
  103. extern int      nfunct;
  104.  
  105. #ifdef    NO_PROTO
  106. extern struct function *doscan();
  107. extern int      (*
  108.                          name_function()) ();
  109. extern char    *function_name();
  110. extern int      complete_function();
  111. extern struct keymap *name_map();
  112. extern char    *map_name();
  113. extern struct maps *name_mode();
  114. #else
  115. struct function *
  116.                 doscan(struct keymap * map, int c);
  117. struct keymap  *
  118.                 name_map(char *name);
  119. struct maps    *
  120.                 name_mode(char *name);
  121. char           *
  122.                 map_name(struct keymap * map);
  123. int
  124.                 bindkey(struct keymap * map, char *fname, KCHAR * keys, int kcount);
  125. #endif
  126. #endif
  127.