home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume11 / tcsh / part02 < prev    next >
Internet Message Format  |  1987-08-10  |  42KB

  1. Path: uunet!rs
  2. From: rs@uunet.UU.NET (Rich Salz)
  3. Newsgroups: comp.sources.unix
  4. Subject: v10i002:  New version of T-shell, Part02/06
  5. Message-ID: <860@uunet.UU.NET>
  6. Date: 11 Aug 87 23:51:32 GMT
  7. Organization: UUNET Communications Services, Arlington, VA
  8. Lines: 1507
  9. Approved: rs@uunet.UU.NET
  10.  
  11. Submitted-by: Paul Placeway <pyramid!osu-eddie!paul>
  12. Posting-number: Volume 10, Issue 2
  13. Archive-name: tcsh/Part02
  14.  
  15. # This is a shell archive.  Remove anything before this line
  16. # then unpack it by saving it in a file and typing "sh file"
  17. # (Files unpacked will be owned by you and have default permissions).
  18. # This archive contains the following files:
  19. #    ./ed.init.c
  20. #    ./ed.inputl.c
  21. #    ./ed.defns.c
  22. #
  23. if `test ! -s ./ed.init.c`
  24. then
  25. echo "writing ./ed.init.c"
  26. sed 's/^x//' > ./ed.init.c << '\Rogue\Monster\'
  27. x#ifndef lint
  28. xstatic char *RCSid = "$Header: ed.init.c,v 1.2 86/01/06 21:39:48 paul Exp $";
  29. x#endif
  30. x
  31. x#include "sh.h"
  32. x#define EXTERN /*intern*/
  33. x#include "ed.h"
  34. x#include "ed.fcns.h"
  35. x
  36. x#define InputMode    CBREAK
  37. x
  38. x/* ed.init.c -- init routines for the line editor */
  39. x
  40. xwindow_change()            /* set a flag to say that the window changed */
  41. x{
  42. x    if (GettingInput) {
  43. x    ClearLines();
  44. x    ClearDisp();
  45. x    MoveToLine(0);        /* to the real beggining */
  46. x    MoveToChar(0);
  47. x    ChangeSize();        /* then get the new size */
  48. x    Refresh();
  49. x    } else {
  50. x    ChangeSize();
  51. x    }
  52. x}
  53. x
  54. x/* LPASS8 is new in 4.3, and makes cbreak mode provide all 8 bits.  */
  55. x#ifndef LPASS8
  56. x#define LPASS8 0        /* we don't have it.  Too bad!! */
  57. x#endif
  58. x
  59. x#ifndef CTRL
  60. x#define    CTRL(c)    ('c'&037)
  61. x#endif
  62. x
  63. xed_Init()
  64. x{
  65. x    static int havesetup = 0;
  66. x    ResetInLine();        /* reset the input pointers */
  67. x    LastKill = KillBuf;        /* no kill buffer */
  68. x
  69. x    CheckMaps();        /* do a little error checking on key maps */
  70. x
  71. x    if (!havesetup) {        /* if we have never been called */
  72. x    ed_InitMaps();
  73. x    Hist_num = 0;
  74. x
  75. x#ifdef SVID
  76. x    ioctl (SHIN, TCGETA, &nio);
  77. x    xio = nio;
  78. x
  79. x    if ((nio.c_oflag & TAB3) == TAB3) { /* then no tabs */
  80. x        T_Tabs = 0;
  81. x    } else {
  82. x        T_Tabs = 1;
  83. x    }
  84. x
  85. x    nio.c_iflag &= ~(INLCR | IGNCR);
  86. x    nio.c_iflag |= (ISTRIP | ICRNL);
  87. x    /* nio.c_oflag &= NOTHING TO TURN OFF */
  88. x    nio.c_oflag |= (OPOST | ONLCR | ONLRET);
  89. x    /* don't muck with c_cflag */
  90. x    nio.c_lflag &= ~(NOFLSH);
  91. x    nio.c_lflag |= (ISIG | ICANON | ECHO | ECHOE | ECHOK | ECHONL);
  92. x    nio.c_cc[VINTR] = CTRL(c);
  93. x    nio.c_cc[VQUIT] = CTRL(\\);
  94. x    nio.c_cc[VERASE] = '\177';
  95. x    nio.c_cc[VKILL] = CTRL(u);
  96. x    nio.c_cc[VEOF] = CTRL(d);
  97. x    nio.c_cc[VEOL] = 0;
  98. x    nio.c_cc[VEOL2] = 0;
  99. x# ifndef OREO
  100. x    nio.c_cc[VSWTCH] = CTRL(z);
  101. x# else OREO
  102. x    nio.c_cc[VSWTCH] = 0;
  103. x
  104. x    ioctl(SHIN, TIOCGLTC, &nlc);
  105. x    xlc = nlc;
  106. x
  107. x    nlc.t_suspc = CTRL(z);    /* stop process signal    */
  108. x    nlc.t_dsuspc = CTRL(y);    /* delayed stop process signal    */
  109. x    nlc.t_rprntc = CTRL(r);    /* reprint line */
  110. x    nlc.t_flushc = CTRL(o);    /* flush output (toggles) */
  111. x    nlc.t_werasc = CTRL(w);    /* word erase */
  112. x    nlc.t_lnextc = CTRL(v);    /* literal next character */
  113. x
  114. x#  ifdef SIGWINCH
  115. x    sigset(SIGWINCH, window_change); /* for window systems */
  116. x#  endif
  117. x# endif OREO
  118. x#else SVID
  119. x    ioctl(SHIN, TIOCGETP, &nb);    /* normal setup */
  120. x    xb = nb;            /* new setup */
  121. x    ioctl(SHIN, TIOCGETC, &ntc);
  122. x    xtc = ntc;
  123. x    ioctl(SHIN, TIOCGETD, &nli);
  124. x    xl = nli;
  125. x    ioctl(SHIN, TIOCGLTC, &nlc);
  126. x    xlc = nlc;
  127. x    ioctl(SHIN, TIOCLGET, &nlb);
  128. x    xlb = nlb;
  129. x
  130. x    if ((xb.sg_flags & XTABS) == XTABS) { /* check for no tabs mode */
  131. x        T_Tabs = 0;
  132. x    } else {
  133. x        T_Tabs = 1;
  134. x    }
  135. x
  136. x    if (T_Tabs) {        /* order of &= and |= is important to XTABS */
  137. x        nb.sg_flags &= ~(CBREAK | RAW | LCASE | XTABS | VTDELAY | ALLDELAY);
  138. x        nb.sg_flags |= (ECHO | CRMOD | ANYP);
  139. x    } else {
  140. x        nb.sg_flags &= ~(CBREAK | RAW | LCASE | VTDELAY | ALLDELAY);
  141. x        nb.sg_flags |= (ECHO | CRMOD | XTABS | ANYP);
  142. x    }
  143. x    nlb &= ~(LPRTERA | LLITOUT | LPASS8); /* never pass meta to cmds */
  144. x    nlb |= (LCRTBS | LCRTERA | LCRTKIL);
  145. x
  146. x    nb.sg_erase = '\177';    /* del prev. char == DEL */
  147. x    nb.sg_kill = CTRL(u);    /* special case of del region */
  148. x
  149. x    ntc.t_intrc = CTRL(c);    /* SIGINTR */
  150. x    ntc.t_quitc = CTRL(\\);    /* SIGQUIT */
  151. x    ntc.t_startc = CTRL(q);    /* start output */
  152. x    ntc.t_stopc = CTRL(s);    /* stop output    */
  153. x    ntc.t_eofc = CTRL(d);    /* no eof char during input... */
  154. x    ntc.t_brkc = -1;    /* input delimiter (like nl) */
  155. x
  156. x    nlc.t_suspc = CTRL(z);    /* stop process signal    */
  157. x    nlc.t_dsuspc = CTRL(y);    /* delayed stop process signal    */
  158. x    nlc.t_rprntc = CTRL(r);    /* reprint line */
  159. x    nlc.t_flushc = CTRL(o);    /* flush output (toggles) */
  160. x    nlc.t_werasc = CTRL(w);    /* word erase */
  161. x    nlc.t_lnextc = CTRL(v);    /* literal next character */
  162. x
  163. x# ifdef SIGWINCH
  164. x    sigset(SIGWINCH, window_change); /* for window systems */
  165. x# endif
  166. x#endif SVID
  167. x    }
  168. x
  169. x    /* if we have been called before, our TERM has changed, so get new
  170. x       termcaps and try again */
  171. x
  172. x    GetTermCaps();    /* does the obvious, but gets term type each time */
  173. x
  174. x#ifdef SVID
  175. x    if (T_HasMeta) {        /* if I have a meta key */
  176. x    xio.c_iflag &= ~(IGNCR | ISTRIP);
  177. x    xio.c_iflag |= (INLCR | ICRNL);
  178. x    } else {
  179. x    xio.c_iflag &= ~(IGNCR);
  180. x    xio.c_iflag |= (INLCR | ISTRIP | ICRNL);
  181. x    }
  182. x    /* xio.c_oflag &= ~(); */
  183. x    xio.c_oflag |= (OPOST | ONLCR | ONLRET);
  184. x    xio.c_lflag &= ~(NOFLSH | ICANON | ECHO | ECHOE | ECHOK | ECHONL);
  185. x    xio.c_lflag |= (ISIG);
  186. x    xio.c_cc[VINTR] = CTRL(c);
  187. x    xio.c_cc[VQUIT] = CTRL(\\);
  188. x    xio.c_cc[VERASE] = '\177';
  189. x    xio.c_cc[VKILL] = CTRL(u);
  190. x    xio.c_cc[VEOL2] = 0;
  191. x
  192. x    xio.c_cc[VMIN] = 1;    /* one char at a time input */
  193. x    xio.c_cc[VTIME] = 0;    /* don't time out */
  194. x
  195. x# ifdef OREO
  196. x    xlc.t_suspc = CTRL(z);    /* stop process signal    */
  197. x    xlc.t_dsuspc = -1;        /* delayed stop process signal    */
  198. x    xlc.t_rprntc = -1;        /* reprint line */
  199. x    xlc.t_flushc = CTRL(o);    /* flush output */
  200. x    xlc.t_werasc = -1;        /* word erase */
  201. x    xlc.t_lnextc = -1;        /* literal next character */
  202. x# endif OREO
  203. x#else SVID
  204. x    if (xl != NTTYDISC) {    /* this will flush type-ahead, so don't if */
  205. x                /* it can be avoided. */
  206. x    xl = NTTYDISC;        /* new tty driver */
  207. x    ioctl(SHIN, TIOCSETD, &xl); /* set line DISC. FIRST */
  208. x    }
  209. x
  210. x    if (T_Tabs) {        /* order of &= and |= is important to XTABS */
  211. x    xb.sg_flags &= ~(RAW | ECHO | LCASE | XTABS | VTDELAY | ALLDELAY);
  212. x    xb.sg_flags |= (CBREAK | CRMOD | ANYP);
  213. x    } else {
  214. x    xb.sg_flags &= ~(RAW | ECHO | LCASE | VTDELAY | ALLDELAY);
  215. x    xb.sg_flags |= (CBREAK | CRMOD | ANYP | XTABS);
  216. x    }
  217. x
  218. x    xb.sg_erase = '\177';    /* del prev. char == DEL */
  219. x    xb.sg_kill = CTRL(w);    /* special case of del region */
  220. x
  221. x    xtc.t_intrc = CTRL(c);    /* SIGINTR */
  222. x    xtc.t_quitc = CTRL(\\);    /* SIGQUIT */
  223. x    xtc.t_startc = CTRL(q);    /* start output */
  224. x    xtc.t_stopc = CTRL(s);    /* stop output    */
  225. x    xtc.t_eofc = -1;        /* no eof char during input... */
  226. x    xtc.t_brkc = -1;        /* input delimiter (like nl) */
  227. x    
  228. x    xlc.t_suspc = CTRL(z);    /* stop process signal    */
  229. x    xlc.t_dsuspc = -1;        /* delayed stop process signal    */
  230. x    xlc.t_rprntc = -1;        /* reprint line */
  231. x    xlc.t_flushc = CTRL(o);    /* flush output */
  232. x    xlc.t_werasc = -1;        /* word erase */
  233. x    xlc.t_lnextc = -1;        /* literal next character */
  234. x
  235. x    if (T_HasMeta) {        /* if I have a meta key */
  236. x    xlb &= ~(LPRTERA | LLITOUT);
  237. x    xlb |= (LCRTBS | LCRTERA | LCRTKIL | LPASS8);
  238. x    } else {            /* if I may be running parity */
  239. x    xlb &= ~(LPRTERA | LLITOUT | LPASS8);
  240. x    xlb |= (LCRTBS | LCRTERA | LCRTKIL);
  241. x    }
  242. x#endif SVID
  243. x    havesetup = 1;
  244. x}
  245. x
  246. xstatic int
  247. xsetkey(tcp, ncp)
  248. xchar *tcp, *ncp;
  249. x{
  250. x    if ((*tcp & 0377) > 0 && (*tcp & 0377) < 0377) {
  251. x    if (*ncp != *tcp) {
  252. x        *ncp = *tcp;
  253. x        return 1;
  254. x    }
  255. x    } else {
  256. x    return 0;
  257. x    }
  258. x}
  259. x
  260. xint
  261. xRawmode()            /* used to check and re-init the line. */
  262. x{                /* set the terminal into 1charatatime mode. */
  263. x#ifdef SVID
  264. x    if (ioctl (SHIN, TCGETA, &testio) < 0)
  265. x    return (-1);        /* SHIN has been closed */
  266. x    if (testio.c_cflag != nio.c_cflag) { /* prob. changed speeds */
  267. x    nio.c_cflag = testio.c_cflag;
  268. x    xio.c_cflag = testio.c_cflag;
  269. x    }
  270. x    if ((testio.c_lflag != nio.c_lflag) &&
  271. x    (testio.c_lflag != xio.c_lflag)) {
  272. x
  273. x    nio.c_lflag = testio.c_lflag;
  274. x    nio.c_lflag &= ~(NOFLSH);
  275. x    nio.c_lflag |= (ISIG | ICANON | ECHO | ECHOE | ECHOK | ECHONL);
  276. x    xio.c_lflag = testio.c_lflag;
  277. x    xio.c_lflag &= ~(NOFLSH | ICANON | ECHO | ECHOE | ECHOK | ECHONL);
  278. x    xio.c_lflag |= (ISIG);
  279. x    }
  280. x    if (setkey(&testio.c_cc[VINTR], &nio.c_cc[VINTR]))
  281. x    setkey(&testio.c_cc[VINTR], &xio.c_cc[VINTR]);
  282. x    if (setkey(&testio.c_cc[VQUIT], &nio.c_cc[VQUIT]))
  283. x    setkey(&testio.c_cc[VQUIT], &xio.c_cc[VQUIT]);
  284. x    setkey(&testio.c_cc[VERASE], &nio.c_cc[VERASE]);
  285. x    setkey(&testio.c_cc[VKILL], &nio.c_cc[VKILL]);
  286. x    if (testio.c_cc[VEOF] != 1)    { /* 'cause VEOL == VNUM, and 1 is raw mode */
  287. x    setkey(&testio.c_cc[VEOF], &nio.c_cc[VEOF]);
  288. x    setkey(&testio.c_cc[VEOL], &nio.c_cc[VEOL]);
  289. x    }
  290. x    if (setkey (&testio.c_cc[VSWTCH], &nio.c_cc[VSWTCH]))
  291. x    setkey (&testio.c_cc[VSWTCH], &xio.c_cc[VSWTCH]);
  292. x
  293. x# ifdef OREO
  294. x
  295. x    /* get and set the new local chars */
  296. x    ioctl (SHIN, TIOCGLTC, &testlc);
  297. x    if (setkey(&testlc.t_suspc, &nlc.t_suspc))
  298. x    xlc.t_suspc = nlc.t_suspc;
  299. x    setkey (&testlc.t_dsuspc, &nlc.t_dsuspc);
  300. x    setkey (&testlc.t_rprntc, &nlc.t_rprntc);
  301. x    if (setkey(&testlc.t_flushc, &nlc.t_flushc))
  302. x    xlc.t_flushc = nlc.t_flushc;
  303. x    setkey (&testlc.t_werasc, &nlc.t_werasc);
  304. x    setkey (&testlc.t_rprntc, &nlc.t_rprntc);
  305. x
  306. x    ioctl(SHIN, TIOCSLTC, &xlc);
  307. x# endif OREO
  308. x    ioctl(SHIN, TCSETAW, &xio);
  309. x
  310. x#else SVID            /* for BSD... */
  311. x
  312. x    if (ioctl(SHIN, TIOCGETP, &testsgb) < 0)    /* test the normal flags */
  313. x    return -1;        /* if the SHIN has been closed */
  314. x    if (testsgb.sg_ispeed != nb.sg_ispeed) {
  315. x    nb.sg_ispeed = testsgb.sg_ispeed;
  316. x    xb.sg_ispeed = testsgb.sg_ispeed;
  317. x    }
  318. x    if (testsgb.sg_ospeed != nb.sg_ospeed) {
  319. x    nb.sg_ospeed = testsgb.sg_ospeed;
  320. x    xb.sg_ospeed = testsgb.sg_ospeed;
  321. x    }
  322. x    if ((testsgb.sg_flags != nb.sg_flags) && 
  323. x    (testsgb.sg_flags != xb.sg_flags)) {
  324. x
  325. x    nb.sg_flags = testsgb.sg_flags;
  326. x    if (T_Tabs) {        /* order of &= and |= is important to XTABS */
  327. x        nb.sg_flags &= ~(CBREAK | RAW | LCASE | XTABS | VTDELAY | ALLDELAY);
  328. x        nb.sg_flags |= (ECHO | CRMOD | ANYP);
  329. x    } else {
  330. x        nb.sg_flags &= ~(CBREAK | RAW | LCASE | VTDELAY | ALLDELAY);
  331. x        nb.sg_flags |= (ECHO | CRMOD | XTABS | ANYP);
  332. x    }
  333. x    xb.sg_flags = testsgb.sg_flags;
  334. x    if (T_Tabs) {
  335. x        xb.sg_flags &= ~(RAW| ECHO | LCASE | XTABS | VTDELAY | ALLDELAY);
  336. x        xb.sg_flags |= (CBREAK | CRMOD | ANYP);
  337. x    } else {
  338. x        xb.sg_flags &= ~(RAW | ECHO | LCASE | VTDELAY | ALLDELAY);
  339. x        xb.sg_flags |= (CBREAK | CRMOD | ANYP | XTABS);
  340. x    }
  341. x    }
  342. x    setkey(&testsgb.sg_erase, &nb.sg_erase);
  343. x    setkey(&testsgb.sg_kill, &nb.sg_kill);
  344. x
  345. x    /* get and set the terminal characters */
  346. x    ioctl(SHIN, TIOCGETC, &testtc);
  347. x    if (setkey(&testtc.t_intrc, &ntc.t_intrc))
  348. x    xtc.t_intrc = ntc.t_intrc;
  349. x    if (setkey(&testtc.t_quitc, &ntc.t_quitc))
  350. x    xtc.t_quitc = ntc.t_quitc;
  351. x    if (setkey(&testtc.t_startc, &ntc.t_startc))
  352. x    xtc.t_startc = ntc.t_startc;
  353. x    if (setkey(&testtc.t_stopc, &ntc.t_stopc))
  354. x    xtc.t_stopc = ntc.t_stopc;
  355. x    setkey(&testtc.t_eofc, &ntc.t_eofc);
  356. x    setkey(&testtc.t_brkc, &ntc.t_brkc);
  357. x
  358. x    ioctl(SHIN, TIOCLGET, &testnlb);
  359. x    if ((testnlb != nlb) && (testnlb != xlb)) {
  360. x    nlb = testnlb;
  361. x    nlb &= ~(LPRTERA | LLITOUT | LPASS8);
  362. x    nlb |= (LCRTBS | LCRTERA | LCRTKIL);
  363. x
  364. x    xlb = testnlb;
  365. x
  366. x    xlb &= ~(LPRTERA | LLITOUT);
  367. x    xlb |= (LCRTBS | LCRTERA | LCRTKIL | LPASS8);
  368. x    }
  369. x
  370. x    /* get and set the new local chars */
  371. x    ioctl (SHIN, TIOCGLTC, &testlc);
  372. x    if (setkey(&testlc.t_suspc, &nlc.t_suspc))
  373. x    xlc.t_suspc = nlc.t_suspc;
  374. x    setkey (&testlc.t_dsuspc, &nlc.t_dsuspc);
  375. x    setkey (&testlc.t_rprntc, &nlc.t_rprntc);
  376. x    if (setkey(&testlc.t_flushc, &nlc.t_flushc))
  377. x    xlc.t_flushc = nlc.t_flushc;
  378. x    setkey (&testlc.t_werasc, &nlc.t_werasc);
  379. x    setkey (&testlc.t_rprntc, &nlc.t_rprntc);
  380. x
  381. x    ioctl(SHIN, TIOCSETN, &xb);
  382. x    ioctl(SHIN, TIOCSETC, &xtc);
  383. x    ioctl(SHIN, TIOCSLTC, &xlc);
  384. x    ioctl(SHIN, TIOCLSET, &xlb);
  385. x#endif SVID
  386. x    return 0;
  387. x}
  388. x
  389. xCookedmode()            /* set tty in normal setup */
  390. x{
  391. x    int orig_intr;
  392. x
  393. x/*NOSTRICT*/
  394. x    orig_intr = (int) signal(SIGINT, SIG_IGN);  /* hold this for reseting tty */
  395. x#ifdef SVID
  396. x    ioctl(SHIN, TCSETAW, &nio);
  397. x# ifdef OREO
  398. x    ioctl(SHIN, TIOCSLTC, &nlc);
  399. x# endif OREO
  400. x#else SVID            /* for BSD... */
  401. x    ioctl(SHIN, TIOCSETN, &nb);
  402. x    ioctl(SHIN, TIOCSETC, &ntc);
  403. x    ioctl(SHIN, TIOCSLTC, &nlc);
  404. x    ioctl(SHIN, TIOCLSET, &nlb);
  405. x
  406. x/*NOSTRICT*/
  407. x    signal(SIGINT, orig_intr);        /* take these again */
  408. x#endif SVID
  409. x}
  410. x
  411. xResetInLine()
  412. x{
  413. x    Cursor = InputBuf;    /* reset cursor */
  414. x    LastChar = InputBuf;
  415. x    InputLim = &InputBuf[INBUFSIZ-2];
  416. x    Mark = InputBuf;
  417. x    QuoteNext = 0;
  418. x    MetaNext = 0;
  419. x    StickyMeta = 0;
  420. x    Hist_num = 0;
  421. x    DoingArg = 0;
  422. x    Argument = 1;
  423. x    /* LastKill = KillBuf;        /* no kill buffer */
  424. x    LastCmd = F_UNASSIGNED;    /* previous command executed */
  425. x}
  426. \Rogue\Monster\
  427. else
  428.   echo "will not over write ./ed.init.c"
  429. fi
  430. if [ `wc -c ./ed.init.c | awk '{printf $1}'` -ne 11772 ]
  431. then
  432. echo `wc -c ./ed.init.c | awk '{print "Got " $1 ", Expected " 11772}'`
  433. fi
  434. if `test ! -s ./ed.inputl.c`
  435. then
  436. echo "writing ./ed.inputl.c"
  437. sed 's/^x//' > ./ed.inputl.c << '\Rogue\Monster\'
  438. x#ifndef lint
  439. xstatic char *RCSid = "$Header: ed.inputl.c,v 1.2 86/01/06 21:39:54 paul Exp $";
  440. x#endif
  441. x
  442. x#include "sh.h"
  443. x#include "ed.h"
  444. x#define MAKE_TWENEX        /* to get extra defines, etc. */
  445. x#define NO_INCL
  446. x#include "tw.h"            /* for twenex stuff */
  447. x
  448. x#define CHECK_ERRS
  449. x
  450. x/* ed.inputl -- routines to get a single line from the input. */
  451. x
  452. xchar *index();
  453. xextern bool tellwhat;
  454. x
  455. x/* CCRETVAL */
  456. xint
  457. xInputl()
  458. x{
  459. x    register int c;
  460. x    register char *cp;
  461. x    CCRETVAL retval, e_insert();
  462. x    KEYCMD cmdnum;
  463. x    extern KEYCMD NumFuns;
  464. x    unsigned char ch;        /* the place where read() goes */
  465. x    int num;            /* how many chars we have read at NL */
  466. x
  467. x    ClearDisp();        /* reset the display stuff */
  468. x    ResetInLine();        /* reset the input pointers */
  469. x    if (Rawmode() < 0)        /* make sure the tty is set up correctly */
  470. x    return 0;        /* oops: SHIN was closed */
  471. x
  472. x    GettingInput = 1;
  473. x    NeedsRedraw = 0;
  474. x    if (tellwhat) {
  475. x     copyn(InputBuf, WhichBuf, INBUFSIZ);
  476. x    LastChar = InputBuf + (LastWhich - WhichBuf);
  477. x    Cursor = InputBuf + (CursWhich - WhichBuf);
  478. x    tellwhat = 0;
  479. x    }
  480. x    Refresh();            /* print the prompt */
  481. x
  482. x    for(;;) {            /* while still editing this line */
  483. x    if (read(SHIN, &ch, 1) != 1) {        /* if EOF or error */
  484. x        Cookedmode();    /* make sure the tty is set up correctly */
  485. x        GettingInput = 0;
  486. x        return 0;
  487. x    }
  488. x
  489. x    c = ch & 0377;
  490. x
  491. x#ifdef CHECK_ERRS
  492. x    if (Cursor > LastChar)
  493. x        printf("Cursor > LastChar\r\n");
  494. x    if (Cursor < InputBuf)
  495. x        printf("Cursor < InputBuf\r\n");
  496. x    if (Cursor > InputLim)
  497. x        printf ("Cursor > InputLim\r\n");
  498. x    if (LastChar > InputLim)
  499. x        printf ("LastChar > InputLim\r\n");
  500. x    if (InputLim != &InputBuf[INBUFSIZ-2])
  501. x        printf  ("InputLim != &InputBuf[INBUFSIZ-2]\r\n");
  502. x    if ((!DoingArg) && (Argument != 1))
  503. x        printf ("(!DoingArg) && (Argument != 1)\r\n");
  504. x#endif
  505. x
  506. x    if (QuoteNext) {
  507. x        QuoteNext = 0;
  508. x        retval = e_insert(c);
  509. x    } else {        /* not quoteing next */
  510. x        if (MetaNext) {
  511. x            MetaNext = 0;
  512. x        c |= 0200;        /* set the meta bit */
  513. x        }
  514. x        if (StickyMeta) {    /* for vi mode */
  515. x        c |= 0200;
  516. x        }
  517. x
  518. x        /* first indirection -- look in keymap */
  519. x        cmdnum = CcKeyMap[c];
  520. x        if (cmdnum < 0 || cmdnum >= NumFuns) { /* BUG CHECK command */
  521. x        printf ("ERROR: illegal command from key 0%o\r\n", c);
  522. x        continue;        /* try again */
  523. x        }
  524. x        /* now do the real command */
  525. x        retval = (*CcFuncTbl[cmdnum])(c);
  526. x    }
  527. x    /* save the last command here */
  528. x    LastCmd = cmdnum;
  529. x
  530. x    /* use any return value */
  531. x    switch (retval) {
  532. x
  533. x      case CC_NORM:        /* normal char */
  534. x        break;        /* keep going... */
  535. x        
  536. x      case CC_EOF:        /* end of file typed */
  537. x        Cookedmode();    /* make sure the tty is set up correctly */
  538. x        GettingInput = 0;
  539. x        PromptBuf[0] = '\0';
  540. x        return 0;
  541. x
  542. x      case CC_WHICH:    /* tell what this command does */
  543. x        tellwhat = 1;
  544. x        copyn(WhichBuf, InputBuf, INBUFSIZ);
  545. x        LastWhich = WhichBuf + (LastChar - InputBuf);
  546. x        CursWhich = WhichBuf + (Cursor - InputBuf);
  547. x        *LastChar++ = '\n';    /* for the benifit of CSH */
  548. x        Cookedmode();    /* make sure the tty is set up correctly */
  549. x        Hist_num = 0;    /* for the history commands */
  550. x        num = LastChar - InputBuf;
  551. x        ResetInLine();    /* reset the input pointers */
  552. x        GettingInput = 0;
  553. x        return (num); /* return the number of chars read */
  554. x
  555. x      case CC_NEWLINE:    /* normal end of line */
  556. x        tellwhat = 0;    /* just in case */
  557. x        Cookedmode();    /* make sure the tty is set up correctly */
  558. x        Hist_num = 0;    /* for the history commands */
  559. x        num = LastChar - InputBuf;
  560. x        ResetInLine();    /* reset the input pointers */
  561. x        GettingInput = 0;
  562. x        PromptBuf[0] = '\0';
  563. x        return (num); /* return the number of chars read */
  564. x
  565. x      case CC_CORRECT:
  566. x        if (tenematch (InputBuf, INBUFSIZ, Cursor-InputBuf,
  567. x               SPELL) != 1)
  568. x        Beep ();    /* Beep = No match/ambiguous */
  569. x        if (NeedsRedraw) {
  570. x        ClearLines();
  571. x        ClearDisp();
  572. x        NeedsRedraw = 0;
  573. x        }
  574. x        Refresh();
  575. x        break;
  576. x
  577. x      case CC_COMPLETE:
  578. x        if (tenematch (InputBuf, INBUFSIZ, Cursor-InputBuf,
  579. x               RECOGNIZE) != 1)
  580. x        Beep ();    /* Beep = No match/ambiguous */
  581. x        if (NeedsRedraw) {
  582. x        ClearLines();
  583. x        ClearDisp();
  584. x        NeedsRedraw = 0;
  585. x        }
  586. x        Refresh();
  587. x        break;
  588. x
  589. x      case CC_LIST_CHOICES:
  590. x        Cookedmode();    /* make sure the tty is set up correctly */
  591. x        /* should catch ^C here... */
  592. x        tenematch (InputBuf, INBUFSIZ, Cursor-InputBuf, LIST);
  593. x        Rawmode();
  594. x        Refresh();
  595. x        break;
  596. x
  597. x      case CC_UP_HIST:
  598. x        gouphist();
  599. x        Refresh();
  600. x        break;
  601. x
  602. x      case CC_DOWN_HIST:
  603. x        godownhist();
  604. x        Refresh();
  605. x        break;
  606. x
  607. x      case CC_UP_SEARCH_HIST:
  608. x      case CC_DOWN_SEARCH_HIST:
  609. x        break;
  610. x
  611. x      case CC_HELPME:
  612. x        Cookedmode();    /* make sure the tty is set up correctly */
  613. x        putchar ('\n');
  614. x        /* should catch ^C here... */
  615. x        tenematch (InputBuf, INBUFSIZ, LastChar-InputBuf, PRINT_HELP);
  616. x        Rawmode();
  617. x        Refresh();
  618. x        break;
  619. x
  620. x      case CC_FATAL:    /* fatal error, reset to known state */
  621. x        printf ("*** editor fatal ERROR ***\r\n\n");
  622. x                    /* put (real) cursor in a known place */
  623. x        ClearDisp();        /* reset the display stuff */
  624. x        ResetInLine();        /* reset the input pointers */
  625. x        Refresh();            /* print the prompt again */
  626. x        break;
  627. x
  628. x      case CC_ERROR:
  629. x      default:        /* functions we don't know about */
  630. x        DoingArg = 0;
  631. x        Argument = 1;
  632. x        Beep();
  633. x        flush();
  634. x        break;
  635. x    }
  636. x    }
  637. x/*NOTREACHED*/
  638. x}
  639. x
  640. xgouphist()
  641. x{
  642. x    struct Hist *hp;
  643. x    int hnumcntr;
  644. x
  645. x    if (Hist_num == 0) {
  646. x    copyn(HistBuf, InputBuf, INBUFSIZ);
  647. x    LastHist = HistBuf + (LastChar - InputBuf);
  648. x    }
  649. x
  650. x    hp = Histlist.Hnext;
  651. x    if (hp == (struct Hist *)0) {
  652. x    printf ("no hp\n");
  653. x    Beep();
  654. x    return;
  655. x    }
  656. x
  657. x    Hist_num++;
  658. x    for (hnumcntr = 1; hnumcntr < Hist_num; hnumcntr++) {
  659. x    if ((hp->Hnext) == (struct Hist *)0) {
  660. x        Beep();
  661. x        Hist_num--;
  662. x        break;
  663. x    }
  664. x    hp = hp -> Hnext;
  665. x    }
  666. x
  667. x    sprlex (InputBuf, &hp->Hlex);
  668. x    LastChar = InputBuf + strlen(InputBuf);
  669. x    if (LastChar > InputBuf) {
  670. x    if (LastChar[-1] == '\n') LastChar--;
  671. x    if (LastChar[-1] == ' ') LastChar--;
  672. x    if (LastChar < InputBuf) LastChar = InputBuf;
  673. x    }
  674. x    Cursor = LastChar;
  675. x}
  676. x
  677. xgodownhist()
  678. x{
  679. x    struct Hist *hp;
  680. x    int hnumcntr;
  681. x
  682. x    if (Hist_num == 0) {
  683. x    Beep();
  684. x    return;
  685. x    }
  686. x
  687. x    if (Hist_num == 1) {
  688. x    copyn(InputBuf, HistBuf, INBUFSIZ);
  689. x    LastChar = InputBuf + (LastHist - HistBuf);
  690. x    Hist_num--;
  691. x    Cursor = LastChar;
  692. x    return;
  693. x    }
  694. x
  695. x    hp = Histlist.Hnext;
  696. x    if (hp == 0) {
  697. x    Beep();
  698. x    return;
  699. x    }
  700. x    Hist_num--;
  701. x    for (hnumcntr = 1; hnumcntr < Hist_num; hnumcntr++) {
  702. x    if ((hp->Hnext) == 0) break;
  703. x    hp = hp -> Hnext;
  704. x    }
  705. x
  706. x    sprlex (InputBuf, &hp->Hlex);
  707. x    LastChar = InputBuf + strlen(InputBuf);
  708. x    if (LastChar > InputBuf) {
  709. x    if (LastChar[-1] == '\n') LastChar--;
  710. x    if (LastChar[-1] == ' ') LastChar--;
  711. x    if (LastChar < InputBuf) LastChar = InputBuf;
  712. x    }
  713. x    Cursor = LastChar;
  714. x}
  715. \Rogue\Monster\
  716. else
  717.   echo "will not over write ./ed.inputl.c"
  718. fi
  719. if [ `wc -c ./ed.inputl.c | awk '{printf $1}'` -ne 6748 ]
  720. then
  721. echo `wc -c ./ed.inputl.c | awk '{print "Got " $1 ", Expected " 6748}'`
  722. fi
  723. if `test ! -s ./ed.defns.c`
  724. then
  725. echo "writing ./ed.defns.c"
  726. sed 's/^x//' > ./ed.defns.c << '\Rogue\Monster\'
  727. x#ifndef lint
  728. xstatic char *RCSid = "$Header: ed.defns.c,v 1.2 86/01/06 21:40:02 paul Exp $";
  729. x#endif
  730. x
  731. x#include "sh.h"
  732. x#define ED_DEFNS        /* hack to avoid problems with externs */
  733. x#include "ed.h"
  734. x
  735. x/* ed.defns -- CcFuncTbl and CcKeyMap defined */
  736. x
  737. xextern CCRETVAL
  738. x    e_unassigned(),
  739. x    e_insert(),
  740. x    e_newline(),
  741. x    e_delprev(),
  742. x    e_delnext(),
  743. x    e_list_delnext(),        /* for ^D */
  744. x    e_toend(),
  745. x    e_tobeg(),
  746. x    e_charback(),
  747. x    e_charfwd(),
  748. x    e_quote(),
  749. x    e_startover(),
  750. x    e_redisp(),
  751. x    e_wordback(),
  752. x    e_wordfwd(),
  753. x    e_cleardisp(),
  754. x    e_complete(),
  755. x    e_correct(),
  756. x    e_up_hist(),
  757. x    e_down_hist(),
  758. x    e_up_search_hist(),
  759. x    e_down_search_hist(),
  760. x    e_helpme(),
  761. x    e_list_choices(),
  762. x    e_delwordprev(),
  763. x    e_delwordnext(),
  764. x    e_digit(),
  765. x    e_argdigit(),
  766. x    e_killend(),
  767. x    e_killbeg(),
  768. x    e_metanext(),
  769. x    e_send_eof(),
  770. x    e_charswitch(),
  771. x    e_which(),
  772. x    e_yank_kill(),
  773. x    e_tty_dsusp(),
  774. x    e_tty_flusho(),
  775. x    e_tty_quit(),
  776. x    e_tty_tsusp(),
  777. x    e_tty_stopo(),
  778. x    e_tty_starto(),
  779. x    e_argfour(),
  780. x    e_set_mark(),
  781. x    e_exchange_mark(),
  782. x    e_last_item(),
  783. x    e_vi_cmd_mode(),
  784. x    e_vi_insert(),
  785. x    e_killregion(),
  786. x    e_copyregion(),
  787. x    e_tty_int();
  788. x
  789. xPFCmd CcFuncTbl[] = {    /* table of available commands */
  790. x    e_unassigned,
  791. x#define        F_UNASSIGNED    0
  792. x    e_insert,
  793. x#define        F_INSERT    1
  794. x    e_newline,
  795. x#define        F_NEWLINE    2
  796. x    e_delprev,
  797. x#define        F_DELPREV    3
  798. x    e_delnext,
  799. x#define        F_DELNEXT    4
  800. x    e_toend,
  801. x#define        F_TOEND        5
  802. x    e_tobeg,
  803. x#define        F_TOBEG        6
  804. x    e_charback,
  805. x#define        F_CHARBACK    7
  806. x    e_charfwd,
  807. x#define        F_CHARFWD    8
  808. x    e_quote,
  809. x#define        F_QUOTE        9
  810. x    e_startover,
  811. x#define        F_STARTOVER    10
  812. x    e_redisp,
  813. x#define        F_REDISP    11
  814. x    e_tty_int,
  815. x#define        F_TTY_INT    12
  816. x    e_wordback,
  817. x#define        F_WORDBACK    13
  818. x    e_wordfwd,
  819. x#define        F_WORDFWD    14
  820. x    e_cleardisp,
  821. x#define        F_CLEARDISP    15
  822. x    e_complete,
  823. x#define        F_COMPLETE    16
  824. x    e_correct,
  825. x#define        F_CORRECT    17
  826. x    e_up_hist,
  827. x#define        F_UP_HIST    18
  828. x    e_down_hist,
  829. x#define        F_DOWN_HIST    19
  830. x    e_up_search_hist,
  831. x#define        F_UP_SEARCH_HIST    20
  832. x    e_down_search_hist,
  833. x#define        F_DOWN_SEARCH_HIST    21
  834. x    e_helpme,
  835. x#define        F_HELPME    22
  836. x    e_list_choices,
  837. x#define        F_LIST_CHOICES    23
  838. x    e_delwordprev,
  839. x#define        F_DELWORDPREV    24
  840. x    e_delwordnext,
  841. x#define        F_DELWORDNEXT    25
  842. x    e_digit,
  843. x#define        F_DIGIT        26
  844. x    e_killend,
  845. x#define        F_KILLEND    27
  846. x    e_killbeg,
  847. x#define        F_KILLBEG    28
  848. x    e_metanext,
  849. x#define        F_METANEXT    29
  850. x    e_send_eof,
  851. x#define        F_SEND_EOF    30
  852. x    e_charswitch,
  853. x#define        F_CHARSWITCH    31
  854. x    e_which,
  855. x#define        F_WHICH        32
  856. x    e_yank_kill,
  857. x#define        F_YANK_KILL    33
  858. x    e_tty_dsusp,
  859. x#define        F_TTY_DSUSP    34
  860. x    e_tty_flusho,
  861. x#define        F_TTY_FLUSHO    35
  862. x    e_tty_quit,
  863. x#define        F_TTY_QUIT    36
  864. x    e_tty_tsusp,
  865. x#define        F_TTY_TSUSP    37
  866. x    e_tty_stopo,
  867. x#define        F_TTY_STOPO    38
  868. x    e_tty_starto,
  869. x#define        F_TTY_STARTO    39
  870. x    e_argfour,
  871. x#define        F_ARGFOUR    40
  872. x    e_set_mark,
  873. x#define        F_SET_MARK    41
  874. x    e_exchange_mark,
  875. x#define        F_EXCHANGE_MARK    42
  876. x    e_last_item,
  877. x#define        F_LAST_ITEM    43
  878. x    e_list_delnext,
  879. x#define        F_LIST_DELNEXT    44
  880. x    e_vi_cmd_mode,
  881. x#define        F_VI_CMD_MODE    45
  882. x    e_vi_insert,
  883. x#define        F_VI_INSERT    46
  884. x    e_argdigit,
  885. x#define        F_ARGDIGIT    47
  886. x    e_killregion,
  887. x#define        F_KILLREGION    48
  888. x    e_copyregion,
  889. x#define        F_COPYREGION    49
  890. x    0                /* DUMMY VALUE */
  891. x#define        F_NUM_FNS    50
  892. x};
  893. x
  894. xKEYCMD    NumFuns = F_NUM_FNS;
  895. x
  896. xKEYCMD CcKeyMap[256];        /* the real key map */
  897. x
  898. xKEYCMD CcEmacsMap[] = {
  899. x/* keymap table, each index into above tbl; should be 256*sizeof(KEYCMD)
  900. x   bytes long */
  901. x
  902. x    F_SET_MARK,            /* ^@ */
  903. x    F_TOBEG,            /* ^A */
  904. x    F_CHARBACK,            /* ^B */
  905. x    F_TTY_INT,            /* ^C */
  906. x    F_LIST_DELNEXT,        /* ^D */
  907. x    F_TOEND,            /* ^E */
  908. x    F_CHARFWD,            /* ^F */
  909. x    F_STARTOVER,        /* ^G */
  910. x    F_DELPREV,            /* ^H */
  911. x    F_COMPLETE,            /* ^I */
  912. x    F_NEWLINE,            /* ^J */
  913. x    F_KILLEND,            /* ^K */
  914. x    F_CLEARDISP,        /* ^L */
  915. x    F_NEWLINE,            /* ^M */
  916. x    F_DOWN_HIST,        /* ^N */
  917. x    F_TTY_FLUSHO,        /* ^O */
  918. x    F_UP_HIST,            /* ^P */
  919. x    F_TTY_STARTO,        /* ^Q */
  920. x    F_REDISP,            /* ^R */
  921. x    F_TTY_STOPO,        /* ^S */
  922. x    F_CHARSWITCH,        /* ^T */
  923. x    F_ARGFOUR,            /* ^U */
  924. x    F_QUOTE,            /* ^V */
  925. x    F_KILLREGION,        /* ^W */
  926. x    F_EXCHANGE_MARK,        /* ^X */
  927. x    F_YANK_KILL,        /* ^Y */
  928. x    F_TTY_TSUSP,        /* ^Z */
  929. x    F_METANEXT,            /* ^[ */
  930. x    F_TTY_QUIT,            /* ^\ */
  931. x    F_TTY_DSUSP,        /* ^] */
  932. x    F_UNASSIGNED,        /* ^^ */
  933. x    F_UNASSIGNED,        /* ^_ */
  934. x    F_INSERT,            /* SPACE */
  935. x    F_INSERT,            /* ! */
  936. x    F_INSERT,            /* " */
  937. x    F_INSERT,            /* # */
  938. x    F_INSERT,            /* $ */
  939. x    F_INSERT,            /* % */
  940. x    F_INSERT,            /* & */
  941. x    F_INSERT,            /* ' */
  942. x    F_INSERT,            /* ( */
  943. x    F_INSERT,            /* ) */
  944. x    F_INSERT,            /* * */
  945. x    F_INSERT,            /* + */
  946. x    F_INSERT,            /* , */
  947. x    F_INSERT,            /* - */
  948. x    F_INSERT,            /* . */
  949. x    F_INSERT,            /* / */
  950. x    F_DIGIT,            /* 0 */
  951. x    F_DIGIT,            /* 1 */
  952. x    F_DIGIT,            /* 2 */
  953. x    F_DIGIT,            /* 3 */
  954. x    F_DIGIT,            /* 4 */
  955. x    F_DIGIT,            /* 5 */
  956. x    F_DIGIT,            /* 6 */
  957. x    F_DIGIT,            /* 7 */
  958. x    F_DIGIT,            /* 8 */
  959. x    F_DIGIT,            /* 9 */
  960. x    F_INSERT,            /* : */
  961. x    F_INSERT,            /* ; */
  962. x    F_INSERT,            /* < */
  963. x    F_INSERT,            /* = */
  964. x    F_INSERT,            /* > */
  965. x    F_INSERT,            /* ? */
  966. x    F_INSERT,            /* @ */
  967. x    F_INSERT,            /* A */
  968. x    F_INSERT,            /* B */
  969. x    F_INSERT,            /* C */
  970. x    F_INSERT,            /* D */
  971. x    F_INSERT,            /* E */
  972. x    F_INSERT,            /* F */
  973. x    F_INSERT,            /* G */
  974. x    F_INSERT,            /* H */
  975. x    F_INSERT,            /* I */
  976. x    F_INSERT,            /* J */
  977. x    F_INSERT,            /* K */
  978. x    F_INSERT,            /* L */
  979. x    F_INSERT,            /* M */
  980. x    F_INSERT,            /* N */
  981. x    F_INSERT,            /* O */
  982. x    F_INSERT,            /* P */
  983. x    F_INSERT,            /* Q */
  984. x    F_INSERT,            /* R */
  985. x    F_INSERT,            /* S */
  986. x    F_INSERT,            /* T */
  987. x    F_INSERT,            /* U */
  988. x    F_INSERT,            /* V */
  989. x    F_INSERT,            /* W */
  990. x    F_INSERT,            /* X */
  991. x    F_INSERT,            /* Y */
  992. x    F_INSERT,            /* Z */
  993. x    F_INSERT,            /* [ */
  994. x    F_INSERT,            /* \ */
  995. x    F_INSERT,            /* ] */
  996. x    F_INSERT,            /* ^ */
  997. x    F_INSERT,            /* _ */
  998. x    F_INSERT,            /* ` */
  999. x    F_INSERT,            /* a */
  1000. x    F_INSERT,            /* b */
  1001. x    F_INSERT,            /* c */
  1002. x    F_INSERT,            /* d */
  1003. x    F_INSERT,            /* e */
  1004. x    F_INSERT,            /* f */
  1005. x    F_INSERT,            /* g */
  1006. x    F_INSERT,            /* h */
  1007. x    F_INSERT,            /* i */
  1008. x    F_INSERT,            /* j */
  1009. x    F_INSERT,            /* k */
  1010. x    F_INSERT,            /* l */
  1011. x    F_INSERT,            /* m */
  1012. x    F_INSERT,            /* n */
  1013. x    F_INSERT,            /* o */
  1014. x    F_INSERT,            /* p */
  1015. x    F_INSERT,            /* q */
  1016. x    F_INSERT,            /* r */
  1017. x    F_INSERT,            /* s */
  1018. x    F_INSERT,            /* t */
  1019. x    F_INSERT,            /* u */
  1020. x    F_INSERT,            /* v */
  1021. x    F_INSERT,            /* w */
  1022. x    F_INSERT,            /* x */
  1023. x    F_INSERT,            /* y */
  1024. x    F_INSERT,            /* z */
  1025. x    F_INSERT,            /* { */
  1026. x    F_INSERT,            /* | */
  1027. x    F_INSERT,            /* } */
  1028. x    F_INSERT,            /* ~ */
  1029. x    F_DELPREV,            /* ^? */
  1030. x    F_UNASSIGNED,        /* M-^@ */
  1031. x    F_UNASSIGNED,        /* M-^A */
  1032. x    F_UNASSIGNED,        /* M-^B */
  1033. x    F_UNASSIGNED,        /* M-^C */
  1034. x    F_LIST_CHOICES,        /* M-^D */
  1035. x    F_UNASSIGNED,        /* M-^E */
  1036. x    F_UNASSIGNED,        /* M-^F */
  1037. x    F_UNASSIGNED,        /* M-^G */
  1038. x    F_DELWORDPREV,        /* M-^H */
  1039. x    F_COMPLETE,            /* M-^I */
  1040. x    F_UNASSIGNED,        /* M-^J */
  1041. x    F_UNASSIGNED,        /* M-^K */
  1042. x    F_CLEARDISP,        /* M-^L */
  1043. x    F_UNASSIGNED,        /* M-^M */
  1044. x    F_UNASSIGNED,        /* M-^N */
  1045. x    F_UNASSIGNED,        /* M-^O */
  1046. x    F_UNASSIGNED,        /* M-^P */
  1047. x    F_UNASSIGNED,        /* M-^Q */
  1048. x    F_UNASSIGNED,        /* M-^R */
  1049. x    F_UNASSIGNED,        /* M-^S */
  1050. x    F_UNASSIGNED,        /* M-^T */
  1051. x    F_UNASSIGNED,        /* M-^U */
  1052. x    F_UNASSIGNED,        /* M-^V */
  1053. x    F_UNASSIGNED,        /* M-^W */
  1054. x    F_UNASSIGNED,        /* M-^X */
  1055. x    F_UNASSIGNED,        /* M-^Y */
  1056. x    F_UNASSIGNED,        /* M-^Z */
  1057. x    F_COMPLETE,            /* M-^[ */
  1058. x    F_UNASSIGNED,        /* M-^\ */
  1059. x    F_UNASSIGNED,        /* M-^] */
  1060. x    F_UNASSIGNED,        /* M-^^ */
  1061. x    F_UNASSIGNED,        /* M-^_ */
  1062. x    F_UNASSIGNED,        /* M-SPACE */
  1063. x    F_UNASSIGNED,        /* M-! */
  1064. x    F_UNASSIGNED,        /* M-" */
  1065. x    F_UNASSIGNED,        /* M-# */
  1066. x    F_CORRECT,            /* M-$ */
  1067. x    F_UNASSIGNED,        /* M-% */
  1068. x    F_UNASSIGNED,        /* M-& */
  1069. x    F_UNASSIGNED,        /* M-' */
  1070. x    F_UNASSIGNED,        /* M-( */
  1071. x    F_UNASSIGNED,        /* M-) */
  1072. x    F_UNASSIGNED,        /* M-* */
  1073. x    F_UNASSIGNED,        /* M-+ */
  1074. x    F_UNASSIGNED,        /* M-, */
  1075. x    F_UNASSIGNED,        /* M-- */
  1076. x    F_UNASSIGNED,        /* M-. */
  1077. x    F_UNASSIGNED,        /* M-/ */
  1078. x    F_ARGDIGIT,            /* M-0 */
  1079. x    F_ARGDIGIT,            /* M-1 */
  1080. x    F_ARGDIGIT,            /* M-2 */
  1081. x    F_ARGDIGIT,            /* M-3 */
  1082. x    F_ARGDIGIT,            /* M-4 */
  1083. x    F_ARGDIGIT,            /* M-5 */
  1084. x    F_ARGDIGIT,            /* M-6 */
  1085. x    F_ARGDIGIT,            /* M-7 */
  1086. x    F_ARGDIGIT,            /* M-8 */
  1087. x    F_ARGDIGIT,            /* M-9 */
  1088. x    F_UNASSIGNED,        /* M-: */
  1089. x    F_UNASSIGNED,        /* M-; */
  1090. x    F_UNASSIGNED,        /* M-< */
  1091. x    F_UNASSIGNED,        /* M-= */
  1092. x    F_UNASSIGNED,        /* M-> */
  1093. x    F_WHICH,            /* M-? */
  1094. x    F_UNASSIGNED,        /* M-@ */
  1095. x    F_UNASSIGNED,        /* M-A */
  1096. x    F_WORDBACK,            /* M-B */
  1097. x    F_UNASSIGNED,        /* M-C */
  1098. x    F_DELWORDNEXT,        /* M-D */
  1099. x    F_UNASSIGNED,        /* M-E */
  1100. x    F_WORDFWD,            /* M-F */
  1101. x    F_UNASSIGNED,        /* M-G */
  1102. x    F_HELPME,            /* M-H */
  1103. x    F_UNASSIGNED,        /* M-I */
  1104. x    F_UNASSIGNED,        /* M-J */
  1105. x    F_UNASSIGNED,        /* M-K */
  1106. x    F_UNASSIGNED,        /* M-L */
  1107. x    F_UNASSIGNED,        /* M-M */
  1108. x    F_UNASSIGNED,        /* M-N */
  1109. x    F_UNASSIGNED,        /* M-O */
  1110. x    F_UNASSIGNED,        /* M-P */
  1111. x    F_UNASSIGNED,        /* M-Q */
  1112. x    F_UNASSIGNED,        /* M-R */
  1113. x    F_CORRECT,            /* M-S */
  1114. x    F_UNASSIGNED,        /* M-T */
  1115. x    F_UNASSIGNED,        /* M-U */
  1116. x    F_UNASSIGNED,        /* M-V */
  1117. x    F_COPYREGION,        /* M-W */
  1118. x    F_UNASSIGNED,        /* M-X */
  1119. x    F_UNASSIGNED,        /* M-Y */
  1120. x    F_UNASSIGNED,        /* M-Z */
  1121. x    F_UNASSIGNED,        /* M-[ */
  1122. x    F_UNASSIGNED,        /* M-\ */
  1123. x    F_UNASSIGNED,        /* M-] */
  1124. x    F_UNASSIGNED,        /* M-^ */
  1125. x    F_UNASSIGNED,        /* M-_ */
  1126. x    F_UNASSIGNED,        /* M-` */
  1127. x    F_UNASSIGNED,        /* M-a */
  1128. x    F_WORDBACK,            /* M-b */
  1129. x    F_UNASSIGNED,        /* M-c */
  1130. x    F_DELWORDNEXT,        /* M-d */
  1131. x    F_UNASSIGNED,        /* M-e */
  1132. x    F_WORDFWD,            /* M-f */
  1133. x    F_UNASSIGNED,        /* M-g */
  1134. x    F_HELPME,            /* M-h */
  1135. x    F_UNASSIGNED,        /* M-i */
  1136. x    F_UNASSIGNED,        /* M-j */
  1137. x    F_UNASSIGNED,        /* M-k */
  1138. x    F_UNASSIGNED,        /* M-l */
  1139. x    F_UNASSIGNED,        /* M-m */
  1140. x    F_UNASSIGNED,        /* M-n */
  1141. x    F_UNASSIGNED,        /* M-o */
  1142. x    F_UNASSIGNED,        /* M-p */
  1143. x    F_UNASSIGNED,        /* M-q */
  1144. x    F_UNASSIGNED,        /* M-r */
  1145. x    F_CORRECT,            /* M-s */
  1146. x    F_UNASSIGNED,        /* M-t */
  1147. x    F_UNASSIGNED,        /* M-u */
  1148. x    F_UNASSIGNED,        /* M-v */
  1149. x    F_COPYREGION,        /* M-w */
  1150. x    F_UNASSIGNED,        /* M-x */
  1151. x    F_UNASSIGNED,        /* M-y */
  1152. x    F_UNASSIGNED,        /* M-z */
  1153. x    F_UNASSIGNED,        /* M-{ */
  1154. x    F_UNASSIGNED,        /* M-| */
  1155. x    F_UNASSIGNED,        /* M-} */
  1156. x    F_UNASSIGNED,        /* M-~ */
  1157. x    F_DELWORDPREV,        /* M-^? */
  1158. x};
  1159. x
  1160. x#ifdef VI_MODE
  1161. xKEYCMD CcViMap[] = {
  1162. x/* keymap table, each index into above tbl; should be 256*sizeof(KEYCMD)
  1163. x   bytes long */
  1164. x
  1165. x    F_SET_MARK,            /* ^@ */
  1166. x    F_TOBEG,            /* ^A */
  1167. x    F_UNASSIGNED,        /* ^B */
  1168. x    F_TTY_INT,            /* ^C */
  1169. x    F_LIST_DELNEXT,        /* ^D */
  1170. x    F_TOEND,            /* ^E */
  1171. x    F_UNASSIGNED,        /* ^F */
  1172. x    F_STARTOVER,        /* ^G */
  1173. x    F_DELPREV,            /* ^H */
  1174. x    F_COMPLETE,            /* ^I */
  1175. x    F_NEWLINE,            /* ^J */
  1176. x    F_KILLEND,            /* ^K */
  1177. x    F_REDISP,            /* ^L */
  1178. x    F_NEWLINE,            /* ^M */
  1179. x    F_UNASSIGNED,        /* ^N */
  1180. x    F_TTY_FLUSHO,        /* ^O */
  1181. x    F_UNASSIGNED,        /* ^P */
  1182. x    F_TTY_STARTO,        /* ^Q */
  1183. x    F_UP_SEARCH_HIST,        /* ^R */
  1184. x    F_TTY_STOPO,        /* ^S */
  1185. x    F_CHARSWITCH,        /* ^T */
  1186. x    F_ARGFOUR,            /* ^U */
  1187. x    F_QUOTE,            /* ^V */
  1188. x    F_DELWORDPREV,        /* ^W */
  1189. x    F_UNASSIGNED,        /* ^X */
  1190. x    F_YANK_KILL,        /* ^Y */
  1191. x    F_TTY_TSUSP,        /* ^Z */
  1192. x    F_VI_CMD_MODE,        /* ^[ */
  1193. x    F_TTY_QUIT,            /* ^\ */
  1194. x    F_TTY_DSUSP,        /* ^] */
  1195. x    F_UNASSIGNED,        /* ^^ */    /* empty for now, maybe ^P? */
  1196. x    F_UNASSIGNED,        /* ^_ */    /* will become UNDO */
  1197. x    F_INSERT,            /* SPACE */
  1198. x    F_INSERT,            /* ! */
  1199. x    F_INSERT,            /* " */
  1200. x    F_INSERT,            /* # */
  1201. x    F_INSERT,            /* $ */
  1202. x    F_INSERT,            /* % */
  1203. x    F_INSERT,            /* & */
  1204. x    F_INSERT,            /* ' */
  1205. x    F_INSERT,            /* ( */
  1206. x    F_INSERT,            /* ) */
  1207. x    F_INSERT,            /* * */
  1208. x    F_INSERT,            /* + */
  1209. x    F_INSERT,            /* , */
  1210. x    F_INSERT,            /* - */
  1211. x    F_INSERT,            /* . */
  1212. x    F_INSERT,            /* / */
  1213. x    F_INSERT,            /* 0 */
  1214. x    F_INSERT,            /* 1 */
  1215. x    F_INSERT,            /* 2 */
  1216. x    F_INSERT,            /* 3 */
  1217. x    F_INSERT,            /* 4 */
  1218. x    F_INSERT,            /* 5 */
  1219. x    F_INSERT,            /* 6 */
  1220. x    F_INSERT,            /* 7 */
  1221. x    F_INSERT,            /* 8 */
  1222. x    F_INSERT,            /* 9 */
  1223. x    F_INSERT,            /* : */
  1224. x    F_INSERT,            /* ; */
  1225. x    F_INSERT,            /* < */
  1226. x    F_INSERT,            /* = */
  1227. x    F_INSERT,            /* > */
  1228. x    F_INSERT,            /* ? */
  1229. x    F_INSERT,            /* @ */
  1230. x    F_INSERT,            /* A */
  1231. x    F_INSERT,            /* B */
  1232. x    F_INSERT,            /* C */
  1233. x    F_INSERT,            /* D */
  1234. x    F_INSERT,            /* E */
  1235. x    F_INSERT,            /* F */
  1236. x    F_INSERT,            /* G */
  1237. x    F_INSERT,            /* H */
  1238. x    F_INSERT,            /* I */
  1239. x    F_INSERT,            /* J */
  1240. x    F_INSERT,            /* K */
  1241. x    F_INSERT,            /* L */
  1242. x    F_INSERT,            /* M */
  1243. x    F_INSERT,            /* N */
  1244. x    F_INSERT,            /* O */
  1245. x    F_INSERT,            /* P */
  1246. x    F_INSERT,            /* Q */
  1247. x    F_INSERT,            /* R */
  1248. x    F_INSERT,            /* S */
  1249. x    F_INSERT,            /* T */
  1250. x    F_INSERT,            /* U */
  1251. x    F_INSERT,            /* V */
  1252. x    F_INSERT,            /* W */
  1253. x    F_INSERT,            /* X */
  1254. x    F_INSERT,            /* Y */
  1255. x    F_INSERT,            /* Z */
  1256. x    F_INSERT,            /* [ */
  1257. x    F_INSERT,            /* \ */
  1258. x    F_INSERT,            /* ] */
  1259. x    F_INSERT,            /* ^ */
  1260. x    F_INSERT,            /* _ */
  1261. x    F_INSERT,            /* ` */
  1262. x    F_INSERT,            /* a */
  1263. x    F_INSERT,            /* b */
  1264. x    F_INSERT,            /* c */
  1265. x    F_INSERT,            /* d */
  1266. x    F_INSERT,            /* e */
  1267. x    F_INSERT,            /* f */
  1268. x    F_INSERT,            /* g */
  1269. x    F_INSERT,            /* h */
  1270. x    F_INSERT,            /* i */
  1271. x    F_INSERT,            /* j */
  1272. x    F_INSERT,            /* k */
  1273. x    F_INSERT,            /* l */
  1274. x    F_INSERT,            /* m */
  1275. x    F_INSERT,            /* n */
  1276. x    F_INSERT,            /* o */
  1277. x    F_INSERT,            /* p */
  1278. x    F_INSERT,            /* q */
  1279. x    F_INSERT,            /* r */
  1280. x    F_INSERT,            /* s */
  1281. x    F_INSERT,            /* t */
  1282. x    F_INSERT,            /* u */
  1283. x    F_INSERT,            /* v */
  1284. x    F_INSERT,            /* w */
  1285. x    F_INSERT,            /* x */
  1286. x    F_INSERT,            /* y */
  1287. x    F_INSERT,            /* z */
  1288. x    F_INSERT,            /* { */
  1289. x    F_INSERT,            /* | */
  1290. x    F_INSERT,            /* } */
  1291. x    F_INSERT,            /* ~ */
  1292. x    F_DELPREV,            /* ^? */
  1293. x    F_UNASSIGNED,        /* M-^@ */
  1294. x    F_UNASSIGNED,        /* M-^A */
  1295. x    F_UNASSIGNED,        /* M-^B */
  1296. x    F_UNASSIGNED,        /* M-^C */
  1297. x    F_LIST_CHOICES,        /* M-^D */
  1298. x    F_UNASSIGNED,        /* M-^E */
  1299. x    F_UNASSIGNED,        /* M-^F */
  1300. x    F_UNASSIGNED,        /* M-^G */
  1301. x    F_DELWORDPREV,        /* M-^H */
  1302. x    F_COMPLETE,            /* M-^I */
  1303. x    F_UNASSIGNED,        /* M-^J */
  1304. x    F_UNASSIGNED,        /* M-^K */
  1305. x    F_CLEARDISP,        /* M-^L */
  1306. x    F_UNASSIGNED,        /* M-^M */
  1307. x    F_UNASSIGNED,        /* M-^N */
  1308. x    F_UNASSIGNED,        /* M-^O */
  1309. x    F_UNASSIGNED,        /* M-^P */
  1310. x    F_UNASSIGNED,        /* M-^Q */
  1311. x    F_UNASSIGNED,        /* M-^R */
  1312. x    F_UNASSIGNED,        /* M-^S */
  1313. x    F_UNASSIGNED,        /* M-^T */
  1314. x    F_UNASSIGNED,        /* M-^U */
  1315. x    F_UNASSIGNED,        /* M-^V */
  1316. x    F_UNASSIGNED,        /* M-^W */
  1317. x    F_EXCHANGE_MARK,        /* M-^X */
  1318. x    F_UNASSIGNED,        /* M-^Y */
  1319. x    F_UNASSIGNED,        /* M-^Z */
  1320. x    F_UNASSIGNED,        /* M-^[ */
  1321. x    F_UNASSIGNED,        /* M-^\ */
  1322. x    F_UNASSIGNED,        /* M-^] */
  1323. x    F_UNASSIGNED,        /* M-^^ */
  1324. x    F_UNASSIGNED,        /* M-^_ */
  1325. x    F_UNASSIGNED,        /* M-SPACE */
  1326. x    F_UNASSIGNED,        /* M-! */
  1327. x    F_UNASSIGNED,        /* M-" */
  1328. x    F_UNASSIGNED,        /* M-# */
  1329. x    F_UNASSIGNED,        /* M-$ */
  1330. x    F_UNASSIGNED,        /* M-% */
  1331. x    F_UNASSIGNED,        /* M-& */
  1332. x    F_UNASSIGNED,        /* M-' */
  1333. x    F_UNASSIGNED,        /* M-( */
  1334. x    F_UNASSIGNED,        /* M-) */
  1335. x    F_COMPLETE,            /* M-* */
  1336. x    F_UNASSIGNED,        /* M-+ */
  1337. x    F_UNASSIGNED,        /* M-, */
  1338. x    F_UNASSIGNED,        /* M-- */
  1339. x    F_UNASSIGNED,        /* M-. */
  1340. x    F_UNASSIGNED,        /* M-/ */
  1341. x    F_ARGDIGIT,            /* M-0 */
  1342. x    F_ARGDIGIT,            /* M-1 */
  1343. x    F_ARGDIGIT,            /* M-2 */
  1344. x    F_ARGDIGIT,            /* M-3 */
  1345. x    F_ARGDIGIT,            /* M-4 */
  1346. x    F_ARGDIGIT,            /* M-5 */
  1347. x    F_ARGDIGIT,            /* M-6 */
  1348. x    F_ARGDIGIT,            /* M-7 */
  1349. x    F_ARGDIGIT,            /* M-8 */
  1350. x    F_ARGDIGIT,            /* M-9 */
  1351. x    F_UNASSIGNED,        /* M-: */
  1352. x    F_UNASSIGNED,        /* M-; */
  1353. x    F_UNASSIGNED,        /* M-< */
  1354. x    F_UNASSIGNED,        /* M-= */
  1355. x    F_UNASSIGNED,        /* M-> */
  1356. x    F_HELPME,            /* M-? */
  1357. x    F_UNASSIGNED,        /* M-@ */
  1358. x    F_UNASSIGNED,        /* M-A */
  1359. x    F_WORDBACK,            /* M-B */
  1360. x    F_UNASSIGNED,        /* M-C */
  1361. x    F_DELWORDNEXT,        /* M-D */
  1362. x    F_UNASSIGNED,        /* M-E */
  1363. x    F_WORDFWD,            /* M-F */
  1364. x    F_UNASSIGNED,        /* M-G */
  1365. x    F_HELPME,            /* M-H */
  1366. x    F_UNASSIGNED,        /* M-I */
  1367. x    F_UNASSIGNED,        /* M-J */
  1368. x    F_UNASSIGNED,        /* M-K */
  1369. x    F_UNASSIGNED,        /* M-L */
  1370. x    F_UNASSIGNED,        /* M-M */
  1371. x    F_UNASSIGNED,        /* M-N */
  1372. x    F_UNASSIGNED,        /* M-O */
  1373. x    F_UNASSIGNED,        /* M-P */
  1374. x    F_UNASSIGNED,        /* M-Q */
  1375. x    F_UNASSIGNED,        /* M-R */
  1376. x    F_UNASSIGNED,        /* M-S */
  1377. x    F_UNASSIGNED,        /* M-T */
  1378. x    F_UNASSIGNED,        /* M-U */
  1379. x    F_UNASSIGNED,        /* M-V */
  1380. x    F_UNASSIGNED,        /* M-W */
  1381. x    F_UNASSIGNED,        /* M-X */
  1382. x    F_UNASSIGNED,        /* M-Y */
  1383. x    F_UNASSIGNED,        /* M-Z */
  1384. x    F_UNASSIGNED,        /* M-[ */
  1385. x    F_UNASSIGNED,        /* M-\ */
  1386. x    F_UNASSIGNED,        /* M-] */
  1387. x    F_UNASSIGNED,        /* M-^ */
  1388. x    F_UNASSIGNED,        /* M-_ */
  1389. x    F_UNASSIGNED,        /* M-` */
  1390. x    F_UNASSIGNED,        /* M-a */
  1391. x    F_WORDBACK,            /* M-b */
  1392. x    F_UNASSIGNED,        /* M-c */
  1393. x    F_DELWORDNEXT,        /* M-d */
  1394. x    F_UNASSIGNED,        /* M-e */
  1395. x    F_WORDFWD,            /* M-f */
  1396. x    F_UNASSIGNED,        /* M-g */
  1397. x    F_CHARBACK,            /* M-h */
  1398. x    F_VI_INSERT,        /* M-i */
  1399. x    F_DOWN_HIST,        /* M-j */
  1400. x    F_UP_HIST,            /* M-k */
  1401. x    F_CHARFWD,            /* M-l */
  1402. x    F_UNASSIGNED,        /* M-m */
  1403. x    F_UNASSIGNED,        /* M-n */
  1404. x    F_UNASSIGNED,        /* M-o */
  1405. x    F_UNASSIGNED,        /* M-p */
  1406. x    F_UNASSIGNED,        /* M-q */
  1407. x    F_UNASSIGNED,        /* M-r */
  1408. x    F_UNASSIGNED,        /* M-s */
  1409. x    F_UNASSIGNED,        /* M-t */
  1410. x    F_UNASSIGNED,        /* M-u */
  1411. x    F_UNASSIGNED,        /* M-v */
  1412. x    F_UNASSIGNED,        /* M-w */
  1413. x    F_UNASSIGNED,        /* M-x */
  1414. x    F_UNASSIGNED,        /* M-y */
  1415. x    F_UNASSIGNED,        /* M-z */
  1416. x    F_UNASSIGNED,        /* M-{ */
  1417. x    F_UNASSIGNED,        /* M-| */
  1418. x    F_UNASSIGNED,        /* M-} */
  1419. x    F_UNASSIGNED,        /* M-~ */
  1420. x    F_DELWORDPREV,        /* M-^? */
  1421. x};
  1422. x#endif
  1423. x
  1424. xstruct KeyFuncs FuncNames[] = {
  1425. x    "backward-char",        F_CHARBACK,
  1426. x    "backward-delete-char",    F_DELPREV,
  1427. x    "backward-delete-word",    F_DELWORDPREV,
  1428. x    "backward-kill-line",    F_KILLBEG,
  1429. x    "backward-word",        F_WORDBACK,
  1430. x    "beginning-of-line",    F_TOBEG,
  1431. x    "clear-screen",        F_CLEARDISP,
  1432. x    "complete-word",        F_COMPLETE,
  1433. x    "copy-region-as-kill",    F_COPYREGION,
  1434. x    "delete-char",        F_DELNEXT,
  1435. x    "delete-char-or-list",    F_LIST_DELNEXT,
  1436. x    "delete-word",        F_DELWORDNEXT,
  1437. x    "digit",            F_DIGIT,
  1438. x    "digit-argument",        F_ARGDIGIT,
  1439. x    "down-history",        F_DOWN_HIST,
  1440. x    "end-of-file",        F_SEND_EOF,
  1441. x    "end-of-line",        F_TOEND,
  1442. x    "exchange-point-and-mark",    F_EXCHANGE_MARK,
  1443. x    "forward-char",        F_CHARFWD,
  1444. x    "forward-word",        F_WORDFWD,
  1445. x    "history-search-backward",    F_UP_SEARCH_HIST,
  1446. x    "history-search-forward",    F_DOWN_SEARCH_HIST,
  1447. x    "insert-last-word",        F_LAST_ITEM,
  1448. x    "keyboard-quit",        F_STARTOVER,
  1449. x    "kill-line",        F_KILLEND,
  1450. x    "kill-region",        F_KILLREGION,
  1451. x    "list-choices",        F_LIST_CHOICES,
  1452. x    "newline",            F_NEWLINE,
  1453. x    "prefix-meta",        F_METANEXT,
  1454. x    "quoted-insert",        F_QUOTE,
  1455. x    "redisplay",        F_REDISP,
  1456. x    "run-help",            F_HELPME,
  1457. x    "self-insert-command",    F_INSERT,
  1458. x    "set-mark-command",        F_SET_MARK,
  1459. x    "spell-word",        F_CORRECT,
  1460. x    "transpose-chars",        F_CHARSWITCH,
  1461. x    "tty-dsusp",        F_TTY_DSUSP,
  1462. x    "tty-flush-output",        F_TTY_FLUSHO,
  1463. x    "tty-sigintr",        F_TTY_INT,
  1464. x    "tty-sigquit",        F_TTY_QUIT,
  1465. x    "tty-sigtsusp",        F_TTY_TSUSP,
  1466. x    "tty-start-output",        F_TTY_STOPO,
  1467. x    "tty-stop-output",        F_TTY_STARTO,
  1468. x    "undefined-key",        F_UNASSIGNED,
  1469. x    "universal-argument",    F_ARGFOUR,
  1470. x    "up-history",        F_UP_HIST,
  1471. x    "vi-cmd-mode",        F_VI_CMD_MODE,
  1472. x    "vi-insert",        F_VI_INSERT,
  1473. x    "which-command",        F_WHICH,            
  1474. x    "yank",            F_YANK_KILL,
  1475. x    0,                0
  1476. x};
  1477. x
  1478. xCheckMaps()            /* check the size of the key maps */
  1479. x{
  1480. x    if ((sizeof(CcKeyMap)) != (256 * sizeof(KEYCMD)))
  1481. x    printf ("CcKeyMap should be 256 entries, but is %d.\r\n",
  1482. x         (sizeof(CcKeyMap) / sizeof(KEYCMD)));
  1483. x    if ((sizeof(CcEmacsMap)) != (256 * sizeof(KEYCMD)))
  1484. x    printf ("CcKeyMap should be 256 entries, but is %d.\r\n",
  1485. x         (sizeof(CcKeyMap) / sizeof(KEYCMD)));
  1486. x#ifdef VI_MODE
  1487. x    if ((sizeof(CcViMap)) != (256 * sizeof(KEYCMD)))
  1488. x    printf ("CcKeyMap should be 256 entries, but is %d.\r\n",
  1489. x         (sizeof(CcKeyMap) / sizeof(KEYCMD)));
  1490. x#endif
  1491. x}
  1492. x
  1493. xed_InitMaps()
  1494. x{
  1495. x    register int i;
  1496. x
  1497. x    for (i = 0; i < 256; i++)
  1498. x    CcKeyMap[i] = CcEmacsMap[i];
  1499. x}
  1500. \Rogue\Monster\
  1501. else
  1502.   echo "will not over write ./ed.defns.c"
  1503. fi
  1504. if [ `wc -c ./ed.defns.c | awk '{printf $1}'` -ne 19900 ]
  1505. then
  1506. echo `wc -c ./ed.defns.c | awk '{print "Got " $1 ", Expected " 19900}'`
  1507. fi
  1508. echo "Finished archive 2 of 6"
  1509. # if you want to concatenate archives, remove anything after this line
  1510. exit
  1511.  
  1512. -- 
  1513.  
  1514. Rich $alz
  1515. Cronus Project, BBN Labs            rsalz@bbn.com
  1516. Moderator, comp.sources.unix            sources@uunet.uu.net
  1517.