--- Makefile.in 1997/05/12 23:37:39 18.0 +++ Makefile.in 1997/05/12 20:06:55 @@ -38,6 +38,7 @@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DIRS = @INSTALL@ -d CC = @CC@ # FIXME: Which is it, CC or CC_FOR_TARGET? @@ -74,7 +75,8 @@ AR="$(AR)" \ RANLIB="$(RANLIB)" \ LD="$(LD)" \ - DLLTOOL="$(DLLTOOL)" + DLLTOOL="$(DLLTOOL)" \ + prefix="$(prefix)" # This is the final name of the cygwin.dll. @@ -152,10 +154,12 @@ readme.info:$(srcdir)/doc/readme.texinfo $(MAKEINFO) -I$(srcdir)/doc $< -install: $(THEIRLIBS) $(LIBNAME) new-$(DLLNAME) real-headers +install-theirlibs: $(THEIRLIBS) $(LIBNAME) for i in $(THEIRLIBS) $(LIBNAME); do \ $(INSTALL_DATA) $$i $(tooldir)/lib/$$i ; \ done + +install-dll: new-$(DLLNAME) for i in $(DLLNAME); do \ $(INSTALL_DATA) new-$$i $(tooldir)/lib/$$i ; \ binname=`t='$(program_transform_name)'; echo "$$i" | sed -e $$t` ; \ @@ -163,16 +167,23 @@ rm -f $(bindir)/$$binname ; \ ln $(tooldir)/lib/$$i $(bindir)/$$binname >/dev/null 2>&1 || $(INSTALL_DATA) new-$$i $(bindir)/$$binname ; \ done + for i in $(DLLNAME);do stripdll $(bindir)/$$i;done + +install-real-headers: real-headers for sub in include include/arpa include/asm include/Windows32 \ include/cygwin32 include/net include/netinet include/sys ; do \ + $(INSTALL_DIRS) $(tooldir)/$$sub; \ for i in $(srcdir)/$$sub/*.h ; do \ $(INSTALL_DATA) $$i $(tooldir)/$$sub/`basename $$i` ; \ done ; \ done + +install-utils: rootme=`pwd` ; export rootme ; \ rootsrc=`(cd $(srcdir) ; pwd)` ; export rootsrc ; \ cd utils; $(MAKE) install $(FLAGS_TO_PASS) +install: install-theirlibs install-dll install-real-headers install-utils # this will only work if you've maked stmp_ms_include below. # if [ -e ms_include/windows.h ] ; then \ # for i in ms_include/*.h ; do \ @@ -293,6 +304,13 @@ clean: -rm -f *.o *.dll *.a *.exp junk *.base + $(MAKE) -C glob $@ + $(MAKE) -C utils $@ + +distclean: clean + -rm -f Makefile config.status config.cache config.log cygwin.def + $(MAKE) -C glob $@ + $(MAKE) -C utils $@ maintainer-clean realclean: clean @echo "This command is intended for maintainers to use;" @@ -321,7 +339,7 @@ # which contains the headers (My linux machine is dual boot, and C: is under # /dosc, so this works for me) -SDK_H=/dosc/mstools/h +SDK_H=/dos/m/msdn/include real-headers: # $(srcdir)/mspatches/*.patch if [ -f $(SDK_H)/windows.h ] ; then \ --- console.cc 1997/05/12 23:37:39 18.0 +++ console.cc 1997/05/13 21:19:09 @@ -452,10 +452,10 @@ } void -fhandler_console::clear_screen () +fhandler_console::clear_screen (int x, int y) { CONSOLE_SCREEN_BUFFER_INFO info; - COORD tlc = {0,0}; + COORD tlc = {x,y}; DWORD done; GetConsoleScreenBufferInfo (get_output_handle (), &info); FillConsoleOutputCharacterA (get_output_handle (), ' ', @@ -530,9 +530,15 @@ *x = info.dwCursorPosition.X; } +void +fhandler_console::switchCP(int CP) +{ /* FIXME code to actually switch goes here */ +} + #define BAK 1 #define ESC 2 #define NOR 0 +#define EOT 3 /* delete forward */ #define IGN 4 #define ERR 5 #define DWN 6 @@ -543,7 +549,7 @@ static const char base_chars[256] = { -/*00 01 02 03 04 05 06 07 */ IGN, ERR, ERR, NOR, NOR, NOR, NOR, BEL, +/*00 01 02 03 04 05 06 07 */ IGN, ERR, ERR, NOR, EOT, NOR, NOR, BEL, /*08 09 0A 0B 0C 0D 0E 0F */ BAK, TAB, DWN, ERR, ERR, CR, ERR, IGN, /*10 11 12 13 14 15 16 17 */ NOR, NOR, ERR, ERR, ERR, ERR, ERR, ERR, /*18 19 1A 1B 1C 1D 1E 1F */ NOR, NOR, ERR, ESC, ERR, ERR, ERR, ERR, @@ -585,6 +591,7 @@ { static int fg=7,bg=0,bold=0; int x, y; + DWORD done; char buf[40]; switch (c) @@ -620,6 +627,9 @@ bg=BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED; bold=0; break; + case 8: /* invis */ + bg=0; + bold=0; case 30: /* BLACK foreground */ fg = 0; break; @@ -685,12 +695,19 @@ { case 0: /* Clear to end of screen */ cursor_get(&x, &y); - scroll_screen(get_output_handle(), 0, y, -1, -1, -1, -1); - scroll_screen(get_output_handle(), -1, -1, -1, -1, 0, y); - clear_to_eol(); + clear_screen(x,y); + break; + case 1: /* erase from start to cursor */ + cursor_get(&savex, &savey); + scroll_screen (get_output_handle (), x, y, -1, y, 0, y); + scroll_screen (get_output_handle (), 0, y, -1, y, x, y); + for (y = 0;y < savey;y++) { + cursor_set(0, y); + clear_to_eol (); } + cursor_set(savex, savey); break; case 2: /* Clear screen */ - clear_screen (); + clear_screen (0,0); cursor_set (0,0); break; default: @@ -815,8 +832,7 @@ break; default: bad_escape: - small_printf("Bad escape %d, %d %d (%c)\n", args_[0], args_[1], c,c); - sleep (1); + small_printf("Bad escape %d, %d %d (%c). Please check TERM environment variable.\n", args_[0], args_[1], c,c); break; } } @@ -854,12 +870,19 @@ break; case ESC: state_ = gotesc; + debug_printf("\nESCAPE is %s\n", src); break; case DWN: /* WriteFile("\n") always adds CR... */ cursor_get(&x, &y); - WriteFile (get_output_handle (), "\n", 1, &done, 0); - if (get_w_binary ()) - cursor_rel (x, 0); + if (get_w_binary ()) /* this must come first. */ + cursor_rel (0, 1); + else + WriteFile (get_output_handle (), "\r\n", 2, &done, 0); + break; + case EOT: /* delete forward */ + cursor_get(&x, &y); + scroll_screen(get_output_handle(), x+1, y, -1, y, x, y); + scroll_screen(get_output_handle(), x, y, -1, y, x+1, y); break; case BAK: cursor_rel (-1, 0); @@ -875,7 +898,8 @@ cursor_set(8*(x/8+1), y); break; case ERR: - small_printf ("Got %d\n", *src); + if (!is_tty()) + WriteFile (get_output_handle (), src, 1, &done, 0); break; } src ++; @@ -917,7 +941,7 @@ } else if (*src == 'c') /* Reset Linux terminal */ { - clear_screen(); + clear_screen(0,0); cursor_set(0, 0); state_ = normal; } @@ -937,9 +961,34 @@ state_ = normal; else { - small_printf ("Bad escape %d (%c)\n", *src,*src); - sleep (1); state_ = normal; + int CP = 4; + switch (*src) + { + case '(': CP = 0; /* ASCII */ + break; + case ')': CP = 1; + break; + case '*': CP = 2; + break; + case '+': CP = 3; + break; + default: + break; + } + if (CP != 4) + { + src++; + if (*src != 'B') + { + src--; + small_printf ("Bad escape %d (%c) Please check TERM environment variable\n", *src, *src); + } + else + { + switchCP(CP); + } + } } src++; break; @@ -1024,18 +1073,19 @@ /* if things are special, just do what we used to */ if ((!res) || (ov != 0)) - { return ReadFile (hndl, pv, lenin, done, ov); - } if (flags & ENABLE_LINE_INPUT) { - FlushConsoleInputBuffer (hndl); + FlushConsoleInputBuffer(hndl); return ReadFile (hndl, pv, lenin, done, ov); } /* otherwise, do something that works */ unsigned int num_events = 0, ne2, st; + if(ndelay_set == 1) + need_chars=0; + st = GetNumberOfConsoleInputEvents (hndl, &num_events); debug_printf ("FakeReadFile, GetNumberOfConsoleInputEvents returned = %d\n", st); @@ -1054,6 +1104,15 @@ need_chars = 1; } + if(ndelay_set == 1) + { + need_chars = 0; + } + else + { + need_chars = 1; + } + INPUT_RECORD input_rec; buf = (char*)pv; @@ -1172,7 +1231,19 @@ need_chars = 0; } *done = copied_chars; - return 1; /* success == true */ + + /* if we haven't got anything of interest, and we don't want to wait for + anything (O_NDELAY is set) force the calling read to error (ret 0) */ + + if (copied_chars == 0 && need_chars == 0) + { + return 0; + } + else + { + return 1; + } /* success == true */ + } int --- fcntl.cc 1997/05/12 23:37:39 18.0 +++ fcntl.cc 1997/05/12 06:49:25 @@ -20,6 +20,8 @@ #include #include "winsup.h" +int ndelay_set; + extern "C" int _fcntl (int fd, int cmd,...) @@ -88,6 +90,10 @@ res |= O_WRONLY; if (this_procinfo ()->hmap[fd].h->get_access () & GENERIC_ALL) res |= O_RDWR; + if (ndelay_set) + res |= O_NDELAY; + syscall_printf ("fcntl (F_GETFL, %d);\n", res); + goto done; case F_SETFL: @@ -101,6 +107,14 @@ temp |= GENERIC_READ; if (arg & O_WRONLY) temp |= GENERIC_WRITE; + if (arg & O_NDELAY) + { + ndelay_set = 1; + } + else + { + ndelay_set = 0; + } syscall_printf ("fcntl (%d, F_SETFL, %d);\n", arg); --- fhandler.h 1997/05/12 23:37:39 18.0 +++ fhandler.h 1997/05/12 11:14:55 @@ -21,6 +21,8 @@ #include +extern int ndelay_set; /* for fcntl O_NDELAY in FakeReadFile */ + /* Classes fhandler_base normal I/O @@ -237,7 +239,7 @@ /* Output calls */ - void clear_screen (); + void clear_screen (int x, int y); void cursor_set (int x, int y); void cursor_get (int *x, int *y); void clear_to_eol (); @@ -246,6 +248,7 @@ const unsigned char * write_normal (unsigned const char*, unsigned const char *); void char_command (char); int output_tcsetattr (int a, const struct termios *t); + void switchCP (int CP); /* Input state */ /* Bits are.. --- signal.cc 1997/05/13 21:11:43 1.1 +++ signal.cc 1997/05/13 21:13:59 @@ -54,8 +54,8 @@ sleep (unsigned int seconds) { syscall_printf ("sleep (%d);\n", seconds); - Sleep (seconds * 1000); - syscall_printf ("0 = sleep (%d);\n", seconds); + WaitForSingleObject (u->signal_arrived, seconds * 1000); + syscall_printf ("0 = sleep (%d)\n", seconds); return 0; } @@ -64,7 +64,7 @@ usleep (unsigned int useconds) { syscall_printf ("usleep (%d)\n", useconds); - Sleep ((useconds + 500) / 1000); + WaitForSingleObject (u->signal_arrived, (useconds + 500) / 1000); syscall_printf ("0 = usleep (%d)\n", useconds); return 0; } --- termcap 1997/05/12 20:02:05 1.1 +++ utils/termcap 1997/05/13 11:23:03 @@ -69,13 +69,13 @@ :..sa=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p8%t;11%;%?%p9%t;12%;m:\ :se=\E[m:sf=^J:so=\E[7m:st=\EH:ta=^I:ue=\E[m:up=\E[A:\ :us=\E[4m: -pcansi-mono25|ansi25|ibm-pc terminal programs with 25 lines (mono mode):\ +pcansi-mono25|ansi25-m|ibm-pc terminal programs with 25 lines (mono mode):\ :li#25:\ :tc=pcansi-mono: -pcansi-mono33|ansi33|ibm-pc terminal programs with 33 lines (mono mode):\ +pcansi-mono33|ansi33-m|ibm-pc terminal programs with 33 lines (mono mode):\ :li#33:\ :tc=pcansi-mono: -pcansi-mono43|ansi43|ibm-pc terminal programs with 43 lines (mono mode):\ +pcansi-mono43|ansi43-m|ibm-pc terminal programs with 43 lines (mono mode):\ :li#43:\ :tc=pcansi-mono: # The color versions. All PC emulators do color... @@ -116,6 +116,12 @@ ansi|ansi/pc-term compatible with color:\ :u6=\E[%d;%dR:u7=\E[6n:..u8=\E[?%[;0123456789]c:\ :u9=\E[c:tc=ansi-pc-color:tc=ansi-mono: + +w32ansi|ansi console window w/function keys under cygwin32:\ + :li=#50:k1=\E[[A:k2=\E[[B:k3=\E[[C:k4=\E[[D:\ + :k5=\E[[E:k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:kI=\E[2~:\ + :kh=\E[1~:kD=\E[3~:@7=\E[4~:kP=\E[5~:kN=\E[6~:\ + :K1=\E[1~:K3=\E[5~:K4=\E[4~:K5=\E[6~:st@:ct@:tc=ansi: # # ANSI.SYS entries