home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-01-31 | 64.8 KB | 2,533 lines |
- diff -cbr src-orig/basic.c src/basic.c
- *** src-orig/basic.c Mon Dec 16 11:42:16 1991
- --- src/basic.c Sun Dec 22 16:19:00 1991
- ***************
- *** 164,169 ****
- --- 164,207 ----
- return(TRUE);
- }
-
- + #if KEEPPOS
- +
- + /*
- + * Move to the top of the screen. The standsrd screen code does most of the
- + * hard parts of update.
- + *
- + */
- + PASCAL NEAR gotobos(f, n)
- + int f, n;
- + {
- + curwp->w_dotp = curwp->w_linep;
- + curwp->w_doto = 0;
- + curwp->w_flag |= WFHARD;
- + return(TRUE);
- + } /* gotobos */
- +
- +
- + /*
- + * Goto the end of the screen.
- + */
- + PASCAL NEAR gotoeos(f, n)
- + int f, n;
- + {
- + register LINE *lp;
- + int currow;
- +
- + lp = curwp->w_linep;
- + currow = curwp->w_ntrows - 1;
- + while (currow-- && lp!=curbp->b_linep) lp = lforw(lp);
- + curwp->w_dotp = lp;
- + curwp->w_doto = 0;
- + curwp->w_flag |= WFHARD;
- + return(TRUE);
- + } /* gotoeos */
- +
- + #endif
- +
- +
- /*
- * Move forward by full lines. If the number of lines to move is less than
- * zero, call the backward line function to actually do it. The last command
- ***************
- *** 440,445 ****
- --- 478,488 ----
- {
- register LINE *lp;
-
- + #if KEEPPOS
- + int currow;
- + register LINE *lp1;
- + #endif
- +
- if (f == FALSE) {
- n = curwp->w_ntrows - 2; /* Default scroll. */
- if (n <= 0) /* Forget the overlap */
- ***************
- *** 447,457 ****
- } else if (n < 0)
- return(backpage(f, -n));
- lp = curwp->w_linep;
- while (n-- && lp!=curbp->b_linep)
- lp = lforw(lp);
- curwp->w_linep = lp;
- ! curwp->w_dotp = lp;
- curwp->w_doto = 0;
- curwp->w_flag |= WFHARD;
- return(TRUE);
- }
- --- 490,521 ----
- } else if (n < 0)
- return(backpage(f, -n));
- lp = curwp->w_linep;
- +
- + #if KEEPPOS
- + if ((lastflag&CFCPCN) == 0)
- + curgoal = getccol(FALSE);
- + /* flag this command as a line move */
- + thisflag |= CFCPCN;
- + lp1 = lp;
- + currow = 0;
- + while (lp1 != curwp->w_dotp ) {
- + currow++;
- + lp1 = lforw(lp1);
- + }
- + #endif
- +
- while (n-- && lp!=curbp->b_linep)
- lp = lforw(lp);
- curwp->w_linep = lp;
- !
- ! #if KEEPPOS
- ! while (currow-- && lp!=curbp->b_linep) lp = lforw(lp);
- ! curwp->w_doto = getgoal(lp);
- ! #else
- curwp->w_doto = 0;
- + #endif
- +
- + curwp->w_dotp = lp;
- curwp->w_flag |= WFHARD;
- return(TRUE);
- }
- ***************
- *** 470,475 ****
- --- 534,544 ----
- {
- register LINE *lp;
-
- + #if KEEPPOS
- + int currow;
- + register LINE *lp1;
- + #endif
- +
- if (f == FALSE) {
- n = curwp->w_ntrows - 2; /* Default scroll. */
- if (n <= 0) /* Don't blow up if the */
- ***************
- *** 477,487 ****
- } else if (n < 0)
- return(forwpage(f, -n));
- lp = curwp->w_linep;
- while (n-- && lback(lp)!=curbp->b_linep)
- lp = lback(lp);
- curwp->w_linep = lp;
- ! curwp->w_dotp = lp;
- curwp->w_doto = 0;
- curwp->w_flag |= WFHARD;
- return(TRUE);
- }
- --- 546,577 ----
- } else if (n < 0)
- return(forwpage(f, -n));
- lp = curwp->w_linep;
- +
- + #if KEEPPOS
- + if ((lastflag&CFCPCN) == 0)
- + curgoal = getccol(FALSE);
- + /* flag this command as a line move */
- + thisflag |= CFCPCN;
- + lp1 = lp;
- + currow = 0;
- + while (lp1 != curwp->w_dotp ) {
- + currow++;
- + lp1 = lforw(lp1);
- + }
- + #endif
- +
- while (n-- && lback(lp)!=curbp->b_linep)
- lp = lback(lp);
- curwp->w_linep = lp;
- !
- ! #if KEEPPOS
- ! while (currow-- && lp!=curbp->b_linep) lp = lforw(lp);
- ! curwp->w_doto = getgoal(lp);
- ! #else
- curwp->w_doto = 0;
- + #endif
- +
- + curwp->w_dotp = lp;
- curwp->w_flag |= WFHARD;
- return(TRUE);
- }
- diff -cbr src-orig/bind.c src/bind.c
- *** src-orig/bind.c Mon Dec 16 11:42:16 1991
- --- src/bind.c Sun Dec 22 16:19:00 1991
- ***************
- *** 772,777 ****
- --- 772,782 ----
-
- c = c & 255; /* strip the prefixes */
-
- + if ((c & 255) == 127) {
- + *ptr++ = '^';
- + c = '?';
- + }
- +
- /* and output the final sequence */
-
- *ptr++ = c;
- ***************
- *** 938,944 ****
- if (*keyname == '^' && *(keyname+1) != 0) {
- c |= CTRL;
- ++keyname;
- ! uppercase(keyname);
- }
-
- /* A literal control character? (Boo, hiss) */
- --- 943,949 ----
- if (*keyname == '^' && *(keyname+1) != 0) {
- c |= CTRL;
- ++keyname;
- ! /* uppercase(keyname); */
- }
-
- /* A literal control character? (Boo, hiss) */
- diff -cbr src-orig/char.c src/char.c
- *** src-orig/char.c Mon Dec 16 11:42:16 1991
- --- src/char.c Sun Dec 22 16:19:00 1991
- ***************
- *** 139,145 ****
- upcase[index ^ DIFCASE] = index;
- }
-
- ! #if MSDOS
- /* setup various extended IBM-PC characters */
- upcase[0x80] = 0x87; /* C with a cedilla */
- lowcase[0x81] = 0x9a; /* U with an umlaut */
- --- 139,145 ----
- upcase[index ^ DIFCASE] = index;
- }
-
- ! #if MSDOS | OS2
- /* setup various extended IBM-PC characters */
- upcase[0x80] = 0x87; /* C with a cedilla */
- lowcase[0x81] = 0x9a; /* U with an umlaut */
- diff -cbr src-orig/display.c src/display.c
- *** src-orig/display.c Mon Dec 16 11:42:16 1991
- --- src/display.c Sun Dec 22 16:19:02 1991
- ***************
- *** 885,891 ****
- --- 885,897 ----
- || req || rev
- #endif
- ) {
- + #if OS2NPM
- + ttrow = row; /* special optimization */
- + ttcol = 0;
- + os2vmove(row, 0); /* Go to start of line. */
- + #else
- movecursor(row, 0); /* Go to start of line. */
- + #endif
- /* set rev video if needed */
- if (rev != req)
- (*term.t_rev)(req);
- ***************
- *** 979,985 ****
- --- 985,997 ----
- }
-
- /* move to the begining of the text to update */
- + #if OS2NPM
- + ttrow = row; /* special optimization */
- + ttcol = upcol;
- + os2vmove(row, upcol); /* Go to start of line. */
- + #else
- movecursor(row, upcol);
- + #endif
-
- #if REVSTA
- if (rev)
- diff -cbr src-orig/dolock.c src/dolock.c
- *** src-orig/dolock.c Mon Dec 16 11:42:16 1991
- --- src/dolock.c Sun Dec 22 16:19:02 1991
- ***************
- *** 71,79 ****
- --- 71,81 ----
- #if ZTC
- extern volatile int errno;
- #else
- + #if MSC == 0
- extern int errno;
- #endif
- #endif
- + #endif
-
- #define LOCKDIR "_xlk"
- #define LOCKMSG "LOCK ERROR -- "
- diff -cbr src-orig/edef.h src/edef.h
- *** src-orig/edef.h Mon Dec 16 11:44:30 1991
- --- src/edef.h Sun Dec 22 16:19:22 1991
- ***************
- *** 27,33 ****
- NOSHARE int DNEAR eolexist = TRUE; /* does clear to EOL exist? */
- NOSHARE int DNEAR revexist = FALSE; /* does reverse video exist? */
- NOSHARE int DNEAR exec_error = FALSE; /* macro execution error pending? */
- ! NOSHARE int DNEAR flickcode = TRUE; /* do flicker supression? */
- CONST char *modename[] = { /* name of modes */
- "WRAP", "CMODE", "SPELL", "EXACT", "VIEW", "OVER",
- "MAGIC", "CRYPT", "ASAVE", "REP"};
- --- 27,33 ----
- NOSHARE int DNEAR eolexist = TRUE; /* does clear to EOL exist? */
- NOSHARE int DNEAR revexist = FALSE; /* does reverse video exist? */
- NOSHARE int DNEAR exec_error = FALSE; /* macro execution error pending? */
- ! NOSHARE int DNEAR flickcode = FALSE; /* do flicker supression? */
- CONST char *modename[] = { /* name of modes */
- "WRAP", "CMODE", "SPELL", "EXACT", "VIEW", "OVER",
- "MAGIC", "CRYPT", "ASAVE", "REP"};
- ***************
- *** 93,98 ****
- --- 93,101 ----
- NOSHARE int DNEAR kbdmode = STOP; /* current keyboard macro mode */
- NOSHARE int DNEAR kbdrep = 0; /* number of repetitions */
- NOSHARE int DNEAR restflag = FALSE; /* restricted use? */
- + #ifdef BACKUP
- + NOSHARE int DNEAR bakfile = TRUE; /* save the bakfile */
- + #endif
- NOSHARE int DNEAR lastkey = 0; /* last keystoke */
- NOSHARE int DNEAR seed = 0; /* random number seed */
- NOSHARE long envram = 0l; /* # of bytes current in use by malloc */
- ***************
- *** 277,282 ****
- --- 280,288 ----
- NOSHARE extern int kbdmode; /* current keyboard macro mode */
- NOSHARE extern int kbdrep; /* number of repetitions */
- NOSHARE extern int restflag; /* restricted use? */
- + #ifdef BACKUP
- + NOSHARE extern int bakfile; /* save the bakfile */
- + #endif
- NOSHARE extern int lastkey; /* last keystoke */
- NOSHARE extern int seed; /* random number seed */
- NOSHARE extern long envram; /* # of bytes current in use by malloc */
- diff -cbr src-orig/efunc.h src/efunc.h
- *** src-orig/efunc.h Mon Dec 16 11:44:30 1991
- --- src/efunc.h Sun Dec 22 16:19:22 1991
- ***************
- *** 27,32 ****
- --- 27,35 ----
- {"begin-macro", ctlxlp},
- {"beginning-of-file", gotobob},
- {"beginning-of-line", gotobol},
- + #if KEEPPOS
- + {"beginning-of-screen", gotobos},
- + #endif
- {"bind-to-key", bindtokey},
- {"buffer-position", showcpos},
- {"case-region-lower", lowerregion},
- ***************
- *** 39,44 ****
- --- 42,50 ----
- {"change-screen-row", new_row_org},
- {"change-screen-size", newsize},
- {"change-screen-width", newwidth},
- + #if CHDIR
- + {"change-working-directory", changedir},
- + #endif
- {"clear-and-redraw", refresh},
- {"clear-message-line", clrmes},
- {"copy-region", copyregion},
- ***************
- *** 48,53 ****
- --- 54,60 ----
- {"delete-blank-lines", deblank},
- {"delete-buffer", killbuffer},
- {"delete-global-mode", delgmode},
- + {"delete-line", delline},
- {"delete-mode", delmode},
- {"delete-next-character", forwdel},
- {"delete-next-word", delfword},
- ***************
- *** 72,77 ****
- --- 79,87 ----
- {"end-macro", ctlxrp},
- {"end-of-file", gotoeob},
- {"end-of-line", gotoeol},
- + #ifdef KEEPPOS
- + {"end-of-screen", gotoeos},
- + #endif
- {"end-of-word", endword},
- {"entab-line", entab},
- {"entab-region", entab},
- ***************
- *** 227,232 ****
- --- 237,243 ----
- #if CTAGS
- {"tag-word", tagword},
- #endif
- + {"toggle-over-mode", toggleovermode},
- {"transpose-characters", twiddle},
- {"trim-line", trim},
- {"trim-region", trim},
- diff -cbr src-orig/epath.h src/epath.h
- *** src-orig/epath.h Mon Dec 16 11:44:30 1991
- --- src/epath.h Sun Dec 22 16:19:24 1991
- ***************
- *** 44,54 ****
-
- #if MSDOS
- {
- ! "emacs.rc",
- ! "emacs.hlp",
- ! "\\sys\\public\\",
- ! "\\usr\\bin\\",
- ! "\\bin\\",
- "\\",
- ""
- };
- --- 44,54 ----
-
- #if MSDOS
- {
- ! "me.rc",
- ! "me.hlp",
- ! "c:\\bin\\",
- ! "c:\\etc\\",
- ! "c:\\",
- "\\",
- ""
- };
- ***************
- *** 56,67 ****
-
- #if OS2
- {
- ! "emacs.rc",
- ! "emacs.hlp",
- ! "C:\\OS2\\SYSTEM\\",
- ! "C:\\OS2\\DLL\\",
- ! "C:\\OS2\\BIN\\",
- ! "C:\\OS2\\",
- "\\",
- ""
- };
- --- 56,67 ----
-
- #if OS2
- {
- ! "me.rc",
- ! "me.hlp",
- ! "c:\\bin\\",
- ! "c:\\etc\\",
- ! "c:\\os2\\",
- ! "c:\\",
- "\\",
- ""
- };
- ***************
- *** 71,78 ****
- {
- ".emacsrc",
- "emacs.hlp",
- - "/usr/local/",
- "/usr/lib/",
- ""
- };
- #endif
- --- 71,80 ----
- {
- ".emacsrc",
- "emacs.hlp",
- "/usr/lib/",
- + "/usr/local/",
- + "/usr/local/lib/",
- + "/usr/local/lib/emacs/",
- ""
- };
- #endif
- diff -cbr src-orig/eproto.h src/eproto.h
- *** src-orig/eproto.h Mon Dec 16 11:44:30 1991
- --- src/eproto.h Sun Dec 22 16:19:26 1991
- ***************
- *** 284,289 ****
- --- 284,290 ----
- extern PASCAL NEAR forwpage(int f, int n);
- extern PASCAL NEAR forwword(int f, int n);
- extern PASCAL NEAR freewhile(WHBLOCK *wp);
- + extern PASCAL NEAR getbackupname(char *backup, char *file);
- extern PASCAL NEAR getccol(int bflg);
- extern PASCAL NEAR getcmd(void);
- extern PASCAL NEAR getfence(int f, int n);
- ***************
- *** 336,341 ****
- --- 337,343 ----
- extern PASCAL NEAR lowrite(char c);
- extern PASCAL NEAR macarg(char *tok);
- extern PASCAL NEAR macrotokey(int f, int n);
- + extern PASCAL NEAR makebackup(char *filename);
- extern PASCAL NEAR makelist(int iflag);
- extern PASCAL NEAR mouse_screen(void);
- extern PASCAL NEAR screenlist(int iflag);
- ***************
- *** 488,501 ****
- extern int PASCAL NEAR backtagword(int f, int n); /* return from tagged word */
- #endif
-
- /* some library redefinitions */
-
- char *strcat(char *, char *);
- char *strcpy(char *, char *);
- #if RAMSIZE == 0
- ! char *malloc(int);
- #endif
- ! char *realloc(char *block, int siz);
-
- #else
-
- --- 490,515 ----
- extern int PASCAL NEAR backtagword(int f, int n); /* return from tagged word */
- #endif
-
- + extern PASCAL NEAR toggleovermode(int f, int n);
- + extern PASCAL NEAR delline(int f, int n);
- +
- + #if KEEPPOS
- + extern PASCAL NEAR gotobos(int f, int n); /* goto beginning of screen */
- + extern PASCAL NEAR gotoeos(int f, int n); /* goto end of screen */
- + #endif
- +
- + #if CHDIR
- + extern PASCAL NEAR changedir(int f, int n);
- + #endif
- +
- /* some library redefinitions */
-
- char *strcat(char *, char *);
- char *strcpy(char *, char *);
- #if RAMSIZE == 0
- ! void *malloc(size_t);
- #endif
- ! void *realloc(void *block, size_t siz);
-
- #else
-
- ***************
- *** 766,771 ****
- --- 780,786 ----
- extern PASCAL NEAR forwpage();
- extern PASCAL NEAR forwword();
- extern PASCAL NEAR freewhile();
- + extern PASCAL NEAR getbackupname();
- extern PASCAL NEAR getccol();
- extern PASCAL NEAR getcmd();
- extern PASCAL NEAR getfence();
- ***************
- *** 819,824 ****
- --- 834,840 ----
- extern PASCAL NEAR lowrite();
- extern PASCAL NEAR macarg();
- extern PASCAL NEAR macrotokey();
- + extern PASCAL NEAR makebackup();
- extern PASCAL NEAR makelist();
- extern PASCAL NEAR mouse_screen();
- extern PASCAL NEAR screenlist();
- ***************
- *** 969,974 ****
- --- 985,1002 ----
- extern int PASCAL NEAR tagword(); /* vi-like tagging */
- extern int PASCAL NEAR retagword(); /* Try again (if redefined) */
- extern int PASCAL NEAR backtagword(); /* return from tagged word */
- + #endif
- +
- + extern PASCAL NEAR toggleovermode();
- + extern PASCAL NEAR delline();
- +
- + #if KEEPPOS
- + extern PASCAL NEAR gotobos(); /* goto beginning of screen */
- + extern PASCAL NEAR gotoeos(); /* goto end of screen */
- + #endif
- +
- + #if CHDIR
- + extern PASCAL NEAR changedir();
- #endif
-
- /* some library redefinitions */
- diff -cbr src-orig/estruct.h src/estruct.h
- *** src-orig/estruct.h Mon Dec 16 11:44:32 1991
- --- src/estruct.h Sun Dec 22 14:42:36 1991
- ***************
- *** 146,162 ****
- #define REVSTA 1 /* Status line appears in reverse video */
- #define COLOR 1 /* color commands and windows */
-
- ! #define FILOCK 1 /* file locking under unix BSD 4.2 */
- #define ISRCH 1 /* Incremental searches like ITS EMACS */
- ! #define FLABEL 1 /* function key label code [HP150] */
- #define CRYPT 1 /* file encryption enabled? */
- #define MAGIC 1 /* include regular expression matching? */
- #define MOUSE 1 /* Include routines for mouse actions */
- #define NOISY 1 /* Use a fancy BELL if it exists */
- ! #define CTAGS 0 /* include vi-like tagging? */
- #define SPEECH 0 /* spoken EMACS, for the sight impared [not ready] */
- #define VARARG 1 /* use varargs.h for mlwrite() */
-
- /* Character set options */
- /* [Set one of these!!] */
- #define ASCII 1 /* always using ASCII char sequences for now */
- --- 146,167 ----
- #define REVSTA 1 /* Status line appears in reverse video */
- #define COLOR 1 /* color commands and windows */
-
- ! #define FILOCK 0 /* file locking under unix BSD 4.2 */
- #define ISRCH 1 /* Incremental searches like ITS EMACS */
- ! #define FLABEL 0 /* function key label code [HP150] */
- #define CRYPT 1 /* file encryption enabled? */
- #define MAGIC 1 /* include regular expression matching? */
- #define MOUSE 1 /* Include routines for mouse actions */
- #define NOISY 1 /* Use a fancy BELL if it exists */
- ! #define CTAGS 1 /* include vi-like tagging? */
- #define SPEECH 0 /* spoken EMACS, for the sight impared [not ready] */
- #define VARARG 1 /* use varargs.h for mlwrite() */
-
- + #define BACKUP 0 /* retain original file as backup (MSDOS, UNIX) */
- + #define SOFTAB 1 /* in OVER mode, are tabs and returns soft? */
- + #define KEEPPOS 1 /* Maintain cursor position when paging */
- + #define CHDIR 1 /* code for changing working directory */
- +
- /* Character set options */
- /* [Set one of these!!] */
- #define ASCII 1 /* always using ASCII char sequences for now */
- ***************
- *** 222,228 ****
- #if MSDOS & (TURBO | MSC | TIPC)
- #define NEAR
- #define DNEAR
- ! #define PASCAL pascal
- #define CDECL cdecl
- #else
- #if MSDOS & ZTC
- --- 227,233 ----
- #if MSDOS & (TURBO | MSC | TIPC)
- #define NEAR
- #define DNEAR
- ! #define PASCAL /* pascal */
- #define CDECL cdecl
- #else
- #if MSDOS & ZTC
- ***************
- *** 397,403 ****
- /* internal constants */
-
- #define NBINDS 300 /* max # of bound keys */
- ! #if AOSVS | VMS
- #define NFILEN 256
- #else
- #define NFILEN 80 /* # of bytes, file name */
- --- 402,408 ----
- /* internal constants */
-
- #define NBINDS 300 /* max # of bound keys */
- ! #if AOSVS | VMS | OS2
- #define NFILEN 256
- #else
- #define NFILEN 80 /* # of bytes, file name */
- ***************
- *** 655,660 ****
- --- 660,668 ----
- char b_bname[NBUFN]; /* Buffer name */
- #if CRYPT
- char b_key[NPAT]; /* current encrypted key */
- + #endif
- + #if BACKUP /* -- ZU */
- + short b_bupflg; /* true if file was backed up */
- #endif
- } BUFFER;
-
- diff -cbr src-orig/file.c src/file.c
- *** src-orig/file.c Mon Dec 16 11:42:18 1991
- --- src/file.c Sun Dec 22 16:37:44 1991
- ***************
- *** 11,18 ****
- #include "eproto.h"
- #include "edef.h"
- #include "elang.h"
- ! #if BSD | SUN | V7
- #include <sys/types.h>
- #include <sys/stat.h>
- #endif
-
- --- 11,19 ----
- #include "eproto.h"
- #include "edef.h"
- #include "elang.h"
- ! #if V7 | USG | HPUX | BSD | SUN | XENIX | MSDOS | OS2
- #include <sys/types.h>
- + #undef CDECL
- #include <sys/stat.h>
- #endif
-
- ***************
- *** 176,182 ****
- register int cmark; /* current mark */
- char bname[NBUFN]; /* buffer name to put file */
-
- ! #if MSDOS | OS2 | AOSVS | VMS | TOS
- mklower(fname); /* msdos isn't case sensitive */
- #endif
- for (bp=bheadp; bp!=NULL; bp=bp->b_bufp) {
- --- 177,183 ----
- register int cmark; /* current mark */
- char bname[NBUFN]; /* buffer name to put file */
-
- ! #if MSDOS | _OS2 | AOSVS | VMS | TOS
- mklower(fname); /* msdos isn't case sensitive */
- #endif
- for (bp=bheadp; bp!=NULL; bp=bp->b_bufp) {
- ***************
- *** 262,267 ****
- --- 263,271 ----
- if ((s=bclear(bp)) != TRUE) /* Might be old. */
- return(s);
- bp->b_flag &= ~(BFINVS|BFCHG);
- + #if BACKUP
- + curbp->b_bupflg = FALSE; /* no backup file yet */
- + #endif
- strcpy(bp->b_fname, fname);
-
- /* let a user macro get hold of things...if he wants */
- ***************
- *** 465,470 ****
- --- 469,477 ----
- if ((s=writeout(fname, "w")) == TRUE) {
- strcpy(curbp->b_fname, fname);
- curbp->b_flag &= ~BFCHG;
- + #if BACKUP
- + curbp->b_bupflg = TRUE;
- + #endif
- /* Update mode lines. */
- upmode();
- }
- ***************
- *** 486,491 ****
- --- 493,501 ----
- return(s);
- if ((s=writeout(fname, "a")) == TRUE) {
- curbp->b_flag &= ~BFCHG;
- + #if BACKUP
- + curbp->b_bupflg = TRUE;
- + #endif
- /* Update mode lines. */
- upmode();
- }
- ***************
- *** 549,555 ****
- * This function performs the details of file writing. It uses
- * the file management routines in the "fileio.c" package. The
- * number of lines written is displayed. Several errors are
- ! * posible, and cause writeout to return a FALSE result. When
- * $ssave is TRUE, the buffer is written out to a temporary
- * file, and then the old file is unlinked and the temporary
- * renamed to the original name. Before the file is written,
- --- 559,565 ----
- * This function performs the details of file writing. It uses
- * the file management routines in the "fileio.c" package. The
- * number of lines written is displayed. Several errors are
- ! * possible, and cause writeout to return a FALSE result. When
- * $ssave is TRUE, the buffer is written out to a temporary
- * file, and then the old file is unlinked and the temporary
- * renamed to the original name. Before the file is written,
- ***************
- *** 654,662 ****
- #endif
- /* erase original file */
- /* rename temporary file to original name */
- if (unlink(fn) == 0 && rename(tname, fn) == 0) {
- ! #if BSD | SUN | V7
- ! chmod(fn, (int)st.st_uid, (int)st.st_gid);
- chmod(fn, (int)st.st_mode);
- #else
- ;
- --- 664,676 ----
- #endif
- /* erase original file */
- /* rename temporary file to original name */
- + #if BACKUP
- + if (makebackup(fn) == TRUE && rename(tname, fn) == 0) {
- + #else
- if (unlink(fn) == 0 && rename(tname, fn) == 0) {
- ! #endif
- ! #if V7 | USG | HPUX | BSD | SUN | XENIX
- ! chown(fn, (int)st.st_uid, (int)st.st_gid);
- chmod(fn, (int)st.st_mode);
- #else
- ;
- ***************
- *** 870,872 ****
- --- 884,1018 ----
- return(TRUE);
- }
-
- + /* -- ZU */
- + /* Make a backup file.
- + * This is done by renaming the original file to a new name.
- + * The name of the backup file is defined as follows:
- + *
- + * MSDOS: The base file name remains untouched, the extension has a tilde (~)
- + * as its first character and the other characters moved one place
- + * to the right.
- + * UNIX: The first character is a '#'. The rest of the name is moved one
- + * place to the right. The length of the filename may not exceed 14
- + * characters (for BSD the limit is 255).
- + *
- + * No other operating system supported by now.
- + */
- + #if BACKUP
- +
- + PASCAL NEAR makebackup( filename )
- + char *filename;
- + {
- + char backupname[NFILEN];
- + #if MSDOS | OS2 | V7 | USG | HPUX | BSD | SUN | XENIX
- + if ( curbp->b_bupflg || /* already backed up */
- + !bakfile /* no backup file wanted */
- + ) {
- + if( unlink( filename ) == 0 )
- + return( TRUE );
- + else
- + return( FALSE );
- + }
- +
- + getbackupname( backupname, filename );
- +
- + if( !fexist( filename )) /* no original file - */
- + return( TRUE ); /* nothing to backup */
- +
- + if( fexist( backupname ))
- + if( unlink( backupname )) /* file is readonly */
- + return( FALSE );
- +
- + if( rename( filename, backupname ) != 0 )
- + return( FALSE );
- +
- + return( TRUE );
- + #else /* for all other operating systems return fail */
- + return( FALSE );
- + #endif /* MSDOS | V7 | USG | HPUX | BSD | SUN | XENIX */
- + }
- +
- + /* Make the name of the backup file according to the original file name
- + * This routines knows about the filename possibilities of the different
- + * operating systems.
- + */
- + PASCAL NEAR getbackupname( backup, file )
- + char *backup;
- + char *file;
- + {
- + char temp[NFILEN];
- + int index;
- + char *dotpos;
- +
- + strcpy( backup, file );
- + #if MSDOS | OS2
- + for( index = strlen( backup ) -1; index >= 0 && backup[index] != '.';
- + index-- )
- + ;
- + if( index < 0 )
- + strcat( backup, ".~" );
- + else {
- + strcpy( temp, &backup[index +1] );
- + backup[index +1] = '~'; /* first char of new extension */
- + temp[2] = '\0'; /* extension is at most 3 chars */
- + strcpy( &backup[index +2], temp );
- + }
- + #endif /* MSDOS */
- +
- + #if V7 | USG | HPUX | BSD | SUN | XENIX
- + /* strcpy( temp, "#" ); */
- + *temp = 0;
- + for( index = strlen( backup ) -1; index >= 0 && backup[index] != '/';
- + index-- )
- + ;
- + if( index >= 0 )
- + strcat( temp, &backup[index +1] );
- + else
- + strncat( temp, backup, NFILEN -1 );
- +
- + #if BSD /* BSD allows filenames up to 255 characters */
- + #if NFILEN < 255
- + if( strlen( temp ) > NFILEN )
- + temp[NFILEN] = '\0';
- + #else
- + if( strlen( temp ) > 254 )
- + temp[255] = '\0';
- + #endif
- + #else /* other Unixes allow only 14 characters */
- + if( strlen( temp ) > 12 )
- + temp[ 13] = '\0';
- + #endif
- + strcat(temp,"-");
- + if( index >= 0 )
- + strncpy( &backup[index +1], temp, NFILEN - strlen( backup ) -1 );
- + else
- + strncpy( backup, temp, NFILEN - strlen( backup ) -1 );
- + #endif /* V7 | USG | HPUX | BSD | SUN | XENIX */
- + }
- +
- + #endif /* BACKUP */
- +
- + #if CHDIR
- + /*
- + * Change current working directory
- + */
- + PASCAL NEAR changedir(f, n)
- + int f, n;
- + {
- + char buf[NSTRING + 32]; /* message buffer */
- + char *fname; /* file user wishes to find */ /* file name */
- + register int s; /* status return */
- +
- + if (restflag) /* don't allow this command if restricted */
- + return(resterr());
- +
- + if ((fname = gtfilename("New directory")) != NULL)
- + changecwd(fname);
- +
- + strcpy(buf, "Current directory = ");
- + getcwd(buf + 20, NSTRING);
- + mlwrite(buf);
- +
- + return(TRUE);
- + }
- + #endif
- diff -cbr src-orig/ibmpc.c src/ibmpc.c
- *** src-orig/ibmpc.c Mon Dec 16 11:42:18 1991
- --- src/ibmpc.c Sun Dec 22 16:19:06 1991
- ***************
- *** 14,21 ****
- #include "elang.h"
-
- #if IBMPC
- ! #define NROW 50 /* Max Screen size. */
- ! #define NCOL 80 /* Edit if you want to. */
- #define MARGIN 8 /* size of minimim margin and */
- #define SCRSIZ 64 /* scroll size for extended lines */
- #define NPAUSE 200 /* # times thru update to pause */
- --- 14,21 ----
- #include "elang.h"
-
- #if IBMPC
- ! #define NROW 80 /* Max Screen size. */
- ! #define NCOL 140 /* Edit if you want to. */
- #define MARGIN 8 /* size of minimim margin and */
- #define SCRSIZ 64 /* scroll size for extended lines */
- #define NPAUSE 200 /* # times thru update to pause */
- ***************
- *** 419,432 ****
- --- 419,442 ----
- ttclose();
- }
-
- + static CtrlC_State; /* -- ZU */
- PASCAL NEAR ibmkopen() /* open the keyboard */
-
- {
- + rg.x.ax = 0x3300; /* -- ZU */
- + intdos( &rg, &rg ); /* . */
- + CtrlC_State = rg.h.dl; /* -- UZ */
- + rg.x.ax = 0x3301;
- + rg.h.dl = 0x00;
- + intdos(&rg, &rg);
- }
-
- PASCAL NEAR ibmkclose() /* close the keyboard */
-
- {
- + rg.x.ax = 0x3301; /* -- ZU */
- + rg.h.dl = CtrlC_State; /* . */
- + intdos(&rg, &rg); /* -- UZ */
- }
-
- PASCAL NEAR scinit(type) /* initialize the screen head pointers */
- diff -cbr src-orig/input.c src/input.c
- *** src-orig/input.c Mon Dec 16 11:42:20 1991
- --- src/input.c Sun Dec 22 17:05:42 1991
- ***************
- *** 46,51 ****
- --- 46,60 ----
- #include "edef.h"
- #include "elang.h"
-
- + #if USG | BSD | V7
- + #include <sys/types.h>
- + #include <pwd.h>
- + extern struct passwd *getpwnam();
- + #if USG
- + #define index strchr
- + #endif
- + #endif
- +
- /*
- * Ask a yes or no question in the message line. Return either TRUE, FALSE, or
- * ABORT. The ABORT status is returned if the user bumps out of the question
- ***************
- *** 218,223 ****
- --- 227,236 ----
- register int ec; /* extended input character */
- int cpos; /* current column on screen output */
- static char buf[NSTRING];/* buffer to hold tentative name */
- + #if USG | BSD | V7 | XENIX
- + char *home;
- + struct passwd *pwd;
- + #endif
-
- /* if we are executing a command line get the next arg and match it */
- if (clexec) {
- ***************
- *** 296,303 ****
- TTflush();
- if (buf[cpos - 1] == 0)
- return(buf);
- } else {
- ! if (cpos < maxlen && c > ' ') {
- buf[cpos++] = c;
- mlout(c);
- ++ttcol;
- --- 309,383 ----
- TTflush();
- if (buf[cpos - 1] == 0)
- return(buf);
- + #if USG | BSD | V7 | XENIX
- + } else if (c == '/' && type == CMP_FILENAME && buf[0] == '~') {
- + int i;
- + if (cpos == 1) {
- + if (home = (char *)getenv("HOME")) {
- + mlout('\b'); /* backup over ~ */
- + mlout(' ');
- + mlout('\b');
- + ttcol--;
- + TTflush();
- + strcpy(buf, home);
- + cpos = strlen(buf);
- + if (buf[cpos-1] != '/')
- + buf[cpos++] = '/';
- + for (i = 0; i < cpos; i++) {
- + mlout(buf[i]);
- + ttcol++;
- + }
- + TTflush();
- + } else
- + goto nextc;
- + } else {
- + buf[cpos] = '\0';
- + if (pwd = getpwnam(&buf[1])) {
- + while (cpos != 0) { /* kill */
- + mlout('\b'); /* line */
- + mlout(' ');
- + mlout('\b');
- + --cpos;
- + --ttcol;
- + }
- + TTflush();
- + strcpy(buf, pwd->pw_dir);
- + cpos = strlen(buf);
- + if (buf[cpos-1] != '/')
- + buf[cpos++] = '/';
- + for (i = 0; i < cpos; i++) {
- + mlout(buf[i]);
- + ttcol++;
- + }
- + TTflush();
- + } else
- + goto nextc;
- + }
- + } else if (c == '/' && type == CMP_FILENAME && buf[0] == '$') {
- + int i;
- + buf[cpos] = '\0';
- + if (home = (char *)getenv(&buf[1])) {
- + while (cpos != 0) { /* kill */
- + mlout('\b'); /* line */
- + mlout(' ');
- + mlout('\b');
- + --cpos;
- + --ttcol;
- + }
- + TTflush();
- + strcpy(buf, home);
- + cpos = strlen(buf);
- + buf[cpos++] = '/';
- + for (i = 0; i < cpos; i++) {
- + mlout(buf[i]);
- + ttcol++;
- + }
- + TTflush();
- + } else
- + goto nextc;
- + #endif
- } else {
- ! nextc: if (cpos < maxlen && c > ' ') {
- buf[cpos++] = c;
- mlout(c);
- ++ttcol;
- ***************
- *** 482,488 ****
- --- 562,572 ----
- while (fname) {
-
- /* is this a match? */
- + #if OS2
- + if (strnicmp(name,fname,*cpos) == 0) {
- + #else
- if (strncmp(name,fname,*cpos) == 0) {
- + #endif
-
- /* count the number of matches */
- matches++;
- ***************
- *** 515,524 ****
- --- 599,615 ----
- return;
- }
-
- + while (*cpos != 0) {
- + mlout('\b'); /* clear the old prefix out, just in case */
- + (*cpos)--; /* the case of the name has changed (OS/2) */
- + ttcol--;
- + }
- +
- /* the longestmatch array contains the longest match so copy and print it */
- for ( ; (*cpos < (NSTRING-1)) && (*cpos < longestlen); (*cpos)++) {
- name[*cpos] = longestmatch[*cpos];
- TTputc(name[*cpos]);
- + ttcol++;
- }
-
- name[*cpos] = 0;
- diff -cbr src-orig/keyboard.c src/keyboard.c
- *** src-orig/keyboard.c Mon Dec 16 11:42:20 1991
- --- src/keyboard.c Sun Dec 22 16:19:06 1991
- ***************
- *** 74,81 ****
- --- 74,85 ----
- /* some others as well */
- switch (c) {
-
- + case 1: return(ALTD | CTRL | '[');
- case 3: return(0); /* null */
- +
- case 0x0F: return(SHFT | CTRL | 'I'); /* backtab */
- + case 0x94: return(SPEC | CTRL | 'I'); /* ctrl tab */
- + case 0xA5: return(ALTD | CTRL | 'I'); /* alt tab */
-
- case 0x10: return(ALTD | 'Q');
- case 0x11: return(ALTD | 'W');
- diff -cbr src-orig/line.c src/line.c
- *** src-orig/line.c Mon Dec 16 11:42:20 1991
- --- src/line.c Sun Dec 22 16:19:08 1991
- ***************
- *** 838,843 ****
- --- 838,882 ----
- return(TRUE);
- }
-
- +
- + /*
- + * Delete the line the cursor is on
- + */
- + PASCAL NEAR delline(f, n)
- + int f, n;
- + {
- +
- + /* Use the lines associated with i in order to keep the
- + cursor in the same column when deleting a line. If you
- + comment these lines out then the cursor will revert to
- + the first column. */
- +
- + int i,i1;
- +
- + i1 = lastflag;
- + i = getccol(FALSE);
- + gotobol(f,n);
- +
- + lastflag = thisflag;
- + thisflag = 0;
- + setmark(f,n);
- +
- + lastflag = thisflag;
- + thisflag = 0;
- + forwline(f,n);
- +
- + lastflag = i1; /* This so if several lines are killed at the */
- + thisflag = 0; /* same time, they will all go into the same */
- + killregion(f, n); /* kill buffer */
- +
- + curgoal = i;
- + curwp->w_doto = getgoal(curwp->w_dotp);
- +
- + lastflag = i1;
- + return(TRUE);
- + }
- +
- +
- /*
- * Delete all of the text saved in the kill buffer. Called by commands when a
- * new kill context is being created. The kill buffer array is released, just
- diff -cbr src-orig/main.c src/main.c
- *** src-orig/main.c Mon Dec 16 11:42:20 1991
- --- src/main.c Sun Dec 22 16:19:08 1991
- ***************
- *** 218,227 ****
- #if WMCS
- if (argv[carg][0] == ':') {
- #else
- ! if (argv[carg][0] == '-') {
- #endif
- switch (argv[carg][1]) {
- /* Process Startup macroes */
- case 'c': /* -c for changable file */
- case 'C':
- viewflag = FALSE;
- --- 218,242 ----
- #if WMCS
- if (argv[carg][0] == ':') {
- #else
- ! if (argv[carg][0] == '-' || argv[carg][0] == '+') {
- ! /* ^^^^^^^^^^^^^^^^^^^^^^^ */
- ! /* added by J.Bayer to allow */
- ! /* compatability with vi */
- #endif
- + /* J.Bayer, 9/22/88 */
- + if (argv[carg][0] == '+') { /* + to emulate vi */
- + gotoflag = TRUE;
- + gline = asc_int(&argv[carg][1]);
- + } else
- switch (argv[carg][1]) {
- /* Process Startup macroes */
- + #ifdef BACKUP
- + /* J. Bayer 9/22/88 */
- + case 'b': /* -b for no bakfile creation */
- + case 'B':
- + bakfile = FALSE;
- + break;
- + #endif
- case 'c': /* -c for changable file */
- case 'C':
- viewflag = FALSE;
- ***************
- *** 881,886 ****
- --- 896,902 ----
- prefix |= META;
- prenum = n;
- predef = f;
- + thisflag = lastflag; /* jbayer */
- return(TRUE);
- }
-
- ***************
- *** 892,897 ****
- --- 908,914 ----
- prefix |= CTLX;
- prenum = n;
- predef = f;
- + thisflag = lastflag; /* jbayer */
- return(TRUE);
- }
-
- diff -cbr src-orig/mouse.c src/mouse.c
- *** src-orig/mouse.c Mon Dec 16 11:42:20 1991
- --- src/mouse.c Sun Dec 22 16:19:10 1991
- ***************
- *** 600,605 ****
- --- 600,607 ----
- int row;
-
- {
- + if (wp==NULL)
- + return(FALSE);
- if (row == wp->w_toprow+wp->w_ntrows && modeflag)
- return(TRUE);
- return(FALSE);
- diff -cbr src-orig/msdos.c src/msdos.c
- *** src-orig/msdos.c Mon Dec 16 11:42:20 1991
- --- src/msdos.c Sun Dec 22 16:19:12 1991
- ***************
- *** 27,32 ****
- --- 27,33 ----
- struct ffblk fileblock; /* structure for directory searches */
- #endif
- #if MSC | ZTC
- + #include <direct.h>
- #include <dos.h>
-
- struct find_t fileblock; /* structure for directory searches */
- ***************
- *** 42,47 ****
- --- 43,55 ----
- #include <process.h>
- #endif
-
- + #if MSC
- + #ifdef SWAPLIB
- + #include <swaplib.h>
- + #define spawnl(m, n1, n2, a, x) swap_spawnlp(n1, n2, a, x)
- + #endif
- + #endif
- +
- /* Some global variable */
- #define INBUFSIZ 40
- static int mexist; /* is the mouse driver installed? */
- ***************
- *** 114,120 ****
- #if MSC | TURBO | DTL | LATTICE | MWC
- int86x(0x21, &rg, &rg, &segreg);
- miaddr = (((long)segreg.es) << 16) + (long)rg.x.bx;
- ! if (miaddr == 0 || *(char * far)miaddr == 0xcf) {
- #endif
- #if ZTC
- int86x(0x21, &rg, &rg, &segreg);
- --- 122,128 ----
- #if MSC | TURBO | DTL | LATTICE | MWC
- int86x(0x21, &rg, &rg, &segreg);
- miaddr = (((long)segreg.es) << 16) + (long)rg.x.bx;
- ! if (miaddr == 0 || *(char far *) miaddr == 0xcf) {
- #endif
- #if ZTC
- int86x(0x21, &rg, &rg, &segreg);
- ***************
- *** 440,449 ****
- --- 448,459 ----
- movecursor(term.t_nrow, 0); /* Seek to last line. */
- TTflush();
- TTkclose();
- + TTclose(); /* -- ZU */
- shellprog("");
- #if WINDOW_TEXT
- refresh_screen(first_screen);
- #endif
- + TTopen(); /* -- ZU */
- TTkopen();
- sgarbf = TRUE;
- return(TRUE);
- ***************
- *** 470,476 ****
- --- 480,488 ----
- return(s);
- movecursor(term.t_nrow - 1, 0);
- TTkclose();
- + TTclose();
- shellprog(line);
- + TTopen();
- TTkopen();
-
- /* if we are interactive, pause here */
- ***************
- *** 493,499 ****
- */
-
- PASCAL NEAR execprg(f, n)
- !
- {
- register int s;
- char line[NLINE];
- --- 505,511 ----
- */
-
- PASCAL NEAR execprg(f, n)
- ! int f, n;
- {
- register int s;
- char line[NLINE];
- ***************
- *** 506,515 ****
- --- 518,529 ----
- return(s);
- movecursor(term.t_nrow - 1, 0);
- TTkclose();
- + TTclose(); /* -- ZU */
- execprog(line);
- #if WINDOW_TEXT
- refresh_screen(first_screen);
- #endif
- + TTopen(); /* -- ZU */
- TTkopen();
- /* if we are interactive, pause here */
- if (clexec == FALSE) {
- ***************
- *** 579,588 ****
- --- 593,604 ----
-
- /* execute the command */
- TTkclose();
- + TTclose();
- shellprog(line);
- #if WINDOW_TEXT
- refresh_screen(first_screen);
- #endif
- + TTopen();
- TTkopen();
- sgarbf = TRUE;
-
- ***************
- *** 657,666 ****
- --- 673,684 ----
- strcat(line," <fltinp >fltout");
- movecursor(term.t_nrow - 1, 0);
- TTkclose();
- + TTclose();
- shellprog(line);
- #if WINDOW_TEXT
- refresh_screen(first_screen);
- #endif
- + TTopen();
- TTkopen();
- sgarbf = TRUE;
- s = TRUE;
- ***************
- *** 711,720 ****
- --- 729,742 ----
- char *getenv();
-
- /* detect current switch character and set us up to use it */
- + #if 0
- regs.h.ah = 0x37; /* get setting data */
- regs.h.al = 0x00; /* get switch character */
- intdos(®s, ®s);
- swchar = (char)regs.h.dl;
- + #else
- + swchar = '/';
- + #endif
-
- /* get name of system shell */
- if ((shell = getenv("COMSPEC")) == NULL) {
- ***************
- *** 754,764 ****
- char *cmd; /* Incoming command line to execute */
-
- {
- ! char *sp; /* temporary string pointer */
- char f1[38]; /* FCB1 area (not initialized */
- char f2[38]; /* FCB2 area (not initialized */
- - char prog[NSTRING]; /* program filespec */
- - char tail[NSTRING]; /* command tail with length byte */
- union REGS regs; /* parameters for dos call */
- #if MWC == 0
- struct SREGS segreg; /* segment registers for dis call */
- --- 776,784 ----
- char *cmd; /* Incoming command line to execute */
-
- {
- ! #ifndef NEWSPAWN
- char f1[38]; /* FCB1 area (not initialized */
- char f2[38]; /* FCB2 area (not initialized */
- union REGS regs; /* parameters for dos call */
- #if MWC == 0
- struct SREGS segreg; /* segment registers for dis call */
- ***************
- *** 769,774 ****
- --- 789,799 ----
- char *fcb1; /* 4 byte pointer to FCB at PSP+5Ch */
- char *fcb2; /* 4 byte pointer to FCB at PSP+6Ch */
- } pblock;
- + #endif
- + char *sp; /* temporary string pointer */
- + char prog[NSTRING]; /* program filespec */
- + char tail[NSTRING]; /* command tail with length byte */
- + char curdir[NFILEN]; /* current directory save space */
-
- /* parse the command name from the command line */
- sp = prog;
- ***************
- *** 776,781 ****
- --- 801,807 ----
- *sp++ = *cmd++;
- *sp = 0;
-
- + #ifndef NEWSPAWN
- /* and parse out the command tail */
- while (*cmd && ((*cmd == ' ') || (*cmd == '\t')))
- ++cmd;
- ***************
- *** 782,787 ****
- --- 808,814 ----
- *tail = (char)(strlen(cmd)); /* record the byte length */
- strcpy(&tail[1], cmd);
- strcat(&tail[1], "\r");
- + #endif
-
- /* look up the program on the path trying various extentions */
- if ((sp = flook(prog, TRUE)) == NULL)
- ***************
- *** 792,797 ****
- --- 819,827 ----
- }
- strcpy(prog, sp);
-
- + getcwd(curdir, sizeof(curdir)); /* save current directory */
- +
- + #ifndef NEWSPAWN
- #if MWC == 0
- /* get a pointer to this PSPs environment segment number */
- segread(&segreg);
- ***************
- *** 858,863 ****
- --- 888,897 ----
- } else
- rval = -_doserrno; /* failed child call */
- #endif
- + #else
- + rval = spawnl(P_WAIT, prog, prog, cmd, NULL);
- + #endif
- + chdir( curdir ); /* restore current directory */
- return((rval < 0) ? FALSE : TRUE);
- }
-
- ***************
- *** 1052,1054 ****
- --- 1086,1105 ----
- #endif
- #endif
- #endif
- +
- + #if CHDIR
- + changecwd(dir)
- + char *dir;
- + {
- + char drive[5];
- + unsigned total;
- +
- + _splitpath(dir, drive, NULL, NULL, NULL);
- +
- + if ( drive[0] != 0 )
- + _dos_setdrive(toupper(drive[0]) - '@', &total);
- +
- + chdir(dir);
- + }
- + #endif
- +
- diff -cbr src-orig/os2.c src/os2.c
- *** src-orig/os2.c Mon Dec 16 11:42:20 1991
- --- src/os2.c Sun Dec 22 16:42:30 1991
- ***************
- *** 11,16 ****
- --- 11,18 ----
-
- */
-
- + #define INCL_BASE
- + #define INCL_NOPM
- #define INCL_DOS
- #include "os2.h"
-
- ***************
- *** 19,35 ****
- #undef PASCAL
- #undef NEAR
- #undef HIBYTE
-
- #include "estruct.h"
- #include "eproto.h"
-
- #if OS2
- - #define INCL_BASE
-
- #include "elang.h"
- #include "edef.h"
-
-
- /*
- * Create a subjob with a copy of the command intrepreter in it. When the
- * command interpreter exits, mark the screen as garbage so that you do a full
- --- 21,39 ----
- #undef PASCAL
- #undef NEAR
- #undef HIBYTE
- + #undef COLOR
-
- #include "estruct.h"
- #include "eproto.h"
-
- #if OS2
-
- #include "elang.h"
- #include "edef.h"
-
- + #include <process.h>
-
- +
- /*
- * Create a subjob with a copy of the command intrepreter in it. When the
- * command interpreter exits, mark the screen as garbage so that you do a full
- ***************
- *** 37,42 ****
- --- 41,47 ----
- * Under some (unknown) condition, you don't get one free when DCL starts up.
- */
- spawncli(f, n)
- + int f, n;
- {
- /* don't allow this command if restricted */
- if (restflag)
- ***************
- *** 58,63 ****
- --- 63,69 ----
- * done. Bound to "C-X !".
- */
- spawn(f, n)
- + int f, n;
- {
- register int s;
- char line[NLINE];
- ***************
- *** 90,95 ****
- --- 96,102 ----
- */
-
- execprg(f, n)
- + int f, n;
- {
- register int s;
- char line[NLINE];
- ***************
- *** 121,126 ****
- --- 128,134 ----
- * MicroEMACS don't try to use the same file.
- */
- pipecmd(f, n)
- + int f, n;
- {
- register WINDOW *wp; /* pointer to new window */
- register BUFFER *bp; /* pointer to buffer to zot */
- ***************
- *** 211,217 ****
- * MicroEMACS don't try to use the same file.
- */
- filter(f, n)
- !
- {
- register int s; /* return status from CLI */
- register BUFFER *bp; /* pointer to buffer to zot */
- --- 219,225 ----
- * MicroEMACS don't try to use the same file.
- */
- filter(f, n)
- ! int f, n;
- {
- register int s; /* return status from CLI */
- register BUFFER *bp; /* pointer to buffer to zot */
- ***************
- *** 308,318 ****
- return(FALSE); /* No shell located */
- }
-
- ! /*
- ! * We are actually setting up a shell inside a shell here.
- ! * Is there a better way?
- ! */
- ! return(system(shell));
- }
-
-
- --- 316,322 ----
- return(FALSE); /* No shell located */
- }
-
- ! return(spawnl(P_WAIT, shell, shell, NULL));
- }
-
-
- ***************
- *** 324,330 ****
- char failName[NFILEN];
- char prog[NSTRING]; /* name of program */
- USHORT i;
- ! PRESULTCODES results;
-
-
- /*
- --- 328,334 ----
- char failName[NFILEN];
- char prog[NSTRING]; /* name of program */
- USHORT i;
- ! RESULTCODES results;
-
-
- /*
- ***************
- *** 352,360 ****
- --- 356,367 ----
- if ((sp = flook(prog, TRUE)) == NULL)
- if ((sp = flook(strcat(prog, ".exe"), TRUE)) == NULL) {
- strcpy(&prog[strlen(prog)-4], ".com");
- + if ((sp = flook(prog, TRUE)) == NULL) {
- + strcpy(&prog[strlen(prog)-4], ".cmd");
- if ((sp = flook(prog, TRUE)) == NULL)
- return(FALSE);
- }
- + }
- strcpy(prog, sp);
-
- /*
- ***************
- *** 361,374 ****
- * Execute the program synchronously. We wait for child
- * to return.
- */
- ! return (0 == DosExecPgm( failName, NFILEN, EXEC_SYNC,
- ! args, 0, results, prog));
- }
-
-
- /* FILE Directory routines */
-
- ! FILEFINDBUF pBuf; /* buffer to hold file information */
- HDIR hDir; /* directory handle */
- int num_found; /* number of directory entries found/to find */
-
- --- 368,381 ----
- * Execute the program synchronously. We wait for child
- * to return.
- */
- ! return (0 == DosExecPgm(failName, sizeof(failName), EXEC_SYNC,
- ! args, 0, &results, prog));
- }
-
-
- /* FILE Directory routines */
-
- ! FILEFINDBUF fbuf; /* buffer to hold file information */
- HDIR hDir; /* directory handle */
- int num_found; /* number of directory entries found/to find */
-
- ***************
- *** 415,430 ****
-
- /* and call for the first file */
- num_found = 1;
- ! hDir = HDIR_CREATE;
- if (DosFindFirst(fname, &hDir, FILE_NORMAL|FILE_DIRECTORY,
- ! &pBuf, sizeof(pBuf), &num_found, 0L) != 0)
- return(NULL);
-
- /* return the first file name! */
- strcpy(rbuf, path);
- ! strcat(rbuf, pBuf.achName);
- ! mklower(rbuf);
- ! if (pBuf.attrFile == FILE_DIRECTORY)
- strcat(rbuf, DIRSEPSTR);
- return(rbuf);
- }
- --- 422,437 ----
-
- /* and call for the first file */
- num_found = 1;
- ! hDir = HDIR_SYSTEM;
- if (DosFindFirst(fname, &hDir, FILE_NORMAL|FILE_DIRECTORY,
- ! &fbuf, sizeof(fbuf), &num_found, 0L) != 0)
- return(NULL);
-
- /* return the first file name! */
- strcpy(rbuf, path);
- ! strcat(rbuf, fbuf.achName);
- ! /* mklower(rbuf); */
- ! if (fbuf.attrFile == FILE_DIRECTORY)
- strcat(rbuf, DIRSEPSTR);
- return(rbuf);
- }
- ***************
- *** 438,451 ****
- char fname[NFILEN]; /* file/path for DOS call */
-
- /* and call for the next file */
- ! if (DosFindNext(hDir, (void *)&pBuf, sizeof(pBuf), &num_found) != 0)
- return(NULL);
-
- /* return the first file name! */
- strcpy(rbuf, path);
- ! strcat(rbuf, pBuf.achName);
- ! mklower(rbuf);
- ! if (pBuf.attrFile == FILE_DIRECTORY)
- strcat(rbuf, DIRSEPSTR);
- return(rbuf);
- }
- --- 445,458 ----
- char fname[NFILEN]; /* file/path for DOS call */
-
- /* and call for the next file */
- ! if (DosFindNext(hDir, (void *)&fbuf, sizeof(fbuf), &num_found) != 0)
- return(NULL);
-
- /* return the first file name! */
- strcpy(rbuf, path);
- ! strcat(rbuf, fbuf.achName);
- ! /* mklower(rbuf); */
- ! if (fbuf.attrFile == FILE_DIRECTORY)
- strcat(rbuf, DIRSEPSTR);
- return(rbuf);
- }
- ***************
- *** 465,567 ****
- return(sp);
- }
-
- ! #if OBSOLETE
- ! /* extcode: resolve MSDOS extended character codes
- ! encoding the proper sequences into emacs
- ! printable character specifications
- ! */
- !
- ! int extcode(
- ! unsigned c /* byte following a zero extended char byte */
- ! )
- !
- ! {
- ! /* function keys 1 through 9 */
- ! if (c >= 59 && c < 68)
- ! return(SPEC | c - 58 + '0');
- !
- ! /* function key 10 */
- ! if (c == 68)
- ! return(SPEC | '0');
- !
- ! /* shifted function keys */
- ! if (c >= 84 && c < 93)
- ! return(SPEC | SHFT | c - 83 + '0');
- ! if (c == 93)
- ! return(SPEC | SHFT | '0');
- !
- ! /* control function keys */
- ! if (c >= 94 && c < 103)
- ! return(SPEC | CTRL | c - 93 + '0');
- ! if (c == 103)
- ! return(SPEC | CTRL | '0');
- !
- ! /* ALTed function keys */
- ! if (c >= 104 && c < 113)
- ! return(SPEC | ALTD | c - 103 + '0');
- ! if (c == 113)
- ! return(SPEC | ALTD | '0');
- !
- ! /* ALTed number keys */
- ! if (c >= 120 && c < 129)
- ! return(ALTD | c - 119 + '0');
- ! if (c == 130)
- ! return(ALTD | '0');
- !
- ! /* some others as well */
- ! switch (c) {
- ! case 3: return(0); /* null */
- ! case 15: return(SHFT | CTRL | 'I'); /* backtab */
- !
- ! case 16: return(ALTD | 'Q');
- ! case 17: return(ALTD | 'W');
- ! case 18: return(ALTD | 'E');
- ! case 19: return(ALTD | 'R');
- ! case 20: return(ALTD | 'T');
- ! case 21: return(ALTD | 'Y');
- ! case 22: return(ALTD | 'U');
- ! case 23: return(ALTD | 'I');
- ! case 24: return(ALTD | 'O');
- ! case 25: return(ALTD | 'P');
- !
- ! case 30: return(ALTD | 'A');
- ! case 31: return(ALTD | 'S');
- ! case 32: return(ALTD | 'D');
- ! case 33: return(ALTD | 'F');
- ! case 34: return(ALTD | 'G');
- ! case 35: return(ALTD | 'H');
- ! case 36: return(ALTD | 'J');
- ! case 37: return(ALTD | 'K');
- ! case 38: return(ALTD | 'L');
- !
- ! case 44: return(ALTD | 'Z');
- ! case 45: return(ALTD | 'X');
- ! case 46: return(ALTD | 'C');
- ! case 47: return(ALTD | 'V');
- ! case 48: return(ALTD | 'B');
- ! case 49: return(ALTD | 'N');
- ! case 50: return(ALTD | 'M');
- !
- ! case 71: return(SPEC | '<'); /* HOME */
- ! case 72: return(SPEC | 'P'); /* cursor up */
- ! case 73: return(SPEC | 'Z'); /* page up */
- ! case 75: return(SPEC | 'B'); /* cursor left */
- ! case 77: return(SPEC | 'F'); /* cursor right */
- ! case 79: return(SPEC | '>'); /* end */
- ! case 80: return(SPEC | 'N'); /* cursor down */
- ! case 81: return(SPEC | 'V'); /* page down */
- ! case 82: return(SPEC | 'C'); /* insert */
- ! case 83: return(SPEC | 'D'); /* delete */
- ! case 115: return(SPEC | CTRL | 'B'); /* control left */
- ! case 116: return(SPEC | CTRL | 'F'); /* control right */
- ! case 117: return(SPEC | CTRL | '>'); /* control END */
- ! case 118: return(SPEC | CTRL | 'V'); /* control page down */
- ! case 119: return(SPEC | CTRL | '<'); /* control HOME */
- ! case 132: return(SPEC | CTRL | 'Z'); /* control page up */
- ! }
-
- ! return(ALTD | c);
- }
- ! #endif /* obsolete */
- #endif
-
- --- 472,492 ----
- return(sp);
- }
-
- !
- ! #if CHDIR
- ! changecwd(dir)
- ! char *dir;
- ! {
- ! char drive[5];
-
- ! _splitpath(dir, drive, NULL, NULL, NULL);
- !
- ! if ( drive[0] != 0 )
- ! DosSelectDisk(toupper(drive[0]) - '@');
- !
- ! chdir(dir);
- }
- ! #endif
- !
- #endif
-
- diff -cbr src-orig/os2npm.c src/os2npm.c
- *** src-orig/os2npm.c Mon Dec 16 11:42:20 1991
- --- src/os2npm.c Sun Dec 22 16:19:16 1991
- ***************
- *** 12,17 ****
- --- 12,18 ----
- */
-
- #define INCL_BASE
- + #define INCL_NOPM
- #include <os2.h>
-
- #define termdef 1 /* don't define "term" external */
- ***************
- *** 18,23 ****
- --- 19,25 ----
-
- #include <stdio.h>
-
- + #undef COLOR
- #undef PASCAL
- #undef NEAR
- #undef HIBYTE
- ***************
- *** 33,41 ****
- * We need COLOR as defined in estruct.h, so edit it out of os2def.h.
- */
- #include <conio.h>
-
- ! #define NROW 50 /* Screen size. */
- ! #define NCOL 80 /* Edit if you want to. */
- #define MARGIN 8 /* size of minimim margin and */
- #define SCRSIZ 64 /* scroll size for extended lines */
- #define NPAUSE 100 /* # times thru update to pause */
- --- 35,44 ----
- * We need COLOR as defined in estruct.h, so edit it out of os2def.h.
- */
- #include <conio.h>
- + #include <stdlib.h>
-
- ! #define NROW 128 /* Screen size. */
- ! #define NCOL 140 /* Edit if you want to. */
- #define MARGIN 8 /* size of minimim margin and */
- #define SCRSIZ 64 /* scroll size for extended lines */
- #define NPAUSE 100 /* # times thru update to pause */
- ***************
- *** 47,56 ****
-
- #define NDRIVE 4 /* number of video modes */
-
- ! int dtype = -1; /* current video mode */
- ! char drvname[][8] = { /* names of video modes */
- ! "CGA", "MONO", "EGA", "VGA"
- ! };
-
- /* Forward references. */
-
- --- 50,57 ----
-
- #define NDRIVE 4 /* number of video modes */
-
- ! int mono = 0;
- !
-
- /* Forward references. */
-
- ***************
- *** 84,91 ****
- } os2rcell = {0, 0x07};
-
- static struct { /* initial states */
- - USHORT ansiState; /* ANSI translation */
- - VIOCONFIGINFO vioConfigInfo; /* video configuration */
- VIOMODEINFO vioModeInfo; /* video mode */
- KBDINFO kbdInfo; /* keyboard info */
- } initial;
- --- 85,90 ----
- ***************
- *** 153,159 ****
- PASCAL NEAR os2fcol(
- int color) /* color to set */
- {
- ! if (dtype != CDMONO)
- cfcolor = ctrans[color];
- else
- cfcolor = 7;
- --- 152,158 ----
- PASCAL NEAR os2fcol(
- int color) /* color to set */
- {
- ! if (!mono)
- cfcolor = ctrans[color];
- else
- cfcolor = 7;
- ***************
- *** 175,181 ****
- PASCAL NEAR os2bcol(
- int color) /* color to set */
- {
- ! if (dtype != CDMONO)
- cbcolor = ctrans[color];
- else
- cbcolor = 0;
- --- 174,180 ----
- PASCAL NEAR os2bcol(
- int color) /* color to set */
- {
- ! if (!mono)
- cbcolor = ctrans[color];
- else
- cbcolor = 0;
- ***************
- *** 202,208 ****
- --- 201,225 ----
- {
- os2row = row;
- os2col = col;
- + if ( _osmode == OS2_MODE )
- VioSetCurPos(os2row, os2col, 0);
- + else
- + _asm
- + {
- + mov ah,2
- + mov bh,0
- + mov dh,byte ptr os2row
- + mov dl,byte ptr os2col
- + int 0x10
- + }
- + }
- +
- + os2vmove( /* speedup for special case in updateline */
- + int row,
- + int col)
- + {
- + os2row = row;
- + os2col = col;
- }
-
-
- ***************
- *** 215,221 ****
- {
- if (lvbMin <= lvbMax) { /* did anything change? */
- VioShowBuf(lvbMin * 2, (lvbMax - lvbMin + 1) * 2, 0);
- ! VioSetCurPos(os2row, os2col, 0);
- }
- lvbMin = lvbLen;
- lvbMax = 0;
- --- 232,238 ----
- {
- if (lvbMin <= lvbMax) { /* did anything change? */
- VioShowBuf(lvbMin * 2, (lvbMax - lvbMin + 1) * 2, 0);
- ! os2move(os2row, os2col);
- }
- lvbMin = lvbLen;
- lvbMax = 0;
- ***************
- *** 256,262 ****
-
- /* Function, edit or alt- key? */
- if (keyInfo.chChar == 0 || keyInfo.chChar == 0xE0) {
- ! nextc = extcode(keyInfo.chScan); /* hold on to scan code */
- return(0);
- }
- return(keyInfo.chChar & 255);
- --- 273,280 ----
-
- /* Function, edit or alt- key? */
- if (keyInfo.chChar == 0 || keyInfo.chChar == 0xE0) {
- ! nextc = extcode(keyInfo.chScan | (keyInfo.chChar << 8));
- ! /* hold on to scan code */
- return(0);
- }
- return(keyInfo.chChar & 255);
- ***************
- *** 294,300 ****
- USHORT i;
-
- if (c == '\n' || c == '\r') { /* returns and linefeeds */
- ! return;
- }
- if (c == '\b') { /* backspace */
- cell = ' ' | (revflag ? *(USHORT *)&os2rcell : *(USHORT *)&os2cell);
- --- 312,318 ----
- USHORT i;
-
- if (c == '\n' || c == '\r') { /* returns and linefeeds */
- ! return 0;
- }
- if (c == '\b') { /* backspace */
- cell = ' ' | (revflag ? *(USHORT *)&os2rcell : *(USHORT *)&os2cell);
- ***************
- *** 347,353 ****
- USHORT i;
-
- #if COLOR
- ! if (dtype != CDMONO)
- cell |= (ctrans[gbcolor] << 4 | ctrans[gfcolor]) << 8;
- else
- cell |= 0x0700;
- --- 365,371 ----
- USHORT i;
-
- #if COLOR
- ! if (!mono)
- cell |= (ctrans[gbcolor] << 4 | ctrans[gfcolor]) << 8;
- else
- cell |= 0x0700;
- ***************
- *** 382,425 ****
- /* Change the screen resolution. */
- /*----------------------------------------------------------------------*/
-
- PASCAL NEAR os2cres(char *res) /* name of desired video mode */
- {
- ! USHORT err;
- ! int type; /* video mode type */
- VIOMODEINFO vioModeInfo;
-
- vioModeInfo = initial.vioModeInfo;
-
- ! /* From the name, find the type of video mode. */
- ! for (type = 0; type < NDRIVE; type++) {
- ! if (strcmp(res, drvname[type]) == 0)
- ! break;
- ! }
- ! if (type == NDRIVE)
- ! return(FALSE); /* not a mode we know about */
- !
- !
- ! switch (type) {
- ! case CDMONO:
- ! case CDCGA:
- ! vioModeInfo.row = 25;
- ! break;
- ! case CDEGA:
- ! vioModeInfo.row = 43;
- ! break;
- ! case CDVGA:
- ! vioModeInfo.row = 50;
- ! break;
- ! }
-
- ! if (VioSetMode(&vioModeInfo, 0)) /* change modes */
- ! return(FALSE); /* couldn't do it */
-
- newsize(TRUE, vioModeInfo.row);
-
- /* reset the $sres environment variable */
- ! strcpy(sres, drvname[type]);
- ! dtype = type; /* set the current mode */
-
- return TRUE;
- }
- --- 400,461 ----
- /* Change the screen resolution. */
- /*----------------------------------------------------------------------*/
-
- + static int checkmode(VIOMODEINFO *vmi, int scans, int lines, int font)
- + {
- + int diff = scans - lines * font;
- +
- + if ( (0 <= diff) && (diff < font) )
- + {
- + vmi -> vres = scans;
- + vmi -> row = lines;
- + return(TRUE);
- + }
- + else
- + return(FALSE);
- +
- + }
- +
- PASCAL NEAR os2cres(char *res) /* name of desired video mode */
- {
- ! USHORT lines;
- VIOMODEINFO vioModeInfo;
-
- + if ( ((lines = atoi(res)) < 16) || (lines >= NROW) )
- + return(FALSE);
- +
- vioModeInfo = initial.vioModeInfo;
- + vioModeInfo.vres = vioModeInfo.vres / vioModeInfo.row * lines;
- + vioModeInfo.row = lines;
-
- ! if (VioSetMode(&vioModeInfo, 0))
- ! {
- ! /* only 350, 400 or 480 scan lines allowed ? */
- ! /* (i.e. full screen) */
- ! vioModeInfo = initial.vioModeInfo;
- !
- ! if ( !(checkmode(&vioModeInfo, 480, lines, 16) ||
- ! checkmode(&vioModeInfo, 480, lines, 14) ||
- ! checkmode(&vioModeInfo, 480, lines, 8) ||
- ! checkmode(&vioModeInfo, 400, lines, 16) ||
- ! checkmode(&vioModeInfo, 400, lines, 14) ||
- ! checkmode(&vioModeInfo, 400, lines, 8) ||
- ! checkmode(&vioModeInfo, 350, lines, 16) ||
- ! checkmode(&vioModeInfo, 350, lines, 14) ||
- ! checkmode(&vioModeInfo, 350, lines, 8)) )
- ! return(FALSE);
-
- ! vioModeInfo.hres = (vioModeInfo.vres == 350) ? 640 : 720;
-
- + if (VioSetMode(&vioModeInfo, 0))
- + return(FALSE);
- + }
- +
- + VioGetMode(&vioModeInfo, 0);
- + term.t_ncol = vioModeInfo.col;
- newsize(TRUE, vioModeInfo.row);
-
- /* reset the $sres environment variable */
- ! itoa(vioModeInfo.row, sres, 10);
-
- return TRUE;
- }
- ***************
- *** 454,486 ****
-
- PASCAL NEAR os2open()
- {
- ! initial.vioConfigInfo.cb = 0x0A;
- ! VioGetConfig(0, &initial.vioConfigInfo, 0);
- ! switch (initial.vioConfigInfo.adapter) {
- ! case 3:
- ! dtype = CDVGA;
- ! break;
- ! case 2:
- ! dtype = CDEGA;
- ! break;
- ! case 1:
- ! dtype = CDCGA;
- ! break;
- ! case 0:
- ! default:
- ! dtype = CDMONO;
- ! }
- ! strcpy(sres, drvname[dtype]);
-
- ! initial.vioModeInfo.cb = 0x0E;
- VioGetMode(&initial.vioModeInfo, 0);
- ! newsize(TRUE, initial.vioModeInfo.row);
-
- ! VioGetAnsi(&initial.ansiState, 0);
- VioGetBuf((PULONG)&lvb, &lvbLen, 0);
- lvbMin = lvbLen;
- lvbMax = 0;
-
- revexist = TRUE;
- revflag = FALSE;
- }
- --- 490,531 ----
-
- PASCAL NEAR os2open()
- {
- ! VIOINTENSITY vi;
- ! PFNSIGHANDLER oldhandler;
- ! USHORT oldact;
-
- ! initial.vioModeInfo.cb = sizeof(initial.vioModeInfo);
- VioGetMode(&initial.vioModeInfo, 0);
- ! mono = (initial.vioModeInfo.color == COLORS_2);
- !
- ! if ( _osmode == OS2_MODE )
- ! {
- ! term.t_ncol = initial.vioModeInfo.col;
- ! term.t_nrow = initial.vioModeInfo.row;
- ! }
- ! else
- ! {
- ! term.t_ncol = *((char *) 0x0040004AL);
- ! term.t_nrow = *((char *) 0x00400084L) + 1;
- ! }
- !
- ! newsize(TRUE, term.t_nrow);
- ! itoa(term.t_nrow + 1, sres, 10);
-
- ! vi.cb = sizeof(vi);
- ! vi.type = 2;
- ! vi.fs = 1;
- ! VioSetState(&vi, 0);
- !
- VioGetBuf((PULONG)&lvb, &lvbLen, 0);
- lvbMin = lvbLen;
- lvbMax = 0;
-
- + DosSetSigHandler((PFNSIGHANDLER) NULL, &oldhandler, &oldact,
- + SIGA_IGNORE, SIG_CTRLBREAK);
- + DosSetSigHandler((PFNSIGHANDLER) NULL, &oldhandler, &oldact,
- + SIGA_IGNORE, SIG_CTRLC);
- +
- revexist = TRUE;
- revflag = FALSE;
- }
- ***************
- *** 493,502 ****
-
- PASCAL NEAR os2close()
- {
- ! VioSetAnsi(initial.ansiState, 0);
- VioSetMode(&initial.vioModeInfo, 0);
- VioSetCurPos(initial.vioModeInfo.row - 1,
- initial.vioModeInfo.col - 1, 0);
- }
-
- /*----------------------------------------------------------------------*/
- --- 538,551 ----
-
- PASCAL NEAR os2close()
- {
- ! if ( _osmode == OS2_MODE )
- ! {
- VioSetMode(&initial.vioModeInfo, 0);
- VioSetCurPos(initial.vioModeInfo.row - 1,
- initial.vioModeInfo.col - 1, 0);
- + }
- + else
- + os2move(term.t_nrow - 1, term.t_ncol - 1);
- }
-
- /*----------------------------------------------------------------------*/
- ***************
- *** 508,514 ****
- {
- KBDINFO kbdInfo;
-
- ! initial.kbdInfo.cb = 0x000A;
- KbdGetStatus(&initial.kbdInfo, 0);
- kbdInfo = initial.kbdInfo;
- kbdInfo.fsMask &= ~0x0001; /* not echo on */
- --- 557,563 ----
- {
- KBDINFO kbdInfo;
-
- ! initial.kbdInfo.cb = sizeof(initial.kbdInfo);
- KbdGetStatus(&initial.kbdInfo, 0);
- kbdInfo = initial.kbdInfo;
- kbdInfo.fsMask &= ~0x0001; /* not echo on */
- diff -cbr src-orig/random.c src/random.c
- *** src-orig/random.c Mon Dec 16 11:42:22 1991
- --- src/random.c Sun Dec 22 16:19:18 1991
- ***************
- *** 265,270 ****
- --- 265,289 ----
- stabsize = n;
- return(TRUE);
- }
- +
- + #if SOFTAB
- +
- + if (curwp->w_bufp->b_mode & MDOVER) {
- + if (! tabsize) {
- + curgoal = getccol(FALSE) | 0x07;
- + curgoal++;
- + }
- + else {
- + curgoal = tabsize - (getccol(FALSE) % tabsize) + getccol(FALSE);
- + }
- +
- + curwp->w_doto = getgoal(curwp->w_dotp);
- + return(TRUE);
- + }
- +
- + #endif
- +
- +
- if (!stabsize)
- return(linsert(1, '\t'));
- return(linsert(stabsize - (getccol(FALSE) % stabsize), ' '));
- ***************
- *** 451,456 ****
- --- 470,497 ----
- return(s);
- }
-
- +
- + /*
- + * Toggle overwrite mode. Bound to the ins key.
- + */
- + PASCAL NEAR toggleovermode(f, n) /* toggle overwrite mode */
- +
- + int f, n; /* default and argument */
- +
- + {
- + if (curwp->w_bufp->b_mode & MDOVER)
- + {
- + curwp->w_bufp->b_mode &= ~MDOVER;
- + curwp->w_bufp->b_mode |= MDREPL;
- + }
- + else if (curwp->w_bufp->b_mode & MDREPL)
- + curwp->w_bufp->b_mode &= ~MDREPL;
- + else
- + curwp->w_bufp->b_mode |= MDOVER;
- + upmode();
- + }
- +
- +
- /*
- * Insert a newline. Bound to "C-M". If we are in CMODE, do automatic
- * indentation as specified.
- ***************
- *** 462,467 ****
- --- 503,517 ----
- {
- register int s;
-
- + #if SOFTAB
- +
- + if (curwp->w_bufp->b_mode & MDOVER) {
- + gotobol(f,1);
- + thisflag = 0;
- + return(forwline(f,1));
- + }
- + #endif
- +
- if (curbp->b_mode&MDVIEW) /* don't allow this command if */
- return(rdonly()); /* we are in read only mode */
- if (n < 0)
- ***************
- *** 868,876 ****
- register char *scan; /* scanning pointer to convert prompt */
- register int i; /* loop index */
- register int status; /* error return on input */
- - #if COLOR
- register int uflag; /* was modename uppercase? */
- - #endif
- char prompt[50]; /* string to prompt user with */
- char cbuf[NPAT]; /* buffer to recieve mode name into */
-
- --- 918,924 ----
- ***************
- *** 898,906 ****
- /* make it uppercase */
-
- scan = cbuf;
- - #if COLOR
- uflag = (*scan >= 'A' && *scan <= 'Z');
- - #endif
- while (*scan)
- uppercase(scan++);
-
- --- 946,952 ----
- diff -cbr src-orig/unix.c src/unix.c
- *** src-orig/unix.c Mon Dec 16 11:42:24 1991
- --- src/unix.c Sun Dec 22 17:12:10 1991
- ***************
- *** 802,807 ****
- --- 802,810 ----
- int status;
- struct capbind * cb;
- struct keybind * kp;
- + #ifdef TIOCGWINSZ
- + struct winsize win;
- + #endif
-
- char * getenv(), * tgetstr();
- #if HPUX
- ***************
- *** 831,840 ****
- exit(1);
- }
-
- /* Get size from termcap */
- term.t_nrow = tgetnum("li") - 1;
- term.t_ncol = tgetnum("co");
- ! if (term.t_nrow < 3 || term.t_ncol < 3) {
- puts("Screen size is too small!");
- exit(1);
- }
- --- 834,861 ----
- exit(1);
- }
-
- + term.t_nrow = -1;
- + term.t_ncol = -1;
- +
- + #ifdef TIOCGWINSZ
- + if (ioctl (0, TIOCGWINSZ, &win) == 0) {
- + if (win.ws_col)
- + term.t_ncol = win.ws_col;
- + else
- + term.t_ncol = -1;
- + if (win.ws_row)
- + term.t_nrow = win.ws_row - 1;
- + else
- + term.t_nrow = -1;
- + }
- + #endif /* TIOCGWINSZ */
- +
- /* Get size from termcap */
- + if ( term.t_nrow == -1 )
- term.t_nrow = tgetnum("li") - 1;
- + if ( term.t_ncol == -1 )
- term.t_ncol = tgetnum("co");
- ! if (term.t_nrow < 15 || term.t_ncol < 64) {
- puts("Screen size is too small!");
- exit(1);
- }
- ***************
- *** 1537,1542 ****
- --- 1558,1571 ----
- /* Return the next file name! */
- return(rbuf);
- }
- +
- + #if CHDIR
- + changecwd(dir)
- + char *dir;
- + {
- + chdir(dir);
- + }
- + #endif
-
- #if FLABEL
- int fnclabel(f, n) /* label a function key */
- diff -cbr src-orig/window.c src/window.c
- *** src-orig/window.c Mon Dec 16 11:42:24 1991
- --- src/window.c Sun Dec 22 16:19:20 1991
- ***************
- *** 37,43 ****
- --- 37,46 ----
-
- {
- if (f == FALSE)
- + {
- sgarbf = TRUE;
- + thisflag = lastflag; /* jbayer */
- + }
- else
- {
- curwp->w_force = 0; /* Center dot. */
-