diff --git a/Makefile b/Makefile index 3ee359f..599ce46 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ -# Makefile for emacs, updated Thu, Oct 10, 2013 1:03:16 PM +# Makefile for emacs, updated Wed, Jun 18, 2014 2:24:32 PM -SRC=ansi.c basic.c bind.c bindable.c buffer.c crypt.c display.c ebind.c eval.c exec.c execute.c file.c fileio.c flook.c ibmpc.c input.c isearch.c line.c lock.c log.c main.c names.c pklock.c posix.c random.c region.c search.c spawn.c tcap.c termio.c utf8.c vmsvt.c vt52.c window.c word.c wrapper.c -OBJ=ansi.o basic.o bind.o bindable.o buffer.o crypt.o display.o ebind.o eval.o exec.o execute.o file.o fileio.o flook.o ibmpc.o input.o isearch.o line.o lock.o log.o main.o names.o pklock.o posix.o random.o region.o search.o spawn.o tcap.o termio.o utf8.o vmsvt.o vt52.o window.o word.o wrapper.o -HDR=basic.h bind.h bindable.h buffer.h crypt.h defines.h display.h ebind.h estruct.h eval.h exec.h execute.h file.h fileio.h flook.h input.h isearch.h line.h lock.h log.h names.h pklock.h random.h region.h retcode.h search.h spawn.h terminal.h termio.h utf8.h version.h window.h word.h wrapper.h +SRC=ansi.c basic.c bind.c bindable.c buffer.c crypt.c display.c ebind.c eval.c exec.c execute.c file.c fileio.c flook.c ibmpc.c input.c isearch.c line.c lock.c log.c main.c mingw32.c names.c pklock.c posix.c random.c region.c search.c spawn.c tcap.c termio.c utf8.c vmsvt.c vt52.c window.c word.c wrapper.c wscreen.c +OBJ=ansi.o basic.o bind.o bindable.o buffer.o crypt.o display.o ebind.o eval.o exec.o execute.o file.o fileio.o flook.o ibmpc.o input.o isearch.o line.o lock.o log.o main.o mingw32.o names.o pklock.o posix.o random.o region.o search.o spawn.o tcap.o termio.o utf8.o vmsvt.o vt52.o window.o word.o wrapper.o wscreen.o +HDR=basic.h bind.h bindable.h buffer.h crypt.h defines.h display.h ebind.h estruct.h eval.h exec.h execute.h file.h fileio.h flook.h input.h isearch.h line.h lock.h log.h names.h pklock.h random.h region.h retcode.h search.h spawn.h terminal.h termio.h utf8.h version.h window.h word.h wrapper.h wscreen.h # DO NOT ADD OR MODIFY ANY LINES ABOVE THIS -- make source creates them @@ -40,13 +40,19 @@ ifeq ($(uname_S),Darwin) endif ifeq ($(uname_S),CYGWIN_NT-6.1-WOW64) DEFINES=-DAUTOCONF -DCYGWIN -DPROGRAM=$(PROGRAM) + LIBS=-lcurses # SYSV endif ifeq ($(uname_S),CYGWIN_NT-6.1) DEFINES=-DAUTOCONF -DCYGWIN -DPROGRAM=$(PROGRAM) + LIBS=-lcurses # SYSV +endif +ifeq ($(uname_S),MINGW32_NT-6.1) + DEFINES=-DAUTOCONF -DSYSV -DMINGW32 -DPROGRAM=$(PROGRAM) + LIBS= endif #DEFINES=-DAUTOCONF #LIBS=-ltermcap # BSD -LIBS=-lcurses # SYSV +#LIBS=-lcurses # SYSV #LIBS=-ltermlib #LIBS=-L/usr/lib/termcap -ltermcap LFLAGS=-hbx @@ -152,8 +158,8 @@ exec.o: exec.c exec.h retcode.h buffer.h crypt.h line.h utf8.h bind.h \ display.h estruct.h eval.h file.h flook.h input.h random.h window.h \ defines.h execute.o: execute.c execute.h estruct.h bind.h random.h display.h file.h \ - crypt.h retcode.h buffer.h line.h utf8.h terminal.h defines.h window.h -file.o: file.c file.h crypt.h retcode.h buffer.h line.h utf8.h defines.h \ + buffer.h crypt.h line.h utf8.h retcode.h terminal.h defines.h window.h +file.o: file.c file.h buffer.h crypt.h line.h utf8.h retcode.h defines.h \ estruct.h execute.h fileio.h input.h bind.h lock.h log.h window.h fileio.o: fileio.c fileio.h crypt.h retcode.h defines.h flook.o: flook.c flook.h retcode.h defines.h fileio.h crypt.h @@ -170,6 +176,7 @@ log.o: log.c log.h retcode.h main.o: main.c estruct.h basic.h bind.h bindable.h buffer.h crypt.h \ line.h utf8.h display.h eval.h execute.h file.h retcode.h input.h lock.h \ log.h random.h search.h terminal.h defines.h termio.h version.h window.h +mingw32.o: mingw32.c names.o: names.c names.h basic.h bind.h bindable.h buffer.h crypt.h \ line.h utf8.h display.h eval.h exec.h retcode.h file.h isearch.h \ region.h random.h search.h spawn.h window.h defines.h word.h @@ -197,6 +204,7 @@ window.o: window.c window.h defines.h buffer.h crypt.h line.h utf8.h \ word.o: word.c word.h basic.h buffer.h crypt.h line.h utf8.h estruct.h \ log.h retcode.h random.h region.h window.h defines.h wrapper.o: wrapper.c wrapper.h +wscreen.o: wscreen.c wscreen.h # DEPENDENCIES MUST END AT END OF FILE # IF YOU PUT STUFF HERE IT WILL GO AWAY diff --git a/buffer.c b/buffer.c index 6548f51..625e1b7 100644 --- a/buffer.c +++ b/buffer.c @@ -46,7 +46,7 @@ static const char modecode[] = "WCSEVOMYAUD" ; /* letters to represent modes */ static int makelist( int iflag) ; static int addline( char *text) ; -static void ltoa( char *buf, int width, long num) ; +static void l_to_a( char *buf, int width, long num) ; /* @@ -385,7 +385,7 @@ static int makelist( int iflag) nbytes += (long) llength(lp) + 1L; lp = lforw(lp); } - ltoa( b, sizeof b, nbytes) ; /* 8 digits string buffer size. */ + l_to_a( b, sizeof b, nbytes) ; /* 8 digits string buffer size. */ cp2 = &b[0]; while ((c = *cp2++) != 0) *cp1++ = c; @@ -411,7 +411,7 @@ static int makelist( int iflag) return TRUE; /* All done */ } -static void ltoa(char *buf, int width, long num) +static void l_to_a(char *buf, int width, long num) { buf[ --width] = 0 ; /* End of string. */ while (num >= 10) { /* Conditional digits. */ diff --git a/display.c b/display.c index 09bbb92..404a03d 100644 --- a/display.c +++ b/display.c @@ -87,7 +87,9 @@ static void modeline(struct window *wp); static void mlputi(int i, int r); static void mlputli(long l, int r); static void mlputf(int s); +#if SIGWINCH static int newscreensize(int h, int w); +#endif #if RAINBOW static void putline(int row, int col, char *buf); diff --git a/estruct.h b/estruct.h index 22acf9d..cb2e2d4 100644 --- a/estruct.h +++ b/estruct.h @@ -106,6 +106,17 @@ #define TERMCAP 0 /* Use TERMCAP */ #define IBMPC 1 /* IBM-PC CGA/MONO/EGA driver */ +#elif defined( MINGW32) + +#define VT220 (UNIX | VMS) +#define VT100 0 + +#define ANSI 0 +#define VMSVT 0 +#define VT52 0 +#define TERMCAP 0 +#define IBMPC 0 + #else #define VT220 (UNIX | VMS) diff --git a/eval.c b/eval.c index b72a38e..18d4f0d 100644 --- a/eval.c +++ b/eval.c @@ -348,17 +348,17 @@ char *gtfun(char *fname) /* and now evaluate it! */ switch (fnum) { case UFADD: - return itoa(atoi(arg1) + atoi(arg2)); + return i_to_a(atoi(arg1) + atoi(arg2)); case UFSUB: - return itoa(atoi(arg1) - atoi(arg2)); + return i_to_a(atoi(arg1) - atoi(arg2)); case UFTIMES: - return itoa(atoi(arg1) * atoi(arg2)); + return i_to_a(atoi(arg1) * atoi(arg2)); case UFDIV: - return itoa(atoi(arg1) / atoi(arg2)); + return i_to_a(atoi(arg1) / atoi(arg2)); case UFMOD: - return itoa(atoi(arg1) % atoi(arg2)); + return i_to_a(atoi(arg1) % atoi(arg2)); case UFNEG: - return itoa(-atoi(arg1)); + return i_to_a(-atoi(arg1)); case UFCAT: strcpy(result, arg1); return strcat(result, arg2); @@ -391,7 +391,7 @@ char *gtfun(char *fname) case UFOR: return ltos(stol(arg1) || stol(arg2)); case UFLENGTH: - return itoa(strlen(arg1)); + return i_to_a(strlen(arg1)); case UFUPPER: return mkupper(arg1); case UFLOWER: @@ -399,7 +399,7 @@ char *gtfun(char *fname) case UFTRUTH: return ltos(atoi(arg1) == 42); case UFASCII: - return itoa((int) arg1[0]); + return i_to_a((int) arg1[0]); case UFCHR: result[0] = atoi(arg1); result[1] = 0; @@ -409,11 +409,11 @@ char *gtfun(char *fname) result[1] = 0; return result; case UFRND: - return itoa((ernd() % abs(atoi(arg1))) + 1); + return i_to_a((ernd() % abs(atoi(arg1))) + 1); case UFABS: - return itoa(abs(atoi(arg1))); + return i_to_a(abs(atoi(arg1))); case UFSINDEX: - return itoa(sindex(arg1, arg2)); + return i_to_a(sindex(arg1, arg2)); case UFENV: #if ENVFUNC tsp = getenv(arg1); @@ -429,13 +429,13 @@ char *gtfun(char *fname) tsp = flook(arg1, TRUE); return tsp == NULL ? "" : tsp; case UFBAND: - return itoa(atoi(arg1) & atoi(arg2)); + return i_to_a(atoi(arg1) & atoi(arg2)); case UFBOR: - return itoa(atoi(arg1) | atoi(arg2)); + return i_to_a(atoi(arg1) | atoi(arg2)); case UFBXOR: - return itoa(atoi(arg1) ^ atoi(arg2)); + return i_to_a(atoi(arg1) ^ atoi(arg2)); case UFBNOT: - return itoa(~atoi(arg1)); + return i_to_a(~atoi(arg1)); case UFXLATE: return xlat(arg1, arg2, arg3); } @@ -497,19 +497,19 @@ char *gtenv(char *vname) /* otherwise, fetch the appropriate value */ switch (vnum) { case EVFILLCOL: - return itoa(fillcol); + return i_to_a(fillcol); case EVPAGELEN: - return itoa(term.t_nrow + 1); + return i_to_a(term.t_nrow + 1); case EVCURCOL: - return itoa(getccol(FALSE)); + return i_to_a(getccol(FALSE)); case EVCURLINE: - return itoa(getcline()); + return i_to_a(getcline()); case EVRAM: - return itoa((int) (envram / 1024l)); + return i_to_a((int) (envram / 1024l)); case EVFLICKER: return ltos(flickcode); case EVCURWIDTH: - return itoa(term.t_ncol); + return i_to_a(term.t_ncol); case EVCBUFNAME: return curbp->b_bname; case EVCFNAME: @@ -527,15 +527,15 @@ char *gtenv(char *vname) } case EVASAVE: - return itoa(gasave); + return i_to_a(gasave); case EVACOUNT: - return itoa(gacount); + return i_to_a(gacount); case EVLASTKEY: - return itoa(lastkey); + return i_to_a(lastkey); case EVCURCHAR: return (curwp->w_dotp->l_used == - curwp->w_doto ? itoa('\n') : - itoa(lgetc(curwp->w_dotp, curwp->w_doto))); + curwp->w_doto ? i_to_a('\n') : + i_to_a(lgetc(curwp->w_dotp, curwp->w_doto))); case EVDISCMD: return ltos(discmd); case EVVERSION: @@ -543,16 +543,16 @@ char *gtenv(char *vname) case EVPROGNAME: return PROGRAM_NAME_LONG; case EVSEED: - return itoa(seed); + return i_to_a(seed); case EVDISINP: return ltos(disinp); case EVWLINE: - return itoa(curwp->w_ntrows); + return i_to_a(curwp->w_ntrows); case EVCWLINE: - return itoa(getwpos()); + return i_to_a(getwpos()); case EVTARGET: saveflag = lastflag; - return itoa(curgoal); + return i_to_a(curgoal); case EVSEARCH: return pat; case EVREPLACE: @@ -562,11 +562,11 @@ char *gtenv(char *vname) case EVKILL: return getkill(); case EVCMODE: - return itoa(curbp->b_mode); + return i_to_a(curbp->b_mode); case EVGMODE: - return itoa(gmode); + return i_to_a(gmode); case EVTPAUSE: - return itoa(term.t_pause); + return i_to_a(term.t_pause); case EVPENDING: #if TYPEAH return ltos(typahead()); @@ -574,19 +574,19 @@ char *gtenv(char *vname) return falsem; #endif case EVLWIDTH: - return itoa(llength(curwp->w_dotp)); + return i_to_a(llength(curwp->w_dotp)); case EVLINE: return getctext(); case EVGFLAGS: - return itoa(gflags); + return i_to_a(gflags); case EVRVAL: - return itoa(rval); + return i_to_a(rval); case EVTAB: - return itoa(tabmask + 1); + return i_to_a(tabmask + 1); case EVOVERLAP: - return itoa(overlap); + return i_to_a(overlap); case EVSCROLLCOUNT: - return itoa(scrollcount); + return i_to_a(scrollcount); #if SCROLLCODE case EVSCROLL: return ltos(term.t_scroll != NULL); @@ -632,7 +632,7 @@ int setvar(int f, int n) /* get the value for that variable */ if (f == TRUE) - strcpy(value, itoa(n)); + strcpy(value, i_to_a(n)); else { status = mlreply("Value: ", &value[0], NSTRING); if (status != TRUE) @@ -929,13 +929,13 @@ static int svar(struct variable_description *var, char *value) } /* - * itoa: + * i_to_a: * integer to ascii string.......... This is too * inconsistant to use the system's * * int i; integer to translate to a string */ -char *itoa(int i) +char *i_to_a(int i) { #define INTWIDTH sizeof( int) * 3 diff --git a/eval.h b/eval.h index fd674eb..84a5b58 100644 --- a/eval.h +++ b/eval.h @@ -43,7 +43,7 @@ char *gtfun( char *fname) ; char *gtusr( char *vname) ; char *gtenv( char *vname) ; int setvar( int f, int n) ; -char *itoa( int i) ; +char *i_to_a( int i) ; char *getval( char *token) ; int stol( char *val) ; char *mkupper( char *str) ; diff --git a/exec.c b/exec.c index 5e07a33..d37ffcd 100644 --- a/exec.c +++ b/exec.c @@ -629,7 +629,7 @@ static int dobuf(struct buffer *bp) strcat(outline, ":"); /* debug if levels */ - strcat(outline, itoa(execlevel)); + strcat(outline, i_to_a(execlevel)); strcat(outline, ":"); /* and lastly the line */ diff --git a/main.c b/main.c index d7b8f37..f576afd 100644 --- a/main.c +++ b/main.c @@ -296,7 +296,9 @@ int main(int argc, char **argv) } #if UNIX +#ifdef SIGHUP signal(SIGHUP, emergencyexit); +#endif signal(SIGTERM, emergencyexit); #endif diff --git a/spawn.c b/spawn.c index 0c50ab9..c7f4bad 100644 --- a/spawn.c +++ b/spawn.c @@ -102,7 +102,7 @@ int spawncli(int f, int n) system("exec /bin/sh"); #endif sgarbf = TRUE; - sleep(2); + usleep( 2000000L) ; TTopen(); TTkopen(); #ifdef SIGWINCH diff --git a/tcap.c b/tcap.c index ffa0c00..5b045fa 100644 --- a/tcap.c +++ b/tcap.c @@ -19,6 +19,7 @@ #define USE_BROKEN_OPTIMIZATION 0 #define termdef 1 /* Don't define "term" external. */ +#ifndef MINGW32 #ifdef CYGWIN #include #include @@ -26,6 +27,7 @@ #include #include #endif +#endif #include "display.h" #include "estruct.h" diff --git a/termio.c b/termio.c index 92fbc95..abb2620 100644 --- a/termio.c +++ b/termio.c @@ -1,15 +1,15 @@ #include "termio.h" -/* TERMIO.C +/* TERMIO.C * * The functions in this file negotiate with the operating system for * characters, and write characters in a barely buffered fashion on the display. * All operating systems. * - * modified by Petri Kutvonen + * modified by Petri Kutvonen */ -#ifndef POSIX +#if !defined( POSIX) && !defined( MINGW32) #include #include @@ -23,8 +23,8 @@ #include #include -int ttrow = HUGE ; /* Row location of HW cursor */ -int ttcol = HUGE ; /* Column location of HW cursor */ +int ttrow = HUGE ; /* Row location of HW cursor */ +int ttcol = HUGE ; /* Column location of HW cursor */ #if VMS #include @@ -32,76 +32,76 @@ int ttcol = HUGE ; /* Column location of HW cursor */ #include #include #include -#include +#include -#define NIBUF 128 /* Input buffer size */ -#define NOBUF 1024 /* MM says bug buffers win! */ -#define EFN 0 /* Event flag */ +#define NIBUF 128 /* Input buffer size */ +#define NOBUF 1024 /* MM says bug buffers win! */ +#define EFN 0 /* Event flag */ -char obuf[NOBUF]; /* Output buffer */ -int nobuf; /* # of bytes in above */ -char ibuf[NIBUF]; /* Input buffer */ -int nibuf; /* # of bytes in above */ -int ibufi; /* Read index */ -int oldmode[3]; /* Old TTY mode bits */ -int newmode[3]; /* New TTY mode bits */ -short iochan; /* TTY I/O channel */ +char obuf[NOBUF]; /* Output buffer */ +int nobuf; /* # of bytes in above */ +char ibuf[NIBUF]; /* Input buffer */ +int nibuf; /* # of bytes in above */ +int ibufi; /* Read index */ +int oldmode[3]; /* Old TTY mode bits */ +int newmode[3]; /* New TTY mode bits */ +short iochan; /* TTY I/O channel */ #endif #if MSDOS & (MSC | TURBO) -union REGS rg; /* cpu register for use of DOS calls */ -int nxtchar = -1; /* character held from type ahead */ +union REGS rg; /* cpu register for use of DOS calls */ +int nxtchar = -1; /* character held from type ahead */ #endif -#if USG /* System V */ -#include -#include -#include -int kbdflgs; /* saved keyboard fd flags */ -int kbdpoll; /* in O_NDELAY mode */ -int kbdqp; /* there is a char in kbdq */ -char kbdq; /* char we've already read */ -struct termio otermio; /* original terminal characteristics */ -struct termio ntermio; /* charactoristics to use inside */ -#if XONXOFF -#define XXMASK 0016000 +#if USG /* System V */ +#include +#include +#include +int kbdflgs; /* saved keyboard fd flags */ +int kbdpoll; /* in O_NDELAY mode */ +int kbdqp; /* there is a char in kbdq */ +char kbdq; /* char we've already read */ +struct termio otermio; /* original terminal characteristics */ +struct termio ntermio; /* charactoristics to use inside */ +#if XONXOFF +#define XXMASK 0016000 #endif #endif -#if V7 | BSD -#include /* for stty/gtty functions */ -#include -struct sgttyb ostate; /* saved tty state */ -struct sgttyb nstate; /* values for editor mode */ -struct tchars otchars; /* Saved terminal special character set */ -#if XONXOFF +#if V7 | BSD +#include /* for stty/gtty functions */ +#include +struct sgttyb ostate; /* saved tty state */ +struct sgttyb nstate; /* values for editor mode */ +struct tchars otchars; /* Saved terminal special character set */ +#if XONXOFF struct tchars ntchars = { 0xff, 0xff, 0x11, 0x13, 0xff, 0xff }; - /* A lot of nothing and XON/XOFF */ + /* A lot of nothing and XON/XOFF */ #else struct tchars ntchars = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; - /* A lot of nothing */ + /* A lot of nothing */ #endif -#if BSD & PKCODE -struct ltchars oltchars; /* Saved terminal local special character set */ +#if BSD & PKCODE +struct ltchars oltchars; /* Saved terminal local special character set */ struct ltchars nltchars = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; - /* A lot of nothing */ + /* A lot of nothing */ #endif #if BSD -#include /* to get at the typeahead */ -extern int rtfrmshell(); /* return from suspended shell */ -#define TBUFSIZ 128 -char tobuf[TBUFSIZ]; /* terminal output buffer */ +#include /* to get at the typeahead */ +extern int rtfrmshell(); /* return from suspended shell */ +#define TBUFSIZ 128 +char tobuf[TBUFSIZ]; /* terminal output buffer */ #endif #endif -#if __hpux | SVR4 -extern int rtfrmshell(); /* return from suspended shell */ +#if __hpux | SVR4 +extern int rtfrmshell(); /* return from suspended shell */ #define TBUFSIZ 128 -char tobuf[TBUFSIZ]; /* terminal output buffer */ +char tobuf[TBUFSIZ]; /* terminal output buffer */ #endif /* @@ -112,121 +112,121 @@ char tobuf[TBUFSIZ]; /* terminal output buffer */ void ttopen(void) { #if VMS - struct dsc$descriptor idsc; - struct dsc$descriptor odsc; - char oname[40]; - int iosb[2]; - int status; + struct dsc$descriptor idsc; + struct dsc$descriptor odsc; + char oname[40]; + int iosb[2]; + int status; - odsc.dsc$a_pointer = "TT"; - odsc.dsc$w_length = strlen(odsc.dsc$a_pointer); - odsc.dsc$b_dtype = DSC$K_DTYPE_T; - odsc.dsc$b_class = DSC$K_CLASS_S; - idsc.dsc$b_dtype = DSC$K_DTYPE_T; - idsc.dsc$b_class = DSC$K_CLASS_S; - do { - idsc.dsc$a_pointer = odsc.dsc$a_pointer; - idsc.dsc$w_length = odsc.dsc$w_length; - odsc.dsc$a_pointer = &oname[0]; - odsc.dsc$w_length = sizeof(oname); - status = LIB$SYS_TRNLOG(&idsc, &odsc.dsc$w_length, &odsc); - if (status != SS$_NORMAL && status != SS$_NOTRAN) - exit(status); - if (oname[0] == 0x1B) { - odsc.dsc$a_pointer += 4; - odsc.dsc$w_length -= 4; - } - } while (status == SS$_NORMAL); - status = SYS$ASSIGN(&odsc, &iochan, 0, 0); - if (status != SS$_NORMAL) - exit(status); - status = SYS$QIOW(EFN, iochan, IO$_SENSEMODE, iosb, 0, 0, - oldmode, sizeof(oldmode), 0, 0, 0, 0); - if (status != SS$_NORMAL || (iosb[0] & 0xFFFF) != SS$_NORMAL) - exit(status); - newmode[0] = oldmode[0]; - newmode[1] = oldmode[1] | TT$M_NOECHO; -#if XONXOFF + odsc.dsc$a_pointer = "TT"; + odsc.dsc$w_length = strlen(odsc.dsc$a_pointer); + odsc.dsc$b_dtype = DSC$K_DTYPE_T; + odsc.dsc$b_class = DSC$K_CLASS_S; + idsc.dsc$b_dtype = DSC$K_DTYPE_T; + idsc.dsc$b_class = DSC$K_CLASS_S; + do { + idsc.dsc$a_pointer = odsc.dsc$a_pointer; + idsc.dsc$w_length = odsc.dsc$w_length; + odsc.dsc$a_pointer = &oname[0]; + odsc.dsc$w_length = sizeof(oname); + status = LIB$SYS_TRNLOG(&idsc, &odsc.dsc$w_length, &odsc); + if (status != SS$_NORMAL && status != SS$_NOTRAN) + exit(status); + if (oname[0] == 0x1B) { + odsc.dsc$a_pointer += 4; + odsc.dsc$w_length -= 4; + } + } while (status == SS$_NORMAL); + status = SYS$ASSIGN(&odsc, &iochan, 0, 0); + if (status != SS$_NORMAL) + exit(status); + status = SYS$QIOW(EFN, iochan, IO$_SENSEMODE, iosb, 0, 0, + oldmode, sizeof(oldmode), 0, 0, 0, 0); + if (status != SS$_NORMAL || (iosb[0] & 0xFFFF) != SS$_NORMAL) + exit(status); + newmode[0] = oldmode[0]; + newmode[1] = oldmode[1] | TT$M_NOECHO; +#if XONXOFF #else - newmode[1] &= ~(TT$M_TTSYNC | TT$M_HOSTSYNC); + newmode[1] &= ~(TT$M_TTSYNC | TT$M_HOSTSYNC); #endif - newmode[2] = oldmode[2] | TT2$M_PASTHRU; - status = SYS$QIOW(EFN, iochan, IO$_SETMODE, iosb, 0, 0, - newmode, sizeof(newmode), 0, 0, 0, 0); - if (status != SS$_NORMAL || (iosb[0] & 0xFFFF) != SS$_NORMAL) - exit(status); - term.t_nrow = (newmode[1] >> 24) - 1; - term.t_ncol = newmode[0] >> 16; + newmode[2] = oldmode[2] | TT2$M_PASTHRU; + status = SYS$QIOW(EFN, iochan, IO$_SETMODE, iosb, 0, 0, + newmode, sizeof(newmode), 0, 0, 0, 0); + if (status != SS$_NORMAL || (iosb[0] & 0xFFFF) != SS$_NORMAL) + exit(status); + term.t_nrow = (newmode[1] >> 24) - 1; + term.t_ncol = newmode[0] >> 16; #endif #if MSDOS & (TURBO | (PKCODE & MSC)) - /* kill the CONTROL-break interupt */ - rg.h.ah = 0x33; /* control-break check dos call */ - rg.h.al = 1; /* set the current state */ - rg.h.dl = 0; /* set it OFF */ - intdos(&rg, &rg); /* go for it! */ + /* kill the CONTROL-break interupt */ + rg.h.ah = 0x33; /* control-break check dos call */ + rg.h.al = 1; /* set the current state */ + rg.h.dl = 0; /* set it OFF */ + intdos(&rg, &rg); /* go for it! */ #endif -#if USG - ioctl(0, TCGETA, &otermio); /* save old settings */ - ntermio.c_iflag = 0; /* setup new settings */ -#if XONXOFF - ntermio.c_iflag = otermio.c_iflag & XXMASK; /* save XON/XOFF P.K. */ +#if USG + ioctl(0, TCGETA, &otermio); /* save old settings */ + ntermio.c_iflag = 0; /* setup new settings */ +#if XONXOFF + ntermio.c_iflag = otermio.c_iflag & XXMASK; /* save XON/XOFF P.K. */ #endif - ntermio.c_oflag = 0; - ntermio.c_cflag = otermio.c_cflag; - ntermio.c_lflag = 0; - ntermio.c_line = otermio.c_line; - ntermio.c_cc[VMIN] = 1; - ntermio.c_cc[VTIME] = 0; -#if PKCODE - ioctl(0, TCSETAW, &ntermio); /* and activate them */ + ntermio.c_oflag = 0; + ntermio.c_cflag = otermio.c_cflag; + ntermio.c_lflag = 0; + ntermio.c_line = otermio.c_line; + ntermio.c_cc[VMIN] = 1; + ntermio.c_cc[VTIME] = 0; +#if PKCODE + ioctl(0, TCSETAW, &ntermio); /* and activate them */ #else - ioctl(0, TCSETA, &ntermio); /* and activate them */ + ioctl(0, TCSETA, &ntermio); /* and activate them */ #endif - kbdflgs = fcntl(0, F_GETFL, 0); - kbdpoll = FALSE; + kbdflgs = fcntl(0, F_GETFL, 0); + kbdpoll = FALSE; #endif #if V7 | BSD - gtty(0, &ostate); /* save old state */ - gtty(0, &nstate); /* get base of new state */ -#if XONXOFF - nstate.sg_flags |= (CBREAK | TANDEM); + gtty(0, &ostate); /* save old state */ + gtty(0, &nstate); /* get base of new state */ +#if XONXOFF + nstate.sg_flags |= (CBREAK | TANDEM); #else - nstate.sg_flags |= RAW; + nstate.sg_flags |= RAW; #endif - nstate.sg_flags &= ~(ECHO | CRMOD); /* no echo for now... */ - stty(0, &nstate); /* set mode */ - ioctl(0, TIOCGETC, &otchars); /* Save old characters */ - ioctl(0, TIOCSETC, &ntchars); /* Place new character into K */ -#if BSD & PKCODE - ioctl(0, TIOCGLTC, &oltchars); /* Save old local characters */ - ioctl(0, TIOCSLTC, &nltchars); /* New local characters */ + nstate.sg_flags &= ~(ECHO | CRMOD); /* no echo for now... */ + stty(0, &nstate); /* set mode */ + ioctl(0, TIOCGETC, &otchars); /* Save old characters */ + ioctl(0, TIOCSETC, &ntchars); /* Place new character into K */ +#if BSD & PKCODE + ioctl(0, TIOCGLTC, &oltchars); /* Save old local characters */ + ioctl(0, TIOCSLTC, &nltchars); /* New local characters */ #endif -#if BSD - /* provide a smaller terminal output buffer so that - the type ahead detection works better (more often) */ - setbuffer(stdout, &tobuf[0], TBUFSIZ); - signal(SIGTSTP, SIG_DFL); /* set signals so that we can */ - signal(SIGCONT, rtfrmshell); /* suspend & restart emacs */ +#if BSD + /* provide a smaller terminal output buffer so that + the type ahead detection works better (more often) */ + setbuffer(stdout, &tobuf[0], TBUFSIZ); + signal(SIGTSTP, SIG_DFL); /* set signals so that we can */ + signal(SIGCONT, rtfrmshell); /* suspend & restart emacs */ #endif #endif -#if __hpux | SVR4 - /* provide a smaller terminal output buffer so that - the type ahead detection works better (more often) */ - setvbuf(stdout, &tobuf[0], _IOFBF, TBUFSIZ); - signal(SIGTSTP, SIG_DFL); /* set signals so that we can */ - signal(SIGCONT, rtfrmshell); /* suspend & restart emacs */ - TTflush(); -#endif /* __hpux */ +#if __hpux | SVR4 + /* provide a smaller terminal output buffer so that + the type ahead detection works better (more often) */ + setvbuf(stdout, &tobuf[0], _IOFBF, TBUFSIZ); + signal(SIGTSTP, SIG_DFL); /* set signals so that we can */ + signal(SIGCONT, rtfrmshell); /* suspend & restart emacs */ + TTflush(); +#endif /* __hpux */ - /* on all screens we are not sure of the initial position - of the cursor */ - ttrow = 999; - ttcol = 999; + /* on all screens we are not sure of the initial position + of the cursor */ + ttrow = 999; + ttcol = 999; } /* @@ -237,40 +237,40 @@ void ttopen(void) void ttclose(void) { #if VMS - int status; - int iosb[1]; + int status; + int iosb[1]; - ttflush(); - status = SYS$QIOW(EFN, iochan, IO$_SETMODE, iosb, 0, 0, - oldmode, sizeof(oldmode), 0, 0, 0, 0); - if (status != SS$_NORMAL || (iosb[0] & 0xFFFF) != SS$_NORMAL) - exit(status); - status = SYS$DASSGN(iochan); - if (status != SS$_NORMAL) - exit(status); + ttflush(); + status = SYS$QIOW(EFN, iochan, IO$_SETMODE, iosb, 0, 0, + oldmode, sizeof(oldmode), 0, 0, 0, 0); + if (status != SS$_NORMAL || (iosb[0] & 0xFFFF) != SS$_NORMAL) + exit(status); + status = SYS$DASSGN(iochan); + if (status != SS$_NORMAL) + exit(status); #endif #if MSDOS & (TURBO | (PKCODE & MSC)) - /* restore the CONTROL-break interupt */ - rg.h.ah = 0x33; /* control-break check dos call */ - rg.h.al = 1; /* set the current state */ - rg.h.dl = 1; /* set it ON */ - intdos(&rg, &rg); /* go for it! */ + /* restore the CONTROL-break interupt */ + rg.h.ah = 0x33; /* control-break check dos call */ + rg.h.al = 1; /* set the current state */ + rg.h.dl = 1; /* set it ON */ + intdos(&rg, &rg); /* go for it! */ #endif -#if USG -#if PKCODE - ioctl(0, TCSETAW, &otermio); /* restore terminal settings */ +#if USG +#if PKCODE + ioctl(0, TCSETAW, &otermio); /* restore terminal settings */ #else - ioctl(0, TCSETA, &otermio); /* restore terminal settings */ + ioctl(0, TCSETA, &otermio); /* restore terminal settings */ #endif - fcntl(0, F_SETFL, kbdflgs); + fcntl(0, F_SETFL, kbdflgs); #endif #if V7 | BSD - stty(0, &ostate); - ioctl(0, TIOCSETC, &otchars); /* Place old character into K */ -#if BSD & PKCODE - ioctl(0, TIOCSLTC, &oltchars); /* Place old local character into K */ + stty(0, &ostate); + ioctl(0, TIOCSETC, &otchars); /* Place old character into K */ +#if BSD & PKCODE + ioctl(0, TIOCSLTC, &oltchars); /* Place old local character into K */ #endif #endif } @@ -283,23 +283,23 @@ void ttclose(void) */ int ttputc( int c) { #if VMS - if (nobuf >= NOBUF) - ttflush(); - obuf[nobuf++] = c; + if (nobuf >= NOBUF) + ttflush(); + obuf[nobuf++] = c; #endif -#if MSDOS & ~IBMPC - bdos(6, c, 0); +#if MSDOS & ~IBMPC + bdos(6, c, 0); #endif #if V7 | USG | BSD - char utf8[6]; - int bytes; + char utf8[6]; + int bytes; - bytes = unicode_to_utf8(c, utf8); - fwrite(utf8, 1, bytes, stdout); + bytes = unicode_to_utf8(c, utf8); + fwrite(utf8, 1, bytes, stdout); #endif - return 0 ; + return 0 ; } /* @@ -308,19 +308,19 @@ int ttputc( int c) { */ void ttflush( void) { #if VMS - int status; - int iosb[2]; + int status; + int iosb[2]; - status = SS$_NORMAL; - if (nobuf != 0) { - status = - SYS$QIOW(EFN, iochan, IO$_WRITELBLK | IO$M_NOFORMAT, - iosb, 0, 0, obuf, nobuf, 0, 0, 0, 0); - if (status == SS$_NORMAL) - status = iosb[0] & 0xFFFF; - nobuf = 0; - } - return status; + status = SS$_NORMAL; + if (nobuf != 0) { + status = + SYS$QIOW(EFN, iochan, IO$_WRITELBLK | IO$M_NOFORMAT, + iosb, 0, 0, obuf, nobuf, 0, 0, 0, 0); + if (status == SS$_NORMAL) + status = iosb[0] & 0xFFFF; + nobuf = 0; + } + return status; #endif #if MSDOS @@ -339,13 +339,13 @@ void ttflush( void) { #include - int status; + int status; - status = fflush(stdout); + status = fflush(stdout); - if (status != 0 && errno != EAGAIN) { - exit(errno); - } + if (status != 0 && errno != EAGAIN) { + exit(errno); + } #endif } @@ -356,111 +356,111 @@ void ttflush( void) { */ int ttgetc( void) { #if VMS - int status; - int iosb[2]; - int term[2]; + int status; + int iosb[2]; + int term[2]; - while (ibufi >= nibuf) { - ibufi = 0; - term[0] = 0; - term[1] = 0; - status = SYS$QIOW(EFN, iochan, IO$_READLBLK | IO$M_TIMED, - iosb, 0, 0, ibuf, NIBUF, 0, term, 0, 0); - if (status != SS$_NORMAL) - exit(status); - status = iosb[0] & 0xFFFF; - if (status != SS$_NORMAL && status != SS$_TIMEOUT && - status != SS$_DATAOVERUN) - exit(status); - nibuf = (iosb[0] >> 16) + (iosb[1] >> 16); - if (nibuf == 0) { - status = SYS$QIOW(EFN, iochan, IO$_READLBLK, - iosb, 0, 0, ibuf, 1, 0, term, 0, - 0); - if (status != SS$_NORMAL - || (status = (iosb[0] & 0xFFFF)) != SS$_NORMAL) - if (status != SS$_DATAOVERUN) - exit(status); - nibuf = (iosb[0] >> 16) + (iosb[1] >> 16); - } - } - return ibuf[ibufi++] & 0xFF; /* Allow multinational */ + while (ibufi >= nibuf) { + ibufi = 0; + term[0] = 0; + term[1] = 0; + status = SYS$QIOW(EFN, iochan, IO$_READLBLK | IO$M_TIMED, + iosb, 0, 0, ibuf, NIBUF, 0, term, 0, 0); + if (status != SS$_NORMAL) + exit(status); + status = iosb[0] & 0xFFFF; + if (status != SS$_NORMAL && status != SS$_TIMEOUT && + status != SS$_DATAOVERUN) + exit(status); + nibuf = (iosb[0] >> 16) + (iosb[1] >> 16); + if (nibuf == 0) { + status = SYS$QIOW(EFN, iochan, IO$_READLBLK, + iosb, 0, 0, ibuf, 1, 0, term, 0, + 0); + if (status != SS$_NORMAL + || (status = (iosb[0] & 0xFFFF)) != SS$_NORMAL) + if (status != SS$_DATAOVERUN) + exit(status); + nibuf = (iosb[0] >> 16) + (iosb[1] >> 16); + } + } + return ibuf[ibufi++] & 0xFF; /* Allow multinational */ #endif -#if MSDOS & (MSC | TURBO) - int c; /* character read */ +#if MSDOS & (MSC | TURBO) + int c; /* character read */ - /* if a char already is ready, return it */ - if (nxtchar >= 0) { - c = nxtchar; - nxtchar = -1; - return c; - } + /* if a char already is ready, return it */ + if (nxtchar >= 0) { + c = nxtchar; + nxtchar = -1; + return c; + } - /* call the dos to get a char */ - rg.h.ah = 7; /* dos Direct Console Input call */ - intdos(&rg, &rg); - c = rg.h.al; /* grab the char */ - return c & 255; + /* call the dos to get a char */ + rg.h.ah = 7; /* dos Direct Console Input call */ + intdos(&rg, &rg); + c = rg.h.al; /* grab the char */ + return c & 255; #endif #if V7 | BSD - return 255 & fgetc(stdin); /* 8BIT P.K. */ + return 255 & fgetc(stdin); /* 8BIT P.K. */ #endif -#if USG - if (kbdqp) - kbdqp = FALSE; - else { - if (kbdpoll && fcntl(0, F_SETFL, kbdflgs) < 0) - return FALSE; - kbdpoll = FALSE; - while (read(0, &kbdq, 1) != 1); - } - return kbdq & 255; +#if USG + if (kbdqp) + kbdqp = FALSE; + else { + if (kbdpoll && fcntl(0, F_SETFL, kbdflgs) < 0) + return FALSE; + kbdpoll = FALSE; + while (read(0, &kbdq, 1) != 1); + } + return kbdq & 255; #endif } -#if TYPEAH -/* typahead: Check to see if any characters are already in the - keyboard buffer +#if TYPEAH +/* typahead: Check to see if any characters are already in the + keyboard buffer */ int typahead( void) { -#if MSDOS & (MSC | TURBO) - if (kbhit() != 0) - return TRUE; - else - return FALSE; +#if MSDOS & (MSC | TURBO) + if (kbhit() != 0) + return TRUE; + else + return FALSE; #endif -#if BSD - int x; /* holds # of pending chars */ +#if BSD + int x; /* holds # of pending chars */ - return (ioctl(0, FIONREAD, &x) < 0) ? 0 : x; + return (ioctl(0, FIONREAD, &x) < 0) ? 0 : x; #endif -#if PKCODE & VMS - return ibufi < nibuf; +#if PKCODE & VMS + return ibufi < nibuf; #endif -#if USG - if (!kbdqp) { - if (!kbdpoll && fcntl(0, F_SETFL, kbdflgs | O_NDELAY) < 0) - return FALSE; -#if PKCODE - kbdpoll = 1; +#if USG + if (!kbdqp) { + if (!kbdpoll && fcntl(0, F_SETFL, kbdflgs | O_NDELAY) < 0) + return FALSE; +#if PKCODE + kbdpoll = 1; #endif - kbdqp = (1 == read(0, &kbdq, 1)); - } - return kbdqp; + kbdqp = (1 == read(0, &kbdq, 1)); + } + return kbdqp; #endif #if !UNIX & !VMS & !MSDOS - return FALSE; + return FALSE; #endif } #endif -#endif /* not POSIX */ +#endif /* not POSIX */ diff --git a/wrapper.c b/wrapper.c index c838a49..43a63a2 100644 --- a/wrapper.c +++ b/wrapper.c @@ -6,6 +6,12 @@ #include #include +#ifdef MINGW32 +int mkstemp( char *template) { + return -1 ; +} +#endif + static void die( const char *err) { fprintf( stderr, "fatal: %s\n", err) ; exit( EXIT_FAILURE) ;