worsley@ditmela.oz (Andrew Worsley) (05/18/89)
#! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 3 (of 10)." # Contents: kerneldif/Btty.c.cdif kerneldif/at_wini.c.cdif # kerneldif/axmakefile.cdi kerneldif/clock.c.cdif # kerneldif/console.c.cdif kerneldif/const.h.cdif # kerneldif/tty.c.cdif # Wrapped by sys@besplex on Sun Mar 26 06:33:56 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'kerneldif/Btty.c.cdif' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'kerneldif/Btty.c.cdif'\" else echo shar: Extracting \"'kerneldif/Btty.c.cdif'\" \(2878 characters\) sed "s/^X//" >'kerneldif/Btty.c.cdif' <<'END_OF_FILE' X*** kernel-1.3B/tty.c Mon Jan 2 02:55:53 1989 X--- kernel/tty.c Thu Mar 9 21:23:34 1989 X*************** X*** 82,86 **** X PRIVATE unsigned reply_count; /* counts tty_reply() calls */ X- PRIVATE unsigned tty_awake; /* nonzero after wakeup till do_int() exits */ X X X /*===========================================================================* X--- 82,90 ---- X PRIVATE unsigned reply_count; /* counts tty_reply() calls */ X X+ /* Test-and-set flag, set during tty_wakeup(). Remains set if do_int() is X+ * scheduled until do_int() is finished. X+ */ X+ PRIVATE int tty_awake; X X+ X /*===========================================================================* X*************** X*** 790,794 **** X mode = m_ptr->COUNT; X! if (mode & R_BIT && tp->tty_inleft != 0 && caller == tp->tty_inproc) X /* Process was reading when killed. Clean up input. */ X tty_icancel(tp); X if (mode & W_BIT && tp->tty_outleft != 0 && caller == tp->tty_outproc) X--- 794,800 ---- X mode = m_ptr->COUNT; X! if (mode & R_BIT && tp->tty_inleft != 0 && caller == tp->tty_inproc) { X /* Process was reading when killed. Clean up input. */ X tty_icancel(tp); X+ tp->tty_inleft = 0; X+ } X if (mode & W_BIT && tp->tty_outleft != 0 && caller == tp->tty_outproc) X*************** X*** 817,819 **** X if ((status = send(replyee, &tty_mess)) != OK) X! printf("\r\ntty_reply failed with status\r\n", status); X ++reply_count; X--- 823,825 ---- X if ((status = send(replyee, &tty_mess)) != OK) X! printf("\r\ntty_reply failed with status %d\r\n", status); X ++reply_count; X*************** X*** 993,995 **** X tp->tty_incount = 0; X- tp->tty_inleft = 0; X tp->tty_lfct = 0; X--- 999,1000 ---- X*************** X*** 1091,1095 **** X * completions. The timeout smooths slow terminal input. X */ X X! #define WAKEUP_TIMEOUT (HZ/20) /* adjust to taste, 1 for fast processor */ X X--- 1096,1104 ---- X * completions. The timeout smooths slow terminal input. X+ * X+ * Wakeup_timeout and previous_events are probably deadwood (always use X+ * timeout 1) but tty_awake is probably important to help avoid calling TTY X+ * too often, apart from its locking function. X */ X X! #define WAKEUP_TIMEOUT (HZ/60) /* adjust to taste, 1 for fast processor */ X X*************** X*** 1098,1106 **** X X! if (tty_events != 0 && !tty_awake) { X if (tty_events >= EVENT_THRESHOLD || tty_events == previous_events || X --wakeup_timeout == 0) { X- interrupt(TTY, &wakeup_mess); X- tty_awake = TRUE; X wakeup_timeout = WAKEUP_TIMEOUT; X } X previous_events = tty_events; X--- 1107,1116 ---- X X! if (tty_events != 0 && !test_and_set(&tty_awake)) { X if (tty_events >= EVENT_THRESHOLD || tty_events == previous_events || X --wakeup_timeout == 0) { X wakeup_timeout = WAKEUP_TIMEOUT; X+ interrupt(TTY, &wakeup_mess); X } X+ else X+ tty_awake = FALSE; X previous_events = tty_events; END_OF_FILE if test 2878 -ne `wc -c <'kerneldif/Btty.c.cdif'`; then echo shar: \"'kerneldif/Btty.c.cdif'\" unpacked with wrong size! fi # end of 'kerneldif/Btty.c.cdif' fi if test -f 'kerneldif/at_wini.c.cdif' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'kerneldif/at_wini.c.cdif'\" else echo shar: Extracting \"'kerneldif/at_wini.c.cdif'\" \(4503 characters\) sed "s/^X//" >'kerneldif/at_wini.c.cdif' <<'END_OF_FILE' X*** kernel-1.3/at_wini.c Thu Oct 6 21:07:07 1988 X--- kernel/at_wini.c Thu Mar 23 04:46:45 1989 X*************** X*** 191,193 **** X phys_bytes usr_buf; X! register int i, old_state; X int r = 0; X--- 191,193 ---- X phys_bytes usr_buf; X! register int i; X int r = 0; X*************** X*** 215,220 **** X receive(HARDWARE, &w_mess); X- /* old_state = lock(); */ X- dma_read((unsigned)(usr_buf >> 4), (unsigned)(usr_buf & 0x0F)); X- /* restore(old_state); */ X- usr_buf += 0x200; X if (win_results() != OK) { X--- 215,216 ---- X*************** X*** 223,224 **** X--- 219,222 ---- X } X+ port_read(WIN_REG1, usr_buf, (phys_bytes) SECTOR_SIZE); X+ usr_buf += SECTOR_SIZE; X } X*************** X*** 233,238 **** X for (i=0; i<BLOCK_SIZE/SECTOR_SIZE; i++) { X! /* old_state = lock(); */ X! dma_write((unsigned)(usr_buf >> 4), (unsigned)(usr_buf&0x0F)); X! /* restore(old_state); */ X! usr_buf += 0x200; X receive(HARDWARE, &w_mess); X--- 231,234 ---- X for (i=0; i<BLOCK_SIZE/SECTOR_SIZE; i++) { X! port_write(WIN_REG1, usr_buf, (phys_bytes) SECTOR_SIZE); X! usr_buf += SECTOR_SIZE; X receive(HARDWARE, &w_mess); X*************** X*** 260,265 **** X X! int i, r, old_state; X X /* Strobe reset bit low. */ X- old_state = lock(); X port_out(WIN_REG9, 4); X--- 256,260 ---- X X! int i, r; X X /* Strobe reset bit low. */ X port_out(WIN_REG9, 4); X*************** X*** 268,270 **** X port_out(WIN_REG9, wini[0].wn_ctlbyte & 0x0F); X- restore(old_state); X for (i = 0; i < MAX_WIN_RETRY && drive_busy(); i++) X--- 263,264 ---- X*************** X*** 344,348 **** X /*============================================================================* X! * win_results * X *============================================================================*/ X! PRIVATE win_results() X { X--- 338,342 ---- X /*============================================================================* X! * old_win_results * X *============================================================================*/ X! PRIVATE old_win_results() X { X*************** X*** 388,390 **** X X! register int i, old_state; X int r; X--- 382,384 ---- X X! register int i; X int r; X*************** X*** 396,398 **** X r = WIN_REG2; X- old_state = lock(); X port_out(WIN_REG9, command[0]); X--- 390,391 ---- X*************** X*** 400,402 **** X port_out(r, command[i]); X- restore(old_state); X return(OK); X--- 393,394 ---- X*************** X*** 422,425 **** X /* Calculate the address off the parameters and copy them to buf */ X! address = ((long)segment << 4) + offset; X! phys_copy(address, umap(proc_addr(WINCHESTER), D, (vir_bytes)buf, 16), 16L); X X--- 414,417 ---- X /* Calculate the address off the parameters and copy them to buf */ X! address = ((long)segment << HCLICK_SHIFT) + offset; X! phys_copy(address, umap(cproc_addr(WINCHESTER), D, (vir_bytes)buf, 16), 16L); X X*************** X*** 433,436 **** X /* Calculate the address off the parameters and copy them to buf */ X! address = ((long)segment << 4) + offset; X! phys_copy(address, umap(proc_addr(WINCHESTER), D, (vir_bytes)buf, 16), 16L); X X--- 425,428 ---- X /* Calculate the address off the parameters and copy them to buf */ X! address = ((long)segment << HCLICK_SHIFT) + offset; X! phys_copy(address, umap(cproc_addr(WINCHESTER), D, (vir_bytes)buf, 16), 16L); X X*************** X*** 440,442 **** X /* Get the nummer of drives from the bios */ X! phys_copy(0x475L, umap(proc_addr(WINCHESTER), D, (vir_bytes)buf, 1), 1L); X nr_drives = (int) *buf; X--- 432,434 ---- X /* Get the nummer of drives from the bios */ X! phys_copy(0x475L, umap(cproc_addr(WINCHESTER), D, (vir_bytes)buf, 1), 1L); X nr_drives = (int) *buf; X*************** X*** 516,517 **** X--- 508,510 ---- X wn->wn_low = *(long *)&buf[offset]; X+ #ifdef STUPID_WINI_ADJUST X if ((wn->wn_low % (BLOCK_SIZE/SECTOR_SIZE)) != 0) { X*************** X*** 521,522 **** X--- 514,516 ---- X } X+ #endif X wn->wn_size = *(long *)&buf[offset + sizeof(long)] - adjust; X*************** X*** 549,550 **** X--- 543,561 ---- X ; X+ } X+ X+ X+ /*==========================================================================* X+ * win_results * X+ *==========================================================================*/ X+ PRIVATE int win_results() X+ { X+ /* Extract results from the controller after an operation, then reenable the X+ * (slave) interrupt controller. X+ */ X+ X+ int r; X+ X+ r = old_win_results(); X+ cim_at_wini(); X+ return(r); X } END_OF_FILE if test 4503 -ne `wc -c <'kerneldif/at_wini.c.cdif'`; then echo shar: \"'kerneldif/at_wini.c.cdif'\" unpacked with wrong size! fi # end of 'kerneldif/at_wini.c.cdif' fi if test -f 'kerneldif/axmakefile.cdi' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'kerneldif/axmakefile.cdi'\" else echo shar: Extracting \"'kerneldif/axmakefile.cdi'\" \(8507 characters\) sed "s/^X//" >'kerneldif/axmakefile.cdi' <<'END_OF_FILE' X*** /dev/null Thu Oct 13 22:40:42 1988 X--- kernel/axmakefile Sat Mar 25 19:57:24 1989 X*************** X*** 0 **** X--- 1,303 ---- X+ # Say 'make at' to make a kernel with the AT winchester driver. X+ # Say 'make xt' to make a kernel with the XT winchester driver. X+ # Say 'make' to make the default kernel. X+ # Use the at kernel if you don't have a hard disk. X+ X+ # Uncomment one of these 4 groups of defines for special kernels. X+ # Protected mode may be defined for 8088 through 80386 processors, but only X+ # 286's and 386's take advantage of it. X+ # The posted version doesn't support DEBUGanything, PM3, or anything386. X+ X+ # Protected mode. X+ CPU = -Di8088 -Di80286 # -Di80386 X+ SPECOBJS = $(PM2OBJS) # $(PM3OBJS) X+ X+ # Debugger and protected mode. X+ # DEBUG_EARLY = -DDEBUG_EARLY X+ # DEBUGGER = -DDEBUGGER X+ # CPU = -Di8088 -Di80286 # -Di80386 X+ # SPECOBJS = $(DBOBJS) $(DB_PM2OBJS) $(PM2OBJS) #$(DB_PM3OBJS) $(PM3OBJS) X+ X+ # Debugger. X+ # DEBUG_EARLY = -DDEBUG_EARLY X+ # DEBUGGER = -DDEBUGGER X+ # CPU = i8088 X+ # SPECOBJS = $(DBOBJS) X+ X+ # Ordinary kernel (1.3 with a few improvements). X+ # CPU = -Di8088 X+ X+ # Futher, uncomment one of these 3 groups of defines to select the TTY driver. X+ X+ # 1.3 TTY driver. X+ C_RS232 = -DC_RS232_INT_HANDLERS X+ OLD_TTY = -DOLD_TTY X+ X+ # Bruce's TTY driver. X+ # RS2 = rs2.o X+ X+ # Bruce's TTY driver, but use the C interrupt handlers. X+ # C_RS232 = -DC_RS232_INT_HANDLERS X+ X+ # Further, uncomment one of these 2 groups of defines to select the X+ # environment. X+ X+ # Standard Minix. X+ # CFLAGS include the following nonstandard ones. X+ # -F: run cpp and cem sequentially (used when memory is tight) X+ # -T.: put temporaries in working directory (when RAM disk is small) X+ ASLD = -DASLD X+ BIN = . X+ CC = cc X+ CFLAGS = $(CPPFLAGS) -F -T. X+ END = /usr/lib/end.s X+ LD = asld X+ LIBS = /usr/lib/libc.a X+ o = s X+ X+ # Bruce's Minix. X+ # BIN = /etc/system X+ # CC = ecc X+ # CFLAGS = $(CPPFLAGS) X+ # LD = ld X+ # LIBS = /local/lib/libc.a X+ # o = o X+ # .s.o: X+ # $(CC) -c $*.s X+ # VOID = -Dvoid=int X+ X+ # Other defines for C. X+ # AM_KERNEL = -DAM_KERNEL # Amoeba kernel (doesn't work) X+ AUTO_BIOS = -DAUTO_BIOS=0 # for xt_wini.c, make it =1 if wanted X+ # LINEWRAP = -DLINEWRAP # wrap lines at column 80 X+ # NO_HANDSHAKE = -DNO_HANDSHAKE # no hardware handshake for RS232 X+ # SPARE_VIDEO = -DSPARE_VIDEO_MEMORY # put mem from any 2nd vid card in map X+ STUPID_WINI = -DSTUPID_WINI_ADJUST # skip odd 1st sector of partition X+ X+ # Other defines for make. X+ CPP = /lib/cpp X+ CPPFLAGS = $(ASLD) $(AUTO_BIOS) $(AM_KERNEL) $(CPU) $(C_RS232) \ X+ $(DEBUG_EARLY) $(DEBUGGER) $(LINEWRAP) $(NO_HANDSHAKE) \ X+ $(OLD_TTY) $(SPARE_VIDEO) $(STUPID_WINI) $(VOID) X+ LDFLAGS = -i X+ START = mpx88.$o X+ h = ../h X+ X+ DB_PM2OBJS = db286.$o X+ DB_PM3OBJS = db386.$o X+ DBOBJS = db/int88.$o db/db.$o db/getline.$o db/io.$o db/keyboard.$o \ X+ db/lib88.$o db/pcio.$o db/sym.$o db/unasm.$o X+ KEROBJS = main.$o tty.$o floppy.$o system.$o proc.$o clock.$o \ X+ memory.$o console.$o rs232.$o $(RS2) printer.$o table.$o \ X+ klib88.$o dmp.$o \ X+ exception.$o i8259.$o misc.$o X+ PM2OBJS = mpx286.$o klib286.$o protect.$o X+ PM3OBJS = mpx386.$o klib386.$o X+ SOBJS = db286.s db386.s klib286.s klib386.s klib88.s \ X+ mpx286.s mpx386.s mpx88.s rs2.s X+ X+ ATWINI = at_wini.$o X+ XTWINI = xt_wini.$o X+ X+ # Main thing to make. Swap the order of these if you prefer and XT kernel. X+ X+ at: $(START) $(KEROBJS) $(SPECOBJS) $(ATWINI) $(LIBS) $(END) X+ $(LD) $(LDFLAGS) -o $(BIN)/atkernel \ X+ $(START) $(SPECOBJS) $(KEROBJS) $(ATWINI) $(LIBS) $(END) \ X+ # -s > atkernel.sym X+ # ast -X $(BIN)/atkernel atkernel.sym X+ rm -f $(BIN)/kernel X+ ln $(BIN)/atkernel $(BIN)/kernel X+ X+ xt: $(START) $(KEROBJS) $(SPECOBJS) $(XTWINI) $(LIBS) $(END) X+ $(LD) $(LDFLAGS) -o $(BIN)/xtkernel \ X+ $(START) $(KEROBJS) $(SPECOBJS) $(XTWINI) $(LIBS) $(END) \ X+ # -s > xtkernel.sym X+ # ast -X $(BIN)/xtkernel xtkernel.sym X+ rm -f $(BIN)/kernel X+ ln $(BIN)/xtkernel $(BIN)/kernel X+ X+ clean: X+ rm -f $(START) $(DB_PM2OBJS) $(DB_PM3OBJS) $(KEROBJS) \ X+ $(PM2OBJS) $(PM3OBJS) $(SOBJS) \ X+ $(ATWINI) $(XTWINI X+ X+ db286.o: db286.s X+ $(CC) -c $*.s X+ db286.s: $h/const.h const.h protect.h sconst.h sglo.h db286.x X+ $(CPP) $(CPPFLAGS) $*.x | grep -v '^\#' > $*.s X+ X+ db386.o: db386.s X+ $(CC) -c $*.s X+ db386.s: $h/const.h const.h protect.h sconst.h sglo.h db386.x X+ $(CPP) $(CPPFLAGS) $*.x | grep -v '^\#' > $*.s X+ X+ klib286.o: klib286.s X+ $(CC) -c $*.s X+ klib286.s: $h/const.h const.h protect.h sconst.h sglo.h klib286.x X+ $(CPP) $(CPPFLAGS) $*.x | grep -v '^\#' > $*.s X+ X+ klib386.o: klib386.s X+ $(CC) -c $*.s X+ klib386.s: $h/const.h const.h protect.h sconst.h sglo.h klib386.x X+ $(CPP) $(CPPFLAGS) $*.x | grep -v '^\#' > $*.s X+ X+ klib88.o: klib88.s X+ $(CC) -c $*.s X+ klib88.s: $h/const.h const.h sconst.h sglo.h klib88.x X+ $(CPP) $(CPPFLAGS) $*.x | grep -v '^\#' > $*.s X+ X+ mpx286.o: mpx286.s X+ $(CC) -c $*.s X+ mpx286.s: const.h protect.h sconst.h sglo.h mpx286.x X+ $(CPP) $(CPPFLAGS) $*.x | grep -v '^\#' > $*.s X+ X+ mpx386.o: mpx386.s X+ $(CC) -c $*.s X+ mpx386.s: const.h protect.h sconst.h sglo.h mpx386.x X+ $(CPP) $(CPPFLAGS) $*.x | grep -v '^\#' > $*.s X+ X+ mpx88.o: mpx88.s X+ $(CC) -c $*.s X+ mpx88.s: $h/const.h $h/com.h const.h sconst.h sglo.h mpx88.x X+ $(CPP) $(CPPFLAGS) $*.x | grep -v '^\#' > $*.s X+ X+ rs2.o: rs2.s X+ $(CC) -c $*.s X+ rs2.s: $h/const.h const.h sconst.h sglo.h rs2.x X+ $(CPP) $(CPPFLAGS) $*.x | grep -v '^\#' > $*.s X+ X+ clock.$o: const.h type.h $h/const.h $h/type.h X+ clock.$o: $h/callnr.h X+ clock.$o: $h/com.h X+ clock.$o: $h/error.h X+ clock.$o: $h/signal.h X+ clock.$o: glo.h X+ clock.$o: proc.h X+ X+ console.$o: const.h type.h $h/const.h $h/type.h X+ console.$o: $h/callnr.h X+ console.$o: $h/com.h X+ console.$o: $h/error.h X+ console.$o: $h/sgtty.h X+ console.$o: $h/signal.h X+ console.$o: glo.h X+ console.$o: proc.h X+ console.$o: protect.h X+ console.$o: tty.h X+ X+ floppy.$o: const.h type.h $h/const.h $h/type.h X+ floppy.$o: $h/callnr.h X+ floppy.$o: $h/com.h X+ floppy.$o: $h/error.h X+ floppy.$o: glo.h X+ floppy.$o: proc.h X+ X+ dmp.$o: const.h type.h $h/const.h $h/type.h X+ dmp.$o: $h/callnr.h X+ dmp.$o: $h/com.h X+ dmp.$o: $h/error.h X+ dmp.$o: glo.h X+ dmp.$o: proc.h X+ X+ main.$o: const.h type.h $h/const.h $h/type.h X+ main.$o: $h/boot.h X+ main.$o: $h/callnr.h X+ main.$o: $h/com.h X+ main.$o: $h/error.h X+ main.$o: $h/signal.h X+ main.$o: glo.h X+ main.$o: proc.h X+ X+ memory.$o: const.h type.h $h/const.h $h/type.h X+ memory.$o: $h/callnr.h X+ memory.$o: $h/com.h X+ memory.$o: $h/error.h X+ memory.$o: glo.h X+ memory.$o: proc.h X+ X+ printer.$o: const.h type.h $h/const.h $h/type.h X+ printer.$o: $h/callnr.h X+ printer.$o: $h/com.h X+ printer.$o: $h/error.h X+ printer.$o: proc.h X+ printer.$o: glo.h X+ X+ proc.$o: const.h type.h $h/const.h $h/type.h X+ proc.$o: $h/callnr.h X+ proc.$o: $h/com.h X+ proc.$o: $h/error.h X+ proc.$o: glo.h X+ proc.$o: proc.h X+ X+ rs232.$o: const.h $h/const.h $h/type.h X+ rs232.$o: $h/sgtty.h X+ rs232.$o: tty.h X+ X+ system.$o: const.h type.h $h/const.h $h/type.h X+ system.$o: $h/boot.h X+ system.$o: $h/callnr.h X+ system.$o: $h/com.h X+ system.$o: $h/error.h X+ system.$o: $h/signal.h X+ system.$o: glo.h X+ system.$o: proc.h X+ system.$o: protect.h X+ X+ table.$o: const.h type.h $h/const.h $h/type.h $h/com.h X+ table.$o: glo.h X+ table.$o: proc.h X+ table.$o: tty.h X+ X+ tty.$o: const.h type.h $h/const.h $h/type.h X+ tty.$o: $h/callnr.h X+ tty.$o: $h/com.h X+ tty.$o: $h/error.h X+ tty.$o: $h/sgtty.h X+ tty.$o: $h/signal.h X+ tty.$o: glo.h X+ tty.$o: proc.h X+ tty.$o: tty.h X+ tty.$o: ttymaps.h X+ X+ at_wini.$o: const.h type.h $h/const.h $h/type.h X+ at_wini.$o: $h/callnr.h X+ at_wini.$o: $h/com.h X+ at_wini.$o: $h/error.h X+ at_wini.$o: proc.h X+ X+ xt_wini.$o: const.h type.h $h/const.h $h/type.h X+ xt_wini.$o: $h/callnr.h X+ xt_wini.$o: $h/com.h X+ xt_wini.$o: $h/error.h X+ xt_wini.$o: proc.h X+ X+ exception.$o: $h/const.h X+ exception.$o: $h/type.h X+ exception.$o: $h/signal.h X+ exception.$o: const.h X+ exception.$o: type.h X+ exception.$o: glo.h X+ exception.$o: proc.h X+ X+ i8259.$o: $h/const.h X+ i8259.$o: $h/type.h X+ i8259.$o: $h/com.h X+ i8259.$o: const.h X+ i8259.$o: type.h X+ i8259.$o: glo.h X+ i8259.$o: proc.h X+ X+ misc.$o: $h/const.h X+ misc.$o: $h/type.h X+ misc.$o: const.h X+ misc.$o: type.h X+ misc.$o: glo.h X+ X+ protect.$o: $h/const.h X+ protect.$o: $h/type.h X+ protect.$o: const.h X+ protect.$o: type.h X+ protect.$o: glo.h X+ protect.$o: proc.h X+ protect.$o: protect.h END_OF_FILE if test 8507 -ne `wc -c <'kerneldif/axmakefile.cdi'`; then echo shar: \"'kerneldif/axmakefile.cdi'\" unpacked with wrong size! fi # end of 'kerneldif/axmakefile.cdi' fi if test -f 'kerneldif/clock.c.cdif' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'kerneldif/clock.c.cdif'\" else echo shar: Extracting \"'kerneldif/clock.c.cdif'\" \(10602 characters\) sed "s/^X//" >'kerneldif/clock.c.cdif' <<'END_OF_FILE' X*** kernel-1.3/clock.c Thu Oct 20 13:14:50 1988 X--- kernel/clock.c Thu Mar 23 00:16:07 1989 X*************** X*** 3,5 **** X * X! * CLOCK_TICK: a clock interrupt has occurred X * GET_TIME: a process wants the real time X--- 3,5 ---- X * X! * HARD_INT: a clock interrupt has occurred X * GET_TIME: a process wants the real time X*************** X*** 14,16 **** X * |------------+----------+---------+---------| X! * | CLOCK_TICK | | | | X * |------------+----------+---------+---------| X--- 14,16 ---- X * |------------+----------+---------+---------| X! * | HARD_INT | | | | X * |------------+----------+---------+---------| X*************** X*** 41,43 **** X #define SCHED_RATE (MILLISEC*HZ/1000) /* number of ticks per schedule */ X- #define FLUSH_MASK 07 /* bit mask used for flushing RS232 input */ X X--- 41,42 ---- X*************** X*** 47,48 **** X--- 46,48 ---- X #define IBM_FREQ 1193182L /* IBM clock frequency for setting timer */ X+ #define TIMER_COUNT (unsigned) (IBM_FREQ/HZ)/* count to load into timer */ X #define SQUARE_WAVE 0x36 /* mode for generating square wave */ X*************** X*** 52,53 **** X--- 52,55 ---- X PRIVATE real_time next_alarm; /* probable time of next alarm */ X+ PRIVATE real_time pending_ticks; /* ticks seen by low level only */ X+ PRIVATE real_time realtime; /* real time clock */ X PRIVATE int sched_ticks = SCHED_RATE; /* counter: when 0, call scheduler */ X*************** X*** 56,58 **** X PRIVATE int (*watch_dog[NR_TASKS+1])(); /* watch_dog functions to call */ X- extern int flush_flag; /* tells clock when to flush the tty buf */ X X--- 58,59 ---- X*************** X*** 76,77 **** X--- 77,83 ---- X X+ lock(); X+ realtime += pending_ticks; /* transfer ticks from low level handler */ X+ pending_ticks = 0; X+ unlock(); X+ X switch (opcode) { X*************** X*** 80,82 **** X case SET_TIME: do_set_time(&mc); break; X! case CLOCK_TICK: do_clocktick(); break; X default: panic("clock task got bad message", mc.m_type); X--- 86,88 ---- X case SET_TIME: do_set_time(&mc); break; X! case HARD_INT: do_clocktick(); break; X default: panic("clock task got bad message", mc.m_type); X*************** X*** 86,88 **** X mc.m_type = OK; X! if (opcode != CLOCK_TICK) send(mc.m_source, &mc); X } X--- 92,94 ---- X mc.m_type = OK; X! if (opcode != HARD_INT) send(mc.m_source, &mc); X } X*************** X*** 114,116 **** X rp->p_alarm = (delta_ticks == 0L ? 0L : realtime + delta_ticks); X! if (proc_nr < 0) watch_dog[-proc_nr] = function; X X--- 120,122 ---- X rp->p_alarm = (delta_ticks == 0L ? 0L : realtime + delta_ticks); X! if istaskp(rp) watch_dog[-proc_nr] = function; X X*************** X*** 118,120 **** X next_alarm = MAX_P_LONG; X! for (rp = &proc[0]; rp < &proc[NR_TASKS+NR_PROCS]; rp++) X if(rp->p_alarm != 0 && rp->p_alarm < next_alarm)next_alarm=rp->p_alarm; X--- 124,126 ---- X next_alarm = MAX_P_LONG; X! for (rp = BEG_PROC_ADDR; rp < END_PROC_ADDR; rp++) X if(rp->p_alarm != 0 && rp->p_alarm < next_alarm)next_alarm=rp->p_alarm; X*************** X*** 153,155 **** X { X! /* This routine is called on every clock tick. */ X X--- 159,161 ---- X { X! /* This routine called on clock ticks when a lot of work needs to be done. */ X X*************** X*** 157,167 **** X register int t, proc_nr; X- extern int pr_busy, pcount, cum_count, prev_ct; X X- /* To guard against race conditions, first copy 'lost_ticks' to a local X- * variable, add this to 'realtime', and then subtract it from 'lost_ticks'. X- */ X- t = lost_ticks; /* 'lost_ticks' counts missed interrupts */ X- realtime += t + 1; /* update the time of day */ X- lost_ticks -= t; /* these interrupts are no longer missed */ X- X if (next_alarm <= realtime) { X--- 163,165 ---- X*************** X*** 169,171 **** X next_alarm = MAX_P_LONG; /* start computing next alarm */ X! for (rp = &proc[0]; rp < &proc[NR_TASKS+NR_PROCS]; rp++) { X if (rp->p_alarm != (real_time) 0) { X--- 167,169 ---- X next_alarm = MAX_P_LONG; /* start computing next alarm */ X! for (rp = BEG_PROC_ADDR; rp < END_PROC_ADDR; rp++) { X if (rp->p_alarm != (real_time) 0) { X*************** X*** 177,180 **** X */ X! proc_nr = rp - proc - NR_TASKS; X! if (proc_nr >= 0) X cause_sig(proc_nr, SIGALRM); X--- 175,177 ---- X */ X! if ( (proc_nr = proc_number(rp)) >= 0) X cause_sig(proc_nr, SIGALRM); X*************** X*** 192,210 **** X X- accounting(); /* keep track of who is using the cpu */ X- X- /* If input characters are accumulating on an RS232 line, process them. */ X- if (flush_flag) { X- t = (int) realtime; /* only low-order bits matter */ X- if ( (t & FLUSH_MASK) == 0) rs_flush(); /* flush tty input */ X- } X- X /* If a user process has been running too long, pick another one. */ X if (--sched_ticks == 0) { X! if (bill_ptr == prev_ptr) sched(); /* process has run too long */ X sched_ticks = SCHED_RATE; /* reset quantum */ X prev_ptr = bill_ptr; /* new previous process */ X- X- /* Check if printer is hung up, and if so, restart it. */ X- if (pr_busy && pcount > 0 && cum_count == prev_ct) pr_char(); X- prev_ct = cum_count; /* record # characters printed so far */ X } X--- 189,195 ---- X X /* If a user process has been running too long, pick another one. */ X if (--sched_ticks == 0) { X! if (bill_ptr == prev_ptr) locksched(); /* process has run too long */ X sched_ticks = SCHED_RATE; /* reset quantum */ X prev_ptr = bill_ptr; /* new previous process */ X } X*************** X*** 217,239 **** X *===========================================================================*/ X! PRIVATE accounting() X! { X! /* X! * Update user and system accounting times. Charge the current process for X! * user time or system time. In addition, if the current proces (i.e. X! * prev_proc, because cur_proc is always CLOCK) is a task, charge it too. X! * This is just for the F1 display. X! */ X X- register struct proc *rp; X X- if (prev_proc >= LOW_USER) { X- bill_ptr->user_time++; /* user time */ X- } else { X- bill_ptr->sys_time++; /* system time */ X- rp = proc_addr(prev_proc); X- if (prev_proc != IDLE) rp->sys_time++; X- } X- } X- X- X #ifdef i8088 X--- 202,206 ---- X *===========================================================================*/ X! /* This is now done at the lowest level, in clock_handler(). */ X X X #ifdef i8088 X*************** X*** 246,256 **** X X- unsigned int count, low_byte, high_byte; X- X- count = (unsigned) (IBM_FREQ/HZ); /* value to load into the timer */ X- low_byte = count & BYTE; /* compute low-order byte */ X- high_byte = (count >> 8) & BYTE; /* compute high-order byte */ X port_out(TIMER_MODE, SQUARE_WAVE); /* set timer to run continuously */ X! port_out(TIMER0, low_byte); /* load timer low byte */ X! port_out(TIMER0, high_byte); /* load timer high byte */ X } X #endif X--- 213,301 ---- X X port_out(TIMER_MODE, SQUARE_WAVE); /* set timer to run continuously */ X! port_out(TIMER0, TIMER_COUNT); /* load timer low byte */ X! port_out(TIMER0, TIMER_COUNT >> 8); /* load timer high byte */ X } X #endif X+ X+ X+ /*===========================================================================* X+ * clock_handler * X+ *===========================================================================*/ X+ PUBLIC clock_handler() X+ { X+ /* Switch context to do_clocktick if an alarm has gone off. X+ * Also switch there to reschedule if the reschedule will do something. X+ * This happens when X+ * (1) quantum has expired X+ * (2) current process received full quantum (as clock sampled it!) X+ * (3) something else is ready to run. X+ * Also call TTY and PRINTER and let them do whatever is necessary. X+ * X+ * Many global global and static variables are accessed here. The safety X+ * of this must be justified. Most of them are not changed here: X+ * k_reenter: X+ * This safely tells if the clock interrupt is nested. X+ * proc_ptr, bill_ptr: X+ * These are used for accounting. It does not matter if proc.c X+ * is changing them, provided they are always valid pointers, X+ * since at worst the previous process would be billed. X+ * next_alarm, realtime, sched_ticks, bill_ptr, prev_ptr, X+ * rdy_head[USER_Q]: X+ * These are tested to decide whether to call interrupt(). It X+ * does not matter if the test is sometimes (rarely) backwards X+ * due to a race, since this will only delay the high-level X+ * processing by one tick, or call the high level unnecessarily. X+ * The variables which are changed require more care: X+ * rp->user_time, rp->sys_time: X+ * These are protected by explicit locks in system.c. They are X+ * not properly protected in dmp.c (the increment here is not X+ * atomic) but that hardly matters. X+ * pending_ticks: X+ * This is protected by an explicit lock in clock.c. Don't X+ * update realtime directly, since there are too many X+ * references to it to guard conveniently. X+ * sched_ticks, prev_ptr: X+ * Updating these competes with similar code in do_clocktick(). X+ * No lock is necessary, because if bad things happen here X+ * (like sched_ticks going negative), the code in do_clocktick() X+ * will restore the variables to reasonable values, and an X+ * occasional missed or extra sched() is harmless. X+ * X+ * Are these complications worth the trouble? Well, they make the system 15% X+ * faster on a 5MHz 8088, and make task debugging much easier since there are X+ * no task switches on an inactive system. X+ */ X+ X+ register struct proc *rp; X+ X+ /* Update user and system accounting times. X+ * First charge the current process for user time. X+ * If the current process is not the billable process (usually because it X+ * is a task), charge the billable process for system time as well. X+ * Thus the unbillable tasks' user time is the billable users' system time. X+ */ X+ if (k_reenter != 0) X+ rp = cproc_addr(HARDWARE); X+ else X+ rp = proc_ptr; X+ ++rp->user_time; X+ if (rp != bill_ptr) X+ ++bill_ptr->sys_time; X+ X+ ++pending_ticks; X+ tty_wakeup(); /* possibly wake up TTY */ X+ pr_restart(); /* possibly restart printer */ X+ X+ if (next_alarm <= realtime + pending_ticks || X+ sched_ticks == 1 && X+ bill_ptr == prev_ptr && rdy_head[USER_Q] != NIL_PROC) { X+ interrupt(CLOCK); X+ return; X+ } X+ X+ if (--sched_ticks == 0) { X+ /* If bill_ptr == prev_ptr, no ready users so don't need sched(). */ X+ sched_ticks = SCHED_RATE; /* reset quantum */ X+ prev_ptr = bill_ptr; /* new previous process */ X+ } X+ } END_OF_FILE if test 10602 -ne `wc -c <'kerneldif/clock.c.cdif'`; then echo shar: \"'kerneldif/clock.c.cdif'\" unpacked with wrong size! fi # end of 'kerneldif/clock.c.cdif' fi if test -f 'kerneldif/console.c.cdif' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'kerneldif/console.c.cdif'\" else echo shar: Extracting \"'kerneldif/console.c.cdif'\" \(3676 characters\) sed "s/^X//" >'kerneldif/console.c.cdif' <<'END_OF_FILE' X*** kernel-1.3/console.c Thu Oct 20 06:04:19 1988 X--- kernel/console.c Sun Mar 12 00:34:42 1989 X*************** X*** 13,14 **** X--- 13,15 ---- X #include "proc.h" X+ #include "protect.h" X #include "tty.h" X*************** X*** 20,23 **** X /* Definitions used by the console driver. */ X- #define COLOR_BASE 0xB800 /* video ram paragraph for color display */ X- #define MONO_BASE 0xB000 /* video ram address for mono display */ X #define C_VID_MASK 0x3FFF /* mask for 16K video RAM */ X--- 21,22 ---- X*************** X*** 153,154 **** X--- 152,154 ---- X */ X+ lock(); /* the buffer is shared with RS232 */ X if ( (k = tty_buf_count(tty_driver_buf)) < tty_buf_max(tty_driver_buf)) { X*************** X*** 159,160 **** X--- 159,161 ---- X tty_buf_count(tty_driver_buf)++; /* increment counter */ X+ unlock(); X X*************** X*** 166,167 **** X--- 167,169 ---- X /* Too many characters have been buffered. Discard excess. */ X+ unlock(); X port_out(INT_CTL, ENABLE); /* re-enable 8259A controller */ X*************** X*** 182,191 **** X X- extern char get_byte(); X int count; X char c; X! unsigned segment, offset, offset1; X X /* Loop over the user bytes one at a time, outputting each one. */ X! segment = (tp->tty_phys >> 4) & WORD_MASK; X! offset = tp->tty_phys & OFF_MASK; X offset1 = offset; X--- 184,191 ---- X X int count; X char c; X! unsigned long offset, offset1; X X /* Loop over the user bytes one at a time, outputting each one. */ X! offset = tp->tty_phys; X offset1 = offset; X*************** X*** 194,196 **** X while (tp->tty_outleft > 0 && tp->tty_inhibited == RUNNING) { X! c = get_byte(segment, offset); /* fetch 1 byte from user space */ X out_char(tp, c); /* write 1 byte to terminal */ X--- 194,196 ---- X while (tp->tty_outleft > 0 && tp->tty_inhibited == RUNNING) { X! c = get_phys_byte(offset); /* fetch 1 byte from user space */ X out_char(tp, c); /* write 1 byte to terminal */ X*************** X*** 887,889 **** X if (color) { X! vid_base = COLOR_BASE; X vid_mask = C_VID_MASK; X--- 887,889 ---- X if (color) { X! vid_base = COLOR_BASE >> HCLICK_SHIFT; X vid_mask = C_VID_MASK; X*************** X*** 892,894 **** X } else { X! vid_base = MONO_BASE; X vid_mask = M_VID_MASK; X--- 892,894 ---- X } else { X! vid_base = MONO_BASE >> HCLICK_SHIFT; X vid_mask = M_VID_MASK; X*************** X*** 898,899 **** X--- 898,904 ---- X X+ #ifdef i80286 X+ if (processor >= 286) X+ vid_base = color ? COLOR_SELECTOR : MONO_SELECTOR; X+ #endif X+ X if (ega) { X*************** X*** 924,927 **** X } X- } X X /*===========================================================================* X--- 929,934 ---- X } X X+ enable_irq(KEYBOARD_IRQ); /* safe now everything initialised! */ X+ } X+ X /*===========================================================================* X*************** X*** 1021 **** X--- 1028,1050 ---- X } X+ X+ X+ #ifndef DEBUGGER /* debugger already has it */ X+ /*==========================================================================* X+ * scan_keyboard * X+ *==========================================================================*/ X+ PUBLIC int scan_keyboard() X+ { X+ /* Fetch the character from the keyboard hardware and acknowledge it. X+ * Code extracted from keyboard(). Keyboard() should call it instead. X+ */ X+ X+ int code; X+ int val; X+ X+ port_in(KEYBD, &code); /* get the scan code for the key struck */ X+ port_in(PORT_B, &val); /* strobe the keyboard to ack the char */ X+ port_out(PORT_B, val | KBIT); /* strobe the bit high */ X+ port_out(PORT_B, val); /* now strobe it low */ X+ return code; X+ } X+ #endif /* DEBUGGER false - scan_keyboard() */ END_OF_FILE if test 3676 -ne `wc -c <'kerneldif/console.c.cdif'`; then echo shar: \"'kerneldif/console.c.cdif'\" unpacked with wrong size! fi # end of 'kerneldif/console.c.cdif' fi if test -f 'kerneldif/const.h.cdif' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'kerneldif/const.h.cdif'\" else echo shar: Extracting \"'kerneldif/const.h.cdif'\" \(7031 characters\) sed "s/^X//" >'kerneldif/const.h.cdif' <<'END_OF_FILE' X*** kernel-1.3/const.h Thu Oct 6 21:07:12 1988 X--- kernel/const.h Thu Mar 23 03:19:08 1989 X*************** X*** 3,49 **** X #ifdef i8088 X- /* p_reg contains: ax, bx, cx, dx, si, di, bp, es, ds, cs, ss in that order. */ X- #define NR_REGS 11 /* number of general regs in each proc slot */ X- #define INIT_PSW 0x0200 /* initial psw */ X- #define INIT_SP (int*)0x0010 /* initial sp: 3 words pushed by kernel */ X X! /* The following values are used in the assembly code. Do not change the X! * values of 'ES_REG', 'DS_REG', 'CS_REG', or 'SS_REG' without making the X! * corresponding changes in the assembly code. X */ X! #define ES_REG 7 /* proc[i].p_reg[ESREG] is saved es */ X! #define DS_REG 8 /* proc[i].p_reg[DSREG] is saved ds */ X! #define CS_REG 9 /* proc[i].p_reg[CSREG] is saved cs */ X! #define SS_REG 10 /* proc[i].p_reg[SSREG] is saved ss */ X X! #define VECTOR_BYTES 284 /* bytes of interrupt vectors to save */ X! #define MEM_BYTES 655360L /* memory size for /dev/mem */ X X! /* Interrupt vectors */ X! #define DIVIDE_VECTOR 0 /* divide interrupt vector */ X! #define CLOCK_VECTOR 8 /* clock interrupt vector */ X! #define KEYBOARD_VECTOR 9 /* keyboard interrupt vector */ X! #define ETHER_VECTOR 11 /* ethernet interrupt vector */ X! #define SECONDARY_VECTOR 11 /* RS232 interrupt vector for port 2 */ X! #define RS232_VECTOR 12 /* RS232 interrupt vector for port 1 */ X! #define XT_WINI_VECTOR 13 /* xt winchester interrupt vector */ X! #define FLOPPY_VECTOR 14 /* floppy disk interrupt vector */ X! #define PRINTER_VECTOR 15 /* line printer interrupt vector */ X! #define SYS_VECTOR 32 /* system calls are made with int SYSVEC */ X! #define AT_WINI_VECTOR 118 /* at winchester interrupt vector */ X! #define PS_KEYB_VECTOR 0x71 /* keyboard interrupt vector for PS/2 */ X X! /* The 8259A interrupt controller has to be re-enabled after each interrupt. */ X #define INT_CTL 0x20 /* I/O port for interrupt controller */ X #define INT_CTLMASK 0x21 /* setting bits in this port disables ints */ X! #define INT2_CTL 0xA0 /* I/O port for second interrupt controller */ X! #define INT2_MASK 0xA1 /* setting bits in this port disables ints */ X! #define ENABLE 0x20 /* code used to re-enable after an interrupt */ X! #define PCR 0x65 /* Planar Control Register */ X! #endif X X! #define K_STACK_BYTES 512 /* how many bytes for the kernel stack */ X X! #define RET_REG 0 /* system call return codes go in this reg */ X! #define IDLE -999 /* 'cur_proc' = IDLE means nobody is running */ X! X /* The following items pertain to the 3 scheduling queues. */ X--- 3,92 ---- X #ifdef i8088 X X! #define INIT_PSW 0x0200 /* initial psw */ X! #define INIT_TASK_PSW 0x1200 /* initial psw for tasks (with IOPL 1) */ X! X! /* Initial sp for mm, fs and init. X! * 2 bytes for short jump X! * 2 bytes unused X! * 3 words for init_org[] used by fs only X! * 3 words for real mode debugger trap X! * 3 words for save and restart temporaries X! * 3 words for interrupt X! * Leave no margin, to flush bugs early. X */ X! #define INIT_SP (2 + 2 + 3 * 2 + 3 * 2 + 3 * 2 + 3 * 2) X X! #define HCLICK_SHIFT 4 /* log2 of HCLICK_SIZE */ X! #define HCLICK_SIZE 16 /* hardware segment conversion magic */ X X! #define ALIGNMENT 4 /* align large items to a multiple of this */ X! #define VECTOR_BYTES 284 /* bytes of interrupt vectors to save */ X! X! /* Interrupt vectors defined/reserved by processor */ X! #define DIVIDE_VECTOR 0 /* divide error */ X! #define DEBUG_VECTOR 1 /* single step (trace) */ X! #define NMI_VECTOR 2 /* non-maskable interrupt */ X! #define BREAKPOINT_VECTOR 3 /* software breakpoint */ X! #define OVERFLOW_VECTOR 4 /* from INTO */ X X! /* Fixed system call vector (the only software interrupt). */ X! #define SYS_VECTOR 32 /* system calls are made with int SYSVEC */ X! X! /* Suitable irq bases for hardware interrupts. Reprogram the 8259(s) from X! * the PC BIOS defaults since the BIOS doesn't respect all the processor's X! * reserved vectors (0 to 31). X! */ X! #define IRQ0_VECTOR 0x28 /* more or less arbitrary, but > 32 */ X! #define IRQ8_VECTOR 0x30 /* together for simplicity */ X! X! /* Hardware interrupt numbers. */ X! #define CLOCK_IRQ 0 X! #define KEYBOARD_IRQ 1 X! #define CASCADE_IRQ 2 /* cascade enable for 2nd AT controller */ X! #define ETHER_IRQ 3 /* ethernet interrupt vector */ X! #define SECONDARY_IRQ 3 /* RS232 interrupt vector for port 2 */ X! #define RS232_IRQ 4 /* RS232 interrupt vector for port 1 */ X! #define XT_WINI_IRQ 5 /* xt winchester */ X! #define FLOPPY_IRQ 6 /* floppy disk */ X! #define PRINTER_IRQ 7 X! #define AT_WINI_IRQ 14 /* at winchester */ X! #define PS_KEYB_IRQ 9 /* keyboard interrupt vector for PS/2 */ X! X! /* Hardware vector numbers. */ X! #define CLOCK_VECTOR ((CLOCK_IRQ & 0x07) + IRQ0_VECTOR) X! #define KEYBOARD_VECTOR ((KEYBOARD_IRQ & 0x07) + IRQ0_VECTOR) X! #define ETHER_VECTOR ((ETHER_IRQ & 0x07) + IRQ0_VECTOR) X! #define SECONDARY_VECTOR ((SECONDARY_IRQ & 0x07) + IRQ0_VECTOR) X! #define RS232_VECTOR ((RS232_IRQ & 0x07) + IRQ0_VECTOR) X! #define XT_WINI_VECTOR ((XT_WINI_IRQ & 0x07) + IRQ0_VECTOR) X! #define FLOPPY_VECTOR ((FLOPPY_IRQ & 0x07) + IRQ0_VECTOR) X! #define PRINTER_VECTOR ((PRINTER_IRQ & 0x07) + IRQ0_VECTOR) X! #define AT_WINI_VECTOR ((AT_WINI_IRQ & 0x07) + IRQ8_VECTOR) X! #define PS_KEYB_VECTOR ((PS_KEYB_IRQ & 0x07) + IRQ8_VECTOR) X! X! /* 8259A interrupt controller ports. */ X #define INT_CTL 0x20 /* I/O port for interrupt controller */ X #define INT_CTLMASK 0x21 /* setting bits in this port disables ints */ X! #define INT2_CTL 0xA0 /* I/O port for second interrupt controller */ X! #define INT2_MASK 0xA1 /* setting bits in this port disables ints */ X X! /* Magic numbers for interrupt controller. */ X! #define ENABLE 0x20 /* code used to re-enable after an interrupt */ X! X! /* Sizes of memory tables. */ X! #define NR_MEMS 4 /* number of chunks of memory */ X X! /* Magic memory locations and sizes. */ X! #define COLOR_BASE 0xB8000L /* base of color video memory */ X! #define COLOR_SIZE 0x8000L /* maximum usable color video memory */ X! #define MONO_BASE 0xB0000L /* base of mono video memory */ X! #define MONO_SIZE 0x8000L /* maximum usable mono video memory */ X! X! /* Misplaced stuff */ X! #define PCR 0x65 /* Planar Control Register */ X! X! #endif /* i8088 */ X! X! #define K_STACK_BYTES 512 /* how many bytes for the kernel stack */ X! X /* The following items pertain to the 3 scheduling queues. */ X*************** X*** 55 **** X--- 98,104 ---- X #define printf printk /* the kernel really uses printk, not printf */ X+ X+ #if CLICK_SIZE >= HCLICK_SIZE X+ #define click_to_hclick(n) ((n) << (CLICK_SHIFT - HCLICK_SHIFT)) X+ #else X+ #define click_to_hclick(n) ((n) >> (HCLICK_SHIFT - CLICK_SHIFT)) X+ #endif END_OF_FILE if test 7031 -ne `wc -c <'kerneldif/const.h.cdif'`; then echo shar: \"'kerneldif/const.h.cdif'\" unpacked with wrong size! fi # end of 'kerneldif/const.h.cdif' fi if test -f 'kerneldif/tty.c.cdif' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'kerneldif/tty.c.cdif'\" else echo shar: Extracting \"'kerneldif/tty.c.cdif'\" \(808 characters\) sed "s/^X//" >'kerneldif/tty.c.cdif' <<'END_OF_FILE' X*** kernel-1.3/tty.c Thu Oct 20 13:15:35 1988 X--- kernel/tty.c Sat Mar 11 20:11:53 1989 X*************** X*** 160,162 **** X old_state = lock(); X! ptr = m_ptr->ADDRESS; /* pointer to accumulated char array */ X copy_ptr = tty_copy_buf; /* ptr to shadow array where chars copied */ X--- 160,162 ---- X old_state = lock(); X! ptr = tty_driver_buf; /* pointer to accumulated char array */ X copy_ptr = tty_copy_buf; /* ptr to shadow array where chars copied */ X*************** X*** 168,170 **** X *copy_ptr++ = *ptr++; /* copy the array to safety */ X! ptr = m_ptr->ADDRESS; X tty_buf_count(ptr) = 0; /* accumulation count set to 0 */ X--- 168,170 ---- X *copy_ptr++ = *ptr++; /* copy the array to safety */ X! ptr = tty_driver_buf; X tty_buf_count(ptr) = 0; /* accumulation count set to 0 */ END_OF_FILE if test 808 -ne `wc -c <'kerneldif/tty.c.cdif'`; then echo shar: \"'kerneldif/tty.c.cdif'\" unpacked with wrong size! fi # end of 'kerneldif/tty.c.cdif' fi echo shar: End of archive 3 \(of 10\). cp /dev/null ark3isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 10 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Division of Information Technology (Melbourne), Phone +61 3 347 8644 C.S.I.R.O. Fax +61 3 347 8987 55 Barry St. Telex AA 152914 Carlton, Vic, 3053, Australia E-mail: worsley@ditmela.oz.au