kjh@pollux.usc.edu (Kenneth J. Hendrickson) (06/08/91)
This release of my kernel diffs includes the following: New: o ----> support for one-colour VGA displays (paper-white) Old: o improved handling of ansi sequences for all display types o screen blanking o ^U instead of @ for the KILL character, and handling similar to the BSD method (erasing the line) o ^C instead of DEL for the INT character o change of time slice for better scheduling of compute intensive background tasks. Other people's schedulers aren't included (yet), but eventually I'll get around to getting this in my own kernel. o EGA 43-line mode and VGA 50-line mode Discussion: Here are my most recent enhancements to the Minix kernel. This release mostly has what was previously released, but a significant improvement is included here for those who (like myself) have a monochrome VGA display, that displays about 256 shades of grey in graphics modes, and 16 shades of grey in text modes (like the old monochrome CGA displays). If you have such a display, use these mods, and define VGAMONO in the makefile. This will get you a paper-white display, with black text on a white background. Bold text will *really* be a darker shade of black than the normal text! (This is the only way in existance to get real bold on a paper-white display.) All normal video modes will have a darker shade of text than the background shade, and all reverse video modes will have a lighter shade of text than the background. Underlining is shown by changing the background shade. Blinking works. All combinations of: bold, underlined, reverse video, and blinking work correctly. A file called 'attrib' is included to show you various attributes. All commands to change the screen colour are ignored (because you don't have a colour screen, and this would mess up the attributes anyway). If you don't have a one-colour VGA display, you DON'T want to define VGAMONO in your makefile. Instead, you should edit console.c, after the #else, and select your favourite colour combination for the constant BLANK. I like green on black. You *could* simulate a pagewhite display by choosing black text on a white background. In this case, underline will show up as blue, and bold will show up as a brighter shade of the foreground colour. Bold won't be available in reverse video modes (due to a limitiation of your hardware). Blinking would of course work. (I like black text on white background, because the letters look continuous rather than being made up of dots. The background is made up of dots [lines] but your brain doesn't seem to notice this. The display looks like it has higher resolution that it really does.) A file called 'colour' is included to show you various colours, and different attributes also. If you have a monochrome VGA display, or simulate one on your colour VGA display, you probably want to define WHITE_BORDER to turn on a white border. For all monitor types, defining SCNBLANK will get you a screen blanking feature. If the standard bit-diddling method doesn't work with your hardware, the SCNBLANK_ARRAY_METHOD will, with all hardware types, at the expense of a little extra memory required by the kernel. The time constant is set near the end of const.h to 15 minutes. Two makefiles are included. makefile.bcc is for people who are running Minix-386. makefile.ack is for those who aren't. The following is a shar file. Remove the beginning, and feed it to unshar or sh. If wanted, I can post this again uuencoded for BITNET and IBM {ugh! :-(} people. Why can't IBM get with the world? {Did I just ruin my chances for future employment there? :-)} ---------- CUT HERE ---------- echo x - clock.c.cdif sed '/^X/s///' > clock.c.cdif << '/' X*** clock.c Sun Nov 4 00:50:39 1990 X--- /usr/src/kernel/clock.c Fri Jul 20 01:19:11 1990 X*************** X*** 32,38 **** X #include "proc.h" X X /* Constant definitions. */ X! #define MILLISEC 18 /* how often to call the scheduler (msec) */ X #define SCHED_RATE (MILLISEC*HZ/1000) /* number of ticks per schedule */ X X /* Clock parameters. */ X--- 32,38 ---- X #include "proc.h" X X /* Constant definitions. */ X! #define MILLISEC 100 /* how often to call the scheduler (msec) */ X #define SCHED_RATE (MILLISEC*HZ/1000) /* number of ticks per schedule */ X X /* Clock parameters. */ X*************** X*** 86,106 **** X X lock(); X realtime += pending_ticks; /* transfer ticks from low level handler */ X- unlock(); X- #ifdef SCNBLANK X- if (displaytime > 0) { X- lock(); X- displaytime -= pending_ticks; /* */ X- unlock(); X- if (displaytime <= 0) { X- lock(); X- displaytime = -1; X- unlock(); X- scr_disable (); X- } X- } X- #endif X- lock(); X pending_ticks = 0; X unlock(); X X--- 86,91 ---- X*************** X*** 231,241 **** X { X /* Initialize channel 0 of the 8253A timer to e.g. 60 Hz. */ X X- #ifdef SCNBLANK X- lock(); X- displaytime = dtimeout = DISPLAY_TIMEOUT; /* display timeout timer */ X- unlock(); X- #endif X out_byte(TIMER_MODE, SQUARE_WAVE); /* set timer to run continuously */ X out_byte(TIMER0, TIMER_COUNT); /* load timer low byte */ X out_byte(TIMER0, TIMER_COUNT >> 8); /* load timer high byte */ X--- 216,221 ---- / echo x - console.c.cdif sed '/^X/s///' > console.c.cdif << '/' X*** console.c Fri Jun 7 03:27:04 1991 X--- /usr/src/kernel/console.c Fri Jul 20 01:19:12 1990 X*************** X*** 8,69 **** X #include "tty.h" X X /* Definitions used by the console driver. */ X- #ifdef SCNBLANK X- #define VID_ENABLE 0x0D /* mask for enable */ X- #define VID_DISABLE 0x05 /* mask for disable */ X- #endif X #define C_VID_MASK 0x3FFF /* mask for 16K video RAM */ X #define M_VID_MASK 0x0FFF /* mask for 4K video RAM */ X #define C_RETRACE 0x0300 /* how many characters to display at once */ X #define M_RETRACE 0x7000 /* how many characters to display at once */ X! X! #ifdef VGAMONO X! #define BLANK 0x7200 /* determines cursor colour on blank screen */ X! /* VM_xyz for VGA MONO characteristics X! * x == r non-reverse video X! * x == R reverse video X! * y == b non-bold X! * y == B bold X! * z == u non-underlined X! * z == U underlined X! * blinking is handled normally */ X! #define VM_rbu 0x7200 /* green/white, same as BLANK */ X! #define VM_rBu 0x7000 /* black/white */ X! #define VM_rbU 0x3200 /* green/cyan */ X! #define VM_rBU 0x3000 /* black/cyan */ X! #define VM_Rbu 0x0700 /* white/black */ X! #define VM_RBu 0x0f00 /* bright white/black */ X! #define VM_RbU 0x3700 /* white/cyan */ X! #define VM_RBU 0x3f00 /* bright white/cyan */ X! #else X! #define BLANK 0x0700 /* determines cursor colour on blank screen */ X! #endif X! /* Bit 14 (0x4000) is for background Red X! * Bit 13 (0x2000) is for background Green X! * Bit 12 (0x1000) is for background Blue X! * Bit 10 (0x0400) is for foreground Red X! * Bit 9 (0x0200) is for foreground Green X! * Bit 8 (0x0100) is for foreground Blue X! * It is probably unwise to set bits 15 or 11 of BLANK. X! * Bit 15 (0x8000) is for foreground blinking X! * Bit 11 (0x0800) is for foreground intensity X! * X! * 0x0200 is green on black X! * 0x0700 is white on black X! * 0x7000 is black on white X! */ X! X! #define LINE_WIDTH 80 /* # characters on a line */ X! #ifdef EGA43 X! #define SCR_LINES 43 /* # lines on the screen */ X! #endif X! #ifdef VGA50 X! #define SCR_LINES 50 /* # lines on the screen */ X! #endif X! #ifndef SCR_LINES X! #define SCR_LINES 25 /* # lines on the screen */ X! #endif X! X #define GO_FORWARD 0 /* scroll forward */ X #define GO_BACKWARD 1 /* scroll backward */ X X--- 8,21 ---- X #include "tty.h" X X /* Definitions used by the console driver. */ X #define C_VID_MASK 0x3FFF /* mask for 16K video RAM */ X #define M_VID_MASK 0x0FFF /* mask for 4K video RAM */ X #define C_RETRACE 0x0300 /* how many characters to display at once */ X #define M_RETRACE 0x7000 /* how many characters to display at once */ X! #define BLANK 0x0700 /* determines cursor color on blank screen */ X! #define LINE_WIDTH 80 /* # characters on a line */ X! #define SCR_LINES 25 /* # lines on the screen */ X! #define SCR_BYTES 8000 /* size video RAM. multiple of 2*LINE_WIDTH */ X #define GO_FORWARD 0 /* scroll forward */ X #define GO_BACKWARD 1 /* scroll backward */ X X*************** X*** 71,82 **** X #define M_6845 0x3B0 /* port for 6845 mono */ X #define C_6845 0x3D0 /* port for 6845 color */ X #define EGA 0x3C0 /* port for EGA card */ X- #ifdef SCNBLANK X- #define M_MODE 0x3B8 /* mono mode register */ X- #define C_MODE 0x3D8 /* color mode register */ X- #define CRT_STAT_MONO 0x3BA /* CRT status register port (monochrome) */ X- #define CRT_STAT_COLR 0x3DA /* CRT status register port (colour) */ X- #endif X #define INDEX 4 /* 6845's index register */ X #define DATA 5 /* 6845's data register */ X #define CUR_SIZE 10 /* 6845's cursor size register */ X--- 23,28 ---- X*************** X*** 90,99 **** X /* Global variables used by the console driver. */ X PUBLIC int vid_mask; /* 037777 for color (16K) or 07777 for mono */ X PUBLIC int vid_port; /* I/O port for accessing 6845 */ X! #ifdef SCNBLANK X! PUBLIC int mode_port; /* I/O port for accessing mode */ X! #endif X! PUBLIC int blank_color = BLANK; /* display code for blank */ X X /* Private variables used by the console driver. */ X PRIVATE vid_retrace; /* how many characters to display per burst */ X--- 36,42 ---- X /* Global variables used by the console driver. */ X PUBLIC int vid_mask; /* 037777 for color (16K) or 07777 for mono */ X PUBLIC int vid_port; /* I/O port for accessing 6845 */ X! PUBLIC int blank_color = 0x0700; /* display code for blank */ X X /* Private variables used by the console driver. */ X PRIVATE vid_retrace; /* how many characters to display per burst */ X*************** X*** 101,126 **** X PRIVATE unsigned vid_base; /* base of video ram (0xB000 or 0xB800) */ X PRIVATE int one_con_attribute; /* current attribute byte << 8 */ X X! #ifdef SCNBLANK X! #ifdef SCNBLANK_ARRAY_METHOD X! /* in the ARRAY_METHOD, screen contents are copied to vid_buf for blanking */ X! /* in the other method, bits in the video controller card are diddled */ X! #define VID_BUF_SIZE (2*LINE_WIDTH*(SCR_LINES)) X! PRIVATE char vid_buf[VID_BUF_SIZE]; /* holds screen while blanked */ X! #endif X! #endif X! X! #ifdef VGAMONO X! PRIVATE char VM_bold = 0; /* 1 if bold */ X! PRIVATE char VM_underline = 0; /* 1 if underlined */ X! PRIVATE char VM_rev_video = 0; /* 1 if reverse video */ X! PRIVATE char VM_blink = 0; /* 1 if blinking */ X! #endif X! X! #ifndef VGAMONO X! /* Map from ANSI colors to the attributes used by the PC */ X! PRIVATE int ansi_colors[8] = {0, 4, 2, 6, 1, 5, 3, 7}; X! #endif X X FORWARD void beep(); X FORWARD void do_escape(); X--- 44,51 ---- X PRIVATE unsigned vid_base; /* base of video ram (0xB000 or 0xB800) */ X PRIVATE int one_con_attribute; /* current attribute byte << 8 */ X X! /* Map from ANSI colors to the attributes used by the PC */ X! PRIVATE int ansi_colors[8] = {0, 4, 2, 6, 1, 5, 3, 7}; X X FORWARD void beep(); X FORWARD void do_escape(); X*************** X*** 132,140 **** X FORWARD void scroll_screen(); X FORWARD void set_6845(); X FORWARD void stop_beep(); X- #ifdef VGAMONO X- FORWARD void VM_set(); X- #endif X X /*===========================================================================* X * console * X--- 57,62 ---- X*************** X*** 210,227 **** X register struct tty_struct *tp; /* pointer to tty struct */ X char c; /* character to be output */ X { X! X! #ifdef SCNBLANK X! if (tp == &tty_struct[0]) { /* check for console activity */ X! if (displaytime < 0) X! scr_enable(); /* enable the screen, after inactivity */ X! lock(); X! displaytime = dtimeout; X! unlock(); X! } X! #endif X! X! /* Output a character on the console. Check for escape sequences first. */ X if (tp->tty_esc_state > 0) { X parse_escape(tp, c); X return; X--- 132,138 ---- X register struct tty_struct *tp; /* pointer to tty struct */ X char c; /* character to be output */ X { X! /* Output a character on the console. Check for escape sequences first. */ X if (tp->tty_esc_state > 0) { X parse_escape(tp, c); X return; X*************** X*** 437,444 **** X * ESC [nM deletes n lines at cursor X * ESC [nP deletes n chars at cursor X * ESC [n@ inserts n chars at cursor X! * ESC [nm enables rendition n X! (0=normal, 1=bold, 4=underlined, 5=blinking, 7=reverse) X * ESC M scrolls the screen backwards if the cursor is on the top line X */ X X--- 348,354 ---- X * ESC [nM deletes n lines at cursor X * ESC [nP deletes n chars at cursor X * ESC [n@ inserts n chars at cursor X! * ESC [nm enables rendition n (0=normal, 4=bold, 5=blinking, 7=reverse) X * ESC M scrolls the screen backwards if the cursor is on the top line X */ X X*************** X*** 543,549 **** X break; X X case 'J': /* ESC [J clears screen from cursor */ X! if (/*value == 0*/ 1) { X n=2*((SCR_LINES-(tp->tty_row+1))*LINE_WIDTH X + LINE_WIDTH - (tp->tty_column)); X vx = tp->tty_vid; X--- 453,459 ---- X break; X X case 'J': /* ESC [J clears screen from cursor */ X! if (value == 0) { X n=2*((SCR_LINES-(tp->tty_row+1))*LINE_WIDTH X + LINE_WIDTH - (tp->tty_column)); X vx = tp->tty_vid; X*************** X*** 552,558 **** X break; X X case 'K': /* ESC [K clears line from cursor */ X! if (/*value == 0*/ 1) { X n = 2 * (LINE_WIDTH - (tp->tty_column)); X vid_copy(NIL_PTR, vid_base, tp->tty_vid, n/2); X } X--- 462,468 ---- X break; X X case 'K': /* ESC [K clears line from cursor */ X! if (value == 0) { X n = 2 * (LINE_WIDTH - (tp->tty_column)); X vid_copy(NIL_PTR, vid_base, tp->tty_vid, n/2); X } X*************** X*** 619,710 **** X case 'm': /* ESC [nm enables rendition n */ X switch (value) { X case 1: /* BOLD */ X! #ifdef VGAMONO X! VM_bold = 1; X! VM_set(); X! #else X! one_con_attribute |= 0x0800; /* inten */ X! #endif X break; X X case 4: /* UNDERLINE */ X! #ifdef VGAMONO X! VM_underline = 1; X! VM_set(); X! #else X! if (color) X! if ((attr & 0x6000) == 0) X! /* cyan on [black|blue] bg X! * This is not standard, X! * but it is easier to see. X! */ X! one_con_attribute = X! (attr & 0xf8ff) | 0x0300; X! else X! /* blue on other bg */ X! one_con_attribute = X! (attr & 0xf8ff) | 0x0100; X else X one_con_attribute = /* ul */ X (attr & 0x8900); X- #endif X break; X X case 5: /* BLINKING */ X! /* VGA, EGA, CGA, and MONO can all blink */ X! #ifdef VGAMONO X! VM_blink = 1; X! #endif X! one_con_attribute |= 0x8000; /* blink */ X break; X X case 7: /* REVERSE (black on light grey) */ X! #ifdef VGAMONO X! VM_rev_video = 1; X! VM_set(); X! #else X! if (color) X! one_con_attribute = X! ((attr & 0x7000) >> 4) | X! ((attr & 0x0700) << 4) | X! (attr & 0x8800); X else if ((attr & 0x7000) == 0) X one_con_attribute = X (attr & 0x8800) | 0x7000; X else X one_con_attribute = X (attr & 0x8800) | 0x0700; X! #endif X! break; X! X! default: X! #ifdef VGAMONO X! /* colours can't change on VGA MONO */ X! if (value == 0) { X! VM_bold = 0; X! VM_underline = 0; X! VM_rev_video = 0; X! VM_blink = 0; X! VM_set(); X! } X! #else X! if (value >= 30 && value <= 37) { X! one_con_attribute = X! (attr & 0xf8ff) | X! (ansi_colors[(value - 30)] << 8); X! blank_color = X! (blank_color & 0xf8ff) | X (ansi_colors[(value - 30)] << 8); X } else if (value >= 40 && value <= 47) { X one_con_attribute = X! (attr & 0x8fff) | X! (ansi_colors[(value - 40)] << 12); X! blank_color = X! (blank_color & 0x8fff) | X (ansi_colors[(value - 40)] << 12); X } else X one_con_attribute = blank_color; X- #endif X break; X } X break; X--- 529,588 ---- X case 'm': /* ESC [nm enables rendition n */ X switch (value) { X case 1: /* BOLD */ X! if (color) X! one_con_attribute = /* red fg */ X! (attr & 0xf0ff) | 0x0400; X! else X! one_con_attribute |= 0x0800; /* inten*/ X break; X X case 4: /* UNDERLINE */ X! if (color) X! one_con_attribute = /* blue fg */ X! (attr & 0xf0ff) | 0x0100; X else X one_con_attribute = /* ul */ X (attr & 0x8900); X break; X X case 5: /* BLINKING */ X! if (color) /* can't blink color */ X! one_con_attribute = /* magenta fg */ X! (attr & 0xf0ff) | 0x0500; X! else X! one_con_attribute |= /* blink */ X! 0x8000; X break; X X case 7: /* REVERSE (black on light grey) */ X! if (color) X! one_con_attribute = X! ((attr & 0xf000) >> 4) | X! ((attr & 0x0f00) << 4); X else if ((attr & 0x7000) == 0) X one_con_attribute = X (attr & 0x8800) | 0x7000; X else X one_con_attribute = X (attr & 0x8800) | 0x0700; X! break; X! X! default: if (value >= 30 && value <= 37) { X! one_con_attribute = X! (attr & 0xf0ff) | X! (ansi_colors[(value - 30)] << 8); X! blank_color = X! (blank_color & 0xf0ff) | X (ansi_colors[(value - 30)] << 8); X } else if (value >= 40 && value <= 47) { X one_con_attribute = X! (attr & 0x0fff) | X! (ansi_colors[(value - 40)] << 12); X! blank_color = X! (blank_color & 0x0fff) | X (ansi_colors[(value - 40)] << 12); X } else X one_con_attribute = blank_color; X break; X } X break; X*************** X*** 717,747 **** X tp->tty_esc_state = 0; X } X X- #ifdef VGAMONO X- /*===========================================================================* X- * VM_set * X- *===========================================================================*/ X- PRIVATE void VM_set() X- { X- /* Set screen colour on monochrome VGA according to attributes. */ X- int attrib = (VM_rev_video << 8) | (VM_bold << 4) | (VM_underline); X- X- switch (attrib) { X- case 0x000: one_con_attribute = VM_rbu; break; X- case 0x001: one_con_attribute = VM_rbU; break; X- case 0x010: one_con_attribute = VM_rBu; break; X- case 0x011: one_con_attribute = VM_rBU; break; X- case 0x100: one_con_attribute = VM_Rbu; break; X- case 0x101: one_con_attribute = VM_RbU; break; X- case 0x110: one_con_attribute = VM_RBu; break; X- case 0x111: one_con_attribute = VM_RBU; break; X- default: one_con_attribute = VM_rbu; break; X- } X- if (VM_blink) X- one_con_attribute |= 0x8000; X- } X- #endif X- X /*===========================================================================* X * long_vid_copy * X *===========================================================================*/ X--- 595,600 ---- X*************** X*** 903,919 **** X vid_mask = C_VID_MASK; X vid_port = C_6845; X vid_retrace = C_RETRACE; X- #ifdef SCNBLANK X- mode_port = C_MODE; X- #endif X } else { X vid_base = protected_mode ? MONO_SELECTOR : physb_to_hclick(MONO_BASE); X vid_mask = M_VID_MASK; X vid_port = M_6845; X vid_retrace = M_RETRACE; X- #ifdef SCNBLANK X- mode_port = M_MODE; X- #endif X } X X if (ega) { X--- 756,766 ---- X*************** X*** 921,929 **** X vid_retrace = C_VID_MASK + 1; X } X X! #ifndef LINE_CURSOR X! set_6845(CUR_SIZE, CURSOR_SHAPE); /* set cursor shape (block) */ X! #endif X set_6845(VID_ORG, 0); /* use page 0 of video ram */ X move_to(&tty_struct[0], 0, SCR_LINES-1); /* move cursor to lower left */ X } X--- 768,774 ---- X vid_retrace = C_VID_MASK + 1; X } X X! set_6845(CUR_SIZE, CURSOR_SHAPE); /* set cursor shape */ X set_6845(VID_ORG, 0); /* use page 0 of video ram */ X move_to(&tty_struct[0], 0, SCR_LINES-1); /* move cursor to lower left */ X } X*************** X*** 958,1048 **** X printf("\033[H\033[J%sware scrolling enabled.\n", X softscroll ? "Soft" : "Hard"); X } X- X- X- #ifdef SCNBLANK X- /*===========================================================================* X- * screen blanking * X- *===========================================================================*/ X- X- PUBLIC void scr_enable() X- { X- int seq_addr_reg; /* contents of sequencer address register (VGA only) */ X- X- #ifdef WHITE_BORDER X- white_border(); X- #endif X- if (ega) { X- #ifndef SCNBLANK_ARRAY_METHOD X- lock(); X- in_byte(CRT_STAT_MONO); /* reset flip/flop if mono */ X- in_byte(CRT_STAT_COLR); /* reset flip/flop if colour */ X- out_byte(EGA,0x20); /* enable video */ X- unlock(); X- #else X- X- /* restore the screen from vid_buf[] */ X- lock(); X- vid_copy(vid_buf, vid_base, tty_struct[0].tty_org, VID_BUF_SIZE/2); X- unlock(); X- X- /* and turn the cursor back on */ X- move_to(&tty_struct[0], tty_struct[0].tty_column, tty_struct[0].tty_row); X- #endif X- } else { X- lock(); X- out_byte(mode_port, VID_ENABLE); /* set the mode register */ X- unlock(); X- } X- } X- X- PUBLIC void scr_disable() X- { X- int seq_addr_reg; /* contents of sequencer address register (VGA only) */ X- X- #ifdef WHITE_BORDER X- /* screen blanking doesn't work, unless the border is black */ X- black_border(); /* prepare for blanking */ X- #endif X- if (ega) { X- u16_t offset; X- X- #ifndef SCNBLANK_ARRAY_METHOD X- lock(); X- in_byte(CRT_STAT_MONO); /* reset flip/flop if mono */ X- in_byte(CRT_STAT_COLR); /* reset flip/flop if colour */ X- out_byte(EGA,0x00); /* disable video */ X- unlock(); X- #else X- char blackblank[2]; X- X- /* save the screen data into vid_buf[] */ X- lock(); X- for (offset = 0; offset < VID_BUF_SIZE; offset++) X- vid_buf[offset] = (char) get_byte(vid_base, tty_struct[0].tty_org+offset); X- X- /* blank the screen; be careful: blank_color might not be black */ X- /* #define PAGEWHITE for some pagewhite monitors, that display all X- * text in reverse video in order to achieve the pagewhite effect. X- */ X- blackblank[0] = ' '; X- #ifndef PAGEWHITE X- blackblank[1] = 0x00; /* black background and foreground */ X- #else X- blackblank[1] = 0x77; /* white (will be black on pagewhite) */ X- #endif X- for (offset = 0; offset < VID_BUF_SIZE; offset += 2) X- vid_copy(blackblank, vid_base, tty_struct[0].tty_org+offset, 1); X- unlock(); X- X- /* and turn the cursor off by moving it off the screen */ X- set_6845(CURSOR, (tty_struct[0].tty_org - 2) >> 1); X- #endif X- } else { X- lock(); X- out_byte(mode_port, VID_DISABLE); /* set the mode register */ X- unlock(); X- } X- } X- X- #endif X--- 803,805 ---- / echo x - const.h.cdif sed '/^X/s///' > const.h.cdif << '/' X*** const.h Fri Jun 7 05:51:53 1991 X--- /usr/src/kernel/const.h Fri Jul 20 01:19:13 1990 X*************** X*** 153,159 **** X #endif X X #define printf printk /* the kernel really uses printk, not printf */ X- X- #ifdef SCNBLANK X- #define DISPLAY_TIMEOUT (time_t)15*3600 /* about 15 minutes for 60 Hz */ X- #endif X--- 153,155 ---- / echo x - glo.h.cdif sed '/^X/s///' > glo.h.cdif << '/' X*** glo.h Fri Jun 7 01:09:18 1991 X--- /usr/src/kernel/glo.h Fri Jul 20 01:19:15 1990 X*************** X*** 42,57 **** X EXTERN int ega; /* nonzero if console is EGA */ X EXTERN int scan_code; /* scan code of key pressed to start minix */ X EXTERN int snow; /* nonzero if screen needs snow removal */ X- #ifdef SCNBLANK X- EXTERN time_t displaytime; /* display timeout timer */ X- EXTERN time_t dtimeout; /* display timeout timer */ X- EXTERN void scr_enable(); /* turn screen on */ X- EXTERN void scr_disable(); /* turn screen off (blank) */ X- #endif X- #ifdef WHITE_BORDER X- EXTERN void white_border(); /* set screen border (overscan) to white */ X- EXTERN void black_border(); /* set screen border (overscan) to black */ X- #endif X X /* Memory sizes. */ X EXTERN unsigned ext_memsize; /* initialized by assembler startup code */ X--- 42,47 ---- / echo x - keyboard.c.cdi sed '/^X/s///' > keyboard.c.cdi << '/' X*** keyboard.c Sun Nov 4 00:51:11 1990 X--- /usr/src/kernel/keyboard.c Fri Jul 20 01:19:16 1990 X*************** X*** 262,275 **** X kb = kb_addr(-NR_CONS); X *kb->iptr = code; X if (kb->iptr < kb->ibufend) { X! #ifdef SCNBLANK X! if (displaytime < 0) X! scr_enable(); X! lock(); /* protect shared variable */ X! displaytime = dtimeout; X! unlock(); X! #endif X! lock(); /* protect shared variable */ X tty_events += EVENT_THRESHOLD; /* C doesn't guarantee atomic */ X unlock(); X ++kb->iptr; X--- 262,268 ---- X kb = kb_addr(-NR_CONS); X *kb->iptr = code; X if (kb->iptr < kb->ibufend) { X! lock(); /* protect shared variable */ X tty_events += EVENT_THRESHOLD; /* C doesn't guarantee atomic */ X unlock(); X ++kb->iptr; / echo x - main.c.cdif sed '/^X/s///' > main.c.cdif << '/' X*** main.c Fri Jun 7 04:21:20 1991 X--- /usr/src/kernel/main.c Fri Jul 20 01:19:18 1990 X*************** X*** 55,67 **** X mpx_2hook(); X klib_2hook(); X X- #ifdef WHITE_BORDER X- /* Initially turn on the border on the console. X- * We can't do this until we are fully in 32-bit mode. X- */ X- white_border(); X- #endif X- X /* Clear the process table. X * Set up mappings for proc_addr() and proc_number() macros. X */ X--- 55,60 ---- / echo x - start.x.cdif sed '/^X/s///' > start.x.cdif << '/' X*** start.x Fri Jun 7 05:50:38 1991 X--- /usr/src/kernel/start.x Fri Jul 20 01:19:24 1990 X*************** X*** 50,81 **** X #define SET_PROTECT_VEC 0x15 /* set protected mode */ X # define SET_PROTECT_FUNC 0x89 X #define VIDEO 0x10 X! # define ALTERNATE_SELECT 0x12 /* alternate select (Prt-Sc) */ X! # define A_S_INFO 0x10 X! # define SET_VID_MOD 0x00 /* set video mode function */ X! # define TEXT80 0x03 /* 80x25 16-colour text mode */ X! # define CHAR_GEN 0x11 /* character generator interface */ X! # define LOAD_8x8 0x12 /* load the ROM BIOS 8x8 char set */ X! # define CRTC_PORT 0x3d4 /* CRTC address for colour (EGA) */ X! # define CUR_SVAL 0x06 /* cursor start value (underscore) */ X! # define CUR_EVAL 0x00 /* cursor end value (underscore) */ X! # define CUR_SREG 0x0a /* cursor start register number */ X! # define CUR_EREG 0x0b /* cursor end register number */ X! # define PRT_SC 0x20 /* select alternate Prt-Sc routine */ X! # define SCRL_WINUP 0x06 /* scroll window up function */ X! # define VIDATT 0x02 /* video attributes green/black */ X! # define LINE_WIDTH 80 /* number of characters per line */ X! # ifdef EGA43 X! # define SCR_LINES 43 /* number of lines on the screen */ X! # define EGA_OR_VGA X! # endif X! # ifdef VGA50 X! # define SCR_LINES 50 /* number of lines on the screen */ X! # define EGA_OR_VGA X! # endif X! # ifndef SCR_LINES X! # define SCR_LINES 25 /* number of lines on the screen */ X! # endif X X .text X |*===========================================================================* X--- 50,57 ---- X #define SET_PROTECT_VEC 0x15 /* set protected mode */ X # define SET_PROTECT_FUNC 0x89 X #define VIDEO 0x10 X! # define ALTERNATE_SELECT 0x12 X! # define A_S_INFO 0x10 X X .text X |*===========================================================================* X*************** X*** 198,250 **** X movb al,bl | success is determined by knowing X movb ah,#0 | a successful call will change bl X sub ax,#A_S_INFO | nonzero means it is EGA X- push ax | save correct return value X- X- #ifdef EGA_OR_VGA X- jz no_43 | non-EGA can't do 43-line mode X- X- | If the display is an EGA (or VGA), X- | Then establish 43-line (50-line) mode. X- | We have to do this now, as we can't do it in protected mode. X- X- movb ah,#SET_VID_MOD | set video mode function X- movb al,#TEXT80 | 80x25 16-colour text mode X- int VIDEO X- X- movb ah,#CHAR_GEN | character generator interface function X- movb al,#LOAD_8x8 | load the ROM BIOS 8x8 character set X- movb bl,#0 | bl = block to load X- int VIDEO | load 8x8 characters into RAM X- X- | set up for underscore cursor X- | console.c code will change to block cursor X- | unless disabled by compiling with X- | -DLINE_CURSOR X- mov dx,#CRTC_PORT | CRTC address port for colour X- movb ah,#CUR_SVAL | cursor start value X- movb al,#CUR_SREG | cursor start register number X- outw | update CRTC Cursor Start register X- movb ah,#CUR_EVAL | cursor end value X- movb al,#CUR_EREG | cursor end register number X- outw | update CRTC Cursor End register X- X- movb ah,#ALTERNATE_SELECT | alternate select function X- movb bl,#PRT_SC | use alternate video BIOS Prt-Sc routine X- int VIDEO | update INT 5 vector (print screen) X- #endif X- X- no_43: X- | Use scroll window to clear screen X- movb ah,#SCRL_WINUP | scroll window up X- movb al,#0 | number of lines to scroll X- movb bh,#VIDATT | and set the video attributes X- xor cx,cx X- movb dh,#SCR_LINES-1 | number of lines on the screen X- movb dl,#LINE_WIDTH-1 | number of characters per line X- int VIDEO X- X- pop ax | pass correct return value X- | (from 7th line after _get_ega: label) X ret X X X--- 174,179 ---- / echo x - tty.c.cdif sed '/^X/s///' > tty.c.cdif << '/' X*** tty.c Mon Jul 23 03:52:35 1990 X--- /usr/src/kernel/tty.c Fri Jul 20 01:19:27 1990 X*************** X*** 281,291 **** X X /* Now do kill processing (remove current line). */ X if (ch == tp->tty_kill && tp->tty_escaped == NOT_ESCAPED) { X! while(chuck(tp) == OK) X! /* keep looping */ X! back_over(tp); X! /* echo(tp, tp->tty_kill); */ X! /* echo(tp, '\n'); */ X return; X } X X--- 281,289 ---- X X /* Now do kill processing (remove current line). */ X if (ch == tp->tty_kill && tp->tty_escaped == NOT_ESCAPED) { X! while(chuck(tp) == OK) /* keep looping */ ; X! echo(tp, tp->tty_kill); X! echo(tp, '\n'); X return; X } X / echo x - tty.h.cdif sed '/^X/s///' > tty.h.cdif << '/' X*** tty.h Mon Jul 23 03:43:20 1990 X--- /usr/src/kernel/tty.h Fri Jul 20 01:19:27 1990 X*************** X*** 9,17 **** X #define MAX_ESC_PARMS 2 /* number of escape sequence params allowed */ X X #define ERASE_CHAR '\b' /* default erase character */ X! #define KILL_CHAR 025 /* default kill character ^U (was '@') */ X! #define INTR_CHAR 003 /* default interrupt character ^C (was 0177) */ X! #define QUIT_CHAR (char) 034 /* default quit character ^\ */ X #define XOFF_CHAR (char) 023 /* default x-off character (CTRL-S) */ X #define XON_CHAR (char) 021 /* default x-on character (CTRL-Q) */ X #define EOT_CHAR (char) 004 /* CTRL-D */ X--- 9,17 ---- X #define MAX_ESC_PARMS 2 /* number of escape sequence params allowed */ X X #define ERASE_CHAR '\b' /* default erase character */ X! #define KILL_CHAR '@' /* default kill character */ X! #define INTR_CHAR (char)0177 /* default interrupt character */ X! #define QUIT_CHAR (char) 034 /* default quit character */ X #define XOFF_CHAR (char) 023 /* default x-off character (CTRL-S) */ X #define XON_CHAR (char) 021 /* default x-on character (CTRL-Q) */ X #define EOT_CHAR (char) 004 /* CTRL-D */ X*************** X*** 75,82 **** X X /* User settable characters: erase, kill, interrupt, quit, x-on; x-off. */ X char tty_erase; /* char used to erase 1 char (init ^H) */ X! char tty_kill; /* char used to erase a line (init ^U was @) */ X! char tty_intr; /* char used to send SIGINT (init ^C was DEL) */ X char tty_quit; /* char used for core dump (init CTRL-\) */ X char tty_xon; /* char used to start output (init CTRL-Q)*/ X char tty_xoff; /* char used to stop output (init CTRL-S) */ X--- 75,82 ---- X X /* User settable characters: erase, kill, interrupt, quit, x-on; x-off. */ X char tty_erase; /* char used to erase 1 char (init ^H) */ X! char tty_kill; /* char used to erase a line (init @) */ X! char tty_intr; /* char used to send SIGINT (init DEL) */ X char tty_quit; /* char used for core dump (init CTRL-\) */ X char tty_xon; /* char used to start output (init CTRL-Q)*/ X char tty_xoff; /* char used to stop output (init CTRL-S) */ / echo x - console1.x sed '/^X/s///' > console1.x << '/' X X| This file contains two assembly language routines, X| for changing the colour of the screen border. X X| written by Kenneth J. Hendrickson, kjh@usc.edu X X| These routines used to be in start.x, which was fine as X| long as Minix-386 was not used. These routines need to X| be assembled in 32-bit mode, and called in 32-bit mode, X| for Minix-386. X X#ifdef WHITE_BORDER X.define _white_border | set console overscan (border) to white X.define _black_border | set console overscan (border) to black X X#define VIDEO 0x10 | used in BIOS methods X X .text X X|*===========================================================================* X|* white_border * X|*===========================================================================* X X| PUBLIC void white_border(); X| Set the border on the console to white. X X_white_border: X| The following 2 BIOS methods cannot be used if Minix is to run X| in protected mode. They are provided here for informational X| purposes only, and are appropriately commented out. X X| This method DOESN'T work for EGA/VGA! It was designed primarily for CGA. X| In fact, this code puts the display into 40x25 mode for OAK VGA! :-( X| 40x25 mode isn't initiated in Genoa VGA. X| movb ah,0x0b X| movb bh,0 | select border colour X| movb bl,0x07 | colour 7=white X| int VIDEO | select white border for pagewhite X X| Use this method for EGA/VGA. X| movb ah,#0x10 | set palette registers, set attributes X| movb al,1 | select overscan (border) colour X| movb bh,0x07 | colour 7=white X| | 1=blue, 2=green, 4=red X| int VIDEO | select white border for pagewhite X X| Since the BIOS methods don't work, we program the video controller directly. X#ifdef INTEL_32BITS X mov edx,#0x03da | we should check for mono; mono uses 0x03ba X#else X mov dx,#0x03da | we should check for mono; mono uses 0x03ba X#endif Xwhite0: in X testb al,#8 X jnz white0 | wait here for something? (BIOS does this.) Xwhite1: in X testb al,#8 X jz white1 X#ifdef INTEL_32BITS X mov edx,#0x03c0 X#else X mov dx,#0x03c0 X#endif X movb al,#0x11 | select overscan register X out X movb al,#0x07 | colour 7=white X out X movb al,#0x20 X out X ret X X X|*===========================================================================* X|* black_border * X|*===========================================================================* X X| PUBLIC void black_border(); X| Set the border on the console to black to prepare for screen blanking. X X_black_border: X| The following 2 BIOS methods cannot be used if Minix is to run X| in protected mode. They are provided here for informational X| purposes only, and are appropriately commented out. X X| This method DOESN'T work for EGA/VGA! It was designed primarily for CGA. X| In fact, this code puts the display into 40x25 mode for OAK VGA! :-( X| 40x25 mode isn't initiated in Genoa VGA. X| movb ah,0x0b X| movb bh,0 | select border colour X| movb bl,0x00 | colour 0=black X| int VIDEO | select black border for screen blanking X X| Use this method for EGA/VGA. X| movb ah,#0x10 | set palette registers, set attributes X| movb al,1 | select overscan (border) colour X| movb bh,0x00 | colour 7=white X| | 1=blue, 2=green, 4=red X| int VIDEO | select white border for pagewhite X X| Since the BIOS methods don't work, we program the video controller directly. X#ifdef INTEL_32BITS X mov edx,#0x03da | we should check for mono; mono uses 0x03ba X#else X mov dx,#0x03da | we should check for mono; mono uses 0x03ba X#endif Xblack0: in X testb al,#8 X jnz black0 | wait here for something? (BIOS does this.) Xblack1: in X testb al,#8 X jz black1 X#ifdef INTEL_32BITS X mov edx,#0x03c0 X#else X mov dx,#0x03c0 X#endif X movb al,#0x11 | select overscan register X out X movb al,#0x00 | colour 0=black X out X movb al,#0x20 X out X ret X X#endif / echo x - makefile.bcc sed '/^X/s///' > makefile.bcc << '/' X#Makefile for kernel using Bruce's Minix directory layout and compiler. X#The following nonstandard flags are used: X#-0: produce 16-bit (8086) object code X#-3: produce 32-bit (80386) object code X#-DEGA43 use 43-line mode on EGA displays X#-DVGA50 use 50-line mode on VGA displays X#-DSCNBLANK use automatic screen blanking X#-DVGAMONO use a monochrome VGA display (black text on white background) X# -DWHITE_BORDER is recommended with VGAMONO X#-DWHITE_BORDER use a white border (for pagewhite) X X#modified by Kenneth J. Hendrickson, kjh@usc.edu, 6 June 1991 X XAS =as XCC =bcc -3 XCC88 =bcc -0 XCFLAGS =-DINTEL_32BITS -DLINE_CURSOR -DSCNBLANK -DVGAMONO -DWHITE_BORDER XCPP =/lib/gnu-cpp XCPPFLAGS =-P -DINTEL_32BITS -traditional -DLINE_CURSOR -DSCNBLANK -DVGAMONO -DWHITE_BORDER XLD =ld -3 XLDFLAGS =-i XLIBS =/usr/local/lib/i386/libc.a XLONGLIB =longlib.a XSTART =start.o X Xa =kernel.h $h/config.h $h/const.h $h/type.h \ X $s/types.h $i/limits.h $i/errno.h \ X const.h type.h proto.h glo.h Xh =/usr/include/minix Xi =/usr/include Xs =/usr/include/sys Xm =makefile X X.c.o: X $(CC) $(CFLAGS) \ X -c $< X XKEROBJS =cstart.o protect.o protect1.o klib.o mpx.o wini.o \ X table.o main.o tty.o floppy.o system.o proc.o \ X clock.o memory.o console.o rs232.o rs2.o printer.o \ X dmp.o exception.o i8259.o misc.o keyboard.o console1.o XSOBJS =start.s klib.s mpx.s rs2.s console1.s X X#Rules. X.SUFFIXES: .x # .x files are .s files which need C-preprocessing X.x.s: X $(CPP) $(CPPFLAGS) \ X $< >$@ X.s.o: X $(AS) -3 $< -o $@ X.x.o: X $(CPP) $(CPPFLAGS) \ X $< >$@ X $(AS) -3 $< -o $@ X X#What to make. Xkernel: $(START) $(KEROBJS) $(LIBS) $(END) $(LONGLIB) X $(LD) $(LDFLAGS) -o kernel \ X $(START) $(KEROBJS) \ X $(LIBS) $(LONGLIB) $(END) X Xclean: X rm -f $(START) $(KEROBJS) $(SOBJS) X Xklib.s: $h/config.h $h/const.h const.h protect.h sconst.h klib.x Xmpx.s: $h/config.h $h/const.h $h/com.h const.h protect.h sconst.h mpx.x Xrs2.s: $h/config.h $h/const.h const.h sconst.h rs2.x Xstart.s: $h/config.h $h/const.h $h/com.h const.h protect.h sconst.h start.x $m Xstart.o: start.s X $(AS) -0 -a start.s -o start.o Xconsole1.s: console1.x $m X Xclock.o: $a Xclock.o: $i/signal.h Xclock.o: $h/callnr.h Xclock.o: $h/com.h Xclock.o: proc.h Xclock.o: $m X Xconsole.o: $a Xconsole.o: $i/sgtty.h Xconsole.o: $h/callnr.h Xconsole.o: $h/com.h Xconsole.o: protect.h Xconsole.o: tty.h Xconsole.o: $m X Xconsole1.o: $m X Xcstart.o: $a Xcstart.o: $h/boot.h Xcstart.o: $m Xcstart.o: cstart.c X $(CC88) $(CFLAGS) \ X -c cstart.c X Xdmp.o: $a Xdmp.o: $h/callnr.h Xdmp.o: $h/com.h Xdmp.o: proc.h Xdmp.o: $m X Xexception.o: $a Xexception.o: $i/signal.h Xexception.o: proc.h Xexception.o: $m X Xfloppy.o: $a Xfloppy.o: $h/callnr.h Xfloppy.o: $h/com.h Xfloppy.o: $m X Xi8259.o: $a Xi8259.o: $m X Xkeyboard.o: $a Xkeyboard.o: $i/sgtty.h Xkeyboard.o: $i/signal.h Xkeyboard.o: $h/callnr.h Xkeyboard.o: $h/com.h Xkeyboard.o: tty.h Xkeyboard.o: $m X Xmain.o: $a Xmain.o: $i/signal.h Xmain.o: $h/callnr.h Xmain.o: $h/com.h Xmain.o: proc.h Xmain.o: $m X Xmemory.o: $a Xmemory.o: $h/callnr.h Xmemory.o: $h/com.h Xmemory.o: $m X Xmisc.o: $a Xmisc.o: $h/com.h Xmisc.o: $m X Xprinter.o: $a Xprinter.o: $h/callnr.h Xprinter.o: $h/com.h Xprinter.o: $m X Xproc.o: $a Xproc.o: $h/callnr.h Xproc.o: $h/com.h Xproc.o: proc.h Xproc.o: $m X Xprotect.o: $a Xprotect.o: protect.h Xprotect.o: $m Xprotect.o: protect1.c X $(CC88) $(CFLAGS) \ X -c protect.c X Xprotect1.o: $a Xprotect1.o: proc.h Xprotect1.o: protect.h Xprotect1.o: $m X Xrs232.o: $a Xrs232.o: $i/sgtty.h Xrs232.o: tty.h Xrs232.o: $m X Xsystem.o: $a Xsystem.o: $i/signal.h Xsystem.o: $h/boot.h Xsystem.o: $h/callnr.h Xsystem.o: $h/com.h Xsystem.o: proc.h Xsystem.o: protect.h Xsystem.o: $m X Xtable.o: $a Xtable.o: $h/com.h Xtable.o: proc.h Xtable.o: tty.h Xtable.o: $m X Xtty.o: $a Xtty.o: $i/sgtty.h Xtty.o: $i/signal.h Xtty.o: $h/callnr.h Xtty.o: $h/com.h Xtty.o: tty.h Xtty.o: $m X Xwini.o: $a Xwini.o: $h/callnr.h Xwini.o: $h/com.h Xwini.o: $h/partition.h Xwini.o: $m / echo x - makefile.ack sed '/^X/s///' > makefile.ack << '/' X# Makefile for kernel using standard Minix directory layout and compiler. X# CPP may need changing to /usr/lib/cpp. X# The following nonstandard flags are used: 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# -DEGA43 use 43-line mode on EGA displays X# -DVGA50 use 50-line mode on VGA displays X# -DSCNBLANK use automatic screen blanking X# -DVGAMONO use a monochrome VGA display (black text on white background) X# -DWHITE_BORDER is recommended with VGAMONO X# -DWHITE_BORDER use a white border (for pagewhite) X X# modified by Kenneth J. Hendrickson, kjh@usc.edu, 7 June 1991 X XBIN =. XCC =cc XCFLAGS =-DVGAMONO -DWHITE_BORDER -DLINE_CURSOR -DSCNBLANK XCPP =/lib/cpp XCPPFLAGS =-DASLD -P -DVGAMONO -DWHITE_BORDER -DLINE_CURSOR -DSCNBLANK XEND =/lib/end.s XLD =asld XLDFLAGS =-i XLIBS =/lib/libc.a XSTART =start.s X Xa =kernel.h $h/config.h $h/const.h $h/type.h \ X $s/types.h $i/limits.h $i/errno.h \ X const.h type.h proto.h glo.h Xh =/usr/include/minix Xi =/usr/include Xs =/usr/include/sys Xm =makefile X XKEROBJS =cstart.s protect.s protect1.s klib.s mpx.s wini.s \ X table.s main.s tty.s floppy.s system.s proc.s \ X clock.s memory.s console.s rs232.s rs2.s printer.s \ X dmp.s exception.s i8259.s misc.s keyboard.s console1.s XSOBJS =start.s klib.s mpx.s rs2.s console1.s X X# Rules. X.SUFFIXES: .x # .x files are .s files which need C-preprocessing X.x.s: X $(CPP) $(CPPFLAGS) $< >$@ X X# What to make. Xdummy: $(BIN)/kernel # this line fixes a bug in RAL's latest make X X$(BIN)/kernel: $(START) $(KEROBJS) $(LIBS) $(END) X $(LD) $(LDFLAGS) -o $(BIN)/kernel \ X $(START) $(KEROBJS) \ X $(LIBS) $(END) -s > kernel.sym X ast -X $(BIN)/kernel kernel.sym X @rm kernel.sym X Xclean: X @rm -f $(START) $(KEROBJS) $(SOBJS) X Xklib.s: $h/config.h $h/const.h const.h protect.h sconst.h klib.x Xmpx.s: $h/config.h $h/const.h $h/com.h const.h protect.h sconst.h mpx.x Xrs2.s: $h/config.h $h/const.h const.h sconst.h rs2.x Xstart.s: $h/config.h $h/const.h $h/com.h const.h protect.h sconst.h start.x $m X Xclock.s: $a Xclock.s: $i/signal.h Xclock.s: $h/callnr.h Xclock.s: $h/com.h Xclock.s: proc.h Xclock.s: $m X Xconsole.s: $a Xconsole.s: $i/sgtty.h Xconsole.s: $h/callnr.h Xconsole.s: $h/com.h Xconsole.s: protect.h Xconsole.s: tty.h Xconsole.s: $m X Xconsole1.s: $m X Xcstart.s: $a Xcstart.s: $h/boot.h Xcstart.s: cstart.c Xcstart.s: $m X Xdmp.s: $a Xdmp.s: $h/callnr.h Xdmp.s: $h/com.h Xdmp.s: proc.h Xdmp.s: $m X Xexception.s: $a Xexception.s: $i/signal.h Xexception.s: proc.h Xexception.s: $m X Xfloppy.s: $a Xfloppy.s: $h/callnr.h Xfloppy.s: $h/com.h Xfloppy.s: $m X Xi8259.s: $a Xi8259.s: $m X Xkeyboard.s: $a Xkeyboard.s: $i/sgtty.h Xkeyboard.s: $i/signal.h Xkeyboard.s: $h/callnr.h Xkeyboard.s: $h/com.h Xkeyboard.s: tty.h Xkeyboard.s: $m X Xmain.s: $a Xmain.s: $i/signal.h Xmain.s: $h/callnr.h Xmain.s: $h/com.h Xmain.s: proc.h Xmain.s: $m X Xmemory.s: $a Xmemory.s: $h/callnr.h Xmemory.s: $h/com.h Xmemory.s: $m X Xmisc.s: $a Xmisc.s: $h/com.h Xmisc.s: $m X Xprinter.s: $a Xprinter.s: $h/callnr.h Xprinter.s: $h/com.h Xprinter.s: $m X Xproc.s: $a Xproc.s: $h/callnr.h Xproc.s: $h/com.h Xproc.s: proc.h Xproc.s: $m X Xprotect.s: $a Xprotect.s: protect.h Xprotect.s: protect1.c Xprotect.s: $m X Xprotect1.s: $a Xprotect1.s: proc.h Xprotect1.s: protect.h Xprotect1.s: $m X Xrs232.s: $a Xrs232.s: $i/sgtty.h Xrs232.s: tty.h Xrs232.s: $m X Xsystem.s: $a Xsystem.s: $i/signal.h Xsystem.s: $h/boot.h Xsystem.s: $h/callnr.h Xsystem.s: $h/com.h Xsystem.s: proc.h Xsystem.s: protect.h Xsystem.s: $m X Xtable.s: $a Xtable.s: $h/com.h Xtable.s: proc.h Xtable.s: tty.h Xtable.s: $m X Xtty.s: $a Xtty.s: $i/sgtty.h Xtty.s: $i/signal.h Xtty.s: $h/callnr.h Xtty.s: $h/com.h Xtty.s: tty.h Xtty.s: $m X Xwini.s: $a Xwini.s: $h/callnr.h Xwini.s: $h/com.h Xwini.s: $h/partition.h Xwini.s: $m X X / echo x - attrib.uue sed '/^X/s///' > attrib.uue << '/' Xtable X !"#$%&'()*+,-./0123456789:;<=>? X@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ Xbegin 644 attrib XM3F]R;6%L('1E>'0N"AM;,6U";VQD(%1E>'0N&ULP;0H;6S1M56YD97)L:6YEz XM9"!497AT+@H;6S%M0F]L9" F(%5N9&5R;&EN960@5&5X="X;6S!M"AM;-VU2y XM979E<G-E(%9I9&5O(%1E>'0N"AM;,6U";VQD(%)E=F5R<V4@5FED96\@5&5Xx XM="X;6S!M"AM;-VT;6S1M56YD97)L:6YE9"!2979E<G-E(%9I9&5O(%1E>'0Nw XM"AM;,6U";VQD("8@56YD97)L:6YE9"!2979E<G-E(%9I9&5O(%1E>'0N&ULPv X9;0H;6S5M0FQI;FMI;F<@=&5X="X;6S!M"G9Eu X t Xend / echo x - colours.uue sed '/^X/s///' > colours.uue << '/' Xtable X !"#$%&'()*+,-./0123456789:;<=>? X@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ Xbegin 644 colours XM&ULP;1M;-#!M&ULS,&T@8FQA8VL@&ULS,6T@<F5D(!M;,S)M(&=R965N(!M;z XM,S-M(&)R;W=N(" ;6S,T;2!B;'5E(!M;,S5M('9I;VQE=" ;6S,V;2!C>6%Ny XM(!M;,S=M('=H:71E( H;6S0Q;1M;,S!M(&)L86-K(!M;,S%M(')E9" ;6S,Rx XM;2!G<F5E;B ;6S,S;2!B<F]W;B @&ULS-&T@8FQU92 ;6S,U;2!V:6]L970@w XM&ULS-FT@8WEA;B ;6S,W;2!W:&ET92 *&ULT,FT;6S,P;2!B;&%C:R ;6S,Qv XM;2!R960@&ULS,FT@9W)E96X@&ULS,VT@8G)O=VX@(!M;,S1M(&)L=64@&ULSu XM-6T@=FEO;&5T(!M;,S9M(&-Y86X@&ULS-VT@=VAI=&4@"AM;-#-M&ULS,&T@t XM8FQA8VL@&ULS,6T@<F5D(!M;,S)M(&=R965N(!M;,S-M(&)R;W=N(" ;6S,Ts XM;2!B;'5E(!M;,S5M('9I;VQE=" ;6S,V;2!C>6%N(!M;,S=M('=H:71E( H;r XM6S0T;1M;,S!M(&)L86-K(!M;,S%M(')E9" ;6S,R;2!G<F5E;B ;6S,S;2!Bq XM<F]W;B @&ULS-&T@8FQU92 ;6S,U;2!V:6]L970@&ULS-FT@8WEA;B ;6S,Wp XM;2!W:&ET92 *&ULT-6T;6S,P;2!B;&%C:R ;6S,Q;2!R960@&ULS,FT@9W)Eo XM96X@&ULS,VT@8G)O=VX@(!M;,S1M(&)L=64@&ULS-6T@=FEO;&5T(!M;,S9Mn XM(&-Y86X@&ULS-VT@=VAI=&4@"AM;-#9M&ULS,&T@8FQA8VL@&ULS,6T@<F5Dm XM(!M;,S)M(&=R965N(!M;,S-M(&)R;W=N(" ;6S,T;2!B;'5E(!M;,S5M('9Il XM;VQE=" ;6S,V;2!C>6%N(!M;,S=M('=H:71E( H;6S0W;1M;,S!M(&)L86-Kk XM(!M;,S%M(')E9" ;6S,R;2!G<F5E;B ;6S,S;2!B<F]W;B @&ULS-&T@8FQUj XM92 ;6S,U;2!V:6]L970@&ULS-FT@8WEA;B ;6S,W;2!W:&ET92 *&ULQ;1M;i XM-#!M&ULS,&T@8FQA8VL@&ULS,6T@<F5D(!M;,S)M(&=R965N(!M;,S-M('EEh XM;&QO=R ;6S,T;2!B;'5E(!M;,S5M('9I;VQE=" ;6S,V;2!C>6%N(!M;,S=Mg XM('=H:71E( H;6S0Q;1M;,S!M(&)L86-K(!M;,S%M(')E9" ;6S,R;2!G<F5Ef XM;B ;6S,S;2!Y96QL;W<@&ULS-&T@8FQU92 ;6S,U;2!V:6]L970@&ULS-FT@e XM8WEA;B ;6S,W;2!W:&ET92 *&ULT,FT;6S,P;2!B;&%C:R ;6S,Q;2!R960@d XM&ULS,FT@9W)E96X@&ULS,VT@>65L;&]W(!M;,S1M(&)L=64@&ULS-6T@=FEOc XM;&5T(!M;,S9M(&-Y86X@&ULS-VT@=VAI=&4@"AM;-#-M&ULS,&T@8FQA8VL@b XM&ULS,6T@<F5D(!M;,S)M(&=R965N(!M;,S-M('EE;&QO=R ;6S,T;2!B;'5Ea XM(!M;,S5M('9I;VQE=" ;6S,V;2!C>6%N(!M;,S=M('=H:71E( H;6S0T;1M;z XM,S!M(&)L86-K(!M;,S%M(')E9" ;6S,R;2!G<F5E;B ;6S,S;2!Y96QL;W<@y XM&ULS-&T@8FQU92 ;6S,U;2!V:6]L970@&ULS-FT@8WEA;B ;6S,W;2!W:&ETx XM92 *&ULT-6T;6S,P;2!B;&%C:R ;6S,Q;2!R960@&ULS,FT@9W)E96X@&ULSw XM,VT@>65L;&]W(!M;,S1M(&)L=64@&ULS-6T@=FEO;&5T(!M;,S9M(&-Y86X@v XM&ULS-VT@=VAI=&4@"AM;-#9M&ULS,&T@8FQA8VL@&ULS,6T@<F5D(!M;,S)Mu XM(&=R965N(!M;,S-M('EE;&QO=R ;6S,T;2!B;'5E(!M;,S5M('9I;VQE=" ;t XM6S,V;2!C>6%N(!M;,S=M('=H:71E( H;6S0W;1M;,S!M(&)L86-K(!M;,S%Ms XM(')E9" ;6S,R;2!G<F5E;B ;6S,S;2!Y96QL;W<@&ULS-&T@8FQU92 ;6S,Ur XM;2!V:6]L970@&ULS-FT@8WEA;B ;6S,W;2!W:&ET92 *&ULS-VT;6S0P;2 @q XM(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @p XM(" @(" @(" @(" @(" @"AM;,6UB;VQD&ULP;2 ;6S1M=6YD97)L:6YE9!M;o XM,&T@&ULU;6)L:6YK:6YG&ULP;2 ;6S=M<F5V97)S92!V:61E;QM;,&T@;F]Rn XM;6%L("AW:&ET92!O;B!B;&%C:RD*(" @(" @(" @(" @(" @(" @(" @(" @m XM(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" *&ULS-VT;l XM6S0T;2 @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @k XM(" @(" @(" @(" @(" @(" @(" @"AM;,6UB;VQD&ULP;2 ;6S1M=6YD97)Lj XM:6YE9!M;,&T@&ULU;6)L:6YK:6YG&ULP;2 ;6S=M<F5V97)S92!V:61E;QM;i XM,&T@;F]R;6%L("AW:&ET92!O;B!B;'5E("D*(" @(" @(" @(" @(" @(" @h XM(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" *g XM&ULS,FT;6S0P;2 @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @f XM(" @(" @(" @(" @(" @(" @(" @(" @(" @"AM;,6UB;VQD&ULP;2 ;6S1Me XM=6YD97)L:6YE9!M;,&T@&ULU;6)L:6YK:6YG&ULP;2 ;6S=M<F5V97)S92!Vd XM:61E;QM;,&T@;F]R;6%L("AG<F5E;B!O;B!B;&%C:RD*(" @(" @(" @(" @c XM(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @b XM(" @(" *&ULS,&T;6S0W;2 @(" @(" @(" @(" @(" @(" @(" @(" @(" @a XM(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @"AM;,6UB;VQD&ULPz XM;2 ;6S1M=6YD97)L:6YE9!M;,&T@&ULU;6)L:6YK:6YG&ULP;2 ;6S=M<F5Vy XM97)S92!V:61E;QM;,&T@;F]R;6%L("AB;&%C:R!O;B!W:&ET92D*(" @(" @x XM(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @w X,(" @(" @(" @(" *v X u Xend / ---------- CUT HERE ---------- -- favourite oxymorons: student athlete, military justice, mercy killing Ken Hendrickson N8DGN/6 kjh@usc.edu ...!uunet!usc!pollux!kjh