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

  1. /*
  2.  * ttymenu.c
  3.  * 
  4.  * Incorporates the browser, for rummaging around on disks, and the usual Emacs
  5.  * editing command menu
  6.  * 
  7.  * Copyright (c) 1986, Mike Meyer Mic Kaczmarczik did a few things along the
  8.  * way.
  9.  * 
  10.  * Permission is hereby granted to distribute this program, so long as this
  11.  * source file is distributed with it, and this copyright notice is not
  12.  * removed from the file.
  13.  * 
  14.  */
  15.  
  16. #include "do_menu.h"
  17. #ifdef    DO_MENU
  18.  
  19. #include <exec/types.h>
  20. #include <libraries/dos.h>
  21. #include <libraries/dosextens.h>
  22. #include <intuition/intuition.h>
  23. #ifdef LATTICE
  24. #include <proto/dos.h>
  25. #include <proto/intuition.h>
  26. #include <proto/exec.h>
  27. #else
  28. #include <functions.h>
  29. #endif
  30.  
  31. #undef    MANX
  32. #undef LATTICE
  33. #undef    AZTEC
  34. #include "compiler.h"
  35. #include "no_macro.h"
  36. #include "no_dired.h"
  37. #include "gosmacs.h"
  38. #include "browser.h"
  39. #include "change_font.h"
  40. #include "menu.h"
  41.  
  42. #undef    TRUE
  43. #undef    FALSE
  44. #include "def.h"
  45.  
  46. #ifdef    BROWSER
  47. #include "buffer.h"
  48. #endif
  49.  
  50. #include "window.h"
  51.  
  52. #ifdef BROWSER
  53. static int Add_Dir PROTO((char *dir, char *name));
  54. static void Add_Devices PROTO((ULONG devtype));
  55. #endif
  56.  
  57. extern struct Menu *AutoMenu;
  58. extern struct Window *EmW;
  59.  
  60. #define MNUM(menu,item,sub) (SHIFTMENU(menu)|SHIFTITEM(item)|SHIFTSUB(sub))
  61.  
  62. #ifdef    BROWSER
  63. #define LONGEST_NAME    80    /* Longest file name we can deal with     */
  64.  
  65. # ifdef    ANSI
  66. #include <string.h>
  67. #include <stdlib.h>
  68. # else
  69. char           *index();    /* find first instance of c in s     */
  70. #define    strchr(s, c) index(s, c)
  71. # endif
  72.  
  73. # ifdef    MENU
  74. #define    FIRSTMENU    1
  75. # else
  76. #define    FIRSTMENU    0
  77. # endif
  78.  
  79. #endif
  80.  
  81. #ifdef    MENU
  82. /*
  83.  * When ttgetc() sees a menu selection event, it stuffs the sequence KMENU
  84.  * <menu><item><subitem> into the input buffer
  85.  * 
  86.  * The menu item names are chosen to be relatively close to the extended
  87.  * function names, so a user can usually figure out the key binding of a menu
  88.  * item by searching through the "display-bindings" buffer for something
  89.  * that's close.
  90.  */
  91.  
  92. /*
  93.  * Commands for managing files and buffers
  94.  */
  95.  
  96. extern int      filevisit();
  97. extern int      poptofile();
  98. extern int      fileinsert();
  99. extern int      filesave();
  100. extern int      filewrite();
  101. #ifndef    NO_DIRED
  102. extern int      dired();
  103. #endif
  104. extern int      usebuffer();
  105. extern int      poptobuffer();
  106. extern int      killbuffer();
  107. extern int      listbuffers();
  108. extern int      savebuffers();
  109. extern int      quit();
  110.  
  111. static struct MenuBinding FileItems[] = {
  112.     {"Find File         C-x C-f", filevisit},
  113.     {"Pop To File       C-x 4 f", poptofile},
  114.     {"Insert File       C-x i", fileinsert},
  115.     {"Save File         C-x C-s", filesave},
  116.     {"Write File        C-x C-w", filewrite},
  117. #ifndef    NO_DIRED
  118.     {"Dired         C-x d", dired},
  119. #endif
  120.     {"Switch To Buffer  C-x b", usebuffer},
  121.     {"Pop To Buffer     C-x 4 b", poptobuffer},
  122.     {"Kill Buffer       C-x k", killbuffer},
  123.     {"List Buffers      C-x C-b", listbuffers},
  124.     {"Save Buffers      C-x s", savebuffers},
  125.     {"Save And Exit     C-x C-c", quit}
  126. };
  127.  
  128. /*
  129.  * Commands for various editing functions
  130.  */
  131.  
  132. extern int      yank();
  133. extern int      openline();
  134. extern int      killline();
  135. extern int      deblank();
  136. extern int      justone();
  137. extern int      indent();
  138. extern int      twiddle();
  139. extern int      quote();
  140.  
  141. static struct MenuBinding EditItems[] = {
  142.     {"Yank                 C-y", yank},
  143.     {"Blank Line           C-o ", openline},
  144.     {"Kill Line            C-k", killline},
  145.     {"Delete Blank Lines   C-x C-o", deblank},
  146.     {"Delete Blanks        M-SPC", justone},
  147.     {"Newline And Indent   C-j", indent},
  148.     {"Transpose Characters C-t", twiddle},
  149.     {"Quoted Insert        C-q", quote}
  150. };
  151.  
  152. /*
  153.  * Movement commands
  154.  */
  155.  
  156. extern int      forwpage();
  157. extern int      backpage();
  158. extern int      gotobol();
  159. extern int      gotobob();
  160. extern int      gotoeol();
  161. extern int      gotoeob();
  162. extern int      gotoline();
  163. extern int      showcpos();
  164.  
  165. static struct MenuBinding MoveItems[] = {
  166.     {"Scroll Up       C-v", forwpage},
  167.     {"Scroll Down     M-v", backpage},
  168.     {"Start Of Line   C-a", gotobol},
  169.     {"Start Of Buffer M-<", gotobob},
  170.     {"End Of Line     C-e", gotoeol},
  171.     {"End Of Buffer   M->", gotoeob},
  172.     {"Goto Line", gotoline},
  173.     {"Show Cursor     C-x =", showcpos}
  174. };
  175.  
  176. /*
  177.  * Commands for searching and replacing
  178.  */
  179.  
  180. extern int      forwisearch();
  181. extern int      backisearch();
  182. extern int      searchagain();
  183. extern int      forwsearch();
  184. extern int      backsearch();
  185. extern int      queryrepl();
  186.  
  187. static struct MenuBinding SearchItems[] = {
  188.     {"I-Search Forward  C-s", forwisearch},
  189.     {"I-Search Backward C-r", backisearch},
  190.     {"Search Again", searchagain},
  191.     {"Search Forward    M-s", forwsearch},
  192.     {"Search Backward   M-r", backsearch},
  193.     {"Query Replace     M-%", queryrepl}
  194. };
  195.  
  196. /*
  197.  * Commands that manipulate words
  198.  */
  199. extern int      forwword();
  200. extern int      backword();
  201. extern int      delfword();
  202. extern int      delbword();
  203. extern int      capword();
  204. extern int      lowerword();
  205. extern int      upperword();
  206.  
  207. static struct MenuBinding WordItems[] = {
  208.     {"Forward Word       M-f", forwword},
  209.     {"Backward Word      M-b", backword},
  210.     {"Kill Word          M-d", delfword},
  211.     {"Backward Kill Word M-DEL", delbword},
  212.     {"Capitalize Word    M-c", capword},
  213.     {"Downcase Word      M-l", lowerword},
  214.     {"Upcase Word        M-u", upperword}
  215. };
  216.  
  217. /*
  218.  * Commands relating to paragraphs
  219.  */
  220. extern int      gotoeop();
  221. extern int      gotobop();
  222. extern int      fillpara();
  223. extern int      setfillcol();
  224. extern int      killpara();
  225. extern int      fillmode();
  226.  
  227. static struct MenuBinding ParaItems[] = {
  228.     {"Forward Paragraph  M-]", gotoeop},
  229.     {"Backward Paragraph M-[", gotobop},
  230.     {"Fill Paragraph     M-q", fillpara},
  231.     {"Set Fill Column    C-x f", setfillcol},
  232.     {"Kill Paragraph", killpara},
  233.     {"Auto Fill Mode", fillmode}
  234. };
  235.  
  236. /*
  237.  * Region stuff
  238.  */
  239. extern int      setmark();
  240. extern int      swapmark();
  241. extern int      killregion();
  242. extern int      copyregion();
  243. extern int      lowerregion();
  244. extern int      upperregion();
  245.  
  246. static struct MenuBinding RegionItems[] = {
  247.     {"Set Mark            C-@", setmark},
  248.     {"Exch Point And Mark C-x C-x", swapmark},
  249.     {"Kill Region         C-w", killregion},
  250.     {"Copy Region As Kill M-w", copyregion},
  251.     {"Downcase Region     C-x C-l", lowerregion},
  252.     {"Upcase Region       C-x C-u", upperregion}
  253. };
  254.  
  255. /*
  256.  * Commands for manipulating windows
  257.  */
  258.  
  259. extern int      splitwind();
  260. extern int      delwind();
  261. extern int      onlywind();
  262. extern int      nextwind();
  263. #ifdef    GOSMACS
  264. extern int      prevwind();
  265. #endif
  266. extern int      enlargewind();
  267. extern int      shrinkwind();
  268. extern int      refresh();
  269. extern int      reposition();
  270. extern int      togglewindow();
  271. #ifdef    CHANGE_FONT
  272. extern int      setfont();
  273. #endif
  274.  
  275. static struct MenuBinding WindowItems[] = {
  276.     {"Split Window         C-x 2", splitwind},
  277.     {"Delete Window        C-x 0", delwind},
  278.     {"Delete Other Windows C-x 1", onlywind},
  279.     {"Next Window          C-x o", nextwind},
  280. #ifdef    GOSMACS
  281.     {"Up Window", prevwind},
  282. #endif
  283.     {"Enlarge Window       C-x ^", enlargewind},
  284.     {"Shrink Window", shrinkwind},
  285.     {"Redraw Display", refresh},
  286.     {"Recenter             C-l", reposition},
  287.     {"Toggle Border", togglewindow},
  288. #ifdef    CHANGE_FONT
  289.     {"Set Font", setfont}
  290. #endif
  291. };
  292.  
  293. /*
  294.  * Miscellaneous commands
  295.  */
  296.  
  297. extern int      definemacro();
  298. extern int      finishmacro();
  299. extern int      executemacro();
  300. extern int      extend();
  301. extern int      bindtokey();
  302. extern int      desckey();
  303. extern int      wallchart();
  304. extern int      showversion();
  305. extern int      spawncli();
  306.  
  307. static struct MenuBinding MiscItems[] = {
  308. #ifndef    NO_MACRO
  309.     {"Start Kbd Macro   C-x (", definemacro},
  310.     {"End Kbd Macro     C-x )", finishmacro},
  311.     {"Call Kbd Macro    C-x e", executemacro},
  312. #endif
  313.     {"Execute Command   M-x", extend},
  314.     {"Global Set Key", bindtokey},
  315.     {"Describe Key      C-h c", desckey},
  316.     {"Describe Bindings C-h b", wallchart},
  317.     {"Emacs Version", showversion},
  318.     {"New CLI           C-z", spawncli}
  319. };
  320.  
  321. /*
  322.  * The following table contains the titles, number of items, and pointers to,
  323.  * the individual menus.
  324.  */
  325.  
  326. static struct MenuInfo EMInfo[] = {
  327.     {"File  ", NITEMS(FileItems), &FileItems[0]},
  328.     {"Edit  ", NITEMS(EditItems), &EditItems[0]},
  329.     {"Move  ", NITEMS(MoveItems), &MoveItems[0]},
  330.     {"Search  ", NITEMS(SearchItems), &SearchItems[0]},
  331.     {"Word  ", NITEMS(WordItem