[BACK]Return to keymap.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mg

Diff for /src/usr.bin/mg/keymap.c between version 1.2 and 1.3

version 1.2, 2000/03/03 19:31:26 version 1.3, 2000/04/13 06:12:15
Line 7 
Line 7 
 #include        "kbd.h"  #include        "kbd.h"
   
 /*  /*
  * Defined by "basic.c".  
  */  
 extern  int     gotobol();              /* Move to start of line        */  
 extern  int     backchar();             /* Move backward by characters  */  
 extern  int     gotoeol();              /* Move to end of line          */  
 extern  int     forwchar();             /* Move forward by characters   */  
 extern  int     gotobob();              /* Move to start of buffer      */  
 extern  int     gotoeob();              /* Move to end of buffer        */  
 extern  int     forwline();             /* Move forward by lines        */  
 extern  int     backline();             /* Move backward by lines       */  
 extern  int     forwpage();             /* Move forward by pages        */  
 extern  int     backpage();             /* Move backward by pages       */  
 extern  int     pagenext();             /* Page forward next window     */  
 extern  int     setmark();              /* Set mark                     */  
 extern  int     swapmark();             /* Swap "." and mark            */  
 extern  int     gotoline();             /* Go to a specified line.      */  
 #ifdef  GOSMACS  
 extern  int     forw1page();            /* move forward by lines        */  
 extern  int     back1page();            /* move back by lines           */  
 #endif  
   
 /*  
  * Defined by "buffer.c".  
  */  
 extern  int     listbuffers();          /* Display list of buffers      */  
 extern  int     usebuffer();            /* Switch a window to a buffer  */  
 extern  int     poptobuffer();          /* Other window to a buffer     */  
 extern  int     killbuffer();           /* Make a buffer go away.       */  
 extern  int     savebuffers();          /* Save unmodified buffers      */  
 extern  int     bufferinsert();         /* Insert buffer into another   */  
 extern  int     notmodified();          /* Reset modification flag      */  
   
 #ifndef NO_DIR  
 /*  
  * Defined by "dir.c"  
  */  
 extern  int     changedir();            /* change current directory     */  
 extern  int     showcwdir();            /* show current directory       */  
   
 #ifndef NO_DIRED  
 /*  
  * defined by "dired.c"  
  */  
 extern  int     dired();                /* dired                        */  
 extern  int     d_findfile();           /* dired find file              */  
 extern  int     d_del();                /* dired mark for deletion      */  
 extern  int     d_undel();              /* dired unmark                 */  
 extern  int     d_undelbak();           /* dired unmark backwards       */  
 extern  int     d_expunge();            /* dired expunge                */  
 extern  int     d_copy();               /* dired copy                   */  
 extern  int     d_rename();             /* dired rename                 */  
 extern  int     d_otherwindow();        /* dired other window           */  
 extern  int     d_ffotherwindow();      /* dired find file other window */  
 #endif  
 #endif  
   
 /*  
  * Defined by "extend.c".  
  */  
 extern  int     extend();               /* Extended commands.           */  
 extern  int     bindtokey();            /* Modify global key bindings.  */  
 extern  int     localbind();            /* Modify mode key bindings.    */  
 extern  int     define_key();           /* modify any key map           */  
 extern  int     unbindtokey();          /* delete global binding        */  
 extern  int     localunbind();          /* delete local binding         */  
 extern  int     insert();               /* insert string                */  
 #ifndef NO_STARTUP  
 extern  int     evalexpr();             /* Extended commands (again)    */  
 extern  int     evalbuffer();           /* Evaluate current buffer      */  
 extern  int     evalfile();             /* Evaluate a file              */  
 #endif  
   
 /*  
  * Defined by "file.c".  
  */  
 extern  int     filevisit();            /* Get a file, read write       */  
 extern  int     poptofile();            /* Get a file, other window     */  
 extern  int     filewrite();            /* Write a file                 */  
 extern  int     filesave();             /* Save current file            */  
 extern  int     fileinsert();           /* Insert file into buffer      */  
 #ifndef NO_BACKUP  
 extern  int     makebkfile();           /* Control backups on saves     */  
 #endif  
   
 /*  
  * defined by help.c  
  */  
 #ifndef NO_HELP  
 extern  int     desckey();              /* describe key                 */  
 extern  int     wallchart();            /* Make wall chart.             */  
 extern  int     help_help();            /* help help                    */  
 extern  int     apropos_command();      /* apropos                      */  
 #endif  
   
 /*  
  * defined by "kbd.c"  
  */  
 #ifdef  DO_METAKEY  
 extern  int     do_meta();              /* interpret meta keys          */  
 #endif  
 #ifdef  BSMAP  
 extern  int     bsmap();                /* backspace mapping            */  
 #endif  
 extern  int     universal_argument();   /* Ctrl-U                       */  
 extern  int     digit_argument();       /* M-1, etc.                    */  
 extern  int     negative_argument();    /* M--                          */  
 extern  int     selfinsert();           /* Insert character             */  
 extern  int     rescan();               /* internal try again function  */  
   
 /*  
  * defined by "macro.c"   * defined by "macro.c"
  */   */
 #ifndef NO_MACRO  #ifndef NO_MACRO
 extern  int     definemacro();          /* Begin macro                  */  extern int      definemacro();  /* Begin macro                   */
 extern  int     finishmacro();          /* End macro                    */  extern int      finishmacro();  /* End macro                     */
 extern  int     executemacro();         /* Execute macro                */  extern int      executemacro(); /* Execute macro                 */
 #endif  #endif
   
 /*  /*
  * Defined by "main.c".   * Defined by "main.c".
  */   */
 extern  int     ctrlg();                /* Abort out of things          */  extern int      ctrlg();        /* Abort out of things           */
 extern  int     quit();                 /* Quit                         */  extern int      quit();         /* Quit                          */
   
 /*  /*
  * Defined by "match.c"   * Defined by "match.c"
  */   */
 extern  int     showmatch();            /* Hack to show matching paren   */  extern int      showmatch();    /* Hack to show matching paren   */
   
 /* defined by "modes.c" */  /* defined by "modes.c" */
   
 extern  int     indentmode();           /* set auto-indent mode         */  extern int      indentmode();   /* set auto-indent mode          */
 extern  int     fillmode();             /* set word-wrap mode           */  extern int      fillmode();     /* set word-wrap mode            */
 extern  int     blinkparen();           /* Fake blink-matching-paren var */  extern int      blinkparen();   /* Fake blink-matching-paren var */
 #ifdef  NOTAB  #ifdef  NOTAB
 extern  int     notabmode();            /* no tab mode                  */  extern int      notabmode();    /* no tab mode                   */
 #endif  #endif
 extern  int     overwrite();            /* overwrite mode               */  extern int      overwrite();    /* overwrite mode                */
 extern  int     set_default_mode();     /* set default modes            */  extern int      set_default_mode();     /* set default modes             */
   
 /*  /*
  * defined by "paragraph.c" - the paragraph justification code.   * defined by "paragraph.c" - the paragraph justification code.
  */   */
 extern  int     gotobop();              /* Move to start of paragraph.  */  extern int      gotobop();      /* Move to start of paragraph.   */
 extern  int     gotoeop();              /* Move to end of paragraph.    */  extern int      gotoeop();      /* Move to end of paragraph.     */
 extern  int     fillpara();             /* Justify a paragraph.         */  extern int      fillpara();     /* Justify a paragraph.          */
 extern  int     killpara();             /* Delete a paragraph.          */  extern int      killpara();     /* Delete a paragraph.           */
 extern  int     setfillcol();           /* Set fill column for justify. */  extern int      setfillcol();   /* Set fill column for justify. */
 extern  int     fillword();             /* Insert char with word wrap.  */  extern int      fillword();     /* Insert char with word wrap.   */
   
 /*  /*
  * Defined by "random.c".   * Defined by "random.c".
  */   */
 extern  int     showcpos();             /* Show the cursor position     */  extern int      showcpos();     /* Show the cursor position      */
 extern  int     twiddle();              /* Twiddle characters           */  extern int      twiddle();      /* Twiddle characters            */
 extern  int     quote();                /* Insert literal               */  extern int      quote();        /* Insert literal                */
 extern  int     openline();             /* Open up a blank line         */  extern int      openline();     /* Open up a blank line          */
 extern  int     newline();              /* Insert newline               */  extern int      newline();      /* Insert newline                */
 extern  int     deblank();              /* Delete blank lines           */  extern int      deblank();      /* Delete blank lines            */
 extern  int     justone();              /* Delete extra whitespace      */  extern int      justone();      /* Delete extra whitespace       */
 extern  int     delwhite();             /* Delete all whitespace        */  extern int      delwhite();     /* Delete all whitespace         */
 extern  int     indent();               /* Insert newline, then indent  */  extern int      indent();       /* Insert newline, then indent   */
 extern  int     forwdel();              /* Forward delete               */  extern int      forwdel();      /* Forward delete                */
 extern  int     backdel();              /* Backward delete in           */  extern int      backdel();      /* Backward delete in            */
 extern  int     killline();             /* Kill forward                 */  extern int      killline();     /* Kill forward                  */
 extern  int     yank();                 /* Yank back from killbuffer.   */  extern int      yank();         /* Yank back from killbuffer.    */
 #ifdef NOTAB  #ifdef NOTAB
 extern  int     space_to_tabstop();  extern int      space_to_tabstop();
 #endif  #endif
   
 #ifdef  REGEX  #ifdef  REGEX
 /*  /*
  * Defined by "re_search.c"   * Defined by "re_search.c"
  */   */
 extern  int     re_forwsearch();        /* Regex search forward          */  extern int      re_forwsearch();/* Regex search forward          */
 extern  int     re_backsearch();        /* Regex search backwards        */  extern int      re_backsearch();/* Regex search backwards        */
 extern  int     re_searchagain();       /* Repeat regex search command   */  extern int      re_searchagain();       /* Repeat regex search command   */
 extern  int     re_queryrepl();         /* Regex query replace           */  extern int      re_queryrepl(); /* Regex query replace           */
 extern  int     setcasefold();          /* Set case fold in searches     */  extern int      setcasefold();  /* Set case fold in searches     */
 extern  int     delmatchlines();        /* Delete all lines matching     */  extern int      delmatchlines();/* Delete all lines matching     */
 extern  int     delnonmatchlines();     /* Delete all lines not matching */  extern int      delnonmatchlines();     /* Delete all lines not matching */
 extern  int     cntmatchlines();        /* Count matching lines          */  extern int      cntmatchlines();/* Count matching lines          */
 extern  int     cntnonmatchlines();     /* Count nonmatching lines       */  extern int      cntnonmatchlines();     /* Count nonmatching lines       */
 #endif  #endif
   
 /*  /*
  * Defined by "region.c".   * Defined by "region.c".
  */   */
 extern  int     killregion();           /* Kill region.                 */  extern int      killregion();   /* Kill region.                  */
 extern  int     copyregion();           /* Copy region to kill buffer.  */  extern int      copyregion();   /* Copy region to kill buffer.   */
 extern  int     lowerregion();          /* Lower case region.           */  extern int      lowerregion();  /* Lower case region.            */
 extern  int     upperregion();          /* Upper case region.           */  extern int      upperregion();  /* Upper case region.            */
 #ifdef  PREFIXREGION  #ifdef  PREFIXREGION
 extern  int     prefixregion();         /* Prefix all lines in region   */  extern int      prefixregion(); /* Prefix all lines in region    */
 extern  int     setprefix();            /* Set line prefix string       */  extern int      setprefix();    /* Set line prefix string        */
 #endif  #endif
   
 /*  /*
  * Defined by "search.c".   * Defined by "search.c".
  */   */
 extern  int     forwsearch();           /* Search forward               */  extern int      forwsearch();   /* Search forward                */
 extern  int     backsearch();           /* Search backwards             */  extern int      backsearch();   /* Search backwards              */
 extern  int     searchagain();          /* Repeat last search command   */  extern int      searchagain();  /* Repeat last search command    */
 extern  int     forwisearch();          /* Incremental search forward   */  extern int      forwisearch();  /* Incremental search forward    */
 extern  int     backisearch();          /* Incremental search backwards */  extern int      backisearch();  /* Incremental search backwards */
 extern  int     queryrepl();            /* Query replace                */  extern int      queryrepl();    /* Query replace                 */
   
 /*  /*
  * Defined by "spawn.c".   * Defined by "spawn.c".
  */   */
 extern  int     spawncli();             /* Run CLI in a subjob.         */  extern int      spawncli();             /* Run CLI in a subjob.          */
 #ifdef  VMS  #ifdef  VMS
 extern  int     attachtoparent();       /* Attach to parent process     */  extern int      attachtoparent();       /* Attach to parent process      */
 #endif  #endif
   
 /* defined by "version.c" */  /* defined by "version.c" */
   
 extern  int     showversion();          /* Show version numbers, etc.   */  extern int      showversion();  /* Show version numbers, etc.    */
   
 /*  /*
  * Defined by "window.c".   * Defined by "window.c".
  */   */
 extern  int     reposition();           /* Reposition window            */  extern int      reposition();   /* Reposition window             */
 extern  int     refresh();              /* Refresh the screen           */  extern int      refresh();      /* Refresh the screen            */
 extern  int     nextwind();             /* Move to the next window      */  extern int      nextwind();     /* Move to the next window       */
 #ifdef  GOSMACS  #ifdef  GOSMACS
 extern  int     prevwind();             /* Move to the previous window  */  extern int      prevwind();     /* Move to the previous window   */
 #endif  #endif
 extern  int     onlywind();             /* Make current window only one */  extern int      onlywind();     /* Make current window only one */
 extern  int     splitwind();            /* Split current window         */  extern int      splitwind();    /* Split current window          */
 extern  int     delwind();              /* Delete current window        */  extern int      delwind();      /* Delete current window         */
 extern  int     enlargewind();          /* Enlarge display window.      */  extern int      enlargewind();  /* Enlarge display window.       */
 extern  int     shrinkwind();           /* Shrink window.               */  extern int      shrinkwind();   /* Shrink window.                */
   
 /*  /*
  * Defined by "word.c".   * Defined by "word.c".
  */   */
 extern  int     backword();             /* Backup by words              */  extern int      backword();     /* Backup by words               */
 extern  int     forwword();             /* Advance by words             */  extern int      forwword();     /* Advance by words              */
 extern  int     upperword();            /* Upper case word.             */  extern int      upperword();    /* Upper case word.              */
 extern  int     lowerword();            /* Lower case word.             */  extern int      lowerword();    /* Lower case word.              */
 extern  int     capword();              /* Initial capitalize word.     */  extern int      capword();      /* Initial capitalize word.      */
 extern  int     delfword();             /* Delete forward word.         */  extern int      delfword();     /* Delete forward word.          */
 extern  int     delbword();             /* Delete backward word.        */  extern int      delbword();     /* Delete backward word.         */
   
 #ifdef  AMIGA  #ifdef  AMIGA
 #ifdef  DO_ICONIFY  #ifdef  DO_ICONIFY
 extern  int tticon();  extern int      tticon();
 #endif  #endif
 #ifdef  DO_MENU  #ifdef  DO_MENU
 extern  int     amigamenu();            /* Menu function                */  extern int      amigamenu();    /* Menu function                 */
 #endif  #endif
 #ifdef  MOUSE  #ifdef  MOUSE
 extern  int     amigamouse();           /* Amiga mouse functions        */  extern int      amigamouse();   /* Amiga mouse functions         */
 extern  int     mgotobob();  extern int      mgotobob();
 extern  int     mforwdel();  extern int      mforwdel();
 extern  int     mdelwhite();  extern int      mdelwhite();
 extern  int     mdelwind();  extern int      mdelwind();
 extern  int     mgotoeob();  extern int      mgotoeob();
 extern  int     menlargewind();  extern int      menlargewind();
 extern  int     mkillline();  extern int      mkillline();
 extern  int     mkillregion();  extern int      mkillregion();
 extern  int     mdelfword();  extern int      mdelfword();
 extern  int     mreposition();  extern int      mreposition();
 extern  int     mbackpage();  extern int      mbackpage();
 extern  int     mforwpage();  extern int      mforwpage();
 extern  int     mshrinkwind();  extern int      mshrinkwind();
 extern  int     msplitwind();  extern int      msplitwind();
 extern  int     myank();  extern int      myank();
 #endif  MOUSE  #endif                          /* MOUSE */
   
 extern  int     togglewindow();         /* Defined by "ttyio.c"         */  extern int      togglewindow(); /* Defined by "ttyio.c"          */
 extern  int     togglezooms();          /*    ""         ""             */  extern int      togglezooms();  /* ""         ""                 */
   
 #ifdef  CHANGE_FONT  #ifdef  CHANGE_FONT
 extern  int     setfont();              /* Defined by "ttyio.c"         */  extern int      setfont();      /* Defined by "ttyio.c"          */
 #endif  #endif
   
 #ifdef  CHANGE_COLOR  #ifdef  CHANGE_COLOR
         /* functions to mess with the mode line rendition, window colors*/  /* functions to mess with the mode line rendition, window colors */
 extern  int     ttmode();               /* Defined by "tty.c"           */  extern int      ttmode();       /* Defined by "tty.c"            */
 extern  int     tttext();               /*  ""                          */  extern int      tttext();       /* ""                            */
 extern  int     textforeground();       /*  ""                          */  extern int      textforeground();       /* ""                            */
 extern  int     textbackground();       /*  ""                          */  extern int      textbackground();       /* ""                            */
 extern  int     modeforeground();       /*  ""                          */  extern int      modeforeground();       /* ""                            */
 extern  int     modebackground();       /*  ""                          */  extern int      modebackground();       /* ""                            */
 #endif  #endif
   
 /*  /*
Line 303 
Line 193 
  */   */
 #include "amiga_maps.c"  #include "amiga_maps.c"
   
 #endif  /* AMIGA */  #endif                          /* AMIGA */
   
 /* initial keymap declarations, deepest first */  /* initial keymap declarations, deepest first */
   
 #ifndef NO_HELP  #ifndef NO_HELP
 static  PF      cHcG[] = {  static PF       cHcG[] = {
         ctrlg,          /* ^G */          ctrlg,                  /* ^G */
         help_help,      /* ^H */          help_help,              /* ^H */
 };  };
 static  PF      cHa[]   = {  static PF       cHa[] = {
         apropos_command,/* a */          apropos_command,        /* a */
         wallchart,      /* b */          wallchart,              /* b */
         desckey,        /* c */          desckey,                /* c */
 };  };
 static  struct  KEYMAPE(2+IMAPEXT)      helpmap = {  static struct KEYMAPE (2 + IMAPEXT) helpmap = {
         2,          2,
         2+IMAPEXT,          2 + IMAPEXT,
         rescan,          rescan,
         {          {
                 {CCHR('G'),CCHR('H'),   cHcG,   (KEYMAP *)NULL},                  {
                 {'a',   'c',            cHa,    (KEYMAP *)NULL},                          CCHR('G'), CCHR('H'), cHcG, (KEYMAP *) NULL
                   },
                   {
                           'a', 'c', cHa, (KEYMAP *) NULL
                   },
         }          }
 };  };
 #endif  #endif
   
 static  struct  KEYMAPE(1+IMAPEXT)      extramap1 = {  static struct KEYMAPE (1 + IMAPEXT) extramap1 = {
         0,          0,
         1+IMAPEXT,          1 + IMAPEXT,
         rescan          rescan
 };  };
   
 static  struct  KEYMAPE(1+IMAPEXT)      extramap2 = {  static struct KEYMAPE (1 + IMAPEXT) extramap2 = {
         0,          0,
         1+IMAPEXT,          1 + IMAPEXT,
         rescan          rescan
 };  };
   
 static  struct  KEYMAPE(1+IMAPEXT)      extramap3 = {  static struct KEYMAPE (1 + IMAPEXT) extramap3 = {
         0,          0,
         1+IMAPEXT,          1 + IMAPEXT,
         rescan          rescan
 };  };
   
 static  struct  KEYMAPE(1+IMAPEXT)      extramap4 = {  static struct KEYMAPE (1 + IMAPEXT) extramap4 = {
         0,          0,
         1+IMAPEXT,          1 + IMAPEXT,
         rescan          rescan
 };  };
   
 static  struct  KEYMAPE(1+IMAPEXT)      extramap5 = {  static struct KEYMAPE (1 + IMAPEXT) extramap5 = {
         0,          0,
         1+IMAPEXT,          1 + IMAPEXT,
         rescan          rescan
 };  };
   
 static  PF      cX4cF[] = {  static PF       cX4cF[] = {
         poptofile,      /* ^f */          poptofile,              /* ^f */
         ctrlg,          /* ^g */          ctrlg,                  /* ^g */
 };  };
 static  PF      cX4b[] = {  static PF       cX4b[] = {
         poptobuffer,    /* b */          poptobuffer,            /* b */
         rescan,         /* c */          rescan,                 /* c */
         rescan,         /* d */          rescan,                 /* d */
         rescan,         /* e */          rescan,                 /* e */
         poptofile,      /* f */          poptofile,              /* f */
 };  };
 static  struct  KEYMAPE(2+IMAPEXT)      cX4map  = {  static struct KEYMAPE (2 + IMAPEXT) cX4map = {
         2,          2,
         2+IMAPEXT,          2 + IMAPEXT,
         rescan,          rescan,
         {          {
                 {CCHR('F'),CCHR('G'),   cX4cF,  (KEYMAP *)NULL},                  {
                 {'b',   'f',            cX4b,   (KEYMAP *)NULL},                          CCHR('F'), CCHR('G'), cX4cF, (KEYMAP *) NULL
                   },
                   {
                           'b', 'f', cX4b, (KEYMAP *) NULL
                   },
         }          }
 };  };
   
 static  PF      cXcB[] = {  static PF       cXcB[] = {
         listbuffers,    /* ^B */          listbuffers,            /* ^B */
         quit,           /* ^C */          quit,                   /* ^C */
         rescan,         /* ^D */          rescan,                 /* ^D */
         rescan,         /* ^E */          rescan,                 /* ^E */
         filevisit,      /* ^F */          filevisit,              /* ^F */
         ctrlg,          /* ^G */          ctrlg,                  /* ^G */
 };  };
 static  PF      cXcL[] = {  static PF       cXcL[] = {
         lowerregion,    /* ^L */          lowerregion,            /* ^L */
         rescan,         /* ^M */          rescan,                 /* ^M */
         rescan,         /* ^N */          rescan,                 /* ^N */
         deblank,        /* ^O */          deblank,                /* ^O */
         rescan,         /* ^P */          rescan,                 /* ^P */
         rescan,         /* ^Q */          rescan,                 /* ^Q */
         rescan,         /* ^R */          rescan,                 /* ^R */
         filesave,       /* ^S */          filesave,               /* ^S */
         rescan,         /* ^T */          rescan,                 /* ^T */
         upperregion,    /* ^U */          upperregion,            /* ^U */
         rescan,         /* ^V */          rescan,                 /* ^V */
         filewrite,      /* ^W */          filewrite,              /* ^W */
         swapmark,       /* ^X */          swapmark,               /* ^X */
 };  };
 #ifndef NO_MACRO  #ifndef NO_MACRO
 static  PF      cXlp[]  = {  static PF       cXlp[] = {
         definemacro,    /* ( */          definemacro,            /* ( */
         finishmacro,    /* ) */          finishmacro,            /* ) */
 };  };
 #endif  #endif
 static  PF      cX0[]   = {  static PF       cX0[] = {
         delwind,        /* 0 */          delwind,                /* 0 */
         onlywind,       /* 1 */          onlywind,               /* 1 */
         splitwind,      /* 2 */          splitwind,              /* 2 */
         rescan,         /* 3 */          rescan,                 /* 3 */
         prefix,         /* 4 */          prefix,                 /* 4 */
 };  };
 static  PF      cXeq[]  = {  static PF       cXeq[] = {
         showcpos,       /* = */          showcpos,               /* = */
 };  };
 static  PF      cXcar[] = {  static PF       cXcar[] = {
         enlargewind,    /* ^ */          enlargewind,            /* ^ */
         rescan,         /* _ */          rescan,                 /* _ */
         rescan,         /* ` */          rescan,                 /* ` */
         rescan,         /* a */          rescan,                 /* a */
         usebuffer,      /* b */          usebuffer,              /* b */
         rescan,         /* c */          rescan,                 /* c */
 #ifndef NO_DIRED  #ifndef NO_DIRED
         dired,          /* d */          dired,                  /* d */
 #else  #else
         rescan,         /* d */          rescan,                 /* d */
 #endif  #endif
 #ifndef NO_MACRO  #ifndef NO_MACRO
         executemacro,   /* e */          executemacro,           /* e */
 #else  #else
         rescan,         /* e */          rescan,                 /* e */
 #endif  #endif
         setfillcol,     /* f */          setfillcol,             /* f */
         rescan,         /* g */          rescan,                 /* g */
         rescan,         /* h */          rescan,                 /* h */
         fileinsert,     /* i */          fileinsert,             /* i */
         rescan,         /* j */          rescan,                 /* j */
         killbuffer,     /* k */          killbuffer,             /* k */
         rescan,         /* l */          rescan,                 /* l */
         rescan,         /* m */          rescan,                 /* m */
         rescan,         /* n */          rescan,                 /* n */
         nextwind,       /* o */          nextwind,               /* o */
         rescan,         /* p */          rescan,                 /* p */
         rescan,         /* q */          rescan,                 /* q */
         rescan,         /* r */          rescan,                 /* r */
         savebuffers,    /* s */          savebuffers,            /* s */
 };  };
 #ifndef NO_MACRO  #ifndef NO_MACRO
 static  struct  KEYMAPE(6+IMAPEXT)      cXmap = {  static struct KEYMAPE (6 + IMAPEXT) cXmap = {
         6,          6,
         6+IMAPEXT,          6 + IMAPEXT,
 #else  #else
 static  struct  KEYMAPE(5+IMAPEXT)      cXmap = {  static struct KEYMAPE (5 + IMAPEXT) cXmap = {
         5,          5,
         5+IMAPEXT,          5 + IMAPEXT,
 #endif  #endif
         rescan,          rescan,
         {          {
                 {CCHR('B'),CCHR('G'),   cXcB,   (KEYMAP *)NULL},                  {
                 {CCHR('L'),CCHR('X'),   cXcL,   (KEYMAP *)NULL},                          CCHR('B'), CCHR('G'), cXcB, (KEYMAP *) NULL
                   },
                   {
                           CCHR('L'), CCHR('X'), cXcL, (KEYMAP *) NULL
                   },
 #ifndef NO_MACRO  #ifndef NO_MACRO
                 {'(',   ')',            cXlp,   (KEYMAP *)NULL},                  {
                           '(', ')', cXlp, (KEYMAP *) NULL
                   },
 #endif  #endif
                 {'0',   '4',            cX0,    (KEYMAP *)&cX4map},                  {
                 {'=',   '=',            cXeq,   (KEYMAP *)NULL},                          '0', '4', cX0, (KEYMAP *) & cX4map
                 {'^',   's',            cXcar,  (KEYMAP *)NULL},                  },
                   {
                           '=', '=', cXeq, (KEYMAP *) NULL
                   },
                   {
                           '^', 's', cXcar, (KEYMAP *) NULL
                   },
         }          }
 };  };
   
 static  PF      metacG[] = {  static PF       metacG[] = {
         ctrlg,          /* ^G */          ctrlg,                  /* ^G */
 };  };
 static  PF      metacV[] = {  static PF       metacV[] = {
         pagenext,       /* ^V */          pagenext,               /* ^V */
 };  };
 static  PF      metasp[] = {  static PF       metasp[] = {
         justone,        /* space */          justone,                /* space */
 };  };
 static  PF      metapct[] = {  static PF       metapct[] = {
         queryrepl,      /* % */          queryrepl,              /* % */
 };  };
 static  PF      metami[] = {  static PF       metami[] = {
         negative_argument,      /* - */          negative_argument,      /* - */
         rescan,         /* . */          rescan,                 /* . */
         rescan,         /* / */          rescan,                 /* / */
         digit_argument, /* 0 */          digit_argument,         /* 0 */
         digit_argument, /* 1 */          digit_argument,         /* 1 */
         digit_argument, /* 2 */          digit_argument,         /* 2 */
         digit_argument, /* 3 */          digit_argument,         /* 3 */
         digit_argument, /* 4 */          digit_argument,         /* 4 */
         digit_argument, /* 5 */          digit_argument,         /* 5 */
         digit_argument, /* 6 */          digit_argument,         /* 6 */
         digit_argument, /* 7 */          digit_argument,         /* 7 */
         digit_argument, /* 8 */          digit_argument,         /* 8 */
         digit_argument, /* 9 */          digit_argument,         /* 9 */
         rescan,         /* : */          rescan,                 /* : */
         rescan,         /* ; */          rescan,                 /* ; */
         gotobob,        /* < */          gotobob,                /* < */
         rescan,         /* = */          rescan,                 /* = */
         gotoeob,        /* > */          gotoeob,                /* > */
 };  };
 static  PF      metalb[] = {  static PF       metalb[] = {
         gotobop,        /* [ */          gotobop,                /* [ */
         delwhite,       /* \ */          delwhite,               /* \ */
         gotoeop,        /* ] */          gotoeop,                /* ] */
         rescan,         /* ^ */          rescan,                 /* ^ */
         rescan,         /* _ */          rescan,                 /* _ */
         rescan,         /* ` */          rescan,                 /* ` */
         rescan,         /* a */          rescan,                 /* a */
         backword,       /* b */          backword,               /* b */
         capword,        /* c */          capword,                /* c */
         delfword,       /* d */          delfword,               /* d */
         rescan,         /* e */          rescan,                 /* e */
         forwword,       /* f */          forwword,               /* f */
 };  };
 static  PF      metal[] = {  static PF       metal[] = {
         lowerword,      /* l */          lowerword,              /* l */
         rescan,         /* m */          rescan,                 /* m */
         rescan,         /* n */          rescan,                 /* n */
         rescan,         /* o */          rescan,                 /* o */
         rescan,         /* p */          rescan,                 /* p */
         fillpara,       /* q */          fillpara,               /* q */
         backsearch,     /* r */          backsearch,             /* r */
         forwsearch,     /* s */          forwsearch,             /* s */
         rescan,         /* t */          rescan,                 /* t */
         upperword,      /* u */          upperword,              /* u */
         backpage,       /* v */          backpage,               /* v */
         copyregion,     /* w */          copyregion,             /* w */
         extend,         /* x */          extend,                 /* x */
 };  };
 static  PF      metatilde[] = {  static PF       metatilde[] = {
         notmodified,    /* ~ */          notmodified,            /* ~ */
         delbword,       /* DEL */          delbword,               /* DEL */
 };  };
 static  struct  KEYMAPE(8+IMAPEXT)      metamap = {  static struct KEYMAPE (8 + IMAPEXT) metamap = {
         8,          8,
         8+IMAPEXT,          8 + IMAPEXT,
         rescan,          rescan,
         {          {
                 {CCHR('G'),CCHR('G'),   metacG, (KEYMAP *)NULL},                  {
                 {CCHR('V'),CCHR('V'),   metacV, (KEYMAP *)NULL},                          CCHR('G'), CCHR('G'), metacG, (KEYMAP *) NULL
                 {' ',   ' ',            metasp, (KEYMAP *)NULL},                  },
                 {'%',   '%',            metapct,(KEYMAP *)NULL},                  {
                 {'-',   '>',            metami, (KEYMAP *)NULL},                          CCHR('V'), CCHR('V'), metacV, (KEYMAP *) NULL
                 {'[',   'f',            metalb, (KEYMAP *)NULL},                  },
                 {'l',   'x',            metal,  (KEYMAP *)NULL},                  {
                 {'~',   CCHR('?'),      metatilde,(KEYMAP *)NULL},                          ' ', ' ', metasp, (KEYMAP *) NULL
                   },
                   {
                           '%', '%', metapct, (KEYMAP *) NULL
                   },
                   {
                           '-', '>', metami, (KEYMAP *) NULL
                   },
                   {
                           '[', 'f', metalb, (KEYMAP *) NULL
                   },
                   {
                           'l', 'x', metal, (KEYMAP *) NULL
                   },
                   {
                           '~', CCHR('?'), metatilde, (KEYMAP *) NULL
                   },
         }          }
 };  };
   
 static  PF      fund_at[] = {  static PF       fund_at[] = {
         setmark,        /* ^@ */          setmark,                /* ^@ */
         gotobol,        /* ^A */          gotobol,                /* ^A */
         backchar,       /* ^B */          backchar,               /* ^B */
         rescan,         /* ^C */          rescan,                 /* ^C */
         forwdel,        /* ^D */          forwdel,                /* ^D */
         gotoeol,        /* ^E */          gotoeol,                /* ^E */
         forwchar,       /* ^F */          forwchar,               /* ^F */
         ctrlg,          /* ^G */          ctrlg,                  /* ^G */
 #ifndef NO_HELP  #ifndef NO_HELP
         prefix,         /* ^H */          prefix,                 /* ^H */
 #else  #else
         rescan,         /* ^H */          rescan,                 /* ^H */
 #endif  #endif
 };  };
 /* ^I is selfinsert */  /* ^I is selfinsert */
 static  PF      fund_CJ[] = {  static PF       fund_CJ[] = {
         indent,         /* ^J */          indent,                 /* ^J */
         killline,       /* ^K */          killline,               /* ^K */
         reposition,     /* ^L */          reposition,             /* ^L */
         newline,        /* ^M */          newline,                /* ^M */
         forwline,       /* ^N */          forwline,               /* ^N */
         openline,       /* ^O */          openline,               /* ^O */
         backline,       /* ^P */          backline,               /* ^P */
         quote,          /* ^Q */          quote,                  /* ^Q */
         backisearch,    /* ^R */          backisearch,            /* ^R */
         forwisearch,    /* ^S */          forwisearch,            /* ^S */
         twiddle,        /* ^T */          twiddle,                /* ^T */
         universal_argument,     /* ^U */          universal_argument,     /* ^U */
         forwpage,       /* ^V */          forwpage,               /* ^V */
         killregion,     /* ^W */          killregion,             /* ^W */
         prefix,         /* ^X */          prefix,                 /* ^X */
         yank,           /* ^Y */          yank,                   /* ^Y */
 #ifndef VMS  #ifndef VMS
         spawncli,        /* ^Z */          spawncli,               /* ^Z */
 #else  #else
         attachtoparent, /* ^Z */          attachtoparent,         /* ^Z */
 #endif  #endif
 };  };
 static  PF      fund_esc[] = {  static PF       fund_esc[] = {
         prefix,         /* esc */          prefix,                 /* esc */
         rescan,         /* ^\ */        /* selfinsert is default on fundamental */          rescan,                 /* ^\ *//* selfinsert is default on
         rescan,         /* ^] */                                   * fundamental */
         rescan,         /* ^^ */          rescan,                 /* ^] */
         rescan,         /* ^_ */          rescan,                 /* ^^ */
           rescan,                 /* ^_ */
 };  };
 static  PF      fund_del[] = {  static PF       fund_del[] = {
         backdel,        /* DEL */          backdel,                /* DEL */
 };  };
   
 #ifndef FUND_XMAPS  #ifndef FUND_XMAPS
 #define NFUND_XMAPS     0       /* extra map sections after normal ones */  #define NFUND_XMAPS     0       /* extra map sections after normal ones */
 #endif  #endif
   
 static  struct  KEYMAPE(4+NFUND_XMAPS+IMAPEXT)  fundmap = {  static struct KEYMAPE (4 + NFUND_XMAPS + IMAPEXT) fundmap = {
         4 + NFUND_XMAPS,          4 + NFUND_XMAPS,
         4 + NFUND_XMAPS + IMAPEXT,          4 + NFUND_XMAPS + IMAPEXT,
         selfinsert,          selfinsert,
         {          {
 #ifndef NO_HELP  #ifndef NO_HELP
                 {CCHR('@'),CCHR('H'),   fund_at, (KEYMAP *)&helpmap},                  {
                           CCHR('@'), CCHR('H'), fund_at, (KEYMAP *) & helpmap
                   },
 #else  #else
                 {CCHR('@'),CCHR('H'),   fund_at, (KEYMAP *)NULL},                  {
                           CCHR('@'), CCHR('H'), fund_at, (KEYMAP *) NULL
                   },
 #endif  #endif
                 {CCHR('J'),CCHR('Z'),   fund_CJ, (KEYMAP *)&cXmap},                  {
                 {CCHR('['),CCHR('_'),   fund_esc,(KEYMAP *)&metamap},                          CCHR('J'), CCHR('Z'), fund_CJ, (KEYMAP *) & cXmap
                 {CCHR('?'),CCHR('?'),   fund_del,(KEYMAP *)NULL},                  },
                   {
                           CCHR('['), CCHR('_'), fund_esc, (KEYMAP *) & metamap
                   },
                   {
                           CCHR('?'), CCHR('?'), fund_del, (KEYMAP *) NULL
                   },
 #ifdef  FUND_XMAPS  #ifdef  FUND_XMAPS
                 FUND_XMAPS,                  FUND_XMAPS,
 #endif  #endif
         }          }
 };  };
   
 static  PF      fill_sp[] = {  static PF       fill_sp[] = {
         fillword,       /* ' ' */          fillword,               /* ' ' */
 };  };
 static struct KEYMAPE(1+IMAPEXT)        fillmap = {  static struct KEYMAPE (1 + IMAPEXT) fillmap = {
         1,          1,
         1+IMAPEXT,          1 + IMAPEXT,
         rescan,          rescan,
         {          {
                 {' ',   ' ',    fill_sp,        (KEYMAP *)NULL},                  {
                           ' ', ' ', fill_sp, (KEYMAP *) NULL
                   },
         }          }
 };  };
   
 static  PF      indent_lf[] = {  static PF       indent_lf[] = {
         newline,        /* ^J */          newline,                /* ^J */
         rescan,         /* ^K */          rescan,                 /* ^K */
         rescan,         /* ^L */          rescan,                 /* ^L */
         indent,         /* ^M */          indent,                 /* ^M */
 };  };
 static  struct  KEYMAPE(1+IMAPEXT)      indntmap = {  static struct KEYMAPE (1 + IMAPEXT) indntmap = {
         1,          1,
         1+IMAPEXT,          1 + IMAPEXT,
         rescan,          rescan,
         {          {
                 {CCHR('J'), CCHR('M'),  indent_lf,      (KEYMAP *)NULL},                  {
                           CCHR('J'), CCHR('M'), indent_lf, (KEYMAP *) NULL
                   },
         }          }
 };  };
 static  PF      blink_rp[] = {  static PF       blink_rp[] = {
         showmatch,      /* ) */          showmatch,              /* ) */
 };  };
 static  struct  KEYMAPE(1+IMAPEXT)      blinkmap = {  static struct KEYMAPE (1 + IMAPEXT) blinkmap = {
         1,          1,
         1+IMAPEXT,          1 + IMAPEXT,
         rescan,          rescan,
         {          {
                 {')',   ')',    blink_rp,       (KEYMAP *)NULL},                  {
                           ')', ')', blink_rp, (KEYMAP *) NULL
                   },
         }          }
 };  };
   
 #ifdef  NOTAB  #ifdef  NOTAB
 static  PF      notab_tab[] = {  static PF       notab_tab[] = {
         space_to_tabstop,       /* ^I */          space_to_tabstop,       /* ^I */
 };  };
 static  struct  KEYMAPE(1+IMAPEXT)      notabmap = {  static struct KEYMAPE (1 + IMAPEXT) notabmap = {
         1,          1,
         1+IMAPEXT,          1 + IMAPEXT,
         rescan,          rescan,
         {          {
                 {CCHR('I'),CCHR('I'),   notab_tab,      (KEYMAP *)NULL},                  {
                           CCHR('I'), CCHR('I'), notab_tab, (KEYMAP *) NULL
                   },
         }          }
 };  };
 #endif  #endif
   
 static  struct  KEYMAPE(1+IMAPEXT)      overwmap = {  static struct KEYMAPE (1 + IMAPEXT) overwmap = {
         0,          0,
         1+IMAPEXT,                      /* 1 to avoid 0 sized array */          1 + IMAPEXT,            /* 1 to avoid 0 sized array */
         rescan,          rescan,
         {          {
                 /* unused dummy entry for VMS C */                  /* unused dummy entry for VMS C */
                 {(KCHAR)0,      (KCHAR)0, (PF *)NULL,   (KEYMAP *)NULL},                  {
                           (KCHAR) 0, (KCHAR) 0, (PF *) NULL, (KEYMAP *) NULL
                   },
         }          }
 };  };
   
 #ifndef NO_DIRED  #ifndef NO_DIRED
 static  PF      dirednul[] = {  static PF       dirednul[] = {
         setmark,        /* ^@ */          setmark,                /* ^@ */
         gotobol,        /* ^A */          gotobol,                /* ^A */
         backchar,       /* ^B */          backchar,               /* ^B */
         rescan,         /* ^C */          rescan,                 /* ^C */
         d_del,          /* ^D */          d_del,                  /* ^D */
         gotoeol,        /* ^E */          gotoeol,                /* ^E */
         forwchar,       /* ^F */          forwchar,               /* ^F */
         ctrlg,          /* ^G */          ctrlg,                  /* ^G */
 #ifndef NO_HELP  #ifndef NO_HELP
         prefix,         /* ^H */          prefix,                 /* ^H */
 #endif  #endif
 };  };
 static  PF      diredcl[] = {  static PF       diredcl[] = {
         reposition,     /* ^L */          reposition,             /* ^L */
         forwline,       /* ^M */          forwline,               /* ^M */
         forwline,       /* ^N */          forwline,               /* ^N */
         rescan,         /* ^O */          rescan,                 /* ^O */
         backline,       /* ^P */          backline,               /* ^P */
         rescan,         /* ^Q */          rescan,                 /* ^Q */
         backisearch,    /* ^R */          backisearch,            /* ^R */
         forwisearch,    /* ^S */          forwisearch,            /* ^S */
         rescan,         /* ^T */          rescan,                 /* ^T */
         universal_argument, /* ^U */          universal_argument,     /* ^U */
         forwpage,       /* ^V */          forwpage,               /* ^V */
         rescan,         /* ^W */          rescan,                 /* ^W */
         prefix,         /* ^X */          prefix,                 /* ^X */
 };  };
 static  PF      diredcz[] = {  static PF       diredcz[] = {
 #ifndef VMS  #ifndef VMS
         spawncli,        /* ^Z */          spawncli,               /* ^Z */
 #else  #else
         attachtoparent, /* ^Z */          attachtoparent,         /* ^Z */
 #endif  #endif
         prefix,         /* esc */          prefix,                 /* esc */
         rescan,         /* ^\ */          rescan,                 /* ^\ */
         rescan,         /* ^] */          rescan,                 /* ^] */
         rescan,         /* ^^ */          rescan,                 /* ^^ */
         rescan,         /* ^_ */          rescan,                 /* ^_ */
         forwline,       /* SP */          forwline,               /* SP */
 };  };
 static  PF      diredc[] = {  static PF       diredc[] = {
         d_copy,         /* c */          d_copy,                 /* c */
         d_del,          /* d */          d_del,                  /* d */
         d_findfile,     /* e */          d_findfile,             /* e */
         d_findfile,     /* f */          d_findfile,             /* f */
 };  };
 static  PF      diredn[] = {  static PF       diredn[] = {
         forwline,       /* n */          forwline,               /* n */
         d_ffotherwindow,/* o */          d_ffotherwindow,        /* o */
         backline,       /* p */          backline,               /* p */
         rescan,         /* q */          rescan,                 /* q */
         d_rename,       /* r */          d_rename,               /* r */
         rescan,         /* s */          rescan,                 /* s */
         rescan,         /* t */          rescan,                 /* t */
         d_undel,        /* u */          d_undel,                /* u */
         rescan,         /* v */          rescan,                 /* v */
         rescan,         /* w */          rescan,                 /* w */
         d_expunge,      /* x */          d_expunge,              /* x */
 };  };
 static  PF      direddl[] = {  static PF       direddl[] = {
         d_undelbak,     /* del */          d_undelbak,             /* del */
 };  };
   
 #ifndef DIRED_XMAPS  #ifndef DIRED_XMAPS
 #define NDIRED_XMAPS    0       /* number of extra map sections */  #define NDIRED_XMAPS    0       /* number of extra map sections */
 #endif  #endif
   
 static  struct  KEYMAPE(6 + NDIRED_XMAPS + IMAPEXT)     diredmap = {  static struct KEYMAPE (6 + NDIRED_XMAPS + IMAPEXT) diredmap = {
         6 + NDIRED_XMAPS,          6 + NDIRED_XMAPS,
         6 + NDIRED_XMAPS + IMAPEXT,          6 + NDIRED_XMAPS + IMAPEXT,
         rescan,          rescan,
         {          {
 #ifndef NO_HELP  #ifndef NO_HELP
                 {CCHR('@'),     CCHR('H'),      dirednul, (KEYMAP *)&helpmap},                  {
                           CCHR('@'), CCHR('H'), dirednul, (KEYMAP *) & helpmap
                   },
 #else  #else
                 {CCHR('@'),     CCHR('G'),      dirednul, (KEYMAP *)NULL},                  {
                           CCHR('@'), CCHR('G'), dirednul, (KEYMAP *) NULL
                   },
 #endif  #endif
                 {CCHR('L'),     CCHR('X'),      diredcl,  (KEYMAP *)&cXmap},                  {
                 {CCHR('Z'),     ' ',            diredcz,  (KEYMAP *)&metamap},                          CCHR('L'), CCHR('X'), diredcl, (KEYMAP *) & cXmap
                 {'c',           'f',            diredc,   (KEYMAP *)NULL},                  },
                 {'n',           'x',            diredn,   (KEYMAP *)NULL},                  {
                 {CCHR('?'),     CCHR('?'),      direddl,  (KEYMAP *)NULL},                          CCHR('Z'), ' ', diredcz, (KEYMAP *) & metamap
                   },
                   {
                           'c', 'f', diredc, (KEYMAP *) NULL
                   },
                   {
                           'n', 'x', diredn, (KEYMAP *) NULL
                   },
                   {
                           CCHR('?'), CCHR('?'), direddl, (KEYMAP *) NULL
                   },
 #ifdef  DIRED_XMAPS  #ifdef  DIRED_XMAPS
                 DIRED_XMAPS,    /* map sections for dired mode keys     */                  DIRED_XMAPS,    /* map sections for dired mode keys      */
 #endif  #endif
         }          }
 };  };
 #endif  #endif
   
 /* give names to the maps, for use by help etc.  /*
  * If the map is to be bindable, it must also be listed in the   * give names to the maps, for use by help etc. If the map is to be bindable,
  * function name table below with the same name.   * it must also be listed in the function name table below with the same
  * Maps created dynamicly currently don't get added here, thus are unnamed.   * name. Maps created dynamicly currently don't get added here, thus are
  * Modes are just named keymaps with functions to add/subtract them from   * unnamed. Modes are just named keymaps with functions to add/subtract them
  * a buffer's list of modes.  If you change a mode name, change it in   * from a buffer's list of modes.  If you change a mode name, change it in
  * modes.c also.   * modes.c also.
  */   */
   
 MAPS    map_table[] = {  MAPS            map_table[] = {
         /* fundamental map MUST be first entry */          /* fundamental map MUST be first entry */
         {(KEYMAP *)&fundmap,    "fundamental"},          {(KEYMAP *) & fundmap, "fundamental"},
         {(KEYMAP *)&fillmap,    "fill"},          {(KEYMAP *) & fillmap, "fill"},
         {(KEYMAP *)&indntmap,   "indent"},          {(KEYMAP *) & indntmap, "indent"},
         {(KEYMAP *)&blinkmap,   "blink"},          {(KEYMAP *) & blinkmap, "blink"},
 #ifdef  NOTAB  #ifdef  NOTAB
         {(KEYMAP *)&notabmap,   "notab"},          {(KEYMAP *) & notabmap, "notab"},
 #endif  #endif
         {(KEYMAP *)&overwmap,   "overwrite"},          {(KEYMAP *) & overwmap, "overwrite"},
         {(KEYMAP *)&metamap,    "esc prefix"},          {(KEYMAP *) & metamap, "esc prefix"},
         {(KEYMAP *)&cXmap,      "c-x prefix"},          {(KEYMAP *) & cXmap, "c-x prefix"},
         {(KEYMAP *)&cX4map,     "c-x 4 prefix"},          {(KEYMAP *) & cX4map, "c-x 4 prefix"},
         {(KEYMAP *)&extramap1,  "extra prefix 1"},          {(KEYMAP *) & extramap1, "extra prefix 1"},
         {(KEYMAP *)&extramap2,  "extra prefix 2"},          {(KEYMAP *) & extramap2, "extra prefix 2"},
         {(KEYMAP *)&extramap3,  "extra prefix 3"},          {(KEYMAP *) & extramap3, "extra prefix 3"},
         {(KEYMAP *)&extramap4,  "extra prefix 4"},          {(KEYMAP *) & extramap4, "extra prefix 4"},
         {(KEYMAP *)&extramap5,  "extra prefix 5"},          {(KEYMAP *) & extramap5, "extra prefix 5"},
 #ifndef NO_HELP  #ifndef NO_HELP
         {(KEYMAP *)&helpmap,    "help"},          {(KEYMAP *) & helpmap, "help"},
 #endif  #endif
 #ifndef NO_DIRED  #ifndef NO_DIRED
         {(KEYMAP *)&diredmap,   "dired"},          {(KEYMAP *) & diredmap, "dired"},
 #endif  #endif
 };  };
   
 #define NMAPS   (sizeof map_table/sizeof(MAPS))  #define NMAPS   (sizeof map_table/sizeof(MAPS))
 int     nmaps = NMAPS;          /* for use by rebind in extend.c */  int             nmaps = NMAPS;  /* for use by rebind in extend.c */
   
 char *map_name(map)  char           *
 KEYMAP *map;  map_name(map)
           KEYMAP         *map;
 {  {
         MAPS *mp = &map_table[0];          MAPS           *mp = &map_table[0];
   
         do {          do {
             if(mp->p_map == map) return mp->p_name;                  if (mp->p_map == map)
         } while(++mp < &map_table[NMAPS]);                          return mp->p_name;
         return (char *)NULL;          } while (++mp < &map_table[NMAPS]);
           return (char *) NULL;
 }  }
   
 MAPS *name_mode(name)  MAPS           *
 char *name;  name_mode(name)
           char           *name;
 {  {
         MAPS *mp = &map_table[0];          MAPS           *mp = &map_table[0];
   
         do {          do {
             if(strcmp(mp->p_name,name)==0) return mp;                  if (strcmp(mp->p_name, name) == 0)
         } while(++mp < &map_table[NMAPS]);                          return mp;
         return (MAPS *)NULL;          } while (++mp < &map_table[NMAPS]);
           return (MAPS *) NULL;
 }  }
   
 KEYMAP *name_map(name)  KEYMAP         *
 char *name;  name_map(name)
           char           *name;
 {  {
         MAPS *mp;          MAPS           *mp;
         return (mp=name_mode(name))==NULL ? (KEYMAP *)NULL : mp->p_map;          return (mp = name_mode(name)) == NULL ? (KEYMAP *) NULL : mp->p_map;
 }  }
   
 /* Warning: functnames MUST be in alphabetical order!  (due to binary  /*
  * search in name_function.)  If the function is prefix, it must be listed   * Warning: functnames MUST be in alphabetical order!  (due to binary search
  * with the same name in the map_table above.   * in name_function.)  If the function is prefix, it must be listed with the
    * same name in the map_table above.
  */   */
   
 FUNCTNAMES      functnames[] = {  FUNCTNAMES      functnames[] = {
 #ifdef  AMIGA  #ifdef  AMIGA
 #ifdef  DO_ICONIFY  #ifdef  DO_ICONIFY
         {tticon,        "amiga-iconify"},          {tticon, "amiga-iconify"},
 #endif  #endif
 #ifdef  DO_MENU  #ifdef  DO_MENU
         {amigamenu,     "amiga-menu"},          {amigamenu, "amiga-menu"},
 #endif  #endif
 #ifdef  CHANGE_COLOR  #ifdef  CHANGE_COLOR
         {modebackground,"amiga-mode-background"},          {modebackground, "amiga-mode-background"},
         {modeforeground,"amiga-mode-foreground"},          {modeforeground, "amiga-mode-foreground"},
         {ttmode,        "amiga-mode-rendition"},          {ttmode, "amiga-mode-rendition"},
 #endif  #endif
 #ifdef  CHANGE_FONT  #ifdef  CHANGE_FONT
         {setfont,       "amiga-set-font"},          {setfont, "amiga-set-font"},
 #endif  #endif
 #ifdef  CHANGE_COLOR  #ifdef  CHANGE_COLOR
         {textbackground,"amiga-text-background"},          {textbackground, "amiga-text-background"},
         {textforeground,"amiga-text-foreground"},          {textforeground, "amiga-text-foreground"},
         {tttext,        "amiga-text-rendition"},          {tttext, "amiga-text-rendition"},
 #endif  #endif
         {togglewindow,  "amiga-toggle-border"},          {togglewindow, "amiga-toggle-border"},
         {togglezooms,   "amiga-zoom-mode"},          {togglezooms, "amiga-zoom-mode"},
 #endif  /* AMIGA */  #endif                          /* AMIGA */
 #ifndef NO_HELP  #ifndef NO_HELP
         {apropos_command, "apropos"},          {apropos_command, "apropos"},
 #endif  #endif
         {fillmode,      "auto-fill-mode"},          {fillmode, "auto-fill-mode"},
         {indentmode,    "auto-indent-mode"},          {indentmode, "auto-indent-mode"},
         {backchar,      "backward-char"},          {backchar, "backward-char"},
         {delbword,      "backward-kill-word"},          {delbword, "backward-kill-word"},
         {gotobop,       "backward-paragraph"},          {gotobop, "backward-paragraph"},
         {backword,      "backward-word"},          {backword, "backward-word"},
         {gotobob,       "beginning-of-buffer"},          {gotobob, "beginning-of-buffer"},
         {gotobol,       "beginning-of-line"},          {gotobol, "beginning-of-line"},
         {blinkparen,    "blink-matching-paren"},          {blinkparen, "blink-matching-paren"},
         {showmatch,     "blink-matching-paren-hack"},          {showmatch, "blink-matching-paren-hack"},
 #ifdef  BSMAP  #ifdef  BSMAP
         {bsmap,         "bsmap-mode"},          {bsmap, "bsmap-mode"},
 #endif  #endif
         {prefix,        "c-x 4 prefix"},          {prefix, "c-x 4 prefix"},
         {prefix,        "c-x prefix"},          {prefix, "c-x prefix"},
 #ifndef NO_MACRO  #ifndef NO_MACRO
         {executemacro,  "call-last-kbd-macro"},          {executemacro, "call-last-kbd-macro"},
 #endif  #endif
         {capword,       "capitalize-word"},          {capword, "capitalize-word"},
 #ifndef NO_DIR  #ifndef NO_DIR
         {changedir,     "cd"},          {changedir, "cd"},
 #endif  #endif
         {copyregion,    "copy-region-as-kill"},          {copyregion, "copy-region-as-kill"},
 #ifdef  REGEX  #ifdef  REGEX
         {cntmatchlines, "count-matches"},          {cntmatchlines, "count-matches"},
         {cntnonmatchlines,"count-non-matches"},          {cntnonmatchlines, "count-non-matches"},
 #endif  #endif
         {define_key,    "define-key"},          {define_key, "define-key"},
         {backdel,       "delete-backward-char"},          {backdel, "delete-backward-char"},
         {deblank,       "delete-blank-lines"},          {deblank, "delete-blank-lines"},
         {forwdel,       "delete-char"},          {forwdel, "delete-char"},
         {delwhite,      "delete-horizontal-space"},          {delwhite, "delete-horizontal-space"},
 #ifdef  REGEX  #ifdef  REGEX
         {delmatchlines, "delete-matching-lines"},          {delmatchlines, "delete-matching-lines"},
         {delnonmatchlines,"delete-non-matching-lines"},          {delnonmatchlines, "delete-non-matching-lines"},
 #endif  #endif
         {onlywind,      "delete-other-windows"},          {onlywind, "delete-other-windows"},
         {delwind,       "delete-window"},          {delwind, "delete-window"},
 #ifndef NO_HELP  #ifndef NO_HELP
         {wallchart,     "describe-bindings"},          {wallchart, "describe-bindings"},
         {desckey,       "describe-key-briefly"},          {desckey, "describe-key-briefly"},
 #endif  #endif
         {digit_argument,"digit-argument"},          {digit_argument, "digit-argument"},
 #ifndef NO_DIRED  #ifndef NO_DIRED
         {dired,         "dired"},          {dired, "dired"},
         {d_undelbak,    "dired-backup-unflag"},          {d_undelbak, "dired-backup-unflag"},
         {d_copy,        "dired-copy-file"},          {d_copy, "dired-copy-file"},
         {d_expunge,     "dired-do-deletions"},          {d_expunge, "dired-do-deletions"},
         {d_findfile,    "dired-find-file"},          {d_findfile, "dired-find-file"},
         {d_ffotherwindow, "dired-find-file-other-window"},          {d_ffotherwindow, "dired-find-file-other-window"},
         {d_del,         "dired-flag-file-deleted"},          {d_del, "dired-flag-file-deleted"},
         {d_otherwindow, "dired-other-window"},          {d_otherwindow, "dired-other-window"},
         {d_rename,      "dired-rename-file"},          {d_rename, "dired-rename-file"},
         {d_undel,       "dired-unflag"},          {d_undel, "dired-unflag"},
 #endif  #endif
         {lowerregion,   "downcase-region"},          {lowerregion, "downcase-region"},
         {lowerword,     "downcase-word"},          {lowerword, "downcase-word"},
         {showversion,   "emacs-version"},          {showversion, "emacs-version"},
 #ifndef NO_MACRO  #ifndef NO_MACRO
         {finishmacro,   "end-kbd-macro"},          {finishmacro, "end-kbd-macro"},
 #endif  #endif
         {gotoeob,       "end-of-buffer"},          {gotoeob, "end-of-buffer"},
         {gotoeol,       "end-of-line"},          {gotoeol, "end-of-line"},
         {enlargewind,   "enlarge-window"},          {enlargewind, "enlarge-window"},
         {prefix,        "esc prefix"},          {prefix, "esc prefix"},
 #ifndef NO_STARTUP  #ifndef NO_STARTUP
         {evalbuffer,    "eval-current-buffer"},          {evalbuffer, "eval-current-buffer"},
         {evalexpr,      "eval-expression"},          {evalexpr, "eval-expression"},
 #endif  #endif
         {swapmark,      "exchange-point-and-mark"},          {swapmark, "exchange-point-and-mark"},
         {extend,        "execute-extended-command"},          {extend, "execute-extended-command"},
         {prefix,        "extra prefix 1"},          {prefix, "extra prefix 1"},
         {prefix,        "extra prefix 2"},          {prefix, "extra prefix 2"},
         {prefix,        "extra prefix 3"},          {prefix, "extra prefix 3"},
         {prefix,        "extra prefix 4"},          {prefix, "extra prefix 4"},
         {prefix,        "extra prefix 5"},          {prefix, "extra prefix 5"},
         {fillpara,      "fill-paragraph"},          {fillpara, "fill-paragraph"},
         {filevisit,     "find-file"},          {filevisit, "find-file"},
         {poptofile,     "find-file-other-window"},          {poptofile, "find-file-other-window"},
         {forwchar,      "forward-char"},          {forwchar, "forward-char"},
         {gotoeop,       "forward-paragraph"},          {gotoeop, "forward-paragraph"},
         {forwword,      "forward-word"},          {forwword, "forward-word"},
         {bindtokey,     "global-set-key"},          {bindtokey, "global-set-key"},
         {unbindtokey,   "global-unset-key"},          {unbindtokey, "global-unset-key"},
         {gotoline,      "goto-line"},          {gotoline, "goto-line"},
 #ifndef NO_HELP  #ifndef NO_HELP
         {prefix,        "help"},          {prefix, "help"},
         {help_help,     "help-help"},          {help_help, "help-help"},
 #endif  #endif
         {insert,        "insert"},          {insert, "insert"},
         {bufferinsert,  "insert-buffer"},          {bufferinsert, "insert-buffer"},
         {fileinsert,    "insert-file"},          {fileinsert, "insert-file"},
         {fillword,      "insert-with-wrap"},          {fillword, "insert-with-wrap"},
         {backisearch,   "isearch-backward"},          {backisearch, "isearch-backward"},
         {forwisearch,   "isearch-forward"},          {forwisearch, "isearch-forward"},
         {justone,       "just-one-space"},          {justone, "just-one-space"},
         {ctrlg,         "keyboard-quit"},          {ctrlg, "keyboard-quit"},
         {killbuffer,    "kill-buffer"},          {killbuffer, "kill-buffer"},
         {killline,      "kill-line"},          {killline, "kill-line"},
         {killpara,      "kill-paragraph"},          {killpara, "kill-paragraph"},
         {killregion,    "kill-region"},          {killregion, "kill-region"},
         {delfword,      "kill-word"},          {delfword, "kill-word"},
         {listbuffers,   "list-buffers"},          {listbuffers, "list-buffers"},
 #ifndef NO_STARTUP  #ifndef NO_STARTUP
         {evalfile,      "load"},          {evalfile, "load"},
 #endif  #endif
         {localbind,     "local-set-key"},          {localbind, "local-set-key"},
         {localunbind,   "local-unset-key"},          {localunbind, "local-unset-key"},
 #ifndef NO_BACKUP  #ifndef NO_BACKUP
         {makebkfile,    "make-backup-files"},          {makebkfile, "make-backup-files"},
 #endif  #endif
 #ifdef  DO_METAKEY  #ifdef  DO_METAKEY
         {do_meta,       "meta-key-mode"},       /* better name, anyone? */          {do_meta, "meta-key-mode"},     /* better name, anyone? */
 #endif  #endif
 #ifdef  AMIGA  #ifdef  AMIGA
 #ifdef  MOUSE  #ifdef  MOUSE
         {mgotobob,      "mouse-beginning-of-buffer"},          {mgotobob, "mouse-beginning-of-buffer"},
         {mforwdel,      "mouse-delete-char"},          {mforwdel, "mouse-delete-char"},
         {mdelwhite,     "mouse-delete-horizontal-space"},          {mdelwhite, "mouse-delete-horizontal-space"},
         {mdelwind,      "mouse-delete-window"},          {mdelwind, "mouse-delete-window"},
         {mgotoeob,      "mouse-end-of-buffer"},          {mgotoeob, "mouse-end-of-buffer"},
         {menlargewind,  "mouse-enlarge-window"},          {menlargewind, "mouse-enlarge-window"},
         {mkillline,     "mouse-kill-line"},          {mkillline, "mouse-kill-line"},
         {mkillregion,   "mouse-kill-region"},          {mkillregion, "mouse-kill-region"},
         {mdelfword,     "mouse-kill-word"},          {mdelfword, "mouse-kill-word"},
         {mreposition,   "mouse-recenter"},          {mreposition, "mouse-recenter"},
         {mbackpage,     "mouse-scroll-down"},          {mbackpage, "mouse-scroll-down"},
         {mforwpage,     "mouse-scroll-up"},          {mforwpage, "mouse-scroll-up"},
         {amigamouse,    "mouse-set-point"},          {amigamouse, "mouse-set-point"},
         {mshrinkwind,   "mouse-shrink-window"},          {mshrinkwind, "mouse-shrink-window"},
         {msplitwind,    "mouse-split-window-vertically"},          {msplitwind, "mouse-split-window-vertically"},
         {myank,         "mouse-yank"},          {myank, "mouse-yank"},
 #endif  #endif
 #endif  #endif
         {negative_argument, "negative-argument"},          {negative_argument, "negative-argument"},
         {newline,       "newline"},          {newline, "newline"},
         {indent,        "newline-and-indent"},          {indent, "newline-and-indent"},
         {forwline,      "next-line"},          {forwline, "next-line"},
 #ifdef  NOTAB  #ifdef  NOTAB
         {notabmode,     "no-tab-mode"},          {notabmode, "no-tab-mode"},
 #endif  #endif
         {notmodified,   "not-modified"},          {notmodified, "not-modified"},
         {openline,      "open-line"},          {openline, "open-line"},
         {nextwind,      "other-window"},          {nextwind, "other-window"},
         {overwrite,     "overwrite-mode"},          {overwrite, "overwrite-mode"},
 #ifdef  PREFIXREGION  #ifdef  PREFIXREGION
         {prefixregion,  "prefix-region"},          {prefixregion, "prefix-region"},
 #endif  #endif
         {backline,      "previous-line"},          {backline, "previous-line"},
 #ifdef  GOSMACS  #ifdef  GOSMACS
         {prevwind,      "previous-window"},          {prevwind, "previous-window"},
 #endif  #endif
 #ifdef  VMS  #ifdef  VMS
         {spawncli,      "push-to-dcl"},          {spawncli, "push-to-dcl"},
 #else  #else
         {spawncli,      "push-shell"},          {spawncli, "push-shell"},
 #endif  #endif
 #ifndef NO_DIR  #ifndef NO_DIR
         {showcwdir,     "pwd"},          {showcwdir, "pwd"},
 #endif  #endif
         {queryrepl,     "query-replace"},          {queryrepl, "query-replace"},
 #ifdef  REGEX  #ifdef  REGEX
         {re_queryrepl,  "query-replace-regexp"},          {re_queryrepl, "query-replace-regexp"},
 #endif  #endif
         {quote,         "quoted-insert"},          {quote, "quoted-insert"},
 #ifdef  REGEX  #ifdef  REGEX
         {re_searchagain,"re-search-again"},          {re_searchagain, "re-search-again"},
         {re_backsearch, "re-search-backward"},          {re_backsearch, "re-search-backward"},
         {re_forwsearch, "re-search-forward"},          {re_forwsearch, "re-search-forward"},
 #endif  #endif
         {reposition,    "recenter"},          {reposition, "recenter"},
         {refresh,       "redraw-display"},          {refresh, "redraw-display"},
         {filesave,      "save-buffer"},          {filesave, "save-buffer"},
         {quit,          "save-buffers-kill-emacs"},          {quit, "save-buffers-kill-emacs"},
         {savebuffers,   "save-some-buffers"},          {savebuffers, "save-some-buffers"},
         {backpage,      "scroll-down"},          {backpage, "scroll-down"},
 #ifdef  GOSMACS  #ifdef  GOSMACS
         {back1page,     "scroll-one-line-down"},          {back1page, "scroll-one-line-down"},
         {forw1page,     "scroll-one-line-up"},          {forw1page, "scroll-one-line-up"},
 #endif  #endif
         {pagenext,      "scroll-other-window"},          {pagenext, "scroll-other-window"},
         {forwpage,      "scroll-up"},          {forwpage, "scroll-up"},
         {searchagain,   "search-again"},          {searchagain, "search-again"},
         {backsearch,    "search-backward"},          {backsearch, "search-backward"},
         {forwsearch,    "search-forward"},          {forwsearch, "search-forward"},
         {selfinsert,    "self-insert-command"},          {selfinsert, "self-insert-command"},
 #ifdef  REGEX  #ifdef  REGEX
         {setcasefold,   "set-case-fold-search"},          {setcasefold, "set-case-fold-search"},
 #endif  #endif
         {set_default_mode, "set-default-mode"},          {set_default_mode, "set-default-mode"},
         {setfillcol,    "set-fill-column"},          {setfillcol, "set-fill-column"},
         {setmark,       "set-mark-command"},          {setmark, "set-mark-command"},
 #ifdef  PREFIXREGION  #ifdef  PREFIXREGION
         {setprefix,     "set-prefix-string"},          {setprefix, "set-prefix-string"},
 #endif  #endif
         {shrinkwind,    "shrink-window"},          {shrinkwind, "shrink-window"},
 #ifdef  NOTAB  #ifdef  NOTAB
         {space_to_tabstop, "space-to-tabstop"},          {space_to_tabstop, "space-to-tabstop"},
 #endif  #endif
         {splitwind,     "split-window-vertically"},          {splitwind, "split-window-vertically"},
 #ifndef NO_MACRO  #ifndef NO_MACRO
         {definemacro,   "start-kbd-macro"},          {definemacro, "start-kbd-macro"},
 #endif  #endif
 #ifdef  VMS  #ifdef  VMS
         {attachtoparent,"suspend-emacs"},          {attachtoparent, "suspend-emacs"},
 #else  #else
         {spawncli,      "suspend-emacs"},          {spawncli, "suspend-emacs"},
 #endif  #endif
         {usebuffer,     "switch-to-buffer"},          {usebuffer, "switch-to-buffer"},
         {poptobuffer,   "switch-to-buffer-other-window"},          {poptobuffer, "switch-to-buffer-other-window"},
         {twiddle,       "transpose-chars"},          {twiddle, "transpose-chars"},
         {universal_argument, "universal-argument"},          {universal_argument, "universal-argument"},
         {upperregion,   "upcase-region"},          {upperregion, "upcase-region"},
         {upperword,     "upcase-word"},          {upperword, "upcase-word"},
         {showcpos,      "what-cursor-position"},          {showcpos, "what-cursor-position"},
         {filewrite,     "write-file"},          {filewrite, "write-file"},
         {yank,          "yank"},          {yank, "yank"},
 };  };
   
 #define NFUNCT  (sizeof(functnames)/sizeof(FUNCTNAMES))  #define NFUNCT  (sizeof(functnames)/sizeof(FUNCTNAMES))
   
 int     nfunct = NFUNCT;                /* used by help.c */  int             nfunct = NFUNCT;/* used by help.c */
   
 /*  /*
  * The general-purpose version of ROUND2 blows osk C (2.0) out of the water.   * The general-purpose version of ROUND2 blows osk C (2.0) out of the water.
Line 1111 
Line 1078 
  */   */
 #define ROUND2(x) (x<128?(x<64?32:64):(x<256?128:256))  #define ROUND2(x) (x<128?(x<64?32:64):(x<256?128:256))
   
 static  name_fent(fname, flag)  static
 register char *fname;  name_fent(fname, flag)
 int     flag;          register char  *fname;
           int             flag;
 {  {
         register int    try;          register int    try;
         register int    x = ROUND2(NFUNCT);          register int    x = ROUND2(NFUNCT);
         register int    base = 0;          register int    base = 0;
         register int    notit;          register int    notit;
   
         do {          do {
             /* + can be used instead of | here if more efficent.        */                  /* + can be used instead of | here if more efficent.     */
             if((try = base | x) < NFUNCT) {                  if ((try = base | x) < NFUNCT) {
                 if((notit = strcmp(fname, functnames[try].n_name)) >= 0) {                          if ((notit = strcmp(fname, functnames[try].n_name)) >= 0) {
                     if(!notit) return try;                                  if (!notit)
                     base = try;                                          return try;
                                   base = try;
                           }
                 }                  }
             }          } while ((x >>= 1) || (try == 1 && base == 0)); /* try 0 once if needed */
         } while((x>>=1) || (try==1 && base==0));    /* try 0 once if needed */  
         return flag ? base : -1;          return flag ? base : -1;
 }  }
   
Line 1136 
Line 1105 
  * Translate from function name to function pointer, using binary search.   * Translate from function name to function pointer, using binary search.
  */   */
   
 PF      name_function(fname)  PF
 char    *fname;  name_function(fname)
           char           *fname;
 {  {
         int i;          int             i;
         if((i = name_fent(fname, FALSE)) >= 0) return functnames[i].n_funct;          if ((i = name_fent(fname, FALSE)) >= 0)
         return (PF)NULL;                  return functnames[i].n_funct;
           return (PF) NULL;
 }  }
   
 /* complete function name */  /* complete function name */
   
   int
 complete_function(fname, c)  complete_function(fname, c)
 register char   *fname;          register char  *fname;
           int             c;
 {  {
         register int i, j, k, l;          register int    i, j, k, l;
         int     oj;          int             oj;
   
         i = name_fent(fname, TRUE);          i = name_fent(fname, TRUE);
         for(j=0; (l=fname[j]) && functnames[i].n_name[j]==l; j++) {}          for (j = 0; (l = fname[j]) && functnames[i].n_name[j] == l; j++) {
         if(fname[j]!='\0') {  
             if(++i >= NFUNCT) return -2;        /* no match */  
             for(j=0; (l=fname[j]) && functnames[i].n_name[j]==l; j++) {}  
             if(fname[j]!='\0') return -2;       /* no match */  
         }          }
         if(c==CCHR('M') && functnames[i].n_name[j]=='\0') return -1;          if (fname[j] != '\0') {
         for(k=i+1; k<NFUNCT; k++) {             /* find last match */                  if (++i >= NFUNCT)
             for(l=0; functnames[k].n_name[l]==fname[l]; l++) {}                          return -2;      /* no match */
             if(l<j) break;                  for (j = 0; (l = fname[j]) && functnames[i].n_name[j] == l; j++) {
                   }
                   if (fname[j] != '\0')
                           return -2;      /* no match */
         }          }
           if (c == CCHR('M') && functnames[i].n_name[j] == '\0')
                   return -1;
           for (k = i + 1; k < NFUNCT; k++) {      /* find last match */
                   for (l = 0; functnames[k].n_name[l] == fname[l]; l++) {
                   }
                   if (l < j)
                           break;
           }
         k--;          k--;
         oj = j;          oj = j;
         if(k>i) {                                       /* multiple matches */          if (k > i) {            /* multiple matches */
             while((l = functnames[i].n_name[j]) == functnames[k].n_name[j]) {                  while ((l = functnames[i].n_name[j]) == functnames[k].n_name[j]) {
                 fname[j++] = l;                          fname[j++] = l;
                 if(l=='-' && c==' ') break;                          if (l == '-' && c == ' ')
             }                                  break;
             if(j==oj) return -3;                        /* ambiguous    */                  }
         } else {                                        /* single match */                  if (j == oj)
             while(l = functnames[i].n_name[j]) {                          return -3;      /* ambiguous     */
                 fname[j++] = l;          } else {                /* single match */
                 if(l=='-' && c==' ') break;                  while (l = functnames[i].n_name[j]) {
             }                          fname[j++] = l;
                           if (l == '-' && c == ' ')
                                   break;
                   }
         }          }
         fname[j] = '\0';          fname[j] = '\0';
         return j - oj;          return j - oj;
Line 1184 
Line 1167 
   
 /* list possible function name completions */  /* list possible function name completions */
   
 LIST *complete_function_list(fname, c)  LIST           *
 register char   *fname;  complete_function_list(fname, c)
           register char  *fname;
 {  {
         register int i, j, k, l;          register int    i, j, k, l;
         int     oj;          int             oj;
         LIST *current,*last;          LIST           *current, *last;
   
         i = name_fent(fname, TRUE);          i = name_fent(fname, TRUE);
         for(j=0; (l=fname[j]) && functnames[i].n_name[j]==l; j++) {}          for (j = 0; (l = fname[j]) && functnames[i].n_name[j] == l; j++) {
         if(fname[j]!='\0') {  
             if(++i >= NFUNCT) return NULL;      /* no match */  
             for(j=0; (l=fname[j]) && functnames[i].n_name[j]==l; j++) {}  
             if(fname[j]!='\0') return NULL;     /* no match */  
         }          }
 /*          if (fname[j] != '\0') {
  *      if(c==CCHR('M') && functnames[i].n_name[j]=='\0') return -1;                  if (++i >= NFUNCT)
  */                          return NULL;    /* no match */
         for(k=i+1; k<NFUNCT; k++) {             /* find last match */                  for (j = 0; (l = fname[j]) && functnames[i].n_name[j] == l; j++) {
             for(l=0; functnames[k].n_name[l]==fname[l]; l++) {}                  }
             if(l<j) break;                  if (fname[j] != '\0')
                           return NULL;    /* no match */
         }          }
           /*
            *      if(c==CCHR('M') && functnames[i].n_name[j]=='\0') return -1;
            */
           for (k = i + 1; k < NFUNCT; k++) {      /* find last match */
                   for (l = 0; functnames[k].n_name[l] == fname[l]; l++) {
                   }
                   if (l < j)
                           break;
           }
         k--;          k--;
         last = NULL;          last = NULL;
         for (; k >= i; k--) {          for (; k >= i; k--) {
             current = (LIST *)malloc(sizeof(LIST));                  current = (LIST *) malloc(sizeof(LIST));
             current->l_next = last;                  current->l_next = last;
             current->l_name = functnames[k].n_name;                  current->l_name = functnames[k].n_name;
             last = current;                  last = current;
         }          }
         return(last);          return (last);
 }  }
   
 /* translate from function pointer to function name. */  /* translate from function pointer to function name. */
   
 char *function_name(fpoint)  char           *
 register PF fpoint;  function_name(fpoint)
           register PF     fpoint;
 {  {
         register FUNCTNAMES     *fnp = &functnames[0];          register FUNCTNAMES *fnp = &functnames[0];
   
         if(fpoint == prefix) return (char *)NULL;       /* ambiguous */          if (fpoint == prefix)
                   return (char *) NULL;   /* ambiguous */
         do {          do {
             if(fnp->n_funct == fpoint) return fnp->n_name;                  if (fnp->n_funct == fpoint)
         } while(++fnp < &functnames[NFUNCT]);                          return fnp->n_name;
         return (char *)NULL;          } while (++fnp < &functnames[NFUNCT]);
           return (char *) NULL;
 }  }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3