home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / editor / beav / patches.1 < prev    next >
Text File  |  1994-01-30  |  37KB  |  1,358 lines

  1. Only in new: makefile.os2
  2. Only in new: makefile.mx3
  3. Only in new: patches
  4. Only in new: termcap.c
  5. Only in new: termcap.h
  6. Only in new: termcap.dat
  7. Only in new: beav.def
  8. Only in new: beav.ini
  9. Only in new: beav.tex
  10. diff -c2 -bBw orig/def.h new/def.h
  11. *** orig/def.h    Tue Aug 11 09:38:18 1992
  12. --- new/def.h    Sat Oct 03 20:53:14 1992
  13. ***************
  14. *** 13,22 ****
  15.   #include        "stdio.h"
  16.   
  17. - #ifndef NOPROTO
  18.   #ifdef UNIX
  19.   #include        "sys/types.h"
  20.   #endif /* UNIX */
  21. - #include        "prototyp.h"
  22. - #endif /* NOPROTO */
  23.   
  24.   #define BACKUP  1        /* Make backup file.            */
  25. --- 13,19 ----
  26. ***************
  27. *** 116,120 ****
  28.   #endif
  29.   
  30. ! #define NCOL    80        /* Columns.     */
  31.   #define NROW    24        /* default rows */
  32.   
  33. --- 113,117 ----
  34.   #endif
  35.   
  36. ! #define NCOL    132        /* Columns.     */
  37.   #define NROW    24        /* default rows */
  38.   
  39. ***************
  40. *** 130,134 ****
  41.    */
  42.   #define NSHASH  31        /* Symbol table hash size.      */
  43. ! #define NFILEN  80        /* Length, file name.           */
  44.   #define NBUFN   13        /* Length, buffer name.     */
  45.   #define NFILE   12          /* Length, file name.  */    /* krw */
  46. --- 127,131 ----
  47.    */
  48.   #define NSHASH  31        /* Symbol table hash size.      */
  49. ! #define NFILEN  256        /* Length, file name.           */
  50.   #define NBUFN   13        /* Length, buffer name.     */
  51.   #define NFILE   12              /* Length, file name.  */    /* krw */
  52. ***************
  53. *** 223,227 ****
  54.    * mapped into the C1 control area.
  55.    */
  56. ! #define NKEYS   2048        /* 11 bit code.                 */
  57.   
  58.   #define METACH  0x1B        /* M- prefix,   Control-[, ESC  */
  59. --- 220,224 ----
  60.    * mapped into the C1 control area.
  61.    */
  62. ! #define NKEYS   4096        /* 12 bit code.                 */
  63.   
  64.   #define METACH  0x1B        /* M- prefix,   Control-[, ESC  */
  65. ***************
  66. *** 562,563 ****
  67. --- 559,564 ----
  68.   extern char *strcpy ();
  69.   extern char *strcat ();
  70. + #ifndef NOPROTO
  71. + #include "prototyp.h"
  72. + #endif /* NOPROTO */
  73. diff -c2 -bBw orig/display.c new/display.c
  74. *** orig/display.c    Tue Aug 11 09:38:12 1992
  75. --- new/display.c    Sat Oct 03 15:07:11 1992
  76. ***************
  77. *** 18,23 ****
  78.   D16 get_int ();
  79.   void writ_echo ();
  80. - void uline ();
  81. - void ucopy ();
  82.   void modeline ();
  83.   void bin_to_text ();
  84. --- 18,21 ----
  85. ***************
  86. *** 25,30 ****
  87.   uint get_currow ();
  88.   uint get_curcol ();
  89.   #if MSDOS
  90. ! void mem_line ();
  91.   #endif
  92.   
  93. --- 23,36 ----
  94.   uint get_currow ();
  95.   uint get_curcol ();
  96. + #ifndef NOPROTO
  97. + struct vid;
  98. + void ucopy (struct vid *vvp, struct vid *pvp);
  99. + void uline (int row, struct vid *vvp, struct vid *pvp);
  100. + #else
  101. + void uline ();
  102. + void ucopy ();
  103. + #endif
  104.   #if MSDOS
  105. ! void mem_line (int row, struct vid *vvp);
  106.   #endif
  107.   
  108. diff -c2 -bBw orig/echo.c new/echo.c
  109. *** orig/echo.c    Tue Aug 11 09:38:12 1992
  110. --- new/echo.c    Sat Oct 03 18:19:04 1992
  111. ***************
  112. *** 197,200 ****
  113. --- 197,201 ----
  114.           break;
  115.       case (KCTRL | 'M'):    /* Return, done.    */
  116. +         case (KCTRL | 'J'):    /* Linefeed, done.  */
  117.           buf[cpos] = '\0';
  118.           if (kbdmip != NULL)
  119. diff -c2 -bBw orig/file.c new/file.c
  120. *** orig/file.c    Tue Aug 11 09:38:12 1992
  121. --- new/file.c    Sat Oct 03 18:26:17 1992
  122. ***************
  123. *** 13,16 ****
  124. --- 13,17 ----
  125.   bool parse_f_name ();
  126.   A32 ffseek ();
  127. + A32 file_len();
  128.   
  129.   extern char MSG_rd_file[];
  130. diff -c2 -bBw orig/fileio.c new/fileio.c
  131. *** orig/fileio.c    Tue Aug 11 09:38:12 1992
  132. --- new/fileio.c    Sat Oct 03 21:05:08 1992
  133. ***************
  134. *** 16,19 ****
  135. --- 16,20 ----
  136.   
  137.   extern char MSG_cnt_wr[];
  138. + extern char MSG_cnt_rd[];
  139.   extern char MSG_wr_io_er[];
  140.   extern char MSG_rd_er[];
  141. ***************
  142. *** 44,63 ****
  143.   #ifdef MSDOS
  144.       if ((ffp = fopen (fn, "rb")) == NULL)    /* pvr */
  145. -     return (FIOERR);
  146. -     ;
  147. -     return (FIOSUC);
  148.   #endif
  149.   #ifdef UNIX
  150.       if ((ffp = open (fn, O_RDONLY)) == -1)    /* pvr */
  151. !     return (FIOERR);
  152. !     ;
  153. !     return (FIOSUC);
  154.   #endif
  155.   #ifdef AMIGA
  156.       if ((ffp = open (fn, O_RDONLY)) == -1)    /* pvr */
  157.       return (FIOERR);
  158. -     ;
  159.       return (FIOSUC);
  160. - #endif
  161.   }
  162.   
  163. --- 45,61 ----
  164.   #ifdef MSDOS
  165.       if ((ffp = fopen (fn, "rb")) == NULL)    /* pvr */
  166.   #endif
  167. + #ifdef OS2
  168. +     if ((ffp = open (fn, O_RDONLY | O_BINARY)) == -1) /* pvr */
  169. + #else
  170.   #ifdef UNIX
  171.       if ((ffp = open (fn, O_RDONLY)) == -1) /* pvr */
  172. ! #endif
  173.   #endif
  174.   #ifdef AMIGA
  175.       if ((ffp = open (fn, O_RDONLY)) == -1)    /* pvr */
  176. + #endif
  177.       return (FIOERR);
  178.       return (FIOSUC);
  179.   }
  180.   
  181. ***************
  182. *** 78,82 ****
  183.   #else /* AMIGA */
  184.   A32
  185. ! file_len ()
  186.   {
  187.   #ifdef MSDOS
  188. --- 76,80 ----
  189.   #else /* AMIGA */
  190.   A32
  191. ! file_len (void)
  192.   {
  193.   #ifdef MSDOS
  194. ***************
  195. *** 100,122 ****
  196.   * FALSE on error (cannot create).
  197.   */
  198. ! char
  199.   ffwopen (fn, mode)
  200.       char *fn;
  201. !     ushort mode;
  202.   {
  203.   #ifdef MSDOS
  204.       if ((ffp = fopen (fn, "wb")) == NULL)    /* pvr */
  205. -     {
  206. -     err_echo (MSG_cnt_wr);
  207. -     return (FIOERR);
  208. -     }
  209. -     return (FIOSUC);
  210.   #endif
  211.   #ifdef UNIX
  212.       /* set perms as in original file 1.31 */
  213. !     if ((ffp = open (fn, O_WRONLY | O_CREAT, mode)) == -1)    /* pvr */
  214. !     return (FIOERR);
  215. !     ;
  216. !     return (FIOSUC);
  217.   #endif
  218.   #ifdef AMIGA
  219. --- 98,118 ----
  220.   * FALSE on error (cannot create).
  221.   */
  222. ! bool
  223.   ffwopen (fn, mode)
  224.       char *fn;
  225. !     int mode;
  226.   {
  227.   #ifdef MSDOS
  228.       if ((ffp = fopen (fn, "wb")) == NULL)    /* pvr */
  229.   #endif
  230. + #ifdef OS2
  231. +     mode &= (S_IREAD | S_IWRITE);
  232. +     mode |= S_IREAD;
  233. +     if ((ffp = open (fn, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, mode)) == -1)
  234. + #else
  235.   #ifdef UNIX
  236.       /* set perms as in original file 1.31 */
  237. !     if ((ffp = open (fn, O_WRONLY | O_CREAT, mode)) == -1)
  238. ! #endif
  239.   #endif
  240.   #ifdef AMIGA
  241. ***************
  242. *** 123,130 ****
  243.       /* set perms as in original file 1.31 */
  244.       if ((ffp = open (fn, O_WRONLY | O_CREAT, mode)) == -1)    /* pvr */
  245.       return (FIOERR);
  246. !     ;
  247.       return (FIOSUC);
  248. - #endif
  249.   }
  250.   
  251. --- 119,128 ----
  252.       /* set perms as in original file 1.31 */
  253.       if ((ffp = open (fn, O_WRONLY | O_CREAT, mode)) == -1)    /* pvr */
  254. + #endif
  255. +     {
  256. +     err_echo (MSG_cnt_wr);
  257.       return (FIOERR);
  258. !     }
  259.       return (FIOSUC);
  260.   }
  261.   
  262. ***************
  263. *** 259,263 ****
  264.       backup = backname;
  265.       while ((*source > 0)
  266. ! #ifdef MSDOS
  267.          && (*source != '.'))
  268.   #else
  269. --- 257,261 ----
  270.       backup = backname;
  271.       while ((*source > 0)
  272. ! #if defined(MSDOS) || defined(OS2)
  273.          && (*source != '.'))
  274.   #else
  275. ***************
  276. *** 270,274 ****
  277. --- 268,279 ----
  278.       *backup = 0;
  279.       }
  280. + #ifdef OS2
  281. +     strcpy(backup, source);
  282. +     strcat(backup, "~");
  283. +     if (!isvalid(backname))
  284. +       strcpy(backup, ".bak");
  285. + #else
  286.       strcat (backname, MSG_bak);
  287. + #endif
  288.       sprintf (buf, MSG_backup, fname, backname);
  289.       writ_echo (buf);
  290. ***************
  291. *** 312,313 ****
  292. --- 317,348 ----
  293.       }
  294.   }
  295. + #ifdef OS2
  296. + #define INCL_NOPM
  297. + #define INCL_ERRORS
  298. + #include <os2.h>
  299. + int isvalid(char *name)
  300. + {
  301. +   HFILE hf;
  302. + #ifdef __32BIT__
  303. +   ULONG uAction;
  304. + #else
  305. +   USHORT uAction;
  306. + #endif
  307. +   switch( DosOpen(name, &hf, &uAction, 0, 0, FILE_OPEN,
  308. +                   OPEN_ACCESS_READONLY | OPEN_SHARE_DENYNONE, 0) )
  309. +   {
  310. +   case ERROR_INVALID_NAME:
  311. +   case ERROR_FILENAME_EXCED_RANGE:
  312. +     return FALSE;
  313. +   case NO_ERROR:
  314. +     DosClose(hf);
  315. +   default:
  316. +     return TRUE;
  317. +   }
  318. + }
  319. + #endif
  320. diff -c2 -bBw orig/kbd.c new/kbd.c
  321. *** orig/kbd.c    Tue Aug 11 09:38:12 1992
  322. --- new/kbd.c    Sat Oct 03 14:13:14 1992
  323. ***************
  324. *** 114,118 ****
  325.       }
  326.   #endif
  327. !     if (k & 0x80)
  328.       {
  329.       if ((np = keystrings (k)) != NULL)
  330. --- 114,118 ----
  331.       }
  332.   #endif
  333. !     if (k & 0x800)
  334.       {
  335.       if ((np = keystrings (k)) != NULL)
  336. diff -c2 -bBw orig/line.c new/line.c
  337. *** orig/line.c    Tue Aug 11 09:38:13 1992
  338. --- new/line.c    Sat Oct 03 18:07:04 1992
  339. ***************
  340. *** 50,54 ****
  341.       register LINE *lp;
  342.       char buf[NCOL], buf1[NCOL];
  343. ! #if RUNCHK
  344.       if (read_pat_mode)
  345.       printf (ERR_no_alloc);
  346. --- 50,54 ----
  347.       register LINE *lp;
  348.       char buf[NCOL], buf1[NCOL];
  349. ! #if NOT_RUNCHK
  350.       if (read_pat_mode)
  351.       printf (ERR_no_alloc);
  352. ***************
  353. *** 89,93 ****
  354.       register WINDOW *wp;
  355.   
  356. ! #if RUNCHK
  357.       if (read_pat_mode)
  358.       printf (ERR_db_dalloc);
  359. --- 89,93 ----
  360.       register WINDOW *wp;
  361.   
  362. ! #if NOT_RUNCHK
  363.       if (read_pat_mode)
  364.       printf (ERR_db_dalloc);
  365. diff -c2 -bBw orig/main.c new/main.c
  366. *** orig/main.c    Tue Aug 11 09:38:13 1992
  367. --- new/main.c    Sat Oct 03 20:45:14 1992
  368. ***************
  369. *** 49,52 ****
  370. --- 49,55 ----
  371.   extern char MSG_main[];
  372.   extern char MSG_prog_name[];
  373. + extern char MSG_init_file[];
  374. + extern char MSG_init_var[];
  375. + extern char MSG_init_path[];
  376.   extern char MSG_no_mod[];
  377.   extern char MSG_no_s_chg[];
  378. ***************
  379. *** 107,110 ****
  380. --- 110,114 ----
  381.       register int mflag;
  382.       char bname[NBUFN];
  383. +     char initfile[NFILEN];
  384.   
  385.   #if MSDOS
  386. ***************
  387. *** 118,122 ****
  388. --- 122,146 ----
  389.       vtinit ();            /* Virtual terminal.    */
  390.       keymapinit ();        /* Symbols, bindings.   */
  391. + #ifdef OS2
  392. + #ifdef __EMX__
  393. +     _response(&argc, &argv);
  394. +     _wildcard(&argc, &argv);
  395. + #endif
  396. +     _searchenv(MSG_init_file, MSG_init_var, initfile);
  397. +     if ( initfile[0] )
  398. +       check_extend (initfile);
  399. +     else
  400. +     {
  401. +       _searchenv(MSG_init_file, MSG_init_path, initfile);
  402. +       if ( initfile[0] )
  403. +         check_extend (initfile);
  404. +       else
  405. +         check_extend (getenv (MSG_prog_name));
  406. +     }
  407. + #else
  408.       check_extend (NULL);    /* check for extended keys */
  409. + #endif
  410.   
  411.       if (argc == 1)
  412. ***************
  413. *** 123,128 ****
  414.       {
  415.       edinit (bname);
  416. -     update ();
  417.       eerase ();
  418.       }
  419.   
  420. --- 147,152 ----
  421.       {
  422.       edinit (bname);
  423.       eerase ();
  424. +     update ();
  425.       }
  426.   
  427. ***************
  428. *** 137,140 ****
  429. --- 161,165 ----
  430.           makename (bname, argv[n]);
  431.           edinit (bname);    /* Buffers, windows.    */
  432. +         eerase ();
  433.           update ();
  434.           readin (argv[n--], 0L, MAXPOS);
  435. ***************
  436. *** 148,151 ****
  437. --- 173,177 ----
  438.       {
  439.           edinit (bname);
  440. +         eerase ();
  441.           update ();
  442.       }
  443. diff -c2 -bBw orig/search.c new/search.c
  444. *** orig/search.c    Tue Aug 11 09:38:13 1992
  445. --- new/search.c    Sat Oct 03 20:53:09 1992
  446. ***************
  447. *** 540,545 ****
  448.       BUFFER srch_buf, *save_buf;
  449.       LINE head_line;
  450. !     char disp_buf[120], mask_buf[120], buf1[NCOL], siz_prompt2, r_type, first_time,
  451. !          u_off, stat;
  452.   
  453.   
  454. --- 540,546 ----
  455.       BUFFER srch_buf, *save_buf;
  456.       LINE head_line;
  457. !     int r_type, siz_prompt2, u_off;
  458. !     bool first_time, stat;
  459. !     char disp_buf[180], mask_buf[180], buf1[NCOL];
  460.   
  461.   
  462. ***************
  463. *** 646,650 ****
  464.       cod = getkey ();
  465.   
  466. !     if (cod == 0x014D)    /* check for return */
  467.       {
  468.           if ((rplc_mode == TRUE) && (cur_prompt == MSG_sch_str))
  469. --- 647,651 ----
  470.       cod = getkey ();
  471.   
  472. !         if (cod == 0x014D || cod == 0x014A)  /* check for return or linefeed */
  473.       {
  474.           if ((rplc_mode == TRUE) && (cur_prompt == MSG_sch_str))
  475. diff -c2 -bBw orig/spawn.c new/spawn.c
  476. *** orig/spawn.c    Tue Aug 11 09:38:13 1992
  477. --- new/spawn.c    Sat Oct 03 14:22:04 1992
  478. ***************
  479. *** 4,7 ****
  480. --- 4,11 ----
  481.   #include        "def.h"
  482.   
  483. + #ifdef OS2
  484. + #define MSDOS  1
  485. + #endif
  486.   extern char MSG_shell[];
  487.   extern char MSG_def_shell[];
  488. ***************
  489. *** 12,16 ****
  490.   
  491.   /* #include     <dos.h> */
  492. ! #if MSDOS
  493.   #include        "process.h"
  494.   #endif
  495. --- 16,20 ----
  496.   
  497.   /* #include     <dos.h> */
  498. ! #ifdef MSDOS
  499.   #include        "process.h"
  500.   #endif
  501. ***************
  502. *** 28,32 ****
  503.       int f, n, k;
  504.   {
  505. ! #if MSDOS
  506.   
  507.       char *getenv ();
  508. --- 32,36 ----
  509.       int f, n, k;
  510.   {
  511. ! #ifdef MSDOS
  512.   
  513.       char *getenv ();
  514. ***************
  515. *** 38,41 ****
  516. --- 42,46 ----
  517.       ttflush ();
  518.       ttcooked ();
  519. + #ifndef OS2
  520.   #ifndef IBM
  521.       strcpy (prompt_line, MSG_pmpt);
  522. ***************
  523. *** 53,62 ****
  524. --- 58,72 ----
  525.   
  526.   #endif
  527. + #endif
  528.       if (!cspec && !(cspec = getenv (MSG_shell)))    /* jam */
  529.       cspec = MSG_def_shell;
  530.       spawnl (P_WAIT, cspec, MSG_null, NULL);
  531. + #ifndef OS2
  532. + #ifndef IBM
  533.       putenv (MSG_pme);
  534.       if (putenv (old_prompt) == -1)
  535.       exit (1);
  536. + #endif
  537. + #endif
  538.       ttraw ();
  539.       sgarbf = TRUE;
  540. diff -c2 -bBw orig/tcap.c new/tcap.c
  541. *** orig/tcap.c    Tue Aug 11 09:38:13 1992
  542. --- new/tcap.c    Sat Oct 03 14:35:17 1992
  543. ***************
  544. *** 7,10 ****
  545. --- 7,18 ----
  546.   #ifdef UNIX
  547.   
  548. + #ifdef OS2
  549. + #ifndef __EMX__
  550. + #define INCL_NOPM
  551. + #define INCL_VIO
  552. + #include <os2.h>
  553. + #endif
  554. + #endif
  555.   #define    MARGIN    8
  556.   #define    SCRSIZ    64
  557. ***************
  558. *** 27,31 ****
  559.   #define TCAPSLEN 315
  560.   char tcapbuf[TCAPSLEN];
  561. - char *UP, PC, *CM, *CE, *CL, *SO, *SE;
  562.   char *UP, PC, *CM, *CE, *CL, *SO, *SE, *TI, *TE;    /* DR */
  563.   
  564. --- 35,38 ----
  565. ***************
  566. *** 60,63 ****
  567. --- 67,73 ----
  568.   
  569.       if ((tv_stype = getenv ("TERM")) == NULL)
  570. + #ifdef OS2
  571. +         tv_stype = "ansi";
  572. + #else
  573.       {
  574.       puts ("Environment variable TERM not defined!\r");
  575. ***************
  576. *** 65,68 ****
  577. --- 75,79 ----
  578.       exit (1);
  579.       }
  580. + #endif
  581.   
  582.       if ((tgetent (tcbuf, tv_stype)) != 1)
  583. ***************
  584. *** 92,95 ****
  585. --- 103,108 ----
  586.   #endif /* ULTRIX */
  587.   #endif /* BSD */
  588. + #ifndef OS2
  589.       if ((nrow = (short) tgetnum ("li") - 1) == -1)
  590.       {
  591. ***************
  592. *** 109,112 ****
  593. --- 122,141 ----
  594.       if (ncol > NCOL)
  595.       ncol = NCOL;
  596. + #else
  597. +     {
  598. + #ifdef __EMX__
  599. +         int dst[2];
  600. +     _scrsize(dst);
  601. +         nrow = dst[1];
  602. +         ncol = dst[0];
  603. + #else
  604. +         VIOMODEINFO viomi;
  605. +         viomi.cb = sizeof(viomi);
  606. +         VioGetMode(&viomi, 0);
  607. +         nrow = viomi.row;
  608. +         ncol = viomi.col;
  609. + #endif
  610. +     }
  611. + #endif
  612.   
  613.       p = tcapbuf;
  614. ***************
  615. *** 182,185 ****
  616. --- 211,215 ----
  617.   putnpad (str, n)
  618.       char *str;
  619. +     int n;
  620.   {
  621.       tputs (str, n, ttputc);
  622. diff -c2 -bBw orig/termio.c new/termio.c
  623. *** orig/termio.c    Tue Aug 11 09:38:14 1992
  624. --- new/termio.c    Sat Oct 03 20:24:04 1992
  625. ***************
  626. *** 14,18 ****
  627. --- 14,33 ----
  628.   #include    <sys/ioctl.h>
  629.   #else
  630. + #ifdef OS2
  631. + #ifndef __EMX__
  632. + #define INCL_NOPM
  633. + #define INCL_DOS
  634. + #define INCL_KBD
  635. + #include    <os2.h>
  636. + #endif
  637. + #include    <io.h>
  638. + #else
  639. + #ifdef MINIX
  640. + #include    <sgtty.h>
  641. + #define O_NDELAY O_NONBLOCK
  642. + #else
  643.   #include    <termio.h>
  644. + #endif /* MINIX */
  645. + #endif /* OS2 */
  646.   #endif /* BSD */
  647.   #include    <errno.h>
  648. ***************
  649. *** 28,35 ****
  650. --- 43,65 ----
  651.   struct sgttyb ntermb;
  652.   #else
  653. + #ifdef OS2
  654. + #ifndef __EMX__
  655. + KBDINFO kbst, kbst_std;
  656. + #endif
  657. + #else
  658. + #ifdef MINIX
  659. + struct  sgttyb  otermio;    /* original terminal characteristics */
  660. + struct  sgttyb  ntermio;    /* charactoristics to use inside */
  661. + struct  tchars  tchars, tcharsorig;
  662. + #else
  663.   struct termio otermio;        /* original terminal characteristics */
  664.   struct termio ntermio;        /* charactoristics to use inside */
  665. + #endif /* MINIX */
  666. + #endif /* OS2 */
  667.   #endif /* BSD */
  668. + #ifndef OS2
  669.   extern errno;            /* System error number -- Necessary when compiling in BSD 1.13 */
  670. + #endif
  671.   
  672.   int nrow;            /* Terminal size, rows.         */
  673. ***************
  674. *** 81,84 ****
  675. --- 111,129 ----
  676.       }
  677.   #else
  678. + #ifdef OS2
  679. +     setmode(1, O_BINARY);
  680. + #else
  681. + #ifdef MINIX
  682. +     ioctl(0, TIOCGETP, &otermio);
  683. +     ntermio = otermio;
  684. +     ntermio.sg_flags &= ~ECHO;
  685. +     ntermio.sg_flags |= RAW;
  686. +     ioctl(0, TIOCSETP, &ntermio);
  687. +     ioctl(0, TIOCGETC, &tcharsorig);
  688. +     tchars = tcharsorig;
  689. +     tchars.t_intrc = tchars.t_quitc = tchars.t_startc =
  690. +     tchars.t_stopc = tchars.t_eofc = tchars.t_brkc = -1;
  691. +     ioctl(0, TIOCSETC, &tchars);
  692. + #else
  693.       ioctl (0, TCGETA, &otermio);/* save old settings */
  694.       ntermio.c_iflag = 0;    /* setup new settings */
  695. ***************
  696. *** 90,97 ****
  697.       ntermio.c_cc[VTIME] = 0;
  698.       ioctl (0, TCSETAW, &ntermio);    /* and activate them */
  699.       kbdflgs = fcntl (0, F_GETFL, 0);
  700.       kbdpoll = FALSE;
  701. !     /* on all screens we are not sure of the initial position
  702. !   of the cursor                    */
  703.       ttrow = 999;
  704.       ttcol = 999;
  705. --- 135,143 ----
  706.       ntermio.c_cc[VTIME] = 0;
  707.       ioctl (0, TCSETAW, &ntermio);    /* and activate them */
  708. + #endif /* MINIX */
  709.       kbdflgs = fcntl (0, F_GETFL, 0);
  710.       kbdpoll = FALSE;
  711. ! #endif /* OS2 */
  712. !     /* on all screens we are not sure of the initial position of the cursor */
  713.       ttrow = 999;
  714.       ttcol = 999;
  715. ***************
  716. *** 98,102 ****
  717.       nrow = NROW;
  718.       ncol = NCOL;
  719. ! #endif
  720.   }
  721.   
  722. --- 144,148 ----
  723.       nrow = NROW;
  724.       ncol = NCOL;
  725. ! #endif /* BSD */
  726.   }
  727.   
  728. ***************
  729. *** 113,123 ****
  730. --- 159,212 ----
  731.       printf ("closing ioctl on dev 0 failure, error = %d\n", errno);
  732.   #else
  733. + #ifdef OS2
  734. +     setmode(1, O_TEXT);
  735. + #else
  736. + #ifdef MINIX
  737. +     if (ioctl(0, TIOCSETP, &otermio) == -1 ||
  738. +         ioctl(0, TIOCSETC, &tcharsorig) == -1 )
  739. +       printf ("closing ioctl on dev 0 failure, error = %d\n", errno);
  740. + #else
  741.       if (ioctl (0, TCSETAW, &otermio) == -1)    /* restore terminal settings */
  742.       printf ("closing ioctl on dev 0 failure, error = %d\n", errno);
  743. + #endif /* MINIX */
  744.       if (fcntl (0, F_SETFL, kbdflgs) == -1)
  745.       printf ("closing fcntl on dev 0 failure, error = %d\n", errno);
  746. + #endif /* OS2 */
  747. + #endif /* BSD */
  748. + }
  749. + #ifdef OS2
  750. + void ttraw(void)
  751. + {
  752. + #ifdef __32BIT__
  753. +     signal(SIGINT, SIG_IGN);
  754. +     signal(SIGBREAK, SIG_IGN);
  755. + #else
  756. +     PFNSIGHANDLER oldhandler;
  757. +     USHORT oldact;
  758. +     DosSetSigHandler((PFNSIGHANDLER) NULL, &oldhandler, &oldact,
  759. +                      SIGA_IGNORE, SIG_CTRLBREAK);
  760. +     DosSetSigHandler((PFNSIGHANDLER) NULL, &oldhandler, &oldact,
  761. +                      SIGA_IGNORE, SIG_CTRLC);
  762.   #endif
  763.   
  764. + #ifndef __EMX__
  765. +     kbst_std.cb = sizeof(kbst_std);
  766. +     KbdGetStatus(&kbst_std, 0);
  767. +     kbst = kbst_std;
  768. +     kbst.fsMask &= ~(KEYBOARD_ECHO_ON  | KEYBOARD_ASCII_MODE | 
  769. +              KEYBOARD_SHIFT_REPORT);
  770. +     kbst.fsMask |=  (KEYBOARD_ECHO_OFF | KEYBOARD_BINARY_MODE);
  771. +     KbdSetStatus(&kbst, 0);
  772. + #endif
  773. + }
  774. + void ttcooked(void)
  775. + {
  776. + #ifndef __EMX__
  777. +     KbdSetStatus(&kbst_std, 0);
  778. + #endif
  779.   }
  780. + #endif
  781.       
  782.    /*
  783. ***************
  784. *** 127,134 ****
  785.   * MS-DOS (use the very very raw console output routine).
  786.   */
  787. ! void
  788.   ttputc (c)
  789.   {
  790.       fputc (c, stdout);
  791.   }
  792.   
  793. --- 216,239 ----
  794.   * MS-DOS (use the very very raw console output routine).
  795.   */
  796. ! #ifdef OS2
  797. ! int tty_io_size = 0;
  798. ! char tty_io_buffer[2048];
  799. ! #endif
  800. ! int
  801.   ttputc (c)
  802.   {
  803. + #ifdef OS2
  804. +     if ( tty_io_size == sizeof(tty_io_buffer) )
  805. +     {
  806. +         write(1, tty_io_buffer, tty_io_size);
  807. +         tty_io_size = 0;
  808. +     }
  809. +     tty_io_buffer[tty_io_size++] = c;
  810. + #else
  811.       fputc (c, stdout);
  812. + #endif
  813. +     return c;
  814.   }
  815.   
  816. ***************
  817. *** 140,144 ****
  818. --- 245,257 ----
  819.   ttflush ()
  820.   {
  821. + #ifdef OS2
  822. +     if ( tty_io_size )
  823. +     {
  824. +         write(1, tty_io_buffer, tty_io_size);
  825. +         tty_io_size = 0;
  826. +     }
  827. + #else
  828.       fflush (stdout);
  829. + #endif
  830.   }
  831.   
  832. ***************
  833. *** 148,153 ****
  834. --- 261,308 ----
  835.   * simple on CPM, because the system can do exactly what you want.
  836.   */
  837. + #ifdef OS2
  838. + #ifdef __EMX__
  839. + static int chr = -1;
  840. + #endif
  841. + #endif
  842.   ttgetc ()
  843.   {
  844. + #ifdef OS2
  845. + #ifdef __EMX__
  846. +     if ( chr != -1 )
  847. +     {
  848. +     int c = chr;
  849. +     chr = -1;
  850. +     return c;
  851. +     }
  852. +     else
  853. +         return _read_kbd(0, 1, 0);
  854. + #else
  855. +     static int ext, scan, chr;
  856. +     KBDKEYINFO ki;
  857. +     if ( ext )
  858. +     {
  859. +     ext = 0;
  860. +     return scan;
  861. +     }
  862. +     else
  863. +     {
  864. +     ttflush();
  865. +     KbdCharIn(&ki, IO_WAIT, 0);
  866. +     if ( ki.chChar == 0 || ki.chChar == 0xE0 )
  867. +     {
  868. +         ext = 1;
  869. +         scan = ki.chScan;
  870. +         return 0xE0;
  871. +     }
  872. +     else
  873. +       return ki.chChar;
  874. +     }
  875. + #endif
  876. + #else
  877.       if (kbdqp)
  878.       kbdqp = FALSE;
  879. ***************
  880. *** 169,172 ****
  881. --- 324,328 ----
  882.       }
  883.       return (kbdq & 127);
  884. + #endif /* OS2 */
  885.   }
  886.   
  887. ***************
  888. *** 176,179 ****
  889. --- 332,346 ----
  890.   ttkeyready ()
  891.   {
  892. + #ifdef OS2
  893. + #ifdef __EMX__
  894. +     chr = _read_kbd(0, 0, 0);
  895. +     return (chr != -1);
  896. + #else
  897. +     KBDKEYINFO ki;
  898. +     KbdPeek(&ki, 0);
  899. +     return (ki.fbStatus != 0);
  900. + #endif
  901. + #else
  902.       if (!kbdqp)
  903.       {
  904. ***************
  905. *** 186,189 ****
  906. --- 353,360 ----
  907.       kbdqp = TRUE;
  908.   #else
  909. + #ifdef X_MINIX
  910. +     /* MINIX has non-blocking mode but it doesn't work !?!? */
  911. +         return FALSE;
  912. + #else
  913.       if (!kbdpoll && fcntl (0, F_SETFL, kbdflgs | O_NDELAY) < 0)
  914.           return (FALSE);
  915. ***************
  916. *** 190,197 ****
  917.       kbdpoll = TRUE;        /*  fix in 1.13 */
  918.       kbdqp = (1 == read (0, &kbdq, 1));
  919. ! #endif
  920.   
  921.       }
  922.       return (kbdqp);
  923.   }
  924.   
  925. --- 361,370 ----
  926.       kbdpoll = TRUE;        /*  fix in 1.13 */
  927.       kbdqp = (1 == read (0, &kbdq, 1));
  928. ! #endif /* MINIX */
  929. ! #endif /* BSD */
  930.   
  931.       }
  932.       return (kbdqp);
  933. + #endif /* OS2 */
  934.   }
  935.   
  936. diff -c2 -bBw orig/text.c new/text.c
  937. *** orig/text.c    Tue Aug 11 09:38:14 1992
  938. --- new/text.c    Sat Oct 03 19:56:02 1992
  939. ***************
  940. *** 10,15 ****
  941.   char MSG_bad_num[] = "ERROR: Bad number";
  942.   char MSG_lX[] = "%lX";
  943. ! char MSG_lO[] = "%lO";
  944. ! char MSG_lD[] = "%lD";
  945.   
  946.   /* in buffer.c */
  947. --- 10,15 ----
  948.   char MSG_bad_num[] = "ERROR: Bad number";
  949.   char MSG_lX[] = "%lX";
  950. ! char MSG_lO[] = "%lo";
  951. ! char MSG_lD[] = "%ld";
  952.   
  953.   /* in buffer.c */
  954. ***************
  955. *** 52,55 ****
  956. --- 52,58 ----
  957.   char MSG_08lX[] = "%08lX";
  958.   char MSG_prog_name[] = "BEAV";
  959. + char MSG_init_file[] = "beav.ini";
  960. + char MSG_init_var[]  = "INIT";
  961. + char MSG_init_path[] = "PATH";
  962.   char MSG_disp_b_lst[] = " Buffer List ";
  963.   char MSG_file[] = "File: ";
  964. ***************
  965. *** 134,137 ****
  966. --- 137,141 ----
  967.   /* in fileio.c */
  968.   char MSG_cnt_wr[] = "ERROR: Cannot open file for writing";
  969. + char MSG_cnt_rd[] = "ERROR: Cannot open file for reading";
  970.   char MSG_wr_io_er[] = "ERROR: Write I/O error";
  971.   char MSG_rd_er[] = "ERROR: File read error";
  972. ***************
  973. *** 226,230 ****
  974. --- 230,238 ----
  975.   /* in spawn.c */
  976.   char MSG_shell[] = "COMSPEC";
  977. + #ifdef OS2
  978. + char MSG_def_shell[] = "cmd.exe";
  979. + #else
  980.   char MSG_def_shell[] = "/command.com";
  981. + #endif
  982.   char MSG_pmpt[] = "PROMPT=[BEAV]";
  983.   char MSG_pt[] = "PROMPT";
  984. diff -c2 -bBw orig/tty.c new/tty.c
  985. *** orig/tty.c    Tue Aug 11 09:38:14 1992
  986. --- new/tty.c    Sat Oct 03 15:45:22 1992
  987. ***************
  988. *** 43,48 ****
  989. --- 43,53 ----
  990.       ttraw ();
  991.   #endif
  992. + #ifdef OS2
  993. +     ttraw ();
  994. + #endif
  995.   #ifdef UNIX
  996.       tcapopen ();
  997. +     tcapmove(0, 0);
  998. +     tcapeeop();
  999.   #endif
  1000.   }
  1001. ***************
  1002. *** 56,59 ****
  1003. --- 61,67 ----
  1004.   {
  1005.   #ifdef MSDOS
  1006. +     ttcooked ();
  1007. + #endif
  1008. + #ifdef OS2
  1009.       ttcooked ();
  1010.   #endif
  1011. diff -c2 -bBw orig/ttyio.c new/ttyio.c
  1012. *** orig/ttyio.c    Tue Aug 11 09:38:14 1992
  1013. --- new/ttyio.c    Sat Oct 03 17:59:22 1992
  1014. ***************
  1015. *** 95,99 ****
  1016.   * Write character.
  1017.   */
  1018. ! void
  1019.   ttputc (c)
  1020.       int c;
  1021. --- 95,99 ----
  1022.   * Write character.
  1023.   */
  1024. ! int
  1025.   ttputc (c)
  1026.       int c;
  1027. ***************
  1028. *** 100,103 ****
  1029. --- 100,104 ----
  1030.   {
  1031.       bdos (6, c, 0);
  1032. +     return c;
  1033.   }
  1034.   
  1035. diff -c2 -bBw orig/ttykbd.c new/ttykbd.c
  1036. *** orig/ttykbd.c    Tue Aug 11 09:38:14 1992
  1037. --- new/ttykbd.c    Sat Oct 03 14:42:24 1992
  1038. ***************
  1039. *** 112,117 ****
  1040.   /*
  1041.    * The keyboard's special characters, those things that are prefixed with
  1042. !  * a 0x1F, are placed into the keyboard tables as KCTRL || 0x80 || x, for some
  1043. !  * x, i.e. they have both the control and 0x80 bits set, so they won't conflict
  1044.    * with anything else on the keyboard.
  1045.    */
  1046. --- 112,117 ----
  1047.   /*
  1048.    * The keyboard's special characters, those things that are prefixed with
  1049. !  * a 0x1F, are placed into the keyboard tables as KCTRL || 0x800 || x, for some
  1050. !  * x i.e. they have both the control and 0x800 bits set, so they won't conflict
  1051.    * with anything else on the keyboard.
  1052.    */
  1053. ***************
  1054. *** 194,246 ****
  1055.       0, NULL, NULL
  1056.   };
  1057.   
  1058.   KEY_NAME_ARRAY ibm_keys[] =
  1059.   {
  1060. !     KCTLX | 0x80 | 0x3B, MSG_display_bindings, "F1",
  1061. !     KCTLX | 0x80 | 0x3C, MSG_set_mark, "F2",
  1062. !     KCTLX | 0x80 | 0x3D, MSG_forw_search, "F3",
  1063. !     KCTLX | 0x80 | 0x3E, MSG_search_again, "F4",
  1064. !     KCTLX | 0x80 | 0x3F, MSG_query_replace, "F5",
  1065. !     KCTLX | 0x80 | 0x40, MSG_yank, "F6",
  1066. !     KCTLX | 0x80 | 0x41, MSG_copy_region, "F7",
  1067. !     KCTLX | 0x80 | 0x42, MSG_kill_region, "F8",
  1068. !     KCTLX | 0x80 | 0x43, MSG_goto_line, "F9",
  1069. !     KCTLX | 0x80 | 0x44, MSG_abort, "F10",
  1070. !     KCTLX | 0x80 | 0x54, MSG_help, "Sh-F1",
  1071. !     KCTLX | 0x80 | 0x55, MSG_file_read, "Sh-F2",
  1072. !     KCTLX | 0x80 | 0x56, MSG_file_save, "Sh-F3",
  1073. !     KCTLX | 0x80 | 0x57, MSG_file_visit, "Sh-F4",
  1074. !     KCTLX | 0x80 | 0x58, MSG_file_write, "Sh-F5",
  1075. !     KCTLX | 0x80 | 0x59, MSG_flush_all, "Sh-F6",
  1076. !     KCTLX | 0x80 | 0x5A, MSG_set_file_name, "Sh-F7",
  1077. !     KCTLX | 0x80 | 0x5B, MSG_file_insert, "Sh-F8",
  1078. !     KCTLX | 0x80 | 0x5C, MSG_exit_flush_all, "Sh-F9",
  1079. !     KCTLX | 0x80 | 0x5D, MSG_quit, "Sh-F10",
  1080. !     KCTLX | 0x80 | 0x5E, MSG_display_buffers, "Ctl-F1",
  1081. !     KCTLX | 0x80 | 0x5F, MSG_use_buffer, "Ctl-F2",
  1082. !     KCTLX | 0x80 | 0x60, MSG_kill_buffer, "Ctl-F3",
  1083. !     KCTLX | 0x80 | 0x61, MSG_next_buff, "Ctl-F4",
  1084. !     KCTLX | 0x80 | 0x62, MSG_prev_buff, "Ctl-F5",
  1085. !     KCTLX | 0x80 | 0x63, MSG_yank_buffer, "Ctl-F6",
  1086. !     KCTLX | 0x80 | 0x64, MSG_set_file_name, "Ctl-F7",
  1087. !     KCTLX | 0x80 | 0x65, MSG_file_insert, "Ctl-F8",
  1088. !     KCTLX | 0x80 | 0x66, MSG_exit_flush_all, "Ctl-F9",
  1089. !     KCTLX | 0x80 | 0x67, MSG_quit, "Ctl-F10",
  1090. !     KCTLX | 0x80 | 0x48, MSG_back_line, "North",
  1091. !     KCTLX | 0x80 | 0x4D, MSG_forw_char, "East",
  1092. !     KCTLX | 0x80 | 0x74, MSG_forw_unit, "Ctl-East",
  1093. !     KCTLX | 0x80 | 0x50, MSG_forw_line, "South",
  1094. !     KCTLX | 0x80 | 0x4B, MSG_back_char, "West",
  1095. !     KCTLX | 0x80 | 0x73, MSG_back_unit, "Ctl-West",
  1096. !     KCTLX | 0x80 | 0x49, MSG_back_page, "PageDown",
  1097. !     KCTLX | 0x80 | 0x47, MSG_goto_bob, "Home",
  1098. !     KCTLX | 0x80 | 0x51, MSG_forw_page, "PageUp",
  1099. !     KCTLX | 0x80 | 0x4F, MSG_goto_eob, "End",
  1100. !     KCTLX | 0x80 | 0x52, MSG_ins_toggle, "Insert",
  1101. !     KCTLX | 0x80 | 0x53, MSG_forw_del_char, "Delete",
  1102. !     KCTLX | 0x80 | 0x76, MSG_forw_window, "Ctl-PageDown",
  1103. !     KCTLX | 0x80 | 0x84, MSG_back_window, "Ctl-PageUp",
  1104. !     KCTLX | 0x80 | 0x72, MSG_print, "Ctl-Print",
  1105. !     KCTLX | 0x80 | 0x0F, MSG_forw_unit, "Sh-Tab",
  1106.       0, NULL, NULL
  1107.   };
  1108. --- 194,334 ----
  1109.       0, NULL, NULL
  1110.   };
  1111. + #endif
  1112.     
  1113. + #if defined(MSDOS) || defined(OS2)
  1114.   KEY_NAME_ARRAY ibm_keys[] =
  1115.   {
  1116. !     KCTLX | 0x800 | 0x3B, MSG_display_bindings, "F1",
  1117. !     KCTLX | 0x800 | 0x3C, MSG_set_mark,         "F2",
  1118. !     KCTLX | 0x800 | 0x3D, MSG_forw_search,      "F3",
  1119. !     KCTLX | 0x800 | 0x3E, MSG_search_again,     "F4",
  1120. !     KCTLX | 0x800 | 0x3F, MSG_query_replace,    "F5",
  1121. !     KCTLX | 0x800 | 0x40, MSG_yank,             "F6",
  1122. !     KCTLX | 0x800 | 0x41, MSG_copy_region,      "F7",
  1123. !     KCTLX | 0x800 | 0x42, MSG_kill_region,      "F8",
  1124. !     KCTLX | 0x800 | 0x43, MSG_goto_line,        "F9",
  1125. !     KCTLX | 0x800 | 0x44, NULL,                 "F10",
  1126. !     KCTLX | 0x800 | 0x85, NULL,                 "F11",
  1127. !     KCTLX | 0x800 | 0x86, NULL,                 "F12",
  1128. !     KCTLX | 0x800 | 0x54, MSG_help,             "Sh-F1",
  1129. !     KCTLX | 0x800 | 0x55, MSG_file_read,        "Sh-F2",
  1130. !     KCTLX | 0x800 | 0x56, MSG_file_save,        "Sh-F3",
  1131. !     KCTLX | 0x800 | 0x57, MSG_file_visit,       "Sh-F4",
  1132. !     KCTLX | 0x800 | 0x58, MSG_file_write,       "Sh-F5",
  1133. !     KCTLX | 0x800 | 0x59, MSG_flush_all,        "Sh-F6",
  1134. !     KCTLX | 0x800 | 0x5A, MSG_set_file_name,    "Sh-F7",
  1135. !     KCTLX | 0x800 | 0x5B, MSG_file_insert,      "Sh-F8",
  1136. !     KCTLX | 0x800 | 0x5C, MSG_exit_flush_all,   "Sh-F9",
  1137. !     KCTLX | 0x800 | 0x5D, MSG_quit,             "Sh-F10",
  1138. !     KCTLX | 0x800 | 0x87, NULL,                 "Sh-F11",
  1139. !     KCTLX | 0x800 | 0x88, NULL,                 "Sh-F12",
  1140. !     KCTLX | 0x800 | 0x5E, MSG_display_buffers,  "Ctl-F1",
  1141. !     KCTLX | 0x800 | 0x5F, MSG_use_buffer,       "Ctl-F2",
  1142. !     KCTLX | 0x800 | 0x60, MSG_kill_buffer,      "Ctl-F3",
  1143. !     KCTLX | 0x800 | 0x61, MSG_next_buff,        "Ctl-F4",
  1144. !     KCTLX | 0x800 | 0x62, MSG_prev_buff,        "Ctl-F5",
  1145. !     KCTLX | 0x800 | 0x63, MSG_yank_buffer,      "Ctl-F6",
  1146. !     KCTLX | 0x800 | 0x64, MSG_set_file_name,    "Ctl-F7",
  1147. !     KCTLX | 0x800 | 0x65, MSG_file_insert,      "Ctl-F8",
  1148. !     KCTLX | 0x800 | 0x66, MSG_exit_flush_all,   "Ctl-F9",
  1149. !     KCTLX | 0x800 | 0x67, MSG_quit,             "Ctl-F10",
  1150. !     KCTLX | 0x800 | 0x89, NULL,                 "Ctl-F11",
  1151. !     KCTLX | 0x800 | 0x8A, NULL,                 "Ctl-F12",
  1152. !     KCTLX | 0x800 | 0x68, NULL,                 "Alt-F1",
  1153. !     KCTLX | 0x800 | 0x69, NULL,                 "Alt-F2",
  1154. !     KCTLX | 0x800 | 0x6A, NULL,                 "Alt-F3",
  1155. !     KCTLX | 0x800 | 0x6B, NULL,                 "Alt-F4",
  1156. !     KCTLX | 0x800 | 0x6C, NULL,                 "Alt-F5",
  1157. !     KCTLX | 0x800 | 0x6D, NULL,                 "Alt-F6",
  1158. !     KCTLX | 0x800 | 0x6E, NULL,                 "Alt-F7",
  1159. !     KCTLX | 0x800 | 0x6F, NULL,                 "Alt-F8",
  1160. !     KCTLX | 0x800 | 0x70, NULL,                 "Alt-F9",
  1161. !     KCTLX | 0x800 | 0x71, NULL,                 "Alt-F10",
  1162. !     KCTLX | 0x800 | 0x8B, NULL,                 "Alt-F11",
  1163. !     KCTLX | 0x800 | 0x8C, NULL,                 "Alt-F12",
  1164. !     KCTLX | 0x800 | 0x48, MSG_back_line,        "North",
  1165. !     KCTLX | 0x800 | 0x4D, MSG_forw_char,        "East",
  1166. !     KCTLX | 0x800 | 0x50, MSG_forw_line,        "South",
  1167. !     KCTLX | 0x800 | 0x4B, MSG_back_char,        "West",
  1168. !     KCTLX | 0x800 | 0x8D, MSG_back_line,        "Ctl-North",
  1169. !     KCTLX | 0x800 | 0x74, MSG_forw_unit,        "Ctl-East",
  1170. !     KCTLX | 0x800 | 0x91, MSG_forw_line,        "Ctl-South",
  1171. !     KCTLX | 0x800 | 0x73, MSG_back_unit,        "Ctl-West",
  1172. !     KCTLX | 0x800 | 0x98, NULL,                 "Alt-North",
  1173. !     KCTLX | 0x800 | 0x9D, NULL,                 "Alt-East",
  1174. !     KCTLX | 0x800 | 0xA0, NULL,                 "Alt-South",
  1175. !     KCTLX | 0x800 | 0x9B, NULL,                 "Alt-West",
  1176. !     KCTLX | 0x800 | 0x49, MSG_back_page,        "PageDown",
  1177. !     KCTLX | 0x800 | 0x51, MSG_forw_page,        "PageUp",
  1178. !     KCTLX | 0x800 | 0x47, MSG_goto_bob,         "Home",
  1179. !     KCTLX | 0x800 | 0x4F, MSG_goto_eob,         "End",
  1180. !     KCTLX | 0x800 | 0x4C, NULL,                 "Center",
  1181. !     KCTLX | 0x800 | 0x76, MSG_forw_window,      "Ctl-PageDown",
  1182. !     KCTLX | 0x800 | 0x84, MSG_back_window,      "Ctl-PageUp",
  1183. !     KCTLX | 0x800 | 0x77, MSG_goto_bob,         "Ctl-Home",
  1184. !     KCTLX | 0x800 | 0x75, MSG_goto_eob,         "Ctl-End",
  1185. !     KCTLX | 0x800 | 0x8F, NULL,                 "Ctl-Center",
  1186. !     KCTLX | 0x800 | 0xA1, NULL,                 "Alt-PageDown",
  1187. !     KCTLX | 0x800 | 0x99, NULL,                 "Alt-PageUp",
  1188. !     KCTLX | 0x800 | 0x97, NULL,                 "Alt-Home",
  1189. !     KCTLX | 0x800 | 0x9F, NULL,                 "Alt-End",
  1190. !     KCTLX | 0x800 | 0x52, MSG_ins_toggle,       "Insert",
  1191. !     KCTLX | 0x800 | 0x53, MSG_forw_del_char,    "Delete",
  1192. !     KCTLX | 0x800 | 0x92, NULL,                 "Ctl-Insert",
  1193. !     KCTLX | 0x800 | 0x93, NULL,                 "Ctl-Delete",
  1194. !     KCTLX | 0x800 | 0xA2, NULL,                 "Alt-Insert",
  1195. !     KCTLX | 0x800 | 0xA3, NULL,                 "Alt-Delete",
  1196. !     KCTLX | 0x800 | 0x72, MSG_print,            "Ctl-Print",
  1197. !     KCTLX | 0x800 | 0x0F, NULL,                 "Sh-Tab",
  1198. !     KCTLX | 0x800 | 0x94, NULL,                 "Ctl-Tab",
  1199. !     KCTLX | 0x800 | 0xA5, NULL,                 "Alt-Tab",
  1200. !     KCTLX | 0x800 | 0x95, NULL,                 "Ctrl-Num/",
  1201. !     KCTLX | 0x800 | 0x96, NULL,                 "Ctrl-Num*",
  1202. !     KCTLX | 0x800 | 0x8E, NULL,                 "Ctrl-Num-",
  1203. !     KCTLX | 0x800 | 0x90, NULL,                 "Ctrl-Num+",
  1204. !     KCTLX | 0x800 | 0xA4, NULL,                 "Alt-Num/",
  1205. !     KCTLX | 0x800 | 0x37, NULL,                 "Alt-Num*",
  1206. !     KCTLX | 0x800 | 0x4A, NULL,                 "Alt-Num-",
  1207. !     KCTLX | 0x800 | 0x4E, NULL,                 "Alt-Num+",
  1208. !     KCTLX | 0x800 | 0xA6, NULL,                 "Alt-NumEnter",
  1209. !     KCTLX | 0x800 | 0x01, NULL,                 "Alt-Esc",
  1210. !     KCTLX | 0x800 | 0x1C, NULL,                 "Alt-Enter",
  1211. !     KCTLX | 0x800 | 0x0E, NULL,                 "Alt-Backspace",
  1212. !     KCTLX | 0x800 | 0x1E, NULL,                 "Alt-A",
  1213. !     KCTLX | 0x800 | 0x30, NULL,                 "Alt-B",
  1214. !     KCTLX | 0x800 | 0x2E, NULL,                 "Alt-C",
  1215. !     KCTLX | 0x800 | 0x20, NULL,                 "Alt-D",
  1216. !     KCTLX | 0x800 | 0x12, NULL,                 "Alt-E",
  1217. !     KCTLX | 0x800 | 0x21, NULL,                 "Alt-F",
  1218. !     KCTLX | 0x800 | 0x22, NULL,                 "Alt-G",
  1219. !     KCTLX | 0x800 | 0x23, NULL,                 "Alt-H",
  1220. !     KCTLX | 0x800 | 0x17, NULL,                 "Alt-I",
  1221. !     KCTLX | 0x800 | 0x24, NULL,                 "Alt-J",
  1222. !     KCTLX | 0x800 | 0x25, NULL,                 "Alt-K",
  1223. !     KCTLX | 0x800 | 0x26, NULL,                 "Alt-L",
  1224. !     KCTLX | 0x800 | 0x32, NULL,                 "Alt-M",
  1225. !     KCTLX | 0x800 | 0x31, NULL,                 "Alt-N",
  1226. !     KCTLX | 0x800 | 0x18, NULL,                 "Alt-O",
  1227. !     KCTLX | 0x800 | 0x19, NULL,                 "Alt-P",
  1228. !     KCTLX | 0x800 | 0x10, NULL,                 "Alt-Q",
  1229. !     KCTLX | 0x800 | 0x13, NULL,                 "Alt-R",
  1230. !     KCTLX | 0x800 | 0x1F, NULL,                 "Alt-S",
  1231. !     KCTLX | 0x800 | 0x14, NULL,                 "Alt-T",
  1232. !     KCTLX | 0x800 | 0x16, NULL,                 "Alt-U",
  1233. !     KCTLX | 0x800 | 0x2F, NULL,                 "Alt-V",
  1234. !     KCTLX | 0x800 | 0x11, NULL,                 "Alt-W",
  1235. !     KCTLX | 0x800 | 0x2D, NULL,                 "Alt-X",
  1236. !     KCTLX | 0x800 | 0x15, NULL,                 "Alt-Y",
  1237. !     KCTLX | 0x800 | 0x2C, NULL,                 "Alt-Z",
  1238. !     KCTLX | 0x800 | 0x78, NULL,                 "Alt-1",
  1239. !     KCTLX | 0x800 | 0x79, NULL,                 "Alt-2",
  1240. !     KCTLX | 0x800 | 0x7A, NULL,                 "Alt-3",
  1241. !     KCTLX | 0x800 | 0x7B, NULL,                 "Alt-4",
  1242. !     KCTLX | 0x800 | 0x7C, NULL,                 "Alt-5",
  1243. !     KCTLX | 0x800 | 0x7D, NULL,                 "Alt-6",
  1244. !     KCTLX | 0x800 | 0x7E, NULL,                 "Alt-7",
  1245. !     KCTLX | 0x800 | 0x7F, NULL,                 "Alt-8",
  1246. !     KCTLX | 0x800 | 0x80, NULL,                 "Alt-9",
  1247. !     KCTLX | 0x800 | 0x81, NULL,                 "Alt-0",
  1248.       0, NULL, NULL
  1249.   };
  1250. ***************
  1251. *** 280,287 ****
  1252.       return (c | KCTRL);
  1253.       }
  1254. !     if (c == 0)
  1255.       {
  1256.       c = ttgetc ();
  1257. !     return (c | 0x80 | KCTLX);
  1258.       }
  1259.       return (c);
  1260. --- 368,375 ----
  1261.       return (c | KCTRL);
  1262.       }
  1263. !     if (c == 0 || c == 0xE0)
  1264.       {
  1265.       c = ttgetc ();
  1266. !     return (c | 0x800 | KCTLX);
  1267.       }
  1268.       return (c);
  1269. ***************
  1270. *** 298,302 ****
  1271.   ttykeymapinit ()
  1272.   {
  1273. ! #if MSDOS
  1274.       KEY_NAME_ARRAY *ptr;
  1275.       int i;
  1276. --- 386,390 ----
  1277.   ttykeymapinit ()
  1278.   {
  1279. ! #ifdef MSDOS
  1280.       KEY_NAME_ARRAY *ptr;
  1281.       int i;
  1282. ***************
  1283. *** 322,325 ****
  1284. --- 410,429 ----
  1285.       writ_echo (buf);
  1286.   #endif
  1287. + #ifdef OS2
  1288. +     KEY_NAME_ARRAY  *ptr;
  1289. +     int i;
  1290. +     char buf[NCOL];
  1291. +     ptr = ibm_keys;
  1292. +     i = 0;
  1293. +     while (ptr -> key_code != 0)
  1294. +     {
  1295. +       if (ptr -> func_name_str != NULL)
  1296. +     keydup (ptr -> key_code, ptr -> func_name_str);
  1297. +       ptr++;
  1298. +       i++;
  1299. +     }
  1300. +  /* sprintf (buf, MSG_sp_key, i);
  1301. +     writ_echo (buf); */
  1302. + #endif
  1303.   }
  1304.   
  1305. ***************
  1306. *** 332,336 ****
  1307.       int key;
  1308.   {
  1309. ! #if MSDOS
  1310.       KEY_NAME_ARRAY *ptr;
  1311.   
  1312. --- 436,440 ----
  1313.       int key;
  1314.   {
  1315. ! #ifdef MSDOS
  1316.       KEY_NAME_ARRAY *ptr;
  1317.   
  1318. ***************
  1319. *** 343,346 ****
  1320. --- 447,462 ----
  1321.       if (!wang_pc && !ibm_pc)
  1322.       return (NULL);
  1323. +     while (ptr->key_code != 0)
  1324. +     {
  1325. +     if (key == ptr->key_code)
  1326. +     {
  1327. +         return (ptr->key_name_str);
  1328. +     }
  1329. +     ptr++;
  1330. +     }
  1331. + #endif
  1332. + #ifdef OS2
  1333. +     KEY_NAME_ARRAY  *ptr = ibm_keys;
  1334.   
  1335.       while (ptr->key_code != 0)
  1336.