FreeBSD Bugzilla – Attachment 79823 Details for
Bug 114615
Fixes and extra functionality for emulators/doscmd
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
file.shar
file.shar (text/plain), 22.52 KB, created by
Stephen Hurd
on 2007-07-16 07:10:01 UTC
(
hide
)
Description:
file.shar
Filename:
MIME Type:
Creator:
Stephen Hurd
Created:
2007-07-16 07:10:01 UTC
Size:
22.52 KB
patch
obsolete
># This is a shell archive. Save it in a file, remove anything before ># this line, and then unpack it by entering "sh file". Note, it may ># create directories; files and directories will be owned by you and ># have default permissions. ># ># This archive contains: ># ># files/patch-bioscursor ># files/patch-desqview-timeslice ># files/patch-fossil-support ># files/patch-quietmode ># >echo x - files/patch-bioscursor >sed 's/^X//' >files/patch-bioscursor << 'END-of-files/patch-bioscursor' >X--- /usr/ports/emulators/doscmd/work/doscmd-20040330/tty.c Mon May 1 18:38:07 2006 >X+++ tty.c Mon May 1 18:38:51 2006 >X@@ -125,6 +125,7 @@ >X #define row (CursRow0) >X #define col (CursCol0) >X >X+ >X /* Local functions */ >X static void _kbd_event(int, int, void *, regcontext_t *); >X static void Failure(void *); >X@@ -1427,7 +1428,9 @@ >X tty_move(int r, int c) >X { >X row = r; >X+ BIOS_CursRow0 = r; >X col = c; >X+ BIOS_CursCol0 = c; >X SetVREGCur(); >X } >X >X@@ -1459,6 +1462,7 @@ >X vmem[(height - 1) * width + i] = vattr | ' '; >X } >X } >X+ BIOS_CursRow0 = row; /* Sync back with row */ >X SetVREGCur(); >X } >X >X@@ -1489,21 +1493,27 @@ >X case 0x08: >X if (row > (height - 1) || col > width) >X break; >X- if (col > 0) >X+ if (col > 0) { >X --col; >X+ BIOS_CursCol0 = col; >X+ } >X vmem[row * width + col] &= 0xff00; >X break; >X case '\t': >X- if (row > (height - 1)) >X+ if (row > (height - 1)) { >X row = 0; >X+ BIOS_CursRow0 = 0; >X+ } >X col = (col + 8) & ~0x07; >X if (col > width) { >X col = 0; >X tty_index(1); >X } >X+ BIOS_CursCol0 = col; >X break; >X case '\r': >X col = 0; >X+ BIOS_CursCol0 = col; >X break; >X case '\n': >X tty_index(1); >X@@ -1511,10 +1521,13 @@ >X default: >X if (col >= width) { >X col = 0; >X+ BIOS_CursCol0 = 0; >X tty_index(1); >X } >X- if (row > (height - 1)) >X+ if (row > (height - 1)) { >X row = 0; >X+ BIOS_CursRow0 = 0; >X+ } >X if (attr >= 0) >X vmem[row * width + col] = attr & 0xff00; >X else >X@@ -1554,7 +1567,9 @@ >X vmem[row * width + col++] |= c; >X } >X row = srow; >X+ BIOS_CursRow0 = srow; >X col = scol; >X+ BIOS_CursCol0 = scol; >X SetVREGCur(); >X } >X >X@@ -1582,7 +1597,9 @@ >X col++; >X } >X row = srow; >X+ BIOS_CursRow0 = srow; >X col = scol; >X+ BIOS_CursCol0 = scol; >X SetVREGCur(); >X >X return; >X--- /home/admin/doscmd-20040330/video.c Mon May 1 17:41:16 2006 >X+++ video.c Mon May 1 18:08:12 2006 >X@@ -167,14 +167,18 @@ >X cp &= 0xff; >X cp |= value << 8; >X row = cp / DpyCols; >X+ BIOS_CursRow0 = row; >X col = cp % DpyCols; >X+ BIOS_CursCol0 = col; >X break; >X case CRTC_CurLocLo: /* Update cursor position in BIOS */ >X cp = row * DpyCols + col; >X cp &= 0xff00; >X cp |= value; >X row = cp / DpyCols; >X+ BIOS_CursRow0 = row; >X col = cp % DpyCols; >X+ BIOS_CursCol0 = col; >X break; >X default: >X debug(D_VIDEO, "VGA: outb 0x%04x, 0x%02x at index 0x%02x\n", >END-of-files/patch-bioscursor >echo x - files/patch-desqview-timeslice >sed 's/^X//' >files/patch-desqview-timeslice << 'END-of-files/patch-desqview-timeslice' >X--- /usr/ports/emulators/doscmd/work/doscmd-20040330/bios.c Mon Mar 29 16:00:00 2004 >X+++ bios.c Mon May 1 18:39:31 2006 >X@@ -31,6 +31,7 @@ >X */ >X >X #include <sys/cdefs.h> >X+#include <time.h> >X __FBSDID("$FreeBSD: projects/doscmd/bios.c,v 1.9 2002/03/07 12:52:26 obrien Exp $"); >X >X #include "doscmd.h" >X@@ -110,6 +111,7 @@ >X static void >X int15(regcontext_t *REGS) >X { >X+ const struct timespec rqtp={0,1}; >X R_FLAGS &= ~PSL_C; >X >X switch (R_AH) { >X@@ -119,6 +121,17 @@ >X break; >X case 0x04: /* Set ABIOS table */ >X R_FLAGS |= PSL_C; /* We don't support it */ >X+ break; >X+ case 0x10: /* DesqView */ >X+ switch (R_AL) { >X+ case 0x00: /* Give up CPU time */ >X+ nanosleep(&rqtp, NULL); >X+ break; >X+ case 0x22: /* Get version */ >X+ R_BH = 0x0a; /* Use v2.0 for timeslice support */ >X+ R_BL = 0x01; >X+ break; >X+ } >X break; >X case 0x4f: /* Keyboard intercept */ >X debug(D_TRAPS | 0x15, "BIOS: Keyboard intercept\n"); >END-of-files/patch-desqview-timeslice >echo x - files/patch-fossil-support >sed 's/^X//' >files/patch-fossil-support << 'END-of-files/patch-fossil-support' >Xdiff -u /root/doscmd-20040330/bios.c ./bios.c >X--- /root/doscmd-20040330/bios.c Fri May 5 19:34:31 2006 >X+++ ./bios.c Fri May 5 19:39:27 2006 >X@@ -297,7 +297,10 @@ >X ivec[0x12] = vec; >X register_callback(vec, int12, "int 12"); >X >X- vec = insert_softint_trampoline(); >X+ if(fossil) >X+ vec = insert_fossil_softint_trampoline(); >X+ else >X+ vec = insert_softint_trampoline(); >X ivec[0x14] = vec; >X register_callback(vec, int14, "int 14"); >X >Xdiff -u /root/doscmd-20040330/callback.c ./callback.c >X--- /root/doscmd-20040330/callback.c Fri May 5 19:34:31 2006 >X+++ ./callback.c Fri May 5 19:39:27 2006 >X@@ -76,6 +76,25 @@ >X 2, >X 0, >X }; >X+/* >X+ * From the FOSSIL spec: >X+ * The driver has a "signature" that can be used to determine whether it is >X+ * present in memory. At offset 6 in the INT 14h service routine is a word, >X+ * 1954h, followed by a byte that specifies the maximum function number >X+ * supported by the driver. This is to make it possible to determine when a >X+ * driver is present and what level of functionality it provides. >X+ */ >X+u_char fossil_softint_trampoline[] = { >X+ 0xf4, /* HLT */ >X+ 0xfb, /* STI */ >X+ 0xca, /* RETF 2 */ >X+ 2, >X+ 0, >X+ 0, >X+ 0x54, >X+ 0x19, >X+ 0x1b, /* Max. Supported FOSSIL AH */ >X+}; >X u_char hardint_trampoline[] = { >X 0xf4, /* HLT */ >X 0xcf, /* IRET */ >X@@ -102,6 +121,13 @@ >X { >X return (insert_generic_trampoline( >X sizeof(softint_trampoline), softint_trampoline)); >X+} >X+ >X+u_long >X+insert_fossil_softint_trampoline(void) >X+{ >X+ return (insert_generic_trampoline( >X+ sizeof(fossil_softint_trampoline), fossil_softint_trampoline)); >X } >X >X u_long >Xdiff -u /root/doscmd-20040330/callback.h ./callback.h >X--- /root/doscmd-20040330/callback.h Fri May 5 19:34:31 2006 >X+++ ./callback.h Fri May 5 19:39:27 2006 >X@@ -9,5 +9,6 @@ >X callback_t find_callback(u_long); >X u_long insert_generic_trampoline(size_t, u_char *); >X u_long insert_softint_trampoline(void); >X+u_long insert_fossil_softint_trampoline(void); >X u_long insert_hardint_trampoline(void); >X u_long insert_null_trampoline(void); >Xdiff -u /root/doscmd-20040330/doscmd.c ./doscmd.c >X--- /root/doscmd-20040330/doscmd.c Fri May 5 19:34:31 2006 >X+++ ./doscmd.c Fri May 5 19:39:27 2006 >X@@ -511,7 +511,7 @@ >X FILE *fp; >X char *col; >X >X- while ((c = getopt(argc, argv, "234AbCc:Dd:EGHIi:kLMOo:Pp:RrS:TtU:vVxXYz")) != -1) { >X+ while ((c = getopt(argc, argv, "234AbCc:Dd:EFGHIi:kLMOo:Pp:RrS:TtU:vVxXYz")) != -1) { >X switch (c) { >X case '2': >X debug_flags |= D_TRAPS2; >X@@ -551,6 +551,9 @@ >X break; >X case 'E': >X debug_flags |= D_EXEC; >X+ break; >X+ case 'F': >X+ fossil = 1; >X break; >X case 'G': >X debug_flags |= D_VIDEO; >Xdiff -u /root/doscmd-20040330/doscmd.h ./doscmd.h >X--- /root/doscmd-20040330/doscmd.h Fri May 5 19:34:31 2006 >X+++ ./doscmd.h Fri May 5 19:39:27 2006 >X@@ -224,6 +224,9 @@ >X extern int search_floppy(int i); >X extern void disk_bios_init(void); >X >X+/* int14.c */ >X+extern int fossil; >X+ >X /* int16.c */ >X void int16(regcontext_t *); >X >Xdiff -u /root/doscmd-20040330/int14.c ./int14.c >X--- /root/doscmd-20040330/int14.c Fri May 5 19:34:31 2006 >X+++ ./int14.c Fri May 5 20:23:09 2006 >X@@ -46,6 +46,9 @@ >X #include "AsyncIO.h" >X #include "com.h" >X >X+/* exports */ >X+int fossil = 0; >X+ >X #define N_BYTES 1024 >X >X struct com_data_struct { >X@@ -58,7 +61,9 @@ >X int ids; /* input data size */ >X int ods; /* output data size */ >X int emptyint; >X+ int fossil_mode; /* FOSSIL has been enabled */ >X struct termios tty; >X+ unsigned char param; /* Copy of init params */ >X unsigned char div_latch[2]; /* mirror of 16550 R0':R1' >X read/write */ >X unsigned char int_enable; /* mirror of 16550 R1 read/write */ >X@@ -257,7 +262,7 @@ >X struct com_data_struct *cdsp; >X int i; >X >X- debug(D_PORT, "int14: dl = 0x%02X, al = 0x%02X.\n", R_DL, R_AL); >X+ debug(D_PORT, "int14: ah = 0x%02X, dl = 0x%02X, al = 0x%02X.\n", R_AH, R_DL, R_AL); >X if (R_DL >= N_COMS_MAX) { >X if (vflag) >X dump_regs(REGS); >X@@ -269,16 +274,31 @@ >X case 0x00: /* Initialize Serial Port */ >X com_set_line(cdsp, R_DL + 1, R_AL); >X R_AH = get_status(cdsp); >X- R_AL = 0; >X+ if (cdsp->fossil_mode) { >X+ R_AL = 0x08; >X+ R_AL |= 0x80; >X+ } >X+ else >X+ R_AL = 0; >X break; >X >X case 0x01: /* Write Character */ >X if (write_char(cdsp, R_AL)) { >X- R_AH = get_status(cdsp); >X+ R_AH = get_status(cdsp); >X+ if (cdsp->fossil_mode) { >X+ R_AL = 0x08; >X+ R_AL |= 0x80; >X+ } >X+ else >X R_AL = 0; >X } else { >X- debug(D_PORT, "int14: lost output character 0x%02x\n", R_AL); >X- R_AH = LS_SW_TIME_OUT; >X+ debug(D_PORT, "int14: lost output character 0x%02x\n", R_AL); >X+ R_AH = LS_SW_TIME_OUT; >X+ if (cdsp->fossil_mode) { >X+ R_AL = 0x08; >X+ R_AL |= 0x80; >X+ } >X+ else >X R_AL = 0; >X } >X break; >X@@ -296,28 +316,193 @@ >X >X case 0x03: /* Status Request */ >X R_AH = get_status(cdsp); >X- R_AL = 0; >X+ if (cdsp->fossil_mode) { >X+ R_AL = 0x08; >X+ R_AL |= 0x80; >X+ } >X+ else >X+ R_AL = 0; >X break; >X >X case 0x04: /* Extended Initialization */ >X- R_AX = (LS_SW_TIME_OUT) << 8; >X+ if (fossil) { >X+ cdsp->fossil_mode = 1; >X+ R_AX = 0x1954; >X+ R_BL = 0x1b; /* Max supported FOSSIL AH */ >X+ R_BH = 5; >X+ } >X+ else >X+ R_AX = (LS_SW_TIME_OUT) << 8; >X break; >X >X- case 0x05: /* Modem Control Register operations */ >X- switch (R_AH) { >X- case 0x00: /* Read Modem Control Register */ >X+ case 0x05: /* Modem Control Register operations/FOSSIL deinit */ >X+ if (fossil && cdsp->fossil_mode) >X+ cdsp->fossil_mode = 0; >X+ else { >X+ switch (R_AH) { >X+ case 0x00: /* Read Modem Control Register */ >X R_AX = (LS_SW_TIME_OUT) << 8; >X break; >X >X- case 0x01: /* Write Modem Control Register */ >X+ case 0x01: /* Write Modem Control Register */ >X R_AX = (LS_SW_TIME_OUT) << 8; >X break; >X >X- default: >X+ default: >X unknown_int3(0x14, 0x05, R_AL, REGS); >X break; >X+ } >X } >X break; >X+ >X+ case 0x06: /* FOSSIL raise/lower DTR */ >X+ if(cdsp->fossil_mode) { >X+ switch (R_AL) { >X+ case 0: >X+ ioctl(cdsp->fd, TIOCCDTR); >X+ break; >X+ case 1: >X+ ioctl(cdsp->fd, TIOCSDTR); >X+ break; >X+ } >X+ break; >X+ } >X+ >X+ case 0x08: /* FOSSIL Flush output buffer */ >X+ if(cdsp->fossil_mode) { >X+ flush_out(cdsp); >X+ break; >X+ } >X+ >X+ case 0x09: /* FOSSIL Purge output buffer */ >X+ if(cdsp->fossil_mode) { >X+ cdsp->ods = 0; >X+ break; >X+ } >X+ >X+ case 0x0a: /* FOSSIL Purge input buffer */ >X+ if(cdsp->fossil_mode) { >X+ cdsp->ids = 0; >X+ break; >X+ } >X+ >X+ case 0x0b: /* FOSSIL Transmit no wait */ >X+ if(cdsp->fossil_mode) { >X+ if (cdsp->ods < N_BYTES) { >X+ if (write_char(cdsp, R_AL)) >X+ R_AX = 1; >X+ else >X+ R_AX = 0; >X+ } >X+ else >X+ R_AX = 0; >X+ break; >X+ } >X+ >X+ case 0x0c: /* FOSSIL Non-destructive read-ahead */ >X+ if(cdsp->fossil_mode) { >X+ if(cdsp->ods) { >X+ R_AH = 0; >X+ R_AL = cdsp->inbuf[0]; >X+ } else >X+ R_AX = 0xffff; >X+ break; >X+ } >X+ >X+ case 0x0f: /* FOSSIL Set flow control */ >X+ if(cdsp->fossil_mode) { >X+ if(R_AL & 0x01) /* Enable output Xon/Xoff */ >X+ cdsp->tty.c_iflag |= IXON; >X+ else >X+ cdsp->tty.c_iflag &= ~(IXON); >X+ >X+ if(R_AL & 0x02) /* Enable CTR/RTS */ >X+ cdsp->tty.c_cflag |= CCTS_OFLOW|CRTS_IFLOW; >X+ else >X+ cdsp->tty.c_iflag &= ~(CCTS_OFLOW|CRTS_IFLOW); >X+ >X+ if(R_AL & 0x08) /* Enable input Xon/Xoff */ >X+ cdsp->tty.c_iflag |= IXOFF; >X+ else >X+ cdsp->tty.c_iflag &= ~(IXOFF); >X+ >X+ tcsetattr(cdsp->fd, 0, &cdsp->tty); >X+ break; >X+ } >X+ >X+ case 0x18: /* FOSSIL Read block */ >X+ if(cdsp->fossil_mode) { >X+ int rd = R_CX; >X+ >X+ input(cdsp, 0); >X+ if(rd > cdsp->ids) >X+ rd=cdsp->ids; >X+ if(rd) { >X+ memmove((char *)MAKEPTR(R_ES, R_DI), cdsp->inbuf, rd); >X+ if(rd < cdsp->ids) >X+ memmove(cdsp->inbuf, cdsp->inbuf + rd, N_BYTES - rd); >X+ cdsp->ids -= rd; >X+ R_AX = rd; >X+ } else >X+ R_AX = 0; >X+ break; >X+ } >X+ >X+ case 0x19: /* FOSSIL Write block */ >X+ if(cdsp->fossil_mode) { >X+ int wr = R_CX; >X+ if(wr > N_BYTES - cdsp->ods) >X+ wr=N_BYTES - cdsp->ods; >X+ if(wr) { >X+ memcpy(cdsp->outbuf + cdsp->ods, (char *)MAKEPTR(R_ES, R_DI), wr); >X+ cdsp->ods += wr; >X+ output(cdsp); >X+ R_AX = wr; >X+ } else >X+ R_AX = 0; >X+ break; >X+ } >X+ >X+ case 0x1a: /* FOSSIL Break begin/end */ >X+ if(cdsp->fossil_mode) { >X+ switch(R_AL) { >X+ case 0: >X+ ioctl(cdsp->fd, TIOCCBRK); >X+ break; >X+ case 1: >X+ ioctl(cdsp->fd, TIOCSBRK); >X+ break; >X+ } >X+ break; >X+ } >X+ >X+ case 0x1b: /* FOSSIL Driver information */ >X+ if(cdsp->fossil_mode) { >X+ unsigned char *p; >X+ int bufpos=0; >X+ int info_size=19; >X+ const char *id_string="doscmd FOSSIL"; >X+ p = (unsigned char *)MAKEPTR(R_ES, R_DI); >X+ p[bufpos++]=info_size&0xff; >X+ p[bufpos++]=(info_size>>8)&0xff; >X+ p[bufpos++]=5; >X+ p[bufpos++]=0; >X+ PUTVEC(*(u_short *)p, *(ushort *)(p + sizeof(u_short)), (u_long)id_string); >X+ bufpos+=sizeof(u_short)*2; >X+ p[bufpos++]=N_BYTES & 0xff; >X+ p[bufpos++]=(N_BYTES>>8) & 0xff; >X+ p[bufpos++]=(N_BYTES - cdsp->ids) & 0xff; >X+ p[bufpos++]=((N_BYTES - cdsp->ids) >> 8) & 0xff; >X+ p[bufpos++]=N_BYTES & 0xff; >X+ p[bufpos++]=(N_BYTES>>8) & 0xff; >X+ p[bufpos++]=(N_BYTES - cdsp->ods) & 0xff; >X+ p[bufpos++]=((N_BYTES - cdsp->ods) >> 8) & 0xff; >X+ p[bufpos++]=80; >X+ p[bufpos++]=25; >X+ p[bufpos++]=cdsp->param & BITRATE_9600; >X+ break; >X+ } >X+ >X default: >X unknown_int2(0x14, R_AH, REGS); >X break; >X@@ -353,6 +538,7 @@ >X port, cdsp->path); >X return; >X } >X+ cdsp->param = param; >X >X cdsp->ids = cdsp->ods = cdsp->emptyint = 0; >X cdsp->int_enable = 0; >X@@ -402,12 +588,24 @@ >X } >X switch (param & BITRATE_9600) { >X case BITRATE_110: >X- speed = B110; >X- spd = 110; >X+ if (fossil) { >X+ speed = B19200; >X+ spd = 19200; >X+ } >X+ else { >X+ speed = B110; >X+ spd = 110; >X+ } >X break; >X case BITRATE_150: >X- speed = B150; >X- spd = 150; >X+ if (fossil) { >X+ speed = B38400; >X+ spd = 38400; >X+ } >X+ else { >X+ speed = B150; >X+ spd = 150; >X+ } >X break; >X case BITRATE_300: >X speed = B300; >END-of-files/patch-fossil-support >echo x - files/patch-quietmode >sed 's/^X//' >files/patch-quietmode << 'END-of-files/patch-quietmode' >Xdiff -u ./debug.c /home/admin/doscmd.working/doscmd-20040330/debug.c >X--- ./debug.c Mon Mar 29 16:00:00 2004 >X+++ /home/admin/doscmd.working/doscmd-20040330/debug.c Wed May 3 13:58:35 2006 >X@@ -106,7 +106,7 @@ >X >X dead = 1; >X >X- if (xmode) { >X+ if (xmode && !quietmode) { >X char buf[1024]; >X const char *m; >X >Xdiff -u ./dos.c /home/admin/doscmd.working/doscmd-20040330/dos.c >X--- ./dos.c Mon Mar 29 16:00:00 2004 >X+++ /home/admin/doscmd.working/doscmd-20040330/dos.c Wed May 3 13:58:35 2006 >X@@ -625,9 +625,12 @@ >X { >X int n; >X >X- /* XXX this is pretty bogus, actually */ >X- if (!xmode) { >X- R_AL = 0xff; /* no X mode, always claim data available */ >X+ if (quietmode && !xmode) { >X+ const struct timespec rqtp={0,1}; >X+ >X+ /* In case of camping */ >X+ nanosleep(&rqtp, NULL); >X+ R_AL = 0; >X return(0); >X } >X /* XXX tty_peek is broken */ >Xdiff -u ./doscmd.c /home/admin/doscmd.working/doscmd-20040330/doscmd.c >X--- ./doscmd.c Wed May 3 14:06:55 2006 >X+++ /home/admin/doscmd.working/doscmd-20040330/doscmd.c Wed May 3 13:58:35 2006 >X@@ -64,6 +64,7 @@ >X int capture_fd = -1; >X int dead = 0; >X int xmode = 0; >X+int quietmode = 0; >X int booting = 0; >X int raw_kbd = 0; >X int timer_disable = 0; >X@@ -226,7 +227,7 @@ >X kbd_init(); >X kbd_bios_init(); >X video_init(); >X- if (xmode) >X+ if (xmode || quietmode) >X mouse_init(); >X video_bios_init(); >X disk_bios_init(); >X@@ -511,7 +512,7 @@ >X FILE *fp; >X char *col; >X >X- while ((c = getopt(argc, argv, "234AbCc:Dd:EFGHIi:kLMOo:Pp:RrS:TtU:vVxXYz")) != -1) { >X+ while ((c = getopt(argc, argv, "234AbCc:Dd:EFGHIi:kLMOo:PpQ:RrS:TtU:vVxXYz")) != -1) { >X switch (c) { >X case '2': >X debug_flags |= D_TRAPS2; >X@@ -620,6 +621,9 @@ >X define_output_port_handler(p++, outb_port); >X } >X break; >X+ case 'Q': >X+ quietmode = 1; >X+ break; >X case 'R': >X debug_flags |= D_REDIR; >X break; >X@@ -826,7 +830,7 @@ >X done(regcontext_t *REGS, int val) >X { >X if (curpsp < 2) { >X- if (xmode) { >X+ if (xmode && !quietmode) { >X const char *m; >X >X tty_move(24, 0); >X@@ -861,7 +865,7 @@ >X coq = coq->next; >X c->func(c->arg); >X } >X- if (!xmode) /* XXX not for bootmode */ >X+ if (!(xmode || quietmode)) /* XXX not for bootmode */ >X puts("\n"); >X exit(status); >X } >Xdiff -u ./doscmd.h /home/admin/doscmd.working/doscmd-20040330/doscmd.h >X--- ./doscmd.h Wed May 3 14:06:55 2006 >X+++ /home/admin/doscmd.working/doscmd-20040330/doscmd.h Wed May 3 13:58:35 2006 >X@@ -175,6 +175,7 @@ >X extern int capture_fd; >X extern int dead; >X extern int xmode; >X+extern int quietmode; >X extern int booting; >X extern int raw_kbd; >X extern int timer_disable; >Xdiff -u ./int10.c /home/admin/doscmd.working/doscmd-20040330/int10.c >X--- ./int10.c Mon Mar 29 16:00:00 2004 >X+++ /home/admin/doscmd.working/doscmd-20040330/int10.c Wed May 3 13:58:35 2006 >X@@ -57,7 +57,7 @@ >X >X switch (R_AH) { >X case 0x00: /* Set display mode */ >X- if (!xmode) >X+ if (!(xmode || quietmode)) >X goto unsupported; >X init_mode(R_AL); >X break; >X@@ -94,12 +94,12 @@ >X break; >X } >X case 0x02: /* Position cursor */ >X- if (!xmode) >X+ if (!(xmode || quietmode)) >X goto unsupported; >X tty_move(R_DH, R_DL); >X break; >X case 0x03: /* Read cursor position */ >X- if (!xmode) >X+ if (!(xmode || quietmode)) >X goto unsupported; >X tty_report(&i, &j); >X R_DH = i; >X@@ -111,7 +111,7 @@ >X debug(D_VIDEO, "Select current display page %d\n", R_AL); >X break; >X case 0x06: /* initialize window/scroll text upward */ >X- if (!xmode) >X+ if (!(xmode || quietmode)) >X goto unsupported; >X if (R_AL == 0) /* clear screen */ >X R_AL = DpyRows + 1; >X@@ -120,7 +120,7 @@ >X R_AL, R_BH << 8); >X break; >X case 0x07: /* initialize window/scroll text downward */ >X- if (!xmode) >X+ if (!(xmode || quietmode)) >X goto unsupported; >X if (R_AL == 0) /* clear screen */ >X R_AL = DpyRows + 1; >X@@ -129,24 +129,24 @@ >X R_AL, R_BH << 8); >X break; >X case 0x08: /* read character/attribute */ >X- if (!xmode) >X+ if (!(xmode || quietmode)) >X goto unsupported; >X i = tty_char(-1, -1); >X R_AX = i; >X break; >X case 0x09: /* write character/attribute */ >X- if (!xmode) >X+ if (!(xmode || quietmode)) >X goto unsupported; >X tty_rwrite(R_CX, R_AL, R_BL << 8); >X break; >X case 0x0a: /* write character */ >X- if (!xmode) >X+ if (!(xmode || quietmode)) >X goto unsupported; >X debug(D_HALF, "Int 10:0a: Write char: %02x\n", R_AL); >X tty_rwrite(R_CX, R_AL, -1); >X break; >X case 0x0b: /* set border color */ >X- if (!xmode) >X+ if (!(xmode || quietmode)) >X goto unsupported; >X video_setborder(R_BL); >X break; >X@@ -165,7 +165,7 @@ >X R_BH = 0;/*ActivePage *//* display page */ >X break; >X case 0x10: >X- if (!xmode) >X+ if (!(xmode || quietmode)) >X goto unsupported; >X switch (R_AL) { >X case 0x00: /* Set single palette register */ >X@@ -350,7 +350,7 @@ >X } >X break; >X case 0x12: /* Alternate function select */ >X- if (!xmode) >X+ if (!(xmode || quietmode)) >X goto unsupported; >X switch (R_BL) { >X case 0x10: /* Read EGA/VGA config */ >X@@ -372,7 +372,7 @@ >X } >X break; >X case 0x13: /* write character string */ >X- if (!xmode) >X+ if (!(xmode || quietmode)) >X goto unsupported; >X addr = (char *)MAKEPTR(R_ES, R_BP); >X switch (R_AL & 0x03) { >X@@ -407,7 +407,7 @@ >X } >X break; >X case 0x1a: >X- if (!xmode) >X+ if (!(xmode || quietmode)) >X goto unsupported; >X R_AL = 0x1a; /* I am VGA */ >X R_BL = 8; /* Color VGA */ >Xdiff -u ./int16.c /home/admin/doscmd.working/doscmd-20040330/int16.c >X--- ./int16.c Mon Mar 29 16:00:00 2004 >X+++ /home/admin/doscmd.working/doscmd-20040330/int16.c Wed May 3 13:58:35 2006 >X@@ -78,7 +78,7 @@ >X void >X int16(regcontext_t *REGS) >X { >X- if (!xmode && !raw_kbd) { >X+ if (!(xmode || raw_kbd || quietmode)) { >X if (vflag) dump_regs(REGS); >X fatal ("int16 func 0x%x only supported in X mode\n", R_AH); >X } >Xdiff -u ./tty.c /home/admin/doscmd.working/doscmd-20040330/tty.c >X--- ./tty.c Wed May 3 14:06:55 2006 >X+++ /home/admin/doscmd.working/doscmd-20040330/tty.c Wed May 3 13:58:35 2006 >X@@ -34,6 +34,7 @@ >X __FBSDID("$FreeBSD: projects/doscmd/tty.c,v 1.25 2002/04/12 21:18:05 charnier Exp $"); >X >X #include <sys/ioctl.h> >X+#include <sys/select.h> >X #include <sys/time.h> >X #include <sys/types.h> >X #include <sys/mman.h> >X@@ -1471,7 +1472,8 @@ >X { >X if (attr == TTYF_REDIRECT) { >X if (redirect1) { >X- write(1, &c, 1); >X+ if(!quietmode) >X+ write(1, &c, 1); >X return; >X } >X attr = -1; >X@@ -1487,8 +1489,10 @@ >X #ifndef NO_X >X XBell(dpy, 0); >X #endif >X- } else >X+ } else { >X+ if(!quietmode) >X write(1, "\007", 1); >X+ } >X break; >X case 0x08: >X if (row > (height - 1) || col > width) >X@@ -1658,20 +1662,14 @@ >X { >X int r; >X >X+ if(quietmode && !xmode) >X+ return(0); >X+ >X if ((r = nextchar) != 0) { >X nextchar = 0; >X return(r & 0xff); >X } >X >X- if ((flag & TTYF_REDIRECT) && redirect0) { >X- char c; >X- if (read(STDIN_FILENO, &c, 1) != 1) >X- return(-1); >X- if (c == '\n') >X- c = '\r'; >X- return(c); >X- } >X- >X if (KbdEmpty()) { >X if (flag & TTYF_BLOCK) { >X while (KbdEmpty()) >X@@ -1858,6 +1856,22 @@ >X int >X KbdEmpty() >X { >X+ if(!xmode) { >X+ fd_set rd; >X+ struct timeval tv; >X+ >X+ FD_ZERO(&rd); >X+ FD_SET(STDIN_FILENO, &rd); >X+ tv.tv_sec=0; >X+ tv.tv_usec=0; >X+ if(select(STDIN_FILENO+1, &rd, NULL, NULL, &tv)==1) { >X+ char ch=0; >X+ read(STDIN_FILENO, &ch, 1); >X+ if(ch == '\n') >X+ ch = '\r'; >X+ KbdWrite(ch); >X+ } >X+ } >X return(K_NEXT == K_FREE); >X } >X >Xdiff -u ./video.c /home/admin/doscmd.working/doscmd-20040330/video.c >X--- ./video.c Wed May 3 14:06:55 2006 >X+++ /home/admin/doscmd.working/doscmd-20040330/video.c Wed May 3 13:58:35 2006 >X@@ -276,9 +276,9 @@ >X define_output_port_handler(GDC_DataPort, video_outb); >X } >X >X- redirect0 = isatty(0) == 0 || !xmode ; >X- redirect1 = isatty(1) == 0 || !xmode ; >X- redirect2 = isatty(2) == 0 || !xmode ; >X+ redirect0 = isatty(0) == 0 || !(xmode || quietmode); >X+ redirect1 = isatty(1) == 0 || !(xmode || quietmode); >X+ redirect2 = isatty(2) == 0 || !(xmode || quietmode); >X >X return; >X } >END-of-files/patch-quietmode >exit
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 114615
: 79823