diff -cb orig/basic.c new/basic.c *** orig/basic.c Fri Nov 22 19:03:22 1991 --- new/basic.c Mon Jan 06 15:28:10 1992 *************** *** 35,41 **** * the beginning of the buffer. */ bool backchar (f, n, k) ! register int n; { if (n < 0) return (forwchar (f, -n, KRANDOM)); --- 35,41 ---- * the beginning of the buffer. */ bool backchar (f, n, k) ! register int f, n, k; { if (n < 0) return (forwchar (f, -n, KRANDOM)); *************** *** 68,74 **** * from the end of the buffer. */ bool forwchar (f, n, k) ! register int n; { if (n < 0) return (backchar (f, -n, KRANDOM)); --- 68,74 ---- * from the end of the buffer. */ bool forwchar (f, n, k) ! register int f, n, k; { if (n < 0) return (backchar (f, -n, KRANDOM)); *************** *** 309,314 **** --- 309,315 ---- * the goal column is set. */ bool forwline (f, n, k) + int f, n, k; { if (n < 0) return (backline (f, -n, KRANDOM)); *************** *** 338,343 **** --- 339,345 ---- * call "movedot" to perform the motion. */ bool backline (f, n, k) + int f, n, k; { if (n < 0) return (forwline (f, -n, KRANDOM)); *************** *** 366,372 **** * to same position on new page. */ bool forwpage (f, n, k) ! register int n; { long mov_lines; --- 368,374 ---- * to same position on new page. */ bool forwpage (f, n, k) ! register int f, n, k; { long mov_lines; *************** *** 403,409 **** * but it goes backwards. */ bool backpage (f, n, k) ! register int n; { long mov_lines; --- 405,411 ---- * but it goes backwards. */ bool backpage (f, n, k) ! register int f, n, k; { long mov_lines; *************** *** 490,495 **** --- 492,498 ---- * to use. */ bool gotoline (f, n, k) + int f, n, k; { A32 index; register int s; diff -cb orig/buffer.c new/buffer.c *** orig/buffer.c Fri Nov 22 19:03:20 1991 --- new/buffer.c Mon Jan 06 15:28:12 1992 *************** *** 503,508 **** --- 503,509 ---- */ BUFFER * bfind (bname, cflag) register char *bname; + int cflag; { register BUFFER * bp; diff -cb orig/def.h new/def.h *** orig/def.h Fri Nov 22 19:03:18 1991 --- new/def.h Mon Jan 06 15:28:12 1992 *************** *** 49,55 **** #define bool char /* used for boolean values */ #define bits char /* used for boolean bit flags */ ! /* this define is reserved for the byte location in the a LINE structure */ #define LPOS uint /* this is a 32 bit address into the buffer */ /* --- 49,55 ---- #define bool char /* used for boolean values */ #define bits char /* used for boolean bit flags */ ! /* this define is reserved for the byte location in a LINE structure */ #define LPOS uint /* this is a 32 bit address into the buffer */ /* *************** *** 87,92 **** --- 87,94 ---- #define ANSI 1 /* send ANSI escape codes */ #endif + #define NMAXROW 128 /* Rows.for boot */ + #define NMAXCOL 132 #ifdef UNIX #define NROW 100 #define NCOL 80 /* Columns. */ *************** *** 106,112 **** * Table sizes, etc. */ #define NSHASH 31 /* Symbol table hash size. */ ! #define NFILEN 80 /* Length, file name. */ #define NBUFN 13 /* Length, buffer name. */ #define NFILE 12 /* Length, file name. */ /* krw */ #define NKBDM 256 /* Length, keyboard macro. */ --- 108,114 ---- * Table sizes, etc. */ #define NSHASH 31 /* Symbol table hash size. */ ! #define NFILEN 256 /* Length, file name. */ #define NBUFN 13 /* Length, buffer name. */ #define NFILE 12 /* Length, file name. */ /* krw */ #define NKBDM 256 /* Length, keyboard macro. */ *************** *** 199,205 **** * between "getkey" and "getkbd" easier. The funny keys get * mapped into the C1 control area. */ ! #define NKEYS 2048 /* 11 bit code. */ #define METACH 0x1B /* M- prefix, Control-[, ESC */ #define CTMECH 0x1C /* C-M- prefix, Control-\ */ --- 201,207 ---- * between "getkey" and "getkbd" easier. The funny keys get * mapped into the C1 control area. */ ! #define NKEYS 4096 /* 12 bit code. */ #define METACH 0x1B /* M- prefix, Control-[, ESC */ #define CTMECH 0x1C /* C-M- prefix, Control-\ */ diff -cb orig/display.c new/display.c *** orig/display.c Fri Nov 22 19:03:16 1991 --- new/display.c Mon Jan 06 15:53:34 1992 *************** *** 99,105 **** short v_flag; /* Flag word. */ short v_color; /* Color of the line. */ XSHORT v_cost; /* Cost of display. */ ! char v_text[NCOL]; /* The actual characters. */ } VIDEO; #define VFCHG 0x0001 /* Changed. */ --- 99,105 ---- short v_flag; /* Flag word. */ short v_color; /* Color of the line. */ XSHORT v_cost; /* Cost of display. */ ! char v_text[NMAXCOL]; /* The actual characters. */ } VIDEO; #define VFCHG 0x0001 /* Changed. */ *************** *** 130,138 **** int ttbot = HUGE; /* Bottom of scroll region. */ char file_off_bad = FALSE; /* Have file offsets been changed */ ! VIDEO * vscreen[NROW]; /* Edge vector, virtual. */ ! VIDEO * pscreen[NROW]; /* Edge vector, physical. */ ! VIDEO video[2 * (NROW)]; /* Actual screen data. */ VIDEO blanks; /* Blank line image. */ /* --- 130,138 ---- int ttbot = HUGE; /* Bottom of scroll region. */ char file_off_bad = FALSE; /* Have file offsets been changed */ ! VIDEO * vscreen[NMAXROW]; /* Edge vector, virtual. */ ! VIDEO * pscreen[NMAXROW]; /* Edge vector, physical. */ ! VIDEO video[2 * (NMAXROW)]; /* Actual screen data. */ VIDEO blanks; /* Blank line image. */ /* *************** *** 154,160 **** ttopen (); ttinit (); vp = &video[0]; ! for (i = 0; i < NROW; ++i) { vscreen[i] = vp; ++vp; --- 154,160 ---- ttopen (); ttinit (); vp = &video[0]; ! for (i = 0; i < NMAXROW; ++i) { vscreen[i] = vp; ++vp; *************** *** 162,168 **** ++vp; } blanks.v_color = CTEXT; ! for (i = 0; i < NCOL; ++i) blanks.v_text[i] = ' '; } --- 162,168 ---- ++vp; } blanks.v_color = CTEXT; ! for (i = 0; i < NMAXCOL; ++i) blanks.v_text[i] = ' '; } *************** *** 192,197 **** --- 192,198 ---- * more efficient. No checking for errors. */ void vtmove (row, col) + int row, col; { vtrow = row; vtcol = col; *************** *** 221,227 **** if (ISCTRL (c) != FALSE) { vtputc ('^'); ! vtputc (c ^ 0x40); } else { --- 222,228 ---- if (ISCTRL (c) != FALSE) { vtputc ('^'); ! vtputc ((char) (c ^ 0x40)); } else { *************** *** 929,934 **** --- 930,936 ---- * reverse video works on most terminals. */ void uline (row, vvp, pvp) + int row; VIDEO * vvp; VIDEO * pvp; { diff -cb orig/echo.c new/echo.c *** orig/echo.c Fri Nov 22 19:03:26 1991 --- new/echo.c Mon Jan 06 15:28:16 1992 *************** *** 97,102 **** --- 97,103 ---- char eread (fp, buf, nbuf, flag, ap) char *fp; char *buf; + int nbuf, flag; char *ap; { *************** *** 194,199 **** --- 195,201 ---- quote_flag = 1; break; case (KCTRL | 'M'): /* Return, done. */ + case (KCTRL | 'J'): /* Linefeed, done. */ buf[cpos] = '\0'; if (kbdmip != NULL) { *************** *** 291,296 **** --- 293,299 ---- int getxtra (sp1, sp2, cpos) SYMBOL * sp1; SYMBOL * sp2; + int cpos; { register int i; diff -cb orig/extend.c new/extend.c *** orig/extend.c Fri Nov 22 19:03:22 1991 --- new/extend.c Mon Jan 06 15:29:44 1992 *************** *** 94,99 **** --- 94,100 ---- * Print an error if there is anything wrong. */ char extend (f, n, k) + int f, n, k; { register SYMBOL * sp; *************** *** 200,205 **** --- 201,207 ---- * "ins-self" are only displayed if there is an argument. */ char wallchart (f, n, k) + int f, n, k; { register char s; diff -cb orig/file.c new/file.c *** orig/file.c Fri Nov 22 19:03:16 1991 --- new/file.c Mon Jan 06 15:29:48 1992 *************** *** 12,17 **** --- 12,18 ---- bool writeout (); bool parse_f_name (); A32 ffseek (); + A32 file_len(); extern char MSG_rd_file[]; extern char MSG_trash[]; *************** *** 125,130 **** --- 126,132 ---- * file-vist with auto window split, and readonly (view-file) (jam) */ char file_visit (f, n, k) + int f, n, k; { char fname[NFILEN]; char s; diff -cb orig/fileio.c new/fileio.c *** orig/fileio.c Fri Nov 22 19:03:18 1991 --- new/fileio.c Mon Jan 06 15:59:34 1992 *************** *** 11,17 **** --- 11,20 ---- #include #include #include + #ifndef O_BINARY + #define O_BINARY 0 #endif + #endif #include "def.h" extern char MSG_cnt_wr[]; *************** *** 47,53 **** return (FIOSUC); #endif #ifdef UNIX ! if ((ffp = open (fn, O_RDONLY)) == -1)/* pvr */ return (FIOERR); ; return (FIOSUC); --- 50,56 ---- return (FIOSUC); #endif #ifdef UNIX ! if ((ffp = open (fn, O_RDONLY | O_BINARY)) == -1)/* pvr */ return (FIOERR); ; return (FIOSUC); *************** *** 105,110 **** --- 108,120 ---- } return (FIOSUC); #endif + #ifdef OS2 + if ((ffp = open (fn, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, + mode)) == -1)/* pvr */ + return (FIOERR); + ; + return (FIOSUC); + #else /* OS2 has UNIX set too */ #ifdef UNIX /* set perms as in original file 1.31 */ if ((ffp = open (fn, O_WRONLY | O_CREAT, mode)) == -1)/* pvr */ *************** *** 112,117 **** --- 122,128 ---- ; return (FIOSUC); #endif + #endif /* OS2 */ #ifdef AMIGA /* set perms as in original file 1.31 */ if ((ffp = open (fn, O_WRONLY | O_CREAT, mode)) == -1)/* pvr */ *************** *** 248,254 **** source = fname; backup = backname; while ((*source > 0) ! #ifdef MSDOS && (*source != '.')) #else ) --- 259,265 ---- source = fname; backup = backname; while ((*source > 0) ! #if defined(MSDOS) || defined(OS2) && (*source != '.')) #else ) diff -cb orig/kbd.c new/kbd.c *** orig/kbd.c Fri Nov 22 19:03:26 1991 --- new/kbd.c Mon Jan 06 15:29:50 1992 *************** *** 115,121 **** return; } #endif ! if (k & 0x80) { if ((np = keystrings (k)) != NULL) { --- 115,121 ---- return; } #endif ! if (k & 0x800) { if ((np = keystrings (k)) != NULL) { diff -cb orig/line.c new/line.c *** orig/line.c Fri Nov 22 19:03:20 1991 --- new/line.c Mon Jan 06 15:29:52 1992 *************** *** 229,234 **** --- 229,235 ---- * if all is well, and FALSE on errors. */ bool linsert (n, c) + int n; uchar c; { register D8 *cp1; *************** *** 335,340 **** --- 336,342 ---- */ bool ldelete (n_bytes, kflag) A32 n_bytes; + int kflag; { register LINE *dotp, *lp, *lp_prev, *lp_next; register LPOS doto, l_cnt; *************** *** 402,408 **** { /* wholesale delete by moving lines to save buffer */ if (doto != 0) { ! if ((lp = l_break_in_two (dotp, doto, 0l)) == NULL) return (FALSE); } else --- 404,410 ---- { /* wholesale delete by moving lines to save buffer */ if (doto != 0) { ! if ((lp = l_break_in_two (dotp, doto, 0)) == NULL) return (FALSE); } else *************** *** 417,423 **** if (n_byt < lp -> l_used) { /* get last piece of a line */ ! lp_next = l_break_in_two (lp, n_byt, 0l); } n_byt -= lp -> l_used; if (kflag) --- 419,425 ---- if (n_byt < lp -> l_used) { /* get last piece of a line */ ! lp_next = l_break_in_two (lp, (LPOS) n_byt, 0); } n_byt -= lp -> l_used; if (kflag) *************** *** 546,552 **** } else if (plen < rlen) { ! if (linsert (rlen - plen, ' ') == FALSE) return (FALSE); } curwp -> w_doto = doto; --- 548,554 ---- } else if (plen < rlen) { ! if (linsert (rlen - plen, (uchar) ' ') == FALSE) return (FALSE); } curwp -> w_doto = doto; diff -cb orig/main.c new/main.c *** orig/main.c Fri Nov 22 19:03:22 1991 --- new/main.c Mon Jan 06 15:36:54 1992 *************** *** 48,53 **** --- 48,56 ---- extern char MSG_ok[]; extern char MSG_main[]; extern char MSG_prog_name[]; + extern char MSG_init_file[]; + extern char MSG_init_var[]; + extern char MSG_init_path[]; extern char MSG_no_mod[]; extern char MSG_no_s_chg[]; extern char MSG_auto_fl[]; *************** *** 92,97 **** --- 95,101 ---- int auto_update = 0; void main (argc, argv) + int argc; char *argv[]; { *************** *** 100,105 **** --- 104,110 ---- register int n; register int mflag; char bname[NBUFN]; + char initfile[NFILEN]; #if MSDOS is_wang (); /* Check for computer type */ *************** *** 144,150 **** --- 149,169 ---- initial_load = 0; } + #ifdef OS2 + _searchenv(MSG_init_file, MSG_init_var, initfile); + if ( initfile[0] ) + check_extend (initfile); + else + { + _searchenv(MSG_init_file, MSG_init_path, initfile); + if ( initfile[0] ) + check_extend (initfile); + else + check_extend (getenv (MSG_prog_name)); + } + #else check_extend (NULL); /* check for extended keys */ + #endif save_buf_init(); /* initialize save buffer */ lastflag = 0; /* Fake last flags. */ *************** *** 211,216 **** --- 230,236 ---- * entry now). Also fiddle with the flags. */ char execute (c, f, n) + int c, f, n; { register SYMBOL * sp; *************** *** 328,333 **** --- 348,354 ---- * and quit */ bool flushnquit (f, n, k) + int f, n, k; { flush_all (); quit (f, n, k); *************** *** 342,347 **** --- 363,369 ---- * to "C-X C-C". */ char quit (f, n, k) + int f, n, k; { register char s; *************** *** 366,371 **** --- 388,394 ---- * variables and return. */ bool ctlxlp (f, n, k) + int f, n, k; { if (kbdmip != NULL || kbdmop != NULL) *************** *** 388,393 **** --- 411,417 ---- * and return to the caller. */ bool ctlxrp (f, n, k) + int f, n, k; { if (kbdmip == NULL) *************** *** 412,417 **** --- 436,442 ---- * FALSE. */ bool ctlxe (f, n, k) + int f, n, k; { register int c; *************** *** 463,468 **** --- 488,494 ---- * stuff. */ char ctrlg (f, n, k) + int f, n, k; { /* ttbeep (); */ if (kbdmip != NULL) *************** *** 481,486 **** --- 507,513 ---- * Don't call display if there is an argument. */ char showversion (f, n, k) + int f, n, k; { static char *cp; char buf[NCOL]; diff -cb orig/random.c new/random.c *** orig/random.c Fri Nov 22 19:03:20 1991 --- new/random.c Mon Jan 06 15:37:52 1992 *************** *** 76,81 **** --- 76,82 ---- * This is normally bound to "C-X =". */ bool showcpos (f, n, k) + int f, n, k; { A32 dotoff, *************** *** 192,197 **** --- 193,199 ---- * regularity. */ bool quote (f, n, k) + int f, n, k; { register int c; *************** *** 218,224 **** if (n == 0) return (TRUE); ! return (linsert (n, c)); } /* --- 220,226 ---- if (n == 0) return (TRUE); ! return (linsert (n, (uchar) c)); } /* *************** *** 254,259 **** --- 256,262 ---- */ bool selfinsert (f, n, k) + int f, n, k; { register int c; *************** *** 302,317 **** switch (curwp -> w_fmt_ptr -> r_type) { case EBCDIC: ! c = to_ebcdic (c); /* convert ASCII to EBCDIC */ case ASCII: if ((insert_mode) || (DOT_POS(curwp) == BUF_SIZE(curwp))) { ! linsert (n, c); if (read_pat_mode) forwchar (0, 1, KRANDOM);/* advance the cursor */ } else ! lreplace (n, c); break; case HEX: --- 305,320 ---- switch (curwp -> w_fmt_ptr -> r_type) { case EBCDIC: ! c = to_ebcdic ((char) c); /* convert ASCII to EBCDIC */ case ASCII: if ((insert_mode) || (DOT_POS(curwp) == BUF_SIZE(curwp))) { ! linsert (n, (uchar) c); if (read_pat_mode) forwchar (0, 1, KRANDOM);/* advance the cursor */ } else ! lreplace (n, (char) c); break; case HEX: *************** *** 494,500 **** { case BYTES: sprintf (text_buf, MSG_03u, (int) (edt_buf[0] & 0xff)); ! if (!dec_chr_ok (text_buf, max_dec_8, c, u_offs)) { bad_key (k); return (TRUE); /* TRUE so that mask will be same len */ --- 497,503 ---- { case BYTES: sprintf (text_buf, MSG_03u, (int) (edt_buf[0] & 0xff)); ! if (!dec_chr_ok (text_buf, max_dec_8, (char) c, u_offs)) { bad_key (k); return (TRUE); /* TRUE so that mask will be same len */ *************** *** 506,512 **** case WORDS: l_val = get_int (edt_buf);/* do intel swap */ sprintf (text_buf, MSG_05u, (int) (l_val & 0xFFFF)); ! if (!dec_chr_ok (text_buf, max_dec_16, c, u_offs)) { bad_key (k); return (TRUE); /* TRUE so that mask will be same len */ --- 509,515 ---- case WORDS: l_val = get_int (edt_buf);/* do intel swap */ sprintf (text_buf, MSG_05u, (int) (l_val & 0xFFFF)); ! if (!dec_chr_ok (text_buf, max_dec_16, (char) c, u_offs)) { bad_key (k); return (TRUE); /* TRUE so that mask will be same len */ *************** *** 519,525 **** case DWORDS: l_val = get_long (edt_buf);/* do intel swap */ sprintf (text_buf, MSG_010lu, l_val); ! if (!dec_chr_ok (text_buf, max_dec_32, c, u_offs)) { bad_key (k); return (TRUE); /* TRUE so that mask will be same len */ --- 522,528 ---- case DWORDS: l_val = get_long (edt_buf);/* do intel swap */ sprintf (text_buf, MSG_010lu, l_val); ! if (!dec_chr_ok (text_buf, max_dec_32, (char) c, u_offs)) { bad_key (k); return (TRUE); /* TRUE so that mask will be same len */ *************** *** 568,573 **** --- 571,577 ---- * Insert one unit of zeros at the current dot position. */ bool insertunit (f, n, k) + int f, n, k; { lchange (WFEDIT); linsert ((R_B_PER_U(curwp) * n), 0); *************** *** 629,640 **** */ char dec_chr_ok (char_buf, max_str, chr, pos) ! ! char chr, ! pos, ! *char_buf, ! *max_str; ! { char i; --- 633,640 ---- */ char dec_chr_ok (char_buf, max_str, chr, pos) ! char chr, pos; ! char *char_buf, *max_str; { char i; *************** *** 812,817 **** --- 812,818 ---- * from the correct offset. */ bool dispshift (f, n, k) + int f, n, k; { char mode, size; *************** *** 865,870 **** --- 866,872 ---- * Normally bound to "C-D". */ char forwdel (f, n, k) + int f, n, k; { char s; *************** *** 896,901 **** --- 898,904 ---- * if presented with an argument. */ char backdel (f, n, k) + int f, n, k; { int u_off; *************** *** 1064,1069 **** --- 1067,1073 ---- * in the way that the INTEL microprocessors do it. */ bool dispswapbyte (f, n, k) + int f, n, k; { if ((curwp -> w_fmt_ptr -> r_size) == BYTES) return (TRUE); *************** *** 1089,1094 **** --- 1093,1099 ---- * text landed off screen). */ bool yank (f, n, k) + int f, n, k; { register D16 c; register A32 i; *************** *** 1102,1108 **** save_buf_home (); while ((c = get_save_char ()) != (D16)-1) { ! if (linsert (1, c) == FALSE) return (FALSE); if ((i & 0x2ff) == 0) { --- 1107,1113 ---- save_buf_home (); while ((c = get_save_char ()) != (D16)-1) { ! if (linsert (1, (uchar) c) == FALSE) return (FALSE); if ((i & 0x2ff) == 0) { *************** *** 1179,1184 **** --- 1184,1190 ---- * image files from odd and even bytes into one file. */ bool n_way_combine (f, n, k) + int f, n, k; { WINDOW * dest_wp, *src_wp; BUFFER *src_bp; *************** *** 1264,1269 **** --- 1270,1276 ---- * image files. */ bool n_way_split (f, n, k) + int f, n, k; { WINDOW *src_wp; A32 b_size; *************** *** 1355,1357 **** --- 1362,1365 ---- nextwind(); } while (wp != curwp); } + diff -cb orig/region.c new/region.c *** orig/region.c Fri Nov 22 19:03:26 1991 --- new/region.c Mon Jan 06 15:30:00 1992 *************** *** 23,28 **** --- 23,29 ---- * Move "." to the start, and kill the characters. */ char killregion (f, n, k) + int f, n, k; { register char s; REGION region; *************** *** 52,57 **** --- 53,59 ---- * by a yank. */ char copyregion (f, n, k) + int f, n, k; { register LINE * linep; register int loffs, j; *************** *** 69,75 **** loffs = region.r_offset; /* Current offset. */ while (region.r_size--) { ! if ((s = b_append_c (&sav_buf, lgetc (linep, loffs))) != TRUE) return (s); ++loffs; if ((j++ & 0x2ff) == 0) --- 71,77 ---- loffs = region.r_offset; /* Current offset. */ while (region.r_size--) { ! if ((s = b_append_c (&sav_buf, (uchar) lgetc (linep, loffs))) != TRUE) return (s); ++loffs; if ((j++ & 0x2ff) == 0) *************** *** 140,145 **** --- 142,148 ---- * and doesn't do clever things at all with dot in destination buffer! */ char save_region (f, n, k) + int f, n, k; { char bufn[NBUFN]; char oldbufn[NBUFN]; diff -cb orig/search.c new/search.c *** orig/search.c Fri Nov 22 19:03:18 1991 --- new/search.c Mon Jan 06 15:30:02 1992 *************** *** 230,235 **** --- 230,236 ---- * (note typical hack to add a function with minimal code) */ char queryrepl (f, n, k) + int f, n, k; { register char s; *************** *** 645,651 **** cod = getkey (); ! if (cod == 0x014D) /* check for return */ { if ((rplc_mode == TRUE) && (cur_prompt == MSG_sch_str)) { --- 646,652 ---- cod = getkey (); ! if (cod == 0x014D || cod == 0x014A) /* check for return or linefeed */ { if ((rplc_mode == TRUE) && (cur_prompt == MSG_sch_str)) { diff -cb orig/spawn.c new/spawn.c *** orig/spawn.c Fri Nov 22 19:03:20 1991 --- new/spawn.c Mon Jan 06 15:39:46 1992 *************** *** 3,8 **** --- 3,12 ---- */ #include "def.h" + #ifdef OS2 + #define MSDOS 1 + #endif + extern char MSG_shell[]; extern char MSG_def_shell[]; extern char MSG_pmpt[]; *************** *** 11,17 **** extern char MSG_null[]; /* #include */ ! #if MSDOS #include "process.h" #endif char *cspec = NULL; /* Command string. */ --- 15,21 ---- extern char MSG_null[]; /* #include */ ! #ifdef MSDOS #include "process.h" #endif char *cspec = NULL; /* Command string. */ *************** *** 24,40 **** * garbage so that you do a full repaint. */ bool spawncli (f, n, k) { ! #if MSDOS char *getenv (); char old_prompt[NCOL]; char prompt_line[NCOL]; ttcolor (CTEXT); /* Normal color. */ ttmove (nrow - 1, 0); /* Last line. */ ttflush (); ttcooked (); #ifndef IBM strcpy (prompt_line, MSG_pmpt); pspec = getenv (MSG_pt); --- 28,48 ---- * garbage so that you do a full repaint. */ bool spawncli (f, n, k) + int f, n, k; { ! #ifdef MSDOS char *getenv (); + #ifndef OS2 char old_prompt[NCOL]; char prompt_line[NCOL]; + #endif ttcolor (CTEXT); /* Normal color. */ ttmove (nrow - 1, 0); /* Last line. */ ttflush (); ttcooked (); + #ifndef OS2 #ifndef IBM strcpy (prompt_line, MSG_pmpt); pspec = getenv (MSG_pt); *************** *** 51,62 **** --- 59,73 ---- exit (1); #endif + #endif if (!cspec && !(cspec = getenv (MSG_shell)))/* jam */ cspec = MSG_def_shell; spawnl (P_WAIT, cspec, MSG_null, NULL); + #ifndef OS2 putenv (MSG_pme); if (putenv (old_prompt) == -1) exit (1); + #endif ttraw (); sgarbf = TRUE; #endif diff -cb orig/symbol.c new/symbol.c *** orig/symbol.c Fri Nov 22 19:03:20 1991 --- new/symbol.c Mon Jan 06 15:30:04 1992 *************** *** 426,432 **** for (i = 0; i < NKEYS; ++i) binding[i] = NULL; for (kp = &key[0]; kp < &key[NKEY]; ++kp) ! keyadd (kp -> k_key, kp -> k_funcp, kp -> k_name, kp -> k_modify); keydup (KCTLX | KCTRL | 'G', MSG_abort); keydup (KMETA | KCTRL | 'G', MSG_abort); keydup (0x7F, MSG_back_del_char); --- 428,434 ---- for (i = 0; i < NKEYS; ++i) binding[i] = NULL; for (kp = &key[0]; kp < &key[NKEY]; ++kp) ! keyadd (kp -> k_key, (bool (*)()) kp -> k_funcp, kp -> k_name, kp -> k_modify); keydup (KCTLX | KCTRL | 'G', MSG_abort); keydup (KMETA | KCTRL | 'G', MSG_abort); keydup (0x7F, MSG_back_del_char); *************** *** 455,460 **** --- 457,463 ---- * are fatal. */ void keyadd (new, funcp, name, modify) + int new, modify; bool (*funcp) (); char *name; { diff -cb orig/tcap.c new/tcap.c *** orig/tcap.c Fri Nov 22 19:03:26 1991 --- new/tcap.c Mon Jan 06 15:41:22 1992 *************** *** 6,11 **** --- 6,17 ---- #ifdef UNIX + #ifdef OS2 + #define INCL_NOPM + #define INCL_VIO + #include + #endif + #define MARGIN 8 #define SCRSIZ 64 #define NPAUSE 10 /* # times thru update to pause */ *************** *** 19,25 **** void putpad(); #endif ! #ifdef COLOR extern int tcapfcol(); extern int tcapbcol(); #endif --- 25,31 ---- void putpad(); #endif ! #ifdef USECOLOR extern int tcapfcol(); extern int tcapbcol(); #endif *************** *** 26,32 **** #define TCAPSLEN 315 char tcapbuf[TCAPSLEN]; ! char *UP, PC, *CM, *CE, *CL, *SO, *SE; #ifdef BSD #include --- 32,38 ---- #define TCAPSLEN 315 char tcapbuf[TCAPSLEN]; ! char *UP, PC, *CM, *CE, *CL, *SO, *SE, *TI, *TE; #ifdef BSD #include *************** *** 55,63 **** --- 61,73 ---- if ((tv_stype = getenv("TERM")) == NULL) { + #ifndef OS2 puts("Environment variable TERM not defined!\r"); ttclose(); exit(1); + #else + tv_stype = "ansi"; + #endif } if ((tgetent(tcbuf, tv_stype)) != 1) *************** *** 83,88 **** --- 93,99 ---- else #endif /* ULTRIX */ #endif /* BSD */ + #ifndef OS2 if ((nrow=(short)tgetnum("li")-1) == -1){ puts("termcap entry incomplete (lines)\r"); ttclose(); /* fix in 1.13 */ *************** *** 90,96 **** } printf ("nrow %d, ncol %d\n", nrow, ncol); /* don't allow to specify a larger number of rows than we can handle 1.13 */ ! if (nrow > NROW) nrow = NROW; if ((ncol=(short)tgetnum("co")) == -1){ --- 101,107 ---- } printf ("nrow %d, ncol %d\n", nrow, ncol); /* don't allow to specify a larger number of rows than we can handle 1.13 */ ! if (nrow > NMAXROW) nrow = NROW; if ((ncol=(short)tgetnum("co")) == -1){ *************** *** 99,112 **** exit(1); } /* don't allow to specify a larger number of cols than we can handle 1.13 */ ! if (ncol > NCOL) ncol = NCOL; p = tcapbuf; t = tgetstr("pc", &p); if(t) PC = *t; CL = tgetstr("cl", &p); CM = tgetstr("cm", &p); CE = tgetstr("ce", &p); --- 110,135 ---- exit(1); } /* don't allow to specify a larger number of cols than we can handle 1.13 */ ! if (ncol > NMAXCOL) ncol = NCOL; + #else + { + VIOMODEINFO viomi; + viomi.cb = sizeof(viomi); + VioGetMode(&viomi, 0); + nrow = viomi.row; + ncol = viomi.col; + } + #endif + p = tcapbuf; t = tgetstr("pc", &p); if(t) PC = *t; + TI = tgetstr("ti", &p); + TE = tgetstr("te", &p); CL = tgetstr("cl", &p); CM = tgetstr("cm", &p); CE = tgetstr("ce", &p); *************** *** 145,150 **** --- 168,179 ---- putpad(CL); } + void tcapinit(init) + int init; + { + putpad(init ? TI : TE); + } + void tcaprev(state) /* change reverse video status */ int state; /* FALSE = normal video, TRUE = reverse video */ *************** *** 159,164 **** --- 188,194 ---- void putnpad(str, n) char *str; + int n; { tputs(str, n, ttputc); } diff -cb orig/termio.c new/termio.c *** orig/termio.c Fri Nov 22 19:03:24 1991 --- new/termio.c Mon Jan 06 15:51:50 1992 *************** *** 13,19 **** --- 13,32 ---- #ifdef BSD #include #else + #ifdef OS2 + #define INCL_NOPM + #define INCL_DOS + #define INCL_KBD + #include + #include + #else + #ifdef MINIX + #include + #define O_NDELAY O_NONBLOCK + #else #include + #endif /* MINIX */ + #endif /* OS2 */ #endif /* BSD */ #include #include *************** *** 27,36 **** --- 40,62 ---- struct sgttyb otermb; struct sgttyb ntermb; #else + #ifdef OS2 + KBDINFO kbst, kbst_std; + #else + #ifdef MINIX + struct sgttyb otermio; /* original terminal characteristics */ + struct sgttyb ntermio; /* charactoristics to use inside */ + struct tchars tchars, tcharsorig; + #else struct termio otermio; /* original terminal characteristics */ struct termio ntermio; /* charactoristics to use inside */ + #endif /* MINIX */ + #endif /* OS2 */ #endif /* BSD */ + + #ifndef OS2 extern errno; /* System error number -- Necessary when compiling in BSD 1.13 */ + #endif int nrow; /* Terminal size, rows. */ int ncol; /* Terminal size, columns. */ *************** *** 75,80 **** --- 101,121 ---- ncol = NCOL; } #else + #ifdef OS2 + setmode(1, O_BINARY); + #else + #ifdef MINIX + ioctl(0, TIOCGETP, &otermio); + ntermio = otermio; + ntermio.sg_flags &= ~ECHO; + ntermio.sg_flags |= RAW; + ioctl(0, TIOCSETP, &ntermio); + ioctl(0, TIOCGETC, &tcharsorig); + tchars = tcharsorig; + tchars.t_intrc = tchars.t_quitc = tchars.t_startc = + tchars.t_stopc = tchars.t_eofc = tchars.t_brkc = -1; + ioctl(0, TIOCSETC, &tchars); + #else ioctl(0, TCGETA, &otermio); /* save old settings */ ntermio.c_iflag = 0; /* setup new settings */ ntermio.c_oflag = 0; *************** *** 84,91 **** --- 125,134 ---- ntermio.c_cc[VMIN] = 1; ntermio.c_cc[VTIME] = 0; ioctl(0, TCSETAW, &ntermio); /* and activate them */ + #endif /* MINIX */ kbdflgs = fcntl( 0, F_GETFL, 0 ); kbdpoll = FALSE; + #endif /* OS2 */ /* on all screens we are not sure of the initial position of the cursor */ ttrow = 999; *************** *** 92,99 **** ttcol = 999; nrow = NROW; ncol = NCOL; ! #endif ! } /* * This function gets called just before we go back home to the command --- 135,142 ---- ttcol = 999; nrow = NROW; ncol = NCOL; ! #endif /* BSD */ ! } /* * This function gets called just before we go back home to the command *************** *** 100,118 **** * interpreter. On VMS it puts the terminal back in a reasonable state. * Another no-operation on CPM. */ ! void ttclose() ! { #ifdef BSD if (ioctl(0, TIOCSETP, &otermb) == -1) /* restore terminal settings */ printf ("closing ioctl on dev 0 failure, error = %d\n", errno); #else if (ioctl(0, TCSETAW, &otermio) == -1) /* restore terminal settings */ printf ("closing ioctl on dev 0 failure, error = %d\n", errno); if (fcntl(0, F_SETFL, kbdflgs) == -1) printf ("closing fcntl on dev 0 failure, error = %d\n", errno); ! #endif ! } /* * Write a character to the display. On VMS, terminal output is buffered, and --- 143,195 ---- * interpreter. On VMS it puts the terminal back in a reasonable state. * Another no-operation on CPM. */ ! void ttclose() ! { #ifdef BSD if (ioctl(0, TIOCSETP, &otermb) == -1) /* restore terminal settings */ printf ("closing ioctl on dev 0 failure, error = %d\n", errno); #else + #ifdef OS2 + setmode(1, O_TEXT); + #else + #ifdef MINIX + if (ioctl(0, TIOCSETP, &otermio) == -1 || + ioctl(0, TIOCSETC, &tcharsorig) == -1 ) + printf ("closing ioctl on dev 0 failure, error = %d\n", errno); + #else if (ioctl(0, TCSETAW, &otermio) == -1) /* restore terminal settings */ printf ("closing ioctl on dev 0 failure, error = %d\n", errno); + #endif /* MINIX */ if (fcntl(0, F_SETFL, kbdflgs) == -1) printf ("closing fcntl on dev 0 failure, error = %d\n", errno); ! #endif /* OS2 */ ! #endif /* BSD */ ! } ! #ifdef OS2 ! void ttraw(void) ! { ! PFNSIGHANDLER oldhandler; ! USHORT oldact; ! ! DosSetSigHandler((PFNSIGHANDLER) NULL, &oldhandler, &oldact, ! SIGA_IGNORE, SIG_CTRLBREAK); ! DosSetSigHandler((PFNSIGHANDLER) NULL, &oldhandler, &oldact, ! SIGA_IGNORE, SIG_CTRLC); ! ! kbst_std.cb = sizeof(kbst_std); ! KbdGetStatus(&kbst_std, 0); ! kbst = kbst_std; ! kbst.fsMask &= ~(KEYBOARD_ECHO_ON | KEYBOARD_ASCII_MODE | KEYBOARD_SHIFT_REPORT); ! kbst.fsMask |= (KEYBOARD_ECHO_OFF | KEYBOARD_BINARY_MODE); ! KbdSetStatus(&kbst, 0); ! } ! ! void ttcooked(void) ! { ! KbdSetStatus(&kbst_std, 0); ! } ! #endif /* * Write a character to the display. On VMS, terminal output is buffered, and *************** *** 120,138 **** * On CPM terminal I/O unbuffered, so we just write the byte out. Ditto on * MS-DOS (use the very very raw console output routine). */ ! void ttputc(c) { ! fputc(c, stdout); } /* * Flush terminal buffer. Does real work where the terminal output is buffered * up. A no-operation on systems where byte at a time terminal I/O is done. */ ! void ttflush() { ! fflush(stdout); } /* * Read a character from the terminal, performing no editing and doing no echo --- 197,240 ---- * On CPM terminal I/O unbuffered, so we just write the byte out. Ditto on * MS-DOS (use the very very raw console output routine). */ ! ! #ifdef OS2 ! static int size = 0; ! static char buffer[2048]; ! #endif ! ! void ttputc(c) ! int c; ! { ! #ifdef OS2 ! if ( size == sizeof(buffer) ) { ! write(1, buffer, size); ! size = 0; } + buffer[size++] = c; + #else + fputc(c, stdout); + #endif + } + /* * Flush terminal buffer. Does real work where the terminal output is buffered * up. A no-operation on systems where byte at a time terminal I/O is done. */ ! void ttflush() ! { ! #ifdef OS2 ! if ( size ) { ! write(1, buffer, size); ! size = 0; } + #else + fflush(stdout); + #endif + } /* * Read a character from the terminal, performing no editing and doing no echo *************** *** 139,146 **** * at all. More complex in VMS that almost anyplace else, which figures. Very * simple on CPM, because the system can do exactly what you want. */ ! ttgetc() { if( kbdqp ) kbdqp = FALSE; else --- 241,272 ---- * at all. More complex in VMS that almost anyplace else, which figures. Very * simple on CPM, because the system can do exactly what you want. */ ! ttgetc() ! { ! #ifdef OS2 ! static int ext, scan; ! KBDKEYINFO ki; ! ! if ( ext ) ! { ! ext = 0; ! return scan; ! } ! else { + ttflush(); + KbdCharIn(&ki, IO_WAIT, 0); + + if ( ki.chChar == 0 || ki.chChar == 0xE0 ) + { + ext = 1; + scan = ki.chScan; + return 0xE0; + } + else + return ki.chChar; + } + #else if( kbdqp ) kbdqp = FALSE; else *************** *** 157,172 **** kbdpoll = FALSE; while (read(0, &kbdq, 1) != 1) ; ! #endif } return ( kbdq & 127 ); ! } ! /* typahead(): Check to see if any characters are already in the keyboard buffer */ ! ttkeyready () ! { if( !kbdqp ) { #ifdef BSD --- 283,305 ---- kbdpoll = FALSE; while (read(0, &kbdq, 1) != 1) ; ! #endif /* BSD */ } return ( kbdq & 127 ); ! #endif /* OS2 */ ! } ! /* typahead(): Check to see if any characters are already in the keyboard buffer */ ! ttkeyready () ! { ! #ifdef OS2 ! KBDKEYINFO ki; ! ! KbdPeek(&ki, 0); ! return (ki.fbStatus != 0); ! #else if( !kbdqp ) { #ifdef BSD *************** *** 177,189 **** kbdpoll = TRUE; /* fix in 1.13 */ kbdqp = TRUE; #else if( !kbdpoll && fcntl( 0, F_SETFL, kbdflgs | O_NDELAY ) < 0 ) return(FALSE); kbdpoll = TRUE; /* fix in 1.13 */ kbdqp = (1 == read( 0, &kbdq, 1 )); ! #endif } return ( kbdqp ); ! } #endif --- 310,328 ---- kbdpoll = TRUE; /* fix in 1.13 */ kbdqp = TRUE; #else + #ifdef X_MINIX + /* MINIX has non-blocking mode but it doesn't work !?!? */ + return FALSE; + #else if( !kbdpoll && fcntl( 0, F_SETFL, kbdflgs | O_NDELAY ) < 0 ) return(FALSE); kbdpoll = TRUE; /* fix in 1.13 */ kbdqp = (1 == read( 0, &kbdq, 1 )); ! #endif /* MINIX */ ! #endif /* BSD */ } return ( kbdqp ); ! #endif /* OS2 */ ! } #endif diff -cb orig/text.c new/text.c *** orig/text.c Fri Nov 22 19:03:16 1991 --- new/text.c Mon Jan 06 15:30:10 1992 *************** *** 8,16 **** char MSG_no_mark[] = "No mark in this window"; char MSG_go_b_n[] = "Goto byte number: "; char MSG_bad_num[] = "ERROR: Bad number"; ! char MSG_lX[] = "%lX"; ! char MSG_lO[] = "%lO"; ! char MSG_lD[] = "%lD"; /* in buffer.c */ char MSG_use_b[] = "Enter name of buffer to goto: "; --- 8,16 ---- char MSG_no_mark[] = "No mark in this window"; char MSG_go_b_n[] = "Goto byte number: "; char MSG_bad_num[] = "ERROR: Bad number"; ! char MSG_lX[] = "%lx"; ! char MSG_lO[] = "%lo"; ! char MSG_lD[] = "%ld"; /* in buffer.c */ char MSG_use_b[] = "Enter name of buffer to goto: "; *************** *** 50,55 **** --- 50,58 ---- char MSG_04X[] = "%04X"; char MSG_08lX[] = "%08lX"; char MSG_prog_name[] = "BEAV"; + char MSG_init_file[] = "beav.ini"; + char MSG_init_var[] = "INIT"; + char MSG_init_path[] = "PATH"; char MSG_disp_b_lst[]= " Buffer List "; char MSG_file[] = "File: "; char MSG_RO[] = " [RO]"; *************** *** 215,221 **** --- 218,228 ---- /* in spawn.c */ char MSG_shell[] = "COMSPEC"; + #ifndef OS2 char MSG_def_shell[] = "/command.com"; + #else + char MSG_def_shell[] = "c:/os2/cmd.exe"; + #endif char MSG_pmpt[] = "PROMPT=[BEAV]"; char MSG_pt[] = "PROMPT"; char MSG_pme[] = "PROMPT="; diff -cb orig/tty.c new/tty.c *** orig/tty.c Fri Nov 22 19:03:26 1991 --- new/tty.c Mon Jan 06 15:30:12 1992 *************** *** 13,20 **** void asciiparm (); void ttnowindow (); /* stub */ void ttcolor (); ! extern void tcapopen (); ! extern void tcapmove (); #ifdef MSDOS #include "dos.h" --- 13,20 ---- void asciiparm (); void ttnowindow (); /* stub */ void ttcolor (); ! int tcapopen (); ! int tcapmove (); #ifdef MSDOS #include "dos.h" *************** *** 41,48 **** --- 41,54 ---- #ifdef MSDOS ttraw (); #endif + #ifdef OS2 + ttraw (); + #endif #ifdef UNIX tcapopen(); + tcapinit(1); + tcapmove(0, 0); + tcapeeop(); #endif } *************** *** 55,60 **** --- 61,74 ---- #ifdef MSDOS ttcooked (); #endif + #ifdef OS2 + ttcooked (); + #endif + #ifdef UNIX + tcapinit(0); + tcapmove(0, 0); + tcapeeop(); + #endif } /* *************** *** 65,70 **** --- 79,85 ---- * location last time! */ void ttmove (row, col) + int row, col; { #ifdef MSDOS union REGS regs; diff -cb orig/ttykbd.c new/ttykbd.c *** orig/ttykbd.c Fri Nov 22 19:03:24 1991 --- new/ttykbd.c Mon Jan 06 15:56:08 1992 *************** *** 111,118 **** #endif /* * The keyboard's special characters, those things that are prefixed with ! * a 0x1F, are placed into the keyboard tables as KCTRL || 0x80 || x, for some ! * x, i.e. they have both the control and 0x80 bits set, so they won't conflict * with anything else on the keyboard. */ --- 111,118 ---- #endif /* * The keyboard's special characters, those things that are prefixed with ! * a 0x1F, are placed into the keyboard tables as KCTRL || 0x800 || x, for some ! * x, i.e. they have both the control and 0x800 bits set, so they won't conflict * with anything else on the keyboard. */ *************** *** 193,247 **** /* KCTRL | 0xF3, NULL, "Sh-Print", */ 0, NULL, NULL }; KEY_NAME_ARRAY ibm_keys[] = { ! KCTLX | 0x80 | 0x3B, MSG_display_bindings, "F1", ! KCTLX | 0x80 | 0x3C, MSG_set_mark, "F2", ! KCTLX | 0x80 | 0x3D, MSG_forw_search, "F3", ! KCTLX | 0x80 | 0x3E, MSG_search_again, "F4", ! KCTLX | 0x80 | 0x3F, MSG_query_replace, "F5", ! KCTLX | 0x80 | 0x40, MSG_yank, "F6", ! KCTLX | 0x80 | 0x41, MSG_copy_region, "F7", ! KCTLX | 0x80 | 0x42, MSG_kill_region, "F8", ! KCTLX | 0x80 | 0x43, MSG_goto_line, "F9", ! KCTLX | 0x80 | 0x44, MSG_abort, "F10", ! KCTLX | 0x80 | 0x54, MSG_help, "Sh-F1", ! KCTLX | 0x80 | 0x55, MSG_file_read, "Sh-F2", ! KCTLX | 0x80 | 0x56, MSG_file_save, "Sh-F3", ! KCTLX | 0x80 | 0x57, MSG_file_visit, "Sh-F4", ! KCTLX | 0x80 | 0x58, MSG_file_write, "Sh-F5", ! KCTLX | 0x80 | 0x59, MSG_flush_all, "Sh-F6", ! KCTLX | 0x80 | 0x5A, MSG_set_file_name, "Sh-F7", ! KCTLX | 0x80 | 0x5B, MSG_file_insert, "Sh-F8", ! KCTLX | 0x80 | 0x5C, MSG_exit_flush_all, "Sh-F9", ! KCTLX | 0x80 | 0x5D, MSG_quit, "Sh-F10", ! KCTLX | 0x80 | 0x5E, MSG_display_buffers, "Ctl-F1", ! KCTLX | 0x80 | 0x5F, MSG_use_buffer, "Ctl-F2", ! KCTLX | 0x80 | 0x60, MSG_kill_buffer, "Ctl-F3", ! KCTLX | 0x80 | 0x61, MSG_next_buff, "Ctl-F4", ! KCTLX | 0x80 | 0x62, MSG_prev_buff, "Ctl-F5", ! KCTLX | 0x80 | 0x63, MSG_yank_buffer, "Ctl-F6", ! KCTLX | 0x80 | 0x64, MSG_set_file_name, "Ctl-F7", ! KCTLX | 0x80 | 0x65, MSG_file_insert, "Ctl-F8", ! KCTLX | 0x80 | 0x66, MSG_exit_flush_all, "Ctl-F9", ! KCTLX | 0x80 | 0x67, MSG_quit, "Ctl-F10", ! KCTLX | 0x80 | 0x48, MSG_back_line, "North", ! KCTLX | 0x80 | 0x4D, MSG_forw_char, "East", ! KCTLX | 0x80 | 0x74, MSG_forw_unit, "Ctl-East", ! KCTLX | 0x80 | 0x50, MSG_forw_line, "South", ! KCTLX | 0x80 | 0x4B, MSG_back_char, "West", ! KCTLX | 0x80 | 0x73, MSG_back_unit, "Ctl-West", ! KCTLX | 0x80 | 0x49, MSG_back_page, "PageDown", ! KCTLX | 0x80 | 0x47, MSG_goto_bob, "Home", ! KCTLX | 0x80 | 0x51, MSG_forw_page, "PageUp", ! KCTLX | 0x80 | 0x4F, MSG_goto_eob, "End", ! KCTLX | 0x80 | 0x52, MSG_ins_toggle, "Insert", ! KCTLX | 0x80 | 0x53, MSG_forw_del_char, "Delete", ! KCTLX | 0x80 | 0x76, MSG_forw_window, "Ctl-PageDown", ! KCTLX | 0x80 | 0x84, MSG_back_window, "Ctl-PageUp", ! KCTLX | 0x80 | 0x72, MSG_print, "Ctl-Print", ! KCTLX | 0x80 | 0x0F, MSG_forw_unit, "Sh-Tab", 0, NULL, NULL }; #endif --- 193,335 ---- /* KCTRL | 0xF3, NULL, "Sh-Print", */ 0, NULL, NULL }; + #endif + #if defined(MSDOS) || defined(OS2) KEY_NAME_ARRAY ibm_keys[] = { ! KCTLX | 0x800 | 0x3B, MSG_display_bindings, "F1", ! KCTLX | 0x800 | 0x3C, MSG_set_mark, "F2", ! KCTLX | 0x800 | 0x3D, MSG_forw_search, "F3", ! KCTLX | 0x800 | 0x3E, MSG_search_again, "F4", ! KCTLX | 0x800 | 0x3F, MSG_query_replace, "F5", ! KCTLX | 0x800 | 0x40, MSG_yank, "F6", ! KCTLX | 0x800 | 0x41, MSG_copy_region, "F7", ! KCTLX | 0x800 | 0x42, MSG_kill_region, "F8", ! KCTLX | 0x800 | 0x43, MSG_goto_line, "F9", ! KCTLX | 0x800 | 0x44, NULL, "F10", ! KCTLX | 0x800 | 0x85, NULL, "F11", ! KCTLX | 0x800 | 0x86, NULL, "F12", ! KCTLX | 0x800 | 0x54, MSG_help, "Sh-F1", ! KCTLX | 0x800 | 0x55, MSG_file_read, "Sh-F2", ! KCTLX | 0x800 | 0x56, MSG_file_save, "Sh-F3", ! KCTLX | 0x800 | 0x57, MSG_file_visit, "Sh-F4", ! KCTLX | 0x800 | 0x58, MSG_file_write, "Sh-F5", ! KCTLX | 0x800 | 0x59, MSG_flush_all, "Sh-F6", ! KCTLX | 0x800 | 0x5A, MSG_set_file_name, "Sh-F7", ! KCTLX | 0x800 | 0x5B, MSG_file_insert, "Sh-F8", ! KCTLX | 0x800 | 0x5C, MSG_exit_flush_all, "Sh-F9", ! KCTLX | 0x800 | 0x5D, MSG_quit, "Sh-F10", ! KCTLX | 0x800 | 0x87, NULL, "Sh-F11", ! KCTLX | 0x800 | 0x88, NULL, "Sh-F12", ! KCTLX | 0x800 | 0x5E, MSG_display_buffers, "Ctl-F1", ! KCTLX | 0x800 | 0x5F, MSG_use_buffer, "Ctl-F2", ! KCTLX | 0x800 | 0x60, MSG_kill_buffer, "Ctl-F3", ! KCTLX | 0x800 | 0x61, MSG_next_buff, "Ctl-F4", ! KCTLX | 0x800 | 0x62, MSG_prev_buff, "Ctl-F5", ! KCTLX | 0x800 | 0x63, MSG_yank_buffer, "Ctl-F6", ! KCTLX | 0x800 | 0x64, MSG_set_file_name, "Ctl-F7", ! KCTLX | 0x800 | 0x65, MSG_file_insert, "Ctl-F8", ! KCTLX | 0x800 | 0x66, MSG_exit_flush_all, "Ctl-F9", ! KCTLX | 0x800 | 0x67, MSG_quit, "Ctl-F10", ! KCTLX | 0x800 | 0x89, NULL, "Ctl-F11", ! KCTLX | 0x800 | 0x8A, NULL, "Ctl-F12", ! KCTLX | 0x800 | 0x68, NULL, "Alt-F1", ! KCTLX | 0x800 | 0x69, NULL, "Alt-F2", ! KCTLX | 0x800 | 0x6A, NULL, "Alt-F3", ! KCTLX | 0x800 | 0x6B, NULL, "Alt-F4", ! KCTLX | 0x800 | 0x6C, NULL, "Alt-F5", ! KCTLX | 0x800 | 0x6D, NULL, "Alt-F6", ! KCTLX | 0x800 | 0x6E, NULL, "Alt-F7", ! KCTLX | 0x800 | 0x6F, NULL, "Alt-F8", ! KCTLX | 0x800 | 0x70, NULL, "Alt-F9", ! KCTLX | 0x800 | 0x71, NULL, "Alt-F10", ! KCTLX | 0x800 | 0x8B, NULL, "Alt-F11", ! KCTLX | 0x800 | 0x8C, NULL, "Alt-F12", ! KCTLX | 0x800 | 0x48, MSG_back_line, "North", ! KCTLX | 0x800 | 0x4D, MSG_forw_char, "East", ! KCTLX | 0x800 | 0x50, MSG_forw_line, "South", ! KCTLX | 0x800 | 0x4B, MSG_back_char, "West", ! KCTLX | 0x800 | 0x8D, MSG_back_line, "Ctl-North", ! KCTLX | 0x800 | 0x74, MSG_forw_unit, "Ctl-East", ! KCTLX | 0x800 | 0x91, MSG_forw_line, "Ctl-South", ! KCTLX | 0x800 | 0x73, MSG_back_unit, "Ctl-West", ! KCTLX | 0x800 | 0x98, NULL, "Alt-North", ! KCTLX | 0x800 | 0x9D, NULL, "Alt-East", ! KCTLX | 0x800 | 0xA0, NULL, "Alt-South", ! KCTLX | 0x800 | 0x9B, NULL, "Alt-West", ! KCTLX | 0x800 | 0x49, MSG_back_page, "PageDown", ! KCTLX | 0x800 | 0x51, MSG_forw_page, "PageUp", ! KCTLX | 0x800 | 0x47, MSG_goto_bob, "Home", ! KCTLX | 0x800 | 0x4F, MSG_goto_eob, "End", ! KCTLX | 0x800 | 0x4C, NULL, "Center", ! KCTLX | 0x800 | 0x76, MSG_forw_window, "Ctl-PageDown", ! KCTLX | 0x800 | 0x84, MSG_back_window, "Ctl-PageUp", ! KCTLX | 0x800 | 0x77, MSG_goto_bob, "Ctl-Home", ! KCTLX | 0x800 | 0x75, MSG_goto_eob, "Ctl-End", ! KCTLX | 0x800 | 0x8F, NULL, "Ctl-Center", ! KCTLX | 0x800 | 0xA1, NULL, "Alt-PageDown", ! KCTLX | 0x800 | 0x99, NULL, "Alt-PageUp", ! KCTLX | 0x800 | 0x97, NULL, "Alt-Home", ! KCTLX | 0x800 | 0x9F, NULL, "Alt-End", ! KCTLX | 0x800 | 0x52, MSG_ins_toggle, "Insert", ! KCTLX | 0x800 | 0x53, MSG_forw_del_char, "Delete", ! KCTLX | 0x800 | 0x92, NULL, "Ctl-Insert", ! KCTLX | 0x800 | 0x93, NULL, "Ctl-Delete", ! KCTLX | 0x800 | 0xA2, NULL, "Alt-Insert", ! KCTLX | 0x800 | 0xA3, NULL, "Alt-Delete", ! KCTLX | 0x800 | 0x72, MSG_print, "Ctl-Print", ! KCTLX | 0x800 | 0x0F, NULL, "Sh-Tab", ! KCTLX | 0x800 | 0x94, NULL, "Ctl-Tab", ! KCTLX | 0x800 | 0xA5, NULL, "Alt-Tab", ! KCTLX | 0x800 | 0x95, NULL, "Ctrl-Num/", ! KCTLX | 0x800 | 0x96, NULL, "Ctrl-Num*", ! KCTLX | 0x800 | 0x8E, NULL, "Ctrl-Num-", ! KCTLX | 0x800 | 0x90, NULL, "Ctrl-Num+", ! KCTLX | 0x800 | 0xA4, NULL, "Alt-Num/", ! KCTLX | 0x800 | 0x37, NULL, "Alt-Num*", ! KCTLX | 0x800 | 0x4A, NULL, "Alt-Num-", ! KCTLX | 0x800 | 0x4E, NULL, "Alt-Num+", ! KCTLX | 0x800 | 0xA6, NULL, "Alt-NumEnter", ! KCTLX | 0x800 | 0x01, NULL, "Alt-Esc", ! KCTLX | 0x800 | 0x1C, NULL, "Alt-Enter", ! KCTLX | 0x800 | 0x0E, NULL, "Alt-Backspace", ! KCTLX | 0x800 | 0x1E, NULL, "Alt-A", ! KCTLX | 0x800 | 0x30, NULL, "Alt-B", ! KCTLX | 0x800 | 0x2E, NULL, "Alt-C", ! KCTLX | 0x800 | 0x20, NULL, "Alt-D", ! KCTLX | 0x800 | 0x12, NULL, "Alt-E", ! KCTLX | 0x800 | 0x21, NULL, "Alt-F", ! KCTLX | 0x800 | 0x22, NULL, "Alt-G", ! KCTLX | 0x800 | 0x23, NULL, "Alt-H", ! KCTLX | 0x800 | 0x17, NULL, "Alt-I", ! KCTLX | 0x800 | 0x24, NULL, "Alt-J", ! KCTLX | 0x800 | 0x25, NULL, "Alt-K", ! KCTLX | 0x800 | 0x26, NULL, "Alt-L", ! KCTLX | 0x800 | 0x32, NULL, "Alt-M", ! KCTLX | 0x800 | 0x31, NULL, "Alt-N", ! KCTLX | 0x800 | 0x18, NULL, "Alt-O", ! KCTLX | 0x800 | 0x19, NULL, "Alt-P", ! KCTLX | 0x800 | 0x10, NULL, "Alt-Q", ! KCTLX | 0x800 | 0x13, NULL, "Alt-R", ! KCTLX | 0x800 | 0x1F, NULL, "Alt-S", ! KCTLX | 0x800 | 0x14, NULL, "Alt-T", ! KCTLX | 0x800 | 0x16, NULL, "Alt-U", ! KCTLX | 0x800 | 0x2F, NULL, "Alt-V", ! KCTLX | 0x800 | 0x11, NULL, "Alt-W", ! KCTLX | 0x800 | 0x2D, NULL, "Alt-X", ! KCTLX | 0x800 | 0x15, NULL, "Alt-Y", ! KCTLX | 0x800 | 0x2C, NULL, "Alt-Z", ! KCTLX | 0x800 | 0x78, NULL, "Alt-1", ! KCTLX | 0x800 | 0x79, NULL, "Alt-2", ! KCTLX | 0x800 | 0x7A, NULL, "Alt-3", ! KCTLX | 0x800 | 0x7B, NULL, "Alt-4", ! KCTLX | 0x800 | 0x7C, NULL, "Alt-5", ! KCTLX | 0x800 | 0x7D, NULL, "Alt-6", ! KCTLX | 0x800 | 0x7E, NULL, "Alt-7", ! KCTLX | 0x800 | 0x7F, NULL, "Alt-8", ! KCTLX | 0x800 | 0x80, NULL, "Alt-9", ! KCTLX | 0x800 | 0x81, NULL, "Alt-0", 0, NULL, NULL }; #endif *************** *** 254,259 **** --- 342,348 ---- */ static int unkey = KRANDOM; /* jam - for ungetkey */ void ungetkey (k) + int k; { unkey = k; } *************** *** 276,285 **** return (METACH); return (c | KCTRL); } ! if (c == 0) { c = ttgetc (); ! return (c | 0x80 | KCTLX); } return (c); } --- 365,374 ---- return (METACH); return (c | KCTRL); } ! if (c == 0 || c == 0xE0) { c = ttgetc (); ! return (c | 0x800 | KCTLX); } return (c); } *************** *** 294,300 **** */ void ttykeymapinit () { ! #if MSDOS KEY_NAME_ARRAY *ptr; int i; char buf[NCOL]; --- 383,389 ---- */ void ttykeymapinit () { ! #ifdef MSDOS KEY_NAME_ARRAY *ptr; int i; char buf[NCOL]; *************** *** 318,323 **** --- 407,428 ---- sprintf (buf, MSG_sp_key, i); writ_echo (buf); #endif + #ifdef OS2 + KEY_NAME_ARRAY *ptr; + int i; + char buf[NCOL]; + ptr = ibm_keys; + i = 0; + while (ptr -> key_code != 0) + { + if (ptr -> func_name_str != NULL) + keydup (ptr -> key_code, ptr -> func_name_str); + ptr++; + i++; + } + /* sprintf (buf, MSG_sp_key, i); + writ_echo (buf); */ + #endif } /* * Search key name array for given key code. *************** *** 326,332 **** char *keystrings (key) int key; { ! #if MSDOS KEY_NAME_ARRAY *ptr; if (wang_pc) --- 431,437 ---- char *keystrings (key) int key; { ! #ifdef MSDOS KEY_NAME_ARRAY *ptr; if (wang_pc) *************** *** 337,342 **** --- 442,459 ---- if (!wang_pc && !ibm_pc) return(NULL); + + while (ptr -> key_code != 0) + { + if (key == ptr -> key_code) + { + return (ptr -> key_name_str); + } + ptr++; + } + #endif + #ifdef OS2 + KEY_NAME_ARRAY *ptr = ibm_keys; while (ptr -> key_code != 0) { diff -cb orig/window.c new/window.c *** orig/window.c Fri Nov 22 19:03:24 1991 --- new/window.c Mon Jan 06 15:30:14 1992 *************** *** 81,87 **** * to "move up". */ bool mvdnwind (f, n, k) ! register int n; { return (mvupwind (f, -n, KRANDOM)); } --- 81,87 ---- * to "move up". */ bool mvdnwind (f, n, k) ! register int f, n, k; { return (mvupwind (f, -n, KRANDOM)); } *************** *** 96,102 **** * not really move "."; it moves the frame). */ bool mvupwind (f, n, k) ! int n; { A32 l_val, l_bytes; --- 96,102 ---- * not really move "."; it moves the frame). */ bool mvupwind (f, n, k) ! int f, n, k; { A32 l_val, l_bytes; *************** *** 331,336 **** --- 331,337 ---- * because dot would move. */ bool enlargewind (f, n, k) + int f, n, k; { register WINDOW * adjwp; register LINE * lp; *************** *** 392,397 **** --- 393,399 ---- * do all the hard work. */ bool shrinkwind (f, n, k) + int f, n, k; { register WINDOW * adjwp; register LINE * lp; diff -cb orig/word.c new/word.c *** orig/word.c Fri Nov 22 19:03:26 1991 --- new/word.c Mon Jan 06 15:30:16 1992 *************** *** 20,25 **** --- 20,26 ---- * the buffers. */ char backunit (f, n, k) + int f, n, k; { char ret; *************** *** 44,49 **** --- 45,51 ---- * try and move beyond the buffer's end. */ char forwunit (f, n, k) + int f, n, k; { if (n < 0) *************** *** 68,73 **** --- 70,76 ---- * way when it hits the end of the buffer. */ bool delfunit (f, n, k) + int f, n, k; { if (n < 0) return (FALSE); *************** *** 97,102 **** --- 100,106 ---- * to "M-Backspace". */ bool delbunit (f, n, k) + int f, n, k; { int size;