From 2d04cacc5322951f187bb17e017c12920ac8ebe2 Mon Sep 17 00:00:00 2001 From: Mark Zbikowski Date: Thu, 25 Apr 2024 21:24:10 +0100 Subject: MZ is back! --- v4.0/src/SELECT/ASM2C.ASM | 191 ++ v4.0/src/SELECT/BRIDGE.ASM | 25 + v4.0/src/SELECT/CASERVIC.ASM | 2644 +++++++++++++++++++++++++ v4.0/src/SELECT/CASEXTRN.INC | 39 + v4.0/src/SELECT/CASSFAR.LIB | Bin 0 -> 87455 bytes v4.0/src/SELECT/CASTRUC.INC | 239 +++ v4.0/src/SELECT/CKDISP.ASM | 151 ++ v4.0/src/SELECT/COLORS.ASM | 83 + v4.0/src/SELECT/DATA.MAC | 502 +++++ v4.0/src/SELECT/DOS.EQU | 359 ++++ v4.0/src/SELECT/DOSFILES.INC | 20 + v4.0/src/SELECT/EXT.INC | 577 ++++++ v4.0/src/SELECT/EXTERN.H | 76 + v4.0/src/SELECT/GEN_COMS.ASM | 864 +++++++++ v4.0/src/SELECT/GET_HELP.ASM | 233 +++ v4.0/src/SELECT/GET_STAT.C | 1216 ++++++++++++ v4.0/src/SELECT/GET_STAT.H | 191 ++ v4.0/src/SELECT/GLOBAL.C | 79 + v4.0/src/SELECT/INITMEM.ASM | 394 ++++ v4.0/src/SELECT/INPUT.ASM | 1737 +++++++++++++++++ v4.0/src/SELECT/INT13.C | 194 ++ v4.0/src/SELECT/INTVEC.ASM | 546 ++++++ v4.0/src/SELECT/MACROS.INC | 540 ++++++ v4.0/src/SELECT/MACROS2.INC | 437 +++++ v4.0/src/SELECT/MACROS3.INC | 382 ++++ v4.0/src/SELECT/MACROS4.INC | 345 ++++ v4.0/src/SELECT/MACROS5.INC | 538 ++++++ v4.0/src/SELECT/MACROS6.INC | 719 +++++++ v4.0/src/SELECT/MACROS7.INC | 126 ++ v4.0/src/SELECT/MACROS8.INC | 48 + v4.0/src/SELECT/MAC_EQU.INC | 87 + v4.0/src/SELECT/MAKEFILE | 249 +++ v4.0/src/SELECT/MOD_COPY.ASM | 2484 ++++++++++++++++++++++++ v4.0/src/SELECT/MPARSE.ASM | 39 + v4.0/src/SELECT/PAN-LIST.INC | 191 ++ v4.0/src/SELECT/PANEL.MAC | 440 +++++ v4.0/src/SELECT/PANELS.ASM | 4374 ++++++++++++++++++++++++++++++++++++++++++ v4.0/src/SELECT/PCEQUATE.INC | 451 +++++ v4.0/src/SELECT/PCGEQU.INC | 170 ++ v4.0/src/SELECT/PRN_DEF.ASM | 1556 +++++++++++++++ v4.0/src/SELECT/ROUTINE2.ASM | 1369 +++++++++++++ v4.0/src/SELECT/ROUTINES.ASM | 1626 ++++++++++++++++ v4.0/src/SELECT/ROUT_EXT.INC | 74 + v4.0/src/SELECT/SCN_PARM.ASM | 299 +++ v4.0/src/SELECT/SCROLL.ASM | 3356 ++++++++++++++++++++++++++++++++ v4.0/src/SELECT/SEL-PAN.ASM | 48 + v4.0/src/SELECT/SEL-PAN.INC | 307 +++ v4.0/src/SELECT/SEL-PAN.LNK | 5 + v4.0/src/SELECT/SELCHILD.ASM | 62 + v4.0/src/SELECT/SELECT.INC | 54 + v4.0/src/SELECT/SELECT.LNK | 36 + v4.0/src/SELECT/SELECT.MAK | 287 +++ v4.0/src/SELECT/SELECT.PRT | 75 + v4.0/src/SELECT/SELECT.SKL | 43 + v4.0/src/SELECT/SELECT0.ASM | 372 ++++ v4.0/src/SELECT/SELECT1.ASM | 447 +++++ v4.0/src/SELECT/SELECT2.ASM | 589 ++++++ v4.0/src/SELECT/SELECT2A.ASM | 381 ++++ v4.0/src/SELECT/SELECT3.ASM | 286 +++ v4.0/src/SELECT/SELECT4.ASM | 438 +++++ v4.0/src/SELECT/SELECT5.ASM | 576 ++++++ v4.0/src/SELECT/SELECT5A.ASM | 186 ++ v4.0/src/SELECT/SELECT6.ASM | 561 ++++++ v4.0/src/SELECT/SELECT7.ASM | 464 +++++ v4.0/src/SELECT/SELECT8.ASM | 453 +++++ v4.0/src/SELECT/SELECT9.ASM | 518 +++++ v4.0/src/SELECT/SELQUIT.ASM | 313 +++ v4.0/src/SELECT/SELSERV.ASM | 108 ++ v4.0/src/SELECT/SEL_FILE.INC | 578 ++++++ v4.0/src/SELECT/SERVICES.ASM | 899 +++++++++ v4.0/src/SELECT/SSTUB.ASM | 209 ++ v4.0/src/SELECT/S_DISPLY.ASM | 112 ++ v4.0/src/SELECT/TRANS.CHG | 24 + v4.0/src/SELECT/USA.INF | 2381 +++++++++++++++++++++++ v4.0/src/SELECT/USA.PRT | 88 + v4.0/src/SELECT/USA.TXT | 1185 ++++++++++++ v4.0/src/SELECT/VAR.ASM | 946 +++++++++ v4.0/src/SELECT/VARSTRUC.INC | 65 + v4.0/src/SELECT/XCOPY.EQU | 144 ++ v4.0/src/SELECT/XMAINMSG.EQU | 44 + 80 files changed, 43544 insertions(+) create mode 100644 v4.0/src/SELECT/ASM2C.ASM create mode 100644 v4.0/src/SELECT/BRIDGE.ASM create mode 100644 v4.0/src/SELECT/CASERVIC.ASM create mode 100644 v4.0/src/SELECT/CASEXTRN.INC create mode 100644 v4.0/src/SELECT/CASSFAR.LIB create mode 100644 v4.0/src/SELECT/CASTRUC.INC create mode 100644 v4.0/src/SELECT/CKDISP.ASM create mode 100644 v4.0/src/SELECT/COLORS.ASM create mode 100644 v4.0/src/SELECT/DATA.MAC create mode 100644 v4.0/src/SELECT/DOS.EQU create mode 100644 v4.0/src/SELECT/DOSFILES.INC create mode 100644 v4.0/src/SELECT/EXT.INC create mode 100644 v4.0/src/SELECT/EXTERN.H create mode 100644 v4.0/src/SELECT/GEN_COMS.ASM create mode 100644 v4.0/src/SELECT/GET_HELP.ASM create mode 100644 v4.0/src/SELECT/GET_STAT.C create mode 100644 v4.0/src/SELECT/GET_STAT.H create mode 100644 v4.0/src/SELECT/GLOBAL.C create mode 100644 v4.0/src/SELECT/INITMEM.ASM create mode 100644 v4.0/src/SELECT/INPUT.ASM create mode 100644 v4.0/src/SELECT/INT13.C create mode 100644 v4.0/src/SELECT/INTVEC.ASM create mode 100644 v4.0/src/SELECT/MACROS.INC create mode 100644 v4.0/src/SELECT/MACROS2.INC create mode 100644 v4.0/src/SELECT/MACROS3.INC create mode 100644 v4.0/src/SELECT/MACROS4.INC create mode 100644 v4.0/src/SELECT/MACROS5.INC create mode 100644 v4.0/src/SELECT/MACROS6.INC create mode 100644 v4.0/src/SELECT/MACROS7.INC create mode 100644 v4.0/src/SELECT/MACROS8.INC create mode 100644 v4.0/src/SELECT/MAC_EQU.INC create mode 100644 v4.0/src/SELECT/MAKEFILE create mode 100644 v4.0/src/SELECT/MOD_COPY.ASM create mode 100644 v4.0/src/SELECT/MPARSE.ASM create mode 100644 v4.0/src/SELECT/PAN-LIST.INC create mode 100644 v4.0/src/SELECT/PANEL.MAC create mode 100644 v4.0/src/SELECT/PANELS.ASM create mode 100644 v4.0/src/SELECT/PCEQUATE.INC create mode 100644 v4.0/src/SELECT/PCGEQU.INC create mode 100644 v4.0/src/SELECT/PRN_DEF.ASM create mode 100644 v4.0/src/SELECT/ROUTINE2.ASM create mode 100644 v4.0/src/SELECT/ROUTINES.ASM create mode 100644 v4.0/src/SELECT/ROUT_EXT.INC create mode 100644 v4.0/src/SELECT/SCN_PARM.ASM create mode 100644 v4.0/src/SELECT/SCROLL.ASM create mode 100644 v4.0/src/SELECT/SEL-PAN.ASM create mode 100644 v4.0/src/SELECT/SEL-PAN.INC create mode 100644 v4.0/src/SELECT/SEL-PAN.LNK create mode 100644 v4.0/src/SELECT/SELCHILD.ASM create mode 100644 v4.0/src/SELECT/SELECT.INC create mode 100644 v4.0/src/SELECT/SELECT.LNK create mode 100644 v4.0/src/SELECT/SELECT.MAK create mode 100644 v4.0/src/SELECT/SELECT.PRT create mode 100644 v4.0/src/SELECT/SELECT.SKL create mode 100644 v4.0/src/SELECT/SELECT0.ASM create mode 100644 v4.0/src/SELECT/SELECT1.ASM create mode 100644 v4.0/src/SELECT/SELECT2.ASM create mode 100644 v4.0/src/SELECT/SELECT2A.ASM create mode 100644 v4.0/src/SELECT/SELECT3.ASM create mode 100644 v4.0/src/SELECT/SELECT4.ASM create mode 100644 v4.0/src/SELECT/SELECT5.ASM create mode 100644 v4.0/src/SELECT/SELECT5A.ASM create mode 100644 v4.0/src/SELECT/SELECT6.ASM create mode 100644 v4.0/src/SELECT/SELECT7.ASM create mode 100644 v4.0/src/SELECT/SELECT8.ASM create mode 100644 v4.0/src/SELECT/SELECT9.ASM create mode 100644 v4.0/src/SELECT/SELQUIT.ASM create mode 100644 v4.0/src/SELECT/SELSERV.ASM create mode 100644 v4.0/src/SELECT/SEL_FILE.INC create mode 100644 v4.0/src/SELECT/SERVICES.ASM create mode 100644 v4.0/src/SELECT/SSTUB.ASM create mode 100644 v4.0/src/SELECT/S_DISPLY.ASM create mode 100644 v4.0/src/SELECT/TRANS.CHG create mode 100644 v4.0/src/SELECT/USA.INF create mode 100644 v4.0/src/SELECT/USA.PRT create mode 100644 v4.0/src/SELECT/USA.TXT create mode 100644 v4.0/src/SELECT/VAR.ASM create mode 100644 v4.0/src/SELECT/VARSTRUC.INC create mode 100644 v4.0/src/SELECT/XCOPY.EQU create mode 100644 v4.0/src/SELECT/XMAINMSG.EQU (limited to 'v4.0/src/SELECT') diff --git a/v4.0/src/SELECT/ASM2C.ASM b/v4.0/src/SELECT/ASM2C.ASM new file mode 100644 index 0000000..f74da98 --- /dev/null +++ b/v4.0/src/SELECT/ASM2C.ASM @@ -0,0 +1,191 @@ +page 60,132 ;AN000; +name asm2c ;AN000; +title Limited assembler to C interface;AN000; +;------------------------------------------------------------------- +; +; MODULE: asm2c +; +; PURPOSE: +; This routine is used as to map the assembly language +; call made by xxx to a C language call. +; +; INPUT: +; +; ES:DI points to the buffer area where the table data +; will be copied +; +; CALLING FORMAT: +; +; DATE: 7-16-87 +; +;------------------------------------------------------------------- + + + public gget_status ;AN000; + public asm2cInRegs ;AN000; + public asm2coutregs ;AN000; + public asm2csegregs ;AN000; + +_TEXT segment byte public 'CODE' ;AN000; +_TEXT ends ;AN000; +_DATA segment word public 'DATA' ;AN000; +_DATA ends ;AN000; +CONST segment word public 'CONST' ;AN000; +CONST ends ;AN000; +_BSS segment word public 'BSS' ;AN000; +_BSS ends ;AN000; +DGROUP GROUP CONST, _BSS, _DATA ;AN000; + +_DATA segment word public 'DATA' ;AN000; + +;------------------------------------------------------------------- +; define an assembly language version of the C regs structure +;------------------------------------------------------------------- + +asm2cInRegs equ $ ;AN000; + +i_ax dw 0 ;AN000; +i_bx dw 0 ;AN000; +i_cx dw 0 ;AN000; +i_dx dw 0 ;AN000; +i_si dw 0 ;AN000; +i_di dw 0 ;AN000; +i_cflag dw 0 ;AN000; + +Asm2cOutRegs equ $ ;AN000; + +o_ax dw 0 ;AN000; +o_bx dw 0 ;AN000; +o_cx dw 0 ;AN000; +o_dx dw 0 ;AN000; +o_si dw 0 ;AN000; +o_di dw 0 ;AN000; +o_cflag dw 0 ;AN000; + + +Asm2cSegRegs equ $ ;AN000; +s_es dw 0 ;AN000; +s_cs dw 0 ;AN000; +s_ss dw 0 ;AN000; +s_ds dw 0 ;AN000; + + extrn _end:far ;AN000; + +_DATA ends ;AN000; + +_TEXT segment byte public 'CODE' ;AN000; + + extrn _get_status:near ;AN000; + + ASSUME CS: _TEXT ;AN000; + assume ds: nothing ;AN000; + assume es: nothing ;AN000; +;------------------------------------------------------------------- +;------------------------------------------------------------------- +page ;AN000; +;------------------------------------------------------------------- +; ggetstatus +; +; This routine will reside in the C code segment +; +;------------------------------------------------------------------- + +segment_of_dgroup dw seg dgroup;AN000; + +SAVE_STACK LABEL DWORD ;AN000; +SAVE_SP DW 0 ;AN000; +SAVE_SS DW 0 ;AN000; + +SAVE_DS DW 0 ;AN000; +SAVE_ES DW 0 ;AN000; + +gget_status proc far ;AN000; + + MOV SAVE_DS,DS ;AN000; + MOV SAVE_ES,ES ;AN000; + + MOV SAVE_SS,SS ;AN000; + MOV SAVE_SP,SP ;AN000; + + mov ss,segment_of_dgroup ;AN000; + add sp,offset DGROUP:_end ;AN000; + ASSUME SS: DGROUP ;AN000; + + MOV DS,segment_of_dgroup ;AN000; + ASSUME DS: DGROUP ;AN000; + +;------------------------------------------------------------------- +; set up InRegs +;------------------------------------------------------------------- + + mov i_ax,ax ;AN000; make InRegs look like real registers + mov i_bx,bx ;AN000; + mov i_cx,cx ;AN000; + mov i_dx,dx ;AN000; + mov i_si,si ;AN000; + mov i_di,di ;AN000; + +;------------------------------------------------------------------- +; set up SegRegs +;------------------------------------------------------------------- + + IRP XX, ;AN000; + MOV AX,SAVE_&XX ;AN000; + MOV S_&XX,AX ;AN000; + ENDM ;AN000; + + mov s_cs,cs ;AN000; + +;------------------------------------------------------------------- +; put far pointers on stack +;------------------------------------------------------------------- + +; push ds ; push far pointer to SegRegs + lea ax,DGROUP:Asm2cSegRegs;AN000; + push ax ;AN000; + +; push ds ; push far pointer to OutRegs + lea ax,DGROUP:Asm2cOutRegs;AN000; + push ax ;AN000; + +; push ds ; push far pointer to InRegs + lea ax,DGROUP:Asm2cInRegs;AN000; + push ax ;AN000; + +;------------------------------------------------------------------- + call _get_status ;AN000; +;------------------------------------------------------------------- + add sp,6 ;AN000; +;------------------------------------------------------------------- +; set up real registers +;------------------------------------------------------------------- + + mov ax,o_ax ;AN000; make real registers look like OutRegs + mov bx,o_bx ;AN000; + mov cx,o_cx ;AN000; + mov dx,o_dx ;AN000; + mov si,o_si ;AN000; + mov di,o_di ;AN000; + +;------------------------------------------------------------------- +; must remove the things we put on the stack +;------------------------------------------------------------------- + + MOV DS,SAVE_DS ;AN000; + MOV ES,SAVE_ES ;AN000; + MOV SS,SAVE_SS ;AN000; + MOV SP,SAVE_SP ;AN000; + + ret ;AN000; + + +gget_status endp ;AN000; + +_TEXT ends ;AN000; end code segment + +;------------------------------------------------------------------- +;------------------------------------------------------------------- + + + end ;AN000; + diff --git a/v4.0/src/SELECT/BRIDGE.ASM b/v4.0/src/SELECT/BRIDGE.ASM new file mode 100644 index 0000000..75c682d --- /dev/null +++ b/v4.0/src/SELECT/BRIDGE.ASM @@ -0,0 +1,25 @@ +CODE SEGMENT PARA PUBLIC 'CODE' ;AN000;segment for near routine +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + PUBLIC _MAIN ;AN000; +_MAIN PROC FAR ;AN000; + RET ;AN000; +_MAIN ENDP ;AN000; + ; + PUBLIC INDBC ;AN000; +INDBC PROC FAR ;AN000; + RET ;AN000; +INDBC ENDP ;AN000; + ; + PUBLIC BOXDR ;AN000; +BOXDR PROC FAR ;AN000; + RET ;AN000; +BOXDR ENDP ;AN000; + ; + PUBLIC GRAPH ;AN000; +GRAPH PROC FAR ;AN000; + RET ;AN000; +GRAPH ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CODE ENDS ;AN000; + END ;AN000; + diff --git a/v4.0/src/SELECT/CASERVIC.ASM b/v4.0/src/SELECT/CASERVIC.ASM new file mode 100644 index 0000000..4d1ed7b --- /dev/null +++ b/v4.0/src/SELECT/CASERVIC.ASM @@ -0,0 +1,2644 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; CASERVIC.ASM +; +; +; +; CAS SERVICES....FROM TSUISRD.ASM +; +; +; DATE: MAY 15, 1987 +; +; +; +; ;AN004; for PTM 1064 temporary fix until the CASSFAR.LIB +; is fixed. The HELP routines of CAS, zero out the +; frequency value. +; +; ;AN005; The help text comes up blank. No checking was done +; for invalid helps (HRD_ERROR & HRD_DOSERROR). Now, +; there is checking added to PCHLPRD_CALL! +; +; ;AN006; for PTM 1756 - added error checking for wrong diskette +; when help accessed. JW +; +; ;AN007; for PTM 1810 - during a help request processing, any error +; caused a problem because the manage_help routine would +; try to remove a help panel which had not been displayed. +; +; ;AN008; for PTM 2191 - added code to display selected option when +; selection is made by numeric input. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.ALPHA ;AN000; + INCLUDE STRUC.INC ;AN000; + INCLUDE MACROS.INC ;AN006;JW + INCLUDE PANEL.MAC ;AN000; + INCLUDE PAN-LIST.INC ;AN000; + INCLUDE SELECT.INC ;AN000; + INCLUDE CASTRUC.INC ;AN000; + INCLUDE DATA.MAC ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Variable(s) for Conditional Assembly +; +; These conditional assembly values are declared and set in an external +; file and included during assembly. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + INCLUDE CASVAR.INC ;AN000; + ; + EXTRN DISK_PANEL:WORD ;AN000; + EXTRN SEARCH_FILE:WORD;AN000; + EXTRN FK_ENT:BYTE ;AN000; + EXTRN FK_ENT_LEN:ABS ;AN000; + EXTRN E_FILE_ATTR:ABS ;AN000; + EXTRN E_RETURN:ABS ;AN000; + EXTRN ACTIVE:BYTE ;AN000; + EXTRN ALTERNATE:BYTE ;AN000; + EXTRN LCD:ABS ;AN000; + EXTRN E_RETURN:ABS ;AN000; + EXTRN ERROR_ACTIVE:BYTE;AN000; + EXTRN MEM_SIZE:WORD ;AN024; + ;;;;;;;;; + EXTRN DISPLAY_MESSAGE_ROUTINE:FAR ;AN024; + EXTRN HOOK_INT_24:FAR ;AN000; + EXTRN RESTORE_INT_24:FAR ;AN000; + EXTRN FIND_FILE_ROUTINE:FAR ;AN000; + EXTRN GET_FUNCTION_CALL:NEAR ;AN000; + EXTRN HANDLE_CHILDREN:NEAR ;AN000; + EXTRN PREPARE_PANEL_CALL:NEAR ;AN000; + EXTRN ALLOCATE_HELP:FAR ;AN024; + EXTRN DEALLOCATE_HELP:FAR ;AN024; + EXTRN ALLOCATE_LVB:FAR ;AN024; + EXTRN DEALLOCATE_LVB:FAR ;AN024; + +; +; Table at OFFSET 0 of panel file +; +EXT_FILE STRUC ;AN024; + PCBS DW 0 ;AN024;offset of PCB vector table + NPCBS DW 0 ;AN024;number of PCBs + SCBS DW 0 ;AN024;offset of SCB vector table + NSCBS DW 0 ;AN024;number of SCBs + COLTBL DW 0 ;AN024;offset of COLOR attribute table + NCOLTBL DW 0 ;AN024;number of COLOR attribute sets + MONTBL DW 0 ;AN024;offset of MONO attribute table + NMONTBL DW 0 ;AN024;number of MONO attribute sets +EXT_FILE ENDS ;AN024; + ; +DATA SEGMENT BYTE PUBLIC 'DATA' ;AN024; +CFILE DB 'SELECT.DAT',0 ;AN024;compressed panel file +REPCHAR EQU 255 ;AN024;character used as repeat flag +DATA ENDS ;AN024; ;AN000; + ; +IF CASFAR ;AN000; + IFE CASRM ;AN000; + EXTRN INPUT:FAR ;AN000; + EXTRN HLPRD:FAR ;AN000; + EXTRN SLCTP:FAR ;AN000; + EXTRN PANEL:FAR ;AN000; + EXTRN DISPQ:FAR ;AN000; + EXTRN INCHA:FAR ;AN000; + EXTRN MBEEP:FAR ;AN000; + EXTRN INSTRN:FAR ;AN000; + EXTRN GVIDO:FAR ;AN000; + EXTRN WWRAP:FAR ;AN000; + ENDIF ;AN000; + ; +SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; IF NEAR procedure, then define segment and EXTRN +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ELSE ;AN000; + ; +SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine + IFE CASRM ;AN000; + EXTRN INPUT:NEAR ;AN000; + EXTRN HLPRD:NEAR ;AN000; + EXTRN SLCTP:NEAR ;AN000; + EXTRN PANEL:NEAR ;AN000; + EXTRN DISPQ:NEAR ;AN000; + EXTRN INCHA:NEAR ;AN000; + EXTRN MBEEP:NEAR ;AN000; + EXTRN INSTRN:NEAR ;AN000; + EXTRN GVIDO:NEAR ;AN000; + EXTRN WWRAP:NEAR ;AN000; + ENDIF ;AN000; +ENDIF ;AN000; + ASSUME CS:SELECT,DS:DATA,ES:DATA ;AN000; + + PUBLIC CURSOROFF,PCGVIDO_CALL,INITIALIZE;AN000; + PUBLIC GET_KEY,PCDISPQ_CALL,PCPANEL_CALL;AN000; + PUBLIC GET_SCROLL_CALL,PCINPUT_CALL,CURSORON;AN000; + PUBLIC GET_SCB,GET_PCB,GET_ICB,PCMBEEP_CALL,PCSLCTP_CALL;AN000; + EXTRN GET_HELP_ID:NEAR ;AN000; + EXTRN ADJUST_DOWN:NEAR ;AN000; + EXTRN ADJUST_UP:NEAR ;AN000; + EXTRN INIT_SCROLL_CALL:NEAR ;AN000; + EXTRN INIT_PQUEUE_CALL:NEAR ;AN000; + EXTRN DISPLAY_PANEL_CALL:NEAR ;AN000; + EXTRN HANDLE_ERROR_CALL:FAR ;AN006;JW + EXTRN EXIT_SELECT:NEAR ;AN006;JW + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; GET_SCROLL_CALL +; +; Process scroll field relative to current active panel. +; Automatically handle help request, display and interaction. +; +; Entry: WR_DRETSEG = Segment of dynamic return key string +; WR_DRETOFF = Offset of dynamic return key string +; WR_DRETLEN = Length of dynamic return key string +; +; WR_HCBCONT = ID of the desired contextual help text +; +; WR_SCBID = SCB Number of scroll field +; +; AX 0 = Use default highlight and scroll list position +; 1 = Initialize highlight and scroll list position +; to the top of the list +; +; Exit: AX = Contains keystroke +; BX = Current element +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PUSHH MACRO REG_LIST ;;AN000; + IRP REG, ;;AN000; + PUSH REG ;;AN000; save registers + ENDM ;;AN000; + ENDM ;;AN000; + ;; +POPP MACRO REG_LIST ;;AN000; + IRP REG, ;;AN000; + POP REG ;;AN000; return registers to initial state + ENDM ;;AN000; + ENDM ;;AN000; + ;; +DOSCALL MACRO ;;AN000; + INT 21H ;;AN000; call to DOS + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GET_SCROLL_CALL PROC NEAR ;AN000; + PUSH CX ;AN000; + PUSH DX ;AN000; + PUSH SI ;AN000; + PUSH DI ;AN000; + PUSH ES ;AN000; +; ; +; Initialize to top ; +; ; + MOV BX,WR_SCBID ;AN000;get PCSLCTP field + CALL GET_SCB ;AN000;ES:DI points to SCB +; ; + CMP AX,0 ;AN000;check to start list & highlight + JE GS10 ;AN000; at top +; ; + MOV ES:[DI]+SCB_TOPELE,1;AN000;intialize parameters + MOV ES:[DI]+SCB_CURELE,AX;AN000; +; ; +; Locate PCB data and initialize SCB ; +; ; +GS10: MOV BX,QM_ACTIVEPAN ;AN000;get the active panel number + CALL GET_PCB ;AN000;ES:DI address of panel PCB + ; + PUSH ES:[DI]+PCB_UROW ;AN000; ;get active panel row + PUSH ES:[DI]+PCB_UCOL ;AN000; ;get active panel column + PUSH ES:[DI]+PCB_CCBID ;AN000;get active panel color index + ; + MOV BX,WR_SCBID ;AN000;get PCSLCTP field + CALL GET_SCB ;AN000;ES:DI points to SCB + ; + POP ES:[DI]+SCB_CCBID ;AN000;get the panel's current color ind + POP ES:[DI]+SCB_RELCOL ;AN000;set the panel's relative column + POP ES:[DI]+SCB_RELROW ;AN000;set the panel's relative row +; +; Build actual return string in complete buffer +; + CALL SET_RETKEYS ;AN000;create complete return string + CALL SET_NUMKEYS ;AN000;GHG + + PUSH WR_CRETSEG ;AN000;initialize SCB with complete + POP ES:[DI]+SCB_RLSEG ;AN000; return string information + + PUSH WR_CRETOFF ;AN000; + POP ES:[DI]+SCB_RLOFF ;AN000; + + PUSH WR_CRETLEN ;AN000; + POP ES:[DI]+SCB_RLLEN ;AN000; +; +; Process scroll field +; + AND ES:[DI]+SCB_OPT1,NOT SCB_UKS;AN000; + ;set to not use keystrokes + CALL PCSLCTP_CALL ;AN000;display scroll field + + MOV BX,ES:[DI]+SCB_CURELE ;AN000;get last current element + MOV AX,ES:[DI]+SCB_KS ;AN000;get last keystroke +; +; +; determine if current element has specific contextual help text +; + MOV WR_HLPOPT,HLP_OVER ;AN000;GHG position help panel with default + PUSH AX ;AN000;GHG + MOV BX,WR_SCBID ;AN000;GHG + MOV AX,ES:[DI]+SCB_CURELE ;AN000;GHG + CALL ADJUST_DOWN ;AN000;GHG + MOV CX,AX ;AN000;GHG + MOV AX,2 ;AN000;GHG + CALL GET_HELP_ID ;AN000;GHG + MOV WR_HCBCONT,AX ;AN000;GHG get current contextual help ID + XOR AH,AH ;AN000;GHG + MOV AL,DH ;AN000;GHG + MOV WR_HLPROW,AX ;AN000;GHG row override of 6 + MOV AL,DL ;AN000;GHG + MOV WR_HLPCOL,AX ;AN000;GHG row override of 6 + POP AX ;AN000;GHG + + CALL CHK_NUMKEYS ;AN000;GHG + CALL CHK_RETKEYS ;AN000;check if used by other routine + JCXZ GS20 ;AN000;keystroke not used elsewhere + + JMP GS10 ;AN000;keystroke used elswhere, continu + ; from last position +; +; Exit +; +GS20: MOV BX,ES:[DI]+SCB_CURELE ;AN000;return current element +; +; display the selected option and exit immediately +; + PUSH AX ;AN008;JW + PUSH BX ;AN008;JW + OR ES:[DI]+SCB_OPT1,SCB_RD ;AN008;JW + CALL PCSLCTP_CALL ;AN008;JW display scroll field and exit + AND ES:[DI]+SCB_OPT1,NOT SCB_RD ;AN008;JW + POP BX ;AN008;JW + POP AX ;AN008;JW + + POP ES ;AN000; + POP DI ;AN000; + POP SI ;AN000; + POP DX ;AN000; + POP CX ;AN000; + + RET ;AN000; +GET_SCROLL_CALL ENDP ;AN000; +PAGE ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; GET_INPUT_CALL +; +; Process input field relative to current active panel. +; Automatically handle help request, display and interaction. +; +; Entry: WR_DRETSEG = Segment of dynamic return key string +; WR_DRETOFF = Offset of dynamic return key string +; WR_DRETLEN = Length of dynamic return key string +; +; WR_HCBCONT = ID of the desired contextual help text +; +; IN_ICBID = ICB Number of input field +; +; Exit: AX = Contains keystroke +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + PUBLIC GET_INPUT_CALL ;AN000;GHG +GET_INPUT_CALL PROC NEAR ;AN000;GHG + PUSH CX ;AN000;GHG + PUSH DX ;AN000;GHG + PUSH SI ;AN000;GHG + PUSH DI ;AN000;GHG + PUSH ES ;AN000;GHG + ;GHG + MOV BX,IN_ICBID ;AN000;GHG get PCSLCTP field + CALL GET_ICB ;AN000;GHG ES:DI points to SCB + ;GHG +GI10: CALL SET_RETKEYS ;AN000;GHG create complete return string + ;GHG + PUSH WR_CRETSEG ;AN000;GHG initialize SCB with complete + POP ES:[DI]+ICB_RETSEG ;AN000;GHG return string information + ;GHG + PUSH WR_CRETOFF ;AN000;GHG + POP ES:[DI]+ICB_RETOFF ;AN000;GHG + ;GHG + PUSH WR_CRETLEN ;AN000;GHG + POP ES:[DI]+ICB_RETLEN ;AN000;GHG +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Process input field +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + CALL PCINPUT_CALL ;AN000;GHG display input field + ;GHG + PUSHH ;AN000;GHG + PUSH ES:[DI]+ICB_FIELDOFF ;AN000;GHG + PUSH ES:[DI]+ICB_FIELDSEG ;AN000;GHG + PUSH ES:[DI]+ICB_DEFOFF ;AN000;GHG + PUSH ES:[DI]+ICB_DEFSEG ;AN000;GHG + ;GHG + MOV CX,ES:[DI]+ICB_FIELDLEN;AN000;GHG + OR CX,CX ;AN000;GHG + JE GI_11 ;AN000;GHG + ;GHG + POP ES ;AN000;GHG + POP DI ;AN000;GHG + POP DS ;AN000;GHG + POP SI ;AN000;GHG + CLD ;AN000;GHG + REP MOVSB ;AN000;GHG +GI_11: POPP ;AN000;GHG + PUSH ES:[DI]+ICB_ENDBYTE ;AN000;GHG + POP ES:[DI]+ICB_DEFLEN ;AN000;GHG + ;GHG + MOV AX,ES:[DI]+ICB_KEYRET ;AN000;GHG get last keystroke +; GHG +; +; determine if current element has specific contextual help text +; + ;GHG + MOV WR_HLPOPT,HLP_OVER ;AN000;GHG position help panel with default + PUSH AX ;AN000;GHG + MOV AX,1 ;AN000;GHG + MOV BX,IN_ICBID ;AN000;GHG + CALL GET_HELP_ID ;AN000;GHG + MOV WR_HCBCONT,AX ;AN000;GHG get current contextual help ID + XOR AH,AH ;AN000;GHG + MOV AL,DH ;AN000;GHG + MOV WR_HLPROW,AX ;AN000;GHG row override + MOV AL,DL ;AN000;GHG + MOV WR_HLPCOL,AX ;AN000;GHG col override + POP AX ;AN000;GHG + ;GHG + CALL CURSOROFF ;AN000;GHG Turn cursor OFF!!!! + CALL CHK_RETKEYS ;AN000;GHG check if used by other routine + JCXZ GI20 ;AN000;GHG keystroke not used elsewhere + ;GHG + JMP GI10 ;AN000;GHG keystroke used elswhere, continue + ;GHG from last position +GI20: POP ES ;AN000;GHG + POP DI ;AN000;GHG + POP SI ;AN000;GHG + POP DX ;AN000;GHG + POP CX ;AN000;GHG + ;GHG + RET ;AN000;GHG +GET_INPUT_CALL ENDP ;AN000;GHG +PAGE ;AN000;GHG +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GHG +; +; GET_INPUT +; +; Process input field relative to current active panel. +; Automatically handle help request, display and interaction. +; +; +; Entry: WR_DRETSEG = Segment of call's return key string +; WR_DRETOFF = Offset of call's return key string +; WR_DRETLEN = Length of call's return key string +; +; WR_HCBCONT = ID of the desired contextual help text +; +; +; Exit: AX = Contains Keystroke +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GET_INPUT PROC NEAR ;AN000; + RET ;AN000; +GET_INPUT ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; GET_KEY +; +; Get a keystroke from the keyboard and return to calling routine +; if not used. This routine uses the string of return keys and +; builds the complete set of return keys. Once the complete set of +; return keys is built, the CAS keyboard routine is called to look +; for a keystroke. When a keystroke is pressed, the CAS routine +; returns and the keystroke is checked to determine if help should +; be processed. If the keystroke is not used by help, then it is +; returned to the calling routine for use. +; +; Entry: WR_DRETSEG = Segment of call's return key string +; WR_DRETOFF = Offset of call's return key string +; WR_DRETLEN = Length of call's return key string +; +; Exit: AX = Contains unused keystroke returned from call +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GET_KEY PROC NEAR ;AN000; + + PUSH CX ;AN000;save registers +; +; Create complete return key string +; +CGK10: MOV AX,0 ;AN000;clear to zero + ; + CALL SET_RETKEYS ;AN000;create complete return string + ; + PUSH WR_CRETSEG ;AN000;initialize PCINSTR parameters + POP INS_SSEG ;AN000; with complete return string data + ; + PUSH WR_CRETOFF ;AN000; + POP INS_SOFF ;AN000; + ; + PUSH WR_CRETLEN ;AN000; + POP INS_SLEN ;AN000; +; ; +; Get keystroke from keyboard ; +; ; +CGK20: MOV INC_OPT,INC_KWAIT ;AN000;wait for keystroke + CALL PCINCHA_CALL ;AN000;call CAS routine +; +; Check if keystroke is a valid return key +; + MOV INS_OPT,INS_FKS ;AN000;set find keystroke option + MOV AX,INC_KS ;AN000;set keystroke to PCINSTR + MOV INS_KS,AX ;AN000; parameter + ; + CALL PCINSTR_CALL ;AN000;check if good key + ; + TEST INS_RSLT,0FFFFH ;AN000;check if key found + JNE CGK30 ;AN000;yes + ; + CALL PCMBEEP_CALL ;AN000;no + JMP CGK20 ;AN000;try again +; +; Check if help keystroke and process if yes +; +CGK30: CALL CHK_RETKEYS ;AN000;check keystroke + JCXZ CGKEXIT ;AN000;not used return to calling routin + JMP CGK10 ;AN000;if used by help, get another key + ; +CGKEXIT: POP CX ;AN000;restore registers + RET ;AN000; +GET_KEY ENDP ;AN000; +PAGE ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SET_RETKEYS +; +; Combine the calling routine's dynamic return key string with +; the return keys of the child panels currently displayed into +; one complete return string. +; +; Entry: WR_DRETSEG = Segment of call's dynamic return key string +; WR_DRETOFF = Offset of call's dynamic return key string +; WR_DRETLEN = Length of call's dynamic return key string +; +; Exit: WR_CRETSEG = Segment of complete return key string to use +; WR_CRETOFF = Offset of complete return key string to use +; WR_CRETLEN = Length of complete return key string to use +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SET_RETKEYS PROC NEAR ;AN000; + PUSH CX ;AN000; + PUSH DX ;AN000; + PUSH DI ;AN000; + PUSH SI ;AN000; + PUSH ES ;AN000; + PUSH DS ;AN000; +; +; do not exceed WR_MAXRETKSZ buffer length +; +; +; Move keystrokes from dynamic return key string to complete return strg buffer +; + CLD ;AN000;auto increment + PUSH WR_CRETSEG ;AN000;get segment of complete return + POP ES ;AN000; buffer + ; + MOV DI,WR_CRETOFF ;AN000;get offset of complete return + ; + MOV CX,WR_DRETLEN ;AN000;get length of dynamic return strg + MOV DX,CX ;AN000; and initialize DX counter + ; + MOV SI,WR_DRETOFF ;AN000;get offset of dynamic return strg + ; + PUSH DS ;AN000;save data segment + ; + PUSH WR_DRETSEG ;AN000;get offset of dynamic return strg + POP DS ;AN000; + ; + REP MOVSB ;AN000;copy dynamic return key string + ; to complete return key buffer + POP DS ;AN000;restore data segment +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Add assigned keys from displayed child panels to complete return buffer +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + MOV SI,QM_RETKEYSOFF ;AN000;get offset of return buffer + ; + MOV CX,QM_RETKEYSLEN ;AN000; + ADD DX,CX ;AN000;add length of return keys + ; + PUSH DS ;AN000;save data segment + ; + PUSH QM_RETKEYSSEG ;AN000; + POP DS ;AN000;get segment of return buffer + ; + REP MOVSB ;AN000;copy string sent + ; + POP DS ;AN000;restore data segment + ; + MOV CX,WR_MAXRETKSZ ;AN061; + SUB CX,DX ;AN061; + MOV AL,0 ;AN061; + REP STOSB ;AN061; + ; + MOV WR_CRETLEN,DX ;AN000;initialize current return string +; ; +; Exit ; +; ; +SRK30: POP DS ;AN000;restore registers + POP ES ;AN000; + POP SI ;AN000; + POP DI ;AN000; + POP DX ;AN000; + POP CX ;AN000; + RET ;AN000; +SET_RETKEYS ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SET_NUMKEYS +; +; Entry: WR_CRETSEG = Segment of call's dynamic return key string +; WR_CRETOFF = Offset of call's dynamic return key string +; WR_CRETLEN = Length of call's dynamic return key string +; +; Exit: WR_CRETSEG' = Segment of complete return key string to use +; WR_CRETOFF' = Offset of complete return key string to use +; WR_CRETLEN' = Length of complete return key string to use +; +; GORD GIDDINGS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +NUMKEYS DB '123456789' ;AN000; + ; +SET_NUMKEYS PROC NEAR ;AN000; + PUSH AX ;AN000;save registers + PUSH BX ;AN000; + PUSH CX ;AN000; + PUSH DI ;AN000; + PUSH SI ;AN000; + PUSH ES ;AN000; + PUSH DS ;AN000; +; +; Move numeric keystrokes into completed return strg buffer +; + MOV BX,WR_SCBID ;AN000;get PCSLCTP field + CALL GET_SCB ;AN000;ES:DI points to SCB + ; + TEST ES:[DI]+SCB_OPT3,SCB_NUMS;AN000; + JZ SNK_30 ;AN000; + ; + PUSH ES:[DI]+SCB_SELSEG ;AN000; + PUSH ES:[DI]+SCB_SELOFF ;AN000; + PUSH ES:[DI]+SCB_NUMELE ;AN000; + POP CX ;AN000; + POP DI ;AN000; + POP ES ;AN000; + XOR AX,AX ;AN000; + ; +SNR_10: MOV BX,SCB_ACTIVEON ;AN000; + CMP ES:[DI],BX ;AN000; + JNE SNR_15 ;AN000; + INC AX ;AN000; +SNR_15: INC DI ;AN000; + INC DI ;AN000; + LOOP SNR_10 ;AN000; + ; + CMP AX,9 ;AN000; + JBE SNR_20 ;AN000; + MOV AX,9 ;AN000; +SNR_20: MOV CX,AX ;AN000; + ; + PUSH WR_CRETOFF ;AN000;get offset of complete return + PUSH WR_CRETSEG ;AN000;get segment of complete return + POP ES ;AN000; + POP DI ;AN000; + ; + ADD DI,WR_CRETLEN ;AN000;get length of dynamic return strg + ADD WR_CRETLEN,CX ;AN000; + LEA SI,NUMKEYS ;AN000; + PUSH CS ;AN000; + POP DS ;AN000; + ; + CLD ;AN000;auto increment + REP MOVSW ;AN000; + ; +SNK_30: POP DS ;AN000;restore registers + POP ES ;AN000; + POP SI ;AN000; + POP DI ;AN000; + POP CX ;AN000; + POP BX ;AN000; + POP AX ;AN000; + RET ;AN000; +SET_NUMKEYS ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; CHK_RETKEYS +; +; Check return key for active function keys +; +; Note: That currently this routine searchs for only the help +; function keys (F1=Help, F5=Index, F7=Keys); however, other +; function keys could be searched for and processed in this +; routine before returning to the main dialog. +; +; Entry: AX = Keystroke +; +; Exit: CX = 0= keystroke not used +; 1= keystroke used +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CHK_RETKEYS PROC NEAR ;AN000; + PUSHF ;AN000;save registers and variables + PUSH AX ;AN000; + PUSH BX ;AN000; + PUSH DX ;AN000; + PUSH SI ;AN000; + PUSH DI ;AN000; + PUSH ES ;AN000; + PUSH DS ;AN000; + PUSH WR_HCBCONT ;AN000;save contextual help ID + PUSH QM_ACTIVEPAN ;AN000;save current active panel + PUSH WR_SCBID ;AN000;save current SCB ID + PUSH WR_DRETSEG ;AN000;save dynamic return key vars + PUSH WR_DRETOFF ;AN000; + PUSH WR_DRETLEN ;AN000; + PUSH MB_FREQUENCY ;AN004;GHG for PTM 1064 +; +; Check if keystroke pressed displays, processes, or removes contextual help +; + CALL MANAGE_HELP ;AN000; +; + CMP CX,0 ;AN000;check if keystroke used by help + JE CHK10 ;AN000;no, check other functions +; + JMP CHKEXIT ;AN000;yes, exit +; +; Keys may be check here and processed for other functions +; +CHK10: ;AN000; +; +; Exit to calling routine +; +CHKEXIT: POP MB_FREQUENCY ;AN004;GHG for PTM 1064 + POP WR_DRETLEN ;AN000;save dynamic return key vars + POP WR_DRETOFF ;AN000; + POP WR_DRETSEG ;AN000; + POP WR_SCBID ;AN000;restore current SCB ID + POP QM_ACTIVEPAN ;AN000;restore current active panel + POP WR_HCBCONT ;AN000;restore contextual help ID + POP DS ;AN000; + POP ES ;AN000; + POP DI ;AN000; + POP SI ;AN000; + POP DX ;AN000; + POP BX ;AN000; + POP AX ;AN000; + POPF ;AN000; + RET ;AN000; +CHK_RETKEYS ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; CHK_NUMKEYS +; +; Check return key for numeric keys +; +; Entry: AX = Keystroke +; +; Exit: AX = The first character in the completed return key string +; WR_CRETSEG:WR_CRETOFF +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CHK_NUMKEYS PROC NEAR ;AN000; + PUSH ES ;AN000; + PUSH DI ;AN000; + PUSH BX ;AN000; + MOV BX,WR_SCBID ;AN000; + CALL GET_SCB ;AN000; + TEST ES:[DI]+SCB_OPT3,SCB_NUMS ;AN000; + JZ CNK_20 ;AN000; + OR AH,AH ;AN000; + JNZ CNK_20 ;AN000; + CMP AL,'1' ;AN000; + JB CNK_20 ;AN000; + CMP AL,'9' ;AN000; + JA CNK_20 ;AN000; + ; + MOV BX,AX ;AN000; now form the index value + SUB BX,'0' ;AN000; from the keystroke! + ; + PUSHH ;AN000;GHG + PUSHH ;AN000;GHG + POPP ;AN000;GHG + MOV AL,ES:[DI] ;AN000;GHG + POPP ;AN000;GHG + ; ; + MOV ES:[DI]+SCB_KS,AX ;AN000; + PUSH AX ;AN000; + MOV AX,BX ;AN000;get PCSLCTP field + MOV BX,WR_SCBID ;AN000; + CALL ADJUST_UP ;AN000; + MOV ES:[DI]+SCB_CURELE,AX ;AN000; + POP AX ;AN000; + ; +CNK_20: POP BX ;AN000; + POP DI ;AN000; + POP ES ;AN000; + RET ;AN000; +CHK_NUMKEYS ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MANAGE_HELP +; +; Manage contextual, indexed and keys help. This routine is used : +; to display, process and remove help from the screen. +; +; Entry: AX = Keystroke pressed +; +; WR_HLPOPT = Help display and operation options +; WR_HLPROW = Override row for help panel +; WR_HLPCOL = Override column for help panel +; +; WR_HCBCONT = Current contextual help ID +; WR_HCBHELP = Help-on-help ID +; WR_HCBKEYS = Keys help ID +; +; WR_PCBHPAN = Help panel ID +; +; WR_SCBCONT = Scroll ID for context forms of help +; WR_SCBINDX = Scroll ID for indexed forms of help +; +; WR_KEYQUIT = Quit keystroke (Esc) +; WR_KEYKEYS = Keys help keystroke (F7=Keys) +; WR_KEYHELP = Help-on-help keystroke (F1=Help) +; WR_KEYCONT = Contextual help keystroke (F1=Help) +; WR_KEYINDX = Indexed help keystroke (F5=Index) +; WR_KEYSWIT = Switch keystroke (F2=Switch) +; +; HRD_FILSPOFF = Offset of contextual help file path name +; HRD_FILSPSEG = Segment of contextual help file path name +; +; Exit: AX = Keystroke +; CX 0 = Keystroke not used +; 1 = Keystroke used +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +MANAGE_HELP PROC NEAR ;AN000; +; +; Check if help is displayed +; + MOV CX,0 ;AN000; + + PUSH DS ;AN007;JW + PUSH CS ;AN007;JW + POP DS ;AN007;JW + CMP ERROR_ACTIVE,1 ;AN007;JW is an error being processed? + POP DS ;AN007;JW + JNE MH00 ;AN007;JW no, continue + JMP MHEXIT ;AN007;JW yes, exit + +MH00: CMP WR_HLPDIS,0 ;AN000;check if help is displayed + JE MH30 ;AN000; + + CMP AX,WR_KEYSWIT ;AN000;check if any key but switch + JNE MH10 ;AN000; and remove help + + TEST WR_HLPDIS,HLP_INDX ;AN000;check if index displayed + JNE MH05 ;AN000;yes + + MOV QM_OPT1,QM_RVMCHD ;AN000;remove child panel + MOV AX,WR_PCBENTR ;AN000;Enter panel + MOV QM_ID,AX ;AN000;parent PCB number + CALL PCDISPQ_CALL ;AN000; + +MH05: MOV QM_OPT1,QM_PUSHCHD ;AN000;add child panel + MOV AX,WR_PCBHELP ;AN000;F1=Help panel + MOV QM_ID,AX ;AN000;parent PCB number + CALL PCDISPQ_CALL ;AN000; + JMP MH20 ;AN000; + +MH10: CALL REMOVE_HELP ;AN000;restore original display queues + JMP MH80 ;AN000;exit +; +; Process read help text +; +MH20: CALL PROCESS_HELP ;AN000;process contextual help + + MOV CX,1 ;AN000;set keystroke used flag + + CMP AX,WR_KEYSWIT ;AN000;check if help should be left + JNE MH25 ;AN000; on the screen + + MOV QM_OPT1,QM_RVMCHD ;AN000;remove child panel + MOV AX,WR_PCBHELP ;AN000;F1=Help + MOV QM_ID,AX ;AN000;parent PCB number + CALL PCDISPQ_CALL ;AN000; + + MOV AX,WR_PCBHELP ;AN000;F1=Help + MOV QM_ID,AX ;AN000;parent PCB number + CALL PCDISPQ_CALL ;AN000; + + TEST WR_HLPDIS,HLP_INDX ;AN000;check if index displayed + JNE MH22 ;AN000;yes + + MOV QM_OPT1,QM_PUSHCHD ;AN000;add child panel + MOV AX,WR_PCBENTR ;AN000;Enter panel + MOV QM_ID,AX ;AN000;parent PCB number + CALL PCDISPQ_CALL ;AN000; + +MH22: JMP MH80 ;AN000;exit + +MH25: CMP AL,01BH ;AN000;check for quit key + JNE MH30 ;AN000; refresh display + + CALL REMOVE_HELP ;AN000;restore original display queues + JMP MH80 ;AN000;exit + +; Read help if requested + +MH30: CMP AX,WR_KEYHELP ;AN000;check if F1=help requested + JNE MH60 ;AN000; + + CMP WR_HLPDIS,0 ;AN000;is help already displayed + JE MH40 ;AN000;no + + CALL REMOVE_HELP ;AN000;restore original display queues + +MH40: TEST WR_HLPDIS,HLP_CONT ;AN000;check if contextual help already + JE MH50 ;AN000; on + + MOV WR_HLPPAN,HLP_KEYS ;AN000;turn on help on keys + OR WR_HLPPAN,HLP_CONT ;AN000;turn on contextual help + OR WR_HLPPAN,HLP_INDX ;AN000;turn on help index + + PUSH WR_HCBHELP ;AN000;set help-on-help ID + POP HRD_ID ;AN000; + + MOV WR_HLPDIS,HLP_HELP ;AN000;turn help-on-help status on + CALL READ_HELP ;AN000;prepare help text + JMP MH20 ;AN000;loop to process + +MH50: MOV WR_HLPPAN,HLP_KEYS ;AN000;turn on help on keys + OR WR_HLPPAN,HLP_HELP ;AN000;turn on help-on-help + OR WR_HLPPAN,HLP_INDX ;AN000;turn on help index + + PUSH WR_HCBCONT ;AN000;get current contextual help text + POP HRD_ID ;AN000; ID + + MOV WR_HLPDIS,HLP_CONT ;AN000;turn contextual help status on + CALL READ_HELP ;AN000;prepare help text + JMP MH20 ;AN000;loop to process +; +; Check if indexed help requested for display +; +MH60: CMP AX,WR_KEYINDX ;AN000;check if index selected + JNE MH70 ;AN000; + + CMP WR_HLPDIS,0 ;AN000;is help already displayed + JE MH65 ;AN000;no + + CALL REMOVE_HELP ;AN000;restore original display queues + +MH65: MOV WR_HLPPAN,HLP_CONT ;AN000;turn on contextual help + OR WR_HLPPAN,HLP_KEYS ;AN000;turn on help on keys + + MOV HRD_ID,0 ;AN000;set contextual help ID + + MOV WR_HLPDIS,HLP_INDX ;AN000;turn index status on + CALL READ_HELP ;AN000;prepare help text + JMP MH20 ;AN000;loop to process +; +; Check if keys help requested for display +; +MH70: CMP AX,WR_KEYKEYS ;AN000;check for help on keys + JNE MHEXIT ;AN000; + + CMP WR_HLPDIS,0 ;AN000;is help already displayed + JE MH75 ;AN000;no + + CALL REMOVE_HELP ;AN000;restore original display queues + +MH75: MOV WR_HLPPAN,HLP_CONT ;AN000;turn on contextual help + OR WR_HLPPAN,HLP_INDX ;AN000;turn on help index + + PUSH WR_HCBKEYS ;AN000;set keys help ID + POP HRD_ID ;AN000; + + MOV WR_HLPDIS,HLP_KEYS ;AN000;turn keys help status on + CALL READ_HELP ;AN000;prepare help text + JMP MH20 ;AN000;loop to process +; +; Help was processed restore original active panel and return key string +; +MH80: MOV QM_OPT1,0 ;AN000;make original panel active + CALL PCDISPQ_CALL ;AN000; and update the return keys + + CALL SET_RETKEYS ;AN000;restore original return keys + + PUSH AX ;AN000;save keystroke + + MOV AX,1 ;;AN000;;;;;;;;;;0 ;set break option off + + CMP WR_HLPDIS,0 ;AN000;is help displayed + JE MH90 ;AN000; + + MOV AX,1 ;AN000;turn break option on + +MH90: CALL PCPANEL_CALL ;AN000;make original panel the active + ; panel with the child panels + POP AX ;AN000;restore keystroke +; +; Exit +; +MHEXIT: ;AN000;exit +; + RET ;AN000; +MANAGE_HELP ENDP ;AN000; + +PAGE ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; READ_HELP +; +; Read Help Text and Prepare for Display: +; +; o Read the specified contextual help text into the help buffer : +; +; o Save the current parent and child display queues +; +; o Add the contextual help panel to the new display queue +; +; o Exit without updating display +; +; +; Entry: WR_PCBHPAN = Help panel ID +; WR_SCBCONT = Scroll ID for context forms of help +; WR_SCBINDX = Scroll ID for indexed forms of help +; +; HRD_ID = Current contextual help ID to read +; HRD_FILSPOFF = Offset of help file path name +; HRD_FILSPSEG = Segment of help file path name +; +; WR_HLPOPT = Help options +; WR_HLPDIS = Help display status +; WR_HLPPAN = Active help panels +; WR_HLPROW = Override row for help panel +; WR_HLPCOL = Override column for help panel +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +READ_HELP PROC NEAR ;AN000; + PUSH BX ;AN000;save registers + PUSH DX ;AN000; + PUSH DI ;AN000; + PUSH QM_ACTIVEPAN ;AN000; +; +; Read specified help text from file into memory buffer +; + MOV HRD_OPT1,HRD_TEXT ;AN000;set the contextual option + ; + TEST WR_HLPDIS,HLP_INDX ;AN000;check if index status on + JE RH05 ;AN000; + ; + MOV HRD_OPT1,HRD_TOPIC ;AN000;set the indexed help option + ; +RH05: CALL HOOK_INT_24 ;AN000; + ; +RH06: PUSH HRD_BUFOFF ;AN000; + PUSH HRD_BUFLEN ;AN000;save help buffer length + ; + CALL PCHLPRD_CALL ;AN005;GHG call help read routine + JNC RH07 ;AN006;JW + ; + POP HRD_BUFLEN ;AN006;JW restore help buffer length + POP HRD_BUFOFF ;AN006;JW + MOV BX,ERR_INS_INSTALL ;AN060;JW + MOV CX,E_RETURN ;AN000; + CALL HANDLE_ERROR_CALL ;AN000; + JNC RH06 ;AN000; + CLEAR_SCREEN2 ;AN000; + JMP EXIT_SELECT ;AN000; + ; +RH07: POP HRD_BUFLEN ;AN000;restore help buffer length + POP HRD_BUFOFF ;AN000; + CALL RESTORE_INT_24 ;AN006;JW +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Handle error for help text not found +; +; Perform WORD WRAP on help buffer... +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + PUSH HRD_TEXTSEG ;AN000;GHG + POP WWP_SRCTXTSEG ;AN000;GHG + ;GHG + PUSH HRD_TEXTOFF ;AN000;GHG + POP WWP_SRCTXTOFF ;AN000;GHG + ;GHG + PUSH HRD_TEXTLEN ;AN000;GHG + POP WWP_SRCTXTLEN ;AN000;GHG + ;GHG + PUSH WR_MAXHELPSZ ;AN000;GHG + POP WWP_SRCBUFLEN ;AN000;GHG + ;GHG + PUSH ES ;AN000;GHG + PUSH DI ;AN000;GHG + MOV BX,WR_SCBCONT ;AN000;GHG get help scroll ID + CALL GET_SCB ;AN000;GHG ES:DI points to SCB + MOV BX,ES:[DI]+SCB_WIDTH ;AN000;GHG calculate number of help text + MOV WWP_WIDTH,BX ;AN000;GHG + POP DI ;AN000;GHG + POP ES ;AN000;GHG + ;GHG + ;GHG + XOR AX,AX ;AN000;GHG + MOV WWP_NUMLINES,AX ;AN000;GHG + MOV WWP_ERROR,AX ;AN000;GHG + MOV WWP_OPT1,WWP_LEFTJUST+WWP_HYPHEN+WWP_SRCBUFFER ;AN000;GHG + ;GHG + CALL PCWWRAP_CALL ;AN000;GHG +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Determine position and add help panel to parent display queue +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + MOV QM_OPT1,QM_PUSHPQU ;AN000;push parent queue + OR QM_OPT1,QM_PUSHCQU ;AN000;push child queue + CALL PCDISPQ_CALL ;AN000;update display queue + + TEST WR_HLPOPT,HLP_OVER ;AN000;check for help panel position + JE RH10 ;AN000; override + + PUSH WR_HLPCOL ;AN000;set override + POP QM_COLUMOVER ;AN000; + + PUSH WR_HLPROW ;AN000;set override + POP QM_ROWOVER ;AN000; + +RH10: MOV QM_OPT1,QM_RVMCHD ;AN000;remove child panel + MOV AX,WR_PCBENTR ;AN000;Enter panel + MOV QM_ID,AX ;AN000;parent PCB number + CALL PCDISPQ_CALL ;AN000;update display queue + + MOV AX,WR_PCBQUIT ;AN000;Quit panel + MOV QM_ID,AX ;AN000;parent PCB number + CALL PCDISPQ_CALL ;AN000;update display queue + + MOV QM_OPT1,QM_PUSHPAN ;AN000;add help panel + OR QM_OPT2,QM_BREAKON ;AN000;break on + MOV BX,WR_PCBHPAN ;AN000; + MOV QM_ID,BX ;AN000;get help panel number + MOV QM_ACTIVEPAN,BX ;AN000;make help panel active + CALL PCDISPQ_CALL ;AN000;update display queue + + MOV QM_OPT2,0 ;AN000;set options off + MOV QM_ROWOVER,0 ;AN000;deactivate overrides + MOV QM_COLUMOVER,0 ;AN000; +; +; Check if help panel's children are active and add to display queue +; + MOV QM_OPT1,QM_PUSHCHD ;AN000;add child panels option + + MOV BX,WR_PCBQUIT ;AN000;Esc=Quit + MOV QM_ID,BX ;AN000;get help panel number + CALL PCDISPQ_CALL ;AN000;update display queue + + TEST WR_HLPPAN,HLP_CONT ;AN000;check if contextual help active + JE RH15 ;AN000; + + MOV BX,WR_PCBHELP ;AN000;F1=Help panel + MOV QM_ID,BX ;AN000;get help panel number + CALL PCDISPQ_CALL ;AN000;update display queue + +RH15: TEST WR_HLPPAN,HLP_HELP ;AN000;check if help-on-help active + JE RH20 ;AN000; + + MOV BX,WR_PCBHELP ;AN000;F1=Help panel + MOV QM_ID,BX ;AN000;get help panel number + CALL PCDISPQ_CALL ;AN000;update display queue + +RH20: TEST WR_HLPPAN,HLP_INDX ;AN000;check if help index active + JE RH30 ;AN000; + + MOV BX,WR_PCBINDX ;AN000;F5=Index panel + MOV QM_ID,BX ;AN000;get help panel number + CALL PCDISPQ_CALL ;AN000;update display queue + +RH30: TEST WR_HLPPAN,HLP_KEYS ;AN000;check if help keys active + JE RH40 ;AN000; + + MOV BX,WR_PCBKEYS ;AN000; + MOV QM_ID,BX ;AN000;get help panel number + CALL PCDISPQ_CALL ;AN000;update display queue +; +; Locate help panel PCB data and initialize common data +; +RH40: MOV BX,WR_PCBHPAN ;AN000;get help panel ID + CALL GET_PCB ;AN000;ES:DI points to PCB + + PUSH ES:[DI]+PCB_UROW ;AN000;get help panel row + PUSH ES:[DI]+PCB_UCOL ;AN000;get help panel column +; +; Initialize for indexed form of help +; + TEST WR_HLPDIS,HLP_INDX ;AN000;check is index help status is on + JE RH50 ;AN000; + + LEA AX,WR_REFBUF ;AN000;get address of refresh table + MOV WR_REFOFF,AX ;AN000; + + LEA AX,WR_REFBUF ;AN000;get address of refresh table + MOV WR_REFOFF,AX ;AN000; + + MOV QM_OPT1,QM_PUSHCHD ;AN000;push child + MOV AX,WR_PCBENTR ;AN000;Enter panel + MOV QM_ID,AX ;AN000;parent PCB number + CALL PCDISPQ_CALL ;AN000;update display queue + + MOV BX,WR_SCBINDX ;AN000;get help scroll ID + CALL GET_SCB ;AN000;ES:DI points to SCB + + POP ES:[DI]+SCB_RELCOL ;AN000;set panel's relative column + POP ES:[DI]+SCB_RELROW ;AN000;set panel's relative row + + MOV ES:[DI]+SCB_TOPELE,1 ;AN000;set top element + MOV ES:[DI]+SCB_CURELE,1 ;AN000;set current line + MOV ES:[DI]+SCB_CURCOL,1 ;AN000;display offset into opt strings + + ; + ; adjust scrolling field width to be contained within panel + ; + + MOV AX,HRD_TOPICLEN ;AN000;get topic length + MOV ES:[DI]+SCB_OASLEN,AX ;AN000;fixed string length + MOV ES:[DI]+SCB_NUMCOL,AX ;AN000;maximum number of cols to scroll + + ; + ; adjust scrolling field number of display lines to be + ; contained within panel + ; + + PUSH HRD_TOPICNUM ;AN000;set number of elements + POP ES:[DI]+SCB_NUMELE ;AN000; + + MOV AX,HRD_TOPICSEG ;AN000;set segment of topic vector + MOV ES:[DI]+SCB_OAPSEG,AX ;AN000; + MOV ES:[DI]+SCB_OASSEG,AX ;AN000;set option array string segment + + PUSH HRD_TOPICOFF ;AN000;set offset of topic vector + POP ES:[DI]+SCB_OAPOFF ;AN000; + + JMP RHEXIT ;AN000;index initialized +; +; Initialize for contextual forms of help (cont, help, and keys) +; +RH50: LEA AX,WR_REFBUF ;AN000;get address of refresh table + MOV WR_REFOFF,AX ;AN000; +; + MOV BX,WR_SCBCONT ;AN000;get help scroll ID + CALL GET_SCB ;AN000;ES:DI points to SCB +; + POP ES:[DI]+SCB_RELCOL ;AN000;set panel's relative column + POP ES:[DI]+SCB_RELROW ;AN000;set panel's relative row +; + MOV ES:[DI]+SCB_TOPELE,1 ;AN000;GHG set top element + MOV ES:[DI]+SCB_CURELE,1 ;AN000;GHG set current line + MOV ES:[DI]+SCB_CURCOL,1 ;AN000;display offset into opt strings +; + MOV AX,WWP_NUMLINES ;AN000;GHG Use WordWrap # lines + DEC AX ;AN000;GHG + MOV ES:[DI]+SCB_NUMELE,AX ;AN000;initialize number of elements + + PUSH HRD_TEXTSEG ;AN000;set segment of help text + POP ES:[DI]+SCB_OAPSEG ;AN000; + + PUSH HRD_TEXTOFF ;AN000;set offset of help text + POP ES:[DI]+SCB_OAPOFF ;AN000; + MOV BX,ES:[DI]+SCB_WIDTH ;AN000;GHG SKIP OVER FIRST ELEMENT + ADD ES:[DI]+SCB_OAPOFF,BX ;AN000;GHG + +RHEXIT: POP QM_ACTIVEPAN ;AN000;restore current active panel + POP DI ;AN000;restore registers and exit + POP DX ;AN000; + POP BX ;AN000; + RET ;AN000; +READ_HELP ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PROCESS_HELP +; +; Process Help Panel and Text: +; o Update display to make help panel active +; o Configure proper return keys +; o Process scrolling of help text until exit key pressed +; +; Entry: WR_PCBHPAN = Help panel ID +; WR_SCBCONT = Scroll ID for context forms of help +; WR_SCBINDX = Scroll ID for indexed forms of help +; +; Exit: AX = Exit keystroke pressed +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PROCESS_HELP PROC NEAR ;AN000; + PUSH BX ;AN000;save registers + PUSH DI ;AN000; + PUSH ES ;AN000; + PUSH WR_DRETSEG ;AN000;save dynamic return key vars + PUSH WR_DRETOFF ;AN000; + PUSH WR_DRETLEN ;AN000; + PUSH QM_ACTIVEPAN ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Refresh display with help panel +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + PUSH WR_PCBHPAN ;AN000;set the help panel as active + POP QM_ACTIVEPAN ;AN000; + ; + MOV QM_OPT1,0 ;AN000;make help panel active panel + CALL PCDISPQ_CALL ;AN000; and update the return keys + ; + MOV AX,1 ;AN000;set break option on + CALL PCPANEL_CALL ;AN000;refresh display +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Locate proper scroll SCB for help form +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + MOV BX,WR_SCBCONT ;AN000;set for contextual help form + ; + TEST WR_HLPDIS,HLP_INDX ;AN000;check if indexed help status on + JE PH10 ;AN000; + ; + MOV BX,WR_SCBINDX ;AN000;set for indexed help form + ; +PH10: CALL INIT_HELP_TITLE ;AN000;** GG + CALL GET_SCB ;AN000;loads PCSLCTP vars with field +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Build return string of keystrokes and process help +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + LEA AX,WR_RETHLPBUF ;AN000;set help dynamic return keys + MOV WR_DRETOFF,AX ;AN000; + ; + MOV AX,WR_RETHLPLEN ;AN000; + MOV WR_DRETLEN,AX ;AN000; + ; + MOV AX,DATA ;AN000; + MOV WR_DRETSEG,AX ;AN000; + ; + CALL SET_RETKEYS ;AN000;create complete return string + ; + PUSH WR_CRETSEG ;AN000;initialize SCB with complete + POP ES:[DI]+SCB_RLSEG ;AN000; return string information + ; + PUSH WR_CRETOFF ;AN000; + POP ES:[DI]+SCB_RLOFF ;AN000; + ; + PUSH WR_CRETLEN ;AN000; + POP ES:[DI]+SCB_RLLEN ;AN000; + ; + CALL PCSLCTP_CALL ;AN000;process help text until exit + ; + MOV AX,ES:[DI]+SCB_KS ;AN000;get keystroke from PCSLCTP + ; + TEST WR_HLPDIS,HLP_INDX ;AN000;check if index help status is on + JE PHEXIT ;AN000; + ; + CMP AX,WR_KEYSELT ;AN000;check if select key pressed to + JNE PHEXIT ;AN000; select desired topic + ; + MOV BX,ES:[DI]+SCB_CURELE;AN000;get current selected element + MOV WR_HCBCONT,BX ;AN000;return new contextual help number + ; selected from the help index + MOV AX,WR_KEYHELP ;AN000;return contextual help key requst + ; instead of enter key +PHEXIT: POP QM_ACTIVEPAN ;AN000;restore current active panel + POP WR_DRETLEN ;AN000;restore return key vars + POP WR_DRETOFF ;AN000; + POP WR_DRETSEG ;AN000; + POP ES ;AN000;restore registers and exit + POP DI ;AN000; + POP BX ;AN000; + RET ;AN000; +PROCESS_HELP ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; INITIALIZE_HELP_TITLE +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INIT_HELP_TITLE PROC NEAR ;AN000; + PUSHH ;AN000; + ; + MOV BX,WR_PCBHPAN ;AN000;get help panel ID + CALL GET_PCB ;AN000;ES:DI points to PCB + ; + PUSH ES:[DI]+PCB_UROW ;AN000;get help panel row + PUSH ES:[DI]+PCB_UCOL ;AN000;get help panel column + ; + MOV BX,SCR_TITLE_HLP ;AN000; + MOV WR_SCBID,BX ;AN000; + CALL GET_SCB ;AN000; + ; + POP ES:[DI]+SCB_RELCOL ;AN000; + POP ES:[DI]+SCB_RELROW ;AN000; + ; + PUSH HRD_TEXTSEG ;AN000; + POP ES:[DI]+SCB_OAPSEG ;AN000; + ; + PUSH HRD_TEXTOFF ;AN000; + POP ES:[DI]+SCB_OAPOFF ;AN000; + ; + PUSH ES:[DI]+SCB_OPT1 ;AN000; + OR ES:[DI]+SCB_OPT1,SCB_RD ;AN000; + CALL PCSLCTP_CALL ;AN000;display scroll field + POP ES:[DI]+SCB_OPT1 ;AN000; + ; + POPP ;AN000; + RET ;AN000; +INIT_HELP_TITLE ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; REMOVE_HELP +; +; Remove Help Panel: +; +; o Restore original parent and child display queues; thereby, +; removing help panels +; +; o Exit without updating display +; +; Entry: WR_KEYHELP = Help-on-help keystroke (F1=Help) +; +; Exit: WR_HLPDIS = Help status off +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +REMOVE_HELP PROC NEAR ;AN000; + PUSH BX ;AN000;save registers + PUSH DI ;AN000; +; +; Restore original parent and child queues +; + MOV QM_OPT1,QM_POPPQU ;AN000;restore parent queue + OR QM_OPT1,QM_POPCQU ;AN000;restore child queue + CALL PCDISPQ_CALL ;AN000;update display queue +; +; Reset variables for exit +; + TEST WR_HLPDIS,HLP_CONT ;AN000;check if contextual help + JE RM20 ;AN000; already on, no set status off + + CMP AX,WR_KEYHELP ;AN000;check if help on help request + JE RMEXIT ;AN000; + +RM20: MOV WR_HLPDIS,0 ;AN000;help panels not on +; +; Exit +; +RMEXIT: POP DI ;AN000;restore registers and exit + POP BX ;AN000; + RET ;AN000; +REMOVE_HELP ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; GET_PCB +; +; Get Panel Control Block information for child or parent panel. : +; +; Entry: BX = Number of PCB vector desired. +; +; Exit: ES = Segment of desired PCB. +; DI = Offset of desired PCB. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +GET_PCB PROC NEAR ;AN000; + PUSH AX ;AN000; + PUSH BX ;AN000; + PUSH CX ;AN000; + PUSH DX ;AN000;GHG +; +; read panel control block vector to obtain PCB address +; + PUSH QM_PCBVECSEG ;AN000;get beginning PCB vector address + POP ES ;AN000; + PUSH QM_PCBVECOFF ;AN000; + POP DI ;AN000; + + DEC BX ;AN000;make zero based + MOV AX,VECSEGLEN ;AN000;multiply PCB element length by + ADD AX,VECOFFLEN ;AN000; desired vector number in BX + MUL BX ;AN000; to determine offset into PCB vec + ADD DI,AX ;AN000;add offset inside table + MOV BX,ES:[DI] ;AN000;get actual PCB segment + MOV CX,ES:[DI]+VECSEGLEN ;AN000;point past PCB seg to get PCB off + + MOV ES,BX ;AN000;set ES:DI to panel's actual + MOV DI,CX ;AN000; PCB address + + POP DX ;AN000;GHG + POP CX ;AN000; + POP BX ;AN000; + POP AX ;AN000; + + RET ;AN000; +GET_PCB ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; GET_SCB +; +; Get Scroll Field Control Block information. +; +; Entry: BX = Number of SCB vector desired. +; +; Exit: ES:DI = Address of desired SCB +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +GET_SCB PROC NEAR ;AN000; +; + PUSH AX ;AN000; + PUSH BX ;AN000; + PUSH CX ;AN000; + PUSH DX ;AN000;GHG +; +; read scroll control block vector to obtain SCB address +; + PUSH SRD_SCBVECSEG ;AN000;get beginning SCB vector address + POP ES ;AN000; + PUSH SRD_SCBVECOFF ;AN000; + POP DI ;AN000; +; + DEC BX ;AN000;make zero based + MOV AX,VECSEGLEN ;AN000;multiply SCB element length by + ADD AX,VECOFFLEN ;AN000; desired vector number in BX + MUL BX ;AN000; to determine offset into SCB vec + ADD DI,AX ;AN000;add offset inside table + MOV BX,ES:[DI] ;AN000;get actual SCB segment + MOV CX,ES:[DI]+VECSEGLEN ;AN000;point past SCB seg to get SCB off +; + MOV ES,BX ;AN000;set ES:DI to scroll's actual + MOV DI,CX ;AN000; SCB address +; + POP DX ;AN000;GHG + POP CX ;AN000; + POP BX ;AN000; + POP AX ;AN000; +; + RET ;AN000; +GET_SCB ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; GET_ICB +; +; Get Input Control Block information. +; +; Entry: BX = Number of ICB vector desired. +; +; Exit: ES:DI = Address of ICB +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GET_ICB PROC NEAR ;AN000; + PUSH AX ;AN000; + PUSH BX ;AN000; + PUSH CX ;AN000; + PUSH DX ;AN000;GHG +; +; read input control block vector to obtain ICB address +; + PUSH WR_ICBVECSEG ;AN000;get beginning ICB vector address + POP ES ;AN000; + PUSH WR_ICBVECOFF ;AN000; + POP DI ;AN000; + + DEC BX ;AN000;make zero based + MOV AX,VECSEGLEN ;AN000;multiply ICB element length by + ADD AX,VECOFFLEN ;AN000; desired vector number in BX + MUL BX ;AN000; to determine offset into ICB vec + ADD DI,AX ;AN000;add offset inside table + MOV BX,ES:[DI] ;AN000;get actual ICB segment + MOV CX,ES:[DI]+VECSEGLEN ;AN000;point past ICB seg to get ICB off + + MOV ES,BX ;AN000;set ES:DI to field's actual + MOV DI,CX ;AN000; ICB address + + POP DX ;AN000;GHG + POP CX ;AN000; + POP BX ;AN000; + POP AX ;AN000; + RET ;AN000; +GET_ICB ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; REFRESH_FLDS +; +; Refresh specified input and scrolling fields in the logical video : +; buffer during screen build. +; +; Format = DW Panel control block number +; DW Number of fields in this record +; DW Object type ID +; DW Field ID +; +; DW Object type ID +; DW Field ID +; +; Entry: WR_REFNUM = Number of PCB entries +; WR_REFOFF = Offset of table +; WR_REFSEG = Segment of table +; +; PM_PANBRKID = Panel PCB number to refresh +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +REFRESH_FLDS PROC NEAR ;AN000; + PUSH AX ;AN000;save registers + PUSH BX ;AN000; + PUSH CX ;AN000; + PUSH DX ;AN000; + PUSH ES ;AN000; + PUSH DI ;AN000; +; +; Initialize for table search +; + MOV CX,WR_REFNUM ;AN000;get number of refresh table recs + CMP CX,0 ;AN000;check the number of PCB entries + JA RF10 ;AN000; + JMP RFEXIT ;AN000;no records, exit + +RF10: PUSH WR_REFOFF ;AN000;get address of refresh table + POP WR_REFCNT ;AN000; + + PUSH WR_REFSEG ;AN000; + POP ES ;AN000; +; +; Locate matching table and PCB break number +; +RF20: MOV DI,WR_REFCNT ;AN000;set beginning address of current + ; table record + + MOV AX,ES:[DI]+2 ;AN000;get number of fields in record + MOV BX,4 ;AN000;4 bytes per field entry * + MUL BX ;AN000; number of fields in this record + ADD WR_REFCNT,AX ;AN000; + 4 bytes for the number of + ADD WR_REFCNT,4 ;AN000; PCB bytes and the number of flds + + MOV BX,PM_PANBRKID ;AN000; + CMP BX,ES:[DI] ;AN000;check if PCB match to table rec + JE RF30 ;AN000; + + LOOP RF20 ;AN000;check next table record + JMP RFEXIT ;AN000;no match, exit +; +; Match found, refresh all fields +; +RF30: MOV CX,ES:[DI]+2 ;AN000;get number of fields + +RF40: ADD DI,4 ;AN000;point to field data + MOV AX,SCROLLOBJID ;AN000;check if scroll field + CMP AX,ES:[DI] ;AN000; + JNE RF50 ;AN000; + + MOV BX,ES:[DI]+2 ;AN000;get field ID + CALL REFRESH_SCB ;AN000;update logical video buffer + JMP RF60 ;AN000;get next field entry + +RF50: MOV AX,INPUTOBJID ;AN000;check if input field + CMP AX,ES:[DI] ;AN000; + JNE RF60 ;AN000; + + MOV BX,ES:[DI]+2 ;AN000;get field ID + CALL REFRESH_ICB ;AN000;update logical video buffer + +RF60: LOOP RF40 ;AN000;get next field in same record + +RFEXIT: POP DI ;AN000;restore registers + POP ES ;AN000; + POP DX ;AN000; + POP CX ;AN000; + POP BX ;AN000; + POP AX ;AN000; + + RET ;AN000; +REFRESH_FLDS ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; REFRESH_SCB +; +; Refresh scroll field in logic video buffer and exit. +; +; Entry: BX = Scroll ID field number +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +REFRESH_SCB PROC NEAR ;AN000; + PUSH ES ;AN000;save registers + PUSH DI ;AN000; + + CALL GET_SCB ;AN000;load SCB address + + PUSH ES:[DI]+SCB_OPT1 ;AN000;save options + PUSH ES:[DI]+SCB_OPT3 ;AN000; + + OR ES:[DI]+SCB_OPT1,SCB_RD ;AN000;set display and exit option + AND ES:[DI]+SCB_OPT1,NOT SCB_UKS;AN000; + OR ES:[DI]+SCB_OPT3,SCB_LVBOVR;AN000; + + PUSH PM_LVBOFF ;AN000;initialize logical video address + POP ES:[DI]+SCB_LVBOFF ;AN000; + + PUSH PM_LVBSEG ;AN000; + POP ES:[DI]+SCB_LVBSEG ;AN000; + + CALL PCSLCTP_CALL ;AN000;refresh logical video buffer + + POP ES:[DI]+SCB_OPT3 ;AN000;restore option + POP ES:[DI]+SCB_OPT1 ;AN000; + +RSEXIT: POP DI ;AN000;restore registers + POP ES ;AN000; + + RET ;AN000; +REFRESH_SCB ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; REFRESH_ICB +; +; Refresh input field in logic video buffer and exit. +; +; Entry: BX = Input ID field number +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +REFRESH_ICB PROC NEAR ;AN000; + PUSH AX ;AN000; + PUSH ES ;AN000;save registers + PUSH DI ;AN000; + PUSH IN_ICBID ;AN000; + ; + MOV IN_ICBID,BX ;AN000; + CALL GET_ICB ;AN000;load ICB address + ; + CMP ES:[DI]+ICB_FIELDLEN ,0;AN000; + CMP ES:[DI]+ICB_FIELDOFF ,0;AN000; + CMP ES:[DI]+ICB_FIELDSEG ,0;AN000; + CMP ES:[DI]+ICB_DEFLEN ,0;AN000; + CMP ES:[DI]+ICB_DEFOFF ,0;AN000; + CMP ES:[DI]+ICB_DEFSEG ,0;AN000; + + PUSH IN_OPT ;AN000; + PUSH ES:[DI]+ICB_OPT1 ;AN000; + OR ES:[DI]+ICB_OPT1,ICB_OUT;AN000; + OR IN_OPT,IN_LVBOV ;AN000; + ; + PUSH PM_LVBOFF ;AN000;initialize logical video address + POP IN_LVBOFF ;AN000; + ; + PUSH PM_LVBSEG ;AN000; + POP IN_LVBSEG ;AN000; + ; + CALL PCINPUT_CALL ;AN000; + ; + POP ES:[DI]+ICB_OPT1 ;AN000; + POP IN_OPT ;AN000; + CALL CURSOROFF ;AN000; + ; + POP IN_ICBID ;AN000; + POP DI ;AN000;restore registers + POP ES ;AN000; + POP AX ;AN000; + RET ;AN000; +REFRESH_ICB ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; CURSOROFF +; +; Deactivates cursor from display. +; +; Entry: None +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;; +CURSOROFF PROC NEAR ;AN000; + PUSH AX ;AN000;save registers + PUSH BX ;AN000; + PUSH CX ;AN000; + ; + MOV AH,3 ;AN000;function to get cursor info + MOV BH,0 ;AN000;page zero + INT 10H ;AN000; + OR CH,20H ;AN000;set bit 6 + MOV AH,1 ;AN000;function to set cursor + INT 10H ;AN000; + ; + POP CX ;AN000;restore registers + POP BX ;AN000; + POP AX ;AN000; + RET ;AN000; +CURSOROFF ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;; +; +; CURSORON +; +; Activates cursor display on screen. +; +; Entry: None +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CURSORON PROC NEAR ;AN000; + PUSH AX ;AN000;save registers + PUSH BX ;AN000; + PUSH CX ;AN000; + ; + MOV AH,3 ;AN000;function to get cursor info + MOV BH,0 ;AN000;page zero + INT 10H ;AN000; + AND CH,NOT 20H ;AN000;clear bit 6 + MOV AH,1 ;AN000;function to set cursor + INT 10H ;AN000; + ; + POP CX ;AN000;restore registers + POP BX ;AN000; + POP AX ;AN000; + ; + RET ;AN000; +CURSORON ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCINCHA_CALL +; +; Call to PCINCHA. +; +; Entry: PB initialized. +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCINCHA_CALL PROC NEAR ;AN000; + ; + CALL CLEAR_INBUFF ;AN088;SEH this call was moved and now replaced to exist both before and after call + ; + PUSH DS ;AN000;set segment + POP ES ;AN000; + PUSH DS ;AN000; + PUSH DI ;AN000;save registers + LEA DI,INC_OPT ;AN000;set DI to proper parameter block + ; for call +IF CASRM ;AN000; + MOV AH,00H ;AN000;make call to CAS-RM + MOV BX,INC_RN ;AN000;set CAS routine number + INT CASINT ;AN000;call routine +ELSE ;AN000; + CALL INCHA ;AN000; + CALL CLEAR_INBUFF ;AC083;SEH call moved to after call to INCHA in order to flush buffer ;AN059; +ENDIF ;AN000; + POP DI ;AN000;restore registers + POP DS ;AN000; + RET ;AN000; +PCINCHA_CALL ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCDISPQ_CALL +; +; Call to PCDISPQ. +; +; Entry: PB initialized. +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCDISPQ_CALL PROC NEAR ;AN000; + PUSH DS ;AN000;set segment + POP ES ;AN000; + PUSH DS ;AN000; + PUSH DI ;AN000;save registers + LEA DI,QM_OPT1 ;AN000;set DI to proper parameter block +IF CASRM ;AN000; + MOV AH,00H ;AN000;make call to CAS-RM + MOV BX,QM_RN ;AN000;set CAS routine number + INT CASINT ;AN000;call routine +ELSE ;AN000; + CALL DISPQ ;AN000; +ENDIF ;AN000; + POP DI ;AN000;restore registers + POP DS ;AN000; + RET ;AN000; +PCDISPQ_CALL ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANEL_CALL +; +; Initialize for call to PCPANEL including refresh of input and +; scroll fields in the logical video buffer before display. +; +; Entry: PB initialized. +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCPANEL_CALL PROC NEAR ;AN000; + PUSH QM_PANQUENUM ;AN000; + POP PM_PANQUENUM ;AN000;number of panels in parent queue + ; + PUSH QM_CHDQUENUM ;AN000; + POP PM_CHDQUENUM ;AN000;number panels in child queue + ; + PUSH QM_ACTIVEPAN ;AN000; + POP PM_ACTIVEPAN ;AN000;active parent panel number + ; + MOV BX,PM_DOA ;AN000;display child panels in active + OR BX,PM_DOV ;AN000;use child row, col, color overrid + OR BX,PM_DOQ ;AN000;display childs in active parent + OR BX,PM_CL ;AN000;initialize LVB to base char/attr + ; + CMP AX,1 ;AN000;check if break option is on + JNE PP05 ;AN000; + ; + CMP WR_REFIELDCNT,0 ;AN000;GHG + JNE PP06 ;AN000;GHG + XOR AX,AX ;AN000;GHG + JMP PP05 ;AN000;GHG + ; +PP06: OR BX,PM_BK ;AN000;set panel manager break option on + ; +PP05: MOV PM_OPT1,BX ;AN000;set options + MOV PM_PANPDQNUM,1 ;AN000;beg/ending parent PDQ number + MOV PM_PANBRKOFF,0 ;AN000;panel off in lvb of break panel + JMP PP20 ;AN000;begin update + ;set options to continue panel break +PP10: AND PM_OPT1,NOT PM_CL ;AN000;turn init LVB base char/attr off + ;do Actual PCPANEL call +PP20: PUSH DS ;AN000;set segment + POP ES ;AN000; + PUSH DS ;AN000; + PUSH DI ;AN000;save registers + LEA DI,PM_OPT1 ;AN000;set DI to proper parameter block +IF CASRM ;AN000; + MOV AH,00H ;AN000;make call to CAS-RM + MOV BX,PM_RN ;AN000;set CAS routine number + INT CASINT ;AN000;call routine +ELSE ;AN000; + CALL PANEL ;AN000; +ENDIF ;AN000; + POP DI ;AN000;restore registers + POP DS ;AN000; + ; + CMP AX,1 ;AN000;check if the break option is + JNE PPEXIT ;AN000; active + ; + MOV AX,PM_PANPDQNUM ;AN000;beg/ending parent PDQ number + DEC AX ;AN000;adjust for possible break option + ; on last panel in PDQ + CMP AX,PM_PANQUENUM ;AN000;check if all panels updated + JA PPEXIT ;AN000; when complete var is 1 greater + ; + CALL REFRESH_FLDS ;AN000;refresh fields in break panel + JMP PP10 ;AN000;continue to process panels +PPEXIT: RET ;AN000; +PCPANEL_CALL ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCMBEEP_CALL +; +; Call to PCMBEEP. +; +; Entry: PB initialized. +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCMBEEP_CALL PROC NEAR ;AN000; + PUSH DS ;AN000;set segment + POP ES ;AN000; + PUSH DS ;AN000; + PUSH DI ;AN000;save registers + LEA DI,MB_FREQUENCY ;AN000;set DI to proper parameter block +IF CASRM ;AN000; + MOV AH,00H ;AN000;make call to CAS-RM + MOV BX,MB_RN ;AN000;set CAS routine number + INT CASINT ;AN000;call routine +ELSE ;AN000; + CALL MBEEP ;AN000; +ENDIF ;AN000; + POP DI ;AN000;restore registers + POP DS ;AN000; + RET ;AN000; +PCMBEEP_CALL ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSLCTP_CALL +; +; Call to PCSCLTP. +; +; Entry: ES:DI = beginning address of PCSLCTP parameter block. +; +; Exit: None +; +; +; Initialize color index vector +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCSLCTP_CALL PROC NEAR ;AN000; + ; + CALL CLEAR_INBUFF ;AN059; + ; + PUSH PM_CCBVECNUM ;AN000;set color index number + POP ES:[DI]+SCB_CCBVECNUM;AN000; + + PUSH CRD_CCBVECOFF ;AN000;set color index offset + POP ES:[DI]+SCB_CCBVECOFF;AN000; + + PUSH CRD_CCBVECSEG ;AN000;set color index segment + POP ES:[DI]+SCB_CCBVECSEG;AN000; + + PUSH ES:[DI]+SCB_OPT1 ;AN000; + PUSH ES:[DI]+SCB_OPT2 ;AN000; + PUSH ES:[DI]+SCB_OPT3 ;AN000; + PUSH ES:[DI]+SCB_NUMLINE ;AN000; + AND ES:[DI]+SCB_OPT3,NOT SCB_NUMS;AN000; +IF CASRM ;AN000; + MOV AH,00H ;AN000;make call to CAS-RM + MOV BX,SCB_RN ;AN000;set CAS routine number + INT CASINT ;AN000;call slctopt +ELSE ;AN000; + CALL SLCTP ;AN000; +ENDIF ;AN000; + POP ES:[DI]+SCB_NUMLINE ;AN000; + POP ES:[DI]+SCB_OPT3 ;AN000; + POP ES:[DI]+SCB_OPT2 ;AN000; + POP ES:[DI]+SCB_OPT1 ;AN000; + RET ;AN000; +PCSLCTP_CALL ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCHLPRD_CALL +; +; Call to PCHLPRD. +; +; Entry: PB initialized. +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCHLPRD_CALL PROC NEAR ;AN000; + PUSH DS ;AN000;set segment + POP ES ;AN000; + PUSH DS ;AN000; + PUSH DI ;AN000;save registers + LEA DI,HRD_OPT1 ;;AN000;set DI to proper parameter block +IF CASRM ;AN000; + MOV AH,00H ;AN000;make call to CAS-RM + MOV BX,HRD_RN ;AN000;set CAS routine number + INT CASINT ;AN000;call routine +ELSE ;AN000; + CALL HLPRD ;AN000; +ENDIF ;AN000; + .IF < HRD_ERROR eq 0 > and;AN005;GHG + .IF < HRD_DOSERROR eq 0 > ;AN005;GHG + CLC ;AN005;GHG + .ELSE ;AN005;GHG + STC ;AN005;GHG + .ENDIF ;AN005;GHG + ; + POP DI ;AN000;restore registers + POP DS ;AN000; + RET ;AN000; +PCHLPRD_CALL ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCINSTR_CALL +; +; Call to PCINSTR. +; +; Entry: PB initialized. +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCINSTR_CALL PROC NEAR ;AN000; + PUSH DS ;AN000;set segment + POP ES ;AN000; + PUSH DS ;AN000; + PUSH DI ;AN000;save registers + LEA DI,INS_OPT ;;AN000;set DI to proper parameter block +IF CASRM ;AN000; + MOV AH,00H ;AN000;make call to CAS-RM + MOV BX,INS_RN ;AN000;set CAS routine number + INT CASINT ;AN000;call routine +ELSE ;AN000; + CALL INSTRN ;AN000; +ENDIF ;AN000; + POP DI ;AN000;restore registers + POP DS ;AN000; + RET ;AN000; +PCINSTR_CALL ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCINPUT_CALL +; +; Call to PCINPUT. +; +; Entry: PB initialized. +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCINPUT_CALL PROC NEAR ;AN000; + ; + CALL CLEAR_INBUFF ;AN059; + ; + PUSH DS ;AN000;set segment + POP ES ;AN000; + PUSH DS ;AN000; + PUSH DI ;AN000;save registers + LEA DI,IN_OPT ;AN000;set DI to proper parameter block +IF CASRM ;AN000; + MOV AH,00H ;AN000;make call to CAS-RM + MOV BX,IN_RN ;AN000;set CAS routine number + INT CASINT ;AN000;call slctopt +ELSE ;AN000; + CALL INPUT ;AN000; +ENDIF ;AN000; + POP DI ;AN000;restore registers + POP DS ;AN000; + RET ;AN000; +PCINPUT_CALL ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCGVIDO_CALL +; +; Call to PCGVIDO. +; +; Entry: PB initialized. +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCGVIDO_CALL PROC NEAR ;AN000; + PUSH DS ;AN000;set segment + POP ES ;AN000; + PUSH DS ;AN000; + PUSH DI ;AN000;save registers + LEA DI,GV_STAT1 ;AN000;set DI to proper parameter block +IF CASRM ;AN000; + MOV AH,00H ;AN000;make call to CAS-RM + MOV BX,GV_RN ;AN000;set CAS routine number + INT CASINT ;AN000;call routine +ELSE ;AN000; + CALL GVIDO ;AN000; +ENDIF ;AN000; + POP DI ;AN000;restore registers + POP DS ;AN000; + RET ;AN000; +PCGVIDO_CALL ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCWWRAP_CALL +; +; Call to PCWWRAP. +; +; Entry: PB initialized. +; +; Exit: None +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCWWRAP_CALL PROC NEAR ;AN000; + PUSH DS ;AN000;set segment + POP ES ;AN000; + PUSH DS ;AN000; + PUSH DI ;AN000;save registers + LEA DI,WWP_OPT1 ;AN000;set DI to proper parameter block +IF CASRM ;AN000; + MOV AH,00H ;AN000;make call to CAS-RM + MOV BX,PM_RN ;AN000;set CAS routine number + INT CASINT ;AN000;call slctopt +ELSE ;AN000; + CALL WWRAP ;AN000; +ENDIF ;AN000; + POP DI ;AN000;restore registers + POP DS ;AN000; + RET ;AN000; +PCWWRAP_CALL ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; INITIALIZE +; +; Initialize the DOS allocated buffer with data (color, panels +; scrolling fields) and reserve room for help, queue management +; and the logical video buffer. +; +; Entry: WR_DATA2LEN = Length of DOS allocated buffer +; WR_DATA2OFF = Offset of DOS allocated buffer +; WR_DATA2SEG = Segment of DOS allocated buffer +; +; Exit: CY=0 and WR_ERROR = 0, No error occurred, 1= error occurred +; WR_DATA2LEN = Amount of DOS allocated buffer remaining +; WR_DATA2OFF = New offset of DOS allocated buffer +; +; ELSE +; CY=1 and WR_ERROR = 1, Error occurred (WR_DATA2LEN/OFF are invalid) +; +; CY support added +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INITIALIZE PROC NEAR ;AN000; + ;AN000; + PUSH ES ;AN000; + PUSH DI ;AN000; + PUSH DS ;AN000; + PUSH SI ;AN000; + ;AN000; + MOV WR_ERROR,0 ;AN000;reset error inidicator + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Read Compressed Panel file +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + MOV DX,OFFSET CFILE ;AN024;filename to read , SELECT.DAT + XOR AL,AL ;AN024; + MOV AH,3DH ;AN024; + INT 21H ;AN024;open file + ;AN024; + MOV BX,AX ;AN024;get file handle + PUSH BX ;AN024;save it + XOR CX,CX ;AN024; + XOR DX,DX ;AN024; + MOV AL,2 ;AN024;move ptr to end of file + MOV AH,42H ;AN024;LSEEK + INT 21H ;AN024; + ;AN024; + PUSH AX ;AN024;save length + XOR CX,CX ;AN024;zero file offset + XOR DX,DX ;AN024; " + MOV AL,0 ;AN024;move ptr to start of file + MOV AH,42H ;AN024;LSEEK + INT 21H ;AN024; + POP BX ;AN024;restore length + PUSH BX ;AN024;save it again + SHR BX,1 ;AN024;convert to paragraph + SHR BX,1 ;AN024; + SHR BX,1 ;AN024; + SHR BX,1 ;AN024; + INC BX ;AN024;ensure enough room + MOV AX,BX ;AN024; + ;AN024; + POP CX ;AN024;restore length + POP BX ;AN024;restore file handle + + MOV DX,WR_DATA2SEG ;AN024;GS:DI = target + ADD DX,MAX_MEMPAR ;AN024; + SUB DX,AX ;AN024; + MOV DS,DX ;AN024;get segment of read buffer + XOR DX,DX ;AN024;get offset to read into + MOV AH,3FH ;AN024;read it + INT 21H ;AN024; + ;AN024; + MOV AH,3EH ;AN024;close it + INT 21H ;AN024; + ;AN024; + PUSH DS ;AN024;save source segment + MOV AX,DATA ;AN024; + MOV DS,AX ;AN024;get DATA segment + MOV AX,WR_DATA2SEG ;AN024;ES:DI = target + MOV ES,AX ;AN024; + MOV DI,WR_DATA2OFF ;AN024; + POP DS ;AN024;restore source segment + XOR SI,SI ;AN024;offset is zero + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Expand Panel file +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + MOV DX,0 ;AN024;initialize result string +EC1: CMP CX,0 ;AN024;any characters left? + JNE EC2 ;AN024;yes + JMP DONE1 ;AN024;no + ;AN024; +EC2: LODSB ;AN024;get character + DEC CX ;AN024;adjust character count + MOV BL,1 ;AN024;set default repeat + CMP AL,REPCHAR ;AN024;is it a repeat character + JNE EC4 ;AN024;no + ;AN024; + CMP CX,0 ;AN024;any characters left? + JNE EC2_4 ;AN024; + JMP DONE1 ;AN024;no + ;AN024; +EC2_4: LODSB ;AN024;get number of characters + DEC CX ;AN024;Adjust character count + CMP AL,REPCHAR ;AN024;is it still the repeat character + JNE EC2_1 ;AN024;no + JMP EC4 ;AN024; + ;AN024; +EC2_1: CMP AL,1 ;AN024;code ? + JNE EC2_2 ;AN024;no + ;AN024; + MOV AL,13 ;AN024; + JMP EC4 ;AN024; + ;AN024; +EC2_2: CMP AL,2 ;AN024;code ? + JNE EC3 ;AN024;no + ;AN024; + MOV AL,26 ;AN024; + JMP EC4 ;AN024; + ;AN024; +EC3: MOV BL,AL ;AN024;save number of repeats + ;AN024; + CMP CX,0 ;AN024;any characters left? + JNE EC3_6 ;AN024; + JMP DONE1 ;AN024;no + ;AN024; +EC3_6: LODSB ;AN024;get actual character + DEC CX ;AN024;adjust character count + CMP AL,REPCHAR ;AN024;coded character? + JNE EC4 ;AN024;no + ;AN024; + CMP CX,0 ;AN024;any characters left? + JNE EC3_8 ;AN024; + JMP DONE1 ;AN024;no + ;AN024; +EC3_8: LODSB ;AN024;yes + DEC CX ;AN024;adjust character count + CMP AL,REPCHAR ;AN024;coded repchar? + JE EC4 ;AN024;yes + ;AN024; + CMP AL,1 ;AN024;coded ? + JNE EC3_1 ;AN024;no + ;AN024; + MOV AL,13 ;AN024;yes + JMP EC4 ;AN024; + ;AN024; +EC3_1: CMP AL,2 ;AN024;coded ? + JNE EC3_2 ;AN024;no + ;AN024; + MOV AL,26 ;AN024; + JMP EC4 ;AN024; + ;AN024; +EC3_2: INC CX ;AN024;unknown, restore + DEC SI ;AN024; + MOV AL,REPCHAR ;AN024; + ;AN024; +EC4: ADD DL,BL ;AN024;adjust length + ADC DH,0 ;AN024; + ;AN024; +EC7: PUSH CX ;AN024;save CX + XOR CX,CX ;AN024;zero CX + MOV CL,BL ;AN024;set repeat number + ;AN024; +EC8: REP STOSB ;AN024;store char + POP CX ;AN024;recover CX + JMP EC1 ;AN024; + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Finished expanding panel file +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; +DONE1: ;AN024; + MOV AX,DATA ;AN024;restore DATA segment + MOV DS,AX ;AN024; + ;AN024; + MOV DI,WR_DATA2OFF ;AN024;restore pointer to start + ADD DX,16 ;AN024;add paragraph to expanded length + ADD WR_DATA2OFF,DX ;AN024;save new available offset + ;AN024; + MOV AX,WR_DATA2LEN ;AN024;calculate remaining buffer space + SUB AX,DX ;AN024; from required space + MOV WR_DATA2LEN,AX ;AN024;set remaining space + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; initialize Color Table information +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + .IF < GV_VIDMODE eq 7 > or ;AN000; + .IF < ACTIVE eq LCD > ;AN000; + .THEN ;AN000; + MOV AX,ES:[DI].MONTBL ;AN000; + MOV BX,ES:[DI].NMONTBL ;AN000; + .ELSE ;AN000; + MOV AX,ES:[DI].COLTBL ;AN000; + MOV BX,ES:[DI].NCOLTBL ;AN000; + .ENDIF ;AN000; + ;AN000; + MOV PM_CCBVECNUM,BX ;AN000; + MOV PM_CCBVECOFF,AX ;AN000;set color index offset to PCPANEL + MOV CRD_CCBVECOFF,AX ;AN000;set color index offset to PCPANEL + MOV AX,ES ;AN000;set color index segment to + MOV PM_CCBVECSEG,AX ;AN000; PCPANEL + MOV CRD_CCBVECSEG,AX ;AN000; PCPANEL + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; initialize PCDISPQ information +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + MOV AX,ES:[DI].NPCBS ;AN000; + MOV QM_PCBVECNUM,AX ;AN000;number of PCB elements in vector + ;AN000; + MOV AX,ES:[DI].PCBS ;AN000; + MOV QM_PCBVECOFF,AX ;AN000;offset of PCB vector + ;AN000; + MOV AX,ES ;AN000; + MOV QM_PCBVECSEG,AX ;AN000;segment of PCB vector + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; initialize PCPANEL with PCDISPQ and PCPANRD information +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + MOV SI,ES:[DI].PCBS ;AN000;offset of PCB vector read from + MOV PM_PCBVECOFF,SI ;AN000; disk + ;AN000; + MOV AX,ES ;AN000;segment of PCB vector read from + MOV PM_PCBVECSEG,AX ;AN000; disk + ;AN000; + MOV CX,ES:[DI].NPCBS ;AN000;number of PCB vectors read from + MOV PM_PCBVECNUM,CX ;AN000; disk + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; add segment address to PCBs +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + ADD SI,2 ;AN000;move to offset +I_PCB_SEG: ;AN000; + MOV BX,ES:[SI] ;AN000; + MOV ES:[BX].PCB_EXPANDSEG,AX ;AN000; + MOV ES:[BX].PCB_CHILDSEG,AX ;AN000; + ADD SI,4 ;AN000; + LOOP I_PCB_SEG ;AN000; + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; add segment address to PCB vectors +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + MOV CX,ES:[DI].NPCBS ;AN000;number of PCB vectors + MOV SI,ES:[DI].PCBS ;AN000;offset of PCB vectors +I_PCBVEC_SEG: ;AN000; + MOV ES:[SI],AX ;AN000; + ADD SI,4 ;AN000; + LOOP I_PCBVEC_SEG ;AN000; + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; initialize SCB vector table pointer +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + MOV AX,ES ;AN000; + MOV SRD_SCBVECSEG,AX ;AN000;get beginning SCB vector address + MOV SI,ES:[DI].SCBS ;AN000; + MOV SRD_SCBVECOFF,SI ;AN000; + MOV CX,ES:[DI].NSCBS ;AN000;number of SCB vectors + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; add segment address to SCBs +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + ADD SI,2 ;AN000;move to offset + ;AN000; +I_SCB_SEG: ;AN000; + MOV BX,ES:[SI] ;AN000; + MOV ES:[BX].SCB_UASEG,AX ;AN000; + MOV ES:[BX].SCB_DASEG,AX ;AN000; + MOV ES:[BX].SCB_PUSEG,AX ;AN000; + MOV ES:[BX].SCB_PDSEG,AX ;AN000; + MOV ES:[BX].SCB_PISEG,AX ;AN000; + MOV ES:[BX].SCB_AISEG,AX ;AN000; + MOV ES:[BX].SCB_CISEG,AX ;AN000; + MOV ES:[BX].SCB_UISEG,AX ;AN000; + MOV ES:[BX].SCB_DISEG,AX ;AN000; + MOV ES:[BX].SCB_INDEXSEG,AX ;AN000; + MOV ES:[BX].SCB_SELSEG,AX ;AN000; + MOV ES:[BX].SCB_OAPSEG,AX ;AN000; + MOV ES:[BX].SCB_OASSEG,AX ;AN000; + ADD SI,4 ;AN000; + LOOP I_SCB_SEG ;AN000; + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; add segment address to SCB vectors +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + MOV CX,ES:[DI].NSCBS ;AN000;number of SCB vectors + MOV SI,ES:[DI].SCBS ;AN000;offset of SCB vectors +I_SCBVEC_SEG: ;AN000; + MOV ES:[SI],AX ;AN000; + ADD SI,4 ;AN000; + LOOP I_SCBVEC_SEG ;AN000; + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Init 4KB for logical video buffer for PCPANEL +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + ;AN000; + MOV AX,GV_SCRWIDTH ;AN000; + MOV PM_LVBWIDTH,AX ;AN000;width of log vid buf in bytes + ;AN000; + MOV AX,GV_SCRLEN ;AN000; + MOV PM_LVBLEN,AX ;AN000;number bytes in logical video + ;AN000; + PUSH WR_LVBOFF ;AN000; + POP PM_LVBOFF ;AN000;offset of logical video buffer + ;AN000; + PUSH WR_LVBSEG ;AN000;set the allocated segment + POP PM_LVBSEG ;AN000; + ;AN000; + MOV AX,WR_LVBLEN ;AN000;calculate remaining buffer + SUB AX,GV_SCRLEN ;AN000; + MOV WR_LVBLEN,AX ;AN000;set remaining space + ;AN000; + MOV AX,GV_SCRLEN ;AN000; + ADD WR_LVBOFF,AX ;AN000;set new free buffer offset + ;AN000; + MOV LVB_INITED,TRUE ;AN000;LVB always remains + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCDISPQ buffer initialization option +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + MOV QM_OPT1,QM_INIT ;AN000;Initialize working buffer + ;AN000; + PUSH WR_MAXCHDQUE ;AN000; + POP QM_MAXCHDQUE ;AN000;max # of child queues to save + ;AN000; + PUSH WR_MAXPANQUE ;AN000; + POP QM_MAXPANQUE ;AN000;max # of panel queues to save + ;AN000; + PUSH WR_MAXNUMCHD ;AN000; + POP QM_MAXNUMCHD ;AN000;max # of parent panels queued + ;AN000; + PUSH WR_MAXNUMPAN ;AN000; + POP QM_MAXNUMPAN ;AN000;max # of child panels queued + ;AN000; + PUSH WR_LVBLEN ;AN000; + POP QM_BUFLEN ;AN000;length of avail buffer + ;AN000; + PUSH WR_LVBOFF ;AN000; + POP QM_BUFOFF ;AN000;offset of buffer + ;AN000; + PUSH WR_LVBSEG ;AN000; + POP QM_BUFSEG ;AN000;segment of buffer + ;AN000; + CALL PCDISPQ_CALL ;AN000;update display queue + ;AN000; + MOV AX,WR_LVBLEN ;AN000;calculate remaining buffer space + SUB AX,QM_BUFLEN ;AN000; from required space + MOV WR_LVBLEN,AX ;AN000;set remaining space + ;AN000; + MOV AX,QM_BUFLEN ;AN000;add returned buffer size + ADD WR_LVBOFF,AX ;AN000;set new free buffer offset + ;AN000; + PUSH QM_PANQUEOFF ;AN000;offset address of parent queue + POP PM_PANQUEOFF ;AN000;offset address of parent queue + ;AN000; + PUSH QM_PANQUESEG ;AN000;segment address of parent queue + POP PM_PANQUESEG ;AN000;segment address of parent queue + ;AN000; + PUSH QM_CHDQUEOFF ;AN000;offset of child queue + POP PM_CHDQUEOFF ;AN000;offset of child queue + ;AN000; + PUSH QM_CHDQUESEG ;AN000;segment of child queue + POP PM_CHDQUESEG ;AN000;segment of child queue + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Reserve buffer for completed return key buffer +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + PUSH WR_MAXRETKSZ ;AN000;maximum number of bytes in return + POP WR_CRETLEN ;AN000; buffer + ;AN000; + PUSH WR_LVBOFF ;AN000;offset of completed return buffer + POP WR_CRETOFF ;AN000; + ;AN000; + PUSH WR_LVBSEG ;AN000;segment of completed return + POP WR_CRETSEG ;AN000; buffer + ;AN000; + MOV AX,WR_LVBLEN ;AN000;calculate remaining buffer space + SUB AX,WR_MAXRETKSZ ;AN000; + MOV WR_LVBLEN,AX ;AN000;set remaining space + ;AN000; + MOV AX,WR_MAXRETKSZ ;AN000; + ADD WR_LVBOFF,AX ;AN000;set new free buffer offset + CLC ;AN000;GHG + JMP IEXIT ;AN000; + ;AN000; +I110: MOV WR_ERROR,1 ;AN000;set error indicator + STC ;AN000;GHG +IEXIT: ;AN000;exit + POP SI ;AN000; + POP DS ;AN000; + POP DI ;AN000; + POP ES ;AN000; + RET ;AN000; +INITIALIZE ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; INSERT_DISK_ROUTINE: Prompts user for insertion of disk into A: drive +; +; INPUT: DISK_PANEL - Panel number to be displayed +; SEARCH_FILE - File to search for on diskette +; +; OUTPUT: none +; +; OPERATION: Panel macros are called to display the panel and search +; for the file. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PUBLIC INSERT_DISK_ROUTINE ;AN000; +INSERT_DISK_ROUTINE PROC NEAR ;AN000; + ; + .REPEAT ;AN000; + MOV AX,PAN_INST_PROMPT ;AN000; + CALL INIT_PQUEUE_CALL ;AN000; + MOV AX,DISK_PANEL ;AN000; + CALL PREPARE_PANEL_CALL ;AN000; + MOV AX,PAN_HBAR ;AN000; + CALL PREPARE_PANEL_CALL ;AN000; + CALL HANDLE_CHILDREN ;AN000; + CALL DISPLAY_PANEL_CALL ;AN000; + ; + MOV CX,FK_ENT_LEN ;AN000; + LEA DX,FK_ENT ;AN000; + CALL GET_FUNCTION_CALL ;AN000; + ; + MOV DI, SEARCH_FILE ;AN000; + MOV CX, E_FILE_ATTR ;AN000; + CALL FIND_FILE_ROUTINE ;AN000; + .LEAVE < nc > ;AN000; + ; + MOV BX,ERR_DOS_DISK ;AN000; + MOV CX,E_RETURN ;AN000; + CALL HANDLE_ERROR_CALL ;AN000; + JNC CONTINUE ;AN000; + CLEAR_SCREEN2 ;AN000; + JMP EXIT_SELECT ;AN000; +CONTINUE: ;AN000; + .UNTIL ;AN000; + ; + RET ;AN000; +INSERT_DISK_ROUTINE ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Clear the input buffer +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CLEAR_INBUFF PROC NEAR ;AN059; +; ; +CI_1: MOV AH,0BH ;AN059; + INT 21H ;AN059; + CMP AL,0 ;AN059; + JE CI_2 ;AN059; + MOV AH,07H ;AN059; + INT 21H ;AN059; + JMP CI_1 ;AN059; + ; +CI_2: RET ;AN059; +CLEAR_INBUFF ENDP ;AN059; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +SELECT ENDS ;AN000; + END ;AN000; diff --git a/v4.0/src/SELECT/CASEXTRN.INC b/v4.0/src/SELECT/CASEXTRN.INC new file mode 100644 index 0000000..d728e32 --- /dev/null +++ b/v4.0/src/SELECT/CASEXTRN.INC @@ -0,0 +1,39 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + EXTRN GET_PCB:NEAR ;AN000; + EXTRN CURSORON:NEAR ;AN000; + EXTRN CURSOROFF:NEAR ;AN000; + EXTRN ADJUST_UP:NEAR ;AN000; + EXTRN INITIALIZE:NEAR ;AN000; + EXTRN ADJUST_DOWN:NEAR ;AN000; + EXTRN PCGVIDO_CALL:NEAR ;AN000; + EXTRN HANDLE_CHILDREN:NEAR ;AN000; + EXTRN INIT_STRING_CALL:NEAR ;AN000; + EXTRN INIT_PQUEUE_CALL:NEAR ;AN000; + EXTRN EXEC_SCROLL_CALL:NEAR ;AN000; + EXTRN INIT_SCROLL_CALL:NEAR ;AN000; + EXTRN GET_STRING_CALL:NEAR ;AN000; + EXTRN INIT_SCROLL_STATUS_CALL:NEAR ;AN000; + EXTRN PREPARE_PANEL_CALL:NEAR ;AN000; + EXTRN DISPLAY_PANEL_CALL:NEAR ;AN000; + EXTRN GET_FUNCTION_CALL:NEAR ;AN000; + EXTRN TOGGLE_SUPPORT_CALL:NEAR ;AN000; + EXTRN CHECK_MIN_MAX:NEAR ;AN000; + EXTRN CONVERT_NUMERIC:NEAR ;AN000; + EXTRN CONVERT_ASCII:NEAR ;AN000; + EXTRN SET_SCROLL_COLOUR:NEAR ;AN000; + EXTRN SET_SCROLL_CALL:NEAR ;AN000; + EXTRN INIT_SCROLL_W_LIST_CALL:NEAR ;AN000; + EXTRN INIT_SCROLL_W_NUM_CALL:NEAR ;AN000; + EXTRN HANDLE_ERROR_CALL:FAR ;AN000; + EXTRN HANDLE_PANEL_CALL:FAR ;AN000; + EXTRN HANDLE_KEYSTROKE:FAR ;AN000; + EXTRN RETURN_STRING_CALL:NEAR ;AN000; + EXTRN INIT_CHAR_CALL:NEAR ;AN000;JW + EXTRN INSERT_DISK_ROUTINE:NEAR ;AN000;JW +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + \ No newline at end of file diff --git a/v4.0/src/SELECT/CASSFAR.LIB b/v4.0/src/SELECT/CASSFAR.LIB new file mode 100644 index 0000000..69cec7f Binary files /dev/null and b/v4.0/src/SELECT/CASSFAR.LIB differ diff --git a/v4.0/src/SELECT/CASTRUC.INC b/v4.0/src/SELECT/CASTRUC.INC new file mode 100644 index 0000000..b1fef95 --- /dev/null +++ b/v4.0/src/SELECT/CASTRUC.INC @@ -0,0 +1,239 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; CASTRUC.INC +; +; +; +; +; +; PCPANEL PCB Structure +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB_PB STRUC ;AN000; +PCB_OPT1 DW 0 ;AN000;option word +PCB_OPT2 DB 0 ;AN000;option 2 added +PCB_OPT3 DB 0 ;AN000;option 3 added +PCB_OPT4 DB 0 ;AN000;option 4 added +PCB_UROW DW 0 ;AN000;row location of panel +PCB_UCOL DW 0 ;AN000;column location of panel +PCB_WIDTH DW 0 ;AN000;text char width of panel +PCB_MAXSIZE DW 0 ;AN000;Max poss panel sizing in text +PCB_CCBID DW 0 ;AN000;Index number of log color +PCB_BORDER DB 8 DUP(0) ;AN000;8 log border characters +PCB_COMPLEN DW 0 ;AN000;Length compress panel in mem +PCB_COMPOFF DW 0 ;AN000;Off addr compressed panel +PCB_COMPSEG DW 0 ;AN000;Seg addr compressed panel +PCB_EXPANDLEN DW 0 ;AN000;Length expanded panel in mem +PCB_EXPANDOFF DW 0 ;AN000;Off addr of expanded panel in +PCB_EXPANDSEG DW 0 ;AN000;Seg addr of expanded panel in +PCB_MIXEDLEN DW 0 ;AN000;Len of the mixed panel in mem +PCB_MIXEDOFF DW 0 ;AN000;Off addr of mixed panel in mem +PCB_MIXEDSEG DW 0 ;AN000;Seg addr of mixed panel in mem +PCB_LABELLEN DW 0 ;AN000;Len of the panel label +PCB_LABELOFF DW 0 ;AN000;Off addr of the panel label +PCB_LABELSEG DW 0 ;AN000;Seg addr of the panel label +PCB_LABELROW DW 0 ;AN000;Beg row of title relative to pan +PCB_LABELCOL DW 0 ;AN000;Beg col of title relative to pan +PCB_FPANLEN DW 0 ;AN000;Len of the panel stored in file +PCB_FNAMEOFF DW 0 ;AN000;Off address of full filespec +PCB_FNAMESEG DW 0 ;AN000;Seg address of full filespec +PCB_FTEXTLOCL DW 0 ;AN000;Lower off word of the beg off +PCB_FTEXTLOCH DW 0 ;AN000;High off word of the beg off +PCB_LROW DW 0 ;AN000;lower right corner (graphs only) +PCB_LCOL DW 0 ;AN000;lower left corner (graphs only) +PCB_VERTSHADE DB 0 ;AN000;vertical shadow mask (grap only) +PCB_HORZSHADE DB 0 ;AN000;horizontal shadow mask (graphs) +PCB_GFILLOFF DW 0 ;AN000;offset of wind char fill bit map +PCB_GFILLSEG DW 0 ;AN000;segmnt of wind char fill bit map +PCB_SCRSV1OFF DW 0 ;AN000;off scr buffer save 10H, 12H +PCB_SCRSV2OFF DW 0 ;AN000;off scr buffer save 11H +PCB_SCRSAVSEG DW 0 ;AN000;segment of screen buffer save +PCB_RESERVED DW 0 ;AN000;reserved +PCB_CHILDNUM DW 0 ;AN000;Number of child panel entries +PCB_CHILDOFF DW 0 ;AN000;Off address of child panel table +PCB_CHILDSEG DW 0 ;AN000;Seg address of child panel table +PCB_PB ENDS ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSLCTP Structure +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SCB_PB STRUC ;AN000; +SCB_OPT1 DW 0 ;AN000;option word one +SCB_OPT2 DW 0 ;AN000;option word two +SCB_OPT3 DW 0 ;AN000;option word three +SCB_OPT4 DW 0 ;AN068;SEH option word four +SCB_FREQ DW 0 ;AN000;error beep frequency +SCB_ROW DW 0 ;AN000;upper left row +SCB_COL DW 0 ;AN000;upper left column +SCB_RELROW DW 0 ;AN000;relative upper left row +SCB_RELCOL DW 0 ;AN000;relative upper left column +SCB_WIDTH DW 0 ;AN000;line width +SCB_NUMLINE DW 0 ;AN000;number of lines +SCB_TOPELE DW 0 ;AN000;number of element on top +SCB_NUMELE DW 0 ;AN000;number of elements +SCB_CURELE DW 0 ;AN000;current element +SCB_NUMCOL DW 0 ;AN000;maximun number of cols to scroll +SCB_CURCOL DW 0 ;AN000;display offset into opt strings +SCB_NLISTCOL DW 0 ;AN000;num list txt col offset in strg +SCB_NLISTSEP DB 0 ;AN000;numbered list separator +SCB_SKLEN DW 0 ;AN000;select keystroke string length +SCB_SKOFF DW 0 ;AN000;select keystroke string offset +SCB_SKSEG DW 0 ;AN000;select keystroke string segment +SCB_RLLEN DW 0 ;AN000;return/leave string length +SCB_RLOFF DW 0 ;AN000;return/leave string offset +SCB_RLSEG DW 0 ;AN000;return/leave string segment +SCB_RELEN DW 0 ;AN000;return/erase string length +SCB_REOFF DW 0 ;AN000;return/erase string offset +SCB_RESEG DW 0 ;AN000;return/erase string segment +SCB_UALEN DW 0 ;AN000;up arrow string length +SCB_UAOFF DW 0 ;AN000;up arrow string offset +SCB_UASEG DW 0 ;AN000;up arrow string segment +SCB_DALEN DW 0 ;AN000;down arrow string length +SCB_DAOFF DW 0 ;AN000;down arrow string offset +SCB_DASEG DW 0 ;AN000;down arrow string segment +SCB_LALEN DW 0 ;AN000;left arrow string length +SCB_LAOFF DW 0 ;AN000;left arrow string offset +SCB_LASEG DW 0 ;AN000;left arrow string segment +SCB_RALEN DW 0 ;AN000;right arrow string length +SCB_RAOFF DW 0 ;AN000;right arrow string offset +SCB_RASEG DW 0 ;AN000;right arrow string segment +SCB_PULEN DW 0 ;AN000;page-up string length +SCB_PUOFF DW 0 ;AN000;page-up string offset +SCB_PUSEG DW 0 ;AN000;page-up string segment +SCB_PDLEN DW 0 ;AN000;page-down string length +SCB_PDOFF DW 0 ;AN000;page-down string offset +SCB_PDSEG DW 0 ;AN000;page-down string segment +SCB_PILEN DW 0 ;AN000;pointer indicator strg length +SCB_PIOFF DW 0 ;AN000;pointer indicator string offset +SCB_PISEG DW 0 ;AN000;pointer indicator string segment +SCB_PICOL DW 0 ;AN000;pointer ind txt col off into stg +SCB_AILEN DW 0 ;AN000;active indicator strg length +SCB_AIOFF DW 0 ;AN000;active indicator string offset +SCB_AISEG DW 0 ;AN000;active indicator string segment +SCB_AICOL DW 0 ;AN000;active ind txt col off into stg +SCB_CILEN DW 0 ;AN000;check mark text string length +SCB_CIOFF DW 0 ;AN000;check mark text string offset +SCB_CISEG DW 0 ;AN000;check mark text string segment +SCB_CICOL DW 0 ;AN000;check mark offset into opt strg +SCB_UILEN DW 0 ;AN000;up indicator string length +SCB_UIOFF DW 0 ;AN000;up indicator string offset +SCB_UISEG DW 0 ;AN000;up indicator string segment +SCB_UIROW DW 0 ;AN000;up indicator row location +SCB_UICOL DW 0 ;AN000;up indicator column location +SCB_DILEN DW 0 ;AN000;down indicator string length +SCB_DIOFF DW 0 ;AN000;down indicator string offset +SCB_DISEG DW 0 ;AN000;down indicator string segment +SCB_DIROW DW 0 ;AN000;down indicator row location +SCB_DICOL DW 0 ;AN000;down indicator column locaiton +SCB_LILEN DW 0 ;AN000;left indicator string length +SCB_LIOFF DW 0 ;AN000;left indicator string offset +SCB_LISEG DW 0 ;AN000;left indicator string segment +SCB_LIROW DW 0 ;AN000;left indicator row location +SCB_LICOL DW 0 ;AN000;left indicator column location +SCB_RILEN DW 0 ;AN000;right indicator string length +SCB_RIOFF DW 0 ;AN000;right indicator string offset +SCB_RISEG DW 0 ;AN000;right indicator string segment +SCB_RIROW DW 0 ;AN000;right indicator row location +SCB_RICOL DW 0 ;AN000;right indicator column locaiton +SCB_NCRAYOFF DW 0 ;AN000;normal color array offset +SCB_NCRAYSEG DW 0 ;AN000;normal color array segment +SCB_CCBID DW 0 ;AN000;logical color index number +SCB_CCBVECNUM DW 0 ;AN000;number color index table entries +SCB_CCBVECOFF DW 0 ;AN000;offset addr of color index table +SCB_CCBVECSEG DW 0 ;AN000;segment addr of color index tabl +SCB_INDEXOFF DW 0 ;AN000;index array offset +SCB_INDEXSEG DW 0 ;AN000;index array segment +SCB_SELOFF DW 0 ;AN000;element selection array offset +SCB_SELSEG DW 0 ;AN000;element selection array segment +SCB_OAOPT DW 0 ;AN000;option array option word +SCB_OAPOFF DW 0 ;AN000;option array pointer offset +SCB_OAPSEG DW 0 ;AN000;option array pointer segment +SCB_OASLEN DW 0 ;AN000;option array string length +SCB_OASSEG DW 0 ;AN000;option array string segment +SCB_OASTERMC DB 0 ;AN000;option array string term char +SCB_KS DW 0 ;AN000;keystroke +SCB_LVBOFF DW 0 ;AN000;log vid buf offset override +SCB_LVBSEG DW 0 ;AN000;log vid buf segment override +SCB_FMOPT1 DW 0 ;AN000;general purpose format hook opt +SCB_FMOPT2 DW 0 ;AN000;general purpose format hook opt +SCB_TRANLEN DW 0 ;AN000;length of translation table +SCB_TRANOFF DW 0 ;AN000;offset of translation table +SCB_TRANSEG DW 0 ;AN000;segment of translation table +SCB_MONOOFF DW 0 ;AN000;monocasing table offset +SCB_MONOSEG DW 0 ;AN000;monocasing table segment +SCB_DBCSLEN DW 0 ;AN000;dbcs table length +SCB_DBCSOFF DW 0 ;AN000;dbcs table offset +SCB_DBCSSEG DW 0 ;AN000;dbcs table segment +SCB_FONTOFF DW 0 ;AN068;SEH offset of font descriptor block +SCB_FONTSEG DW 0 ;AN068;SEH segment of font descriptor block +SCB_PB ENDS ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CHD_PB STRUC ;AN000; +CHD_PCB DW 0 ;AN000;child PCB element number +CHD_ROW DW 0 ;AN000;row override +CHD_COL DW 0 ;AN000;column override +CHD_INX DW 0 ;AN000;color index pointer override + DW 0 ;AN000;function key attribute + DB 0,0 ;AN000;keystroke associated with child + DW 0 ;AN000;option word +CHD_PB ENDS ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Input Field Control Block (ICB) Structure +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ICB_PB STRUC ;AN000;begin input field control block +ICB_OPT1 DW 0 ;AN000;option word one +ICB_OPT2 DW 0 ;AN000;option word two +ICB_OPT3 DW 0 ;AN000;option word three +ICB_OPT4 DW 0 ;AN000;option word four +ICB_ROW DW 0 ;AN000;upper left corner field row +ICB_COL DW 0 ;AN000;upper left corner field column +ICB_WIDTH DW 0 ;AN000;number of chars before wrapping +ICB_CCBID DW 0 ;AN000;color index number assigned +ICB_STATUS DW 0 ;AN000;default change/minus status +ICB_CURCHAR DW 0 ;AN000;cursor character pos in field +ICB_HRSTART DW 0 ;AN000;NEW ADD...Hor scroll support +ICB_SOUND DW 0 ;AN000;frequency of error beep +ICB_KEYRET DW 0 ;AN000;ASCII code of the key returned +ICB_ENDBYTE DW 0 ;AN000;length of data entered into fld +ICB_FIELDLEN DW 0 ;AN000;length of input field +ICB_FIELDOFF DW 0 ;AN000;offset of input field +ICB_FIELDSEG DW 0 ;AN000;segment of input field +ICB_ATTROFF DW 0 ;AN000;offset of color attribute buffer +ICB_ATTRSEG DW 0 ;AN000;segment of color attr buffer +ICB_DEFLEN DW 0 ;AN000;length of field's default value +ICB_DEFOFF DW 0 ;AN000;offset field's default value +ICB_DEFSEG DW 0 ;AN000;segment field's default value +ICB_RETLEN DW 0 ;AN000;length of return string +ICB_RETOFF DW 0 ;AN000;offset of return string +ICB_RETSEG DW 0 ;AN000;segment of return string +ICB_ALLLEN DW 0 ;AN000;length of allow chars +ICB_ALLOFF DW 0 ;AN000;offset of allow chars +ICB_ALLSEG DW 0 ;AN000;segment of allow chars +ICB_SKIPLEN DW 0 ;AN000;length of skip chars +ICB_SKIPOFF DW 0 ;AN000;offset of skip chars +ICB_SKIPSEG DW 0 ;AN000;segment of skip chars +ICB_ALL1LEN DW 0 ;AN000;length of allow once chars +ICB_ALL1OFF DW 0 ;AN000;offset of allow once chars +ICB_ALL1SEG DW 0 ;AN000;segment of allow once chars +ICB_DECPOS DW 0 ;AN000;precision of decimal point +ICB_RANUML1 DW 0 ;AN000;low numeric range (low intrgr) +ICB_RANUMH1 DW 0 ;AN000;low numeric range (high intrgr) +ICB_RANUML2 DW 0 ;AN000;high numeric range (low intrgr) +ICB_RANUMH2 DW 0 ;AN000;high numeric range (high intrgr) +ICB_MANDPROW DW 0 ;AN000;beginning row of minus and plus +ICB_MANDPCOL DW 0 ;AN000;beginning col of minus & plus +ICB_MINUSLEN DW 0 ;AN000;length of minus sign string +ICB_MINUSOFF DW 0 ;AN000;offset of minus sign string +ICB_MINUSSEG DW 0 ;AN000;segment of minus sign string +ICB_PLUSLEN DW 0 ;AN000;length of plus sign string +ICB_PLUSOFF DW 0 ;AN000;offset of plus sign string +ICB_PLUSSEG DW 0 ;AN000;segment of plus sign string +ICB_PB ENDS ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/v4.0/src/SELECT/CKDISP.ASM b/v4.0/src/SELECT/CKDISP.ASM new file mode 100644 index 0000000..ba2b318 --- /dev/null +++ b/v4.0/src/SELECT/CKDISP.ASM @@ -0,0 +1,151 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.ALPHA ;AN000; +.XLIST ;AN000; +INCLUDE STRUC.INC ;AN000; +.LIST ;AN000; + ; + PUBLIC MONO, CGA, EGA, LCD ;AN000; + PUBLIC ACTIVE, ALTERNATE ;AN000; + ; + EXTRN IN_CURNOR:WORD ;AN000;JW + ; +DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; +MONO EQU 1 ;AN000; +CGA EQU 2 ;AN000; +EGA EQU 3 ;AN000; +LCD EQU 4 ;AN000; + ; +READ_DISPLAY EQU 1AH ;AN000; +ALT_SELECT EQU 12H ;AN000; +EGA_INFO EQU 10H ;AN000; +MONOCHROME EQU 1 ;AN000; +BASE_COLOR EQU 0B800H ;AN000; +BASE_MONO EQU 0B000H ;AN000; +GET_SYS_ID EQU 0C0H ;AN000; +LCD_MODEL EQU 0F9H ;AN000; +GET_STATUS EQU 43H ;AN000; +ON EQU 1 ;AN000; + ; +SYSTEM_ID STRUC ;AN000; + DW ? ;AN000; +MODEL_BYTE DB ? ;AN000; +SYSTEM_ID ENDS ;AN000; + ; +ACTIVE DB 0 ;AN000; +ALTERNATE DB 0 ;AN000; + ; +DATA ENDS ;AN000;DATA +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SERVICE SEGMENT PARA PUBLIC 'SERVICE' ;AN000;segment for far routine + ASSUME CS:SERVICE,DS:DATA ;AN000; + ; + PUBLIC VIDEO_CHECK ;AN000; +VIDEO_CHECK PROC FAR ;AN000; + PUSH AX ;AN000; + PUSH BX ;AN000; save all registers + PUSH CX ;AN000; + PUSH DX ;AN000; + PUSH SI ;AN000; + PUSH DI ;AN000; + PUSH ES ;AN000; + XOR AL,AL ;AN000; + MOV AH,READ_DISPLAY ;AN000; check for VGA first. + INT 10H ;AN000; + .IF ;AN000; VGA present? + .SELECT ;AN000; yes....BL contains active.. + .WHEN ;AN000; display code. + MOV ACTIVE,MONO ;AN000; + .WHEN ;AN000; + MOV ACTIVE,CGA ;AN000; + .WHEN ;AN000; + MOV ACTIVE,EGA ;AN000; + .ENDSELECT ;AN000; + .SELECT ;AN000; ...and BH contains alternate.. + .WHEN ;AN000; display code. + MOV ALTERNATE,MONO ;AN000; + .WHEN ;AN000; + MOV ALTERNATE,CGA ;AN000; + .WHEN ;AN000; + MOV ALTERNATE,EGA ;AN000; + .ENDSELECT ;AN000; + .ELSE ;AN000; VGA not there..check for EGA. + MOV AH,ALT_SELECT ;AN000; + MOV BL,EGA_INFO ;AN000; + INT 10H ;AN000; + .IF ;AN000; EGA present? + MOV ACTIVE,EGA ;AN000; yes....set as active. + .IF ;AN000; if monochrome attached to EGA then.. + MOV AX,BASE_COLOR ;AN000; check if CGA is an alternate. + CALL CHECK_BUFF ;AN000; + .IF ;AN000; CGA there? + MOV ALTERNATE,CGA ;AN000; yes....alternate display. + .ENDIF ;AN000; + .ELSE ;AN000; if color attached to EGA then... + MOV AX,BASE_MONO ;AN000; check if monochrome is an alternate. + CALL CHECK_BUFF ;AN000; + .IF ;AN000; MONO there? + MOV ALTERNATE,MONO ;AN000; yes....alternate display. + .ENDIF ;AN000; + .ENDIF ;AN000; + .ELSE ;AN000; EGA not present so... + MOV AH,GET_SYS_ID ;AN000; check for LCD. + INT 15H ;AN000; + .IF AND ;AN000; if model byte says convertible.. + MOV AH,GET_STATUS ;AN000; and.. + INT 15H ;AN000; + .IF ;AN000; if LCD screen attached..then + MOV ACTIVE,LCD ;AN000; set LCD as active display. + .ELSE ;AN000; + MOV AX,BASE_MONO ;AN000; not LCD...check for.. + CALL CHECK_BUFF ;AN000; MONO.... + .IF ;AN000; + MOV ACTIVE,MONO ;AN000; MONO found...set as active. + MOV IN_CURNOR,0B0CH ;AN000;JW set mono cursor size + .ENDIF ;AN000; + MOV AX,BASE_COLOR ;AN000; ..and check for color. + CALL CHECK_BUFF ;AN000; + .IF ;AN000; + MOV ALTERNATE,CGA ;AN000; color found...set CGA as alternate. + .ENDIF ;AN000; + .ENDIF ;AN000; + .ENDIF ;AN000; + .ENDIF ;AN000; + POP ES ;AN000; + POP DI ;AN000; restore registers. + POP SI ;AN000; + POP DX ;AN000; + POP CX ;AN000; + POP BX ;AN000; + POP AX ;AN000; + RET ;AN000; +VIDEO_CHECK ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CHECK_BUFF PROC NEAR ;AN000; write to video buffer to see if it is present + PUSH DS ;AN000; + MOV DS,AX ;AN000; load DS with address of buffer + MOV CH,DS:0 ;AN000; save buffer information (if present) + MOV AL,55H ;AN000; prepare to write sample data + MOV DS:0,AL ;AN000; write to buffer + PUSH BX ;AN000; terminate the bus so that lines.. + POP BX ;AN000; are reset + MOV AH,DS:0 ;AN000; bring sample data back... + MOV DS:0,CH ;AN000; repair damage to buffer + POP DS ;AN000; + RET ;AN000; +CHECK_BUFF ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SERVICE ENDS ;AN000; + END ;AN000; diff --git a/v4.0/src/SELECT/COLORS.ASM b/v4.0/src/SELECT/COLORS.ASM new file mode 100644 index 0000000..a959623 --- /dev/null +++ b/v4.0/src/SELECT/COLORS.ASM @@ -0,0 +1,83 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; COLORS.ASM +; +; +; +; Color CODE Definition +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + .alpha ; arrange segments alphabetically + + INCLUDE SEL-PAN.INC ;AN000; + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Color Index Structure +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CCB_PB STRUC ;AN000; +CCB_A1 DB 0 ;AN000;Normal/Base Panel +CCB_A2 DB 0 ;AN000;Selection Bar/Field Highlight +CCB_A3 DB 0 ;AN000;Selected Options +CCB_A4 DB 0 ;AN000;Highlighted and Selected Options +CCB_A5 DB 0 ;AN000;Active Options +CCB_A6 DB 0 ;AN000;Direction Indicators +CCB_A7 DB 0 ;AN000;Title +CCB_A8 DB 0 ;AN000;Instructions +CCB_A9 DB 0 ;AN000;Function Keys +CCB_AA DB 0 ;AN000;Mnemonic Highlight +CCB_AB DB 0 ;AN000;Reserved +CCB_AC DB 0 ;AN000;Reserved +CCB_PB ENDS ;AN000; + ; + PUBLIC WR_CIS,WR_CIS2,L_WR_CIS,L_WR_CIS2;AN000; + ; +CODE SEGMENT PARA PUBLIC 'CODE' ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Color Index Structure (Actual color values) +; +; Attribute Color Attribute Assignment +; --------- ----------------------------------- +; A1 - Normal/Base Panel +; A2 - Selection Bar/Field Highlight +; A3 - Selected Options +; A4 - Highlighted and Selected Options +; A5 - Active Options +; A6 - Direction Indicators +; A7 - Title +; A8 - Instructions +; A9 - Function Keys +; AA - Mnemonic Highlight +; AB - Reserved +; AC - Reserved +; +; A1, A2, A3, A4, A5, A6, A7, A8, A9, AA, AB, AC +; � � � � � � � � � � � � +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_CIS DB 31,113, 48,113, 31, 31, 30, 30,112, 28, 00, 00 ;AN000;Logo Scr +WR_CIS_W EQU $-WR_CIS ;AN000; + DB 31,127, 48,113, 31, 31, 30, 30,112, 28, 00, 00 ;AN000;Inactive scroll + DB 112,112,112,112,112,112,112,112,112,112, 00, 00 ;AN000;Ctxt Help + DB 112,112,112,112,112,112,112,112,112,112, 00, 00 ;AN000;Ctxt Help +; DB 4Fh,112,112,112,112,112,112,112,112,112, 00, 00 ;Indx Help + DB 112,112,112,112,112,112,112,112,112,112, 00, 00 ;AN000;Indx Help +L_WR_CIS EQU ($-WR_CIS)/WR_CIS_W ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Color Index Structure (Actual MONO values) +; +; A1, A2, A3, A4, A5, A6, A7, A8, A9, AA, AB, AC +; � � � � � � � � � � � � +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_CIS2 DB 7,112, 48,112, 7, 7, 7, 7,112, 28, 00, 00 ;AN000;Logo Scr +WR_CIS2_W EQU $-WR_CIS2 ;AN000; + DB 7,127, 48,112, 7, 7, 7, 7,112, 28, 00, 00 ;AN000;Logo Scr + DB 112,112,112,112,112,112,112,112,112,112, 00, 00 ;AN000;Ctxt Help + DB 112,112,112,112,112,112,112,112,112,112, 00, 00 ;AN000;Ctxt Help + DB 112,112,112,112,112,112,112,112,112,112, 00, 00 ;AN000;Indx Help +L_WR_CIS2 EQU ($-WR_CIS2)/WR_CIS2_W ;AN000; +CODE ENDS ;AN000; + END ;AN000; diff --git a/v4.0/src/SELECT/DATA.MAC b/v4.0/src/SELECT/DATA.MAC new file mode 100644 index 0000000..ca1b67d --- /dev/null +++ b/v4.0/src/SELECT/DATA.MAC @@ -0,0 +1,502 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; DATA.MAC +; +; +; Define data segment +; +; The following variables are defined in the data segment and are used as +; parameter block structures for specific CAS routine calls. The +; initialization of these variables will eventually occur by the dialog. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + PUBLIC QM_OPT1,QM_ID ;AN000; + PUBLIC WR_DRETLEN,WR_DRETOFF,WR_DATA2LEN ;AN000; + PUBLIC WR_MAXMEMPAR,WR_DATA2SEG,WR_DATA2OFF ;AN000; + PUBLIC WR_LVBMEM,WR_LVBSEG,WR_LVBOFF,WR_LVBLEN ;AN000; + PUBLIC WR_ERROR,PM_BASECHAR,PM_BASEATTR,QM_ACTIVEPAN ;AN000; + PUBLIC WR_DRETSEG,QM_OPT2 ;AN000; + PUBLIC CRD_CCBVECOFF,CRD_CCBVECSEG,INC_KS ;AN000; + PUBLIC IN_ICBID,WR_REFBUF ;AN000; + PUBLIC WR_HLPOPT,WR_HLPROW,WR_HCBCONT,WR_SCBID ;AN000; + PUBLIC IN_CCBVECOFF,IN_CCBVECSEG ;AN000; + PUBLIC WR_REFNUM,WR_REFOFF,WR_REFSEG,WR_REFCNT ;AN000; + PUBLIC WR_REFIELDCNT,WR_REFID ;AN000; + PUBLIC WR_MAXREFID ;AN000; + PUBLIC WR_MAXHELPSZ ;AN000; + PUBLIC HRD_BUFSEG ;AN000; + PUBLIC HRD_BUFOFF ;AN000; + PUBLIC HRD_BUFLEN ;AN000; + PUBLIC IN_CURNOR ;AN000;JW + ; +DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; + ; + EXTRN WR_ICBVEC:WORD ;AN000; + EXTRN KD_BACKSPACE:BYTE ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCGVIDO Parameter Block +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GV_STAT1 DW 0 ;AN000;low bit flag indicating status +GV_STAT2 DW 0 ;AN000;high bit flag indicating status +GV_SCRWIDTH DW 0 ;AN000;# of attr and char in one line +GV_SCRLEN DW 0 ;AN000;# of bytes per video buffer page +GV_CURPAGENUM DB 0 ;AN000;current active page +GV_VIDMODE DB 0 ;AN000;current video state/mode +GV_BASE_6845 DW 0 ;AN000;base port address of 6845 +GV_STAT_6845 DW 0 ;AN000;status port address of 6845 +GV_PHYOFF DW 0 ;AN000;phy video buffer offset +GV_PHYOFFPAGE DW 0 ;AN000;phys vid buf off adj for page +GV_PHYSEG DW 0 ;AN000;phy video buffer segment +GV_OSLOGOFF DW 0 ;AN000;operating sys log vid buff os +GV_OSLOGSEG DW 0 ;AN000;operating sys log vid buff seg +GV_APLOGOFF DW 0 ;AN000;application log vid buf offset +GV_APLOGSEG DW 0 ;AN000;application log vid buf segment +GV_CSH DW 0 ;AN000;character height in scan lines +GV_CSW DW 0 ;AN000;character width in scan lines +GV_NUMLINES DW 0 ;AN000;number of rows in text screen +GV_CURPOS0 DW 0 ;AN000;cursor position for page 0 R/C +GV_CURPOS1 DW 0 ;AN000;cursor position for page 1 +GV_CURPOS2 DW 0 ;AN000;cursor position for page 2 +GV_CURPOS3 DW 0 ;AN000;cursor position for page 3 +GV_CURPOS4 DW 0 ;AN000;cursor position for page 4 +GV_CURPOS5 DW 0 ;AN000;cursor position for page 5 +GV_CURPOS6 DW 0 ;AN000;cursor position for page 6 +GV_CURPOS7 DW 0 ;AN000;cursor position for page 7 +GV_CURMOD0 DW 0 ;AN000;cursor mode for page 0 +GV_CURMOD1 DW 0 ;AN000;cursor mode for page 1 +GV_CURMOD2 DW 0 ;AN000;cursor mode for page 2 +GV_CURMOD3 DW 0 ;AN000;cursor mode for page 3 +GV_CURMOD4 DW 0 ;AN000;cursor mode for page 4 +GV_CURMOD5 DW 0 ;AN000;cursor mode for page 5 +GV_CURMOD6 DW 0 ;AN000;cursor mode for page 6 +GV_CURMOD7 DW 0 ;AN000;cursor mode for page 7 +GV_CURROW DW 0 ;AN000;cursor row location +GV_CURCOL DW 0 ;AN000;cursor column location +GV_CURSTART DW 0 ;AN000;cursor size (starline) +GV_CUREND DW 0 ;AN000;cursor size (endline) +GV_CURWIDTH DW 0 ;AN000;cursor width +GV_CURATTR DW 0 ;AN000;cursor attribute +GV_COLORBITS DB 0 ;AN000;color bits (graphics mode) +GV_ERRCODE DW 0 ;AN000;error code +GV_RESERVED DB 40 DUP(0) ;AN000;reserved locations +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCINSTR parameter block +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INS_OPT DW 0 ;AN000;option word +INS_KS DW 0 ;AN000;keystroke +INS_FLEN DW 0 ;AN000;length of find string +INS_FOFF DW 0 ;AN000;offset of find string +INS_FSEG DW 0 ;AN000;segment of find string +INS_SLEN DW 0 ;AN000;length of string to search +INS_SOFF DW 0 ;AN000;offset of string to search +INS_SSEG DW 0 ;AN000;segment of string to search +INS_SPOFF DW 0 ;AN000;position to start seach +INS_RSLT DW 0 ;AN000;result +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCHLPRD parameter block +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +HRD_OPT1 DW 0 ;AN000;option word +HRD_BUFLEN DW 0 ;AN000;length of avail buffer +HRD_BUFOFF DW 0 ;AN000;offset of buffer +HRD_BUFSEG DW 0 ;AN000;segment of buffer +HRD_ID DW 0 ;AN000;ID of help text +HRD_FILSPOFF DW WR_HLPBUF ;AN000;offset of filespec +HRD_FILSPSEG DW DATA ;AN000;segment of filespec +HRD_TOPICNUM DW 0 ;AN000;max num of helps +HRD_TOPICLEN DW 0 ;AN000;Length of longest topic +HRD_TOPICOFF DW 0 ;AN000;offset to table of offsets +HRD_TOPICSEG DW 0 ;AN000;segment to table of offsets +HRD_TEXTLEN DW 0 ;AN000;Length of help text +HRD_TEXTOFF DW 0 ;AN000;offset to help text +HRD_TEXTSEG DW 0 ;AN000;Segment to help text +HRD_ERROR DW 0 ;AN000;errors +HRD_DOSERROR DW 0 ;AN000;DOS error conditions +HRD_RESERVED DB 48 DUP(0) ;AN000;reserved for internal use +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSCRRD parameter block +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SRD_OPT1 DW 0 ;AN000;option word +SRD_BUFLEN DW 0 ;AN000;length of avail buffer +SRD_BUFOFF DW 0 ;AN000;offset of buffer +SRD_BUFSEG DW 0 ;AN000;segment of buffer +SRD_ID DW 0 ;AN000;ID number to read +SRD_FILSPEOFF DW WR_SCRBUF ;AN000;offset of filespec +SRD_FILSPESEG DW DATA ;AN000;segment of filespec +SRD_SCBVECNUM DW 0 ;AN000;num SCBs in vector +SRD_SCBVECOFF DW 0 ;AN000;offset of SCB vector +SRD_SCBVECSEG DW 0 ;AN000;segment of SCB vector +SRD_MAXNUMSCB DW 0 ;AN000;max # flds poss in memry at once +SRD_ERROR DW 0 ;AN000;errors +SRD_DOSERROR DW 0 ;AN000;DOS error conditions +SRD_RESERVED DB 50 DUP(0) ;AN000;reserved for internal use +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCINCHA parameter block +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INC_OPT DW 0 ;AN000;option word +INC_STAT DW 0 ;AN000;status word +INC_KS DW 0 ;AN000;keystroke found +INC_TRANLEN DW 0 ;AN000;length of translation table +INC_TRANOFF DW 0 ;AN000;offset of translation table +INC_TRANSEG DW 0 ;AN000;segment of translation table +INC_DBCSLEN DW 0 ;AN000;length of DBCS table +INC_DBCSOFF DW 0 ;AN000;offset of DBCS table +INC_DBCSSEG DW 0 ;AN000;segment of DBCS table +INC_MONOOFF DW 0 ;AN000;offset of monocasing table +INC_MONOSEG DW 0 ;AN000;segment of monocasing table +INC_RESERVED DB 12 DUP(0) ;AN000;reserved for internal use +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCCLRRD parameter block +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CRD_OPT1 DW 0 ;AN000;option word +CRD_BUFLEN DW 0 ;AN000;length of avail buffer +CRD_BUFOFF DW 0 ;AN000;offset of buffer +CRD_BUFSEG DW 0 ;AN000;segment of buffer +CRD_ID DW 0 ;AN000;color index ID number to read +CRD_FILSPEOFF DW WR_CLRBUF ;AN000;offset of filespec +CRD_FILSPESEG DW DATA ;AN000;segment of filespec +CRD_CCBVECLEN DW 0 ;AN000;length of index in bytes +CRD_CCBVECOFF DW 0 ;AN000;offset of color index +CRD_CCBVECSEG DW 0 ;AN000;segment of color index +CRD_ERROR DW 0 ;AN000;errors +CRD_DOSERROR DW 0 ;AN000;DOS error conditions +CRD_RESERVED DB 34 DUP(0) ;AN000;reserved for internal use +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANRD parameter block +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PRD_OPT1 DW 0 ;AN000;option word +PRD_BUFLEN DW 0 ;AN000;length of avail buffer +PRD_BUFOFF DW 0 ;AN000;offset of buffer +PRD_BUFSEG DW 0 ;AN000;segment of buffer +PRD_ID DW 0 ;AN000;PCB number to read +PRD_FILSPELEN DW WR_PANLEN ;AN000;length of filespec +PRD_FILSPEOFF DW WR_PANBUF ;AN000;offset of filespec +PRD_FILSPESEG DW DATA ;AN000;segment of filespec +PRD_PCBVECNUM DW 0 ;AN000;num PCBs in vector +PRD_PCBVECOFF DW 0 ;AN000;offset of PCB vector +PRD_PCBVECSEG DW 0 ;AN000;segment of PCB vector +PRD_MAXNUMPAN DW 0 ;AN000;max # pans poss in memry at once +PRD_ERROR DW 0 ;AN000;errors +PRD_DOSERROR DW 0 ;AN000;DOS error conditions +PRD_RESERVED DB 48 DUP(0) ;AN000;reserved for internal use +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCDISPQ Parameter Block +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +QM_OPT1 DW 0 ;AN000;option word one +QM_OPT2 DW 0 ;AN000;option word two +QM_ID DW 0 ;AN000;parent/child PCB number +QM_ACTIVEPAN DW 0 ;AN000;current active parent panel +QM_COLOROVER DW 0 ;AN000;parent/child override color indx +QM_ROWOVER DW 0 ;AN000;parent/child override row +QM_COLUMOVER DW 0 ;AN000;parent/child override column +QM_MAXCHDQUE DW 0 ;AN000;max # of child queues to save +QM_MAXPANQUE DW 0 ;AN000;max # of panel queues to save +QM_MAXNUMCHD DW 0 ;AN000;max # of parent panels queued +QM_MAXNUMPAN DW 0 ;AN000;max # of child panels queued +QM_PCBVECNUM DW 0 ;AN000;number of PCB elements in vector +QM_PCBVECOFF DW 0 ;AN000;offset of PCB vector +QM_PCBVECSEG DW 0 ;AN000;segment of PCB vector +QM_BUFLEN DW 0 ;AN000;length of avail buffer +QM_BUFOFF DW 0 ;AN000;offset of buffer +QM_BUFSEG DW 0 ;AN000;segment of buffer +QM_PANQUENUM DW 0 ;AN000;returns number in parent PDQ +QM_PANQUEOFF DW 0 ;AN000;returns parent PDQ offset +QM_PANQUESEG DW 0 ;AN000;returns parent PDQ segment +QM_CHDQUENUM DW 0 ;AN000;returns number in child PDQ +QM_CHDQUEOFF DW 0 ;AN000;returns child PDQ offset +QM_CHDQUESEG DW 0 ;AN000;returns child PDQ segment +QM_RETKEYSLEN DW 0 ;AN000;active child keys buffer length +QM_RETKEYSOFF DW 0 ;AN000;active child keys buffer offset +QM_RETKEYSSEG DW 0 ;AN000;active child keys buffer segmente +QM_ERROR DW 0 ;AN000;returns error status +QM_RESERVED DB 66 DUP(0) ;AN000;reserved for internal use +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANEL Parameter Control Block +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PM_OPT1 DW 0 ;AN000;option word +PM_PANPDQNUM DW 0 ;AN000;beg/ending parent PDQ number +PM_PANBRKOFF DW 0 ;AN000;panel off in lvb of break panel +PM_PANBRKID DW 0 ;AN000;ID number of break panel +PM_ACTIVEPAN DW 0 ;AN000;current active parent panel PCB +PM_BASECHAR DB 0 ;AN000;text background character +PM_BASEATTR DB 0 ;AN000;color attribute of back char +PM_PANQUENUM DW 0 ;AN000;number of panels in parent queue +PM_PANQUEOFF DW 0 ;AN000;offset address of parent queue +PM_PANQUESEG DW 0 ;AN000;segment address of parent queue +PM_CHDQUENUM DW 0 ;AN000;number panels in child queue +PM_CHDQUEOFF DW 0 ;AN000;offset of child queue +PM_CHDQUESEG DW 0 ;AN000;segment of child queue +PM_PCBVECNUM DW 0 ;AN000;number of index elements +PM_PCBVECOFF DW 0 ;AN000;off addr of vect pointing to pan +PM_PCBVECSEG DW 0 ;AN000;seg addr of vect pointing to pan +PM_CCBVECNUM DW 0 ;AN000;number color index table entries +PM_CCBVECOFF DW 0 ;AN000;offset addr of color index table +PM_CCBVECSEG DW 0 ;AN000;segment addr of color index tabl +PM_LVBLEN DW 0 ;AN000;number bytes in logical vid buf +PM_LVBOFF DW 0 ;AN000;offset of logical video buffer +PM_LVBSEG DW 0 ;AN000;segment of logical video buffer +PM_LVBWIDTH DW 0 ;AN000;width of log vid buf in bytes +PM_TRANS_C DB 0 ;AN000;character indicating trans field +PM_TRANS_A DB 0 ;AN000;attribute indicating trans field +PM_REFVECNUM DW 0 ;AN000;number refresh table entries +PM_REFVECOFF DW 0 ;AN000;offset of refresh table +PM_REFVECSEG DW 0 ;AN000;segment of refresh table +PM_ERROR DW 0 ;AN000;error conditions +PM_RESERVED DB 417 DUP (0) ;AN000;reserved for internal use +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCINPUT parameter block +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +IN_OPT DW IN_AMONO ;AN000;option word one +IN_ICBID DW 1 ;AN000;current input field to process +IN_ICBOFF DW 0 ;AN000;returned offset of current ICB +IN_ICBSEG DW 0 ;AN000;returned segment of current ICB +IN_ICBVECNUM DW 31 ;AN000;number of ICB entires in vector +IN_ICBVECOFF DW WR_ICBVEC ;AN000;offset of ICB vector +IN_ICBVECSEG DW DATA ;AN000;segment of ICB vector +IN_CCBVECOFF DW 0 ;AN000;offset of color index table +IN_CCBVECSEG DW 0 ;AN000;segment of color index table +IN_CURNOR DW 0607H ;AN000;normal cursor size +IN_CURINS DW 0207H ;AN000;cursor size in insert mode +IN_TRANLEN DW 0 ;AN000;length of key translation table +IN_TRANOFF DW 0 ;AN000;offset of key translation table +IN_TRANSEG DW 0 ;AN000;segment of key translation table +IN_MONOOFF DW 0 ;AN000;offset of monocasing table +IN_MONOSEG DW 0 ;AN000;segment of monocasing table +IN_DBCSLEN DW 0 ;AN000;length double byte range table +IN_DBCSOFF DW 0 ;AN000;offset double byte range table +IN_DBCSSEG DW 0 ;AN000;segment double byte range table +IN_KEYSOFF DW KD_BACKSPACE ;AN000;offset of keystroke definitions +IN_KEYSSEG DW DATA ;AN000;segment of keystroke definitions +IN_CAPROW DW 0 ;AN000;row of caps lock flag +IN_CAPCOL DW 0 ;AN000;col of caps lock flag +IN_CAPLEN DW 0 ;AN000;length of caps lock flag text +IN_CAPOFF DW 0 ;AN000;offset of caps lock flag text +IN_CAPSEG DW 0 ;AN000;segment of caps lock flag text +IN_INSROW DW 0 ;AN000;row of insert flag +IN_INSCOL DW 0 ;AN000;col of insert flag +IN_INSLEN DW 0 ;AN000;length of insert flag text +IN_INSOFF DW 0 ;AN000;offset of insert flag text +IN_INSSEG DW 0 ;AN000;segment of insert flag text +IN_NUMROW DW 0 ;AN000;row of num lock flag +IN_NUMCOL DW 0 ;AN000;col of num lock flag +IN_NUMLEN DW 0 ;AN000;length of num lock flag text +IN_NUMOFF DW 0 ;AN000;offset of num lock flag text +IN_NUMSEG DW 0 ;AN000;segment of num lock flag text +IN_SCRROW DW 0 ;AN000;row of scroll lock flag +IN_SCRCOL DW 0 ;AN000;col of scroll lock flag +IN_SCRLEN DW 0 ;AN000;length of scroll lock flag text +IN_SCROFF DW 0 ;AN000;offset of scroll lock flag text +IN_SCRSEG DW 0 ;AN000;segment of scroll lock flag text +IN_THOUSEP DB 0,0 ;AN000;thousands separator +IN_THOUPOS DW 0 ;AN000;space between thousnd separators +IN_DECSEP DB 0,0 ;AN000;decimal separator +IN_DELIMITEN DB '[]' ;AN000;left & right bracket char - on +IN_DELIMITEX DB ' ' ;AN000;left & right bracket char - off +IN_DELIMITDIR DB '<>' ;AN000;direction delimitors (horz wind) +IN_BORDEREN DB '�Ŀ�����' ;AN000;8 border char (�Ŀ�����) entry +IN_BORDEREX DB '12345678' ;AN000;8 border char (�Ŀ�����) exit +IN_LVBOFF DW 0 ;AN000;log vid buf offset override +IN_LVBSEG DW 0 ;AN000;log vid buf segment override +IN_CURINSOFF DW 0 ;AN000;offset insert cursor bit map (W) +IN_CURINSSEG DW 0 ;AN000;segment insert cursor bit map (W) +IN_CURRPLOFF DW 0 ;AN000;offset replace cursor bit map (W) +IN_CURRPLSEG DW 0 ;AN000;segment replace cursor bit map (W) +IN_DELOFF DW 0 ;AN000;offset delimiter bit maps =W +IN_DELSEG DW 0 ;AN000;segment delimiter bit maps =W +IN_ERROR DW 0 ;AN000;error word +IN_RESERVED DB 450 DUP(0) ;AN000;reserved for internal use +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCWWRAP parameter block +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WWP_OPT1 DW 0 ;AN000;option word +WWP_SRCTXTLEN DW 0 ;AN000;the length of actual text +WWP_SRCTXTOFF DW 0 ;AN000;the offset to actual text +WWP_SRCTXTSEG DW 0 ;AN000;the segment to actual text +WWP_SRCBUFLEN DW 0 ;AN000;lenght of the entire buffer +WWP_DESBUFLEN DW 0 ;AN000;the length of dest buffer +WWP_DESBUFOFF DW 0 ;AN000;the offset to dest buffer +WWP_DESBUFSEG DW 0 ;AN000;the segment to dest buffer +WWP_WIDTH DW 53 ;AN000;width of the # of char on a line +WWP_NUMLINES DW 0 ;AN000;Number of actual line process +WWP_FORMAT DB '@' ;AN000;Used to indicate the begin formt +WWP_NOFORMAT DB '@' ;AN000;Used to indicate the format off +WWP_SRCHYSMB DB '#' ;AN000;Symbol that is used as hyphen +WWP_HYSYMBOL DB '-' ;AN000;Actual hyphen symbol +WWP_SPACESYM DB '&' ;AN000;symbol for padding spaces at EOL +WWP_ERROR DW 0 ;AN000;Internal error conditions +WWP_RESERVED DB 5 DUP(0) ;AN000;reserved for internal use +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCMBEEP parameter block +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +MB_FREQUENCY DW SND_FREQ ;AN000;beep frequency +MB_DURATION DW SND_DURA ;AN000;beep duration +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Input field management internal variables: +; +; Miscellaneous internal variables +; +WR_ICBID DW 0 ;AN000;general ICB ID number +WR_ICBVECOFF DW WR_ICBVEC ;AN000;ICB vector address +WR_ICBVECSEG DW DATA ;AN000;ICB vector address +; +; Return key string internal variables: +; Dynamic return key string variables to add to complete return string +; +WR_DRETLEN DW 0 ;AN000;dynamic return string length +WR_DRETOFF DW 0 ;AN000;dynamic return string offset +WR_DRETSEG DW 0 ;AN000;dynamic return string segment +; +; Complete return key string buffer variables +; +WR_CRETLEN DW 0 ;AN000;current length of complete ret sg +WR_CRETOFF DW 0 ;AN000;current offset of complete ret sg +WR_CRETSEG DW 0 ;AN000;current segment of complete ret s +; +; Help management internal variables: +; +; Help options, status, filespec, and override variables +; +WR_HLPOPT DW 0 ;AN000;help options +WR_HLPPAN DW 0 ;AN000;help child panels that are active +WR_HLPDIS DW 0 ;AN000;help status +WR_HLPROW DW 0 ;AN000;help row override +WR_HLPCOL DW 0 ;AN000;help column override +; +; Help text ID variables +; +WR_HCBCONT DW 0 ;AN000;current contextual help ID +WR_HCBHELP DW HCB_HELP ;AN000;help-on-help ID +WR_HCBKEYS DW HCB_KEYS ;AN000;help on keys ID +; +; Help scroll ID variable +; +WR_SCBCONT DW SCR_CONTEXT_HLP ;AN000;scroll contextual help ID +WR_SCBINDX DW SCR_CONTEXT_HLP ;AN000;scroll indexed help ID +; +; Help panel ID variables +; +WR_PCBHELP DW CHILD_F1HELP ;AN000;F1=Help +WR_PCBSWIT DW 0 ;AN000;F2=Switch +WR_PCBINDX DW 0 ;AN000;F5=Index +WR_PCBKEYS DW CHILD_F9KEYS ;AN000;F9=Keys +WR_PCBHPAN DW PAN_HPAN ;AN000;contextual help panel +WR_PCBQUIT DW CHILD_QUIT ;AN000;Esc=Quit +WR_PCBENTR DW CHILD_ENTER ;AN000;Enter +WR_PCBERROR DW ERR_BORDER ;AN000;Error panel +; +; Help keystroke variables +; +WR_KEYHELP DW KEY_HELP ;AN000;F1=Help +WR_KEYSWIT DW KEY_SWIT ;AN000;F2=Switch +WR_KEYINDX DW KEY_INDX ;AN000;F5=Index +WR_KEYKEYS DW KEY_KEYS ;AN000;F9=Keys +WR_KEYSELT DW KEY_SELT ;AN000;Enter +WR_KEYQUIT DW KEY_QUIT ;AN000;Esc=Quit + +WR_RETHLPBUF DB ESCAPE ;AN000;help dynamic return keys +WR_RETHLPLEN EQU ($-WR_RETHLPBUF) ;AN000; +;----------------------- +; +; Management internal variables: +; +WR_PANBUF LABEL BYTE ;AN000; +WR_SCRBUF LABEL BYTE ;AN000; +WR_CLRBUF DB 'SELECT.DAT',0 ;AN000;filespec +WR_CLRLEN EQU ($-WR_CLRBUF) ;AN000; +WR_SCRLEN EQU ($-WR_SCRBUF) ;AN000; +WR_PANLEN EQU ($-WR_PANBUF) ;AN000; +;----------------------- +WR_HLPBUF DB 'SELECT.HLP',0 ;AN000;filespec +WR_HLPLEN EQU ($-WR_HLPBUF) ;AN000; +; +; Panel Field Refresh Relationship Table +; +; Format = DW Panel control block number +; DW Total number of fields in this record +; DW Object type ID +; DW Field ID +; +; DW Object type ID +; DW Field ID +; +; Panel Field Refresh Table Location +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_REFNUM DW 1 ;AN000;number of PCB entries +WR_REFOFF DW WR_REFBUF ;AN000;offset of table +WR_REFSEG DW DATA ;AN000;segment of table +WR_REFCNT DW 0 ;AN000;refresh counter + +WR_REFBUF DW 0 ;AN000; PCB number +WR_REFIELDCNT DW 0 ;AN000; #fields with this PCB +WR_REFID DW 0,0 ;AN000; Object ID 1, Field ID 1 + DW 0,0 ;AN000; Object ID 2, Field ID 2 + DW 0,0 ;AN000; Object ID 3, Field ID 3 + DW 0,0 ;AN000; Object ID 4, Field ID 4 + DW 0,0 ;AN000; Object ID 5, Field ID 5 + DW 0,0 ;AN000; Object ID 6, Field ID 6 + DW 0,0 ;AN000; Object ID 7, Field ID 7 + DW 0,0 ;AN000; Object ID 8, Field ID 8 + DW 0,0 ;AN000; Object ID 9, Field ID 9 + DW 0,0 ;AN000; Object ID10, Field ID10 +WR_MAXREFID EQU ($-WR_REFID)/2;AN000; + +WR_SCBID DW 0 ;AN000;current PCSLCTP ID number +WR_ERROR DW 0 ;AN000;0= no error, 1= error condition +; +; Memory allocation variables - needs to support multiple segment table +; +WR_DATA2SEG DW 0 ;AN000;segment of allocated buffer +WR_DATA2OFF DW 0 ;AN000;offset of allocated buffer +WR_DATA2LEN DW 0 ;AN000;length of allocated buffer +; +WR_LVBSEG DW 0 ;AN000;segment of LVB (logical video buffer) +WR_LVBOFF DW 0 ;AN000;offset of LVB +WR_LVBLEN DW 0 ;AN000;length of LVB +; +; Maximum limits for data +; +WR_LVBMEM DW MAX_MEMLVB ;AN000;size of LVB in 16 byte paraghp +WR_MAXMEMPAR DW MAX_MEMPAR ;AN000;size of memory in 16 byte paraghp +WR_MAXRETKSZ DW MAX_RETKSZ ;AN000;max size of return key buffer +WR_MAXHELPSZ DW MAX_HELPSZ ;AN000;max size of help text buffer +WR_MAXPANNUM DW MAX_PANNUM ;AN000;max # of panels possible in memry +WR_MAXSCRNUM DW MAX_SCRNUM ;AN000;max # of scroll possible in memry +WR_MAXCHDQUE DW MAX_CHDQUE ;AN000;max # of child queues to save +WR_MAXPANQUE DW MAX_PANQUE ;AN000;max # of panel queues to save +WR_MAXNUMCHD DW MAX_NUMCHD ;AN000;max # of parent panels queued +WR_MAXNUMPAN DW MAX_NUMPAN ;AN000;max # of child panels queued +WR_MAXCLRECD DW MAX_CLRECD ;AN000;num # bytes per color record + +LVB_INITED DB 0 ;AN000;flag for LVB allocated +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +DATA ENDS ;AN000; +PAGE ;AN000; + \ No newline at end of file diff --git a/v4.0/src/SELECT/DOS.EQU b/v4.0/src/SELECT/DOS.EQU new file mode 100644 index 0000000..c1ec499 --- /dev/null +++ b/v4.0/src/SELECT/DOS.EQU @@ -0,0 +1,359 @@ +; +;****************************************************************************** +; DOS Interrupts +; +; REVISION HISTORY: +; +; PTM P00 - WAIT & LOCK to WAITP & LOCKF for MASM errors. DRM 4/23/87 +; +; A005 DCR0201 10/9/87 Incorperate new format for EXTENDED +; ATTRIBUTES. +; +;****************************************************************************** +; + +Terminate equ 20h ;AN000; +DOS_Function equ 21h ;AN000; +Terminate_Address equ 22h ;AN000; +CNTRL_BREAK equ 23h ;AN000; +Critical_Error equ 24h ;AN000; +Disk_Read equ 25h ;AN000; +Disk_Write equ 26h ;AN000; +Terminate_Stay_Resident equ 27h ;AN000; +Printer equ 2Fh ;AN000; +CHK_APPEND EQU 0B700H ;AN000; CHECK IF APPEND ACTIVE INT 2FH +GET_APPEND EQU 0B706H ;AN000; Read /X status with INT 2FH + ; BX = 0 if /X is not active + ; BX = 1 if /X is active +SET_APPEND EQU 0B707H ;AN000; Set /X status with INT 2FH +EXT_OPEN EQU 6C00H ;AN000; Extended Open function code + CREATE_FLAG EQU 0112H ;AN005;FUNCTION CONTROL + CREATE_ATTR EQU 0 ;AN000;SEARCH/CREATE ATTRIBUTE + CREATE_MODE EQU 0011H ;AN000;CREATE MODE + OPN_FLAG EQU 0101H ;AN000;OPEN FUNCTION CONTROL + OPN_ATTR EQU 0 ;AN000;OPEN ATTRIBUTE + OPN_MODE EQU 0002H ;AN000;OPEN MODE + NUL_LIST EQU -1 ;AN005;JUST TO OPEN + +GET_ATTRIB EQU 05702H ;AN000; Get ext. attribute by handle +QUY_ATTRIB EQU 05703H ;AN000; QUERY EXT. ATTRIBUTES BY HANDLE + INT_ORDINAL EQU 0 ;AN000;ATTRIBUTE LIST ORDINAL = 0 + ALL_ATTR EQU -1 ;AN005;TO SELECT ALL THE ATTRIBUTES +; +;****************************************************************************** +; DOS Function Calls +;****************************************************************************** +; + +Program_Terminate equ 00h ;AN000; +Keyboard_Input equ 01h ;AN000; +Display_Output equ 02h ;AN000; +Auxiliary_Input equ 03h ;AN000; +Auxiliary_Output equ 04h ;AN000; +Printer_Output equ 05h ;AN000; +Direct_Console_IO equ 06h ;AN000; +Direct_Input_No_Echo equ 07h ;AN000; +Console_Input_No_Echo equ 08h ;AN000; +Print_String equ 09h ;AN000; +Buffered_Keyboard_Input equ 0Ah ;AN000; +Check_Std_Input_Status equ 0Bh ;AN000; +Clear_Keyboard_Buffer equ 0Ch ;AN000; +Disk_Reset equ 0Dh ;AN000; +Select_Disk equ 0Eh ;AN000; +FCB_Open equ 0Fh ;AN000; +FCB_Close equ 10h ;AN000; +Search_First equ 11h ;AN000; +Search_Next equ 12h ;AN000; +FCB_Delete equ 13h ;AN000; +Sequential_Read equ 14h ;AN000; +Sequential_Write equ 15h ;AN000; +FCB_Create equ 16h ;AN000; +FCB_Rename equ 17h ;AN000; +Current_Disk equ 19h ;AN000; +Set_DTA equ 1Ah ;AN000; +Allocation_Info equ 1Bh ;AN000; +Allocation_Info_Device equ 1Ch ;AN000; +Random_Read equ 21h ;AN000; +Random_Write equ 22h ;AN000; +File_Size equ 23h ;AN000; +Set_Relative_Record equ 24h ;AN000; +Set_Interrupt_Vector equ 25h ;AN000; +Create_New_PSP equ 26h ;AN000; +Random_Block_Read equ 27h ;AN000; +Random_Block_Write equ 28h ;AN000; +Parse_Filename equ 29h ;AN000; +Get_Date equ 2Ah ;AN000; +Set_Date equ 2Bh ;AN000; +Get_Time equ 2Ch ;AN000; +Set_Time equ 2Dh ;AN000; +Verify equ 2Eh ;AN000; + Verify_Off equ 02h ;AN000; + Verify_On equ 01h ;AN000; +Set_Verify_On equ 2E01h ;AN000; +Get_DTA equ 2Fh ;AN000; +DOS_Version equ 30h ;AN000; +Terminate_Resident equ 31h ;AN000; +Get_Interrupt_Vector equ 35h ;AN000; +Get_Disk_Free_Space equ 36h ;AN000; +Country_Code equ 38h ;AN000; +Mkdir equ 39h ;AN000; +Rmdir equ 3Ah ;AN000; +Chdir equ 3Bh ;AN000; +Create equ 3Ch ;AN000; +Open equ 3Dh ;AN000; + Read_Only equ 00h ;AN000; + Write_Only equ 01h ;AN000; + Read_Write equ 02h ;AN000; + Read_Only_Exclusive equ 10h ;AN000; + Write_Only_Exclusive equ 11h ;AN000; + Read_Write_Exclusive equ 12h ;AN000; + Read_Only_Deny_Write equ 20h ;AN000; + Write_Only_Deny_Write equ 21h ;AN000; + Read_Write_Deny_Write equ 22h ;AN000; + Read_Only_Deny_Read equ 30h ;AN000; + Write_Only_Deny_Read equ 31h ;AN000; + Read_Write_Deny_Read equ 32h ;AN000; + Read_Only_Deny_None equ 40h ;AN000; + Write_Only_Deny_None equ 41h ;AN000; + Read_Write_Deny_None equ 42h ;AN000; +Close equ 3Eh ;AN000; +Read equ 3Fh ;AN000; +Write equ 40h ;AN000; +Delete equ 41h ;AN000; +Lseek equ 42h ;AN000; + Lseek_Offset equ 00h ;AN000; + Lseek_Plus_Offset equ 01h ;AN000; + Lseek_End_Offset equ 02h ;AN000; +Chmod equ 43h ;AN000; +IOCTL equ 44h ;AN000; + Get_Device_Info equ 00h ;AN000; + Set_Device_Info equ 01h ;AN000; + Read_Channel equ 02h ;AN000; + Write_Channel equ 03h ;AN000; + Read_Drive_Channel equ 04h ;AN000; + Write_Drive_Channel equ 05h ;AN000; + Get_Input_Status equ 06h ;AN000; + Get_Output_Status equ 07h ;AN000; + Is_Removable equ 08h ;AN000; + Is_Block_Redirected equ 09h ;AN000; + Is_Handle_Redirected equ 0Ah ;AN000; + Set_Retry_Count equ 0Bh ;AN000; +Dup_Handle equ 45h ;AN000; +Force_Dup_Handle equ 46h ;AN000; +Get_Current_Directory equ 47h ;AN000; +Free_Memory equ 49h ;AN000; +Setblock equ 4Ah ;AN000; +Exec equ 4Bh ;AN000; +Exit equ 4Ch ;AN000; +Waitp equ 4Dh ;AN000; +Find_First equ 4Eh ;AN000; + norm_attr equ 00h ;AN000; + incl_read_attr equ 01h ;AN000; + incl_h_attr equ 02h ;AN000; + incl_h_s_attr equ 06h ;AN000; + incl_h_s_dir_attr equ 16h ;AN000; +Find_Next equ 4Fh ;AN000; +Get_Verify_Setting equ 54h ;AN000; +Rename equ 56h ;AN000; +File_Date_Time equ 57h ;AN000; + Get_File_Time equ 00h ;AN000; + Set_File_Time equ 01h ;AN000; +Get_Extended_Error equ 59h ;AN000; +Create_Temp equ 5Ah ;AN000; +Create_New equ 5Bh ;AN000; +File_Access equ 5Ch ;AN000; + Lockf equ 00h ;AN000; + Unlock equ 01h ;AN000; +Get_PSP equ 62h ;AN000; +Upper_Case_String equ 6521h ;AN000;GET EXTENDED COUNTRY INFORMATION +; +;****************************************************************************** +; DOS File Handles +;****************************************************************************** +; + +STDIN equ 00h ;AN000; +STDOUT equ 01h ;AN000; +STDERR equ 02h ;AN000; +STDAUX equ 03h ;AN000; +STDPRN equ 04h ;AN000; + + +; +;****************************************************************************** +; File's attributes in a Directory entry +;****************************************************************************** +; +read_only_file equ 01h ;AN000; +hidden_file equ 02h ;AN000; +system_file equ 04h ;AN000; +has_volume_label equ 08h ;AN000; +is_subdirectory equ 10h ;AN000; +archive_on equ 20h ;AN000; + +; +;****************************************************************************** +; Return Codes +;****************************************************************************** +; + +Errorlevel_0 equ 0 ;AN000; +Errorlevel_1 equ 1 ;AN000; +Errorlevel_2 equ 2 ;AN000; +Errorlevel_3 equ 3 ;AN000; +Errorlevel_4 equ 4 ;AN000; +Errorlevel_5 equ 5 ;AN000; +Errorlevel_6 equ 6 ;AN000; +Errorlevel_7 equ 7 ;AN000; +Errorlevel_8 equ 8 ;AN000; + +; +;****************************************************************************** +; Extended Error Codes +;****************************************************************************** +; + +Error_No_Error equ 00 ;AN000; +Error_Invalid_Function equ 01 ;AN000; +Error_File_Not_Found equ 02 ;AN000; +Error_Path_Not_Found equ 03 ;AN000; +Error_No_Handles_Left equ 04 ;AN000; +Error_Access_Denied equ 05 ;AN000; +Error_Invalid_Handle equ 06 ;AN000; +Error_Memory_Blocks_Bad equ 07 ;AN000; +Error_Insufficient_Memory equ 08 ;AN000; +Error_Inv_Address equ 09 ;AN000; +Error_Inv_Environment equ 10 ;AN000; +Error_Inv_Format equ 11 ;AN000; +Error_Inv_Access_Code equ 12 ;AN000; +Error_Inv_Data equ 13 ;AN000; +Error_Inv_Drive equ 15 ;AN000; +Error_Rmdir_Current_Dir equ 16 ;AN000; +Error_Not_Same_Device equ 17 ;AN000; +Error_No_More_Files equ 18 ;AN000; +Error_Write_Protect equ 19 ;AN000; +Error_Unknown_Unit equ 20 ;AN000; +Error_Drive_Not_Ready equ 21 ;AN000; +Error_Unknown_Command equ 22 ;AN000; +Error_Data_Error equ 23 ;AN000; +Error_Bad_Request_Len equ 24 ;AN000; +Error_Seek_Error equ 25 ;AN000; +Error_Unknown_Media_Type equ 26 ;AN000; +Error_Sector_Not_Found equ 27 ;AN000; +Error_Out_Of_Paper equ 28 ;AN000; +Error_Write_Fault equ 29 ;AN000; +Error_Read_Fault equ 30 ;AN000; +Error_Gerneral_Failure equ 31 ;AN000; +Error_Sharing_Violation equ 32 ;AN000; +Error_Lock_Violation equ 33 ;AN000; +Error_Inv_Disk_Change equ 34 ;AN000; +Error_FCB_Unavailable equ 35 ;AN000; +Error_File_Exists equ 80 ;AN000; +Error_Cannot_Make equ 82 ;AN000; +Error_Fail_On_Int24 equ 83 ;AN000; + +; +;****************************************************************************** +; Extended Error Classes +;****************************************************************************** +; + +Out_Of_Resource equ 1 ;AN000; +Temporary equ 2 ;AN000; +Authorization equ 3 ;AN000; +Internal equ 4 ;AN000; +Hardware_Failure equ 5 ;AN000; +System_Failure equ 6 ;AN000; +Program_Error equ 7 ;AN000; +Not_Found equ 8 ;AN000; +Bad_Format equ 9 ;AN000; +Locked equ 10 ;AN000; +Media equ 11 ;AN000; +Already_Exists equ 12 ;AN000; +Unknown equ 13 ;AN000; + +; +;***************************************************************************** +; Extended Error Actions +;***************************************************************************** +; + +Retry equ 1 ;AN000; +Delay_Retry equ 2 ;AN000; +User equ 3 ;AN000; +Abort equ 4 ;AN000; +Immediate_Exit equ 5 ;AN000; +Ignore equ 6 ;AN000; +Retry_After_User equ 7 ;AN000; + +; +;****************************************************************************** +; Extended Error Locus +;****************************************************************************** +; + +Non_Specific equ 1 ;AN000; +Block_Device equ 2 ;AN000; +Serial_Device equ 4 ;AN000; +Memory equ 5 ;AN000; + +; +;****************************************************************************** +; Internal Program Initialization Errors +;****************************************************************************** +; + +Init_Err_DOS_Ver_1 equ 1 ;AN000;Bad DOS version prior to 2.0 +Init_Err_DOS_Ver_2 equ 2 ;AN000;Bad DOS version 2.0 or above +Init_Err_Inv_Drive equ 3 ;AN000;Invalid drive specification +Init_Err_Inv_Parm equ 4 ;AN000;Invalid parameter +Init_Err_Inv_Num_Parm equ 5 ;AN000;Invalid number of parameters +Init_Err_Inv_Path equ 6 ;AN000;Invalid path +Init_Err_Insuff_Mem equ 7 ;AN000;Insufficient memory +Init_Err_Inv_Date equ 8 ;AN000;Invalid date +Init_Err_Inv_Time equ 9 ;AN000;Invalid time +Init_Err_Inv_Device equ 10 ;AN000;Invalid device name +Init_Err_Ill_Device equ 11 ;AN000;Illegal device name +Init_Err_Inv_Filename equ 12 ;AN000;Invalid filename + +; +;****************************************************************************** +; FCB Structure +;****************************************************************************** +; + +FCB STRUC ;AN000; +Drive_Number db 0 ;AN000; +Filename_FCB db 8 dup(0) ;AN000; +Extension db 3 dup(0) ;AN000; +Current_Block dw 0 ;AN000; +Record_Size dw 0 ;AN000; +File_Size_Low_FCB dw 0 ;AN000; +File_Size_High_FCB dw 0 ;AN000; +File_Date_Time_FCB dw 0 ;AN000; +Reserved_FCB db 10 dup(0) ;AN000; +Current_Record db 0 ;AN000; +Relative_Record_Low dw 0 ;AN000; +Relative_Record_High dw 0 ;AN000; +FCB ENDS ;AN000; + + +; +;****************************************************************************** +; Find First/Next DTA area +;****************************************************************************** +; + +Find_DTA STRUC ;AN000; +DTA_Reserved db 21 dup(0) ;AN000; +DTA_Attribute db 0 ;AN000; +DTA_File_Time dw 0 ;AN000; +DTA_File_Date dw 0 ;AN000; +DTA_File_Size_Low dw 0 ;AN000; +DTA_File_Size_High dw 0 ;AN000; +DTA_Filename db 13 dup(0) ;AN000; +Find_DTA ENDS ;AN000; + + + + \ No newline at end of file diff --git a/v4.0/src/SELECT/DOSFILES.INC b/v4.0/src/SELECT/DOSFILES.INC new file mode 100644 index 0000000..62ced99 --- /dev/null +++ b/v4.0/src/SELECT/DOSFILES.INC @@ -0,0 +1,20 @@ +ALLOCATE_START DW 0 ;AN000; + ; +DEST DB 0 ;AN000; +FILE_NUM DW 0 ;AN000; +NUMBER_OF_FILES DW 0 ;AN000; +TABLE_OFFSET DW 0 ;AN000; +PATH_OFFSET DW 0 ;AN000; +NOT_FOUND_FLAG DB 0 ;AN000; +SP_SAVE DW 0 ;AN000; + ; +EVERYTHING DB 'B:*.*',0 ;AN000; + ; +DOS_FILE_PTR DW 0 ;AN000; +BUFFER_START DW 0 ;AN000; + ; +B_TARGET DB 'B:\',0 ;AN000; +LENGTH_B_TARGET EQU $-B_TARGET ;AN000; + ; +A_TARGET DB 'A:\',0 ;AN111;JW +LENGTH_A_TARGET EQU $-A_TARGET ;AN111;JW diff --git a/v4.0/src/SELECT/EXT.INC b/v4.0/src/SELECT/EXT.INC new file mode 100644 index 0000000..1b37c34 --- /dev/null +++ b/v4.0/src/SELECT/EXT.INC @@ -0,0 +1,577 @@ +; Change History: +; +; ;AN003; for DCR225 +; ;AN004; for DCR65 (360KB support) +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + EXTRN SUPPORT_STATUS:WORD ;AN000; + EXTRN I_USER_INDEX:WORD ;AN000; + EXTRN N_USER_NUMERIC:WORD ;AN000; + EXTRN MIN_INPUT_VAL:WORD ;AN000; + EXTRN MAX_INPUT_VAL:WORD ;AN000; + EXTRN S_USER_STRING:WORD ;AN000; + EXTRN P_USER_STRING:BYTE ;AN000; + EXTRN M_USER_STRING:ABS ;AN000; + EXTRN N_VALID_KEYS:WORD ;AN000; + EXTRN N_USER_FUNC:WORD ;AN000; + EXTRN E_ENTER:ABS ;AN000; + EXTRN E_ESCAPE:ABS ;AN000; + EXTRN E_TAB:ABS ;AN000; + EXTRN E_F3:ABS ;AN000; + EXTRN E_SPACE:ABS ;AN000; + EXTRN ERROR_KEYS:BYTE ;AN000; + EXTRN ERROR_KEYS_LEN:ABS ;AN000; + EXTRN E_QUIT:ABS ;AN000; + EXTRN E_RETURN:ABS ;AN000; + EXTRN FK_ENT_F3:BYTE ;AN000;DT + EXTRN FK_ENT_F3_LEN:ABS ;AN000;DT + EXTRN FK_ENT_ESC:BYTE ;AN000; + EXTRN FK_ENT_ESC_LEN:ABS ;AN000; + EXTRN FK_ENT_ESC_F3:BYTE ;AN003;GHG + EXTRN FK_ENT_ESC_F3_LEN:ABS ;AN003;GHG + EXTRN FK_ENT:BYTE ;AN000; + EXTRN FK_ENT_LEN:ABS ;AN000; + EXTRN FK_TEXT:BYTE ;AN000; + EXTRN FK_TEXT_LEN:ABS ;AN000; + EXTRN FK_SCROLL:BYTE ;AN000; + EXTRN FK_SCROLL_LEN:ABS ;AN000; + EXTRN FK_TAB:BYTE ;AN000; + EXTRN FK_TAB_LEN:ABS ;AN000; + EXTRN FK_REVIEW:BYTE ;AN000; + EXTRN FK_REVIEW_LEN:ABS ;AN000; + EXTRN FK_DATE:BYTE ;AN000; + EXTRN FK_DATE_LEN:ABS ;AN000; + EXTRN FK_FORMAT:BYTE ;AN000; + EXTRN FK_FORMAT_LEN:ABS ;AN000; + EXTRN FK_REBOOT:BYTE ;AN000; + EXTRN FK_REBOOT_LEN:ABS ;AN000; + EXTRN E_YES:ABS ;AN000; + EXTRN E_NO:ABS ;AN000; + EXTRN E_NA:ABS ;AN000; + EXTRN N_SELECT_MODE:WORD ;AN000; + EXTRN E_SELECT_MENU:ABS ;AN000; + EXTRN E_SELECT_FDISK:ABS ;AN000; + EXTRN E_SELECT_INV:ABS ;AN000; + EXTRN S_SELECT_TMP:WORD ;AN000; + EXTRN N_FORMAT_MODE:WORD ;AN000; + EXTRN E_FORMAT_SELECT:ABS ;AN000; + EXTRN E_FORMAT_NEW:ABS ;AN000; + EXTRN E_FORMAT_USED:ABS ;AN000; + EXTRN S_SPACE:WORD ;AN000; + EXTRN S_OFF:WORD ;AN000; + EXTRN S_ON:WORD ;AN000; + EXTRN I_WORKSPACE:WORD ;AN000; + EXTRN N_WORK_PREV:WORD ;AN000; + EXTRN E_WORKSPACE_BAL:ABS ;AN000; + EXTRN E_WORKSPACE_MIN:ABS ;AN000; + EXTRN E_WORKSPACE_MAX:ABS ;AN000; + EXTRN S_ANSI:WORD ;AN000; + EXTRN M_ANSI:ABS ;AN000; + EXTRN D_ANSI_1:WORD ;AN000; + EXTRN F_ANSI:WORD ;AN000; + EXTRN E_ANSI_NO:ABS ;AN000; + EXTRN E_ANSI_YES:ABS ;AN000; + EXTRN E_ANSI_B:ABS ;AN000; + EXTRN E_ANSI_C:ABS ;AN000; + EXTRN S_APPEND:WORD ;AN000; + EXTRN M_APPEND:ABS ;AN000; + EXTRN S_APPEND_P:WORD ;AN000;JW + EXTRN M_APPEND_P:ABS ;AN000;JW + EXTRN F_APPEND:WORD ;AN000; + EXTRN E_APPEND_NO:ABS ;AN000; + EXTRN E_APPEND_YES:ABS ;AN000; + EXTRN S_BREAK:WORD ;AN000; + EXTRN M_BREAK:ABS ;AN000; + EXTRN ST_BREAK:WORD ;AN000; + EXTRN MT_BREAK:ABS ;AN000; + EXTRN S_BUFFERS:WORD ;AN000; + EXTRN M_BUFFERS:ABS ;AN000; + EXTRN D_BUFFERS_1:WORD ;AN000; + EXTRN D_BUFFERS_2:WORD ;AN000; + EXTRN ST_BUFFERS:WORD ;AN000; + EXTRN MT_BUFFERS:ABS ;AN000; + EXTRN S_CPSW:WORD ;AN000; + EXTRN M_CPSW:ABS ;AN000; + EXTRN F_CPSW:WORD ;AN000; + EXTRN E_CPSW_NO:ABS ;AN000; + EXTRN E_CPSW_YES:ABS ;AN000; + EXTRN E_CPSW_NA:ABS ;AN000; + EXTRN E_CPSW_B:ABS ;AN000; + EXTRN E_CPSW_C:ABS ;AN000; + EXTRN ST_CPSW:WORD ;AN000; + EXTRN MT_CPSW:ABS ;AN000; + EXTRN N_CPSW:WORD ;AN000; + EXTRN E_CPSW_NOT_VAL:ABS ;AN000; + EXTRN E_CPSW_NOT_REC:ABS ;AN000; + EXTRN E_CPSW_VALID:ABS ;AN000; + EXTRN S_FASTOPEN:WORD ;AN000; + EXTRN M_FASTOPEN:ABS ;AN000; + EXTRN D_FASTOPEN_1:WORD ;AN000; + EXTRN D_FASTOPEN_2:WORD ;AN000; + EXTRN F_FASTOPEN:WORD ;AN000; + EXTRN E_FASTOPEN_NO:ABS ;AN000; + EXTRN E_FASTOPEN_YES:ABS ;AN000; + EXTRN E_FASTOPEN_C:ABS ;AN000; + EXTRN S_FCBS:WORD ;AN000; + EXTRN M_FCBS:ABS ;AN000; + EXTRN D_FCBS_1:WORD ;AN000; + EXTRN ST_FCBS:WORD ;AN000; + EXTRN MT_FCBS:ABS ;AN000; + EXTRN S_FILES:WORD ;AN000; + EXTRN M_FILES:ABS ;AN000; + EXTRN D_FILES_1:WORD ;AN000; + EXTRN D_FILES_2:WORD ;AN000; + EXTRN ST_FILES:WORD ;AN000; + EXTRN MT_FILES:ABS ;AN000; + EXTRN S_GRAPHICS:WORD ;AN000; + EXTRN M_GRAPHICS:ABS ;AN000; + EXTRN F_GRAPHICS:WORD ;AN000; + EXTRN E_GRAPHICS_NO:ABS ;AN000; + EXTRN E_GRAPHICS_YES:ABS ;AN000; + EXTRN E_GRAPHICS_B:ABS ;AN000; + EXTRN E_GRAPHICS_C:ABS ;AN000; + EXTRN F_GRAFTABL:WORD ;AN000; + EXTRN E_GRAFTABL_NO:ABS ;AN000; + EXTRN E_GRAFTABL_YES:ABS ;AN000; + EXTRN E_GRAFTABL_NA:ABS ;AN000; + EXTRN E_GRAFTABL_B:ABS ;AN000; + EXTRN E_GRAFTABL_C:ABS ;AN000; + EXTRN S_LASTDRIVE:WORD ;AN000; + EXTRN M_LASTDRIVE:ABS ;AN000; + EXTRN D_LASTDRIVE_1:WORD ;AN000; + EXTRN ST_LASTDRIVE:WORD ;AN000; + EXTRN MT_LASTDRIVE:ABS ;AN000; + EXTRN S_PATH:WORD ;AN000; + EXTRN M_PATH:ABS ;AN000; + EXTRN F_PATH:WORD ;AN000; + EXTRN E_PATH_NO:ABS ;AN000; + EXTRN E_PATH_YES:ABS ;AN000; + EXTRN S_PROMPT:WORD ;AN000; + EXTRN M_PROMPT:ABS ;AN000; + EXTRN D_PROMPT_1:WORD ;AN000; + EXTRN F_PROMPT:WORD ;AN000; + EXTRN E_PROMPT_NO:ABS ;AN000; + EXTRN E_PROMPT_YES:ABS ;AN000; + EXTRN S_SHARE:WORD ;AN000; + EXTRN F_SHARE:WORD ;AN000; + EXTRN M_SHARE:ABS ;AN000; + EXTRN E_SHARE_NO:ABS ;AN000; + EXTRN E_SHARE_YES:ABS ;AN000; + EXTRN E_SHARE_C:ABS ;AN000; + EXTRN S_SHELL:WORD ;AN000; + EXTRN M_SHELL:ABS ;AN000; + EXTRN D_SHELL_1:WORD ;AN000; + EXTRN D_SHELL_2:WORD ;AN000; + EXTRN F_SHELL:WORD ;AN000; + EXTRN E_SHELL_NO:ABS ;AN000; + EXTRN E_SHELL_YES:ABS ;AN000; + EXTRN E_SHELL_B:ABS ;AN000; + EXTRN E_SHELL_C:ABS ;AN000; + EXTRN S_STACKS:WORD ;AN000; + EXTRN M_STACKS:ABS ;AN000; + EXTRN ST_STACKS:WORD ;AN000; + EXTRN MT_STACKS:ABS ;AN000; + EXTRN S_VDISK:WORD ;AN000; + EXTRN M_VDISK:ABS ;AN000; + EXTRN F_VDISK:WORD ;AN000; + EXTRN E_VDISK_NO:ABS ;AN000; + EXTRN E_VDISK_YES:ABS ;AN000; + EXTRN E_VDISK_B:ABS ;AN000; + EXTRN E_VDISK_C:ABS ;AN000; + EXTRN S_VERIFY:WORD ;AN000; + EXTRN M_VERIFY:ABS ;AN000; + EXTRN ST_VERIFY:WORD ;AN000; + EXTRN MT_VERIFY:ABS ;AN000; + EXTRN S_XMAEM:WORD ;AN000; + EXTRN M_XMAEM:ABS ;AN000; + EXTRN S_XMA2EMS:WORD ;AN000; + EXTRN M_XMA2EMS:ABS ;AN000; + EXTRN D_XMA2EMS_1:WORD ;AN000; + EXTRN F_XMA:WORD ;AN000; + EXTRN E_XMA_NO:ABS ;AN000; + EXTRN E_XMA_YES:ABS ;AN000; + EXTRN E_XMA_NA:ABS ;AN000; + EXTRN E_XMA_C:ABS ;AN000; + EXTRN N_XMA:WORD ;AN000; + EXTRN E_XMA_ABSENT:ABS ;AN000; + EXTRN E_XMA_PRESENT:ABS ;AN000; + EXTRN I_DEST_DRIVE:WORD ;AN000; + EXTRN E_DEST_DRIVE_C:ABS ;AN000; + EXTRN E_DEST_DRIVE_B:ABS ;AN000; + EXTRN E_DEST_DRIVE_A:ABS ;AN111;JW + EXTRN N_DEST_DRIVE:BYTE ;AN000; + EXTRN E_DEST_SELECT:ABS ;AN000; + EXTRN E_DEST_USER:ABS ;AN000; + EXTRN N_DISKETTE_TOT:BYTE ;AN000; + EXTRN N_ZERO_DISKETTE:ABS ;AN000; + EXTRN N_DISKETTE_A:BYTE ;AN000; + EXTRN N_DISKETTE_B:BYTE ;AN000; + EXTRN E_DISKETTE_INV:ABS ;AN000; + EXTRN E_DISKETTE_360:ABS ;AN000; + EXTRN E_DISKETTE_720:ABS ;AN000; + EXTRN E_DISKETTE_1200:ABS ;AN000; + EXTRN E_DISKETTE_1440:ABS ;AN000; + EXTRN S_DEST_DRIVE:WORD ;AN000; + EXTRN M_DEST_DRIVE:ABS ;AN000; + EXTRN S_DRIVE_A:WORD ;AN000; + EXTRN S_A_DRIVE:WORD ;AN039;SEH + EXTRN S_B_DRIVE:WORD ;AN039;SEH + EXTRN S_C_DRIVE:WORD ;AN000;JW + EXTRN S_DOS_LOC:WORD ;AN000; + EXTRN M_DOS_LOC:ABS ;AN000; + EXTRN D_DOS_LOC_1:WORD ;AN000; + EXTRN S_INSTALL_PATH:WORD ;AN000; + EXTRN M_INSTALL_PATH:ABS ;AN000; + EXTRN I_CTY_KYBD:WORD ;AN000; + EXTRN E_CTY_KB_PREDEF:ABS ;AN000; + EXTRN E_CTY_KB_USER:ABS ;AN000; + EXTRN N_CTY_LIST:WORD ;AN000; + EXTRN E_CTY_LIST_1:ABS ;AN000; + EXTRN E_CTY_LIST_2:ABS ;AN000; + EXTRN I_COUNTRY:WORD ;AN000; + EXTRN N_COUNTRY:WORD ;AN000; + EXTRN N_KYBD_LIST:WORD ;AN000; + EXTRN E_KYBD_LIST_1:ABS ;AN000; + EXTRN E_KYBD_LIST_2:ABS ;AN000; + EXTRN I_KEYBOARD:WORD ;AN000; + EXTRN S_KEYBOARD:WORD ;AN000; + EXTRN M_KEYBOARD:ABS ;AN000; + EXTRN N_KYBD_VAL:BYTE ;AN000; + EXTRN E_KYBD_VAL_NO:ABS ;AN000; + EXTRN E_KYBD_VAL_YES:ABS ;AN000; + EXTRN E_KYBD_VAL_DEF:ABS ;AN000; + EXTRN N_DESIGNATES:WORD ;AN000; + EXTRN N_CP_PRI:WORD ;AN000; + EXTRN N_CP_SEC:WORD ;AN000; + EXTRN I_KYBD_ALT:WORD ;AN000; + EXTRN S_KYBD_ALT:WORD ;AN000; + EXTRN M_KYBD_ALT:ABS ;AN000; + EXTRN N_KYBD_ALT:BYTE ;AN000; + EXTRN E_KYBD_ALT_NO:ABS ;AN000; + EXTRN E_KYBD_ALT_YES:ABS ;AN000; + EXTRN N_KYB_LOAD:WORD ;AN000; + EXTRN E_KYB_LOAD_SUC:ABS ;AN000; + EXTRN E_KYB_LOAD_ERR:ABS ;AN000; + EXTRN E_KYB_LOAD_US:ABS ;AN000; + EXTRN E_KYB_LOAD_UND:ABS ;AN000; + EXTRN CTY_TAB_A:BYTE ;AN000; + EXTRN CTY_TAB_A_1:BYTE ;AN000; + EXTRN CTY_A_ITEMS:ABS ;AN000; + EXTRN CTY_TAB_B:BYTE ;AN000; + EXTRN CTY_TAB_B_1:BYTE ;AN000; + EXTRN CTY_B_ITEMS:ABS ;AN000; + EXTRN N_CTY_RES:BYTE ;AN000; + EXTRN KYBD_TAB_A:BYTE ;AN000; + EXTRN KYBD_TAB_A_1:BYTE ;AN000; + EXTRN KYBD_A_ITEMS:ABS ;AN000; + EXTRN KYBD_TAB_B:BYTE ;AN000; + EXTRN KYBD_TAB_B_1:BYTE ;AN000; + EXTRN KYBD_B_ITEMS:ABS ;AN000; + EXTRN ALT_TAB_PTR:WORD ;AN000; + EXTRN ALT_KYB_ID:BYTE ;AN000; + EXTRN ALT_KYB_ID_PREV:BYTE ;AN000; + EXTRN ALT_FRENCH:ABS ;AN000; + EXTRN ALT_ITALIAN:ABS ;AN000; + EXTRN ALT_UK:ABS ;AN000; + EXTRN ALT_KYB_TABLE:BYTE ;AN000; + EXTRN ALT_KYB_TAB_1:BYTE ;AN000; + EXTRN ALT_KYB_ITEMS:ABS ;AN000; + EXTRN ALT_KYBD_FR:BYTE ;AN000; + EXTRN ALT_KYBD_FR_1:WORD ;AN000; + EXTRN ALT_FR_ITEMS:ABS ;AN000; + EXTRN ALT_KYBD_IT:BYTE ;AN000; + EXTRN ALT_KYBD_IT_1:BYTE ;AN000; + EXTRN ALT_IT_ITEMS:ABS ;AN000; + EXTRN ALT_KYBD_UK:BYTE ;AN000; + EXTRN ALT_KYBD_UK_1:BYTE ;AN000; + EXTRN ALT_UK_ITEMS:ABS ;AN000; + EXTRN ALT_ID_DEF:BYTE ;AN000;DT + EXTRN S_US:WORD ;AN000; + EXTRN S_SWISS:WORD ;AN000; + EXTRN N_NUMPRINT:WORD ;AN000; + EXTRN MIN_NUMPRINT:ABS ;AN000; + EXTRN MAX_NUMPRINT:ABS ;AN000; + EXTRN N_PARALLEL:WORD ;AN000; + EXTRN N_SERIAL:WORD ;AN000; + EXTRN PRINTER_TABLES:ABS ;AN000; + EXTRN I_PRINTER:WORD ;AN000; + EXTRN N_PRINTER_TYPE:BYTE ;AN000; + EXTRN E_SERIAL:ABS ;AN000; + EXTRN E_PARALLEL:ABS ;AN000; + EXTRN I_PORT:WORD ;AN000; + EXTRN I_REDIRECT:WORD ;AN000; + EXTRN S_MODE_PARM:WORD ;AN000; + EXTRN M_MODE_PARM:ABS ;AN000; + EXTRN S_CP_DRIVER:WORD ;AN000; + EXTRN M_CP_DRIVER:ABS ;AN000; + EXTRN S_CP_PREPARE:WORD ;AN000; + EXTRN M_CP_PREPARE:ABS ;AN000; + EXTRN S_GRAPH_PARM:WORD ;AN000; + EXTRN M_GRAPH_PARM:ABS ;AN000; + EXTRN F_REVIEW:WORD ;AN000; + EXTRN E_REVIEW_ACCEPT:ABS ;AN000; + EXTRN E_REVIEW_VIEW:ABS ;AN000; + EXTRN N_DISPLAY:BYTE ;AN000; + EXTRN E_CPSW_DISP:ABS ;AN000; + EXTRN E_NOCPSW_DISP:ABS ;AN000; + EXTRN N_YEAR:WORD ;AN000; + EXTRN MIN_YEAR:ABS ;AN000; + EXTRN MAX_YEAR:ABS ;AN000; + EXTRN N_MONTH:WORD ;AN000; + EXTRN MIN_MONTH:ABS ;AN000; + EXTRN MAX_MONTH:ABS ;AN000; + EXTRN N_DAY:WORD ;AN000; + EXTRN MIN_DAY:ABS ;AN000; + EXTRN MAX_DAY:ABS ;AN000; + EXTRN N_HOUR:WORD ;AN000; + EXTRN MIN_HOUR:ABS ;AN000; + EXTRN MAX_HOUR:ABS ;AN000; + EXTRN N_MINUTE:WORD ;AN000; + EXTRN MIN_MINUTE:ABS ;AN000; + EXTRN MAX_MINUTE:ABS ;AN000; + EXTRN N_SECOND:WORD ;AN000; + EXTRN MIN_SECOND:ABS ;AN000; + EXTRN MAX_SECOND:ABS ;AN000; + EXTRN PARM_BLOCK:WORD ;AN000; + EXTRN CMD_BUFF:BYTE ;AN000; + EXTRN S_STR40:WORD ;AN000;JW + EXTRN M_STR40:ABS ;AN000;JW + EXTRN S_STR120_1:WORD ;AN000; + EXTRN P_STR120_1:BYTE ;AN000; + EXTRN M_STR120_1:ABS ;AN000; + EXTRN S_STR120_2:WORD ;AN000; + EXTRN M_STR120_2:ABS ;AN000; + EXTRN S_STR120_3:WORD ;AN000; + EXTRN M_STR120_3:ABS ;AN000; + EXTRN S_STR120_4:WORD ;AN039;SEH + EXTRN M_STR120_4:ABS ;AN039;SEH + EXTRN SC_LINE:WORD ;AN000; + EXTRN MC_LINE:ABS ;AN000; + EXTRN COPY_INST_1200_1440:BYTE ;AN000; + EXTRN E_INST_1200_1440:ABS ;AN000; + EXTRN COPY_SEL_SHEL:BYTE ;AN000; + EXTRN E_SEL_SHEL:ABS ;AN000; + EXTRN COPY_SEL_EGA:BYTE ;AN000; + EXTRN E_SEL_EGA:ABS ;AN000; + EXTRN COPY_SEL_LCD:BYTE ;AN000; + EXTRN E_SEL_LCD:ABS ;AN000; + EXTRN COPY_OPER_1200_1440:BYTE ;AN000; + EXTRN E_OPER_1200_1440:ABS ;AN000; + EXTRN COPY_SHELL_1200_1440:BYTE ;AN000; + EXTRN E_SHELL_1200_1440:ABS ;AN000; + EXTRN S_DOS_SHEL_DISK:WORD ;AN000; + EXTRN S_DOS_SEL_360:WORD ;AN000;GHG 360KB + EXTRN S_DOS_UTIL1_DISK:WORD ;AN000;GHG 360KB + EXTRN S_DOS_UTIL2_DISK:WORD ;AN000;GHG 360KB + EXTRN S_DOS_UTIL3_DISK:WORD ;AN000;GHG 360KB + EXTRN S_DOS_COM_360:WORD ;AN000;DT 360KB + EXTRN E_FILE_ATTR:ABS ;AN000; + EXTRN S_SHELL2:BYTE ;AN000;DT + EXTRN S_SHELL_NEW:WORD ;AN000;DT + EXTRN S_SHELL_NEW_B:WORD ;AN000;DT + EXTRN S_DSKCPY_TO_B:WORD ;AN000;DT + EXTRN S_SELCOM_NEW_B:WORD ;AN000;DT + EXTRN S_SELHLP_NEW_B:WORD ;AN000;DT + EXTRN S_SELPRT_NEW_B:WORD ;AN000;DT + EXTRN S_SELEXE_NEW_B:WORD ;AN000;DT + EXTRN S_SELDAT_NEW_B:WORD ;AN000;DT + EXTRN S_SELCOM_C:WORD ;AN000;DT + EXTRN S_SELDAT_C:WORD ;AN000;DT + EXTRN S_SELPRT_C:WORD ;AN000;DT + EXTRN S_SELEXE_C:WORD ;AN000;DT + EXTRN S_SELHLP_C:WORD ;AN000;DT + EXTRN S_AUTOEX_C:WORD ;AN000;DT + EXTRN S_CONSYS_C:WORD ;AN000;DT + EXTRN S_VDISK_B:WORD ;AN000;JW + EXTRN S_ANSI_B:WORD ;AN000;JW + EXTRN S_APPEND_B:WORD ;AN000;JW + EXTRN S_GRAFTABL_B:WORD ;AN000;JW + EXTRN S_GRAPHICS_B:WORD ;AN000;JW + EXTRN S_GRAPHPRO_B:WORD ;AN000;JW + EXTRN S_RECOVER_B:WORD ;AN000;JW + EXTRN S_FASTOPEN_B:WORD ;AN000;JW + EXTRN S_VDISK_C:WORD ;AN000;JW + EXTRN S_ANSI_C:WORD ;AN000;JW + EXTRN S_APPEND_C:WORD ;AN000;JW + EXTRN S_GRAFTABL_C:WORD ;AN000;JW + EXTRN S_GRAPHICS_C:WORD ;AN000;JW + EXTRN S_GRAPHPRO_C:WORD ;AN000;JW + EXTRN S_RECOVER_C:WORD ;AN000;JW + EXTRN S_FASTOPEN_C:WORD ;AN000;JW + EXTRN S_AUTO_NEW:WORD ;AN000; + EXTRN S_CONFIG_NEW:WORD ;AN000; + EXTRN S_AUTO_NEW_B:WORD ;AN000; + EXTRN S_CONFIG_NEW_B:WORD ;AN000; + EXTRN S_OS2_CONFIG_C:WORD ;AN065;SEH + EXTRN S_OS2_AUTO_C:WORD ;AN065;SEH + EXTRN S_AUTO_REN:WORD ;AN000; + EXTRN S_CONFIG_REN:WORD ;AN000; + EXTRN S_AUTO_NEW_C:WORD ;AN000; + EXTRN S_CONFIG_NEW_C:WORD ;AN000; + EXTRN S_AUTO_C:WORD ;AN000; + EXTRN S_CONFIG_C:WORD ;AN000; + EXTRN S_CONFIG_AUTO:BYTE ;AN000; + EXTRN S_AUTO_MENU:WORD ;AN000; + EXTRN S_AUTO_FDISK:WORD ;AN000; + EXTRN S_AUTO_REBOOT:WORD ;AN000; + EXTRN E_FILES:ABS ;AN000; + EXTRN SH_FILES:ABS ;AN000;DT + EXTRN HIDE_SEL:BYTE ;AN000; + EXTRN HIDE_STARTUP:BYTE ;AN004;GHG + EXTRN E_HIDE_SEL:ABS ;AN000; + EXTRN E_HIDE_STARTUP:ABS ;AN004;GHG + EXTRN S_PREP_EGA:WORD ;AN000; + EXTRN S_PREP_LCD:WORD ;AN000; + EXTRN S_CP_SEL:WORD ;AN000; + EXTRN S_MODE:WORD ;AN000; + EXTRN N_HANDLE:WORD ;AN000; + EXTRN N_WRITE_HANDLE:WORD ;AN000; + EXTRN N_WRITE_ERR_CODE:WORD ;AN000; + EXTRN N_RETCODE:WORD ;AN000; + EXTRN N_COUNTER:WORD ;AN000; + EXTRN N_WORD_1:WORD ;AN000; + EXTRN N_WORD_2:WORD ;AN000; + EXTRN N_WORD_3:WORD ;AN000; + EXTRN N_WORD_4:WORD ;AN000; + EXTRN N_WORD_5:WORD ;AN000; + EXTRN N_WORD_6:WORD ;AN000; + EXTRN N_BYTE_1:BYTE ;AN025; + EXTRN SAVE_AREA:BYTE ;AN000; + EXTRN S_KEYB:WORD ;AN000; + EXTRN S_FDISK:WORD ;AN000; + EXTRN S_DISKCOPY:WORD ;AN000; + EXTRN S_DISKCOPY_PARM:WORD ;AN000; + EXTRN SC_1:WORD ;AN000; + EXTRN SC_2:WORD ;AN000; + EXTRN SC_PRI:WORD ;AN000; + EXTRN SC_EXT:WORD ;AN000; + EXTRN SC_LOG:WORD ;AN000; + EXTRN S_FORMAT:WORD ;AN000; + EXTRN S_FORMAT_B:WORD ;AN000; + EXTRN S_FORMAT_A:WORD ;AN000; + EXTRN S_REPLACE:WORD ;AN000; + EXTRN S_REPLACE_PAR1:WORD ;AN000; + EXTRN S_A_STARS:WORD ;AN000; + EXTRN S_SLASH_A:WORD ;AN000; + EXTRN S_SLASH_R:WORD ;AN000;JW + EXTRN S_SLASH_S:WORD ;AN000; + EXTRN S_SLASH_Q:WORD ;AN000; + EXTRN S_SLASH:WORD ;AN000;DT + EXTRN S_COLON:WORD ;AN000; + EXTRN S_SYS_C:WORD ;AN000; + EXTRN S_VOL_SEL:WORD ;AN000; + EXTRN S_DRIVE_C:WORD ;AN000; + EXTRN N_HOUSE_CLEAN:BYTE ;AN000; + EXTRN E_CLEAN_YES:ABS ;AN000; + EXTRN E_CLEAN_NO:ABS ;AN000; + EXTRN E_CR:ABS ;AN000; + EXTRN E_LF:ABS ;AN000; + EXTRN E_PART_PRI_DOS:ABS ;AN000; + EXTRN E_PART_EXT_DOS:ABS ;AN000; + EXTRN E_PART_LOG_DRI:ABS ;AN000; + EXTRN E_FREE_MEM_EDOS:ABS ;AN000; + EXTRN E_FREE_MEM_DISK:ABS ;AN000; + EXTRN E_PART_OTHER:ABS ;AN000; + EXTRN E_PART_UNFORMAT:ABS ;AN000; + EXTRN E_PART_FORMAT:ABS ;AN000; + EXTRN E_PART_FAT:ABS ;AN000; + EXTRN E_PART_KSAM:ABS ;AN000; + EXTRN E_PART_UNDEF:ABS ;AN000; + EXTRN E_PART_IGNORE:ABS ;AN000; + EXTRN N_DISK_1:WORD ;AN000; + EXTRN E_DISK_1:ABS ;AN000; + EXTRN N_DISK_2:WORD ;AN000; + EXTRN E_DISK_2:ABS ;AN000; + EXTRN E_DISK_INV:ABS ;AN000; + EXTRN E_DISK_NO_PART:ABS ;AN000; + EXTRN E_DISK_VAL_PART:ABS ;AN000; + EXTRN N_DISK_1_S1:WORD ;AN000; + EXTRN N_DISK_2_S1:WORD ;AN000; + EXTRN E_DISK_PRI:ABS ;AN000; + EXTRN E_DISK_EXT_DOS:ABS ;AN000; + EXTRN E_DISK_LOG_DRI:ABS ;AN000; + EXTRN E_DISK_EDOS_MEM:ABS ;AN000; + EXTRN E_DISK_FREE_MEM:ABS ;AN000; + EXTRN N_DISK_1_S2:WORD ;AN000; + EXTRN N_DISK_2_S2:WORD ;AN000; + EXTRN E_SPACE_NONE:ABS ;AN000; + EXTRN E_SPACE_EDOS:ABS ;AN000; + EXTRN E_SPACE_DISK:ABS ;AN000; + EXTRN F_PARTITION:WORD ;AN000; + EXTRN E_PART_DEFAULT:ABS ;AN000; + EXTRN E_PART_USER:ABS ;AN000; + EXTRN F_FORMAT:WORD ;AN000; + EXTRN E_FORMAT_FAT:ABS ;AN000; + EXTRN E_FORMAT_NO:ABS ;AN000; + EXTRN N_DISK1_MODE:WORD ;AN000; + EXTRN E_DISK1_INSTALL:ABS ;AN000; + EXTRN E_DISK1_REPLACE:ABS ;AN000; + EXTRN DISK_1_TABLE:BYTE ;AN000; + EXTRN DISK_1_VAL_ITEM:BYTE ;AN000; + EXTRN DISK_1_START:BYTE ;AN000; + EXTRN M_DISK_1_ITEMS:ABS ;AN000; + EXTRN DISK_2_TABLE:BYTE ;AN000; + EXTRN DISK_2_VAL_ITEM:BYTE ;AN000; + EXTRN DISK_2_START:BYTE ;AN000; + EXTRN M_DISK_2_ITEMS:ABS ;AN000; + EXTRN N_NAME_PART:BYTE ;AN000; + EXTRN N_SIZE_PART:WORD ;AN000; + EXTRN N_STATUS_PART:BYTE ;AN000; + EXTRN N_TYPE_PART:BYTE ;AN000; + EXTRN P_DRIVE_PART:BYTE ;AN000; + EXTRN N_LEVEL1_PART:BYTE ;AN065;SEH version number for DOS 4.00 1st part = blank + EXTRN N_LEVEL2_PART:BYTE ;AN065;SEH version number for DOS 4.00 2nd part = 4 + EXTRN N_LEVEL3_PART:BYTE ;AN065;SEH version number for DOS 4.00 3rd part = . + EXTRN N_LEVEL4_PART:BYTE ;AN065;SEH version number for DOS 4.00 4th part = 0 + EXTRN STACK_INDEX:BYTE ;AN000; + EXTRN SELECT_STACK:WORD ;AN000; + EXTRN STACK_SIZE:ABS ;AN000; + EXTRN N_DEST:BYTE ;AN000; + EXTRN E_DEST_DOS:ABS ;AN000; + EXTRN E_DEST_SHELL:ABS ;AN000; + EXTRN INT_24_ERROR:WORD ;AN000; + EXTRN INT_24_FLAG:BYTE ;AN000; + EXTRN OLD_INT_24:DWORD ;AN000; + EXTRN OLD_INT_23:DWORD ;AN000; + EXTRN OLD_INT_2F:DWORD ;AN000; + EXTRN ACTIVE:BYTE ;AN000; + EXTRN ALTERNATE:BYTE ;AN000; + EXTRN EGA:ABS ;AN000; + EXTRN LCD:ABS ;AN000; + EXTRN CGA:ABS ;AN000; + EXTRN MONO:ABS ;AN000; + EXTRN S_PRINT_FILE:WORD ;AN000; + EXTRN M_PRINT_FILE:ABS ;AN000; + EXTRN I_DESTINATION:WORD ;AN000;JW + EXTRN E_ENTIRE_DISK:ABS ;AN000;JW + EXTRN N_MOD80:WORD ;AN000;JW + EXTRN E_IS_MOD80:ABS ;AN000;JW + EXTRN E_DISK_ROW:ABS ;AN000;JW + EXTRN E_DISK_COL:ABS ;AN000;JW + EXTRN E_DRIVE_ROW:ABS ;AN000;JW + EXTRN E_DRIVE_COL:ABS ;AN000;JW + EXTRN N_DISK_NUM:BYTE ;AN000;JW + EXTRN MEM_SIZE:WORD ;AN000;DT + EXTRN MACHINE_TYPE:BYTE ;AN000;JW + EXTRN PS2_FLAG:BYTE ;AN000;JW + EXTRN MOD25_OR_MOD30:ABS ;AN000;JW + EXTRN DRIVE_A:ABS ;AN000;JW + EXTRN DRIVE_B:ABS ;AN000;JW + EXTRN N_DSKCPY_ERR:BYTE ;AN000;JW + EXTRN E_DSKCPY_RETRY:ABS ;AN000;JW + EXTRN E_DSKCPY_OK:ABS ;AN000;JW + EXTRN N_DRIVE_OPTION:WORD ;AN111;JW + EXTRN E_OPTION_B_C:ABS ;AN111;JW + EXTRN E_OPTION_A_C:ABS ;AN111;JW + EXTRN SOURCE_PANEL:WORD ;AN111;JW + EXTRN DEST_PANEL:WORD ;AN111;JW + EXTRN FORMAT_WHICH:BYTE ;AN111;JW + EXTRN STARTUP:ABS ;AN111;JW + EXTRN SHELL:ABS ;AN111;JW + EXTRN DISK_PANEL:WORD ;AN000;JW + EXTRN SEARCH_FILE:WORD ;AN000;JW + EXTRN SUB_ERROR:BYTE ;AN000;JW + EXTRN S_COMMAND_COM:WORD ;AN017;JW +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + \ No newline at end of file diff --git a/v4.0/src/SELECT/EXTERN.H b/v4.0/src/SELECT/EXTERN.H new file mode 100644 index 0000000..c0c79ca --- /dev/null +++ b/v4.0/src/SELECT/EXTERN.H @@ -0,0 +1,76 @@ +/* */ +/* */ +/****************************************************************************/ +/* Declare Global variables */ +/****************************************************************************/ +/* */ + + + +extern char cur_disk; /* ;AN000; */ +extern FLAG good_disk[2]; /* ;AN000; */ +extern unsigned char number_of_drives; /* ;AN000; */ +extern FLAG reboot_flag; /* ;AN000; */ +extern char errorlevel; /* ;AN000; */ +extern char max_partition_size; /* ;AN000; */ +extern char sort[24]; /* ;AN000; */ +extern FLAG no_fatal_error; /* ;AC000; */ +extern char valid_input; /* ;AN000; */ +extern unsigned char video_mode; /* ;AN000; */ +extern unsigned char display_page; /* ;AN000; */ + +extern unsigned total_disk[2]; /* ;AN000; */ +extern XFLOAT total_mbytes[2]; /* ;AN000; */ +extern unsigned char max_sector[2]; /* ;AN000; */ +extern unsigned char max_head[2]; /* ;AN000; */ +extern unsigned required_cyls[2]; /* ;AN000; */ + +extern unsigned input_row; /* ;AN000; */ +extern unsigned input_col; /* ;AN000; */ +extern char insert[800]; /* ;AC000; */ +extern char *pinsert; /* ;AN000; */ + +extern unsigned char master_boot_record[2][512]; /* ;AN000; */ +extern unsigned char boot_record[512]; /* ;AN000; */ + +extern FLAG next_letter; /* ;AN000; */ +extern FLAG primary_flag; /* ;AN000; */ +extern FLAG extended_flag; /* ;AN000; */ +extern FLAG logical_flag; /* ;AN000; */ +extern FLAG disk_flag; /* ;AN000; */ +extern unsigned primary_buff; /* ;AN000; */ +extern unsigned extended_buff; /* ;AN000; */ +extern unsigned logical_buff; /* ;AN000; */ +extern char cur_disk_buff; /* ;AN000; */ +extern unsigned long NOVAL; /* ;AN000; */ +extern char next_letter; /* ;AN000; */ + + +/* */ +/* */ +/****************************************************************************/ +/* Define Global structures */ +/****************************************************************************/ +/* */ + +extern struct entry part_table[2][4]; /* ;AN000; */ +extern struct entry ext_table[2][24]; /* ;AN000; */ +extern struct freespace free_space[24]; /* ;AN000; */ +extern struct KeyData *input_data; /* ;AN000; */ +extern struct dx_buffer_ioctl dx_buff; /* ;AN000; */ +extern struct SREGS segregs; /* ;AN000; */ +extern struct subst_list sublist; /* ;AN000; */ + +/* */ +/****************************************************************************/ +/* Define UNIONS */ +/****************************************************************************/ +/* */ + +extern union REGS regs; /* ;AN000; */ + +extern char *format_string; /* ;AN000; */ +extern char far *fat12_String; /* ;AN000; */ +extern char far *fat16_String; /* ;AN000; */ +extern char far *hilda_string; /* ;AN000; */ + \ No newline at end of file diff --git a/v4.0/src/SELECT/GEN_COMS.ASM b/v4.0/src/SELECT/GEN_COMS.ASM new file mode 100644 index 0000000..9655df9 --- /dev/null +++ b/v4.0/src/SELECT/GEN_COMS.ASM @@ -0,0 +1,864 @@ +PAGE 55,132 ;AN000; +NAME SELECT ;AN000; +TITLE SELECT - SELECT.EXE ;AN000; +SUBTTL GEN_COMS ;AN000; +.ALPHA ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; GEN_COMS.ASM : Copyright 1988 Microsoft +; +; DATE: August 8/87 +; +; COMMENTS: Assemble with MASM 3.0 (using the -A option) +; +; Module contains code for : +; - creation of AUTOEXEC file +; - creation of CONFIG file +; - creation of DOSSHELL.BAT +; +; CHANGE HISTORY: +; +; ;AN000; for DT +; ;AN001; for PTM1181 GHG +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; DATA SEGMENT +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; + ; +SC_CD DW MC_CD ;AN000; +PC_CD DB '@CD ' ;AN000; +MC_CD EQU $ - PC_CD ;AN000; + ; +SC_BREAK DW MC_BREAK ;AN000; +PC_BREAK DB 'BREAK=' ;AN000; +MC_BREAK EQU $ - PC_BREAK ;AN000; + ; +SC_CPSW DW MC_CPSW ;AN000; +PC_CPSW DB 'CPSW=' ;AN000; +MC_CPSW EQU $ - PC_CPSW ;AN000; + ; +SC_VERIFY DW MC_VERIFY ;AN000; +PC_VERIFY DB 'VERIFY ' ;AN000; +MC_VERIFY EQU $ - PC_VERIFY ;AN000; + ; +SC_COUNTRY DW MC_COUNTRY ;AN000; +PC_COUNTRY DB 'COUNTRY=' ;AN000; +MC_COUNTRY EQU $ - PC_COUNTRY ;AN000; + ; +SC_COUNTRY_SYS DW MC_COUNTRY_SYS ;AN000; +PC_COUNTRY_SYS DB 'COUNTRY.SYS' ;AN000; +MC_COUNTRY_SYS EQU $ - PC_COUNTRY_SYS ;AN000; + ; +SC_BUFFERS DW MC_BUFFERS ;AN000; +PC_BUFFERS DB 'BUFFERS=' ;AN000; +MC_BUFFERS EQU $ - PC_BUFFERS ;AN000; + ; +SC_SLASH_X DW MC_SLASH_X ;AC046;SEH changed from /E +PC_SLASH_X DB ' /X' ;AC046;SEH +MC_SLASH_X EQU $ - PC_SLASH_X ;AC046;SEH + ; +SC_FCBS DW MC_FCBS ;AN000; +PC_FCBS DB 'FCBS=' ;AN000; +MC_FCBS EQU $ - PC_FCBS ;AN000; + ; +SC_FILES DW MC_FILES ;AN000; +PC_FILES DB 'FILES=' ;AN000; +MC_FILES EQU $ - PC_FILES ;AN000; + ; +SC_LASTDRIVE DW MC_LASTDRIVE ;AN000; +PC_LASTDRIVE DB 'LASTDRIVE=' ;AN000; +MC_LASTDRIVE EQU $ - PC_LASTDRIVE ;AN000; + ; +SC_STACKS DW MC_STACKS ;AN000; +PC_STACKS DB 'STACKS=' ;AN000; +MC_STACKS EQU $ - PC_STACKS ;AN000; + ; +SC_SHELL DW MC_SHELL ;AN000; +PC_SHELL DB 'SHELL=' ;AN000; +MC_SHELL EQU $ - PC_SHELL ;AN000; + ; +SC_SHELL_1 DW MC_SHELL_1 ;AN000; +PC_SHELL_1 DB 'COMMAND.COM' ;AC037; SEH Split the original SC_SHELL_1 into +MC_SHELL_1 EQU $ - PC_SHELL_1 ;AC037; SEH 3 parts + ; +SC_SHELL_2 DW MC_SHELL_2 ;AN037; SEH Used for diskettes only +PC_SHELL_2 DB ' /MSG' ;AN037; SEH +MC_SHELL_2 EQU $ - PC_SHELL_2 ;AN037; SEH + ; +SC_SHELL_3 DW MC_SHELL_3 ;AN037; SEH Use for diskettes and hardfile +PC_SHELL_3 DB ' /P /E:256 ' ;AN037; SEH Two spaces required for CR and LF +MC_SHELL_3 EQU $ - PC_SHELL_3 - 2 ;AN037; SEH + ; +SC_DEVICE DW MC_DEVICE ;AN000; +PC_DEVICE DB 'DEVICE=' ;AN000; +MC_DEVICE EQU $ - PC_DEVICE ;AN000; + ; +SC_XMAEM_SYS DW MC_XMAEM_SYS ;AN000; +PC_XMAEM_SYS DB 'XMAEM.SYS ' ;AN000; +MC_XMAEM_SYS EQU $ - PC_XMAEM_SYS ;AN000; + ; +SC_XMA2EMS_SYS DW MC_XMA2EMS_SYS ;AN000; +PC_XMA2EMS_SYS DB 'XMA2EMS.SYS ' ;AN000; +MC_XMA2EMS_SYS EQU $ - PC_XMA2EMS_SYS ;AN000; + ; +SC_ANSI_SYS DW MC_ANSI_SYS ;AN000; +PC_ANSI_SYS DB 'ANSI.SYS ' ;AN000; +MC_ANSI_SYS EQU $ - PC_ANSI_SYS ;AN000; + ; +SC_VDISK_SYS DW MC_VDISK_SYS ;AN000; +PC_VDISK_SYS DB 'RAMDRIVE.SYS ' ;AN000; +MC_VDISK_SYS EQU $ - PC_VDISK_SYS ;AN000; + ; +SC_DISPLAY_SYS DW MC_DISPLAY_SYS ;AN000; +PC_DISPLAY_SYS DB 'DISPLAY.SYS CON=(' ;AN000; +MC_DISPLAY_SYS EQU $ - PC_DISPLAY_SYS ;AN000; + ; + PUBLIC SC_DISPLAY_EGA ;AN000; +SC_DISPLAY_EGA DW MC_DISPLAY_EGA ;AN000; +PC_DISPLAY_EGA DB 'EGA.CPI)' ;AN000; +MC_DISPLAY_EGA EQU $ - PC_DISPLAY_EGA ;AN000; + ; + PUBLIC SD_DISPLAY_EGA ;AN001;GHG +SD_DISPLAY_EGA DW MD_DISPLAY_EGA ;AN001;GHG +PD_DISPLAY_EGA DB 'EGA' ;AN001;GHG +MD_DISPLAY_EGA EQU $ - PD_DISPLAY_EGA ;AN001;GHG + ; + PUBLIC SC_DISPLAY_LCD ;AN000; +SC_DISPLAY_LCD DW MC_DISPLAY_LCD ;AN000; +PC_DISPLAY_LCD DB 'LCD.CPI)' ;AN000; +MC_DISPLAY_LCD EQU $ - PC_DISPLAY_LCD ;AN000; + ; + PUBLIC SD_DISPLAY_LCD ;AN001;GHG +SD_DISPLAY_LCD DW MD_DISPLAY_LCD ;AN001;GHG +PD_DISPLAY_LCD DB 'LCD' ;AN001;GHG +MD_DISPLAY_LCD EQU $ - PD_DISPLAY_LCD ;AN001;GHG + ; +SC_PRINTER_SYS DW MC_PRINTER_SYS ;AN000; +PC_PRINTER_SYS DB 'PRINTER.SYS ' ;AN000; +MC_PRINTER_SYS EQU $ - PC_PRINTER_SYS ;AN000; + ; +SC_LPT DW MC_LPT ;AN000; +PC_LPT DB 'LPT' ;AN000; +MC_LPT EQU $ - PC_LPT ;AN000; + ; +SC_COM DW MC_COM ;AN011; SEH +PC_COM DB 'COM' ;AN011; SEH +MC_COM EQU $ - PC_COM ;AN011; SEH + ; +SC_EQUAL_OPEN DW MC_EQUAL_OPEN ;AN000; +PC_EQUAL_OPEN DB '=(' ;AN000; +MC_EQUAL_OPEN EQU $ - PC_EQUAL_OPEN ;AN000; + ; +SC_437 DW MC_437 ;AN000; +PC_437 DB ',437,' ;AN000; +MC_437 EQU $ - PC_437 ;AN000; + ; +SC_COMMA DW MC_COMMA ;AN000; +PC_COMMA DB ',' ;AN000; +MC_COMMA EQU $ - PC_COMMA ;AN000; + ; +SC_INSTALL DW MC_INSTALL ;AN000; +PC_INSTALL DB 'INSTALL=' ;AN000; +MC_INSTALL EQU $ - PC_INSTALL ;AN000; + ; +SC_KEYB_C DW MC_KEYB_C ;AN000; +PC_KEYB_C DB 'KEYB.COM ' ;AN000; +MC_KEYB_C EQU $ - PC_KEYB_C ;AN000; + ; +SC_KEYBOARD_SYS DW MC_KEYBOARD_SYS ;AN000; +PC_KEYBOARD_SYS DB 'KEYBOARD.SYS' ;AN000; +MC_KEYBOARD_SYS EQU $ - PC_KEYBOARD_SYS ;AN000; + ; +SC_KEYB_SWITCH DW MC_KEYB_SWITCH ;AN002;JW +PC_KEYB_SWITCH DB ' /ID:' ;AN002;JW +MC_KEYB_SWITCH EQU $ - PC_KEYB_SWITCH ;AN002;JW + ; +SC_SHARE DW MC_SHARE ;AN000; +PC_SHARE DB 'SHARE.EXE ' ;AN000; +MC_SHARE EQU $ - PC_SHARE ;AN000; + ; +SC_FASTOPEN DW MC_FASTOPEN ;AN000; +PC_FASTOPEN DB 'FASTOPEN.EXE ' ;AN000; +MC_FASTOPEN EQU $ - PC_FASTOPEN ;AN000; + ; +SC_NLSFUNC DW MC_NLSFUNC ;AN000; +PC_NLSFUNC DB 'NLSFUNC.EXE ' ;AN000; +MC_NLSFUNC EQU $ - PC_NLSFUNC ;AN000; + ; +SC_ECHO DW MC_ECHO ;AN000; +PC_ECHO DB '@ECHO OFF ' ;AN000; TWO SPACES REQUIRED FOR CR,LF +MC_ECHO EQU $ - PC_ECHO - 2 ;AN000; + ; +SC_PATH DW MC_PATH ;AN000; +PC_PATH DB 'PATH ' ;AN000; +MC_PATH EQU $ - PC_PATH ;AN000; + ; +SC_APPEND DW MC_APPEND ;AN000; +PC_APPEND DB 'APPEND ' ;AN000; +MC_APPEND EQU $ - PC_APPEND ;AN000; + ; +SC_PROMPT DW MC_PROMPT ;AN000; +PC_PROMPT DB 'PROMPT ' ;AN000; +MC_PROMPT EQU $ - PC_PROMPT ;AN000; + ; +SC_SET_COMSPEC DW MC_SET_COMSPEC ;AN000; +PC_SET_COMSPEC DB 'SET COMSPEC=' ;AN000; +MC_SET_COMSPEC EQU $ - PC_SET_COMSPEC ;AN000; + ; +SC_COMMAND_COM DW MC_COMMAND_COM ;AN000; +PC_COMMAND_COM DB 'COMMAND.COM' ;AN000; +MC_COMMAND_COM EQU $ - PC_COMMAND_COM ;AN000; + ; +SC_GRAPHICS DW MC_GRAPHICS ;AN000; +PC_GRAPHICS DB 'GRAPHICS ' ;AN000; +MC_GRAPHICS EQU $ - PC_GRAPHICS ;AN000; + ; +SC_GRAFTABL DW MC_GRAFTABL ;AN000; +PC_GRAFTABL DB 'GRAFTABL ' ;AN000; +MC_GRAFTABL EQU $ - PC_GRAFTABL ;AN000; + ; +;SC_DATE DW MC_DATE ; +;PC_DATE DB 'DATE ' ; TWO SPACES REQUIRED FOR CR,LF +;MC_DATE EQU $ - PC_DATE - 2 ; + ; +;SC_TIME DW MC_TIME ; +;PC_TIME DB 'TIME ' ; TWO SPACES REQUIRED FOR CR,LF +;MC_TIME EQU $ - PC_TIME - 2 ; + ; +SC_VER DW MC_VER ;AN000; +PC_VER DB 'VER ' ;AN000; TWO SPACES REQUIRED FOR CR,LF +MC_VER EQU $ - PC_VER - 2 ;AN000; + ; +SC_MODE_CON DW MC_MODE_CON ;AN000; +PC_MODE_CON DB 'MODE CON CP PREP=((' ;AN000; +MC_MODE_CON EQU $ - PC_MODE_CON ;AN000; + ; +SC_MODE_COM DW MC_MODE_COM ;AN000; +PC_MODE_COM DB 'MODE COM' ;AN000; +MC_MODE_COM EQU $ - PC_MODE_COM ;AN000; + ; +SC_MODE_LPT DW MC_MODE_LPT ;AN000; +PC_MODE_LPT DB 'MODE LPT' ;AN000; +MC_MODE_LPT EQU $ - PC_MODE_LPT ;AN000; + ; +SC_EQUAL_COM DW MC_EQUAL_COM ;AN000; +PC_EQUAL_COM DB '=COM' ;AN000; +MC_EQUAL_COM EQU $ - PC_EQUAL_COM ;AN000; + ; +SC_PREPARE DW MC_PREPARE ;AN000; +PC_PREPARE DB ' CP PREP=((' ;AN000; +MC_PREPARE EQU $ - PC_PREPARE ;AN000; + ; +SC_CLOSE_BRAC DW MC_CLOSE_BRAC ;AN000; +PC_CLOSE_BRAC DB ') ' ;AN000; +MC_CLOSE_BRAC EQU $ - PC_CLOSE_BRAC ;AN000; + ; +SC_KEYB_A DW MC_KEYB_A ;AN000; +PC_KEYB_A DB 'KEYB ' ;AN000; +MC_KEYB_A EQU $ - PC_KEYB_A ;AN000; + ; +SC_COMMAS DW MC_COMMAS ;AN000; +PC_COMMAS DB ',,' ;AN000; +MC_COMMAS EQU $ - PC_COMMAS ;AN000; + ; +SC_CHCP DW MC_CHCP ;AN000; +PC_CHCP DB 'CHCP ' ;AN000; +MC_CHCP EQU $ - PC_CHCP ;AN000; + ; +SC_DRIVE_C DW MC_DRIVE_C ;AN013;JW +PC_DRIVE_C DB '@C: ' ;AN013;JW +MC_DRIVE_C EQU $ - PC_DRIVE_C - 2 ;AN013;JW + ; +SC_SHELLC_1 DW MC_SHELLC_1 ;AN000; +PC_SHELLC_1 DB '@SHELLB DOSSHELL',E_CR,E_LF ;AC019;SEH + DB '@IF ERRORLEVEL 255 GOTO END',E_CR,E_LF ;AN000; + DB ':COMMON ' ;AN000; +MC_SHELLC_1 EQU $ - PC_SHELLC_1 - 2 ;AN000; 2 SPACES FOR ASCII-Z CONVERSION + ; +SC_SHELLC_2 DW MC_SHELLC_2 ;AN000; +PC_SHELLC_2 DB ':END ' ;AN000; +MC_SHELLC_2 EQU $ - PC_SHELLC_2 - 2 ;AN000; + ; +SC_SHELLC DW MC_SHELLC ;AN000; +PC_SHELLC DB '@SHELLC ' ;AN000; +MC_SHELLC EQU $ - PC_SHELLC ;AN000; + ; +SC_SHELLP DW MC_SHELLP ;AN000; +PC_SHELLP DB 'DOSSHELL ' ;AC019;SEH +MC_SHELLP EQU $ - PC_SHELLP - 2 ;AN000; + ; +SC_PRINT_COM DW MC_PRINT_COM ;AN000; +PC_PRINT_COM DB 'PRINT /D:' ;AC011; SEH +MC_PRINT_COM EQU $ - PC_PRINT_COM ;AN011; SEH + ; +SC_AT_SIGN DW MC_AT_SIGN ;AN000; +PC_AT_SIGN DB '@' ;AN000; +MC_AT_SIGN EQU $ - PC_AT_SIGN ;AN000; + ; +S_DOS_PATH DW M_DOS_PATH ;AN000; +P_DOS_PATH DB 50 DUP(?) ;AN000; +M_DOS_PATH EQU $ - P_DOS_PATH ;AN000; + ; +DATA ENDS ;AN000;DATA +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + INCLUDE EXT.INC ;AN000; + INCLUDE STRUC.INC ;AN000; + INCLUDE MACROS.INC ;AN000; + INCLUDE ROUT_EXT.INC ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine + ASSUME CS:SELECT,DS:DATA ;AN000; + ; + PUBLIC CREATE_CONFIG_SYS ;AN000; + PUBLIC CREATE_AUTOEXEC_BAT ;AN000; + PUBLIC CREATE_SHELL_BAT ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Create AUTOEXEC.BAT file +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CREATE_AUTOEXEC_BAT PROC ;AN000; + ; + ;;;install to B:, install path = null ; + ;;;install to root of C:, install path = c:\ ; + ;;;install to directory in C:, install path = c:\path\ ; + .IF < I_DEST_DRIVE eq E_DEST_DRIVE_B > ;AN000; if install to drive B: + .THEN ;AN000; + INIT_VAR S_DOS_PATH,0 ;AN000; set path = null + .ELSE ;AN000; else + COPY_STRING S_DOS_PATH,M_DOS_PATH,S_INSTALL_PATH;AN000;set path = user defined path + .IF < S_DOS_PATH gt M_DEST_DRIVE > ;AN000; if install is not to root of drive C: + .THEN ;AN000; + APPEND_STRING S_DOS_PATH,M_DOS_PATH,S_SLASH ;AN000; append back slash + .ENDIF ;AN000; + .ENDIF ;AN000; + ; + ;;;write @ECHO OFF ; + WRITE_LINE SC_ECHO ;AN000; write ECHO OFF command + ; + ;;;write SET COMSPEC=\COMMAND.COM ; + .IF < I_DEST_DRIVE ne E_DEST_DRIVE_C > ;AC043;SEH COMSPEC formerly after PROMPT ;AN111; if install destination is drive B: or A: JW + MERGE_STRING SC_LINE,MC_LINE,SC_SET_COMSPEC,S_DRIVE_A ;AC043;SEH ;AN000;JW + .ELSE ;AC043;SEH ;AN000;JW + MERGE_STRING SC_LINE,MC_LINE,SC_SET_COMSPEC,S_DOS_PATH ;AC043;SEH ;AN000;JW + .ENDIF ;AC043;SEH ;AN000;JW + APPEND_STRING SC_LINE,MC_LINE, SC_COMMAND_COM ;AC043;SEH ;AN000; + WRITE_LINE SC_LINE ;AC043;SEH ;AN000; write SET COMSPEC command + ; + ;;;write VERIFY ; + .IF < S_VERIFY gt 0 > ;AN000; if field length > zero + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,SC_VERIFY,S_VERIFY;AN000; + WRITE_LINE SC_LINE ;AN000; write VERIFY command + .ENDIF ;AN000; + ; + ;;;write PATH ; + .IF < F_PATH eq E_PATH_YES > and ;AN000; if PATH command required + .IF < S_PATH gt 0 > ;AN000; and field length > zero + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,SC_PATH, S_PATH ;AN000; + WRITE_LINE SC_LINE ;AN000; write PATH command + .ENDIF ;AN000; + ; + ;;;write APPEND ;AN000;JW + ;;;write APPEND ; + .IF < F_APPEND eq E_APPEND_YES > ;AN000; if APPEND command required + .IF < S_APPEND_P gt 0 > ;AN000; and field length > zero JW + .THEN ;AN000; JW + MERGE_STRING SC_LINE,MC_LINE,SC_APPEND,S_APPEND_P ;AN000;JW + WRITE_LINE SC_LINE ;AN000; write APPEND command JW + .ENDIF ;AN000; JW + .IF < S_APPEND gt 0 > ;AN000; and field length > zero + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,SC_APPEND,S_APPEND;AN000; + WRITE_LINE SC_LINE ;AN000; write APPEND command + .ENDIF ;AN000; + .ENDIF ;AN000;JW + ; + ;;;write PROMPT ; + .IF < F_PROMPT eq E_PROMPT_YES > and ;AN000; if PROMPT command required + .IF < S_PROMPT gt 0 > ;AN000; and field length > zero + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,SC_PROMPT,S_PROMPT;AN000; + WRITE_LINE SC_LINE ;AN000; write PROMPT command + .ENDIF ;AN000; + ; + ;;;write \GRAPHICS ; + .IF < F_GRAPHICS eq E_GRAPHICS_YES > ;AN000; if GRAPHICS command is to be included + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,S_DOS_PATH,SC_GRAPHICS;AN000; + APPEND_STRING SC_LINE, MC_LINE, S_GRAPHICS ;AN000; + WRITE_LINE SC_LINE ;AN000; write GRAPHICS command + .ENDIF ;AN000; + ; + ;;;init S_STR120_1 to primary code page ; + ;;;init S_STR120_2 to secondary code page ; + WORD_TO_CHAR N_CP_PRI, S_STR120_1 ;AN000; primary code page in ASCII-N format + WORD_TO_CHAR N_CP_SEC, S_STR120_2 ;AN000; secondary code page in ASCII-N format + ; + ;;;write \GRAFTABL ; + .IF < F_GRAFTABL eq E_GRAFTABL_YES > ;AN000; if GRAFTABL command required + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,S_DOS_PATH,SC_GRAFTABL;AN000; + APPEND_STRING SC_LINE, MC_LINE, S_STR120_1 ;AN000; + WRITE_LINE SC_LINE ;AN000; write GRAFTABL command + .ENDIF ;AN000; + ; + ;;;write VER ; + WRITE_LINE SC_VER ;AN000; write VER command + ; + ;;;S_STR120_1 = primary code page ; + ;;;S_STR120_2 = secondary code apge ; + ;;;init S_STR120_3 to code page list ; + INIT_VAR S_STR120_3, 0 ;AN000; + .IF < N_CP_PRI eq 0 > or ;AN000; if primary code page is 0 or 437 + .IF < N_CP_PRI eq 437 > ;AN000; + .THEN ;AN000; no action + .ELSE ;AN000; else + APPEND_STRING S_STR120_3,M_STR120_3,S_STR120_1;AN000; append code page to cp list + .ENDIF ;AN000; + ; + .IF < N_CP_SEC eq 0 > or ;AN000; if secondary code page is 0 or 437 + .IF < N_CP_SEC eq 437 > ;AN000; + .THEN ;AN000; no action + .ELSE ;AN000; else + .IF < S_STR120_3 ne 0 > ;AN000; if primary code page is in cp list + .THEN ;AN000; + APPEND_STRING S_STR120_3, M_STR120_3, S_SPACE ;AN000; append space to cp list + .ENDIF ;AN000; + APPEND_STRING S_STR120_3,M_STR120_3,S_STR120_2;AN000; append code page to cp list + .ENDIF ;AN000; + ; + ;;;S_STR120_3 = code page list ; + ;;;write MODE CON CODEPAGE PREPARE (() \.CPI + .IF < F_CPSW eq E_CPSW_YES > near ;AN000; if code page switching required + .THEN ;AN000; + .IF < S_STR120_3 ne 0 > near ;AN000; if primary/secondary code pages are not 0 or 437 + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,SC_MODE_CON,S_STR120_3;AN000; + APPEND_STRING SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000; append close bracket + APPEND_STRING SC_LINE, MC_LINE,S_DOS_PATH ;AN000; append path + .IF < ACTIVE eq EGA > or ;AN000; if EGA adaptor + .IF < ALTERNATE eq EGA > ;AN000; + .THEN ;AN000; + APPEND_STRING SC_LINE, MC_LINE, SC_DISPLAY_EGA;AN000; append EGA.CPI) + .ELSEIF < ACTIVE eq LCD > or ;AN000; if LCD adaptor + .IF < ALTERNATE eq LCD > ;AN000; + .THEN ;AN000; + APPEND_STRING SC_LINE, MC_LINE, SC_DISPLAY_LCD;AN000; append LCD.CPI) + .ENDIF ;AN000; + WRITE_LINE SC_LINE ;AN000; write MODE CON CODEPAGE command + .ENDIF ;AN000; + .ENDIF ;AN000; + ; + ;;;S_STR120_3 = cp list ; + ;;;write MODE LPT1 CODEPAGE PREPARE=(() \) + ;;;write MODE LPT2 CODEPAGE PREPARE=(() \) + ;;;write MODE LPT3 CODEPAGE PREPARE=(() \) + ;;;N_WORD_1 = parallel port number ; + INIT_VAR N_WORD_1, 1 ;AN000; set port number = 1 + .IF < F_CPSW eq E_CPSW_YES > near ;AN000; if code page switching required + .THEN ;AN000; + .REPEAT ;AN000; repeat code block + GET_PRINTER_PARAMS 0, N_WORD_1, N_RETCODE ;AN000; get printer parameters + .IF < N_RETCODE eq 1 > and near ;AN000; if valid return + .IF < N_PRINTER_TYPE eq E_PARALLEL > and near ;AN000; and parallel printer + .IF < S_CP_DRIVER gt 0 > and near ;AN000; and driver and prepare + .IF < S_CP_PREPARE gt 0 > near ;AN000; parameters valid + .THEN ;AN000; + COPY_STRING SC_LINE, MC_LINE, SC_MODE_LPT ;AN000; append MODE LPT + WORD_TO_CHAR N_WORD_1, S_STR120_2 ;AN000; + APPEND_STRING SC_LINE, MC_LINE, S_STR120_2 ;AN000; append lpt number + APPEND_STRING SC_LINE, MC_LINE, SC_PREPARE ;AN000; append CODEPAGE PREPARE + APPEND_STRING SC_LINE, MC_LINE, S_STR120_3 ;AN000; append cp list + APPEND_STRING SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000; append close bracket + APPEND_STRING SC_LINE, MC_LINE, S_DOS_PATH ;AN000; append path + APPEND_STRING SC_LINE, MC_LINE, S_CP_PREPARE ;AN000; append driver parameters + APPEND_STRING SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000; append close bracket + WRITE_LINE SC_LINE ;AN000; write PRINTER.SYS command + .ENDIF ;AN000; + INC_VAR N_WORD_1 ;AN000; inc printer number + .UNTIL < N_WORD_1 gt 3 > near ;AN000; end of repeat block + .ENDIF ;AN000; + ; + ;;;write serial printer parameters and redirection command + ;;;write MODE COMx: ; + ;;;write MODE LPTy=COMx ; + ;;;N_WORD_1 = serial port number ; + INIT_VAR N_WORD_1, 4 ;AN000; set port number = 4 + INIT_VAR N_WORD_2, 1 ;AN000; set serial port number = 1 + .REPEAT ;AN000; repeat code block + GET_PRINTER_PARAMS 0, N_WORD_1, N_RETCODE ;AN000; get printer parameters + .IF < N_RETCODE eq 1 > and near ;AN000; if valid return + .IF < N_PRINTER_TYPE eq E_SERIAL > and near ;AN000; and serial printer + .IF < S_MODE_PARM gt 0 > near ;AN000; and mode parameters present + .THEN ;AN000; + COPY_STRING SC_LINE, MC_LINE, SC_MODE_COM ;AN000; append MODE COM + WORD_TO_CHAR N_WORD_2, S_STR120_3 ;AN000; S_STR120_3 = serial port number + APPEND_STRING SC_LINE, MC_LINE, S_STR120_3 ;AN000; append serial port number + APPEND_STRING SC_LINE, MC_LINE, S_COLON ;AN000; append colon + APPEND_STRING SC_LINE, MC_LINE, S_MODE_PARM ;AN000; append mode parameters + WRITE_LINE SC_LINE ;AN000; write MODE COMx command + .IF < I_REDIRECT gt 1 > ;AN000; if printer redirection + .THEN ;AN000; + COPY_STRING SC_LINE,MC_LINE,SC_MODE_LPT ;AN000; append MODE LPT + DEC_VAR I_REDIRECT ;AN000; first item in list is 'None' + WORD_TO_CHAR I_REDIRECT, S_STR120_2 ;AN000; convert LPT no to chars + APPEND_STRING SC_LINE,MC_LINE,S_STR120_2 ;AN000; append parallel port + APPEND_STRING SC_LINE,MC_LINE,SC_EQUAL_COM ;AN000; append =COM + APPEND_STRING SC_LINE,MC_LINE,S_STR120_3 ;AN000; append serial port number + WRITE_LINE SC_LINE ;AN000; write MODE LPTx=COMy command + .ENDIF ;AN000; + .ENDIF ;AN000; + INC_VAR N_WORD_1 ;AN000; inc printer number + INC_VAR N_WORD_2 ;AN000; inc serial port number + .UNTIL < N_WORD_1 gt 7 > near ;AN000; end of repeat block + ; + ;;;write KEYB ,,\KEYBOARD.SYS ; + .IF < N_KYBD_VAL eq E_KYBD_VAL_YES > near ;AN000; if kybd id is valid + .THEN ;AN000; + COPY_STRING SC_LINE, MC_LINE, SC_KEYB_A ;AN000; copy KEYB + APPEND_STRING SC_LINE, MC_LINE, S_KEYBOARD ;AN000; append kybd id + APPEND_STRING SC_LINE, MC_LINE, SC_COMMAS ;AN000; append ,, + APPEND_STRING SC_LINE,MC_LINE, S_DOS_PATH ;AN000; append install path + APPEND_STRING SC_LINE,MC_LINE,SC_KEYBOARD_SYS ;AN000; append \KEYBOARD.SYS + .IF < N_KYBD_ALT ne E_KYBD_ALT_NO > and ;AN002; if alternate keyboard valid JW + .IF < I_KYBD_ALT eq 2 > ;AN002; and not default setting JW + .THEN ;AN002; JW + APPEND_STRING SC_LINE, MC_LINE,SC_KEYB_SWITCH ;AN002; append keyb id switch '/ID:' JW + APPEND_STRING SC_LINE, MC_LINE, S_KYBD_ALT ;AN002; append alternate keyboard id JW + APPEND_STRING SC_LINE, MC_LINE, S_SPACE ;AN090;JPW add space so last char not overwritten + .ENDIF ;AN002; JW + WRITE_LINE SC_LINE ;AN000; write KEYB command + .ENDIF ;AN000; + ; + ;;;write CHCP ; + .IF < F_CPSW eq E_CPSW_YES > ;AN000; if code page switching required + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,SC_CHCP,S_STR120_1;AN000; + WRITE_LINE SC_LINE ;AN000; write CHCP command + .ENDIF ;AN000; + ; + ;;;write 'PRINT /D:LPTx' or 'PRINT /D:COMx' ;AC066;SEH moved print stmt. NOTE: PRINT AND SHELL STMTS MUST BE LAST IN AUTOEXEC.BAT + .IF < I_WORKSPACE ne E_WORKSPACE_MIN > and near ;AC066;SEH ;AN011; SEH + .IF < I_DEST_DRIVE eq E_DEST_DRIVE_C > and near ;AC066;SEH ;AN015; JW If install to fixed disk + .IF < N_NUMPRINT gt 0 > near ;AC066;SEH ;AN011; SEH + .THEN ;AC066;SEH ;AN011; SEH + GET_PRINTER_PARAMS 1, 0, N_RETCODE ;AC066;SEH ;AN011; SEH get parameters for 1st printer selected + .IF < N_RETCODE ne 0 > near ;AC066;SEH ;AN011; SEH if valid return + .THEN ;AC066;SEH ;AN011; SEH + .IF < N_PRINTER_TYPE eq E_PARALLEL > ;AC066;SEH ;AN011; SEH LPT1, LPT2 or LPT3 + .THEN ;AC066;SEH ;AN011; SEH + MERGE_STRING SC_LINE, MC_LINE, SC_PRINT_COM, SC_LPT;AC066;SEH ;AN011; SEH 'PRINT /D:LPT' + COPY_WORD N_WORD_1, I_PORT ;AC066;SEH ;AN011; SEH get LPT number (1-3) + .ELSE ;AC066;SEH ;AN011; SEH serial printer + .IF < I_REDIRECT gt 1 > ;AC066;SEH ;AN011; SEH check if redirected to LPT + .THEN ;AC066;SEH ;AN011; SEH + MERGE_STRING SC_LINE, MC_LINE, SC_PRINT_COM, SC_LPT ;AC066;SEH ;AN011; SEH 'PRINT /D:LPT' + COPY_WORD N_WORD_1, I_REDIRECT ;AC066;SEH ;AN011; SEH gives LPT printer redirected to --- + DEC N_WORD_1 ;AC066;SEH ;AN011; SEH but must subtract off value 'none' to get port# + .ELSE ;AC066;SEH ;AN011; SEH serial port that hasn't been redirected + MERGE_STRING SC_LINE, MC_LINE, SC_PRINT_COM, SC_COM ;AC066;SEH ;AN011; SEH 'PRINT /D:COM' + COPY_WORD N_WORD_1, I_PORT ;AC066;SEH ;AN011; SEH value of COM port + .ENDIF ;AC066;SEH ;AN011; SEH + .ENDIF ;AC066;SEH ;AN011; SEH + WORD_TO_CHAR N_WORD_1, S_STR120_3 ;AC066;SEH ;AN011; SEH + APPEND_STRING SC_LINE, MC_LINE, S_STR120_3 ;AC066;SEH ;AN011; SEH add on the com or lpt number to the string + WRITE_LINE SC_LINE ;AC066;SEH ;AN011; SEH write 'PRINT /D:LPTx' or 'PRINT /D:COMx' x=number + .ENDIF ;AC066;SEH ;AN011; SEH + .ENDIF ;AC066;SEH ;AN011; SEH + ; + ;;;write SHELL ; + .IF < N_DEST eq E_DEST_SHELL > and ;AN000; if preparing for SHELL diskette + .IF < F_SHELL eq E_SHELL_YES > ;AN000; if SHELL support required + .THEN ;AN000; + WRITE_LINE SC_SHELLP ;AN000; + .ENDIF ;AN000; + ; + RET ;AN000; +CREATE_AUTOEXEC_BAT ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Create CONFIG.SYS file +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CREATE_CONFIG_SYS PROC ;AN000; + ; + ;;;install to B:, install path = null ; + ;;;install to root of C:, install path = c:\ ; + ;;;install to directory in C:, install path = c:\path\ ; + .IF < I_DEST_DRIVE eq E_DEST_DRIVE_B > ;AN000; if install to drive B: + .THEN ;AN000; + INIT_VAR S_DOS_PATH,0 ;AN000; set path = null + .ELSE ;AN000; else + COPY_STRING S_DOS_PATH,M_DOS_PATH,S_INSTALL_PATH;AN000;set path = user defined path + .IF < S_DOS_PATH gt M_DEST_DRIVE > ;AN000; if install is not under root of C: + .THEN ;AN000; + APPEND_STRING S_DOS_PATH,M_DOS_PATH,S_SLASH ;AN000; append back slash to path + .ENDIF ;AN000; + .ENDIF ;AN000; + ; + ;;;write BREAK= ; + .IF < S_BREAK gt 0 > ;AN000; if field length > zero + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,SC_BREAK,S_BREAK;AN000; + WRITE_LINE SC_LINE ;AN000; write BREAK command + .ENDIF ;AN000; + ; + ;;;write COUNTRY=,,\COUNTRY.SYS ; + .IF < N_COUNTRY eq 1 > ;AN000; if country is US (001) + .THEN ;AN000; no action + .ELSE ;AN000; else + WORD_TO_CHAR N_COUNTRY, S_STR120_1 ;AN000; S_STR120_1 = country in ASCII + MERGE_STRING SC_LINE,MC_LINE,SC_COUNTRY,S_STR120_1;AN000; + APPEND_STRING SC_LINE, MC_LINE, SC_COMMAS ;AN000; + APPEND_STRING SC_LINE, MC_LINE,S_DOS_PATH ;AN000; + APPEND_STRING SC_LINE, MC_LINE,SC_COUNTRY_SYS ;AN000; + WRITE_LINE SC_LINE ;AN000; write COUNTRY command + .ENDIF ;AN000; + ; + ;;;write BUFFERS= ; + ;;;write BUFFERS= /E if expanded memory support + .IF < S_BUFFERS gt 0 > ;AN000; if field lengh > zero + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,SC_BUFFERS,S_BUFFERS;AN000; + .IF < N_XMA eq E_XMA_PRESENT > and ;AN000; if expanded memory present + .IF < F_XMA eq E_XMA_YES > ;AN000; and is to be used + .THEN ;AN000; + APPEND_STRING SC_LINE, MC_LINE, SC_SLASH_X ;AC046;SEH append /X to command (formerly /E) + .ENDIF ;AN000; + WRITE_LINE SC_LINE ;AN000; write BUFFERS command + .ENDIF ;AN000; + ; + ;;;write FCBS= ; + .IF < S_FCBS gt 0 > ;AN000; if field length > zero + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE, SC_FCBS,S_FCBS ;AN000; + WRITE_LINE SC_LINE ;AN000; write FCBS command + .ENDIF ;AN000; + ; + ;;;write FILES= ; + .IF < S_FILES gt 0 > ;AN000; if field length > zero + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,SC_FILES,S_FILES;AN000; + WRITE_LINE SC_LINE ;AN000; write FILES command + .ENDIF ;AN000; + ; + ;;;write LASTDRIVE= ; + .IF < S_LASTDRIVE gt 0 > ;AN000; if field length > zero + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,SC_LASTDRIVE,S_LASTDRIVE;AN000; + WRITE_LINE SC_LINE ;AN000; write LASTDRIVE command + .ENDIF ;AN000; + ; + ;;;write STACKS= ; + .IF < S_STACKS gt 0 > ;AN000; if field length > zero + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,SC_STACKS,S_STACKS;AN000; + WRITE_LINE SC_LINE ;AN000; write STACKS command + .ENDIF ;AN000; + ; + ;;;write SHELL=\COMMAND.COM /MSG /P /E:256 ; + .IF < I_DEST_DRIVE ne E_DEST_DRIVE_C > ;AN111; if install destination is drive B: or A: JW + MERGE_STRING SC_LINE,MC_LINE,SC_SHELL,S_DRIVE_A ;AN000;JW + APPEND_STRING SC_LINE,MC_LINE,SC_SHELL_1 ;AN037;SEH + APPEND_STRING SC_LINE,MC_LINE,SC_SHELL_2 ;AN037;SEH Only diskettes get /MSG in SHELL command + .ELSE ;AN000;JW + MERGE_STRING SC_LINE,MC_LINE,SC_SHELL,S_DOS_PATH ;AN000;JW + APPEND_STRING SC_LINE,MC_LINE,SC_SHELL_1 ;AC037;SEH + .ENDIF ;AN000;JW + APPEND_STRING SC_LINE, MC_LINE, SC_SHELL_3 ;AC037;SEH + WRITE_LINE SC_LINE ;AN000; write SHELL command + ; + ;;;init S_STR120_1 to DEVICE=\ ; + MERGE_STRING S_STR120_1,M_STR120_1,SC_DEVICE,S_DOS_PATH;AN000; + ; + ;;;S_STR120_1 = DEVICE=\ ; + ;;;write DEVICE=\XMAEM.SYS ; + ;;;write DEVICE=\XMA2EMS.SYS ; + .IF < N_XMA eq E_XMA_PRESENT > near and ;AC000; if expanded memory present JW + .IF < F_XMA eq E_XMA_YES > ;AN000; and support to be included + .THEN ;AN000; + .IF < N_MOD80 eq E_IS_MOD80 > ;AN000;JW + .THEN ;AN000;JW + MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_XMAEM_SYS;AN000; + APPEND_STRING SC_LINE, MC_LINE, S_XMAEM ;AN000; + WRITE_LINE SC_LINE ;AN000; write XMAEM command + .ENDIF ;AN000;JW + MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_XMA2EMS_SYS;AN000; + APPEND_STRING SC_LINE, MC_LINE, S_XMA2EMS ;AN000; + WRITE_LINE SC_LINE ;AN000; write XMA2EMS command + .ENDIF ;AN000; + ; + ;;;S_STR120_1 = DEVICE=\ ; + ;;;write DEVICE=\ANSI.SYS ; + ;;;write DEVICE=\ANSI.SYS /X ,additional parameter based on workspace option + .IF < F_ANSI eq E_ANSI_YES > ;AN000; if ANSI support required + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_ANSI_SYS;AN000; + APPEND_STRING SC_LINE, MC_LINE, S_ANSI ;AN000; + WRITE_LINE SC_LINE ;AN000; write ANSI command + .ENDIF ;AN000; + ; + ;;;S_STR120_1 = DEVICE=\ ; + ;;;write DEVICE=\RAMDRIVE.SYS ; + .IF < F_VDISK eq E_VDISK_YES > ;AN000; if VDISK support required + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_VDISK_SYS;AN000; + APPEND_STRING SC_LINE, MC_LINE, S_VDISK ;AN000; + WRITE_LINE SC_LINE ;AN000; write VDISK command + .ENDIF ;AN000; + ; + ;;;init S_STR120_2 to number of designates ; + WORD_TO_CHAR N_DESIGNATES, S_STR120_2 ;AN000; set S_STR120_2 = no. of designates + ; + ;;;S_STR120_1 = DEVICE=\ ; + ;;;write DEVICE=\DISPLAY.SYS CON=(,437,) + .IF < F_CPSW eq E_CPSW_YES > near ;AN000; if code page switching required + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_DISPLAY_SYS;AN000; + .IF < ACTIVE eq EGA > or ;AN000; if EGA adaptor + .IF < ALTERNATE eq EGA > ;AN000; + .THEN ;AN000; + APPEND_STRING SC_LINE, MC_LINE, SD_DISPLAY_EGA;AN001;GHG set display to EGA + .ELSEIF < ACTIVE eq LCD > or ;AN000; if LCD adaptor + .IF < ALTERNATE eq LCD > ;AN000; + .THEN ;AN000; + APPEND_STRING SC_LINE, MC_LINE, SD_DISPLAY_LCD;AN001;GHG set display to LCD + .ENDIF ;AN000; + APPEND_STRING SC_LINE, MC_LINE, SC_437 ;AN000; append hardware code page + APPEND_STRING SC_LINE, MC_LINE, S_STR120_2 ;AN000; append no of designates + APPEND_STRING SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000; + WRITE_LINE SC_LINE ;AN000; write DISPLAY.SYS command + .ENDIF ;AN000; + ; + ;;;S_STR120_1 = DEVICE=\ ; + ;;;S_STR120_2 = number of designates ; + ;;;write DEVICE=\PRINTER.SYS LPT1=(,437,) + ;;; LPT2=(,437,) + ;;; LPT3=(,437,) + ;;;N_WORD_1 = parallel port number ; + ;;;N_WORD_2 set if driver is prepared ; + INIT_VAR N_WORD_1, 1 ;AN000; set port number = 1 + INIT_VAR N_WORD_2, 0 ;AN000; set driver status = false + .IF < F_CPSW eq E_CPSW_YES > near ;AN000; if code page switching required + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_PRINTER_SYS;AN000; + .REPEAT ;AN000; repeat code block + GET_PRINTER_PARAMS 0, N_WORD_1, N_RETCODE ;AN000; get printer parameters + .IF < N_RETCODE eq 1 > and near ;AN000; if valid return + .IF < S_CP_DRIVER gt 0 > and near ;AN000; and driver and prepare + .IF < S_CP_PREPARE gt 0 > near ;AN000; parameters valid + .THEN ;AN000; + APPEND_STRING SC_LINE, MC_LINE, SC_LPT ;AN000; append LPT + WORD_TO_CHAR N_WORD_1, S_STR120_3 ;AN000; + APPEND_STRING SC_LINE, MC_LINE, S_STR120_3 ;AN000; append lpt number + APPEND_STRING SC_LINE, MC_LINE, SC_EQUAL_OPEN ;AN000; append =( + APPEND_STRING SC_LINE, MC_LINE, S_CP_DRIVER ;AN000; append driver parameters + APPEND_STRING SC_LINE, MC_LINE, SC_COMMA ;AN000; append comma + APPEND_STRING SC_LINE, MC_LINE, S_STR120_2 ;AN000; append no of designates + APPEND_STRING SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000; append close bracket + INIT_VAR N_WORD_2, 1 ;AN000; set driver status = valid + .ENDIF ;AN000; + INC_VAR N_WORD_1 ;AN000; inc printer number + .UNTIL < N_WORD_1 gt 3 > near ;AN000; end of repeat block + .IF < N_WORD_2 eq 1 > ;AN000; if driver status is valid + .THEN ;AN000; + WRITE_LINE SC_LINE ;AN000; write PRINTER.SYS command + .ENDIF ;AN000; + .ENDIF ;AN000; + ; + ;;;init S_STR120_1 to INSTALL=\ ; + MERGE_STRING S_STR120_1,M_STR120_1,SC_INSTALL,S_DOS_PATH ;AN000; + ; + ;;;write INSTALL=\KEYB.COM US,,\KEYBOARD.SYS + COMPARE_STRINGS S_KEYBOARD, S_US ;AN000; + .IF < c > and ;AN000; if keyboard not US (will be handled in autoexec) + .IF < N_KYBD_VAL eq E_KYBD_VAL_YES > near ;AN000; if keyboard is valid + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_KEYB_C ;AN000; + APPEND_STRING SC_LINE, MC_LINE, S_US ;AN000; append keyboard id = US + APPEND_STRING SC_LINE, MC_LINE, SC_COMMAS ;AN000; append comma + APPEND_STRING SC_LINE, MC_LINE,S_DOS_PATH ;AN000; append install path + APPEND_STRING SC_LINE,MC_LINE,SC_KEYBOARD_SYS ;AN000; append KEYBOARD.SYS + WRITE_LINE SC_LINE ;AN000; write KEYB command + .ENDIF ;AN000; + ; + ;;;S_STR120_1 = INSTALL=\ ; + ;;;write INSTALL=\SHARE ; + .IF < F_SHARE eq E_SHARE_YES > ;AN000; if SHARE support required + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_SHARE;AN000; + APPEND_STRING SC_LINE, MC_LINE, S_SHARE ;AN000; + WRITE_LINE SC_LINE ;AN000; write SHARE command + .ENDIF ;AN000; + ; + ;;;S_STR120_1 = INSTALL=\ ; + ;;;write INSTALL=\FASTOPEN ; + .IF < F_FASTOPEN eq E_FASTOPEN_YES > ;AN000; if FASTOPEN support required + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_FASTOPEN;AN000; + APPEND_STRING SC_LINE, MC_LINE, S_FASTOPEN ;AN000; + WRITE_LINE SC_LINE ;AN000; write FASTOPEN command + .ENDIF ;AN000; + ; + ;;;S_STR120_1 = INSTALL=\ ; + ;;;write INSTALL=\NLSFUNC \COUNTRY.SYS ; + .IF < F_CPSW eq E_CPSW_YES > ;AN000; if code page switching support required + .THEN ;AN000; + MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_NLSFUNC;AN000; + APPEND_STRING SC_LINE,MC_LINE,S_DOS_PATH ;AN000; + APPEND_STRING SC_LINE, MC_LINE,SC_COUNTRY_SYS ;AN000; + WRITE_LINE SC_LINE ;AN000; write NLSFUNC command + .ENDIF ;AN000; + ; + RET ;AN000; +CREATE_CONFIG_SYS ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Create DOSSHELL.BAT file +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CREATE_SHELL_BAT PROC ;AN000;DT + ;AN000;DT + ;;;write SHELL ;AN000;DT + .IF < I_DEST_DRIVE eq E_DEST_DRIVE_C > ;AN000; If install fixed disk ;AN111;JW + WRITE_LINE SC_DRIVE_C ;AN013;JW + COPY_STRING SC_LINE, MC_LINE, SC_CD ;AN000; + APPEND_STRING SC_LINE, MC_LINE, S_INSTALL_PATH ;AN000; + WRITE_LINE SC_LINE ;AN000; write CD path command + .ENDIF ;AN000; + ; + WRITE_LINE SC_SHELLC_1 ;AN000;DT + MERGE_STRING SC_LINE,MC_LINE,SC_AT_SIGN,SC_BREAK ;AN092;SEH break=off + APPEND_STRING SC_LINE,MC_LINE,S_OFF ;AN092;SEH + WRITE_LINE SC_LINE ;AN092;SEH + MERGE_STRING SC_LINE,MC_LINE,SC_SHELLC,S_SHELL ;AN000;DT + WRITE_LINE SC_LINE ;AN000;DT write SHELL command + WRITE_LINE SC_SHELLC_2 ;AN000;DT + ; + ;;;restore BREAK= ; + .IF < S_BREAK gt 0 > ;AN000;JW if field length > zero + MERGE_STRING SC_LINE,MC_LINE,SC_AT_SIGN,SC_BREAK ;AN000;JW + APPEND_STRING SC_LINE,MC_LINE,S_BREAK ;AN000;JW + WRITE_LINE SC_LINE ;AN000;JW write BREAK command + .ENDIF ;AN000;JW + ; + ; + RET ;AN000;DT +CREATE_SHELL_BAT ENDP ;AN000;DT +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +SELECT ENDS ;AN000; + END ;AN000; + \ No newline at end of file diff --git a/v4.0/src/SELECT/GET_HELP.ASM b/v4.0/src/SELECT/GET_HELP.ASM new file mode 100644 index 0000000..4aacaa5 --- /dev/null +++ b/v4.0/src/SELECT/GET_HELP.ASM @@ -0,0 +1,233 @@ +PAGE 55,132 ;AN000; +NAME SELECT ;AN000; +TITLE SELECT - GET_HELP_ID ;AN000; +SUBTTL Get_Help.asm ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; GET_HELP_ID +; +; Entry: +; +; +; +; Exit: +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine + ASSUME CS:SELECT ;AN000; + ; + ; +INP_HELP_ID DW 12,10,10 ;AN000; help_id 1, row', col' STR_DOS_LOC + DW 19,12,15 ;AN000; help_id 2, row', col' STR_EXT_PARMS + DW 31,11,20 ;AN000; help_id 3, row', col' STR_DOS_PATH + DW 32,11,20 ;AN000; help_id 4, row', col' STR_DOS_APPEND + DW 33,11,20 ;AN000; help_id 5, row', col' STR_DOS_PROMPT + DW 34,12,20 ;AN000; help_id 6, row', col' STR_SHELL + DW 35,12,20 ;AN000; help_id 7, row', col' STR_KSAM + DW 35,12,20 ;AN000; help_id 8, row', col' STR_FASTOPEN + DW 36,12,20 ;AN000; help_id 9, row', col' STR_SHARE + DW 37,12,20 ;AN000; help_id 10, row', col' STR_GRAPHICS + DW 38,12,20 ;AN000; help_id 11, row', col' STR_XMAEM + DW 39,12,20 ;AN000; help_id 12, row', col' STR_XMA2EMS + DW 40,13,20 ;AN000; help_id 13, row', col' STR_VDISK + DW 41,12,20 ;AN000; help_id 14, row', col' STR_BREAK + DW 42,12,20 ;AN000; help_id 15, row', col' STR_BUFFERS + DW 43,11,20 ;AC000; help_id 16, row', col' STR_DOS_APPEND_P JW + DW 44, 2,20 ;AN000; help_id 17, row', col' STR_FCBS + DW 45, 2,20 ;AN000; help_id 18, row', col' STR_FILES + DW 46, 2,20 ;AN000; help_id 19, row', col' STR_LASTDRIVE + DW 47, 2,20 ;AN000; help_id 20, row', col' STR_STACKS + DW 48, 2,20 ;AN000; help_id 21, row', col' STR_VERIFY + DW 13,10,10 ;AN000; help_id 22, row', col' NUM_PRINTER + DW 18,10,20 ;AN000; help_id 23, row', col' NUM_EXT_DISK + DW 53,12,20 ;AN000; help_id 24, row', col' NUM_YEAR + DW 53,12,20 ;AN000; help_id 25, row', col' NUM_MONTH + DW 53,12,20 ;AN000; help_id 26, row', col' NUM_DAY + DW 53,12,20 ;AN000; help_id 27, row', col' NUM_HOUR + DW 53,12,20 ;AN000; help_id 28, row', col' NUM_MINUTE + DW 53,11,20 ;AN000; help_id 29, row', col' NUM_SECOND +INP_HELP_ID_LEN EQU ($-INP_HELP_ID)/6 ;AN000; +INP_HELP_ID_ELE EQU 3 ;AN000; + ; +SCR_HELP_ID DW 3 ;AN000; scr_id1 + DW 3,12,20 ;AN000; help_id1,row1',col1' + DW 4, 1,20 ;AN000; + DW 5, 3,20 ;AN000; + DW 2 ;AN000; scr_id2 + DW 6, 1,20 ;AN000; + DW 7, 3,20 ;AN000; + DW 1 ;AN000; + DW 8, 3,20 ;AN000; SCR_CTY_1 + DW 1 ;AN000; + DW 8, 3,20 ;AN000; SCR_CTY_2 + DW 1 ;AN000; + DW 9,10,20 ;AN000; SCR_KYB_1 + DW 1 ;AN000; + DW 9,10,20 ;AN000; SCR_KYB_2 + DW 1 ;AN000; + DW 10,10,23 ;AN000; SCR_FR_KYB + DW 1 ;AN000; + DW 10,10,23 ;AN000; SCR_IT_KYB + DW 1 ;AN000; + DW 10,10,23 ;AN000; SCR_UK_KYB + DW 1 ;AN000; + DW 11,10,20 ;AN111; SCR_DEST_B_C JW + DW 1 ;AN000; + DW 14, 1,25 ;AN000; SCR_PRT_TYPE + DW 1 ;AN000; + DW 15, 9,20 ;AN000; SCR_PARALLEL + DW 1 ;AN000; + DW 16,10,20 ;AN000; SCR_SERIAL + DW 1 ;AN000; + DW 17, 8,20 ;AN000; SCR_PRT_REDIR + DW 2 ;AN000; + DW 20, 6,20 ;AN000; SCR_REVIEW + DW 21, 6,20 ;AN000; SCR_REVIEW + DW 9 ;AN000; + DW 22,10,11 ;AN000; + DW 23,11,11 ;AN000; + DW 24,12,11 ;AN000; + DW 25, 1,11 ;AN000; + DW 26, 2,11 ;AN000; + DW 27, 3,11 ;AN000; + DW 28, 4,11 ;AN000; + DW 29, 5,11 ;AN000; + DW 30, 6,11 ;AN000; + DW 6 ;AN000; + DW 22,10,11 ;AN000; + DW 24,11,11 ;AN000; + DW 26,12,11 ;AN000; + DW 27, 1,11 ;AN000; + DW 29, 2,11 ;AN000; + DW 30, 3,11 ;AN000; SCR_FUNC_DISKET + DW 2 ;AN000; + DW 49, 1,11 ;AN000; + DW 50, 1,11 ;AN000; SCR_FIXED_FIRST + DW 2 ;AN000; + DW 51, 1,11 ;AN000; + DW 52, 1,11 ;AN000; SCR_FIXED_BOTH + DW 2 ;AN000; + DW 54, 1,11 ;AN000; + DW 55, 1,11 ;AN000; SCR_FORMAT + DW 0 ;AN000; SCR_CONTEXT_HLP + DW 0 ;AN000; SCR_INDEX_HLP + DW 0 ;AN000; SCR_TITLE_HLP + DW 0 ;AN000; + DW 0 ;AN000; + DW 2 ;AN000; SCR_COPY_DEST JW + DW 18,10,10 ;AC035; SEH new help text + DW 19,10,10 ;AC035; SEH new help text + DW 1 ;AN000; + DW 11,10,20 ;AN111; SCR_DEST_A_C JW + DW 2 ;AN000; + DW 56, 6,20 ;AN000; SCR_choose_screen + DW 57, 6,20 ;AN000; SCR_choose_screen +SCR_HELP_ID_LEN EQU 28 ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; GET_HELP_ID +; +; Entry: +; AX = 1 for input field help_id's +; BX = field_id +; AX = 2 for scroll help_id's +; BX = scroll_id +; CX = index +; +; Exit: +; AX = help_id +; DH = row' +; DL = col' +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +THREE DW 3 ;AN000; + ; + PUBLIC GET_HELP_ID ;AN000; +GET_HELP_ID PROC ;AN000; + CMP AX,1 ;AN000; + JNE GH_8 ;AN000; + ; + CMP AX,INP_HELP_ID_LEN ;AN000; + JA GH_8 ;AN000; + ; + PUSH BX ;AN000; + PUSH CX ;AN000; + MOV AX,BX ;AN000; + DEC AX ;AN000; + MOV BX,INP_HELP_ID_ELE*2 ;AN000; + MUL BX ;AN000; + MOV BX,AX ;AN000; + MOV AX,CS:[BX].INP_HELP_ID ;AN000; + MOV CX,CS:[BX+2].INP_HELP_ID;AN000; + MOV DX,CS:[BX+4].INP_HELP_ID;AN000; + XCHG CH,CL ;AN000; + MOV DH,CH ;AN000; + POP CX ;AN000; + POP BX ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; AX = 2 for scroll help_id's +; BX = scroll_id +; CX = index +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GH_8: CMP AX,2 ;AN000; + JNE GH_20 ;AN000; + ; + CMP BX,SCR_HELP_ID_LEN ;AN000; + JA GH_20 ;AN000; + ; + OR CX,CX ;AN000; + JE GH_20 ;AN000; + ; + PUSH CX ;AN000; search for matching scroll_id + PUSH SI ;AN000; + MOV DX,1 ;AN000; + XOR SI,SI ;AN000; + ; +GH_9: CMP DX,BX ;AN000; + JE GH_10 ;AN000; + MOV AX,CS:[SI]+SCR_HELP_ID ;AN000; get number of help screens + PUSH DX ;AN000; + MUL THREE ;AN000; + POP DX ;AN000; + ADD AX,1 ;AN000; +additional entries (row',col',count) + SHL AX,1 ;AN000; account for WORD entries + ADD SI,AX ;AN000; + INC DX ;AN000; + CMP DX,SCR_HELP_ID_LEN ;AN000; + JBE GH_9 ;AC000; JW Changed to JBE + JMP GH_15 ;AN000; + ; +GH_10: CMP CX,CS:[SI]+SCR_HELP_ID ;AN000; check for index out of range? + JBE GH_11 ;AN000; then + MOV CX,1 ;AN000; set to first help_id.... + ; +GH_11: MOV AX,CX ;AN000; scroll_id found!!!! + DEC AX ;AN000; + MUL THREE ;AN000; + INC AX ;AN000; + SHL AX,1 ;AN000; + ADD SI,AX ;AN000; + MOV AX,CS:[SI]+SCR_HELP_ID ;AN000; + MOV CX,CS:[SI+2].SCR_HELP_ID;AN000; + MOV DX,CS:[SI+4].SCR_HELP_ID;AN000; + XCHG CH,CL ;AN000; + MOV DH,CH ;AN000; +GH_15: POP SI ;AN000; + POP CX ;AN000; +GH_20: ;AN000; + RET ;AN000; +GET_HELP_ID ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SELECT ENDS ;AN000; + END GET_HELP_ID ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + diff --git a/v4.0/src/SELECT/GET_STAT.C b/v4.0/src/SELECT/GET_STAT.C new file mode 100644 index 0000000..aeab764 --- /dev/null +++ b/v4.0/src/SELECT/GET_STAT.C @@ -0,0 +1,1216 @@ + /************************************************************/ + /* */ + /* Header: GET_STATUS */ + /* Purpose: To transfer information provided by FDISK */ + /* to the DOS SELECT utility. The information */ + /* provided will determine the status of the */ + /* specified fixed disk. The information is */ + /* is pertinent to determine the parameters */ + /* displayed and utilized in SELECT panels */ + /* that will assume default values according */ + /* to option the user selected without viewing */ + /* or modifying FDISK. */ + /* */ + /* The status info will be returned in the control */ + /* block defined below: */ + /* */ + /* DISK_STATUS STRUC */ + /* N_PART_NAME DB 0 ;partition name */ + /* N_PART_SIZE DW 0 ;size of the above */ + /* ;partition in (Mbytes)*/ + /* N_PART_STATUS DB 0 ;Partition status */ + /* P_PART_DRIVE DB ? ;drive letter assigned*/ + /* ;to the partition */ + /* DISK_STATUS ENDS ;(ASCII value) */ + /* */ + /*************************************************************/ + + /*************************************************************/ + /* First check to make the ax is specified correctly to make */ + /* the call to Get_STATUS; The value in AX should be 01 */ + /* IF compare is true then proceed with migration */ + /* ELSE */ + /* set AX to to one and report error wrong call value */ + /* ENDIF */ + /* */ + /* */ + /*************************************************************/ +/*****************************************************************************/ + +#include "stdio.h" +#include "stdlib.h" +#include "string.h" +#include "dos.h" +#include "get_stat.h" +#include "extern.h" + + +void get_status(union REGS *, union REGS *, struct SREGS *); +void valid_stat(struct DISK_STATUS far *, union REGS *); +void init_partition_tables(void); +char read_boot_record(unsigned,unsigned char,unsigned char,unsigned char); /* AC000 */ +char get_drive_parameters(unsigned char); +void sort_part_table(char); +void sort_ext_table(char); +unsigned find_part_free_space(void); +unsigned find_ext_free_space(void); +void load_logical_drive(char, unsigned char); +char find_logical_drive(void); +unsigned cylinders_to_mbytes(unsigned,unsigned char,unsigned char); /* AN000 */ +char find_partition_location(unsigned char); +char find_free_partition(void); +char find_partition_type(unsigned char); +char get_disk_info(void); +unsigned copy_fdisk2select(unsigned, DSE far * ); +char get_num_logical_dos_drives(void); +unsigned get_partition_size(unsigned char); + +void DiskIo(union REGS *,union REGS *, struct SREGS *); +unsigned char find_partition_system_type(void); + +#define DptrOf(ti) ( Dptr + (sizeof(DSE) * (ti)) ) + +void get_status(RinPtr, RoutPtr, SrPtr) + union REGS *RinPtr; + union REGS *RoutPtr; + struct SREGS *SrPtr; + +BEGIN + DSE (far * Dptr); + + /* ------------- drive = regs.x.ax; */ + /* Make drive zero based */ + /* ------------- drive--; */ + + FP_SEG(Dptr) = SrPtr->es; + FP_OFF(Dptr) = RinPtr->x.di; + + RoutPtr->x.bx = 0; + RoutPtr->x.cx = 0; + + switch(RinPtr->x.ax) /* Check the value in AX */ + BEGIN + + case uc(FST_DRV): /* Is it a query for the first drive? */ + case uc(SEC_DRV): /* Is it a query for the 2nd drive? */ + cur_disk = c(RinPtr ->x.ax - 1); + RoutPtr->x.ax = 0; + valid_stat(Dptr,RoutPtr); /* yes than go execute */ + break; + + default: /* otherwise - set AX to one & exit */ + RoutPtr->x.ax = 1; + break; + END + + return; + +END + +/*****************************************************************************/ +/******************* START OF SPECIFICATIONS *******************/ +/* */ +/* SUBROUTINE NAME: VALID_STAT */ +/* */ +/* DESCRIPTIVE NAME: */ +/* */ +/* FUNCTION: */ +/* ENTRY: */ +/* */ +/* MOV AX,?? ; AX = 1 first fixed drive */ +/* */ +/* ; = 2 second fixed drive */ +/* ; ES:DI - points to parameter block */ +/* ; */ +/* CALL GET_DISK_STATUS ; call to subroutine */ +/* ; */ +/* ; EXIT: */ +/* ; AX = 1 drive is not valid */ +/* ; = 0 drive is valid */ +/* ; CX = number of items in parameter block */ +/* ; BX = status of fixed drive */ +/* ; as defined below - */ +/* ; more than 1 bit can be set */ +/* ; ES:DI is filled with data */ +/* */ +/* EXIT-NORMAL: ERROR=FALSE */ +/* */ +/* EXIT-ERROR: ERROR=TRUE */ +/* GOTO internal_program_error if invalid num */ +/* input is returned to this level */ +/* */ +/* EFFECTS: */ +/* */ +/* */ +/* */ +/* INTERNAL REFERENCES: */ +/* ROUTINES: */ +/* */ +/* */ +/* EXTERNAL REFERENCES: */ +/* ROUTINES: */ +/* */ +/******************** END OF SPECIFICATIONS ********************/ + +void valid_stat(Dptr,RoutPtr) + DSE (far * Dptr); + union REGS *RoutPtr; + +BEGIN + +unsigned table_count; +char i; +unsigned m; +unsigned temp; + +/**********************************replacement***********************************************/ +/* Initialize the tables that will be used to store the data needed for */ +/* SELECT. The disk_status tables will be initialized to 0 for all */ +/* values except the logical drive value, if exist in an extended partition */ +/* other wise the field will remain undefined. This must be done for both */ +/* tables although it has not been established that two physical drives exist */ +/* at this point. Additional tables needed are the tables 1) To store the */ +/* amount of free space between each partition 2) the amount of free space */ +/* between each logical drive (the tables are declared to integer */ +/********************************************************************************************/ + + + /* Init variables */ + RoutPtr->x.bx = 0; + RoutPtr->x.cx = 0; + table_count = 0; + + /* Read drives to get disk information on size, etc..... */ + /* good_disk[] = FALSE if can't read disk */ + good_disk[0] = TRUE; + good_disk[1] = TRUE; + if (!get_disk_info()) + BEGIN + good_disk[0] = FALSE; + good_disk[1] = FALSE; + END + + /* See if we could read the selected drive */ + if ( !good_disk[cur_disk] ) + RoutPtr->x.ax = 1; /* indicate disk read failed */ + else + BEGIN + init_partition_tables(); + + /* Is there a primary ? */ + + if (find_partition_system_type() != uc(NOT_FOUND)) + BEGIN + RoutPtr->x.bx |= E_DISK_PRI; + (Dptr+table_count) -> n_part_name = E_PART_PRI_DOS; + (Dptr+table_count) -> n_part_size = get_partition_size(find_partition_system_type()); + + for (i = c(0); i < c(4);i++) /* AC000 */ + if ( (part_table[cur_disk][i].sys_id == DOS12) || + (part_table[cur_disk][i].sys_id == DOS16) || + (part_table[cur_disk][i].sys_id == DOSNEW) ) + break; + + (Dptr+table_count) -> n_part_status = E_PART_UNFORMAT; + if (part_table[cur_disk][i].formatted) + (Dptr+table_count) -> n_part_status = E_PART_FORMAT; + (Dptr+table_count) -> p_part_drive = part_table[cur_disk][i].drive_letter; + for (m=u(0);m < u(4); m++) + (Dptr+table_count) -> n_part_level[m] = part_table[cur_disk][i].system_level[m]; + + + table_count++; + END + + /* if there an extended? */ + + if (find_partition_type(EXTENDED)) + BEGIN + /* Found one, now fill in entry with vital stats */ + RoutPtr->x.bx |= E_DISK_EXT_DOS; + (Dptr+table_count) ->n_part_name = E_PART_EXT_DOS; + (Dptr+table_count) ->n_part_size = get_partition_size(EXTENDED); + (Dptr+table_count) -> n_part_status = E_PART_UNFORMAT; + (Dptr+table_count) -> p_part_drive = next_letter; + for (m=u(0);m < u(4); m++) + (Dptr+table_count) -> n_part_level[m] = NUL; + table_count++; + END + + /* Are there any logical drives */ + + if ( (find_partition_type(EXTENDED)) && (find_logical_drive()) ) + RoutPtr->x.bx |= E_DISK_LOG_DRI; + + /* Is there free extended partition space, and are there free entries?*/ + + if ( (temp = find_ext_free_space()) != u(0)) + BEGIN + /* Indicate we have room in the extended, and build entry to show how much */ + RoutPtr->x.bx |= E_DISK_EDOS_MEM; + (Dptr+table_count) ->n_part_name = uc(E_FREE_MEM_EDOS); + (Dptr+table_count) ->n_part_size = temp; + (Dptr+table_count) -> n_part_status = E_PART_UNFORMAT; + (Dptr+table_count) -> p_part_drive = c(' '); + for (m=u(0);m < u(4); m++) + (Dptr+table_count) -> n_part_level[m] = NUL; + table_count++; + END + + /* Is there any free space in master boot record partitions, and free partitions? */ + + if ( (temp = find_part_free_space()) != u(0)) + BEGIN + /* Indicate we have free space in the MBR partition tables */ + RoutPtr->x.ax = 0; + RoutPtr->x.bx |= E_DISK_FREE_MEM; + (Dptr+table_count) ->n_part_name = uc(E_FREE_MEM_DISK); + (Dptr+table_count) ->n_part_size = temp; + for (m=u(0);m < u(4); m++) + (Dptr+table_count) -> n_part_level[m] = NUL; + table_count++; + END + + /* If there is a logical drive get the drive letters and the associated */ + /* size, and for the logical drive */ + + /* First check again to see if their is an extended partition */ + /* and see if there exist any logical drives --- sort the logical */ + /* drives and and get the drive and stuffit ine the table */ + + /********************************CNS******************************************/ + if ( (find_partition_type(EXTENDED)) && (find_logical_drive()) ) + table_count += copy_fdisk2select(table_count,Dptr); /* go fill the tables */ + /*****************************************************************************/ + /* Now we should get the number of items that will be returned to select */ + /* and stuff it in CX */ + /******************************************************************************/ + RoutPtr->x.cx = table_count; /* number of items */ + regs.x.ax = u(0); + + END + + return; + +END + +void init_partition_tables() +BEGIN + +unsigned i; +unsigned char j; +unsigned k; +unsigned l; +unsigned m; +unsigned n; +unsigned partition_location; +char temp; +char more_drives_exist; +char num_logical_drives; +unsigned insert; +unsigned index; +char save_disk; + + save_disk = cur_disk; + + /* initialize first drive found to "C" */ + next_letter = c('C'); /* AC000 */ + + /* Look at both disks */ + for (j = uc(0); j < number_of_drives; j++) /* AC000 */ + BEGIN + + /* Initialize the cur_disk field to the drive in question so */ + /* that the calls to the partition information routines will work */ + cur_disk = ((char)(j)); + + /* Read in the master boot record and see if it was okay */ + if (read_boot_record(u(0),j,uc(0),uc(1))) /* AC000 */ + BEGIN + + /* See if there was a valid boot record there */ + if ((boot_record[510] == uc(0x55)) && (boot_record[511] == uc(0xAA))) /* AC000 */ + BEGIN + + /* What was on the disk is a valid boot record, so save it */ + for (i=u(0);i < u(BYTES_PER_SECTOR); i++) /* AC000 */ + BEGIN + master_boot_record[j][i] = boot_record[i]; + END + END + /* We've now got a copy of the master boot record saved. Now we need */ + /* to translate what in the boot record to the area that it's going + /* to be worked on (part_table) */ + + /* Read in the data from the master boot record partition entries*/ + for (i=u(0); i < u(4); i++) /* AC000 */ + BEGIN + index = i*16; + + /* Get boot ind */ + part_table[j][i].boot_ind = master_boot_record[j][0x1BE+index]; + + /* Start head */ + part_table[j][i].start_head = master_boot_record[j][0x1BF+index]; + + /* Start sector - unscramble it from INT 13 format*/ + part_table[j][i].start_sector= (master_boot_record[j][0x1C0+index] & 0x3F); + + /* Start cyl - unscramble it from INT 13 format*/ + part_table[j][i].start_cyl= ((((unsigned)master_boot_record[j][0x1C0+index]) & 0x00C0) << 2) + + ((unsigned)master_boot_record[j][0x1C1+index]); + + /* System id */ + part_table[j][i].sys_id = master_boot_record[j][0x1C2+index]; + + /* End head */ + part_table[j][i].end_head = master_boot_record[j][0x1C3+index]; + + /* End sector - unscramble it from INT 13 format*/ + part_table[j][i].end_sector= (master_boot_record[j][0x1C4+index] & 0x3F); + + /* End cyl - unscramble it from INT 13 format*/ + part_table[j][i].end_cyl= ((((unsigned)master_boot_record[j][0x1C4+index]) & 0x00C0) << 2) + + ((unsigned)master_boot_record[j][0x1C5+index]); + + /* Relative sectors */ + + part_table[j][i].rel_sec = + ((unsigned long)master_boot_record[j][0x1C9+index]) << 24; + + part_table[j][i].rel_sec = part_table[j][i].rel_sec + + (((unsigned long)master_boot_record[j][0x1C8+index]) << 16); + + part_table[j][i].rel_sec = part_table[j][i].rel_sec + + (((unsigned long)master_boot_record[j][0x1C7+index]) << 8); + + part_table[j][i].rel_sec = part_table[j][i].rel_sec + + ((unsigned long)master_boot_record[j][0x1C6+index]); + + /* Number of sectors */ + part_table[j][i].num_sec = + ((unsigned long)master_boot_record[j][0x1CD+index]) << 24; + + part_table[j][i].num_sec = part_table[j][i].num_sec + + (((unsigned long)master_boot_record[j][0x1CC+index]) << 16); + + part_table[j][i].num_sec = part_table[j][i].num_sec + + (((unsigned long)master_boot_record[j][0x1CB+index]) << 8); + + part_table[j][i].num_sec = part_table[j][i].num_sec + + ((unsigned long)master_boot_record[j][0x1CA+index]); + + part_table[j][i].mbytes_used = + cylinders_to_mbytes(((part_table[j][i].end_cyl-part_table[j][i].start_cyl)+1), + max_sector[cur_disk], max_head[cur_disk]); /* AN000 */ + + /* Set drive letter */ + if ( (part_table[j][i].sys_id == DOS12) || /* AN000 */ + (part_table[j][i].sys_id == DOS16) || /* AN000 */ + (part_table[j][i].sys_id == DOSNEW) ) /* AN000 */ + part_table[j][i].drive_letter = next_letter++; /* AN000 */ + + /* Clean out the boot_record */ + for (m=u(0);m < u(BYTES_PER_SECTOR); m++) /* AC000 */ + BEGIN + boot_record[m] = uc(0); /* AC000 */ + END + + part_table[j][i].formatted = FALSE; + for (m=u(0);m < u(4); m++) + part_table[j][i].system_level[m] = NUL; + if (read_boot_record(part_table[j][i].start_cyl, /* AN000 */ + j, + part_table[j][i].start_head, + part_table[j][i].start_sector)) + BEGIN /* AN000 */ + /* See if the disk has already been formated */ + if ((boot_record[510] == uc(0x55)) && (boot_record[511] == uc(0xAA))) /* AN000 */ + BEGIN + part_table[j][i].formatted = TRUE; /* AN000 */ + for (m=u(0);m < u(4); m++) + BEGIN + n = (m + u(7)); + part_table[j][i].system_level[m] = boot_record[n]; + END + END + read_boot_record(part_table[j][i].start_cyl,j,uc(0),uc(1)); + END + END + END + else + BEGIN + cur_disk = save_disk; + return; + END + END + + /* Look at both disks */ + for (j = uc(0); j < number_of_drives; j++) /* AC000 */ + BEGIN + + /* Initialize the cur_disk field to the drive in question so */ + /* that the calls to the partition information routines will work */ + cur_disk = ((char)(j)); + BEGIN + /* Read in the master boot record and see if it was okay */ + if (read_boot_record(u(0),j,uc(0),uc(1))) /* AC000 */ + /* Now, go read in extended partition info */ + BEGIN + if (find_partition_type(uc(EXTENDED))) /* AC000 */ + BEGIN + /* Initialize the array to zero's - include one dummy entry */ + for (i=u(0); i < u(24); i++) /* AC000 */ + BEGIN + ext_table[j][i].boot_ind = uc(0); /* AC000 */ + ext_table[j][i].start_head = uc(0); /* AC000 */ + ext_table[j][i].start_sector = uc(0); /* AC000 */ + ext_table[j][i].start_cyl = u(0); /* AC000 */ + ext_table[j][i].sys_id = uc(0); /* AC000 */ + ext_table[j][i].end_head = uc(0); /* AC000 */ + ext_table[j][i].end_sector = uc(0); /* AC000 */ + ext_table[j][i].end_cyl = u(0); /* AC000 */ + ext_table[j][i].rel_sec = ul(0); /* AC000 */ + ext_table[j][i].num_sec = ul(0); /* AC000 */ + ext_table[j][i].mbytes_used = f(0); /* AN000 */ + ext_table[j][i].drive_letter = NUL; /* AN000 */ + + for (m=u(0);m < u(4); m++) + ext_table[j][i].system_level[m] = NUL; /* AN000 */ + + END + + /* Find where the first extended boot record is */ + temp = find_partition_location(uc(EXTENDED)); /* AC000 */ + partition_location = part_table[j][temp].start_cyl; + + /* Go find extended boot records as long as there are more of them */ + more_drives_exist = TRUE; + + /* Init the number of logical drives, for a array index */ + num_logical_drives = c(0); /* AC000 */ + + while (more_drives_exist) + BEGIN + /* Assume we won't find another logical drive */ + more_drives_exist = FALSE; + + /*Read in the extended boot record */ + if (read_boot_record(partition_location,j,uc(0),uc(1))) /* AC000 */ + BEGIN + load_logical_drive(num_logical_drives,j); + + + /* find the next logical drive */ + for (i = u(0); i < u(4); i++) /* AC000 */ + BEGIN + index = i*16; + /* See if a sys id byte of exteneded exists */ + if (boot_record[0x1C2+index] == uc(EXTENDED)) /* AC000 */ + BEGIN + /* Found another drive, now get its location */ + partition_location= (((((unsigned)(boot_record[0x1C0 + index])) & 0x00C0) << 2)); + partition_location = partition_location + ((unsigned)(boot_record[0x1C1+index])); + + /* Indicate we found another one */ + more_drives_exist = TRUE; + + /* Up the count of found ones */ + num_logical_drives++; + break; + END + END + END + END + END + END + END + END + cur_disk = save_disk; + return; +END + + +/* */ +unsigned find_part_free_space() + +BEGIN + + +char i; +char partition_count; +char last_found_partition; +unsigned temp; +char freespace_count; +char any_partition; +unsigned temp_size; + + /* Sort the partition table */ + sort_part_table(c(4)); /* AC000 */ + + + /* Intialize free space to zero */ + for (i = c(0); i < c(24); i++) /* AC000 */ + BEGIN + free_space[i].space = u(0); /* AC000 */ + free_space[i].start = u(0); /* AC000 */ + free_space[i].end = u(0); /* AC000 */ + free_space[i].mbytes_unused = u(0); /* AC000 */ /* AN000 */ + END + + /* Find space between start of disk and first partition */ + partition_count = c(0); /* AC000 */ + + any_partition = FALSE; + for (i = c(0); i < c(4); i++) /* AC000 */ + BEGIN + if (part_table[cur_disk][sort[i]].sys_id != uc(0)) /* AC000 */ + BEGIN + /* Found a partition, get the space */ + + free_space[0].start = u(0); /* AC000 */ + + /* free space ends before start of next valid partition */ + if (part_table[cur_disk][sort[i]].start_cyl > u(0)) /* AC000 */ + free_space[0].end = part_table[cur_disk][sort[i]].start_cyl-1; + + free_space[0].space = part_table[cur_disk][sort[i]].start_cyl; + free_space[0].mbytes_unused = + cylinders_to_mbytes(free_space[0].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */ + + partition_count = i; + last_found_partition = sort[i]; + any_partition = TRUE; + break; + END + END + /* See if any partitions were there */ + if (any_partition) + BEGIN + /* Look for space between the rest of the partitions */ + freespace_count = c(1); /* AC000 */ + for (i = partition_count+1; i < c(4); i++) /* AC000 */ + BEGIN + if (part_table[cur_disk][sort[i]].sys_id != uc(0)) /* AC000 */ + BEGIN + + /* Check to see if more than one partition on a cylinder (i.e. XENIX bad block) */ + /* If so, leave the space at zero */ + + if (part_table[cur_disk][sort[i]].start_cyl != part_table[cur_disk][last_found_partition].end_cyl) + + BEGIN + /* No, things are normal */ + /* Get space between the end of the last one and the start of the next one */ + free_space[freespace_count].space = part_table[cur_disk][sort[i]].start_cyl + - (part_table[cur_disk][last_found_partition].end_cyl+1); + + temp_size = (part_table[cur_disk][sort[i]].start_cyl - + part_table[cur_disk][last_found_partition].end_cyl); + + if (temp_size != u(0) ) /* AC000 */ + free_space[freespace_count].space = temp_size - u(1); /* AC000 */ + END + + free_space[freespace_count].start = part_table[cur_disk][last_found_partition].end_cyl+1; + free_space[freespace_count].end = part_table[cur_disk][sort[i]].start_cyl -1; + free_space[freespace_count].mbytes_unused = + cylinders_to_mbytes(free_space[freespace_count].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */ + + /* update the last found partition */ + last_found_partition = sort[i]; + freespace_count++; + END + END + /* Find the space between the last partition and the end of the disk */ + free_space[freespace_count].space = (total_disk[cur_disk] + - part_table[cur_disk][last_found_partition].end_cyl)-1; + free_space[freespace_count].start = part_table[cur_disk][last_found_partition].end_cyl+1; + free_space[freespace_count].end = total_disk[cur_disk]-1; + free_space[freespace_count].mbytes_unused = + cylinders_to_mbytes(free_space[freespace_count].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */ + END + else + BEGIN + /* No partitions found, show entire space as free */ + free_space[0].start = u(0); /* AC000 */ + free_space[0].end = total_disk[cur_disk]-1; + free_space[0].space = (free_space[0].end - free_space[0].start)+1; + free_space[0].mbytes_unused = + cylinders_to_mbytes(free_space[0].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */ + END + + /* Find largest free space */ + /* Zip thru the table */ + for (i = c(0); i < c(24); i++) /* AC000 */ + BEGIN + /* Is this one bigger ? */ + if (free_space[i].space > temp) + BEGIN + temp = free_space[i].space; + last_found_partition = i; + END + END + + return(free_space[last_found_partition].mbytes_unused); +END + +/* */ +unsigned find_ext_free_space() +BEGIN +char i; +char partition_count; +char last_found_partition; +unsigned temp; +char freespace_count; +char any_partition; +char ext_location; + + /* Sort the partition table */ + sort_ext_table(c(23)); /* AC000 */ + + /* Initialize free space to zero */ + for (i = c(0); i < c(24); i++) /* AC000 */ + BEGIN + free_space[i].space = u(0); /* AC000 */ + free_space[i].start = u(0); + free_space[i].end = u(0); /* AC000 */ + free_space[i].mbytes_unused = u(0); /* AN000 */ + END + + /* Find space between start of Extended partition and first volume */ + partition_count = c(0); /* AC000 */ + last_found_partition = c(0); + ext_location = find_partition_location(uc(EXTENDED)); /* AC000 */ + + if (ext_location != c(NOT_FOUND)) + BEGIN + + any_partition = FALSE; + for (i = c(0); i < c(24); i++) /* AC000 */ + BEGIN + if (ext_table[cur_disk][sort[i]].sys_id != uc(0)) /* AC000 */ + BEGIN + /* Found a partition, get the space */ + free_space[0].space = ext_table[cur_disk][sort[i]].start_cyl - part_table[cur_disk][ext_location].start_cyl; + free_space[0].start = part_table[cur_disk][ext_location].start_cyl; + free_space[0].end = ext_table[cur_disk][sort[i]].start_cyl-1; + free_space[0].mbytes_unused = + cylinders_to_mbytes(free_space[0].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */ + + partition_count = i; + last_found_partition = sort[i]; + any_partition = TRUE; + break; + END + END + /* See if any partitions were there */ + if (any_partition) + BEGIN + /* Look for space between the rest of the partitions */ + freespace_count = c(1); /* AC000 */ + for (i = partition_count+1; i < c(24); i++) /* AC000 */ + BEGIN + if (ext_table[cur_disk][sort[i]].sys_id != uc(0)) /* AC000 */ + BEGIN + + /* Get space between the end of the last one and the start of the next one */ + temp = ext_table[cur_disk][sort[i]].start_cyl - (ext_table[cur_disk][last_found_partition].end_cyl+1); + free_space[freespace_count].space = temp; + free_space[freespace_count].start = ext_table[cur_disk][last_found_partition].end_cyl+1; + free_space[freespace_count].end = ext_table[cur_disk][sort[i]].start_cyl -1; + free_space[freespace_count].mbytes_unused = + cylinders_to_mbytes(free_space[freespace_count].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */ + + + /* update the last found partition */ + last_found_partition = sort[i]; + freespace_count++; + END + END + /* Find the space between the last partition and the end of the extended partition */ + temp = part_table[cur_disk][ext_location].end_cyl - ext_table[cur_disk][last_found_partition].end_cyl; + free_space[freespace_count].space = temp; + free_space[freespace_count].start = ext_table[cur_disk][last_found_partition].end_cyl+1; + free_space[freespace_count].end = part_table[cur_disk][ext_location].end_cyl; + free_space[freespace_count].mbytes_unused = + cylinders_to_mbytes(free_space[freespace_count].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */ + + END + else + BEGIN + /* No partitions found, show entire space as free */ + free_space[0].space = (part_table[cur_disk][ext_location].end_cyl - part_table[cur_disk][ext_location].start_cyl) + 1; + free_space[0].start = part_table[cur_disk][ext_location].start_cyl; + free_space[0].end = part_table[cur_disk][ext_location].end_cyl; + free_space[0].mbytes_unused = + cylinders_to_mbytes(free_space[0].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */ + END + + /* Find largest free space */ + temp = u(0); /* AC000 */ + + /* Find largest free space */ + temp = u(0); /* AC000 */ + + /* Zip thru the table */ + for (i = c(0); i < c(24); i++) /* AC000 */ + BEGIN + /* Is this one bigger ? */ + if (free_space[i].space > temp) + BEGIN + temp = free_space[i].space; + last_found_partition = i; + END + END + END + /* Return with the largest free space */ + return(free_space[last_found_partition].mbytes_unused); +END +/* */ +void sort_part_table(size) + +char size; + +BEGIN + +char changed; +char temp; +char i; + + /* Init the sorting parameters */ + + for (i=c(0); i < size; i++) /* AC000 */ + BEGIN + sort[i] = i; + END + + /* Do a bubble sort */ + changed = TRUE; + + /* Sort until we don't do a swap */ + while (changed) + + BEGIN + changed = FALSE; + for (i=c(1); i < size; i++) /* AC000 */ + BEGIN + + /* Does the partition entry start before the previous one, or */ + /* is it empty (0 ENTRY). If empty, it automatically gets shoved */ + /* to the front, if the previous entry isn't also empty */ + + if ((part_table[cur_disk][sort[i]].end_cyl < part_table[cur_disk][sort[i-1]].end_cyl) + || ((part_table[cur_disk][sort[i]].sys_id == uc(0)) && (part_table[cur_disk][sort[i-1]].sys_id != uc(0)))) /* AC000 */ + + BEGIN + /* Swap the order indicators */ + temp = sort[i-1]; + sort[i-1] = sort[i]; + sort[i] = temp; + + /* printf("\nI-1 =%d\n",part_table[cur_disk][sort[i-1]].start_cyl);*/ + /* printf("I =%d\n",part_table[cur_disk][sort[i]].start_cyl);*/ + /* printf("Sort[i-1] = %d\n",sort[i-1]);*/ + /* printf("Sort[i] = %d\n",sort[i]); */ + /* wait_for_ESC(); */ + + + /* indicate we did a swap */ + changed = TRUE; + END + END + END + return; +END + + + + +/* */ +/* */ +void sort_ext_table(size) + +char size; + +BEGIN + +char changed; +char temp; +char i; + + /* Init the sorting parameters */ + + for (i=c(0); i < size; i++) /* AC000 */ + BEGIN + sort[i] = i; + END + + /* Do a bubble sort */ + changed = TRUE; + + /* Sort until we don't do a swap */ + while (changed) + + BEGIN + changed = FALSE; + for (i=c(1); i < size; i++) /* AC000 */ + BEGIN + + if (ext_table[cur_disk][sort[i]].start_cyl < ext_table[cur_disk][sort[i-1]].start_cyl) + BEGIN + + temp = sort[i-1]; + sort[i-1] = sort[i]; + sort[i] = temp; + /* indicate we did a swap */ + changed = TRUE; + END + END + END + return; +END + +/* */ +void load_logical_drive(point,drive) + +char point; +unsigned char drive; + +BEGIN + +char volume_label[11]; /* AN000 */ +unsigned i; +unsigned m; +unsigned n; +unsigned index; +unsigned dx_pointer; /* AN000 */ +unsigned partition_location; /* AN000 */ + + /* Check to see if anything is there */ + if ((boot_record[510] == uc(0x55)) && (boot_record[511] == uc(0xAA))) /* AC000 */ + BEGIN + /* The boot record is there - read in the logical drive if it is there */ + for (i = u(0); i < u(4); i++) /* AC000 */ + BEGIN + + index = i*16; + /* See if it is a defined extended drive*/ + if ((boot_record[0x1C2 + index] != uc(0)) && (boot_record[0x1C2 + index] != uc(EXTENDED))) /* AC000 */ + BEGIN + /* Get boot ind */ + ext_table[drive][point].boot_ind = boot_record[0x1BE + index]; + + /* Start head */ + ext_table[drive][point].start_head = boot_record[0x1BF + index]; + + /* Start sector - unscramble it from INT 13 format*/ + ext_table[drive][point].start_sector= (boot_record[0x1C0 + index] & 0x3F); + + /* Start cyl - unscramble it from INT 13 format*/ + ext_table[drive][point].start_cyl= ((((unsigned)boot_record[0x1C0+index]) & 0x00C0) << 2) + + ((unsigned)boot_record[0x1C1+index]); + + + /* System id */ + ext_table[drive][point].sys_id = boot_record[0x1C2+index]; + + /* End head */ + ext_table[drive][point].end_head = boot_record[0x1C3+index]; + + /* End sector - unscramble it from INT 13 format*/ + ext_table[drive][point].end_sector= (boot_record[0x1C4+index] & 0x3F); + + + /* End cyl - unscramble it from INT 13 format*/ + ext_table[drive][point].end_cyl= ((((unsigned)boot_record[0x1C4+index]) & 0x00C0) << 2) + + ((unsigned)boot_record[0x1C5+index]); + + /* Relative sectors */ + ext_table[drive][point].rel_sec = + ((unsigned long)boot_record[0x1C9+index]) << 24; + + ext_table[drive][point].rel_sec = + ext_table[drive][point].rel_sec+(((unsigned long)boot_record[0x1C8+index]) << 16); + + ext_table[drive][point].rel_sec = + ext_table[drive][point].rel_sec + (((unsigned long)boot_record[0x1C7+index]) << 8); + + ext_table[drive][point].rel_sec = + ext_table[drive][point].rel_sec + ((unsigned long)boot_record[0x1C6+index]); + + /* Number of sectors */ + + ext_table[drive][point].num_sec = + ((unsigned long)boot_record[0x1CD+index]) << 24; + + ext_table[drive][point].num_sec = + ext_table[drive][point].num_sec+(((unsigned long)boot_record[0x1CC+index]) << 16); + + ext_table[drive][point].num_sec = + ext_table[drive][point].num_sec + (((unsigned long)boot_record[0x1CB+index]) << 8); + + ext_table[drive][point].num_sec = + ext_table[drive][point].num_sec + ((unsigned long)boot_record[0x1CA+index]); + + ext_table[drive][point].mbytes_used = + cylinders_to_mbytes(((ext_table[drive][point].end_cyl - ext_table[drive][point].start_cyl)+1), + max_sector[drive], max_head[drive]); /* AN000 */ + + if ( (ext_table[drive][point].sys_id == DOS12) || /* AN000 */ + (ext_table[drive][point].sys_id == DOS16) || /* AN000 */ + (ext_table[drive][point].sys_id == DOSNEW) ) /* AN000 */ + ext_table[drive][point].drive_letter = next_letter++; /* AN000 */ + + partition_location = ext_table[drive][point].start_cyl; + + ext_table[drive][point].formatted = FALSE; + for (m=u(0);m < u(4); m++) + ext_table[drive][point].system_level[m] = NUL; + if (read_boot_record(ext_table[drive][point].start_cyl, /* AN000 */ + drive, + ext_table[drive][point].start_head, + ext_table[drive][point].start_sector)) + BEGIN /* AN000 */ + /* See if the disk has already been formated */ + if ((boot_record[510] == uc(0x55)) && (boot_record[511] == uc(0xAA))) /* AN000 */ + BEGIN + ext_table[drive][point].formatted = TRUE; /* AN000 */ + for (m=u(0);m < u(4); m++) + BEGIN + n = (m + u(7)); + ext_table[drive][point].system_level[m] = boot_record[n]; + END + END + + + read_boot_record(ext_table[drive][point].start_cyl,drive,uc(0),uc(1)); + END + END + END + END + + return; + +END + +/* */ +char find_partition_location(type) + +unsigned char type; + +BEGIN + char i; + +/* Look at all four partition entries for system id byte that matches */ + for (i = c(0); i < c(4);i++) /* AC000 */ + BEGIN + + /* if we find a match, do a TRUE return */ + if (part_table[cur_disk][i].sys_id == type) + BEGIN + return(i); + break; + END + END + /* Did not find one, return */ + return(c(NOT_FOUND)); /* AC000 */ +END + +/* */ +FLAG find_partition_type(type) +unsigned char type; + +BEGIN +char i; + +/* Look at all four partition entries for system id byte that matches */ + for (i = c(0); i < c(4);i++) /* AC000 */ + BEGIN + + /* if we find a match, do a TRUE return */ + if (part_table[cur_disk][i].sys_id == type) return(TRUE); + END + /* Did not find one, return FALSE */ + return(FALSE); +END +/* */ +unsigned char find_partition_system_type() + +BEGIN +char i; + +/* Look at all four partition entries for system id byte that matches */ + for (i = c(0); i < c(4);i++) /* AC000 */ + BEGIN + + /* if we find a match, do a TRUE return */ + if ( (part_table[cur_disk][i].sys_id == DOS12) || + (part_table[cur_disk][i].sys_id == DOS16) || + (part_table[cur_disk][i].sys_id == DOSNEW) ) + return(part_table[cur_disk][i].sys_id); + END + return(uc(NOT_FOUND)); /* AC000 */ +END +/* */ +char find_logical_drive() + +BEGIN +char i; + + /* See if there is a logical drive defined in Extended Partition */ + for (i = c(0); i < c(24); i++) /* AC000 */ + BEGIN + /* See if we find a sys id that is not 0 */ + if (ext_table[cur_disk][i].sys_id != uc(0)) return(TRUE); /* AC000 */ + END + return(FALSE); +END +/* */ +/*******************************************************************************/ +/*Routine name: CYLINDERS_TO_MBYTES */ +/*******************************************************************************/ +/* */ +/*Description: This routine will take input of cylinders and convert */ +/* it to MBytes. */ +/* */ +/* */ +/*Called Procedures: */ +/* */ +/* */ +/*Change History: Created 5/16/87 DRM */ +/* */ +/*Input: Cylinders_in */ +/* */ +/*Output: MBytes_out */ +/* */ +/* */ +/* */ +/*******************************************************************************/ + +unsigned cylinders_to_mbytes(cylinders_in,sectors_per_track,number_of_heads) /* AN000 */ + +unsigned cylinders_in; /* AN000 */ +unsigned char number_of_heads; /* AN000 */ +unsigned char sectors_per_track; /* AN000 */ + +BEGIN /* AN000 */ + +unsigned mbytes_out; /* AN000 */ +unsigned long number_of_bytes; /* AN000 */ +unsigned long number_of_sectors; /* AN000 */ +unsigned long number_of_tracks; /* AN000 */ + + number_of_tracks = ul((cylinders_in * number_of_heads)); /* AN000 */ + number_of_sectors = ul((number_of_tracks * sectors_per_track)); /* AN000 */ + number_of_bytes = ul((number_of_sectors * BYTES_PER_SECTOR)); /* AN000 */ + mbytes_out = u((number_of_bytes / ONE_MEG)); /* AN000 */ + return(mbytes_out); /* AN000 */ + +END /* AN000 */ + + + +/**********************************replacement********************************************/ +/* To find out how many logical drives there are, if an extended partition exist */ +/* copy_fdisk2select. This procedure requires a check to see if any */ +/* logical drives exist if so, the drives must be sorted just as the */ +/* partitions to distinguish the amount of free space between the current logical */ +/* drive and the next. The ASCII drive value for each should also be */ +/* determined at this point. The same calculation using the start & end */ +/* cylinder must be used to determine the freespace. */ +/*****************************************************************************************/ + +unsigned copy_fdisk2select(table_count,Dptr) + unsigned table_count; + DSE (far * Dptr); + +BEGIN + +unsigned i; +unsigned m; +unsigned x; +FLAG drive_found; +char drive_num; +char first_stuff; +char num_logical_drives ; + + /* loop thru the partitions, only load stuff if it is there */ + drive_num = c(0); /* Current drive */ + drive_found = FALSE; + + /* Find out how many logical drives are available for this hardfile */ + /* To get the number of maximum times to loop thru the table */ + + num_logical_drives = get_num_logical_dos_drives(); + for ( i=u(0); i < u(num_logical_drives); i++) + BEGIN + /* See if entry exists */ + if ( (ext_table[cur_disk][i].sys_id == uc(DOS12)) || + (ext_table[cur_disk][i].sys_id == uc(DOS16)) || + (ext_table[cur_disk][i].sys_id == uc(DOSNEW)) ) /* AC000 */ + BEGIN + drive_found = TRUE; + (Dptr+table_count) ->n_part_size = ext_table[cur_disk][i].mbytes_used; /* AC000 */ + (Dptr+table_count) ->n_part_name = E_PART_LOG_DRI; /* SET the name field to logical drive */ + (Dptr+table_count) -> n_part_status = E_PART_UNFORMAT; + if (ext_table[cur_disk][i].formatted) + (Dptr+table_count) -> n_part_status = E_PART_FORMAT; + (Dptr+table_count) ->p_part_drive = ext_table[cur_disk][i].drive_letter; + for (m=u(0);m < u(4); m++) + (Dptr+table_count) -> n_part_level[m] = ext_table[cur_disk][i].system_level[m]; + drive_num++; /* Go to the next actual drive value */ + table_count++; /* Go to the next disk status structure */ + END /* End of check for logical drives */ + END /* End of loop to traverse thru ext_table */ + + return(drive_num); + +END + +/* */ +char get_num_logical_dos_drives() +BEGIN + +char i; +char number; + + number = c(0); /* AC000 */ + /* See if there is a logical drive defined in Extended Partition */ + for (i = c(0); i < c(24);i++) /* AC000 */ + BEGIN + + /* See if we find a sys id that is DOS */ + if ((ext_table[cur_disk][i].sys_id == uc(DOS12)) || (ext_table[cur_disk][i].sys_id == uc(DOS16)) || + (ext_table[cur_disk][i].sys_id == uc(DOSNEW))) /* AC000 */ + BEGIN + number++; + END + END + return(number); +END + +/* */ + +/* */ +XFLOAT get_partition_size(type) /* AC000 */ + +unsigned char type; /* AC000 */ + +BEGIN + char i; + + /* Look at all four partition entries for system id byte that matches */ + for (i = c(0); i < c(4);i++) /* AC000 */ + BEGIN + + /* if we find a match, get the size */ + if (part_table[cur_disk][i].sys_id == type) + BEGIN + /* Get the size of the partition from the array */ + return(part_table[cur_disk][i].mbytes_used); /* AC000 */ + END + END + /* Did not find one, something bad wrong happened */ + return(f(0)); +END diff --git a/v4.0/src/SELECT/GET_STAT.H b/v4.0/src/SELECT/GET_STAT.H new file mode 100644 index 0000000..d5a5aa0 --- /dev/null +++ b/v4.0/src/SELECT/GET_STAT.H @@ -0,0 +1,191 @@ + +/* */ +/* */ +/****************************************************************************/ +/* Define statements */ +/****************************************************************************/ +/* Get_status Input */ +#define FST_DRV 0x01 +#define SEC_DRV 0x02 +/* */ +/* EQUATES FOR N_PART_NAME */ +#define E_PART_PRI_DOS 0x01 +#define E_PART_EXT_DOS 0x02 +#define E_PART_LOG_DRI 0x03 +#define E_FREE_MEM_EDOS 0x04 +#define E_FREE_MEM_DISK 0x05 +#define E_PART_OTHER 0x06 +/* */ +/* EQUATES FOR N_PART_STATUS */ +#define E_PART_UNFORMAT 0x00 +#define E_PART_FORMAT 0x01 +/* */ +/* EQUATES FOR N_PART_TYPE */ +#define E_PART_FAT 0x01 +#define E_PART_KSAM 0x02 +#define E_PART_UNDEF 0x03 +#define E_PART_IGNORE 0x04 + +/* DISK_1_TABLE equals M_DISK_1_ITEMS */ +/* DISK_1_VAL_ITEM equals zero */ +/* DISK_1_START equals 100 times SIZ_DISKSTRUC bytes */ +#define M_DISK_1_ITEMS ( sizeof(disk_1_start) / SIZ_DISKSTRUC ) + + +/* DISK_2_TABLE equals M_DISK_2_ITEMS */ +/* DISK_2_VAL_ITEM equals zero */ +/* DISK_2_START equals 100 times SIZ_DISKSTRUC bytes */ +#define SIZ_DISKSTRUC ( sizeof(struc disk_status)) +#define M_DISK_2_ITEMS ( sizeof(disk_2_start) / SIZ_DISKSTRUC ) +/* EQUATES FOR BX FLAGS */ +#define E_DISK_PRI 0x01 +#define E_DISK_EXT_DOS 0x02 +#define E_DISK_LOG_DRI 0x04 +#define E_DISK_EDOS_MEM 0x08 +#define E_DISK_FREE_MEM 0x10 + + +/* */ + +#define FLAG char /* AN000 */ +#define BEGIN { +#define END } +#define ESC 0x1B +#define NUL 0x00 +#define NOT_FOUND 0xFF +#define DELETED 0xFF +#define INVALID 0xFF +#define PRIMARY 0x00 +#define EXTENDED 0x05 +#define BAD_BLOCK 0xFF +#define XENIX1 0x02 +#define XENIX2 0x03 +#define PCIX 0x75 +#define DOS12 0x01 +#define DOS16 0x04 +#define DOSNEW 0x06 /* AN000 */ +#define FAT16_SIZE 32680 +#define VOLUME 0x00 +#define FALSE (char) (1==0) /* AC000 */ +#define TRUE (char) !FALSE /* AC000 */ +#define LOGICAL 0x05 +#define CR 0x0D +#define BACKSPACE 0x08 +#define ACTIVE 0x80 +#define DOS_MAX (64*1024) /* Allow exactly 32mb worth of partitions */ +#define SYSTEM_FILE_SECTORS 100 +#define BYTES_PER_SECTOR 512 /* AN000 */ + + + +#define NETWORK 0x2F +#define INSTALLATION_CHECK 0xB800 +#define SERVER_CHECK 0x40 + + +#define FILE_NAME ":\\????????.???" /* AN000 */ +#define NOVOLUME " no label " /* AN000 */ +#define NOFORMAT " no fmt " /* AN000 */ +#define FAT " FAT " /* AN000 */ +#define ZERO 0 /* AN000 */ +#define NO_GOOD 0x02 /* AN000 */ +#define FIND_FIRST_MATCH 0x4E /* AN000 */ +#define GET_DTA 0x2F /* AN000 */ +#define GENERIC_IOCTL 0x440D /* AN000 */ +#define GET_MEDIA_ID 0x086E /* AN000 */ +#define CAPCHAR 0x6520 /* AN000 */ +#define CAPSTRING 0x6521 /* AN000 */ +#define CAP_YN 0x6523 /* AN000 */ +#define INT21 0x21 /* AN000 */ +#define DISK 0x13 /* AN000 */ +#define NOERROR 0 /* AN000 */ +#define BLANKS " " /* AN000 */ + +#define READ_DISK 2 +#define WRITE_DISK 3 +#define DISK_INFO 8 + + +#define VOL_LABEL 0x08 /* AN000 */ +#define PERCENT 0x025 /* AN000 */ +#define PERIOD 0x02E /* AN000 */ +#define ONE_MEG 1048576 /* AN000 */ + +#define BYTE unsigned char /* AN000 */ +#define WORD unsigned short /* AN000 */ +#define DWORD unsigned long /* AN000 */ +#define sw_type /* AN000 */ +#define sw_item_tag /* AN000 */ +#define sw_synonym /* AN000 */ +#define sw_value /* AN000 */ + +#define CARRY_FLAG 0x0001 /* mask for carry flag */ /* AN000 */ +#define PARITY_FLAG 0x0004 /* mask for parity flag */ /* AN000 */ +#define ACARRY_FLAG 0x0010 /* mask for aux carry flag */ /* AN000 */ +#define ZERO_FLAG 0x0040 /* mask for zero flag */ /* AN000 */ +#define SIGN_FLAG 0x0080 /* mask for sign flag */ /* AN000 */ +#define TRAP_FLAG 0x0100 /* mask for trap flag */ /* AN000 */ +#define INTERRUPT_FLAG 0x0200 /* mask for interrupt flag */ /* AN000 */ +#define DIRECTION_FLAG 0x0400 /* mask for direction flag */ /* AN000 */ +#define OVERFLOW_FLAG 0x0800 /* mask for overflow flag */ /* AN000 */ + +#define SEMICOLON 0x3B /* AN000 - VALID COMMAND LINE DELIMITER*/ +#define XFLOAT unsigned + +#define u(c) ((unsigned)(c)) /* AN000 */ +#define c(c) ((char)(c)) /* AN000 */ +#define f(c) ((XFLOAT)(c)) /* AN000 */ +#define uc(c) ((unsigned char)(c)) /* AN000 */ +#define ui(c) ((unsigned int)(c)) /* AN000 */ +#define ul(c) ((unsigned long)(c)) /* AN000 */ + + +struct entry + BEGIN + unsigned char boot_ind; + unsigned char start_head; + unsigned char start_sector; + unsigned start_cyl; + unsigned char sys_id; + unsigned char end_head; + unsigned char end_sector; + unsigned end_cyl; + unsigned long rel_sec; + unsigned long num_sec; + char order; + FLAG formatted; + XFLOAT mbytes_used; /* AN000 */ + char drive_letter; /* AN000 */ + char system_level[4]; /* AN000 */ + END; + +struct DISK_STATUS + BEGIN + unsigned char n_part_name ; + unsigned n_part_size ; + unsigned char n_part_status; + unsigned char p_part_drive ; /* AN000 */ + unsigned char n_part_type ; /* AN000 */ + char n_part_level[4]; /* AN000 */ + END OneDiskStatusEntry; /* TWO ARRAYS to be OUTPUT in ES:DI */ + +typedef struct DISK_STATUS DSE ; + +struct freespace + BEGIN + unsigned space; + unsigned start; + unsigned end; + unsigned mbytes_unused; /* AN000 */ + END; + +struct dx_buffer_ioctl /* AN000 */ + BEGIN /* AN000 */ + unsigned int info_level; /* Information level */ /* AN000 */ + unsigned long serial_num; /* serial number */ /* AN000 */ + char vol_label[9]; /* volume label */ /* AN000 */ + char file_system[12]; /* file system */ /* AN000 */ + END; /* AN000 */ + + + diff --git a/v4.0/src/SELECT/GLOBAL.C b/v4.0/src/SELECT/GLOBAL.C new file mode 100644 index 0000000..d9c182b --- /dev/null +++ b/v4.0/src/SELECT/GLOBAL.C @@ -0,0 +1,79 @@ + +#include "dos.h" /* ;AN000; */ +#include "get_stat.h" /* ;AN000; */ + +/* */ +/* */ +/****************************************************************************/ +/* Declare Global variables */ +/****************************************************************************/ +/* */ + + + +char cur_disk; /* ;AN000; */ +char good_disk[2]; /* ;AN000; */ +unsigned char number_of_drives; /* ;AN000; */ +char reboot_flag; /* ;AN000; */ +char errorlevel; /* ;AN000; */ +char max_partition_size; /* ;AN000; */ +char sort[24]; /* ;AN000; */ +char no_fatal_error; /* ;AN000; */ +char valid_input; /* ;AN000; */ +unsigned char video_mode; /* ;AN000; */ +unsigned char display_page; /* ;AN000; */ + + +unsigned total_disk[2]; /* ;AN000; */ +unsigned total_mbytes[2]; /* ;AN000; */ +unsigned char max_sector[2]; /* ;AN000; */ +unsigned char max_head[2]; /* ;AN000; */ +unsigned required_cyls[2]; /* ;AN000; */ + +unsigned input_row; /* ;AN000; */ +unsigned input_col; /* ;AN000; */ +char insert[800]; /* ;AC000; */ +char *pinsert = insert; /* ;AN000; */ + +extern unsigned char master_boot_record[2][512]; /* ;AN000; */ +unsigned char boot_record[512]; /* ;AN000; */ + +char next_letter; /* ;AN000; */ +char primary_flag; /* ;AC000; */ +char extended_flag; /* ;AC000; */ +char logical_flag; /* ;AC000; */ +unsigned primary_buff; /* ;AC000; */ +unsigned extended_buff; /* ;AC000; */ +unsigned logical_buff; /* ;AC000; */ +char cur_disk_buff; /* ;AC000; */ +unsigned long NOVAL = (unsigned long) 0; /* ;AC000; */ + + +/* */ +/* */ +/****************************************************************************/ +/* Define Global structures */ +/****************************************************************************/ +/* */ + +struct entry part_table[2][4]; /* ;AN000; */ +struct entry ext_table[2][24]; /* ;AN000; */ +struct freespace free_space[24]; /* ;AN000; */ +struct KeyData *input_data; /* ;AN000; */ +struct dx_buffer_ioctl dx_buff; /* ;AN000; */ +struct SREGS segregs; /* ;AN000; */ + +/* */ +/****************************************************************************/ +/* Define UNIONS */ +/****************************************************************************/ +/* */ + +union REGS regs; /* ;AN000; */ + + +char *format_string = "NO FORMAT"; /* ;AN000; */ +char far *fat12_String = "FAT_12"; /* ;AN000; */ +char far *fat16_String = "FAT_12"; /* ;AN000; */ +char far *hilda_string = "HILDA"; /* ;AN000; */ + \ No newline at end of file diff --git a/v4.0/src/SELECT/INITMEM.ASM b/v4.0/src/SELECT/INITMEM.ASM new file mode 100644 index 0000000..9d71ded --- /dev/null +++ b/v4.0/src/SELECT/INITMEM.ASM @@ -0,0 +1,394 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; DUMMY DATA SEGMENT THAT WILL LINK WITH THE DATA.MAC +; FILE. THIS RESOLVES ANY REFERENCES TO THE DATA SEGMENT. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; +HELPBUFSEG DW 0 ;AN000; +MEM_ALLOC DB 0 ;AN000;DT Memory allocated indicator +HELP_ALLOC EQU 80H ;AN000;DT Help memory allocated +BLOCK_ALLOC EQU 40H ;AN000;DT PANEL memory allocated +LVB_ALLOC EQU 20H ;AN000;DT LVB memory allocated +BLOCK_SET EQU 01H ;AN000;DT SETBLOCK done +DATA ENDS ;AN000;DATA +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Define dummy segment to calculate end of program +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ZSEG SEGMENT PARA PUBLIC 'ZSEG' ;AN000;marks end of routine +ZSEG ENDS ;AN000;ZSEG will alphabetically appear +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; INITMEM.ASM +; +; +; Allocate Memory +; +; This routine will free up the required memory from DOS to make +; space for the panels, scroll, help, and input field data. +; +; +; INPUT: BX = # paragraphs to keep (in the program) ZSEG-PSP_SEG +; CX = Length of program in bytes +; DX = # paragraphs to allocate +; DS = ES = CS - 10H +; +; OUTPUT: DS:DX = segment:offset of allocated buffer +; BX = length of allocated buffer +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + EXTRN WR_MAXMEMPAR:WORD ;AN000; + EXTRN WR_MAXHELPSZ:WORD ;AN000; + EXTRN WR_DATA2SEG:WORD ;AN000; + EXTRN WR_DATA2OFF:WORD ;AN000; + EXTRN WR_DATA2LEN:WORD ;AN000; + EXTRN WR_LVBSEG:WORD ;AN000;DT + EXTRN WR_LVBOFF:WORD ;AN000;DT + EXTRN WR_LVBLEN:WORD ;AN000;DT + EXTRN WR_LVBMEM:WORD ;AN000;DT + EXTRN HRD_BUFSEG:WORD ;AN000; + EXTRN HRD_BUFOFF:WORD ;AN000; + EXTRN HRD_BUFLEN:WORD ;AN000; + ; +SERVICE SEGMENT PARA PUBLIC 'SERVICE' ;AN000;segment for far routine + ASSUME CS:SERVICE,DS:DATA ;AN000; + ; + PUBLIC ALLOCATE_MEMORY_CALL ;AN000; + PUBLIC DEALLOCATE_MEMORY_CALL ;AN000; + PUBLIC ALLOCATE_HELP ;AN000; + PUBLIC DEALLOCATE_HELP ;AN000; + PUBLIC ALLOCATE_BLOCK ;AN000; + PUBLIC DEALLOCATE_BLOCK ;AN000; + PUBLIC ALLOCATE_LVB ;AN000; + PUBLIC DEALLOCATE_LVB ;AN000; + ; +SET_BLOCK equ 4AH ;AN000; +ALLOCATEB equ 48H ;AN000; +FREE_BLOCK equ 49H ;AN000; + ; + INCLUDE STRUC.INC ;AN000; + INCLUDE MACROS.INC ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DS and AX will auto pop on ret +; +; ALLOCATE_MEMORY_CALL +; +; This first takes the memory held by the active program +; (initially all of remaining memory) and requests only the +; memory held by the running program. Next, memory is +; re-allocated to the running program - specified by WR_MAXMEMPAR +; starting from the end of the program (re/ZSEG). +; +; ENTRY: +; AX = CODE segment (PSP+100H) +; +; +; EXIT: +; if CY = 0 then, +; WR_DATA2SEG = start of allocated segment +; WR_DATA2OFF = start of allocated offset (always 0) +; WR_DATA2LEN = length of allocated block (always WR_MAXMEMPAR) +; +; if CY = 1 then an error occurred allocating memory +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ALLOCATE_MEMORY_CALL PROC FAR ;AN000; + PUSHH ;AN000; + ; + TEST MEM_ALLOC,BLOCK_SET ;AN000;DT SETBLOCK done? + JNZ AM_SBDONE ;AN000;DT if so, skip it + ; + MOV AH,62H ;AN000; Get the PSP segment + INT 21H ;AN000; + MOV AX,BX ;AN000;save the PSP segment of SELECT + MOV BX,ZSEG ;AN000;get last address of code (from ZSEG) + MOV ES,AX ;AN000;set PSP segment in ES + SUB BX,AX ;AN000;calc # of paragraphs in the program + MOV AH,SET_BLOCK ;AN000;setblock function number + DOSCALL ;AN000;free used memory + .IF < C > ;AC000;DT + GOTO ALLOC_RET ;AN000;DT If error, exit + .ENDIF ;AN000;DT + OR MEM_ALLOC,BLOCK_SET ;AN000;DT + ; +AM_SBDONE: ;AN000; + MOV AX,DATA ;AN000;initialize data segment + MOV DS,AX ;AN000; and extra segment + ; + PUSH CS ;AN000;call far procedure + CALL ALLOCATE_BLOCK_NEAR ;AN000;now allocate Panel block + .IF < C > ;AC000;DT + GOTO ALLOC_RET ;AN000;DT If error, exit + .ENDIF ;AN000; + ; + PUSH CS ;AN000;call far procedure + CALL ALLOCATE_LVB_NEAR ;AN000;now allocate LVB block + .IF < C > ;AC000;DT + GOTO ALLOC_RET ;AN000;DT If error, exit + .ENDIF ;AN000; + ; + PUSH CS ;AN000;call far procedure + CALL ALLOCATE_HELP_NEAR ;AN000;now allocate help + ; +ALLOC_RET: ;AN000; + POPP ;AN000; + RET ;AN000; +ALLOCATE_MEMORY_CALL ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; DEALLOCATE_MEMORY_CALL +; +; This is the house-cleaning before the running program +; returns to DOS. +; +; ENTRY: +; none +; +; EXIT: +; if CY = 0 then, +; The memory after (WR_DATA2SEG) is released to DOS +; if CY = 1 then, +; An error occurred while trying to release this memory +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +DEALLOCATE_MEMORY_CALL PROC FAR;AN000; + PUSHH ;AN000; + MOV AX,DATA ;AN000; + MOV DS,AX ;AN000; + PUSH CS ;AN000;call far procedure + CALL DEALLOCATE_BLOCK_NEAR ;AN024;now deallocate Panel block + PUSH CS ;AN000;call far procedure + CALL DEALLOCATE_LVB_NEAR ;AN024; deallocate LVB block + PUSH CS ;AN000;call far procedure + CALL DEALLOCATE_HELP_NEAR ;AN000;now deallocate help + POPP ;AN000; + RET ;AN000; +DEALLOCATE_MEMORY_CALL ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DS and AX will auto pop on ret +; +; ALLOCATE_HELP +; +; +; ENTRY: +; AX = CODE segment (PSP+100H) +; +; +; EXIT: +; if CY = 0 then, ok +; if CY = 1 then an error occurred allocating memory +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ALLOCATE_HELP PROC FAR ;AN000; +ALLOCATE_HELP_NEAR: ;AN000; + PUSHH ;AN000; + MOV AX,DATA ;AN000; + MOV DS,AX ;AN000; + ; + TEST MEM_ALLOC,HELP_ALLOC ;AN000;DT Is help allocated + JNZ AH_RET ;AN000;DT if so, skip allocation + ;now allocate help + MOV BX,WR_MAXHELPSZ ;AN000;set BX to max # of paragraphs + SHR BX,1 ;AN000; + SHR BX,1 ;AN000; + SHR BX,1 ;AN000; + SHR BX,1 ;AN000; + MOV AH,ALLOCATEB ;AN000;set allocate function number + DOSCALL ;AN000;allocate memory + .IF < NC > ;AN000; + MOV HRD_BUFSEG,AX ;AN000;save segment + MOV HELPBUFSEG,AX ;AN000;save segment + MOV HRD_BUFOFF,0 ;AN000; and offset + MOV BX,WR_MAXHELPSZ ;AN000;set BX to max # of byte + MOV HRD_BUFLEN,BX ;AN000; + OR MEM_ALLOC,HELP_ALLOC ;AN000;DT + CLC ;AN000; + .ENDIF ;AN000; +AH_RET: ;AN000; + POPP ;AN000; + RET ;AN000; +ALLOCATE_HELP ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; DEALLOCATE_HELP +; +; This is the house-cleaning before the running program +; returns to DOS. +; +; ENTRY: +; none +; +; EXIT: +; if CY = 0 then, OK +; if CY = 1 then, +; An error occurred while trying to release this memory +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +DEALLOCATE_HELP PROC FAR ;AN000; +DEALLOCATE_HELP_NEAR: ;AN000; + PUSHH ;AN000; + MOV AX,DATA ;AN000; + MOV DS,AX ;AN000; + TEST MEM_ALLOC,HELP_ALLOC ;AN000;DT Is help allocated + JZ DH_RET ;AN000;DT if not, skip deallocation + MOV AX,HELPBUFSEG ;AN000;free help segment + MOV ES,AX ;AN000; + MOV AH,FREE_BLOCK ;AN000; + DOSCALL ;AN000; + AND MEM_ALLOC,255-HELP_ALLOC ;AN000;DT +DH_RET: ;AN000; + POPP ;AN000; + RET ;AN000; +DEALLOCATE_HELP ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DS and AX will auto pop on ret +; +; ALLOCATE_BLOCK +; +; Allocate Panel and Scroll memory. +; +; ENTRY: +; none +; EXIT: +; if CY = 0 then, +; WR_DATA2SEG = start of allocated segment +; WR_DATA2OFF = start of allocated offset (always 0) +; WR_DATA2LEN = length of allocated block (always WR_MAXMEMPAR) +; +; if CY = 1 then an error occurred allocating memory +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ALLOCATE_BLOCK PROC FAR ;AN000; +ALLOCATE_BLOCK_NEAR: ;AN000; + PUSHH ;AN000; + MOV AX,DATA ;AN000;initialize data segment + MOV DS,AX ;AN000; and extra segment + ; + TEST MEM_ALLOC,BLOCK_ALLOC ;AN000;DT Is PANEL block allocated + JNZ AB_RET ;AN000;DT if so, skip allocation + ; + MOV BX,WR_MAXMEMPAR ;AN000;set DX to max # of 16 byte parag's + MOV AH,ALLOCATEB ;AN000;set allocate function number + DOSCALL ;AN000;allocate memory + .IF < NC > ;AC000;DT + MOV BX,WR_MAXMEMPAR ;AN000; + SHL BX,1 ;AN000;THIS SHOULD BE REMOVED WHEN + SHL BX,1 ;AN000;THE INITIALIZE ROUTINE TREATS + SHL BX,1 ;AN000;WR_DATA2LEN AS PARAGRAPHS AND + SHL BX,1 ;AN000;NOT BYTES...... + MOV WR_DATA2SEG,AX ;AN000;save segment + MOV WR_DATA2OFF,0 ;AN000; + MOV WR_DATA2LEN,BX ;AN000; + OR MEM_ALLOC,BLOCK_ALLOC ;AN000;DT PANEL block allocated + .ENDIF ;AN000; +AB_RET: ;AN000; + POPP ;AN000; + RET ;AN000; +ALLOCATE_BLOCK ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; DEALLOCATE_BLOCK +; +; This is the house-cleaning before the running program +; returns to DOS. +; +; ENTRY: +; none +; +; EXIT: +; if CY = 0 then, OK +; if CY = 1 then, +; An error occurred while trying to release this memory +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +DEALLOCATE_BLOCK PROC FAR ;AN000; +DEALLOCATE_BLOCK_NEAR: ;AN000; + PUSHH ;AN000; + MOV AX,DATA ;AN000; + MOV DS,AX ;AN000; + TEST MEM_ALLOC,BLOCK_ALLOC ;AN000;DT Is PANEL block allocated + JZ DB_RET ;AN000;DT if not, skip deallocation + MOV AX,WR_DATA2SEG ;AN000;free up allocated segment + MOV ES,AX ;AN000; + MOV AH,FREE_BLOCK ;AN000; + DOSCALL ;AN000; + AND MEM_ALLOC,255-BLOCK_ALLOC ;AN000;DT +DB_RET: ;AN000; + POPP ;AN000; + RET ;AN000; +DEALLOCATE_BLOCK ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DS and AX will auto pop on ret +; +; ALLOCATE_LVB +; +; +; ENTRY: +; AX = none +; +; +; EXIT: +; if CY = 0 then, ok +; if CY = 1 then an error occurred allocating memory +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ALLOCATE_LVB PROC FAR ;AN000; +ALLOCATE_LVB_NEAR: ;AN000; + PUSHH ;AN000; + ; + MOV AX,DATA ;AN000; + MOV DS,AX ;AN000; + ;;;;;;; + TEST MEM_ALLOC,LVB_ALLOC ;AN000;DT Is LVB block allocated + JNZ ALVB_RET ;AN000;DT if so, skip allocation + ; + MOV BX,WR_LVBMEM ;AN000;set BX to max # of 16 byte parag's + MOV AH,ALLOCATEB ;AN000;set allocate function number + DOSCALL ;AN000;allocate memory + .IF < NC > ;AN000; + MOV WR_LVBSEG,AX ;AN000;save segment + MOV WR_LVBOFF,0 ;AN000;and offset + SHL BX,1 ;AN000;THIS SHOULD BE REMOVED WHEN + SHL BX,1 ;AN000;THE INITIALIZE ROUTINE TREATS + SHL BX,1 ;AN000;WR_DATA2LEN AS PARAGRAPHS AND + SHL BX,1 ;AN000;NOT BYTES...... + MOV WR_LVBLEN,BX ;AN000;and byte length + OR MEM_ALLOC,LVB_ALLOC ;AN000;DT LVB block allocated + .ENDIF ;AN000; + ; +ALVB_RET: ;AN000; + POPP ;AN000; + RET ;AN000; +ALLOCATE_LVB ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; DEALLOCATE_LVB +; +; +; ENTRY: +; none +; +; EXIT: +; if CY = 0 then, OK +; if CY = 1 then, +; An error occurred while trying to release this memory +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +DEALLOCATE_LVB PROC FAR ;AN000; +DEALLOCATE_LVB_NEAR: ;AN000; + PUSHH ;AN000; + MOV AX,DATA ;AN000; + MOV DS,AX ;AN000; + TEST MEM_ALLOC,LVB_ALLOC ;AN000;DT Is LVB block allocated + JZ DLVB_RET ;AN000;DT if not, skip deallocation + MOV AX,WR_LVBSEG ;AN000;free up LVB allocated segment + MOV ES,AX ;AN000; + MOV AH,FREE_BLOCK ;AN000; + DOSCALL ;AN000; + AND MEM_ALLOC,255-LVB_ALLOC ;AN000;DT +DLVB_RET: ;AN000; + POPP ;AN000; + RET ;AN000; +DEALLOCATE_LVB ENDP ;AN000; + +SERVICE ENDS ;AN000; + END ;AN000; diff --git a/v4.0/src/SELECT/INPUT.ASM b/v4.0/src/SELECT/INPUT.ASM new file mode 100644 index 0000000..59996a7 --- /dev/null +++ b/v4.0/src/SELECT/INPUT.ASM @@ -0,0 +1,1737 @@ +PAGE 60,132 ;AN000; +NAME SELECT ;AN000; +TITLE INPUT.ASM - DOS SELECT.EXE ;AN000; +SUBTTL input.asm ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; INPUT.ASM: Copyright 1988 Microsoft +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; +DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; Define Dummy data segment + PUBLIC WR_ICBVEC ;AN000; + PUBLIC KD_BACKSPACE ;AN000; + ; + INCLUDE PCEQUATE.INC ;AN000; + ; +SND_FREQ EQU 440 ;AN000; ;frequency of error beep +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Input Field Control Block Vector +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICBVEC DW DATA,WR_ICB1 ;AN000;ICB 1 segment,offset STR_DOS_LOC + DW DATA,WR_ICB2 ;AN000;ICB 2 segment,offset STR_EXT_PARMS + DW DATA,WR_ICB3 ;AN000;ICB 3 segment,offset STR_DOS_PATH + DW DATA,WR_ICB4 ;AN000;ICB 4 segment,offset STR_DOS_APPEND + DW DATA,WR_ICB5 ;AN000;ICB 5 segment,offset STR_DOS_PROMPT + DW DATA,WR_ICB6 ;AN000;ICB 6 segment,offset STR_SHELL + DW DATA,WR_ICB7 ;AN000;ICB 7 segment,offset STR_KSAM + DW DATA,WR_ICB8 ;AN000;ICB 8 segment,offset STR_FASTOPEN + DW DATA,WR_ICB9 ;AN000;ICB 9 segment,offset STR_SHARE + DW DATA,WR_ICB10 ;AN000;ICB 10 segment,offset STR_GRAPHICS + DW DATA,WR_ICB11 ;AN000;ICB 11 segment,offset STR_XMAEM + DW DATA,WR_ICB12 ;AN000;ICB 12 segment,offset STR_XMA2EMS + DW DATA,WR_ICB13 ;AN000;ICB 13 segment,offset STR_VDISK + DW DATA,WR_ICB14 ;AN000;ICB 14 segment,offset STR_BREAK + DW DATA,WR_ICB15 ;AN000;ICB 15 segment,offset STR_BUFFERS + DW DATA,WR_ICB16 ;AN000;ICB 16 segment,offset STR_DOS_APPEND_P JW + DW DATA,WR_ICB17 ;AN000;ICB 17 segment,offset STR_FCBS + DW DATA,WR_ICB18 ;AN000;ICB 18 segment,offset STR_FILES + DW DATA,WR_ICB19 ;AN000;ICB 19 segment,offset STR_LASTDRIVE + DW DATA,WR_ICB20 ;AN000;ICB 20 segment,offset STR_STACKS + DW DATA,WR_ICB21 ;AN000;ICB 21 segment,offset STR_VERIFY + DW DATA,WR_ICB22 ;AN000;ICB 23 segment,offset NUM_PRINTER + DW DATA,WR_ICB23 ;AN000;ICB 23 segment,offset NUM_EXT_DISK + DW DATA,WR_ICB24 ;AN000;ICB 24 segment,offset NUM_YEAR + DW DATA,WR_ICB25 ;AN000;ICB 25 segment,offset NUM_MONTH + DW DATA,WR_ICB26 ;AN000;ICB 26 segment,offset NUM_DAY + DW DATA,WR_ICB27 ;AN000;ICB 27 segment,offset NUM_HOUR + DW DATA,WR_ICB28 ;AN000;ICB 28 segment,offset NUM_MINUTE + DW DATA,WR_ICB29 ;AN000;ICB 29 segment,offset NUM_SECOND + DW DATA,WR_ICB30 ;AN000;ICB 29 segment,offset DEF_CP + DW DATA,WR_ICB31 ;AN000;ICB 29 segment,offset SWISS_KEYB +;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 1 STR_DOS_LOC +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB1 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 8 ;AN000;**;upper left corner field row + DW 33 ;AN000;**;upper left corner field column + DW 40 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 40 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_PATH_CHAR_LEN ;AN000;length of allow chars + DW WR_PATH_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string + ; +WR_PATH_CHAR DB "'",',0-9,,a-z,,A-Z,,�-�, $!"#%&()-.@\`_{}~^,,,' ;AN000; +WR_PATH_CHAR_LEN EQU ($-WR_PATH_CHAR) ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 2 STR_EXT_PARMS +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB2 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three + DW 0 ;AN000;option word four + DW 7 ;AN000;**;upper left corner field row + DW 44 ;AN000;**;upper left corner field column + DW 75 ;;AN000;35 ;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 0 ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars + DW WR_ALLOW_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 3 STR_DOS_PATH +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB3 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three + DW 0 ;AN000;option word four + DW 8 ;AN000;**;upper left corner field row + DW 30 ;AN000;**;upper left corner field column + DW 40 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 0 ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_APPEND_CHAR_LEN ;AN000;length of allow chars + DW WR_APPEND_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string + ;;; + ; +WR_APPEND_CHAR DB "'",',0-9,,a-z,,A-Z,,�-�, ;$!"#%&()-.:@\`_{}~^,,,' ;AN000; +WR_APPEND_CHAR_LEN EQU ($-WR_APPEND_CHAR) ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 4 STR_DOS_APPEND +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB4 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three + DW 0 ;AN000;option word four + DW 12 ;AN000;**;upper left corner field row + DW 30 ;AN000;**;upper left corner field column + DW 40 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 0 ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_APPEND_CHAR_LEN ;AN000;length of allow chars + DW WR_APPEND_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 5 STR_DOS_PROMPT +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB5 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three + DW 0 ;AN000;option word four + DW 15 ;AN000;**;upper left corner field row + DW 30 ;AN000;**;upper left corner field column + DW 30 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 0 ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_PROMPT_CHAR_LEN ;AN000;length of allow chars + DW WR_PROMPT_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string + ;;;;;;;;;;;;; + ; +WR_PROMPT_CHAR DB "'",',0-9,,a-z,,A-Z,,�-�,\/ $!"#%()*+-.;@`[]_{}~,,,' ;AN000; +WR_PROMPT_CHAR_LEN EQU ($-WR_PROMPT_CHAR) ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 6 STR_SHELL +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB6 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three + DW 0 ;AN000;option word four + DW 8 ;AN000;**;upper left corner field row + DW 38 ;AN000;**;upper left corner field column + DW 15 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 0 ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars + DW WR_ALLOW_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 7 STR_KSAM +; +; This field will not be used with the shipped version +; of SELECT. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB7 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three + DW 0 ;AN000;option word four + DW 7 ;AN000;**;upper left corner field row + DW 36 ;AN000;**;upper left corner field column + DW 40 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 0 ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars + DW WR_ALLOW_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 8 STR_FASTOPEN +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB8 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three + DW 0 ;AN000;option word four + DW 8 ;AN000;**;upper left corner field row + DW 40 ;AN000;**;upper left corner field column + DW 40 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 0 ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars + DW WR_ALLOW_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 9 STR_SHARE +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB9 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 8 ;AN000;**;upper left corner field row + DW 36 ;AN000;**;upper left corner field column + DW 40 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 40 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars + DW WR_ALLOW_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 10 STR_GRAPHICS +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB10 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three + DW 0 ;AN000;option word four + DW 8 ;AN000;**;upper left corner field row + DW 34 ;AN000;**;upper left corner field column + DW 40 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 0 ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_GRAPHIC_CHAR_LEN ;AN000;length of allow chars + DW WR_GRAPHIC_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +WR_GRAPHIC_CHAR DB "'",',0-9,,a-z,,A-Z,\ !"#%()*+-.;@`[]_{}~/,,,' ;AN000; +WR_GRAPHIC_CHAR_LEN EQU ($-WR_GRAPHIC_CHAR) ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 11 STR_XMAEM +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB11 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three + DW 0 ;AN000;option word four + DW 8 ;AN000;**;upper left corner field row + DW 36 ;AN000;**;upper left corner field column + DW 40 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 0 ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars + DW WR_ALLOW_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 12 STR_XMA2EMS +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB12 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three + DW 0 ;AN000;option word four + DW 11 ;AN000;**;upper left corner field row + DW 36 ;AN000;**;upper left corner field column + DW 40 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 0 ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars + DW WR_ALLOW_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 13 STR_VDISK +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB13 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 8 ;AN000;**;upper left corner field row + DW 36 ;AN000;**;upper left corner field column + DW 40 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 40 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars + DW WR_ALLOW_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 14 STR_BREAK +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB14 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;;+ICB_CLR ;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 8 ;AN000;**;upper left corner field row + DW 26 ;AN000;**;upper left corner field column + DW 3 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 3 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ON_OFF_CHAR_LEN ;AN000;length of allow chars + DW WR_ON_OFF_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +WR_ON_OFF_CHAR DB ' OFNofn' ;AN000; +WR_ON_OFF_CHAR_LEN EQU ($-WR_ON_OFF_CHAR) ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 15 STR_BUFFERS +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB15 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 9 ;AN000;**;upper left corner field row + DW 26 ;AN000;**;upper left corner field column + DW 7 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 7 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_BUFFERS_LEN ;AN000;length of allow chars + DW WR_BUFFERS ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string + ; +WR_BUFFERS DB ' ,0-9,,,,' ;AN000; +WR_BUFFERS_LEN EQU $-WR_BUFFERS ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 16 STR_DOS_APPEND_P formerly STR_CPSW ;AC000;JW +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB16 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three + DW 0 ;AN000;option word four + DW 11 ;AN000;**;upper left corner field row + DW 30 ;AN000;**;upper left corner field column + DW 40 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 0 ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars + DW WR_ALLOW_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 17 STR_FCBS +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB17 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 10 ;AC000;JW ;**;upper left corner field row + DW 26 ;AN000;**;upper left corner field column + DW 7 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 7 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_FCBS_LEN ;AN000;length of allow chars + DW WR_FCBS ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string + ; +WR_FCBS DB ' ,0-9,,,,' ;AN000; +WR_FCBS_LEN EQU ($-WR_FCBS) ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 18 STR_FILES +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB18 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 11 ;AC000;JW ;**;upper left corner field row + DW 26 ;AN000;**;upper left corner field column + DW 3 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 3 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_BUFFERS_LEN ;AN000;length of allow chars + DW WR_BUFFERS ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 19 STR_LASTDRIVE +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB19 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_DEL+ICB_UPC+ICB_CSW ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 12 ;AC000;JW ;**;upper left corner field row + DW 26 ;AN000;**;upper left corner field column + DW 1 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 1 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ASCII_CHAR_LEN ;AN000;length of allow chars + DW WR_ASCII_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +WR_ASCII_CHAR DB ' ,a-z,,A-Z,' ;AN000; +WR_ASCII_CHAR_LEN EQU ($-WR_ASCII_CHAR) ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 20 STR_STACKS +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB20 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 13 ;AC000;JW ;**;upper left corner field row + DW 26 ;AN000;**;upper left corner field column + DW 6 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 6 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_FCBS_LEN ;AN000;length of allow chars + DW WR_FCBS ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 21 STR_VERIFY +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB21 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 14 ;AC000;JW ;**;upper left corner field row + DW 26 ;AN000;**;upper left corner field column + DW 3 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 3 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ON_OFF_CHAR_LEN ;AN000;length of allow chars + DW WR_ON_OFF_CHAR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 22 NUM_PRINTER +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB22 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_DEL+ICB_CSW ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 6 ;AN000;**;upper left corner field row + DW 50 ;AN000;**;upper left corner field column + DW 1 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 1 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_NUM_PTR_LEN ;AN000;length of allow chars + DW WR_NUM_PTR ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string + ; +WR_NUM_PTR DB ' ,0-7,' ;AN000; +WR_NUM_PTR_LEN EQU ($-WR_NUM_PTR) ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 23 NUM_EXT_DISK +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB23 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one + DW ICB_DEL+ICB_CSW ;AN000;option word two + DW 0 ;AN000;option word three + DW 0 ;AN000;option word four + DW 5 ;AN000;**;upper left corner field row + DW 55 ;AN000;**;upper left corner field column + DW 1 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 0 ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_NUM_EXT_LEN ;AN000;length of allow chars + DW WR_NUM_EXT ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string + ; +WR_NUM_EXT DB ' 012' ;AN000; +WR_NUM_EXT_LEN EQU ($-WR_NUM_EXT) ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 24 NUM_YEAR +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB24 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000; +ICB_CLR ;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 6 ;AN000;**;upper left corner field row + DW 24 ;AN000;**;upper left corner field column + DW 4 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 4 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars + DW WR_ALLOW_NUM ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 25 NUM_MONTH +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB25 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 8 ;AN000;**;upper left corner field row + DW 24 ;AN000;**;upper left corner field column + DW 2 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 2 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars + DW WR_ALLOW_NUM ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 26 NUM_DAY +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB26 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 10 ;AN000;**;upper left corner field row + DW 24 ;AN000;**;upper left corner field column + DW 2 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 2 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars + DW WR_ALLOW_NUM ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 27 NUM_HOUR +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB27 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 16 ;AN000;**;upper left corner field row + DW 24 ;AN000;**;upper left corner field column + DW 2 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 2 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars + DW WR_ALLOW_NUM ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 28 NUM_MINUTE +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB28 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC069;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 18 ;AN000;**;upper left corner field row + DW 24 ;AN000;**;upper left corner field column + DW 2 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 2 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars + DW WR_ALLOW_NUM ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 29 NUM_SECOND +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB29 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_HOR ;AC0O69;SEH ;AN000;option word three + DW 0 ;AN000;option word four + DW 20 ;AN000;**;upper left corner field row + DW 24 ;AN000;**;upper left corner field column + DW 2 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 2 ;AC069;SEH ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW 0 ;AN000;length of field's default value + DW 0 ;AN000;offset field's default value + DW 0 ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars + DW WR_ALLOW_NUM ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 30 PRIMARY_CP +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB30 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_WIN ;AN000;option word three + DW 0 ;AN000;option word four + DW 20 ;AN000;**;upper left corner field row + DW 24 ;AN000;**;upper left corner field column + DW 2 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 0 ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW ICB_DEFBUF30_L+2 ;AN000;length of field's default value + DW ICB_DEFBUF30 ;AN000;offset field's default value + DW DATA ;AN000;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars + DW WR_ALLOW_NUM ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string + ; +ICB_DEFBUF30 DW ICB_DEFBUF30_L ;AN000;Define default buffer ASCIIN + DB '850' ;AN000;Define default buffer +ICB_DEFBUF30_L EQU $-ICB_DEFBUF30-2 ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB 31 COUNTRY_LANG +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ICB31 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one + DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two + DW ICB_WIN ;AN000;option word three + DW 0 ;AN000;option word four + DW 20 ;AN000;**;upper left corner field row + DW 24 ;AN000;**;upper left corner field column + DW 2 ;AN000;**;number of chars before wrapping + DW 1 ;AN000;color index number assigned + DW 0 ;AN000;default change/minus status + DW 1 ;AN000;**;cursor character pos in field + DW 1 ;AN000;**;NEW ADD Hor scroll support + DW SND_FREQ ;AN000;frequency of error beep + DW 0 ;AN000;ASCII code of the key returned + DW 0 ;AN000;length of data entered into fld + DW 0 ;AN000;**;length of input field + DW 0 ;AN000;??;offset of input field + DW 0 ;AN000;??;segment of input field + DW 0 ;AN000;offset of color attribute buffer + DW 0 ;AN000;segment of color attr buffer + DW ICB_DEFBUF31_L+2 ;AN000;??;length of field's default value + DW ICB_DEFBUF31 ;AN000;??;offset field's default value + DW DATA ;AN000;??;segment field's default value + DW 0 ;AN000;length of return string + DW 0 ;AN000;offset of return string + DW 0 ;AN000;segment of return string + DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars + DW WR_ALLOW_NUM ;AN000;offset of allow chars + DW DATA ;AN000;segment of allow chars + DW 0 ;AN000;length of skip chars + DW 0 ;AN000;offset of skip chars + DW 0 ;AN000;segment of skip chars + DW 0 ;AN000;length of allow once chars + DW 0 ;AN000;offset of allow once chars + DW 0 ;AN000;segment of allow once chars + DW 2 ;AN000;precision of decimal point + DW 0 ;AN000;low numeric range (low intrgr) + DW 0 ;AN000;low numeric range (high intrgr) + DW 0 ;AN000;high numeric range (low intrgr) + DW 0 ;AN000;high numeric range (high intrgr) + DW 0 ;AN000;beginning row of minus and plus + DW 0 ;AN000;beginning col of minus & plus + DW 0 ;AN000;length of minus sign string + DW 0 ;AN000;offset of minus sign string + DW 0 ;AN000;segment of minus sign string + DW 0 ;AN000;length of plus sign string + DW 0 ;AN000;offset of plus sign string + DW 0 ;AN000;segment of plus sign string + ; +ICB_DEFBUF31 DW ICB_DEFBUF31_L ;AN000;Define default buffer ASCIIN + DB 'SG' ;AN000; +ICB_DEFBUF31_L EQU $-ICB_DEFBUF31-2 ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Table of Key Definitions +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +KD_BACKSPACE DB 8,0 ;AN000;ASCII backspace +KD_UNDOKEY DB 0,59 ;AN000;ASCII code replace default key +KD_SWCHKEY DB 0,60 ;AN000;ASCII code switch char direction +KD_DEL DB 0,83 ;AN000;extended ASCII delete key +KD_CTRLEND DB 0,117 ;AN000;extended ASCII Control-End key +KD_HOME DB 0,71 ;AN000;extended ASCII home key +KD_END DB 0,79 ;AN000;extended ASCII end key +KD_INS DB 0,82 ;AN000;extended ASCII insert key +KD_LARROW DB 0,75 ;AN000;extended ASCII left arrow +KD_RARROW DB 0,77 ;AN000;extended ASCII right arrow +KD_UARROW DB 0,72 ;AN000;extended ASCII up arrow +KD_DARROW DB 0,80 ;AN000;extended ASCII down arrow +KD_MINUS DB 45,0 ;AN000;ASCII minus sign +KD_PLUS DB 43,0 ;AN000;ASCII plus sign +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Define Buffers and Strings +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_ALLOW_CHAR DB ', -�,' ;AN000; +WR_ALLOW_CHAR_LEN EQU ($-WR_ALLOW_CHAR) ;AN000; +WR_ALLOW_NUM DB ' ,0-9,' ;AN000; +WR_ALLOW_NUM_LEN EQU ($-WR_ALLOW_NUM) ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +DATA ENDS ;AN000; + END ;AN000; diff --git a/v4.0/src/SELECT/INT13.C b/v4.0/src/SELECT/INT13.C new file mode 100644 index 0000000..daf32c2 --- /dev/null +++ b/v4.0/src/SELECT/INT13.C @@ -0,0 +1,194 @@ + +#include "stdio.h" /* ;AN000; */ +#include "stdlib.h" /* ;AN000; */ +#include "string.h" /* ;AN000; */ +#include "dos.h" /* ;AN000; */ +#include "get_stat.h" /* ;AN000; */ +#include "extern.h" /* ;AN000; */ + /* ;AN000; */ +char read_boot_record(unsigned,unsigned char,unsigned char,unsigned char); /* ;AN000; */ +void DiskIo(union REGS *,union REGS *, struct SREGS *); /* ;AN000; */ +unsigned cylinders_to_mbytes(unsigned,unsigned char,unsigned char); /* ;AN000; */ +char get_drive_parameters(unsigned char); /* ;AN000; */ +char get_disk_info(void); /* ;AN000; */ + /* ;AN000; */ +/* */ /* ;AN000; */ +char get_disk_info() /* ;AN000; */ + /* ;AN000; */ +BEGIN /* ;AN000; */ + /* ;AN000; */ +unsigned char i; /* ;AN000; */ + /* ;AN000; */ + /* Initialize values */ /* ;AN000; */ + number_of_drives = uc(0); /* ;AN000; */ + for (i=uc(0); i < uc(2); i++) /* ;AN000; */ + BEGIN /* ;AN000; */ + total_disk[i] = u(0); /* ;AN000; */ + total_mbytes[i] = f(0); /* ;AN000; */ + max_sector[i] = uc(0); /* ;AN000; */ + max_head[0] = uc(0); /* ;AN000; */ + END /* ;AN000; */ + /* ;AN000; */ + /* See how many drives there are */ /* ;AN000; */ + if (get_drive_parameters(uc(0x80))) /* ;AN000; */ + /* ;AN000; */ + BEGIN /* ;AN000; */ + /* Get the drive parameters for all drives */ /* ;AN000; */ + for (i = uc(0); i < number_of_drives;i++) /* ;AN000; */ + /* ;AN000; */ + BEGIN /* ;AN000; */ + if (get_drive_parameters(uc(0x80)+i)) /* ;AN000; */ + /* ;AN000; */ + BEGIN /* ;AN000; */ + /* Save drive parameters */ /* ;AN000; */ + max_sector[i] = ((unsigned char)(regs.h.cl & 0x3F)); /* ;AN000; */ + max_head[i] = ((unsigned char)(regs.h.dh +1)); /* ;AN000; */ + total_disk[i] = ((((unsigned)(regs.h.cl & 0xC0 )) & 0x00C0) << 2)+ ((unsigned)regs.h.ch) +1; /* ;AN000; */ + total_mbytes[i] = cylinders_to_mbytes(total_disk[i], max_sector[i], max_head[i]); /* ;AN000; */ + END /* ;AN000; */ + else /* ;AN000; */ + BEGIN /* ;AN000; */ + good_disk[i] = FALSE; /* ;AN000; */ + return(FALSE); /* ;AN000; */ + END /* ;AN000; */ + END /* ;AN000; */ + return(TRUE); /* ;AN000; */ + END /* ;AN000; */ + else /* ;AN000; */ + /* No drives present */ /* ;AN000; */ + BEGIN /* ;AN000; */ + no_fatal_error = FALSE; /* ;AN000; */ + return(FALSE); /* ;AN000; */ + END /* ;AN000; */ +END /* ;AN000; */ + /* ;AN000; */ + /* ;AN000; */ + /* ;AN000; */ + /* ;AN000; */ +/* */ /* ;AN000; */ +char get_drive_parameters(drive) /* ;AN000; */ + /* ;AN000; */ +unsigned char drive; /* ;AN000; */ + /* ;AN000; */ +BEGIN /* ;AN000; */ + /* See how many drives there are */ /* ;AN000; */ + regs.h.ah = uc(DISK_INFO); /* ;AN000; */ + regs.h.dl = drive; /* ;AN000; */ + DiskIo(®s,®s,&segregs); /* ;AN000; */ + /* ;AN000; */ + /* See if any drives exist */ /* ;AN000; */ + if ((regs.h.dl == uc(0)) || ((regs.x.cflag & 1) == u(1))) /* ;AN000; */ + BEGIN /* ;AN000; */ + return(FALSE); /* ;AN000; */ + END /* ;AN000; */ + else /* ;AN000; */ + BEGIN /* ;AN000; */ + /* Save the number of drives */ /* ;AN000; */ + number_of_drives = regs.h.dl; /* ;AN000; */ + if (number_of_drives < 2) good_disk[1] = FALSE; /* ;AN000; */ + if (number_of_drives < 1) good_disk[0] = FALSE; /* ;AN000; */ + return(TRUE); /* ;AN000; */ + END /* ;AN000; */ + /* ;AN000; */ +END /* ;AN000; */ + /* ;AN000; */ +/* */ /* ;AN000; */ +char read_boot_record(cylinder,which_disk,which_head,which_sector) /* ;AN000; */ + /* ;AN000; */ +unsigned cylinder; /* ;AN000; */ +unsigned char which_disk; /* ;AN000; */ +unsigned char which_head; /* ;AN000; */ +unsigned char which_sector; /* ;AN000; */ + /* ;AN000; */ +BEGIN /* ;AN000; */ + /* ;AN000; */ +char far *buffer_pointer = boot_record; /* ;AN000; */ + /* ;AN000; */ + /* Setup read, always on a cylinder boundary */ /* ;AN000; */ + regs.h.ah = uc(READ_DISK); /* ;AN000; */ + regs.h.al = uc(1); /* ;AN000; */ + regs.h.dh = which_head; /* ;AN000; */ + regs.h.cl = which_sector; /* ;AN000; */ + /* ;AN000; */ + /* Specify the disk */ /* ;AN000; */ + regs.h.dl = which_disk + 0x80; /* ;AN000; */ + /* ;AN000; */ + /* Need to scramble CX so that sectors and cyl's are in INT 13 format */ /* ;AN000; */ + /* ;AN000; */ + if (cylinder > u(255)) /* ;AN000; */ + BEGIN /* ;AN000; */ + regs.h.cl = regs.h.cl | ((char)((cylinder /256) << 6)); /* ;AN000; */ + END /* ;AN000; */ + regs.h.ch = (unsigned char)(cylinder & 0xFF); /* ;AN000; */ + /* ;AN000; */ + /* Point at the place to write the boot record */ /* ;AN000; */ + regs.x.bx = FP_OFF(buffer_pointer); /* ;AN000; */ + segregs.es = FP_SEG(buffer_pointer); /* ;AN000; */ + /* ;AN000; */ + /* read in the boot record */ /* ;AN000; */ + DiskIo(®s,®s,&segregs); /* ;AN000; */ + /* Check for error reading it */ /* ;AN000; */ + if ((regs.x.cflag & 1) != u(1)) /* ;AN000; */ + BEGIN /* ;AN000; */ + return(TRUE); /* ;AN000; */ + END /* ;AN000; */ + else /* ;AN000; */ + BEGIN /* ;AN000; */ + /* Tell user there was an error */ /* ;AN000; */ + good_disk[which_disk] = FALSE; /* ;AN000; */ + return(FALSE); /* ;AN000; */ + END /* ;AN000; */ +END /* ;AN000; */ + /* ;AN000; */ +/* */ /* ;AN000; */ +void DiskIo(InRegs,OutRegs,SegRegs) /* ;AN000; */ +union REGS *InRegs; /* ;AN000; */ +union REGS *OutRegs; /* ;AN000; */ +struct SREGS *SegRegs; /* ;AN000; */ + /* ;AN000; */ +BEGIN /* ;AN000; */ + /* ;AN000; */ + char *WritePtr; /* ;AN000; */ + /* ;AN000; */ +#ifdef DEBUG /* ;AN000; */ + /* ;AN000; */ + switch(InRegs->h.ah) /* ;AN000; */ + { /* ;AN000; */ + case 0: /* ;AN000; */ + case 1: /* ;AN000; */ + case 2: /* ;AN000; */ + case 4: /* ;AN000; */ + case 8: /* ;AN000; */ + case 15: /* ;AN000; */ + case 16: /* ;AN000; */ + int86x((int)DISK,InRegs,OutRegs,SegRegs); /* ;AN000; */ + break; /* ;AN000; */ + /* ;AN000; */ + default: /* ;AN000; */ + WritePtr = getenv("WRITE"); /* ;AN000; */ + if (strcmpi(WritePtr,"ON") != 0) /* ;AN000; */ + BEGIN /* ;AN000; */ + printf("\nDisallowing Disk I/O Request\n"); /* ;AN000; */ + printf("AX:%04X BX:%04X CX:%04X DX:%04X ES:%04X\n", /* ;AN000; */ + InRegs->x.ax,InRegs->x.bx,InRegs->x.cx,InRegs->x.dx,SegRegs->es); /* ;AN000; */ + /* ;AN000; */ + OutRegs->h.ah = (unsigned char) 0; /* ;AN000; */ + OutRegs->x.cflag = (unsigned) 0; /* ;AN000; */ + END /* ;AN000; */ + else int86x((int)DISK,InRegs,OutRegs,SegRegs); /* ;AN000; */ + /* ;AN000; */ + break; /* ;AN000; */ + /* ;AN000; */ + } /* ;AN000; */ + /* ;AN000; */ +#else /* ;AN000; */ + /* ;AN000; */ + int86x((int)DISK,InRegs,OutRegs,SegRegs); /* ;AN000; */ + /* ;AN000; */ +#endif /* ;AN000; */ + /* ;AN000; */ + return; /* ;AN000; */ + /* ;AN000; */ +END /* ;AN000; */ + /* ;AN000; */ + \ No newline at end of file diff --git a/v4.0/src/SELECT/INTVEC.ASM b/v4.0/src/SELECT/INTVEC.ASM new file mode 100644 index 0000000..23e0350 --- /dev/null +++ b/v4.0/src/SELECT/INTVEC.ASM @@ -0,0 +1,546 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; +; Change History: +; +; +; ;AN000; S.R. +; ;AN000; D.T. +; ;AN001; DCR219 +; ;AN002; P1132 & P1136 +; ;AN003; P1757 +; ;AN004; P2683 - bad diskette in b: +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INCLUDE MAC_EQU.INC ;AN000; +INCLUDE PANEL.MAC ;AN000; +INCLUDE STRUC.INC ;AN000; +INCLUDE MACROS.INC ;AN000; +INCLUDE MACROS8.INC ;AN000; +INCLUDE VARSTRUC.INC ;AN000; +INCLUDE EXT.INC ;AN000; +INCLUDE PAN-LIST.INC ;AN000; +INCLUDE CASEXTRN.INC ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; +EXTRN HANDLE_PANEL_CALL2:FAR ;AN000; +EXTRN HANDLE_PANEL_CALL3:FAR ;AN111;JW +EXTRN FIND_FILE_ROUTINE:FAR ;AN000; +EXTRN DISPLAY_MESSAGE_ROUTINE:FAR ;AN000;DT +EXTRN BEEP_ROUTINE:FAR ;AN000;DT + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; +NULl_DEVICE DB 'nul',0 ;AN000; +CON_DEVICE DB 'con',0 ;AN000; +SUB_PROGRAM DB 0 ;AN000; +EXEC_ERR DB 0 ;AN000; + PUBLIC DSKCPY_WHICH,DSKCPY_PAN1,DSKCPY_PAN2;AN000; + PUBLIC DSKCPY_PAN3,DSKCPY_OPTION,DSKCPY_SOURCE;AN000; +DSKCPY_WHICH DB 0 ;AN000;DT +;DSKCPY_TO_A_720 EQU 0 ;AN000;DT (MACROS8.INC for actual equates) +;DSKCPY_TO_A_360 EQU 1 ;AN000;DT +;DSKCPY_TO_B EQU 2 ;AN000;DT + +DSKCPY_OPTION DB 0 ;AN000;DT +;SOURCE1 EQU 0 ;AN000;DT +;NO_SOURCE1 EQU 1 ;AN000;DT + +DSKCPY_SOURCE DW 0 ;AN000;DT offset of filename to check for on diskette +DSKCPY_PAN1 DW 0 ;AN000;DT +DSKCPY_PAN2 DW 0 ;AN000;DT +DSKCPY_PAN3 DW 0 ;AN000;DT + + PUBLIC DSKCPY_ERR ;AN000; +DSKCPY_ERR DB 0 ;AN000; +;DSKCPY_EXIT EQU 1 + +DATA ENDS ;AN000; DATA +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + EXTRN CHK_W_PROTECT_FLAG:BYTE ;AN000; + EXTRN W_PROTECT_FLAG:BYTE ;AN000; + EXTRN EXIT_SELECT:FAR ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CODE_FAR SEGMENT PARA PUBLIC 'CODE' ;AN000; Segment for far routine + ASSUME CS:CODE_FAR,DS:DATA ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; The critical error handler. This routine should be placed in the CODE segment. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +OLD_STACK_SEG DW ? ;AN001;GHG +OLD_STACK_OFF DW ? ;AN001;GHG + ;GHG + PUBLIC INT_24_VECTOR ;AN000; +INT_24_VECTOR: ;AN000; + + PUSHH ;AN000; + MOV AX,DATA ;AN000; + MOV DS,AX ;AN000; + MOV ES,AX ;AN000; + ; + MOV AX,CS ;AN002;S;GHG + CLI ;AN002;S;GHG + MOV OLD_STACK_SEG,SS ;AN002;S;GHG + MOV OLD_STACK_OFF,SP ;AN002;S;GHG + MOV SS,AX ;AN002;S;GHG + LEA SP,NEW_STACK_START ;AN002;S;GHG + STI ;AN002;S;GHG + ; + AND DI, 0FFH ;AN000; Mask off the high byte + .IF < CHK_W_PROTECT_FLAG EQ TRUE > ;AN000; Is this a check for write protect? + .IF < DI EQ 0 > ;AN000; Is this a write protect error? + MOV W_PROTECT_FLAG, TRUE ;AN000; If so, indicate to the calling program + .ENDIF ;AN000; + MOV AL, 3 ;AN000; Get DOS to trash this call + JMP EXIT_THE_INT ;AN000; Exit the interrupt + .ENDIF ;AN000; + ; + .IF < DI eq 0 > ;AN002;GHG + HANDLE_ERROR PAN_WRITE_PROT,2 ;AN002;GHG + MOV AL,1 ;AN002;GHG + .ELSEIF < DI eq 2 > ;AN002;GHG + HANDLE_ERROR PAN_DRIVE_ERROR,2 ;AN002;GHG + MOV AL,1 ;AN002;GHG + .ELSE ;AN002;GHG + .IF < SUB_PROGRAM EQ TRUE > ;AN000; + JMP END_SUB_PROGRAM ;AN000; + .ENDIF ;AN000; + MOV AL, 3 ;AN000; Fail this system call + .ENDIF ;AN000; +EXIT_THE_INT: ;AN000; + MOV SS,OLD_STACK_SEG ;AN002;S;GHG + MOV SP,OLD_STACK_OFF ;AN002;S;GHG + POPP ;AN000; + IRET ;AN000; Return from the interrupt + ; +END_SUB_PROGRAM: ;AN000; + MOV SS,OLD_STACK_SEG ;AN002;S;GHG + MOV SP,OLD_STACK_OFF ;AN002;S;GHG + POPP ;AN000; + ADD SP, 6 ;AN000; + ; + MOV AH, 4CH ;AN000; + MOV AL, 01 ;AN000; + DOSCALL ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; The DISKCOPY INT 2F INTERFACE +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + EVEN ;AN000; +NEW_STACK DW 200 DUP('S') ;AN001;GHG +NEW_STACK_START DW 0 ;AN001;GHG + ;GHG +FIRST_CALL DB 0 ;AN001;GHG + ;GHG + PUBLIC INT_2F_VECTOR ;AN001;GHG +INT_2F_VECTOR: ;AN001;GHG + .IF < AX EQ 0ADC1H > near ;AN001;GHG + ;GHG + PUSHH ;AN001;GHG + MOV AX,DATA ;AN001;GHG + MOV DS,AX ;AN001;GHG + MOV ES,AX ;AN001;GHG + ;GHG + MOV AX,CS ;AN001;S;GHG + CLI ;AN001;S;GHG + MOV OLD_STACK_SEG,SS ;AN001;S;GHG + MOV OLD_STACK_OFF,SP ;AN001;S;GHG + MOV SS,AX ;AN001;S;GHG + LEA SP,NEW_STACK_START ;AN001;S;GHG + STI ;AN001;S;GHG + ;GHG + + .IF < DSKCPY_WHICH eq DSKCPY_TO_B > near ;AN000;DT + ; + .IF < BX EQ 9 > and ;AN000;DT + .IF < DSKCPY_PAN1 ne NOPANEL > ;AN000;DT + .REPEAT ;AN000;DT + MOV BX,PAN_INSTALL_DOS ;AN000;DT + MOV AX,DSKCPY_PAN1 ;AN000;DT + CALL HANDLE_PANEL_CALL2 ;AN000;DT + CALL HANDLE_KEYSTROKE ;AN000;DT + MOV DI, DSKCPY_SOURCE ;AN000;DT + MOV CX, 0 ;AN000;DT + CALL FIND_FILE_ROUTINE ;AN000;DT + .LEAVE < nc > ;AN000;DT + MOV BX,ERR_DOS_DISK ;AN000;DT + CALL INT2F_ERROR ;AN000;DT + ;AN000;DT + .UNTIL ;AN000;DT + ;AN000;DT + MOV BX,PAN_INSTALL_DOS ;AN000;DT + MOV AX,DSKCPY_PAN2 ;AN000;DT + CALL HANDLE_PANEL_CALL2 ;AN000;DT + ;AN000;DT + .ELSEIF ;AN000;DT + MOV BX,PAN_DRIVE_ERROR ;AN000; + CALL INT2F_ERROR ;AN000;DT + ; + .ELSEIF ;AN001;GHG write protect + MOV BX,PAN_WRITE_PROT ;AN000; + CALL INT2F_ERROR ;AN000;DT + ; + .ELSEIF or ;AN004;JW + .IF or ;AN004;JW + .IF or ;AN004;JW + .IF or ;AN004;JW + .IF ;AN004;JW + MOV BX,PAN_BAD_DISKET ;AN004;JW Bad diskette in b: + CALL INT2F_ERROR ;AN004;JW + MOV N_DSKCPY_ERR,E_DSKCPY_RETRY ;AN004;JW + ; + .ELSEIF ;AN001;GHG + MOV FIRST_CALL,0 ;AN001;GHG + .ELSEIF and ;AN001;GHG + .IF and ;AN001;GHG + .IF and ;AN001;GHG + .IF and ;AN000;DT + .IF and ;AN003;JW + .IF and ;AN001;GHG + .IF and ;AN001;GHG + .IF and ;AN001;GHG + .IF ;AN001;GHG + MOV BX,ERR_GENERAL ;AN000; + CALL INT2F_ERROR ;AN000;DT + .ENDIF ;AN000; + MOV AX,0FFFFH ;AN000;DT + + .ELSEIF < DSKCPY_WHICH eq DSKCPY_TO_A_360 > near ;AN000;DT + .IF < BX EQ 8 > ;AN001;GHG + .IF < DSKCPY_OPTION eq SOURCE1 > or;AN000; + .IF ;AN001;GHG + .REPEAT ;AN000; + MOV BX,PAN_INSTALL_DOS ;AN000;DT + MOV AX,DSKCPY_PAN1 ;AN000;DT + CALL HANDLE_PANEL_CALL2 ;AN000;DT + CALL HANDLE_KEYSTROKE ;AN000;DT + ;AN000;DT + MOV DI, DSKCPY_SOURCE ;AN000;DT + MOV CX, 0 ;AN000;DT + CALL FIND_FILE_ROUTINE ;AN000;DT + .LEAVE < nc > ;AN000;DT + MOV BX,ERR_DOS_DISK ;AN000;DT + CALL INT2F_ERROR ;AN000;DT + .UNTIL ;AN000;DT + ;AN000;DT + .ENDIF ;AN000; + MOV BX,PAN_INSTALL_DOS ;AN000;DT + MOV AX,DSKCPY_PAN2 ;AN000;DT + CALL HANDLE_PANEL_CALL2 ;AN000;DT + MOV FIRST_CALL,1 ;AN000;GHG + .ELSEIF ;AN001;GHG + MOV BX,PAN_INSTALL_DOS ;AN000;DT + MOV AX,DSKCPY_PAN3 ;AN000;DT + CALL HANDLE_PANEL_CALL2 ;AN000;DT + CALL HANDLE_KEYSTROKE ;AN000;DT + MOV BX,PAN_INSTALL_DOS ;AN000;DT + MOV AX,DSKCPY_PAN2 ;AN000;DT + CALL HANDLE_PANEL_CALL2 ;AN000;DT + .ELSEIF ;AN000;DT + MOV BX,PAN_DRIVE_ERROR ;AN000; + CALL INT2F_ERROR ;AN000;DT + ; + .ELSEIF ;AN001;GHG write protect + MOV BX,PAN_WRITE_PROT ;AN000; + CALL INT2F_ERROR ;AN000; + ; + .ELSEIF or ;AN004;JW + .IF or ;AN004;JW + .IF or ;AN004;JW + .IF or ;AN004;JW + .IF ;AN004;JW + MOV BX,PAN_BAD_DISKET ;AN004;JW Bad diskette in b: + CALL INT2F_ERROR ;AN004;JW + MOV N_DSKCPY_ERR,E_DSKCPY_RETRY ;AN004;JW + ; + .ELSEIF ;AN001;GHG + MOV FIRST_CALL,0 ;AN001;GHG + .ELSEIF and ;AN001;GHG + .IF and ;AN001;GHG + .IF and ;AN003;JW + .IF and ;AN001;GHG + .IF and ;AN001;GHG + .IF and ;AN001;GHG + .IF ;AN001;GHG + MOV BX,ERR_GENERAL ;AN000; + CALL INT2F_ERROR ;AN000; + .ENDIF ;AN001;GHG + ; + MOV AX,0FFFFH ;AN001;GHG + .ELSE near ;AN000; + .IF < BX EQ 9 > ;AN001;GHG + MOV AX,PAN_DSKCPY_SRC ;AN001;GHG + CALL HANDLE_PANEL_CALL ;AN001;GHG + CALL HANDLE_KEYSTROKE ;AN001;GHG + MOV AX,PAN_DSKCPY_CPY ;AN001;GHG + CALL HANDLE_PANEL_CALL ;AN001;GHG + .ELSEIF ;AN001;GHG + .IF ;AN001;GHG + MOV AX,PAN_DSKCPY_TAR ;AN001;GHG + CALL HANDLE_PANEL_CALL ;AN001;GHG + CALL HANDLE_KEYSTROKE ;AN001;GHG + .ELSE ;AN001;GHG + MOV FIRST_CALL,1 ;AN001;GHG + .ENDIF ;AN001;GHG + MOV AX,PAN_DSKCPY_CPY ;AN001;GHG + CALL HANDLE_PANEL_CALL ;AN001;GHG + .ELSEIF ;AN001;GHG + MOV AX,0FFFFH ;AN001;GHG + MOV FIRST_CALL,0 ;AN001;GHG + JMP INT2F_1 ;AN001;GHG + .ELSEIF ;AN000;DT drive not ready + MOV BX,PAN_DRIVE_ERROR ;AN000; + CALL INT2F_ERROR ;AN000;DT + .ELSEIF ;AN001;GHG write protect + MOV BX,PAN_WRITE_PROT ;AN000; + CALL INT2F_ERROR ;AN000;DT + .ELSEIF or ;AN004;JW + .IF or ;AN004;JW + .IF or ;AN004;JW + .IF or ;AN004;JW + .IF ;AN004;JW + MOV BX,PAN_BAD_DISKET ;AN004;JW Bad diskette in b: + CALL INT2F_ERROR ;AN004;JW + MOV N_DSKCPY_ERR,E_DSKCPY_RETRY ;AN004;JW + ; + .ELSEIF and ;AN001;GHG + .IF and ;AN001;GHG + .IF and ;AN001;GHG + .IF and ;AN001;GHG + .IF and ;AN001;GHG + .IF and ;AN001;GHG + .IF ;AN001;GHG + MOV BX,ERR_GENERAL ;AN000; + CALL INT2F_ERROR ;AN000;DT + .ENDIF ;AN001;GHG + ; + MOV AX,0FFFFH ;AN001;GHG + + .ENDIF ;AN000;DT + +INT2F_1: MOV SS,OLD_STACK_SEG ;AN001;S;GHG + MOV SP,OLD_STACK_OFF ;AN001;S;GHG + + ; + POPP ;AN001;GHG + ; + ; + IRET ;AN001;GHG + .ELSE ;AN001;GHG + JMP CS:OLD_INT_2F ;AN001;GHG + .ENDIF ;AN001;GHG +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; The FORMAT INT2F interrupt routine +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + PUBLIC INT_2F_FORMAT ;AN111;JW +INT_2F_FORMAT: ;AN111;JW + .IF < AX EQ 0ADC1H > near ;AN111;JW + ;AN111;JW + PUSHH ;AN111;JW + MOV AX,DATA ;AN111;JW + MOV DS,AX ;AN111;JW + MOV ES,AX ;AN111;JW + ;AN111;JW + MOV AX,CS ;AN111;JW + CLI ;AN111;JW + MOV OLD_STACK_SEG,SS ;AN111;JW + MOV OLD_STACK_OFF,SP ;AN111;JW + MOV SS,AX ;AN111;JW + LEA SP,NEW_STACK_START ;AN111;JW + STI ;AN111;JW + ;AN111;JW + .IF < FORMAT_WHICH eq STARTUP > ;AN111;JW + MOV AX,SUB_INS_STARTT_S360 ;AN111;JW + .ELSE ;AN111;JW + MOV AX,SUB_INS_SHELL_S360 ;AN111;JW + .ENDIF ;AN111;JW + MOV BX,PAN_INST_PROMPT ;AN111;JW + CALL HANDLE_PANEL_CALL2 ;AN111;JW + CALL HANDLE_KEYSTROKE ;AN111;JW + ;AN111;JW + .IF < FORMAT_WHICH eq STARTUP > ;AN111;JW + MOV AX,FORMAT_STARTUP ;AN111;JW + .ELSE ;AN111;JW + MOV AX,FORMAT_SHELL ;AN111;JW + .ENDIF ;AN111;JW + CALL HANDLE_PANEL_CALL3 ;AN111;JW + ;AN111;JW + MOV SS,OLD_STACK_SEG ;AN111;JW + MOV SP,OLD_STACK_OFF ;AN111;JW + POPP ;AN111;JW + IRET ;AN111;JW + .ELSE ;AN111;JW + JMP CS:OLD_INT_2F ;AN111;JW + .ENDIF ;AN111;JW +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; The DISKCOPY INT 2F ERROR ROUTINE +; +; Input: BX = error panel +; +; Output: none +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INT2F_ERROR PROC NEAR ;AN000;DT + MOV CX,2 ;AN000;DT allow ESC and ENTER + CALL HANDLE_ERROR_CALL ;AN000;DT display error panel + JNC INT2F_ERROR_EXIT ;AN000;DT if ENTER pressed, then ok + ;AN000;DT else ESC + MOV DSKCPY_ERR,DSKCPY_EXIT ;AN000;DT indicate user wants to exit + MOV AX,4C01H ;AN000;DT and error message already up DOS + INT 21H ;AN000;DT exit with error + ;AN000;DT +INT2F_ERROR_EXIT: ;AN000;DT + RET ;AN000;DT +INT2F_ERROR ENDP ;AN000;DT + ;;;;;;;;;;;; + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; The DISKCOPY INT 2F INTERFACE (256KB DISKCOPY) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + PUBLIC INT_2F_256KB ;AN000;DT +INT_2F_256KB: ;AN000;DT + .IF < AX EQ 0ADC1H > near ;AN000;DT + ;AN000;DT + PUSHH ;AN000;DT + MOV AX,DATA ;AN000;DT + MOV DS,AX ;AN000;DT + MOV ES,AX ;AN000;DT + ;AN000;DT + MOV AX,CS ;AN000;DT + CLI ;AN000;DT + MOV OLD_STACK_SEG,SS ;AN000;DT + MOV OLD_STACK_OFF,SP ;AN000;DT + MOV SS,AX ;AN000;DT + LEA SP,NEW_STACK_START ;AN000;DT + STI ;AN000;DT + .IF < BX EQ 9 > ;AN000;DT + CLEAR_SCREEN ;AN000;DT + DISPLAY_MESSAGE 14 ;AN000;DT insert INSTALL + CALL HANDLE_KEY256KB ;AN000;DT + CLEAR_SCREEN ;AN000;DT + DISPLAY_MESSAGE 15 ;AN000;DT Copying diskettes + .ELSEIF ;AN000;DT + .IF ;AN000;DT + CLEAR_SCREEN ;AN000;DT + DISPLAY_MESSAGE 13 ;AN000;DT insert INSTALL COPY + CALL HANDLE_KEY256KB ;AN000;DT + .ELSE ;AN000;DT + MOV FIRST_CALL,1 ;AN000;DT + .ENDIF ;AN000;DT + CLEAR_SCREEN ;AN000;DT + DISPLAY_MESSAGE 15 ;AN000;DT Copying diskettes + .ELSEIF ;AN000;DT + MOV AX,0FFFFH ;AN000;DT + MOV FIRST_CALL,0 ;AN000;DT + JMP INT2F_1_ALT ;AN000;DT + .ELSEIF ;AN000;DT + CLEAR_SCREEN ;AN000;DT + DISPLAY_MESSAGE 16 ;AN000;DT Drive door open + CALL INT2F_ERRALT ;AN000;DT + .ELSEIF ;AN000;DT + CLEAR_SCREEN ;AN000;DT + DISPLAY_MESSAGE 17 ;AN000;DT Write Protect error + CALL INT2F_ERRALT ;AN000;DT + ;AN000;DT + .ELSEIF and ;AN000;DT + .IF and ;AN000;DT + .IF and ;AN000;DT + .IF and ;AN000;DT + .IF and ;AN000;DT + .IF and ;AN000;DT + .IF ;AN000;DT + CLEAR_SCREEN ;AN000;DT + DISPLAY_MESSAGE 18 ;AN000;DT General error + CALL INT2F_ERRALT ;AN000;DT + .ENDIF ;AN000;DT + ;AN000;DT + MOV AX,0FFFFH ;AN000;DT + ;AN000;DT +INT2F_1_ALT: MOV SS,OLD_STACK_SEG ;AN000;DT + MOV SP,OLD_STACK_OFF ;AN000;DT + ;AN000;DT + POPP ;AN000;DT + IRET ;;AN000;;DT + .ELSE ;AN000;DT + JMP CS:OLD_INT_2F ;AN000;DT + .ENDIF ;AN000;DT + ;AN000;DT +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; The DISKCOPY INT 2F ERROR ROUTINE (256KB) +; +; Input: BX = error panel +; +; Output: none +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INT2F_ERRALT PROC NEAR ;AN000;DT +INT2F_AGN: ;AN000;DT + MOV AH,0 ;AN000;DT + INT 16H ;AN000;DT get keystroke + CMP AL,13 ;AN000;DT If ENTER the continue + JE INT2F_ERRALT_EXIT ;AN000;DT + CMP AL,27 ;AN000;DT If not ESC the again + JE INT2F_ALT_ABORT ;AN000; + DISPLAY_MESSAGE 11 ;AN000;DT BEEP + JMP INT2F_AGN ;AN000;DT +INT2F_ALT_ABORT: ;AN000;DT else ESC + MOV DSKCPY_ERR,DSKCPY_EXIT ;AN000;DT indicate user wants to exit + MOV AX,4C01H ;AN000;DT and error message already up DOS + INT 21H ;AN000;DT exit with error + ;AN000;DT +INT2F_ERRALT_EXIT: ;AN000;DT + RET ;AN000;DT +INT2F_ERRALT ENDP ;AN000;DT + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; The INT23 interrupt routine (CTRL-BREAK) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; + PUBLIC INT_23_VECTOR ;AN074;SEH +INT_23_VECTOR: ;AN074;SEH + ; + IRET ;AN074;SEH ignore ctrl-break and return + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; The DISKCOPY GET KEY ROUTINE (256KB) +; +; Input: none +; +; Output: none +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +HANDLE_KEY256KB PROC NEAR ;AN000;DT +HAKEY_AGN: ;AN000;DT + MOV AH,0 ;AN000;DT + INT 16H ;AN000;DT get keystroke + CMP AL,13 ;AN000;DT If ENTER the continue + JE HAKEY_EXIT ;AN000;DT + DISPLAY_MESSAGE 11 ;AN000;DT BEEP + JMP HAKEY_AGN ;AN000;DT + ;AN000;DT +HAKEY_EXIT: ;AN000;DT + RET ;AN000;DT +HANDLE_KEY256KB ENDP ;AN000;DT + +CODE_FAR ENDS ;AN000; + END ;AN000; diff --git a/v4.0/src/SELECT/MACROS.INC b/v4.0/src/SELECT/MACROS.INC new file mode 100644 index 0000000..a942878 --- /dev/null +++ b/v4.0/src/SELECT/MACROS.INC @@ -0,0 +1,540 @@ +;;**************************************************************************** +;; Assembler MACROS for use with SELECT. +;; File: MACROS.INC +;; Latest Change Date: July 28, 1987 +;; +;; These macros define powerful assembler verbs neccessary for SELECT. +;; +;; Note: Many of the macros make use of an ASCII-N string for passing +;; parameters. The string is defined below. +;; DW count +;; DB "string_variable",? +;; +;; COUNT is the length of the string and is a word. +;; It is necessary to follow the string with at least one byte for the +;; purpose of changing the ASCII-N string to an ASCII-Z string. +;; +;;**************************************************************************** +;;**************************************************************************** +;; Macro Change History. +;; +;; June 18, 1987 - Split MACROS.INC into 5 smaller files. They are: +;; MACROS.INC +;; MACROS2.INC +;; MACROS3.INC +;; MACROS4.INC +;; MACROS5.INC +;; At the end of the files, there is an INCLUDE statement +;; to include the next file. Therefore, the modules which +;; use these macros do not have to add more include statements. +;; The only one that must have an INCLUDE statement is +;; MACROS.INC. +;; +;; - Removed the PUSHH and POPP macros from the other macro +;; definitions. +;; +;; June 22, 1987 - Added the SCAN_PARAMETERS macro. +;; +;; June 24, 1987 - Added the PREPARE_FILE, WRITE_LINE and SAVE_FILE macros. +;; - Revised the SCAN_PARAMETERS macro to read two of the +;; parameters from a file instead of the command line. +;; +;; June 26, 1987 - Changed the EXEC_PROGRAM macros to perform a call to +;; EXEC_PROGRAM_ROUTINE which performs the same tasks are the +;; previously defined macro. EXEC_PROGRAM_ROUTINE was added +;; to ROUTINES.INC. +;; +;; June 29, 1987 - Changed the GET_COUNTRY_INDEX to a subroutine call to +;; GET_CNTY_INDEX_ROUTINE. The routine has been changed +;; to get the new information from the structure, NUM_DESIGNATES, +;; CPSW_STAT, and RESERVED_1. +;; - Changed GET_COUNTRY_DEFAULTS, GET_KEYBOARD_INDEX and +;; GET_KEYBOARD macros to perform subroutines calls. +;; +;;**************************************************************************** +PAGE ;AN000; +INCLUDE MAC_EQU.INC ;AN000; +;;**************************************************************************** +;; +;; PUSHH: pushes the listed registers on the stack +;; +;; SYNTAX: PUSHH +;; +;; INPUT: register list = AX, BX, CX, DX, SI, DI, BP, SS, SP, CS, DS, ES +;; +;; OUTPUT: none +;; +;; OPERATION: +;; +;; PUSHH ALLOWS THE PROGRAMER TO SPECIFY A LIST OF REGISTER TO +;; BE PUSHED ON A SINGLE LINE. +;; +;;**************************************************************************** +PUSHH MACRO REG_LIST ;;AN000; + IRP REG, ;;AN000; + PUSH REG ;;AN000; save registers + ENDM ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; POPP: pops the listed registers on the stack +;; +;; SYNTAX: POPP +;; +;; INPUT: register list = AX, BX, CX, DX, SI, DI, BP, SS, SP, CS, DS, ES +;; +;; OUTPUT: none +;; +;; OPERATION: +;; +;; POPP ALLOWS THE PROGRAMER TO SPECIFY A LIST OF REGISTER TO +;; BE POPPED ON A SINGLE LINE. +;; +;;**************************************************************************** +POPP MACRO REG_LIST ;;AN000; + IRP REG, ;;AN000; + POP REG ;;AN000; return registers to initial state + ENDM ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; DOSCALL: DOS interrupt 21 function call +;; +;; SYNTAX: DOSCALL +;; +;; INPUT: none +;; +;; OUTPUT: none +;; +;; OPERATION: +;; +;; DOSCALL INVOKES THE DOS INTERRUPT 21 FUNCTION CALL. +;; THE AH REGISTER MUST ALREADY BE LOADED WITH THE +;; REQUIRED VALUE. +;; +;;**************************************************************************** +DOSCALL MACRO ;;AN000; + INT 21H ;;AN000; call to DOS + ENDM ;;AN000; +;;**************************************************************************** +;; +;; INIT_VAR: Load a variable with an immediate value. +;; +;; SYNTAX: INIT_VAR variable, expression +;; +;; INPUT: variable = Address of a variable. +;; expression = The immediate value to load into the variable. +;; +;; OUTPUT: +;; None. +;; +;; OPERATION: The memory variable identified by var is assigned the +;; immediate value specified in immed. +;; +;;**************************************************************************** +INIT_VAR MACRO VARIABLE,EXPRESSION ;;AN000; + MOV VARIABLE,EXPRESSION ;;AN000; move expression into variable + ENDM ;;AN000; +;;**************************************************************************** +;; +;; COPY_WORD: Copy a word variable to another word variable. +;; +;; SYNTAX: COPY_WORD var_dest, var_src +;; +;; INPUT: var_dest - The destination word variable. +;; var_src - The source word variable. +;; +;; OUTPUT: none +;; +;; OPERATION: The contents of var_src remain intact. +;; The contents of AX is destroyed. +;; +;;************************************************************************ +COPY_WORD MACRO VAR_DEST, VAR_SRC ;;AN000; + MOV AX, VAR_SRC ;;AN000; + MOV VAR_DEST,AX ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; COPY_BYTE: Copy a byte variable to another byte variable. +;; +;; SYNTAX: COPY_WORD var_dest, var_src +;; +;; INPUT: var_dest - The destination byte variable. +;; var_src - The source byte variable. +;; +;; OUTPUT: none +;; +;; OPERATION: The contents of var_src remain intact. +;; The contents of AL is destroyed. +;; +;;************************************************************************ +COPY_BYTE MACRO VAR_DEST, VAR_SRC ;;AN000; + MOV AL, VAR_SRC ;;AN000; + MOV VAR_DEST,AL ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; COMP_WORDS: Compare two 16 bit memory variable. +;; +;; SYNTAX: COMP_WORDS var_dest, var_src +;; +;; INPUT: var_dest - The destination memory variable (16 bits) +;; var_src - The source memory variable (16 bits) +;; +;; OUTPUT: none +;; +;; OPERATION: The two 16 bit memory variables are compared and the status +;; flags are updated. Refer to the ASSEMBLER reference for more details. +;; +;;************************************************************************ +COMP_WORDS MACRO VAR_DEST, VAR_SRC ;;AN000; + ; + MOV AX, VAR_DEST ;;AN000; + CMP AX, VAR_SRC ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; COMP_BYTES: Compare two 8 bit memory variables. +;; +;; SYNTAX: COMP_BYTES var_dest, var_src +;; +;; INPUT: var_dest - The destination memory variable ( 8 bits) +;; var_src - The source memory variable ( 8 bits) +;; +;; OUTPUT: none +;; +;; OPERATION: The two 8 bit memory variables are compared and the status +;; flags are updated. Refer to the ASSEMBLER reference for more details. +;; +;;************************************************************************ +COMP_BYTES MACRO VAR_DEST, VAR_SRC ;;AN000; + ; + MOV AL, VAR_DEST ;;AN000; + CMP AL, VAR_SRC ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; INC_VAR: Increment the specified memory variable by 1. +;; +;; SYNTAX: INC_VAR var_dest +;; +;; INPUT: var_dest - The destination memory variable. +;; +;; OUTPUT: none +;; +;; OPERATION: The memory variable is incremented by one. +;; +;;************************************************************************ +INC_VAR MACRO VAR_DEST ;;AN000; + INC VAR_DEST ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; DEC_VAR: Decrement the specified memory variable by 1. +;; +;; SYNTAX: DEC_VAR var_dest +;; +;; INPUT: var_dest - The destination memory variable. +;; +;; OUTPUT: none +;; +;; OPERATION: The memory variable is decremented by one. +;; +;;************************************************************************ +DEC_VAR MACRO VAR_DEST ;;AN000; + DEC VAR_DEST ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; INIT: initializes the DS to the beginning of the data +;; +;; SYNTAX: INIT +;; +;; INPUT: none +;; +;; OUTPUT: none +;; +;; OPERATION: +;; +;; THE MACRO SIMPLY SETS UP THE DATA SEGMENT. +;; +;;**************************************************************************** +INIT MACRO ;;AN000; + PUSH DS ;;AN000; + XOR AX,AX ;;AN000; make AX = 0 + PUSH AX ;;AN000; + MOV AX,DATA ;;AN000; + MOV DS,AX ;;AN000; initialize DS reg to beginning of data + ENDM ;;AN000; +;;************************************************************************** +;; +;; MERGE_STRING: merges 2 string blocks together to form a third one +;; +;; SYNTAX: MERGE_STRING name_dest, immed_max, name_src1, name_src2 +;; +;; INPUT: name_dest - Destination string variable (ASCII-N format) +;; immed_max - Maximum length of destination string +;; name_src1 - Source string variable 1 (ASCII-N format) +;; name_src2 - Source string variable 2 (ASCII-N format) +;; +;; OUTPUT: +;; None. +;; +;; OPERATION: +;; The string pointed to by name_scr1 is copied to the destination string +;; first followed by the string pointed to by name_scr2. If the +;; destination string is not long enough to hold the new string, then +;; the strings are copied until all the space is used up. +;; It is assumed that the input strings and the output string +;; are in the current data segment. +;; +;; +;;************************************************************************************** +MERGE_STRING MACRO NAME_DEST, IMMED_MAX, NAME_SRC1, NAME_SRC2 ;;AN000; + + LEA DI, NAME_DEST ;;AN000; + LEA SI, NAME_SRC1 ;;AN000; + MOV AX, IMMED_MAX ;;AN000; + CALL COPY_ROUTINE ;;AN000; + MOV CX, IMMED_MAX ;;AN000; + LEA DI, NAME_DEST ;;AN000; + LEA SI, NAME_SRC2 ;;AN000; + CALL APPEND_STRING_ROUTINE ;;AN000; + ENDM ;;AN000; +;;************************************************************************** +;; +;; APPEND_STRING: Appends an ASCII-N string to the specified string. +;; +;; SYNTAX: APPEND_STRING name_dest, immed_max, name_src +;; +;; INPUT: name_dest - Destination string variable (ASCII-N format) +;; immed_max - Maximum length of destination string +;; name_src - Source string variable (ASCII-N format) +;; +;; OUTPUT: +;; None. +;; +;; OPERATION: +;; The ASCII-N string text defined in name_scr is appended to the +;; end of name_dest. +;; +;;************************************************************************************** +APPEND_STRING MACRO NAME_DEST, IMMED_MAX, NAME_SRC ;;AN000; + MOV CX, IMMED_MAX ;;AN000; + LEA DI, NAME_DEST ;;AN000; + LEA SI, NAME_SRC ;;AN000; + CALL APPEND_STRING_ROUTINE ;;AN000; + ENDM ;;AN000; +;;************************************************************************** +;; +;; COPY_STRING: Copy ASCII-N string text. +;; +;; SYNTAX: MOVE_STRING name_dest, immed_max, name_src +;; +;; INPUT: +;; name_dest - The destination string variable. +;; immed_max - The maximum length of destination string. +;; name_src - source string veriable (ASCII-N format) +;; +;; OUTPUT: +;; None. +;; +;; OPERATION: ASCII-N string text defined in name_src is copied to name_dest. +;; The number of characters copied to name_dest will not exceed immed_max. +;; +;;************************************************************************** +COPY_STRING MACRO NAME_DEST, IMMED_MAX, NAME_SRC ;;AN000; + ; + LEA DI, NAME_DEST ;;AN000; + LEA SI, NAME_SRC ;;AN000; + MOV AX, IMMED_MAX ;;AN000; + CALL COPY_ROUTINE ;;AN000; + ENDM ;;AN000; +;;************************************************************************** +;; +;; PUSH_HEADING: Push screen label address to the SELECT stack +;; +;; SYNTAX: PUSH_HEADING immed_lab +;; +;; INPUT: +;; immed_lab - screen label +;; +;; OUTPUT: +;; None. +;; +;; OPERATION: The screen label address is pushed onto the SELECT stack +;; provided the numher of entries on the stack will not exceed the +;; maximum. Error will NOT be generated if the function was not +;; successful. +;; +;;**************************************************************************** +PUSH_HEADING MACRO IMMED_LAB ;;AN000; + MOV AX, OFFSET IMMED_LAB ;;AN000; + CALL PUSH_ROUTINE ;;AN000; + ENDM ;;AN000; +;;************************************************************************** +;; +;; POP_HEADING: Pop screen label address from the SELECT stack and jump +;; to the label address. +;; +;; SYNTAX: POP_HEADING +;; +;; INPUT: +;; None. +;; +;; OUTPUT: +;; None. +;; +;; OPERATION: The screen label address from the SELECT stack is poped +;; if the number of entries on the stack is not zero. If the number +;; of entries is zero, the EXIT_DOS screen label address will be used. +;; A jump to the screen label address is also performed. +;; +;;**************************************************************************** +POP_HEADING MACRO ;;AN000; + CALL POP_ROUTINE ;;AN000; + JMP SI ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; DIR: get current directory +;; +;; SYNTAX: DIR dir_buffer +;; +;; INPUT: dir_buffer = POINTER TO A 64-BYTE USER MEMORY AREA +;; +;; OUTPUT: CY = 0, AX = N/A, successful +;; CY = 1, AX = error code +;; +;; OPERATION: +;; +;; DIR PLACES THE FULL PATH NAME OF THE CURRENT DIRECTORY FOR THE +;; SPECIFIED DRIVE IN THE BUFFER. +;; THE RETURNING STRING IS AN ASCIIZ STRING AND IT DOES NOT +;; HAVE THE DRIVE LETTER OR A BACKSLASH. +;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +;; IS RETURNED IN AX. +;; +;;**************************************************************************** +DIR MACRO DIR_BUFFER ;;AN000; + CALL HOOK_INT_24 ;;AN000; + MOV SI,OFFSET DIR_BUFFER ;;AN000; pointer to 64 byte user area + MOV DL,0 ;;AN000; give directory of the default drive + MOV AH,47H ;;AN000; get current directory + DOSCALL ;;AN000; + CALL RESTORE_INT_24 ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; MAKE_DIR: Make a Directory +;; +;; SYNTAX: MAKE_DIR directory +;; +;; INPUT: directory = An ASCII-N STRING GIVING THE REQUIRED +;; PATH +;; OUTPUT: CY = 0, AX = undefined, call was successful +;; CY = 1, AX = error code +;; +;; OPERATION: +;; +;; THE DIRECTORY IS MADE USING THE DOS INT 21H (AH=39H) CALL. +;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +;; IS RETURNED IN AX. +;; +;; +;;**************************************************************************** +MAKE_DIR MACRO dir_len ;;AN000; + CALL HOOK_INT_24 ;;AN000; + + MOV DI,OFFSET dir_len ;;AN000; + CALL POS_ZERO ;;AN000; position the '0' at the end of the path + MOV DX,OFFSET dir_len[2] ;;AN000; advance pointer to beginning of path + MOV AH,39H ;;AN000; make directory interrupt + DOSCALL ;;AN000; call to DOS interrupt 21 + CALL RESTORE_INT_24 ;;AN000; + ENDM ;;AN000; +;;************************************************************************** +;; +;; MAKE_DIR_PATHS: Create the specified directory including all the specified +;; sub-directories if they do not exist. +;; +;; SYNTAX: MAKE_DIR_PATHS name_dir +;; +;; INPUT: +;; name_dir - Directory pathname in ASCII-N string format. +;; +;; OUTPUT: +;; CY = 0 Success +;; CY = 1 Error - AX will contain an error code. +;; +;; OPERATION: The directory pathname is created. +;; If the drive letter and colon are not followed by a '\', then the +;; macro will start creating the directories from the default directory. +;; If they are followed by a '\', then the macro will start at the root. +;; +;; +;;**************************************************************************** +MAKE_DIR_PATHS MACRO NAME_DIR ;;AN000; + + MOV BX, OFFSET NAME_DIR ;;AN000; Address of the ASCII-N string + CALL MAKE_DIR_PATHS_ROUTINE ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; REMOVE_DIR: Remove Directory +;; +;; SYNTAX: REMOVE_DIR directory +;; +;; INPUT: directory = An ASCII-N STRING giving the REQUIRED PATH +;; +;; OUTPUT: CY = 0, AX = undefined, successful +;; CY = 1, AX = error code +;; +;; OPERATION: +;; +;; THE DIRECTORY IS REMOVED USING THE DOS INT 21H (AH=3AH) CALL. +;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +;; IS RETURNED IN AX. +;; +;; It is assumed that the string is located in the data segment +;; +;;**************************************************************************** +REMOVE_DIR MACRO dir_len ;;AN000; + + CALL HOOK_INT_24 ;;AN000; + MOV DI,OFFSET dir_len ;;AN000; + CALL POS_ZERO ;;AN000; position the '0' at the end of the path + MOV DX,OFFSET dir_len[2] ;;AN000; advance pointer to beginning of path + MOV AH,3AH ;;AN000; remove the specified directory + DOSCALL ;;AN000; call to DOS interrupt 21 + CALL RESTORE_INT_24 ;;AN000; + ENDM ;;AN000; +;;************************************************************************** +;; +;; CHANGE_DIR: Change the current directory to the specified directory. +;; +;; SYNTAX: CHANGE_DIR name_dir +;; +;; INPUT: +;; name_dir - directory pathname in ASCII-N string format. +;; +;; OUTPUT: +;; CY = 0 Success +;; CY = 1 Error AX will contain an error code +;; +;; OPERATION: The directory pathname identified by the ASCII-N string +;; becomes the default directory. +;; +;;**************************************************************************** +CHANGE_DIR MACRO NAME_DIR ;;AN000; + + CALL HOOK_INT_24 ;;AN000; + MOV DI,OFFSET NAME_DIR ;;AN000; Get the offset of the string + CALL POS_ZERO ;;AN000; Make into an ASCII-Z string + MOV DX,OFFSET NAME_DIR+2 ;;AN000; Get the start of the string + MOV AH,3BH ;;AN000; DOS function call number + DOSCALL ;;AN000; + CALL RESTORE_INT_24 ;;AN000; + ENDM ;;AN000; +INCLUDE MACROS2.INC ;;AN000; diff --git a/v4.0/src/SELECT/MACROS2.INC b/v4.0/src/SELECT/MACROS2.INC new file mode 100644 index 0000000..6bb1741 --- /dev/null +++ b/v4.0/src/SELECT/MACROS2.INC @@ -0,0 +1,437 @@ +;;**************************************************************************** +;; Assembler MACROS for use with SELECT. +;; File: MACROS2.INC +;; Latest Change Date: August 04, 1987 +;; +;; These macros define powerful assembler verbs neccessary for SELECT. +;; +;; Note: Many of the macros make use of an ASCII-N string for passing +;; parameters. The string is defined below. +;; DW count +;; DB "string_variable",? +;; +;; COUNT is the length of the string and is a word. +;; It is necessary to follow the string with at least one byte for the +;; purpose of changing the ASCII-N string to an ASCII-Z string. +;; +;;**************************************************************************** +page ;AN000; +;;************************************************************************ +;; +;; CLOSE_FILE: Close File +;; +;; SYNTAX: CLOSE_FILE handle +;; +;; INPUT: handle = The handle of the file to close. +;; +;; OUTPUT: CY = 0, AX = undefined, successful +;; CY = 1, AX = error code +;; +;; OPERATION: +;; +;; THIS MACROS CLOSES THE FILE WITH THE GIVEN FILE HANDLE. +;; IT MAKES USE OF INT 21 (AH=3EH). +;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +;; IS RETURNED IN AX. +;; +;;************************************************************************** +CLOSE_FILE MACRO HANDLE ;;AN000; + ;; + MOV BX, HANDLE ;;AN000; + CALL FAR PTR CLOSE_FILE_ROUTINE ;;AN000; + ENDM ;;AN000; +;;************************************************************** +;; +;; CREATE_FILE: Create new File +;; +;; SYNTAX: CREATE_FILE name_file, immed_attr, var_handle +;; +;; INPUT: name_file - filename in ASCII-N string format. +;; immed_attr - file attribute +;; +;; OUTPUT: CY = 0 Success: var_handle contain the file handle +;; CY = 1 Error: AX contains as error code +;; +;; +;; OPERATION: +;; +;; CREATE_FILE CREATES A FILE WITH THE GIVEN NAME USING INT 21H (AH=5BH) +;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +;; IS RETURNED IN AX. +;; +;;************************************************************************** +CREATE_FILE MACRO NAME_FILE, IMMED_ATTR, VAR_HANDLE ;;AN000; + LEA DI, NAME_FILE ;;AN000; + MOV CX, IMMED_ATTR ;;AN000; + CALL CREATE_FILE_ROUTINE ;;AN000; + MOV VAR_HANDLE, AX ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; ERASE_FILE: Erase File +;; +;; SYNTAX: ERASE_FILE filename +;; +;; INPUT: filename = POINTER TO ASCII-N STRING - FILE NAME +;; +;; OUTPUT: CY = 0, AX = undefined, successful +;; CY = 1, AX = error code +;; +;; OPERATION: +;; +;; ERASE_FILE ERASES THE FILE USING INT 21H (AH=41H). +;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +;; IS RETURNED IN AX. +;; +;;**************************************************************************** +ERASE_FILE MACRO FILE_NAME ;;AN000; + + LEA DI, FILE_NAME ;;AN000; + CALL ERASE_FILE_ROUTINE ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; CHMOD_FILE: Change file attributes to read/write +;; +;; SYNTAX: CHMOD_FILE filename +;; +;; INPUT: filename = POINTER TO ASCII-N STRING - FILE NAME +;; +;; OUTPUT: None. +;; +;; OPERATION: +;; The CHMOD dos call is executed (43H) to change the file's attributes +;; to read/write. +;; +;;**************************************************************************** +CHMOD_FILE MACRO FILE_NAME ;;AN000; + + LEA DI, FILE_NAME ;;AN000; + CALL CHMOD_FILE_ROUTINE ;;AN000; + ENDM ;;AN000; +;;************************************************************************ +;; FIND_FILE: Find File +;; +;; SYNTAX: FIND_FILE name, attribute +;; +;; INPUT: name = POINTER TO ASCII-N STRING - FILE NAME +;; attribute - the file attribute used in the search +;; +;; OUTPUT: CY = 0, AX = undefined, successful +;; CY = 1, AX = error code +;; +;; OPERATION: +;; +;; FINDFILE FINDS THE FIRST FILENAME SPECIFIED USING INT 21 (AH=4EH). +;; AND LOADS INFORMATION INTO THE CURRENT DTA. +;; NOTE : THE DEFAULT DTA IS AT 80H IN THE PSP. +;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +;; IS RETURNED IN AX. +;; +;;************************************************************************ +FIND_FILE MACRO LOC_FILE,ATTRIBUTE ;;AN000; + ;; + LEA DI, LOC_FILE ;;AN000; + MOV CX, ATTRIBUTE ;;AN000; + CALL FIND_FILE_ROUTINE ;;AN000; + ENDM ;;AN000; +;;************************************************************************ +;; FIND_NEXT: Find the next match in the directory. +;; +;; SYNTAX: FIND_NEXT +;; +;; INPUT: +;; None. +;; +;; OUTPUT: CY = 0, AX = undefined, successful +;; CY = 1, AX = error code +;; +;; OPERATION: This macro must be called after FIND_FIRST. It searched +;; the same directory as the FIND_FIRST command for the next match. +;; If none is found then the carry flag is set. +;; This macro uses the data in the DTA for the directory seach so +;; it is important not to change the address of the current DTA. +;; +;; +;;************************************************************************ +FIND_NEXT MACRO LOC_FILE,ATTRIBUTE ;;AN000; + CALL HOOK_INT_24 ;;AN000; + MOV INT_24_ERROR, FALSE ;;AN000; Zero the number of critical errors + MOV AH,4FH ;;AN000; + DOSCALL ;;AN000; + CALL RESTORE_INT_24 ;;AN000; + ENDM ;;AN000; +;;************************************************************************** +;; +;; OPEN_FILE - Open File +;; +;; SYNTAX: OPEN_FILE file_name, mode, handle +;; +;; INPUT: file_name = POINTER TO ASCII-N STRING - FILE NAME +;; mode = 0,1,2 (read,write,read/write) +;; handle = POINTER TO A LOCATION TO STORE FILE HANDLE +;; +;; OUTPUT: CY = 0, AX = FILE HANDLE, successful +;; CY = 1, AX = error code +;; +;; OPERATION: +;; +;; THIS MACRO OPENS A FILE FOR READ/WRITE OPERATIONS. +;; IT MAKES USE OF INT 21 (AH=3DH). +;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +;; IS RETURNED IN AX. +;; +;;************************************************************************** +OPEN_FILE MACRO FILE_NAME,MODE,HANDLE ;;AN000; + + LEA DI, FILE_NAME ;;AN000; + MOV AL, MODE ;;AN000; + CALL OPEN_FILE_ROUTINE ;;AN000; + MOV HANDLE, AX ;;AN000; + ENDM ;;AN000; +;;************************************************************************** +;; +;; RENAME_FILE - Rename File +;; +;; SYNTAX: RENAME_FILE old_name, new_name +;; +;; INPUT: old_name = POINTER TO ASCII-N STRING -OLD FILE NAME +;; new_name = POINTER TO ASCII-N STRING -NEW FILE NAME +;; +;; OUTPUT: CY = 0, AX = undefined, successful +;; CY = 1, AX = error code +;; +;; OPERATION: +;; +;; THIS MACRO RENAMES A FILE GIVEN 2 NAMES. +;; IT MAKES USE OF INT 21 (AH=56H). +;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +;; IS RETURNED IN AX. +;; +;;************************************************************************** +RENAME_FILE MACRO OLD_NAME,NEW_NAME ;;AN000; + ;; + LEA SI, OLD_NAME ;;AN000; + LEA DI, NEW_NAME ;;AN000; + CALL RENAME_FILE_ROUTINE ;;AN000; + ENDM ;;AN000; +;;************************************************************************** +;; +;; READ_FILE: Transfer the specified number of bytes from a file into a +;; buffer location. +;; +;; SYNTAX: READ_FILE var_handle, buffer, immed_char, var_char +;; +;; INPUT: +;; var_handle - The handle of the file to read. +;; buffer - The address of where to store the data +;; immed_char - The number of characters to read +;; +;; OUTPUT: +;; CY = 0, Read success. var_char - number of bytes read +;; CY = 1, Read error. AX contains the error code. +;; +;; OPERATION: +;; +;; THIS MACRO READS TO AN ALREADY OPENED FILE. +;; IT MAKES USE OF INT 21 (AH=3FH). +;; AX WILL RETURN THE NUMBER BYTES ACTUALLY WRITTEN. +;; +;;************************************************************************ +READ_FILE MACRO VAR_HANDLE,BUFFER,IMMED_CHAR, VAR_CHAR ;;AN000; + + MOV BX,VAR_HANDLE ;;AN000; + MOV DX,OFFSET BUFFER ;;AN000; + MOV CX,IMMED_CHAR ;;AN000; + CALL READ_FILE_ROUTINE ;;AN000; + ENDM ;;AN000; +;;************************************************************************** +;; +;; WRITE_FILE: Transfer the specified number of bytes from a buffer into a +;; specified file. +;; +;; SYNTAX: WRITE_FILE var_handle, buffer, immed_char, var_char +;; +;; INPUT: +;; var_handle - The handle of the file to write to. +;; buffer - The address of where the data is stored. +;; immed_char - The number of characters to write. +;; +;; OUTPUT: +;; CY = 0, Write success. var_char - number of bytes written. +;; CY = 1, Write error. AX contains the error code. +;; +;; OPERATION: +;; +;; THIS MACRO WRITES TO AN ALREADY OPENED FILE. +;; IT MAKES USE OF INT 21 (AH=3DH). +;; AX WILL RETURN THE NUMBER BYTES ACTUALLY WRITTEN. +;; +;;************************************************************************ +WRITE_FILE MACRO VAR_HANDLE, BUFFER, IMMED_CHAR, VAR_CHAR ;;AN000; + ;; + MOV BX,VAR_HANDLE ;;AN000; + MOV DX,OFFSET BUFFER ;;AN000; + MOV CX,IMMED_CHAR ;;AN000; + CALL WRITE_FILE_ROUTINE ;;AN000; + ENDM ;;AN000; +;;************************************************************************** +;; +;; PREPARE_FILE: Prepare a file and a buffer for the construction of that +;; file line by line. +;; +;; SYNTAX: PREPARE_FILE filename +;; +;; INPUT: +;; filename = The name of the file to create. (ASCII-N format) +;; +;; OUTPUT: CY = 0: No error was encountered. +;; CY = 1: There was an error encountered. +;; +;; OPERATION: A attempt is made to create the file. If it fails because +;; the file already exists, then the file is opened for writing. +;; The user will then write to the file be calling WRITE_LINE macro. The +;; data will be temperarily stored in a buffer to limit the actual number +;; of writes to the file. +;; +;;************************************************************************** +PREPARE_FILE MACRO FILENAME ;;AN000; + + MOV BX, OFFSET FILENAME ;;AN000; Pass the address of the filename string + CALL PREPARE_FILE_ROUTINE ;;AN000; Call a routine to do that actual work + ENDM ;;AN000; +;;************************************************************************** +;; +;; WRITE_LINE: Write a line to the file being constructed. +;; +;; SYNTAX: WRITE_LINE line +;; +;; INPUT: +;; line = The line to write to the file. (ASCII-N format) +;; +;; OUTPUT: CY = 0: No error was encountered. +;; CY = 1: An error was encountered. +;; +;; OPERATION: The line that is passed, has a CR and a LF appended to the +;; end of the line. The data is then stored in a buffer. When the +;; buffer is full, the data is written to the disk. +;; +;;************************************************************************** +WRITE_LINE MACRO LINE ;;AN000; + + MOV BX, OFFSET LINE ;;AN000; Pass the address of the line to write + CALL WRITE_LINE_ROUTINE ;;AN000; Call a routine to do the actual work + ENDM ;;AN000; +;;************************************************************************** +;; +;; SAVE_FILE: Empty the data in the buffer being used to create the file +;; and then close the file. +;; +;; SYNTAX: SAVE_FILE file_name, error_code +;; +;; INPUT: +;; file_name = The name of the file being built. If there has been +;; an error encountered, then the file will be erased. +;; +;; OUTPUT: CY = 0: No error was encountered. +;; CY = 1: An error was encountered. +;; ERROR_CODE will contain the code of the error which +;; occured. +;; +;; OPERATION: The routine will check to see if there is any data left in +;; the buffer. If there is, the data is written to the file being +;; created. The file is then closed. If errors were encountered at +;; anytime during the create process, then the carry flag will be set +;; and the error code will be returned in ERROR_CODE. +;; +;;************************************************************************** +SAVE_FILE MACRO FILE_NAME, ERROR_CODE ;;AN000; + + MOV BX, OFFSET FILE_NAME ;;AN000; Get the address of the file name string + CALL SAVE_FILE_ROUTINE ;;AN000; Call a subroutine to do the actual work + MOV ERROR_CODE, AX ;;AN000; Store the returned error code + ENDM ;;AN000; +;;************************************************************************** +;; +;; CHECK_DOS_VERSION: Check DOS Version level is 4.00 +;; +;; SYNTAX: CHECK_DOS_VERSION +;; +;; INPUT: +;; None. +;; +;; OUTPUT: CY = 0: Current DOS Version is 4.00 +;; CY = 1: Current DOS Version is other than level 4.00 +;; +;; OPERATION: DOS function call 30h is performed to get the current DOS +;; version number. If the DOS version is not 4.00, the carry flag is set. +;; +;;************************************************************************** +CHECK_DOS_VERSION MACRO ;;AN000; + MOV AH, 30H ;;AN000; DOS function number to perform + DOSCALL ;;AN000; + .IF < AL EQ MAJOR_VERSION > AND ;;AC047;SEH check is now made in VERSIONA.INC + .IF < AH EQ MINOR_VERSION > ;;AC047;SEH Check the DOS minor version + CLC ;;AN000; This is the correct version + .ELSE ;;AN000; + STC ;;AN000; This is the incorrect version + .ENDIF ;;AN000; + ENDM ;;AN000; +;;************************************************************************** +;; +;; SET_DISPLAY_MODE: Set the display mode to 80 column. +;; +;; SYNTAX: SET_DISPLAY_MODE +;; +;; INPUT: +;; None. +;; +;; OUTPUT: +;; None. +;; +;; OPERATION: The Video Interrupt (INT 10H, AH = 0) is performed to set +;; the display to 80 column mode. +;; +;;************************************************************************ +SET_DISPLAY_MODE MACRO ;;AN000; + + CALL SET_DISPLAY_MODE_ROUTINE ;;AN000; + ENDM ;;AN000; + +;;************************************************************************ +;; +;; CHECK_EXPANDED_MEMORY: Check if the system supports expanded memory. +;; +;; SYNTAX: CHECK_EXPANDED_MEMORY var_xma +;; +;; INPUT: +;; None. +;; +;; OUTPUT: +;; var_xma = 0: Expanded memory is NOT supported. +;; = 1: Expanded memory is supported. +;; var_mod80 = 0: Not model 80 +;; = 1: Model 80 +;; +;; OPERATION: A call to the system services (INT 15H, AH = C0H) is performed +;; to get the system configuration parameters. (model byte). +;; +;; The Personal System/2 Model 80 (model byte = 0F8h) always support +;; expanded memory. +;; +;; The Personal System/2 Models 50 and 60 (model byte = 0FCh) support +;; expanded memory if the ??? 2 is present. The ??? 2 card has +;; the identity number of F7FEh. F7H is read through the port address +;; 101h and FEH is read through port 100H +;; +;; All other models do not support expanded memory. +;; +;;************************************************************************ +CHECK_EXPANDED_MEMORY MACRO VAR_XMA, VAR_MOD80 ;;AC000;JW + + CALL CHK_EX_MEM_ROUTINE ;;AN000; + MOV VAR_XMA, SI ;;AN000; + MOV VAR_MOD80,BX ;;AN000;JW + ENDM ;;AN000; + +INCLUDE MACROS3.INC ;;AN000; diff --git a/v4.0/src/SELECT/MACROS3.INC b/v4.0/src/SELECT/MACROS3.INC new file mode 100644 index 0000000..13af97e --- /dev/null +++ b/v4.0/src/SELECT/MACROS3.INC @@ -0,0 +1,382 @@ +;;**************************************************************************** +;; Assembler MACROS for use with SELECT. +;; File: MACROS3.INC +;; Latest Change Date: July 28, 1987 +;; +;; These macros define powerful assembler verbs neccessary for SELECT. +;; +;; Note: Many of the macros make use of an ASCII-N string for passing +;; parameters. The string is defined below. +;; DW count +;; DB "string_variable",? +;; +;; COUNT is the length of the string and is a word. +;; It is necessary to follow the string with at least one byte for the +;; purpose of changing the ASCII-N string to an ASCII-Z string. +;; +;;**************************************************************************** +page ;AN000; +;;************************************************************************;; +;; +;; CHECK_DEFAULT_DRIVE: Determine if default drive is drive A: +;; +;; SYNTAX: CHECK_DEFAULT_DRIVE +;; +;; INPUT: +;; None. +;; +;; OUTPUT: +;; CY = 0: Drive A is the default drive +;; CY = 1: Drive A is NOT the default drive +;; +;; OPERATION: DOS Function Call 19h is performed to get the default drive. +;; If the default drive is not drive A (AL <> 0), the carry flag is set. +;; +;;************************************************************************;; +CHECK_DEFAULT_DRIVE MACRO ;;AN000; + MOV AH, 19H ;;AN000; Fn. Number for getting current drive + DOSCALL ;;AN000; + .IF < ZERO AL > ;;AN000; Is A the default drive? + CLC ;;AN000; Yes! + .ELSE ;;AN000; + STC ;;AN000; No! + .ENDIF ;;AN000; + ENDM ;;AN000; +;;************************************************************************;; +;; +;; CHECK_DISK: Check is the specified fixed disk is present. If disk is +;; present, return disk partition status. +;; +;; SYNTAX: CHECK_DISK immed_disk, var_disk, var_status, var_status_2, buffer +;; +;; INPUT: +;; immed_disk = 1: First fixed disk. +;; = 2: Second fixed disk. +;; +;; OUTPUT: +;; var_disk = 0: Disk not present. +;; = 1: Disk present - No DOS or EDOS partitions +;; = 2: Disk present - DOS or EDOS partitions exist +;; var_status = 01H: Primary DOS partition exists +;; = 02H: Extended DOS partitions exists +;; = 04H: Logical drives exist +;; = 08H: Free space exists in EDOS partition +;; = 10H: Free space exists on disk +;; More than one status bit can be set +;; var_status_2 = 0: There is no free space in EDOS partition and the +;; disk. +;; = 1: There is free space in the EDOS partition. +;; = 2: There is no EDOS partition, but there is free +;; disk space. +;; buffer = Buffer for fixed disk status information. +;; +;; OPERATION: A call is performed to the FDISK utility (GET_DISK_STATUS) +;; to get the status of the specified fixed disk drive. The returned +;; status information is checked and the memory variables are set as +;; specified above. +;; +;;************************************************************************;; +CHECK_DISK MACRO IMMED_DISK, VAR_DISK, VAR_STATUS, VAR_STATUS_2, BUFFER ;;AN000; + + LEA DI, BUFFER ;;AN000; + MOV AX, IMMED_DISK ;;AN000; + CALL CHECK_DISK_ROUTINE ;;AN000; + MOV VAR_DISK, CX ;;AN000; + MOV VAR_STATUS, BX ;;AN000; + MOV VAR_STATUS_2, DX ;;AN000; + ENDM ;;AN000; +;;************************************************************************;; +;; +;; CHECK_DISKETTE: Check the type of diskettes attached to the system. +;; +;; SYNTAX: CHECK_DISKETTE var_disk_a, var_disk_b, var_tot, buffer +;; +;; INPUT: +;; buffer = Buffer for IOCTL +;; +;; OUTPUT: +;; var_disk_a = 0FFH Diskette drive A not present +;; = 0 360k diskette (5.25 inch) +;; = 1 740K diskette (3.5 inch) +;; = 2 1.2M diskette (5.25 inch) +;; = 7 1.44M diskette (3.5 inch) +;; var_disk_b = 0FFH Diskette drive B not present +;; = 0, 1, 2, 7 as defined above for diskette A. +;; var_tot = total number of diskettes attached (1 or 2) +;; +;; OPERATION: Interrupt 11H is performed to get equipment status. The number +;; of diskettes attached will be returned as specified above. A call +;; is then made to the IOCTL function of DOS (AH = 44h) to get the type +;; of media the disk drives are. The function returns its data in a +;; 26 byte buffer, where the second byte contains a description of the +;; drive. The codes are as follows: +;; 0 = 320/360 KB 5-1/4-inch +;; 1 = 5-1/4-inch, 1.2 MB +;; 2 = 3-1/2-inch, 720 KB +;; 3 = 8 inch single density +;; 4 = 8 inch double density +;; 5 = Fixed disk +;; 6 = Tape drive +;; 7 = Other +;; +;;************************************************************************;; +CHECK_DISKETTE MACRO VAR_DISK_A, VAR_DISK_B, VAR_TOT, BUFFER ;;AN000; + INT 11H ;;AN000; See how many diskette drives there are + .IF < BIT AL NAND DISKETTES_EXIST > ;;AN000; Are there diskettes? + MOV AX, 0 ;;AN000; There are no diskettes. + .ELSE ;;AN000; + MOV CL,6 ;;AN000; Number of bits to shift + SHR AL,CL ;;AN000; Diskette bits are 6 and 7. Shift to right + MOV AH, 0 ;;AN000; Clear the high byte + INC AX ;;AN000; Make into the actual number of diskettes + .IF < AX GT MAX_NUM_DISKETTE > ;;AN000; Are there more then 2 diskette drives? + MOV AX, MAX_NUM_DISKETTE ;;AN000; Yes, but we are only concern with two. + .ENDIF ;;AN000; + .ENDIF ;;AN000; + MOV VAR_TOT, AL ;;AN000; Store the number of diskette drives. + ;;********************************************************************** + ;; Examine diskette drive A first. + ;;********************************************************************** + MOV VAR_DISK_A, E_DISKETTE_INV ;;AN000; + MOV VAR_DISK_B, E_DISKETTE_INV ;;AN000; + MOV DI, OFFSET VAR_DISK_A ;;AN000; + .FOR BL = 1 TO VAR_TOT ;;AN000; + MOV AX, 440DH ;;AN000; + MOV CX, 0860H ;;AN000; + MOV DX, OFFSET BUFFER ;;AN000; + DOSCALL ;;AN000; + MOV SI, OFFSET BUFFER + 1 ;;AN000; + MOV AL, [SI] ;;AN000; + .IF < AL EQ E_DISKETTE_1200 > ;;AN111;JW + MOV AL,E_DISKETTE_360 ;;AN111;JW + .ENDIF ;;AN111;JW + .IF < AL EQ E_DISKETTE_1440 > ;;AN000; + .IF < NE E_1440_TRACKS > OR ;;AN000; + .IF < NE E_1440_SECTORS > ;;AN000; + MOV AL, E_DISKETTE_INV ;;AN000; + .else ;yuk- don't have time to get this working on 1.4M drives + mov al, e_diskette_720 ;so pretend there is no such thing + .ENDIF ;;AN000; + .ENDIF ;;AN000; + MOV [DI], AL ;;AN000; + MOV DI, OFFSET VAR_DISK_B ;;AN000; + .NEXT BL ;;AN000; + ;;********************************************************************** + ;; Check for compatible A: to B: combinations ;AN000;JW + ;;********************************************************************** + .IF < VAR_DISK_A eq E_DISKETTE_720 > or ;;AN000;JW + .IF < VAR_DISK_A eq E_DISKETTE_1440 > ;;AN000;JW + .IF < VAR_DISK_B eq E_DISKETTE_360 > ;;AN000;JW + MOV VAR_DISK_B, E_DISKETTE_INV ;;AN000;JW + DEC VAR_TOT ;;AN000;JW + .ENDIF ;;AN000;JW + .ENDIF ;;AN000;JW + .IF < VAR_DISK_A eq E_DISKETTE_360 > ;;AN000;JW + .IF < VAR_DISK_B eq E_DISKETTE_720 > or ;;AN000;JW + .IF < VAR_DISK_B eq E_DISKETTE_1440 > ;;AN000;JW + MOV VAR_DISK_B, E_DISKETTE_INV ;;AN000;JW + DEC VAR_TOT ;;AN000;JW + .ENDIF ;;AN000;JW + .ENDIF ;;AN000;JW + ;; + ENDM ;;AN000; +;;************************************************************************;; +;; +;; CHECK_VALID_MEDIA: Check if the diskettes attached will support +;; installation of SELECT. Also, check if install destination will +;; be selected by user or determined by SELECT. +;; +;; SYNTAX: CHECK_VALID_MEDIA var_disk_a, var_disk_b, var_tot, var_disk, +;; var_def, var_index, var_option +;; +;; INPUT: +;; var_disk_a = diskette A presence and type +;; var_disk_b = diskette B presence and type +;; var_tot = total number of dikettes +;; var_disk = 0: first fixed disk is not present +;; > 0: first fixed disk is present +;; +;; OUTPUT: +;; CY = 0: Success variables are returned as defined below. +;; CY = 1: Error - invalid media +;; var_def = 0 use default destination drive +;; = 1 default destination drive not applicable +;; var_index = 1 default destination is drive C +;; = 2 default destination is drive B +;; var_option = 1 possible drive B or C +;; = 2 possible drive A or C +;; = 3 possible drive A or B or C +;; = 4 possible drive A or B +;; +;; OPERATION: The diskette drive types are checked for valid media type. +;; If the diskette media types are valid, a check is made to determine if +;; install destination will be user selected or will be determined by +;; SELECT. The following checks are made. +;; +;; - if one diskette, return valid media and default destination is A +;; +;; - If two diskettes only, return valid and: +;; if A = B, default = B +;; if A <> B, default = A +;; if A and B are mixed 720 and 1.44, destination option is A or B +;; +;; - If one diskette and a fixed disk only, return valid media and +;; destination option is drive A or C. +;; +;; - If two diskettes and a fixed disk, return valid media and: +;; if A = B, destination option is B or C +;; if A <> B, destination option is A or C +;; if A and B are mixed 720 and 1.44, destination option is +;; A or B or C +;; +;;************************************************************************;; +CHECK_VALID_MEDIA MACRO VAR_DISK_A, VAR_DISK_B, VAR_TOT, VAR_DISK, VAR_DEF, VAR_INDEX, VAR_OPTION ;;AN111;JW + + MOV AL, VAR_DISK_A ;;AN111;JW + MOV BL, VAR_DISK_B ;;AN111;JW + MOV SI, VAR_DISK ;;AN111;JW + CALL CHECK_VALID_MEDIA_ROUTINE ;;AN111;JW + MOV VAR_DEF, CL ;;AN111;JW + MOV VAR_INDEX, DX ;;AN111;JW + MOV VAR_OPTION, DI ;;AN111;JW + ENDM ;;AN111;JW +;;************************************************************************;; +;; +;; SCAN_DISK_TABLE: Scan the specified disk status table from the +;; specified index item for specified field and return status information. +;; +;; SYNTAX: SCAN_DISK_TABLE immed_disk, var_index, var_ref +;; +;; INPUT: +;; immed_disk = 1: First fixed disk +;; = 2: Second fixed disk +;; var_index = Index of the information to return +;; +;; OUTPUT: +;; var_ret = 0: Success - Index into table is valid +;; = 1: Error - Index invalid or end of table +;; N_NAME_PART = Partition name. +;; N_SIZE_PART = Partition size. +;; N_STATUS_PART = Partition status +;; P_DRIVE_PART = Drive letter assigned. +;; +;; OPERATION: +;; Starts scanning the disk table from the point indicated by var_index +;; for either the name, status or type. The table is scanned until either +;; the desired entry is found, or the end of the table is reached. If +;; the end of the table is reached before a marching entry is found, then +;; var_ret returns 1, else if an entry is found, it returns 0. +;; If found, var_index will also return the index of the entry. +;; +;; Note: The index of the first entry in the table is 1. +;; +;;************************************************************************;; +SCAN_DISK_TABLE MACRO IMMED_DISK, VAR_INDEX, VAR_RET ;;AN000; + + MOV CX, IMMED_DISK ;;AN000; + MOV AX, VAR_INDEX ;;AN000; + CALL SCAN_DISK_TABLE_ROUTINE ;;AN000; + MOV VAR_RET, AX ;;AN000; + ENDM ;;AN000; +;;************************************************************************;; +;; +;; UPDATE_DISK_TABLE: Update the specifed disk status table for the +;; specified index item. +;; +;; SYNTAX: UPDATE_DISK_TABLE immed_disk, var_index, var_ref +;; +;; INPUT: +;; immed_disk = 1: First fixed disk +;; = 2: Second fixed disk +;; var_index = Index into table +;; +;; OUTPUT: +;; var_ret = 0: Success - Index into table is valid +;; = 1: Error - Index into table is not valid +;; partition name = N_NAME_PART +;; partition size = N_SIZE_PART +;; partition status = N_STATUS_PART +;; partition type = N_TYPE_PART +;; drive letter = P_DRIVE_PART +;; +;; OPERATION: If the index into the disk table is valid, the disk table +;; is updated for the specifed index. Disk status information is obtained +;; from pre-defined locations as specified above. +;; +;;************************************************************************;; +UPDATE_DISK_TABLE MACRO IMMED_DISK, VAR_INDEX, VAR_REF ;;AN000; + + MOV CX, IMMED_DISK ;;AN000; + MOV AX, VAR_INDEX ;;AN000; + CALL UPDATE_DISK_TABLE_ROUTINE ;;AN000; + MOV VAR_REF, AX ;;AN000; + ENDM ;;AN000; +;;************************************************************************;; +;; +;; GET_PARTITION_SIZE: Return DOS and EDOS partition size in ASCII-N format. +;; +;; SYNTAX: GET_PARTITION_SIZE var_tot, var_dos, name_dos, name_edos +;; +;; INPUT: +;; var_tot = Free disk space +;; var_dos = Size of DOS partition +;; +;; OUTPUT: +;; name_dos = Size of DOS partition in ASCII-N format. +;; name_edos = Size of EDOS partition in ASCII-N format. +;; +;; OPERATION: The DOS partition size is converted to ASCII-N format. +;; The size of the Extended DOS partition is obtained by subtracting +;; the size of DOS partition from the free disk space. If the size of +;; any partition is zero, a zero string length is returned. +;; +;;************************************************************************;; +GET_PARTITION_SIZE MACRO VAR_TOT, VAR_DOS, NAME_DOS, NAME_EDOS ;;AN000; + ;; + PUSH VAR_TOT ;;AN000; Save the variable + MOV AX, VAR_DOS ;;AN000; Size of the DOS partition. + SUB VAR_TOT, AX ;;AN000; Subtract the dos partition size + WORD_TO_CHAR VAR_TOT, NAME_EDOS ;;AN000; Convert binay values to ASCII + WORD_TO_CHAR VAR_DOS, NAME_DOS ;;AN000; + POP VAR_TOT ;;AN000; + ENDM ;;AN000; +;;************************************************************************;; +;; +;; CHECK_MACHINE: Return the model byte +;; +;; SYNTAX: CHECK_MACHINE mac_type p_flag +;; +;; INPUT: +;; +;; OUTPUT: +;; mac_type = model byte +;; p_flag = PS2 presence (E_YES, E_NO) +;; +;; OPERATION: An INT 15H is executed to return a pointer to the system +;; descriptor vector. The model byte is retrieved from this vector +;; and placed in the supplied variable. The ps2 flag is also set. +;; +;;************************************************************************;; +CHECK_MACHINE MACRO MAC_TYPE, P_FLAG ;;AN000;JW + ;; + MOV AH,0C0H ;;AN000; INT 15H system config request + INT 15H ;;AN000; system services + .IF < nc > ;;AN000; + MOV AH,ES: BYTE PTR [BX+2] ;;AN000; get the model byte + .ELSE ;;AN000; + MOV AH,00 ;;AN000; + .ENDIF ;;AN000; + MOV MAC_TYPE,AH ;;AN000; save the model byte + MOV P_FLAG,E_YES ;;AN000; + ;; + .IF < AH eq 0 > or ;;AN000; if old pc + .IF < AH eq 0FBH > or ;;AN000; if pc XT + .IF < AH eq 0F9H > or ;;AN000; if pc convertible + .IF < AH eq 0FCH > and ;;AN000; if pc AT and + .IF < le 02 > ;;AN000; sub-model byte le 2 + MOV P_FLAG,E_NO ;;AN000; not a ps2 + .ENDIF ;;AN000; + ENDM ;;AN000; + +INCLUDE MACROS4.INC ;AN000; + \ No newline at end of file diff --git a/v4.0/src/SELECT/MACROS4.INC b/v4.0/src/SELECT/MACROS4.INC new file mode 100644 index 0000000..43278d5 --- /dev/null +++ b/v4.0/src/SELECT/MACROS4.INC @@ -0,0 +1,345 @@ +;;**************************************************************************** +;; Assembler MACROS for use with SELECT. +;; File: MACROS4.INC +;; Latest Change Date: July 16, 1987 +;; +;; These macros define powerful assembler verbs neccessary for SELECT. +;; +;; Note: Many of the macros make use of an ASCII-N string for passing +;; parameters. The string is defined below. +;; DW count +;; DB "string_variable",? +;; +;; COUNT is the length of the string and is a word. +;; It is necessary to follow the string with at least one byte for the +;; purpose of changing the ASCII-N string to an ASCII-Z string. +;; +;;**************************************************************************** +page ;;AN000; +;;**************************************************************************** +;; +;; GET_DATE: Get the current system date. +;; +;; SYNTAX: GET_DATE var_year, var_month, var_day +;; +;; INPUT: NONE +;; +;; OUTPUT: CY = 0: CURRENT SYSTEM DATE IS 1/1/80 +;; CY = 1: CURRENT SYSTEM DATE IS NOT 1/1/80 +;; VAR_YEAR - SYSTEM YEAR (16 BITS) +;; VAR_MONTH - SYSTEM MONTH (16 BITS) +;; VAR_DAY - SYSTEM DAY (16 BITS) +;; +;; OPERATION: DOS function call 2Ah is performed to get the current +;; system date. If the system date is not 1/1/80, the +;; carry flag is set. +;; +;;**************************************************************************** +GET_DATE MACRO VAR_YEAR, VAR_MONTH, VAR_DAY ;;AN000; + + MOV AH,2AH ;;AN000; get time dos interrupt + DOSCALL ;;AN000; + MOV VAR_YEAR, CX ;;AN000; Save the date. + MOV CH,0 ;;AN000; Clear the byte + MOV CL,DH ;;AN000; + MOV VAR_MONTH, CX ;;AN000; + MOV CL,DL ;;AN000; + MOV VAR_DAY, CX ;;AN000; + .IF < VAR_YEAR EQ 1980 > AND ;;AN000; See if it is the base year. + .IF < DX EQ 0101H> ;;AN000; i.e. 1/1/80 + CLC ;;AN000; Yes it is. + .ELSE ;;AN000; + STC ;;AN000; + .ENDIF ;;AN000; + + ENDM ;;AN000; +;;**************************************************************************** +;; +;; GET_TIME: Get current system time. +;; +;; SYNTAX: GET_TIME var_hour, var_minutes, var_seconds +;; +;; INPUT: None. +;; +;; OUTPUT: VAR_HOUR - SYSTEM HOUR (16 BITS) +;; VAR_MINUTES - SYSTEM MINUTES (16 BITS) +;; VAR_SECONDS - SYSTEM SECONDS (16 BITS) +;; +;; OPERATION: DOS function call 2Ch is performed to get the current +;; system time. +;; +;; +;;**************************************************************************** +GET_TIME MACRO VAR_HOUR, VAR_MINUTES, VAR_SECONDS ;;AN000; + + + MOV AH,2CH ;;AN000; get time dos interrupt + DOSCALL ;;AN000; + + MOV AH, 0 ;;AN000; + MOV AL, CH ;;AN000; + MOV VAR_HOUR, AX ;;AN000; + MOV AL, CL ;;AN000; + MOV VAR_MINUTES, AX ;;AN000; + MOV AL, DH ;;AN000; + MOV VAR_SECONDS, AX ;;AN000; + + + ENDM ;;AN000; +;;************************************************************************;; +;; SET_DATE: Sets the system date +;; +;; SYNTAX: SET_DATE var_year, var_month, var_day +;; +;; INPUT: var_year - 1980 - 2099 ( 16 bits ) +;; var_month - 1 - 12 ( 16 bits ) +;; var_day - 1 - 31 ( 16 bits ) +;; +;; OUTPUT: CY = 0: SUCCESSFUL +;; CY = 1: ERROR - Date is not valid +;; +;; OPERATION: DOS function call 2Bh is performed to set the system date. +;; If the date is not valid, the carry flag is set. +;; +;;************************************************************;; +SET_DATE MACRO VAR_YEAR, VAR_MONTH, VAR_DAY ;;AN000; + MOV CX, VAR_YEAR ;;AN000; + MOV AX, VAR_MONTH ;;AN000; + MOV DH, AL ;;AN000; + MOV AX, VAR_DAY ;;AN000; + MOV DL, AL ;;AN000; + MOV AH,2BH ;;AN000; set date dos interrupt + DOSCALL ;;AN000; + .IF < ZERO AL > ;;AN000; + CLC ;;AN000; + .ELSE ;;AN000; + STC ;;AN000; + .ENDIF ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; SET_TIME: Sets the current system time. +;; +;; SYNTAX: SET_TIME var_hour, var_minutes, var_seconds +;; +;; INPUT: var_hour = 0 - 23 ( 16 BITS ) +;; var_minutes = 0 - 59 ( 16 BITS ) +;; var_seconds = 0 - 59 ( 16 BITS ) +;; hundredth = Assumed to be zero +;; +;; OUTPUT: CY = 0: SUCCESSFUL +;; CY = 1: Error - Date is not valid +;; +;; OPERATION: DOS function call 2Dh is performed to set the current system +;; time. If the time is not valid, the carry flag will be set. +;; +;;**************************************************************************** +SET_TIME MACRO VAR_HOUR, VAR_MINUTES, VAR_SECONDS ;;AN000; + + MOV AX, VAR_HOUR ;;AN000; + MOV CH, AL ;;AN000; + MOV AX, VAR_MINUTES ;;AN000; + MOV CL, AL ;;AN000; + MOV AX, VAR_SECONDS ;;AN000; + MOV DH, AL ;;AN000; + MOV DL, 0 ;;AN000; Hundredths of seconds is 0 + MOV AH,2DH ;;AN000; set time dos interrupt + DOSCALL ;;AN000; + .IF < ZERO AL > ;;AN000; + CLC ;;AN000; + .ELSE ;;AN000; + STC ;;AN000; + .ENDIF ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; CHECK_TIME_CHANGE: Check if user entered time is different from the +;; specified system time. +;; +;; SYNTAX: CHECK_TIME_CHANGE: var_u_hour, var_u_min, var_u_sec, +;; var_s_hour, var_s_min, var_s_sec +;; +;; INPUT: var_u_hour = User specified hour ( 16 bits ) +;; var_u_min = User specified minutes ( 16 bits ) +;; var_u_sec = User specified seconds ( 16 bits ) +;; var_s_hour = System hour ( 16 bits ) +;; var_s_min = System min ( 16 bits ) +;; var_s_sec = System sec ( 16 bits ) +;; +;; OUTPUT: CY = 0: User specified time is the same as the system time. +;; CY = 1: User specified time is different from the system time. +;; +;; OPERATION: The user time and system time are compared and the carry +;; flag is updated as specified above. +;; +;;************************************************************************;; +CHECK_TIME_CHANGE MACRO VAR_U_HOUR, VAR_U_MIN, VAR_U_SEC, VAR_S_HOUR, VAR_S_MIN, VAR_S_SEC ;;AN000; + LOCAL EXIT_CHECK_TIME_CHANGE ;;AN000; + MOV AX, VAR_S_HOUR ;;AN000; + .IF < VAR_U_HOUR EQ AX > ;;AN000; + MOV AX, VAR_S_MIN ;;AN000; + .IF < VAR_U_MIN EQ AX > ;;AN000; + MOV AX, VAR_S_SEC ;;AN000; + .IF < VAR_U_SEC EQ AX > ;;AN000; + CLC ;;AN000; + JMP EXIT_CHECK_TIME_CHANGE;AN000; + .ENDIF ;;AN000; + .ENDIF ;;AN000; + .ENDIF ;;AN000; + STC ;;AN000; +EXIT_CHECK_TIME_CHANGE: ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; CHECK_DATE_CHANGE: Check if user entered date is different from the +;; specified system date. +;; +;; SYNTAX: CHECK_DATE_CHANGE: var_u_year, var_u_month, var_u_day, +;; var_s_year, var_s_month, var_s_day +;; +;; INPUT: var_u_year = User specified year ( 16 bits ) +;; var_u_month = User specified month ( 16 bits ) +;; var_u_day = User specified day ( 16 bits ) +;; var_s_year = System year ( 16 bits ) +;; var_s_month = System month ( 16 bits ) +;; var_s_day = System day ( 16 bits ) +;; +;; OUTPUT: CY = 0: User specified date is the same as the system date. +;; CY = 1: User specified date is different from the system date. +;; +;; OPERATION: The user date and system date are compared and the carry +;; flag is updated as specified above. +;; +;;************************************************************************;; +CHECK_DATE_CHANGE MACRO VAR_U_YEAR, VAR_U_MONTH, VAR_U_DAY, VAR_S_YEAR, VAR_S_MONTH, VAR_S_DAY ;;AN000; + LOCAL EXIT_CHECK_DATE_CHANGE ;;AN000; + MOV AX, VAR_S_YEAR ;;AN000; + .IF < VAR_U_YEAR EQ AX > ;;AN000; + MOV AX, VAR_S_MONTH ;;AN000; + .IF < VAR_U_MONTH EQ AX > ;;AN000; + MOV AX, VAR_S_DAY ;;AN000; + .IF < VAR_U_DAY EQ AX > ;;AN000; + CLC ;;AN000; + JMP EXIT_CHECK_DATE_CHANGE ;;AN000; + .ENDIF ;;AN000; + .ENDIF ;;AN000; + .ENDIF ;;AN000; + STC ;;AN000; +EXIT_CHECK_DATE_CHANGE: ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; SET_FILE_DATE_TIME: Set a files date and time. +;; +;; SYNTAX: SET_FILE_DATE_TIME file_handle, var_hour, var_minutes, var_seconds +;; var_year, var_month, var_day +;; +;; INPUT: +;; file_handle = The handle of the file to set the time/date of. +;; var_hour = 0 - 23 ( 16 bits ) +;; var_minutes = 0 - 59 ( 16 bits ) +;; var_seconds = 0 - 59 ( 16 bits ) +;; var_year = 1980 - 2099 ( 16 bits ) +;; var_month = 1 - 12 ( 16 bits ) +;; var_day = 1 - 31 ( 16 bits ) +;; +;; OUTPUTS: +;; CY = 0: Success +;; CY = 1: Error - Date/Time format is invalid +;; +;; OPERATION: The data and time values are converted to internal formats +;; defined below and DOS function call 57h is performed to set the +;; files date and time. +;; +;; +;; The internal time format is: +;; bits 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 +;; h h h h h m m m m m m x x x x x +;; +;; h - Binary number of hours ( 0 - 23 ) +;; m - Binary number of minutes ( 0 - 59 ) +;; x - Binary number of two second increments +;; +;; The internal date format is: +;; bits 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 +;; y y y y y y y m m m m d d d d d +;; +;; y - 0 - 119 ( 1980 - 2099 ) +;; m - 1 - 31 +;; d - 1 - 31 +;; +;;**************************************************************************** +SET_FILE_DATE_TIME MACRO FILE_HANDLE, VAR_HOUR, VAR_MINUTES, VAR_SECONDS, VAR_YEAR, VAR_MONTH, VAR_DAY ;;AN000; + CALL HOOK_INT_24 ;;AN000; + ;; + ;; Handle the file's time first + ;; + MOV BX, VAR_SECONDS ;;AN000; Get the number of seconds + SHR BX, 1 ;;AN000; Need the number of 2 seconds + MOV AX, VAR_MINUTES ;;AN000; Get the number of minutes + MOV CL, 5 ;;AN000; + SHL AX, CL ;;AN000; Least significant bit #5 + OR BX, AX ;;AN000; + MOV AX, VAR_HOUR ;;AN000; Get the number of hours + XCHG AH, AL ;;AN000; + MOV CL, 3 ;;AN000; + SHL AX, CL ;;AN000; Put hours at bit #11 + OR BX, AX ;;AN000; + ;; + ;; Handle the file's date now + ;; + MOV DX, VAR_DAY ;;AN000; Get the day. + MOV AX, VAR_MONTH ;;AN000; + MOV CL, 5 ;;AN000; + SHL AX, CL ;;AN000; Least significant month bit #5 + OR DX, AX ;;AN000; + MOV AX, VAR_YEAR ;;AN000; Get the year (1980 - 2099) + SUB AX, 1980 ;;AN000; Put in the range 0 - 119 + XCHG AL, AH ;;AN000; + SHL AX, 1 ;;AN000; + OR DX, AX ;;AN000; + + MOV CX, BX ;;AN000; + MOV BX, FILE_HANDLE ;;AN000; + MOV AX, 5701H ;;AN000; + DOSCALL ;;AN000; + CALL RESTORE_INT_24 ;;AN000; + + ENDM ;;AN000; +;;************************************************************************;; +;; +;; CHECK_CLOCK: Check if the real time clock is operating. +;; +;; SYNTAX: CHECK_CLOCK +;; +;; INPUT: +;; None. +;; +;; OUTPUT: +;; CY = 0: Real time clock is operating +;; CY = 1: Real time clock is not operating +;; +;; OPERATION: A call to the real time clock services (INT 1Ah, AH = 02h) +;; is performed to get the real time clock. If the clock is operating, +;; the time is returned in the registers and CF = 0 is returned. If the +;; clock is not operating, CF = 1 is returned. +;; +;; Since the older machines may not have the clock services interrupt, +;; the registers are set to zero before the call is made and checked for +;; non-zero on return. +;; +;;**************************************************************************** +CHECK_CLOCK MACRO ;;AN000; + MOV CX, 0 ;;AN000; Zero the registers for later comparison + MOV DX, 0 ;;AN000; + MOV AH, 02 ;;AN000; + INT 1AH ;;AN000; Time of day service routine + .IF < ZERO CX > AND ;;AN000; If CX and DH are zero, clock is not there. + .IF < ZERO DH > ;;AN000; + STC ;;AN000; + .ELSE ;;AN000; + CLC ;;AN000; The clock is there! + .ENDIF ;;AN000; + + ENDM ;;AN000; +INCLUDE MACROS5.INC ;;AN000; diff --git a/v4.0/src/SELECT/MACROS5.INC b/v4.0/src/SELECT/MACROS5.INC new file mode 100644 index 0000000..f6d40c0 --- /dev/null +++ b/v4.0/src/SELECT/MACROS5.INC @@ -0,0 +1,538 @@ +;;**************************************************************************** +;; Assembler MACROS for use with SELECT. +;; File: MACROS5.INC +;; Latest Change Date: July 28, 1987 +;; +;; These macros define powerful assembler verbs neccessary for SELECT. +;; +;; Note: Many of the macros make use of an ASCII-N string for passing +;; parameters. The string is defined below. +;; DW count +;; DB "string_variable",? +;; +;; COUNT is the length of the string and is a word. +;; It is necessary to follow the string with at least one byte for the +;; purpose of changing the ASCII-N string to an ASCII-Z string. +;; +;;**************************************************************************** +page ;;AN000; +;;************************************************************************;; +;; +;; GET_COUNTRY_DEFAULTS: Get country, keyboard and codepage for the +;; specified entry from the CTY_TABLE. +;; +;; SYNTAX: GET_COUNTRY_DEFAULTS VAR_TABLE, VAR_INDEX +;; +;; INPUT: +;; VAR_TABLE = 1: Use CTY_TAB_A +;; = 2: Use CTY_TAB_B +;; VAR_INDEX = index into country list table +;; +;; OUTPUT: +;; N_COUNTRY = Country code +;; N_KYBD_VAL = 0: Keyboard code is not valid +;; = 1: Keyboard code is valid +;; S_KEYBOARD = Keyboard code (ASCII-N format) +;; N_CP_PRI = Primary code page +;; N_CP_SEC = Secondary code page +;; N_DESIGNATES = Number of disignates +;; N_CPSW = Cpsw status +;; N_CTY_RES = Reserved +;; +;; +;; OPERATION: The country code, keyboard, primary codepage and the +;; seondary codepage from the CTY_TABLE for the specified index is +;; returned as spedified above. +;; +;; Note: Index of the first item is the table is 1. +;; +;;**************************************************************************** +GET_COUNTRY_DEFAULTS MACRO VAR_TABLE, VAR_INDEX ;;AN000; + + MOV BX, VAR_TABLE ;;AN000; Get which table to search + MOV AX, VAR_INDEX ;;AN000; Get where to start in the table + CALL GET_CNTY_DEF_ROUTINE ;;AN000; + ENDM ;;AN000; + +;;************************************************************************;; +;; +;; GET_DOS_COUNTRY: Get current country information. +;; +;; SYNTAX: GET_DOS_COUNTRY buffer, var_country +;; +;; INPUT: +;; BUFFER = 38 byte data buffer area for country information. +;; +;; OUTPUT: +;; VAR_COUNTRY = Default country code +;; +;; OPERATION: DOS function call 65h (id=1) is performed to get the extended +;; country information into the specified data buffer for the default +;; and the active CON device. The country code value from the data buffer +;; is returned in the memory variable specified. +;; +;;**************************************************************************** +GET_DOS_COUNTRY MACRO BUFFER, VAR_COUNTRY ;;AN000; + + + PUSH ES ;;AN000; + PUSH DS ;;AN000; + POP ES ;;AN000; + + MOV DI, OFFSET BUFFER ;;AN000; Get the address of the buffer + MOV AX, 6501H ;;AN000; Fn call 65h with ID value = 1 + MOV BX, -1 ;;AN000; Code page of interest (current) + MOV DX, -1 ;;AN000; Get information for default country + MOV CX, 38 ;;AN000; Amount of data to return + DOSCALL ;;AN000; + + MOV BX, [DI]+3 ;;AN000; Get the country ID + MOV VAR_COUNTRY, BX ;;AN000; + + POP ES ;;AN000; + + ENDM ;;AN000; +;;**************************************************************************** +;; +;; GET_COUNTRY_INDEX: Scan CTY_TABLE for the specified country code and +;; return index of country code into the table. +;; +;; SYNTAX: GET_COUNTRY_INDEX var_country, var_tab, var_index +;; +;; INPUT: +;; var_country = The country code +;; +;; OUTPUT: +;; var_tab = 1: Country code is in table CTY_TAB_A +;; = 2: Country code is in table CTY_TAB_B +;; var_index = The index into the country list. +;; +;; OPERATION: The CTY_TABLE is scanned for the specified country code and +;; the index into the table is returned. +;; +;; Note: The index of the first item in the table is 1. +;; +;;************************************************************************;; +GET_COUNTRY_INDEX MACRO VAR_COUNTRY, VAR_TAB, VAR_INDEX ;;AN000; + + MOV CX, VAR_COUNTRY ;;AN000; Get the country index + CALL GET_CNTY_INDEX_ROUTINE ;;AN000; Search the table for this value + MOV VAR_TAB, DX ;;AN000; Which table it was found in + MOV VAR_INDEX, BX ;;AN000; Which location in that table + ENDM ;;AN000; +;;**************************************************************************** +;; +;; GET_KEYBOARD_INDEX: Scan KYBD_TABLE for the specified keyboard code and +;; return index of keyboard code in the table and the +;; alternate keyboard indicator. +;; +;; SYNTAX: GET_KEYBOARD_INDEX name_kybd, var_table, var_index, var_alt +;; +;; INPUT: +;; name_kybd = The keyboard code in ASCII-N format. +;; +;; OUTPUT: +;; var_table = 1: Keyboard is IN table KYBD_TAB_A +;; = 2: Keyboard is in table KYBD_TAB_B +;; var_index = The index into keyboard table. +;; var_alt = 0: No alternate keyboard +;; = 1: Alternate keyboard present +;; +;; OPERATION: The KYBD_TABLE is scanned for the specifies keyboard code and +;; the index into the table is returned. +;; +;; Note: The index of the first item in the table is 1. +;; +;;************************************************************************ +GET_KEYBOARD_INDEX MACRO NAME_KYBD, VAR_TABLE, VAR_INDEX, VAR_ALT ;;AN000; + + MOV DI, OFFSET NAME_KYBD ;;AN000; The name of the keyboard to search for + CALL GET_KYBD_INDEX_ROUTINE ;;AN000; Search for this keyboard code + MOV VAR_TABLE, DX ;;AN000; Which table the code was found in + MOV VAR_INDEX, BX ;;AN000; Which index in the table + MOV VAR_ALT, AL ;;AN000; Returned alternate keyboard byte + ENDM ;;AN000; +;;************************************************************************;; +;; +;; GET_KEYBOARD: Get the keyboard code and the alternate keyboard +;; indicator from the KYBD_TABLE for the item specified by the index +;; into the keyboard table. +;; +;; SYNTAX: GET_KEYBOARD var_table, var_index, name_kybd, var_alt +;; +;; INPUT: +;; var_table = 1: Keyboard code is in table KYBD_TAB_A +;; = 2: Keyboard code is is table KYBD_TAB_B +;; var_index = index into the keyboard table. +;; +;; OUTPUT: +;; name_kybd = keyboard code in ASCII-N format. +;; var_alt = 0: No alternate keyboard +;; = 1: Alternate keyboard present +;; +;; OPERATION: The keyboard code from the KYBD_TABLE for the specified +;; index item is returned. Also, the alternate keyboard present +;; variable is updated. +;; +;; Note: Index of the first item in the table is 1. +;; +;;**************************************************************************** +GET_KEYBOARD MACRO VAR_TABLE, VAR_INDEX, NAME_KYBD, VAR_ALT ;;AN000; + + MOV AX, VAR_INDEX ;;AN000; Where to start the search + MOV CX, VAR_TABLE ;;AN000; Which table to search + MOV DI, OFFSET NAME_KYBD ;;AN000; The name of the keyboard code returned + CALL GET_KYBD_ROUTINE ;;AN000; + MOV VAR_ALT, AL ;;AN000; Returned alternate code + ENDM ;;AN000; +;;************************************************************************;; +;; +;; GET_ALT_KYBD_TABLE: Scan the ALT_KYB_TABLE for the specified keyboard, +;; and return the pointer to the specified keyboards alternate keyboard +;; code list. +;; +;; SYNTAX: GET_ALT_KYBD_TABLE name_kybd, var_table, var_kyb +;; +;; INPUT: +;; name_kybd = Keyboard code in ASCII-N format. +;; +;; OUTPUT: +;; var_table = Pointer to alternat keyboards list. +;; var_kyb = 1: French +;; = 2: Italian +;; = 3: UK English +;; +;; OPERATION: The ALT_KYB_TABLE is scanned for the specified keyboard +;; code. Pointer to a table of alternate keyboards available for the +;; specified keyboard code is returned as well as the keyboard identifier. +;; +;;**************************************************************************** +GET_ALT_KYBD_TABLE MACRO NAME_KYBD, VAR_TABLE, VAR_KYB ;;AN000; + ;; + MOV SI, OFFSET ALT_KYB_TAB_1 ;;AN000; Offset of the data in the table + MOV AL, ALT_KYB_TABLE ;;AN000; Number of entries in the table + MOV BX, 1 ;;AN000; Index currently being scaned + ;; + MOV DX, NAME_KYBD+2 ;;AN000; + .WHILE < NE DX > AND ;;AN000; + .WHILE < BL LE AL > ;;AN000; + INC BL ;;AN000; + ADD SI, TYPE ALT_KYB_DEF ;;AN000; + .ENDWHILE ;;AN000; + ;; + .IF < BL GT AL > ;;AN000; Entry NOT found + MOV VAR_KYB, 0 ;;AN000; + MOV VAR_TABLE, 0 ;;AN000; Pointer is 0 since entry not found + .ELSE ;;AN000; + COPY_WORD VAR_TABLE, [SI]+2 ;;AN000; Copy the table entries + COPY_BYTE VAR_KYB, [SI]+4 ;;AN000; + .ENDIF ;;AN000; + ;; + ENDM ;;AN000; +;;************************************************************************;; +;; +;; GET_ALT_KEYBOARD: Get the alternate keyboard code from the specified +;; alternate keyboard table for the item specified by the index. +;; +;; SYNTAX: GET_ALT_KEYBOARD var_table, var_kyb, var_index, name_kybd +;; +;; INPUT: +;; var_table = Pointer to alternate keyboard table +;; var_kyb = 1: French +;; = 2: Italian +;; = 3: UK English +;; var_index = Index into the keyboard table. +;; +;; OUTPUT: +;; name_kybd = The keyboard code in ASCII-N format. +;; +;; OPERATION: The keyboard code from the specified table for the +;; specified index item is returned. +;; +;; NOTE: The index of the first item is the table is 1. +;; +;;**************************************************************************** +GET_ALT_KEYBOARD MACRO VAR_TABLE, VAR_KYB, VAR_INDEX, NAME_KYBD ;;AN000; + + MOV AX, VAR_INDEX ;;AN000; Get the table index + DEC AX ;;AN000; Make the index start at 0 + MOV SI, VAR_TABLE ;;AN000; Pointer to the table + INC SI ;;AN000; Adjust pointer for table length byte + .IF < VAR_KYB EQ ALT_FRENCH> ;;AN000; + MOV CX, TYPE FR_STRUC ;;AN000; + .ELSEIF < VAR_KYB EQ ALT_ITALIAN > ;;AN000; + MOV CX, TYPE IT_STRUC ;;AN000; + .ELSE ;;AN000; + MOV CX, TYPE UK_STRUC ;;AN000; + .ENDIF ;;AN000; + MUL CX ;;AN000; + ADD SI, AX ;;AN000; Get the address of the required entry + ;; + PUSH ES ;;AN000; + PUSH DS ;;AN000; + POP ES ;;AN000; + MOV DI, OFFSET NAME_KYBD ;;AN000; + MOV CX, LEN_ALT_KYBD_ID ;;AN000; Number of bytes in the keyboard code + MOV [DI], CX ;;AN000; + ADD DI, 2 ;;AN000; + CLD ;;AN000; + REP MOVSB ;;AN000; + POP ES ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; EXEC_PROGRAM: Loads another program into memory and begins execution. +;; +;; SYNTAX: EXEC_PROGRAM child, name_com, parm_block, re_dir +;; +;; INPUT: child = Name of the program to execute (ASCII-N format) +;; name_com = The command line to be passed to parm_block +;; parm_block = Parameter block for child program. +;; re_dir = 1: Redirect Stdout and Stderr to null +;; = 0: Don't redirect output. +;; +;; OUTPUT: CY = 0: Successful +;; CY = 1: Error - AX has the error code. +;; +;; OPERATION: The command line to be passed to the parameter block is +;; copied to the command buffer specified for the parameter block and +;; a carrage return is appended to the end of the buffer. (The +;; command line length can be zero. +;; +;; The segment offsets in the parameter block are defined and DOS +;; function call 29H is performed to set up the default FCB's. +;; +;; DOS function call 4Bh is performed to load and execute the +;; specified child program. The contents of SS and SP are destroyed +;; during the call, so they must be save and restored later. When the +;; parent program (SELECT) gets control, all available memory is +;; allocated to it. It is assumed that memory has been freed (Function +;; call 4Ah - FREE_MEM) before invoking this function. +;; +;;************************************************************************;; +EXEC_PROGRAM MACRO CHILD, NAME_COM, PARM_BLOCK, RE_DIR ;;AN000; + + MOV AX, OFFSET CHILD ;;AN000; + PUSH AX ;;AN000; + MOV AX, OFFSET NAME_COM ;;AN000; + PUSH AX ;;AN000; + MOV AX, OFFSET PARM_BLOCK ;;AN000; + PUSH AX ;;AN000; + MOV AX, RE_DIR ;;AN000; + PUSH AX ;;AN000; + CALL EXEC_PROGRAM_ROUTINE ;;AN000; + ENDM ;;AN000; +;;***************************************************************************** +;; +;; FREE_MEM: Free memory by modifying the memory block +;; +;; SYNTAX: FREE_MEM address +;; +;; INPUT: +;; address - The address of the first free paragraph in memory. +;; +;; OUTPUT: CY = 0, AX=undefined, successful +;; CY = 1, AX= error code +;; +;; OPERATION: +;; +;; FREEMEM MODIFIES ALLOCATED MEMORY BLOCKS TO +;; CONTAIN THE NEW SPECIFIED BLOCK SIZE. +;; IT MAKES USE OF DOS INT 21 (AH=4AH). +;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +;; IS RETURNED IN AX. +;; +;;**************************************************************************** +FREE_MEM MACRO address ;;AN000; + PUSH ES ;;AN000; + MOV AH,62H ;;AN000; + DOSCALL ;;AN000; Get the current PSP segment + MOV ES,BX ;;AN000; Load current PSP segment + MOV BX, ADDRESS ;;AN000; size of program in paragraphs in bx reg + + MOV AH,4AH ;;AN000; free memory function + DOSCALL ;;AN000; + POP ES ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** +;; +;; CLEAR_SCREEN: clear the screen to white on blue +;; +;; SYNTAX: CLEAR_SCREEN +;; +;; INPUT: +;; None. +;; +;; OUTPUT: +;; None. +;; +;; OPERATION: Clears the screen using the BIOS function to scroll the +;; screen completely. +;; +;;**************************************************************************** +CLEAR_SCREEN MACRO ;;AN000; + MOV CX,0 ;;AN000; + MOV DX,184Fh ;;AN000; scroll screen from (0,0) tO (24,79) + MOV AX,0600h ;;AN000; AH = 6, Scroll Function + ;; AL = 0, Clear scroll area + MOV BH,01FH ;;AN000; video I/O interrupt + INT 10H ;;AN000; + MOV DX,0 ;;AN000; RKJ-set cursor posn to top right hand corner + MOV BH,0 ;;AN000; RKJ + MOV AH,2 ;;AN000; RKJ + INT 10H ;;AN000; RKJ + ENDM ;;AN000; +;;**************************************************************************** +;; +;; CLEAR_SCREEN2: clear the screen to white on black +;; +;; SYNTAX: CLEAR_SCREEN2 +;; +;; INPUT: +;; None. +;; +;; OUTPUT: +;; None. +;; +;; OPERATION: Clears the screen using the BIOS function to scroll the +;; screen completely. +;; +;;**************************************************************************** +CLEAR_SCREEN2 MACRO ;;AN000; + MOV CX,0 ;;AN000; + MOV DX,184Fh ;;AN000; scroll screen from (0,0) tO (24,79) + MOV AX,0600h ;;AN000; AH = 6, Scroll Function + ;; AL = 0, Clear scroll area + MOV BH,7 ;;AN000; video I/O interrupt + INT 10H ;;AN000; + MOV DX,0 ;;AN000; RKJ-set cursor posn to top right hand corner + MOV BH,0 ;;AN000; RKJ + MOV AH,2 ;;AN000; RKJ + INT 10H ;;AN000; RKJ + ENDM ;;AN000; +;;**************************************************************************** +;; +;; POS_CURSOR: position the cursor to top left corner of screen +;; +;; SYNTAX: POS_CURSOR +;; +;; INPUT: +;; None. +;; +;; OUTPUT: +;; None. +;; +;; OPERATION: Homes the cursor using the BIOS function call. +;; +;;**************************************************************************** +POS_CURSOR MACRO ;;AN085; SEH + PUSH AX ;;AN085; SEH + PUSH BX ;;AN085; SEH + PUSH CX ;;AN085; SEH + PUSH DX ;;AN085; SEH + PUSH SI ;;AN085; SEH + PUSH DI ;;AN085; SEH + PUSH ES ;;AN085; SEH + MOV DX,0 ;;AN085; SEH-set cursor posn to top left hand corner + XOR BH,BH ;;AN085; SEH + MOV AH,2 ;;AN085; SEH + INT 10H ;;AN085; SEH + POP ES ;;AN085; SEH + POP DI ;;AN085; SEH + POP SI ;;AN085; SEH + POP DX ;;AN085; SEH + POP CX ;;AN085; SEH + POP BX ;;AN085; SEH + POP AX ;;AN085; SEH +ENDM ;;AN085; SEH +;;**************************************************************************** +;; +;; BEEP: Produce a tone on the PC speaker +;; +;; SYNTAX: BEEP frequency, duration +;; +;; INPUT: frequency = 37 to 32767 +;; duration = 1 to 65535 +;; +;; OUTPUT: A SOUND +;; +;; OPERATION: +;; +;; BEEP CREATES A TONE USING THE PC SPEAKER +;; +;;**************************************************************************** +BEEP MACRO FREQ,DUR ;;AN000; + + + MOV DI, FREQ ;;AN000; set the frequency + MOV BX, DUR ;;AN000; set the duration + CALL BEEP_ROUTINE ;;AN000; + + ENDM ;;AN000; +;;************************************************************************** +;; +;; GOTO : used instead of branching assembler intructions +;; +;; SYNTAX: GOTO label +;; +;; INPUT: label = an assembler label for a branching instruction +;; +;; OUTPUT: none +;; +;; OPERATION: +;; +;; +;;************************************************************************** +GOTO MACRO LABEL ;;AN000; + JMP LABEL ;;AN000; jump to label + ENDM ;;AN000; +;;************************************************************************;; +;; +;; BYTE_TO_CHAR: Convert a 8-bit binary number to ASCII format. +;; +;; SYNTAX: BYTE_TO_CHAR var_num, name_str +;; +;; INPUT: +;; var_num = binary number to convert. (8 bits) +;; +;; OUTPUT: +;; name_str = ASCII-N string for the specifed value. +;; +;; OPERATION: The specified 8 bit numeric variable contents are converted +;; to ASCII and stored in ASCII-N format. Leading zeros will not be +;; stored. +;; +;;************************************************************************;; +BYTE_TO_CHAR MACRO VAR_NUM, NAME_STR ;;AN000; + + + MOV AL, VAR_NUM ;;AN000; + MOV AH, 0 ;;AN000; + MOV DI, OFFSET NAME_STR ;;AN000; + CALL BIN_TO_CHAR_ROUTINE ;;AN000; + ENDM ;;AN000; +;;************************************************************************;; +;; +;; WORD_TO_CHAR: Convert a binary number to ASCII format. +;; +;; SYNTAX: WORD_TO_CHAR var_num, name_str +;; +;; INPUT: +;; var_num = binary number to convert. (16 bits) +;; +;; OUTPUT: +;; name_str = ASCII-N string for the specifed value. +;; +;; OPERATION: The specified 16 bit numeric variable contents are converted +;; to ASCII and stored in ASCII-N format. Leading zeros will not be +;; stored. +;; +;;************************************************************************;; +WORD_TO_CHAR MACRO VAR_NUM, NAME_STR ;;AN000; + + MOV AX, VAR_NUM ;;AN000; + MOV DI, OFFSET NAME_STR ;;AN000; + CALL BIN_TO_CHAR_ROUTINE ;;AN000; + ENDM ;;AN000; + +INCLUDE MACROS6.INC ;;AN000; diff --git a/v4.0/src/SELECT/MACROS6.INC b/v4.0/src/SELECT/MACROS6.INC new file mode 100644 index 0000000..954e232 --- /dev/null +++ b/v4.0/src/SELECT/MACROS6.INC @@ -0,0 +1,719 @@ +;;**************************************************************************** ;;AN000; +;; Assembler MACROS for use with SELECT. ;;AN000; +;; File: MACROS6.INC ;;AN000; +;; Latest Change Date: July 27, 1987 ;;AN000; +;; ;;AN000; +;; These macros define powerful assembler verbs neccessary for SELECT. ;;AN000; +;; ;;AN000; +;; Note: Many of the macros make use of an ASCII-N string for passing ;;AN000; +;; parameters. The string is defined below. ;;AN000; +;; DW count ;;AN000; +;; DB "string_variable",? ;;AN000; +;; ;;AN000; +;; COUNT is the length of the string and is a word. ;;AN000; +;; It is necessary to follow the string with at least one byte for the ;;AN000; +;; purpose of changing the ASCII-N string to an ASCII-Z string. ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +page ;;AN000; ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; SCAN_PARAMETERS: Scan SELECT command line for parameters. ;;AN000; +;; ;;AN000; +;; SYNTAX: SCAN_PARAMETERS mode ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; PSP command line ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; mode = Install mode ;;AN000; +;; = 0: Parameter is MENU ;;AN000; +;; = 1: Parameter is FDISK ;;AN000; +;; = 0FFH: Parameter is invalid ;;AN000; +;; ;;AN000; +;; OPERATION: The SELECT command line is scanned for parameters. The ;;AN000; +;; return codes for the various parameters are provided in variables ;;AN000; +;; defined above. ;;AN000; +;; ;;AN000; +;; Note: ;;AN000; +;; Before this macro is executed, there must be as ASSUME ES:DATA ;;AN000; +;; statement. If not, the parser will not execute properly and ;;AN000; +;; either the computer will hang or erroneous values will be returned. ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +SCAN_PARAMETERS MACRO MODE ;;AN000; + ;;AN000; + CALL SCAN_PARAMETERS_ROUTINE ;;AN000; + MOV MODE, AX ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; SCAN_INFO_FILE: Scan SELECT.TMP for parameters. ;;AN000; +;; ;;AN000; +;; SYNTAX: SCAN_INFO_FILE option_0, option_1, option_2, option_3, path, filename, buffer, buff_size ;;AC033;SEH add option_3 parameter +;; ;;AN000; +;; INPUT: ;;AN000; +;; filename = The name of the file which contains the FDISK parameters. ;;AN000; +;; (ASCII-N format) ;;AN000; +;; buffer = A buffer where the data read from the file can be stored. ;;AN000; +;; buff_size = The size of the buffer. ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; option_1 = 1 ;;AC033; +;; = 2 ;;AC033; +;; = 3 ;;AC033; +;; = 0FFh: Parameter is invalid (not 1, 2, 3) ;;AC033; +;; option_2 = 1 ;;AC033; +;; = 2 ;;AC033; +;; = 0FFh: Parameter is invalid (not 1, 2) ;;AC033; +;; option_3 = 1 ;;AC033; +;; = 2 ;;AC033; +;; = 0FFh: Parameter is invalid (not 1, 2) ;;AC033; +;; path = Install path in ASCII-N format ;;AN000; +;; ;;AN000; +;; OPERATION: ;;AN000; +;; If the parameter on the command line is FDISK, then the ;;AN000; +;; file specified in FILENAME is opened and additional parameters ;;AN000; +;; are read. If the parameters in the file are invalid, or if the file ;;AN000; +;; cannot be found, then 0FFh is returned in MODE and OPTION, and the ;;AN000; +;; path length is set to zero. ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +SCAN_INFO_FILE MACRO OPTION_0, OPTION_1, OPTION_2, OPTION_3, PATH, FILENAME, BUFFER, BUFF_SIZE + ;;AN000; + MOV AX, OFFSET PATH ;;AN000; + PUSH AX ;;AN000; + MOV AX, OFFSET FILENAME ;;AN000; + PUSH AX ;;AN000; + MOV AX, OFFSET BUFFER ;;AN000; + PUSH AX ;;AN000; + MOV AX, BUFF_SIZE ;;AN000; + PUSH AX ;;AN000; + CALL SCAN_INFO_FILE_ROUTINE ;;AN000; + mov option_0, ax + MOV OPTION_1, BX ;;AN000; + MOV OPTION_2, CX ;;AN000; + MOV OPTION_3, DX ;;AN033;SEH return OPTION_3, also + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; COPY_FILES: Copy a list of files from the A diskette to either the B ;;AN000; +;; or C drive. ;;AN000; +;; ;;AN000; +;; SYNTAX: COPY_FILES target_disk, file_table, num_files, path ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; target_disk = 1: Copy the files to the B drive ;;AN000; +;; = 2: Copy the files to the C drive ;;AN000; +;; ;;AN000; +;; path = The path where the files are to be copied if the ;;AN000; +;; destination is the hard disk. ;;AN000; +;; ;;AN000; +;; file_table = A table listing the files to copy. It is of the ;;AN000; +;; following format. ;;AN000; +;; ;;AN000; +;; db filename ;;AN000; +;; ;;AN000; +;; - The filename must be padded out to 12 characters. ;;AN000; +;; ;;AN000; +;; num_files = The number of files in the list. ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; None. ;;AN000; +;; ;;AN000; +;; OPERATION: The files listed in the table are copied to the destination ;;AN000; +;; from the A drive. If the destination is C, then a path ;;AN000; +;; path can be specified. ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +COPY_FILES MACRO DEST, FILE_TABLE, NUM_FILES ;;AN000; + ;;AN000; + MOV AX, DEST ;;AN000; + MOV BX, OFFSET FILE_TABLE ;;AN000; + MOV CX, NUM_FILES ;;AN000; + CALL HOOK_INT_24 ;AN000;JW ;;AN000;JW + CALL MOD_XCOPY ;;AN000; + CALL RESTORE_INT_24 ;AN000;JW ;;AN000;JW + ENDM ;;AN000; + ;;AN000;JW +COPY_FILES2 MACRO DEST, FILE_TABLE, NUM_FILES, PATH ;;AN111;JW + ;;AN111;JW + MOV AX, DEST ;;AN111;JW + MOV BX, OFFSET FILE_TABLE ;;AN111;JW + MOV CX, NUM_FILES ;;AN111;JW + MOV SI, OFFSET PATH ;;AN111;JW + CALL HOOK_INT_24 ;AN000;JW ;;AN111;JW + CALL MOD_XCOPY ;;AN111;JW + CALL RESTORE_INT_24 ;AN000;JW ;;AN111;JW + ENDM ;;AN111;JW + ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; INSTALL_FILES: Install the files from the original diskettes to the ;;AN000; +;; startup and the operations diskette. ;;AN000; +;; ;;AN000; +;; SYNTAX: INSTALL_FILES source_disk, target_disk ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; source_disk = 1: Read the files from the first diskette ;;AN000; +;; = 2: Read the files from the second diskette ;;AN000; +;; ;;AN000; +;; target_disk = 1: Copy the files to the start-up diskette ;;AN000; +;; = 2: Copy the files to the operations diskette ;;AN000; +;; = 3: Copy the files to the hard disk ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; None. ;;AN000; +;; ;;AN000; +;; OPERATION: ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +INSTALL_FILES MACRO SOURCE_DISK, TARGET_DISK ;;AN000; + ;;AN000; + COPY_FILES SOURCE_DISK, TARGET_DISK, S_INSTALL_PATH, DOS_FILES, NUM_DOS_FILES ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; GET_PRINTER_TITLES: Read the printer profile file and load the printer ;;AN000; +;; names into a table. ;;AN000; +;; ;;AN000; +;; SYNTAX: GET_PRINTER_TITLES filename ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; filename = A ASCII-N string containing the name of the file containing ;;AN000; +;; the printer profile. ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; If CY = 0, No error was encountered. The following information is returned: ;;AN000; +;; SEGMENT_LOCATION = The segment where the printer names table is held ( 16 bit ) ;;AN000; +;; NAMES_TABLE_OFFSET = The offset in the segment of the printer names table ( 16 bit ) ;;AN000; +;; LONGEST_NAME = The longest printer name in the file ( 16 bit ) ;;AN000; +;; SIZE_NAMES_TABLE_ENTRY = The number of bytes between each printer name in the table (abs value ) ;;AN000; +;; PRINTER_NAME_INDEX = The number of names in the table. ( 16 bit ) ;;AN000; +;; If CY = 1, An error was encountered. ;;AN000; +;; BX - Contains an error number as defined below. ;;AN000; +;; AX - Contains the DOS error number if the error listed in BX is a ;;AN000; +;; file related error. ;;AN000; +;; ;;AN000; +;; Error number Explaination. ;;AN000; +;; ;;AN000; +;; 1 There is not enough memory to build the names ;;AN000; +;; table and provide a data buffer for reading the ;;AN000; +;; file information. ;;AN000; +;; ;;AN000; +;; 2 There was an error opening the printer profile file. ;;AN000; +;; AX contains the DOS error code. ;;AN000; +;; ;;AN000; +;; 3 There was an error reading the printer profile file. ;;AN000; +;; AX contains the DOS error code. ;;AN000; +;; ;;AN000; +;; 4 The number at the beginning of the printer profile ;;AN000; +;; giving the number of definitions in the file was ;;AN000; +;; either missing or was greater then 255. ;;AN000; +;; ;;AN000; +;; 5 A line in the printer profile file was found to ;;AN000; +;; be longer then allowed in the buffer. ;;AN000; +;; ;;AN000; +;; 6 There was an error find a printer name in the file ;;AN000; +;; ;;AN000; +;; 7 There was an error updating the file pointer ;;AN000; +;; ;;AN000; +;; 8 There are more then 255 printer definitions in the ;;AN000; +;; file. ;;AN000; +;; ;;AN000; +;; 9 The number of actual definitions in the printer profile ;;AN000; +;; file did not agree with the number given at the ;;AN000; +;; beginning of the file. ;;AN000; +;; ;;AN000; +;; 10 There was an error allocating the memory needed for ;;AN000; +;; the data. ;;AN000; +;; ;;AN000; +;; ;;AN000; +;; OPERATION: ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +GET_PRINTER_TITLES MACRO FILENAME ;;AN000; + ;;AN000; + MOV DI, OFFSET FILENAME ; The name of the printer definition file ;;AN000; + CALL GET_PRINTER_TITLES_ROUTINE ; Subroutine to perform the function. ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; GET_PRINTER_INFO: Given the number of a printer, this routines retrieves ;;AN000; +;; the information for this printer from the profile file. ;;AN000; +;; ;;AN000; +;; SYNTAX: GET_PRINTER_INFO printer_num ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; printer_num = The number the printer to get the information on. ;;AN000; +;; The number is the location of this printer in the ;;AN000; +;; printer names list. ;;AN000; +;; OUTPUT: ;;AN000; +;; If CY = 0, there were no errors. ;;AN000; +;; The following variable are updated with the information found in ;;AN000; +;; the file: ;;AN000; +;; I_PRINTER ;;AN000; +;; N_PRINTER_TYPE ;;AN000; +;; S_MODE_PARM ;;AN000; +;; S_CP_DRIVER ;;AN000; +;; S_CP_PREPARE ;;AN000; +;; S_GRAPH_PARM ;;AN000; +;; ;;AN000; +;; If CY = 1, There were errors encountered. ;;AN000; +;; BX = An error code indicating the type of error that occured. ;;AN000; +;; ;;AN000; +;; = 3 There was an error reading the file ;;AN000; +;; = 7 There was a error accessing the file ;;AN000; +;; = 11 A printer definition has either a CDP or a CPP ;;AN000; +;; Prefix, but BOTH were not present. ;;AN000; +;; = 12 There was an error in the printer definition. ;;AN000; +;; - A line was found with an invalid prefix ;;AN000; +;; ;;AN000; +;; If the error was a result of a DOS function, then ;;AN000; +;; on return, AX will contain the DOS error code. ;;AN000; +;; ;;AN000; +;; OPERATION: ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +GET_PRINTER_INFO MACRO VAR_PRT ;;AN000; + ;;AN000; + MOV AX, VAR_PRT ;;AN000; + CALL GET_PRINTER_INFO_ROUTINE ;;AN000; + ENDM ;;AN000; + ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; RELEASE_PRINTER_INFO: Close the printer profile file and free the ;;AN000; +;; allocated memory. ;;AN000; +;; ;;AN000; +;; SYNTAX: RELEASE_PRINTER_INFO ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; None. ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; If CY = 0, There were no error encountered. ;;AN000; +;; If CY = 1, There was an error. ;;AN000; +;; AX = The DOS error code for the deallocate memory function ;;AN000; +;; ;;AN000; +;; OPERATION: Closes the printer profile file and deallocted memory. ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +RELEASE_PRINTER_INFO MACRO ;;AN000; + ;;AN000; + CALL RELEASE_PRINTER_INFO_ROUTINE ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; GET_PRINTER_PARAMS: Get parameters for specified printer. ;;AN000; +;; ;;AN000; +;; SYNTAX: GET_PRINTER_PARAMS var_prt, var_port, var_status ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; var_prt = The printer number. ;;AN000; +;; var_port = The number of the port to retrieve the information on. ;;AN000; +;; If var_port = 0, the information that is returned is ;;AN000; +;; that which cooresponds to var_prt. ;;AN000; +;; var_port = 0 : Get the information on printer number VAR_PRT ;;AN000; +;; = 1 : Get the information for the printer attached to LPT1 ;;AN000; +;; = 2 : Get the information for the printer attached to LPT2 ;;AN000; +;; = 3 : Get the information for the printer attached to LPT3 ;;AN000; +;; = 4 : Get the information for the printer attached to COM1 ;;AN000; +;; = 5 : Get the information for the printer attached to COM2 ;;AN000; +;; = 6 : Get the information for the printer attached to COM3 ;;AN000; +;; = 7 : Get the information for the printer attached to COM4 ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; var_status = 1: Printer information is valid ;;AN000; +;; = 0: Printer not valid: default values returned ;;AN000; +;; ;;AN000; +;; OPERATION: Printer information for the specified printer is returned. ;;AN000; +;; If the specified printer is not defined, default values will be ;;AN000; +;; returned. ;;AN000; +;; I_PRINTER = Index into printer list (16 bit variable) : default 1 ;;AN000; +;; N_PRINTER_TYPE = P: Parallel printer ;;AN000; +;; = S: Serial printer ;;AN000; +;; I_PORT = Port number (16 bit variable) : default 1 ;;AN000; +;; I_REDIRECT = Redirection port number (16 bit variable) : default 1 ;;AN000; +;; S_MODE_PARM = Mode parameters - ASCII-N format ;;AN000; +;; S_CP_DRIVER = Code page driver parameters - ASCII-N format ;;AN000; +;; S_CP_PREPARE = Code prepare parameters - ASCII-N format ;;AN000; +;; S_GRAPH_PARM = Graphics parameters - ASCII-N format ;;AN000; +;; ;;AN000; +;; The structures of printer information are searched for the one with ;;AN000; +;; the same number as specified by VAR_PRT. If found, the information ;;AN000; +;; in that structure is returned in the variables listed above. ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +GET_PRINTER_PARAMS MACRO VAR_PRT, VAR_PORT, VAR_STATUS ;;AN000; + ;;AN000; + MOV AX, VAR_PRT ;;AN000; + MOV BX, VAR_PORT ;;AN000; + CALL GET_PRINTER_PARAMS_ROUTINE ;;AN000; + MOV VAR_STATUS, AX ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; SAVE_PRINTER_PARAMS: Save the printer information in the printer structures ;;AN000; +;; ;;AN000; +;; SYNTAX: SAVE_PRINTER_PARAMS var_prt ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; var_prt = The printer number. ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; None. ;;AN000; +;; ;;AN000; +;; OPERATION: Printer information for the specified printer is stored. ;;AN000; +;; I_PRINTER = Index into printer list (16 bit variable) : default 1 ;;AN000; +;; N_PRINTER_TYPE = P: Parallel printer ;;AN000; +;; = S: Serial printer ;;AN000; +;; I_PORT = Port number (16 bit variable) : default 1 ;;AN000; +;; I_REDIRECT = Redirection port number (16 bit variable) : default 1 ;;AN000; +;; S_MODE_PARM = Mode parameters - ASCII-N format ;;AN000; +;; S_CP_DRIVER = Code page driver parameters - ASCII-N format ;;AN000; +;; S_CP_PREPARE = Code prepare parameters - ASCII-N format ;;AN000; +;; S_GRAPH_PARM = Graphics parameters - ASCII-N format ;;AN000; +;; ;;AN000; +;; The information is stored in the structures according to the type ;;AN000; +;; and port number of this printer. The first three structures are for ;;AN000; +;; LPT1 - LPT3, while the next four are for COM1 - COM2. ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +SAVE_PRINTER_PARAMS MACRO VAR_PRT ;;AN000; + ;;AN000; + MOV AX, VAR_PRT ;;AN000; + CALL SAVE_PRINTER_PARAMS_ROUTINE ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; CHANGE_AUTOEXEC: Search for the SELECT command in the autoexec.bat and ;;AN000; +;; change the parameters for that line. ;;AN000; +;; ;;AN000; +;; SYNTAX: CHANGE_AUTOEXEC FILENAME, APPEND_STRING ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; FILENAME = An ASCII-N string containing the name of the file to change. ;;AN000; +;; Since the string has to be converted into an ASCII-Z string, ;;AN000; +;; an extra byte must always be available following the string. ;;AN000; +;; APPEND_STRING = An ASCII-N string containing the parameters to add to ;;AN000; +;; the SELECT command. ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; None. ;;AN000; +;; ;;AN000; +;; OPERATION: ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +CHANGE_AUTOEXEC MACRO FILENAME, APPEND_STRING ;;AN000; + ;;AN000; + MOV DI, OFFSET FILENAME ;;AN000; + MOV SI, OFFSET APPEND_STRING ;;AN000; + CALL CHANGE_AUTOEXEC_ROUTINE ;;AN000; + ENDM ;;AN000; + ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; LOAD_MESSAGES: Load the messages and initialize the message retriever. ;;AN000; +;; ;;AN000; +;; SYNTAX: LOAD_MESSAGES ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; None. ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; If CY = 1, there was an error loading the messages. ;;AN000; +;; If CY = 0, there were no errors. ;;AN000; +;; ;;AN000; +;; OPERATION: ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +LOAD_MESSAGES MACRO ;;AN000; + ;;AN000; + CALL SYSLOADMSG ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; DISPLAY_MESSAGE: Call the message retriever to display a message. ;;AN000; +;; ;;AN000; +;; SYNTAX: DISPLAY_MESSAGE msg_number ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; msg_number = The number of the message to be displayed. (16 bit value) ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; If CY = 1, there was an error displaying the message. ;;AN000; +;; If CY = 0, there were no errors. ;;AN000; +;; ;;AN000; +;; OPERATION: ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +DISPLAY_MESSAGE MACRO MSG_NUMBER ;;AN000; + ;;AN000; + MOV AX, MSG_NUMBER ;;AN000; + CALL DISPLAY_MESSAGE_ROUTINE ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; CHECK_DOS_PATH: Check to see if a path for the SET PATH command is valid ;;AN000; +;; ;;AN000; +;; SYNTAX: CHECK_DOS_PATH path_str ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; path_str - An ASCII-N string containing the path to check. ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; If CY = 0, the path is valid. ;;AN000; +;; If CY = 1, The path is NOT valid: ;;AN000; +;; ;;AN000; +;; OPERATION: ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +CHECK_DOS_PATH MACRO PATH_STR ;;AN000; + ;;AN000; + LEA SI, PATH_STR ;;AN000; + CALL CHECK_DOS_PATH_ROUTINE ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; CHECK_PATH: Check to see if a path is valid. ;;AN000; +;; ;;AN000; +;; SYNTAX: CHECK_PATH path_str, drive, root ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; path_str - An ASCII-N string containing the path to check. ;;AN000; +;; ;;AN000; +;; drive = 0: Drive letter cannot be specified. (8 bit or immediate value) ;;AN000; +;; = 1: Drive letter is optional and can be specified. ;;AN000; +;; = 2: Drive letter must be specified. ;;AN000; +;; ;;AN000; +;; root = 0: First non-drive character cannot be a backslash ('\') (8 bit or immediate value) ;;AN000; +;; = 1: First non-drive character may be a backslash ('\') ;;AN000; +;; = 2: First non-drive character must be a backslash ('\') ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; If CY = 0, the path is valid. ;;AN000; +;; If CY = 1, The path is NOT valid: ;;AN000; +;; AX = 1, The drive specified is invalid. ;;AN000; +;; = 2, There was no drive specified. ;;AN000; +;; = 3, There was a drive specified. ;;AN000; +;; = 4, There was a leading backslash ;;AN000; +;; = 5, The leading backslash was NOT present. ;;AN000; +;; = 6, There was a trailing backslash. ;;AN000; +;; ;;AN000; +;; OPERATION: ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +CHECK_PATH MACRO PATH_STR, DRIVE, ROOT ;;AN000; + ;;AN000; + LEA SI, PATH_STR ;;AN000; + MOV DI, SI ;;AN000; + CALL POS_ZERO ;;AN000; + MOV CX, [SI] ;;AN000; + ADD SI, 2 ;;AN000; + MOV AL, DRIVE ;;AN000; + MOV AH, ROOT ;;AN000; + CALL CHECK_VALID_PATH ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; GET_NUMBER_PORTS: Get the number of parallel and serial ports attached ;;AN000; +;; to the computer. ;;AN000; +;; ;;AN000; +;; SYNTAX: GET_NUMBER_PORTS parallel, serial ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; None. ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; parallel = The number of parallel ports attached. (8 bit value) ;;AN000; +;; serial = The number of serial ports attached. (8 bit value) ;;AN000; +;; ;;AN000; +;; OPERATION: The macro performs a call to interrupt 11H to determine ;;AN000; +;; the number of ports available. ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +GET_NUMBER_PORTS MACRO PARALLEL, SERIAL ;;AN000; + ;;AN000; + INT 11H ;; Determine equipment attached ;;AN000; + SHR AH, 1 ;; Put the number of serial ports in L.S. Bits ;;AN000; + MOV BH, 0 ;;AN000; + MOV BL, AH ;;AN000; + MOV SERIAL, BX ;;AN000; + AND SERIAL, 0000000000000111B ;; Mask off the unwanted information ;;AN000; + MOV CL, 5 ;; Number of bits to shift ;;AN000; + SHR AH, CL ;; Put the number of parallel ports in L.S. Bits ;;AN000; + MOV BL, AH ;;AN000; + MOV PARALLEL, BX ;; Store ;;AN000; + AND PARALLEL, 0000000000000011B ;; Mask off the unwanted infromation ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; CHANGE_ATTRIBUTE: Change the attributes on a group of file to be hidden ;;AN000; +;; files. ;;AN000; +;; ;;AN000; +;; SYNTAX: CHANGE_ATTRIBUTE list_ptr, num_files ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; list_ptr = A pointer to a the list of files to change the attributes ;;AN000; +;; of. The list must be of the form: ;;AN000; +;; db filename,?,? ;;AN000; +;; Where the filename takes up 12 bytes. ;;AN000; +;; num_file = The number of files in the list. ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; If CY = 1, there was an error encountered. ;;AN000; +;; If CY = 0, there were no errors. ;;AN000; +;; ;;AN000; +;; OPERATION: The macro reads the attribute of the file, stores it in the ;;AN000; +;; word following the filename in the list, and then assigns the new ;;AN000; +;; attribute to the file. ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +CHANGE_ATTRIBUTE MACRO LIST_PTR, NUM_FILES ;;AN000; + ;;AN000; + LEA SI, LIST_PTR ;; Get the address of the file list ;;AN000; + MOV AX, 0 ;; Indicate we are to attach a new attribute to the file ;;AN000; + MOV BX, NUM_FILES ;; Load the number of files in the list ;;AN000; + CALL CHANGE_ATTRIBUTE_ROUTINE ;; Change the attributes ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; RESTORE_ATTRIBUTE: Restore the original attributes on a group of file. ;;AN000; +;; ;;AN000; +;; SYNTAX: RESTORE_ATTRIBUTE list_ptr, num_files ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; list_ptr = A pointer to a the list of files to change the attributes ;;AN000; +;; of. The list must be of the form: ;;AN000; +;; db filename,?,? ;;AN000; +;; Where the filename takes up 12 bytes. ;;AN000; +;; num_files = The number of files in the list. ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; If CY = 1, there was an error encountered. ;;AN000; +;; If CY = 0, there were no errors. ;;AN000; +;; ;;AN000; +;; OPERATION: This macros restores the attribute previously stored for the ;;AN000; +;; listed files. ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +RESTORE_ATTRIBUTE MACRO LIST_PTR, NUM_FILES ;;AN000; + ;;AN000; + LEA SI, LIST_PTR ;; Get the address of the file list ;;AN000; + MOV AX, 1 ;; Indicate we are to attach a new attribute to the file ;;AN000; + MOV BX, NUM_FILES ;; Load the number of files in the list ;;AN000; + CALL CHANGE_ATTRIBUTE_ROUTINE ;; Change the attributes ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; COMPARE_STRINGS: Compare two strings. ;;AN000; +;; ;;AN000; +;; SYNTAX: COMPARE_STRINGS string_1, string_2 ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; string_1 = The address of the first string. (ASCII-N string) ;;AN000; +;; string_2 = The address of the second string. (ASCII-N string) ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; If CY = 1, the strings do no compare. ;;AN000; +;; If CY = 0, the strings are the same. ;;AN000; +;; ;;AN000; +;; OPERATION: ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +COMPARE_STRINGS MACRO STRING_1, STRING_2 ;;AN000; + ;;AN000; + LEA SI, STRING_1 ;;AN000; + LEA DI, STRING_2 ;;AN000; + CALL COMPARE_ROUTINE ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; CHECK_WRITE_PROTECT Determine if the diskette in drive A/B is write ;;AC000;JW +;; protected. ;;AN000; +;; ;;AN000; +;; SYNTAX: CHECK_WRITE_PROTECT RET_CODE ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; DRIVE = A_DRIVE (0) Check the diskette in the A drive ;;AC000;JW +;; DRIVE = B_DRIVE (1) Check the diskette in the B drive ;;AC000;JW +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; If CY = 1, There was an error accessing the drive. ;;AN000; +;; If CY = 0, There were no errors. ;;AN000; +;; RET_CODE = 1: The diskette IS write protected. ;;AN000; +;; = 0: The diskette is NOT write protected. ;;AN000; +;; ;;AN000; +;; OPERATION: ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +CHECK_WRITE_PROTECT MACRO DRIVE, RET_CODE ;;AC000;JW + MOV CX,DRIVE ;;AN000;JW + CALL CHECK_WRITE_ROUTINE ;;AN000; + MOV RET_CODE, AX ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; GET_FREE_SPACE Determine the free disk space on a diskette. ;;AN000; +;; ;;AN000; +;; SYNTAX: GET_FREE_SPACE drive, space ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; drive = 1: Examine diskette in drive A ;;AN000; +;; = 2: Examine diskette in drive B ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; If CY = 1, there was an error accessing the disk ;;AN000; +;; If CY = 0, there were no errors. ;;AN000; +;; space = The amount of free space on the disk (32-bit value) ;;AN000; +;; ;;AN000; +;; OPERATION: ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +GET_FREE_SPACE MACRO DRIVE, SPACE ;;AN000; + ;;AN000; + MOV DL, DRIVE ;;AN000; + MOV AH, 36H ;;AN000; + DOSCALL ;;AN000; + .IF < NC > ;;AN000; + MUL BX ;;AN000; + MUL CX ;;AN000; + MOV WORD PTR SPACE[0], AX ;;AN000; + MOV WORD PTR SPACE[2], DX ;;AN000; + .ENDIF ;;AN000; + ENDM ;;AN000; +;;**************************************************************************** ;;AN000; +;; ;;AN000; +;; MATCH_DISK_FILES Determine if a list of file exist on a disk. ;;AN000; +;; ;;AN000; +;; SYNTAX: GET_FREE_SPACE path, file_list, list_type, num_files, ret_code ;;AN000; +;; ;;AN000; +;; INPUT: ;;AN000; +;; path = ASCII-N string containing the drive, and path of where to ;;AN000; +;; search. ;;AN000; +;; file_list = The address of the list of files to use. If AX=2, then ;;AN000; +;; the first two bytes are ignored. ;;AN000; +;; list_type = 1: Use a small list with 12 byte between filenames. ;;AN000; +;; = 2: Use a list with 14 bytes between filenames. ;;AN000; +;; ;;AN000; +;; OUTPUT: ;;AN000; +;; If CY = 1, There was an error accessing the disk. ;;AN000; +;; If CY = 0, there were no errors. ;;AN000; +;; ret_code = 1: All the files are on the disk. ;;AN000; +;; ret_code = 0: All the file are NOT on the disk. ;;AN000; +;; ;;AN000; +;; OPERATION: ;;AN000; +;; ;;AN000; +;;**************************************************************************** ;;AN000; +MATCH_DISK_FILES MACRO PATH, FILE_LIST, LIST_TYPE, NUM_FILES, RET_CODE ;;AN000; + ;;AN000; + LEA DI, PATH ;;AN000; + LEA SI, FILE_LIST ;;AN000; + MOV AX, LIST_TYPE ;;AN000; + MOV CX, NUM_FILES ;;AN000; + CALL MATCH_FILES_ROUTINE ;;AN000; + MOV RET_CODE, AX ;;AN000; + ENDM ;;AN000; + ;;AN000; +INCLUDE MACROS7.INC ;;AN000; diff --git a/v4.0/src/SELECT/MACROS7.INC b/v4.0/src/SELECT/MACROS7.INC new file mode 100644 index 0000000..0c8ca06 --- /dev/null +++ b/v4.0/src/SELECT/MACROS7.INC @@ -0,0 +1,126 @@ +PROCESS_ESC MACRO ;;AN000; + .IF < N_USER_FUNC eq E_ESCAPE > ;;AN000; + .THEN ;;AN000; + POP_HEADING ;;AN000; + .ENDIF ;;AN000; + ENDM ;;AN000; + ;;AN000; +PROCESS_F3 MACRO ;;AN000; + .IF < N_USER_FUNC eq E_F3 > ;;AN000; + .THEN ;;AN000; + GOTO EXIT_DOS ;;AN000; + .ENDIF ;;AN000; + ENDM ;;AN000; + +INIT_VAR_MINIMIZE MACRO + INIT_VAR S_BUFFERS, 0 ;;AN000;set BUFFERS = null (spaces) + INIT_VAR S_FCBS, 0 ;;AN000;set FCBS = null (spaces) + INIT_VAR F_ANSI, E_ANSI_NO ;;AN000;set ANSI = no + INIT_VAR S_ANSI, 0 ;;AN000;set ANSI field = null (spaces) + INIT_VAR F_FASTOPEN, E_FASTOPEN_NO ;;AN000;set FASTOPEN = no + INIT_VAR S_FASTOPEN, 0 ;;AN000;set FASTOPEN = null (spaces) + INIT_VAR F_GRAPHICS, E_GRAPHICS_NO ;;AN000;set GRAPHICS = no + INIT_VAR S_GRAPHICS, 0 ;;AN000;set GRAPHICS field = null (spaces) + COPY_STRING S_FILES, M_FILES, D_FILES_2 ;AN000; set FILES = 8 + ENDM + +INIT_VAR_BALANCE MACRO + COPY_STRING S_BUFFERS, M_BUFFERS, D_BUFFERS_1 ;;AN000;set BUFFERS = 20 + INIT_VAR S_FCBS, 0 ;;AN000;set FCBS = null (spaces) + INIT_VAR F_ANSI, E_ANSI_YES ;;AN000;set ANSI = yes + INIT_VAR S_ANSI, 0 ;;AN000;set ANSI field = null (spaces) + INIT_VAR F_FASTOPEN, E_FASTOPEN_YES ;;AN000;set FASTOPEN = yes + COPY_STRING S_FASTOPEN, M_FASTOPEN, D_FASTOPEN_1 ;;AN000;set FASTOPEN = C:=(50,25) + INIT_VAR F_GRAPHICS, E_GRAPHICS_YES ;;AN000;set GRAPHICS = yes + INIT_VAR S_GRAPHICS, 0 ;;AN000;set GRAPHICS field = null (spaces) + COPY_STRING S_FILES, M_FILES, D_FILES_1 ;AN000; set FILES = 20 + ENDM + +INIT_VAR_MAXIMIZE MACRO + COPY_STRING S_BUFFERS, M_BUFFERS, D_BUFFERS_2 ;;AN000;set BUFFERS = 50,4 + COPY_STRING S_FCBS, M_FCBS, D_FCBS_1 ;;AN000;set FCBS = 20,8 + INIT_VAR F_ANSI, E_ANSI_YES ;;AN000;set ANSI = yes + COPY_STRING S_ANSI, M_ANSI, D_ANSI_1 ;;AN000;set ANSI field = /X + INIT_VAR F_FASTOPEN, E_FASTOPEN_YES ;;AN000;set FASTOPEN = yes + COPY_STRING S_FASTOPEN, M_FASTOPEN, D_FASTOPEN_2 ;;AN000;set FASTOPEN = C:(150,150) + INIT_VAR F_GRAPHICS, E_GRAPHICS_YES ;;AN000;set GRAPHICS = yes + INIT_VAR S_GRAPHICS, 0 ;;AN000;set GRAPHICS field = null (spaces) + COPY_STRING S_FILES, M_FILES, D_FILES_1 ;AN000; set FILES = 20 + ENDM + +SAVE_PARAMETERS MACRO SAV_FILE, RET_CODE ;;AN000; + PREPARE_FILE SAV_FILE ;;AN000; + WORD_TO_CHAR F_SHELL, S_STR120_1 + WRITE_LINE S_STR120_1 + WORD_TO_CHAR N_FORMAT_MODE, S_STR120_1 ;;AN000; + WRITE_LINE S_STR120_1 ;;AN000; + WORD_TO_CHAR N_DISK_1, S_STR120_1 ;;AN000; + WRITE_LINE S_STR120_1 ;;AN000; + WORD_TO_CHAR I_DESTINATION,S_STR120_1 ;;AN033;SEH save destination, too + WRITE_LINE S_STR120_1 ;;AN033;SEH + WRITE_LINE S_INSTALL_PATH ;;AN000; + SAVE_FILE SAV_FILE, RET_CODE ;;AN000; + ENDM ;;AN000; + +CREATE_CONFIG MACRO CONFIG_FILE, RET_CODE ;;AN000; + PREPARE_FILE CONFIG_FILE ;;AN000; + CALL CREATE_CONFIG_SYS ;;AN000; + SAVE_FILE CONFIG_FILE, RET_CODE ;;AN000; + ENDM ;;AN000; + +CREATE_AUTOEXEC MACRO AUTO_FILE, DEST, RET_CODE ;;AN000; + MOV N_DEST, DEST ;;AN000; + PREPARE_FILE AUTO_FILE ;;AN000; + CALL CREATE_AUTOEXEC_BAT ;;AN000; + SAVE_FILE AUTO_FILE, RET_CODE ;;AN000; + ENDM ;;AN000; + +CREATE_SHELL MACRO SHELL_FILE, RET_CODE ;;AN000; + PREPARE_FILE SHELL_FILE ;;AN000; + CALL CREATE_SHELL_BAT ;;AN000; + SAVE_FILE SHELL_FILE, RET_CODE ;;AN000; + ENDM ;;AN000; + +ADD_WORD MACRO VAR1, VAR2 ;;AN000; + MOV AX,VAR2 ;;AN000; + ADD VAR1,AX ;;AN000; + ENDM ;;AN000; + +CHECK_DISPLAY MACRO ;;AN000; + CALL VIDEO_CHECK ;;AN000; + ENDM ;;AN000; + +SAVE_PANEL_LIST MACRO ;;AN000; + MOV AX,0ADC0H ;;AN000; + MOV BX,0FFFFH ;;AN000; + INT 2FH ;;AN000; + ENDM ;;AN000; + +PREP_FOR_ONE MACRO CPOS ;;AN000; + MOV DH,CPOS ;;AN000; + CALL DO_PREP_FOR_ONE ;;AN000; + ENDM ;;AN000; + +HOOK15 MACRO ;;AN000; + CALL DO_HOOK15 ;;AN000; + ENDM ;;AN000; + +UNHOOK15 MACRO ;;AN000; + CALL DO_UNHOOK15 ;;AN000; + ENDM ;;AN000; + +GET_INSTALLED_MEM MACRO MEMORY ;;AN000; + INT 12H ;;AN000; + MOV MEMORY,AX ;;AN000; + ENDM ;;AN000; + +HOOK_2F_FORMAT MACRO ;;AN000; + CALL HOOK_INT_2F_FORMAT ;;AN000; + ENDM ;;AN000; + +UNHOOK_2F MACRO ;;AN000; + CALL RESTORE_INT_2F ;;AN000; + ENDM ;;AN000; + +INCLUDE MACROS8.INC ;AN000; + \ No newline at end of file diff --git a/v4.0/src/SELECT/MACROS8.INC b/v4.0/src/SELECT/MACROS8.INC new file mode 100644 index 0000000..7008fce --- /dev/null +++ b/v4.0/src/SELECT/MACROS8.INC @@ -0,0 +1,48 @@ +;DSKCPY_ERR DB 0 +DSKCPY_EXIT EQU 1 ;AN000;DT user chose to exit diskcopy + +;DSKCPY_WHICH DB +DSKCPY_TO_A_720 EQU 0 ;AN000;DT +DSKCPY_TO_A_360 EQU 1 ;AN000;DT +DSKCPY_TO_B EQU 2 ;AN000;DT + +;DSKCPY_OPTION DB +SOURCE1 EQU 0 ;AN000;DT +NO_SOURCE1 EQU 1 ;AN000;DT + +NOCHECK EQU 0 +DISKCOPY_TO MACRO WHERE,HOW,CHECK ;;AN000; + MOV DSKCPY_WHICH,WHERE ;;AN000; + MOV DSKCPY_OPTION,HOW ;;AN000; + LEA AX,CHECK ;;AN000; + MOV DSKCPY_SOURCE,AX ;;AN000; + ENDM ;;AN000; + +NOPANEL EQU 0 ;;AN000; +DISKCOPY_PANELS MACRO PANEL1, PANEL2, PANEL3 ;;AN000; + MOV DSKCPY_PAN1,PANEL1 ;;AN000; + MOV DSKCPY_PAN2,PANEL2 ;;AN000; + MOV DSKCPY_PAN3,PANEL3 ;;AN000; + ENDM ;;AN000; + +INSERT_DISK MACRO DSK_PANEL, SRCH_FILE ;;AN000; + MOV DISK_PANEL, DSK_PANEL ;;AN000; + LEA DI,SRCH_FILE ;;AN000; + MOV SEARCH_FILE, DI ;;AN000; + CALL INSERT_DISK_ROUTINE ;;AN000; + ENDM ;;AN000; + +HANDLE_FORMAT_ERROR MACRO ;;AN000; + LOCAL FORERR1,FORERR2,FORERR3 ;;AN000; + CMP SUB_ERROR,6 ;;AN000; + JNE FORERR1 ;;AN000; + MOV AX,PAN_DRIVE_ERROR ;;AN000; + JMP FORERR3 ;;AN000; +FORERR1: CMP SUB_ERROR,7 ;;AN000; + JNE FORERR2 ;;AN000; + MOV AX,PAN_WRITE_PROT ;;AN000; + JMP FORERR3 ;;AN000; +FORERR2: MOV AX,ERR_GENERAL ;;AN000; +FORERR3: HANDLE_ERROR AX,E_RETURN ;;AN000; + ENDM ;;AN000; + \ No newline at end of file diff --git a/v4.0/src/SELECT/MAC_EQU.INC b/v4.0/src/SELECT/MAC_EQU.INC new file mode 100644 index 0000000..7800602 --- /dev/null +++ b/v4.0/src/SELECT/MAC_EQU.INC @@ -0,0 +1,87 @@ +INCLUDE VERSIONA.INC ;AN047;SEH check DOS version in VERSIONA.INC instead of in MAC_EQU.INC + +TRUE = 1 ;AN000; +FALSE = 0 ;AN000; + +; Equates from PRN_DEF.ASM + +ERR_NOT_ENOUGH_MEM EQU 1 ;AN000; There was not enough memory to build the names table +ERR_OPENING_FILE EQU 2 ;AN000; Error opening a file +ERR_READING_FILE EQU 3 ;AN000; Error reading from a file +ERR_FINDING_VALUE EQU 4 ;AN000; Error finding the number of prn defs at the beginning of the file +ERR_LINE_TOO_LONG EQU 5 ;AN000; There was a line too long for the buffer +ERR_FINDING_NAME EQU 6 ;AN000; There was an error locating a printer name after a P or S +ERR_ACCESSING_FILE EQU 7 ;AN000; There was an error updating the file pointer +ERR_TOO_MANY_DEFS EQU 8 ;AN000; There are too many defintion in the file +ERR_NUMBER_MATCH EQU 9 ;AN000; The number of actual definition do not match the number expected +ERR_ALLOCATING_MEM EQU 10 ;AN000; There was an error allocating memory +ERR_CDP_CPP EQU 11 ;AN000; A prn defn had either a CDP or CPP but not both +ERR_PRN_DEFN EQU 12 ;AN000; There was an error in a printer definition + +; Equates from MACROS.INC ; +; Equates from MACROS2.INC ; +;MAJOR_DOS_VER EQU 4 ;AC047;SEH check now done in VERSIONA.INC ;AC045;SEH +;MINOR_DOS_VER EQU 00 ;AC047;SEH ;AC045;SEH version update to DOS 4.00 + ; +; Equates from MACROS3.INC ; +PRESENT_WITH_PART EQU 2 ;AN000; +PRESENT_WITHOUT_PART EQU 1 ;AN000; +NOT_PRESENT EQU 0 ;AN000; +NO_EDOS_SPACE EQU 0 ;AN000; +FREE_EDOS_SPACE EQU 1 ;AN000; +NO_EDOS_BUT_SPACE EQU 2 ;AN000; + ; +M_DOS_EXISTS EQU 1H ;AN000; +M_EDOS_EXISTS EQU 2H ;AN000; +M_LOGICAL_EXISTS EQU 4H ;AN000; +M_EDOS_SPACE EQU 8H ;AN000; +M_FREE_SPACE EQU 10H ;AN000; +M_DOS_EDOS_PART EQU 3H ;AN000; + ; +DISKETTES_EXIST EQU 1 ;AN000; +MAX_NUM_DISKETTE EQU 2 ;AN000; + ; +TABLE_ONE EQU 1 ;AN000; +TABLE_TWO EQU 2 ;AN000; + ; +DATA_VALID EQU 0 ;AN000; +DATA_INVALID EQU 1 ;AN000; + ; +USE_DEFAULT EQU 0 ;AN000; +DO_NOT_USE_DEFAULT EQU 1 ;AN000; + ; +DEF_DEST_A EQU 3 ;AN111;JW +DEF_DEST_B EQU 2 ;AN000; +DEF_DEST_C EQU 1 ;AN000; + ; +E_1440_TRACKS EQU 80 ;AN000; +E_1440_SECTORS EQU 18 ;AN000; + ; +; Equates from MACROS4.INC ; +; Equates from MACROS5.INC ; +B_DRIVE EQU 1 ;AN000; +C_DRIVE EQU 2 ;AN000; +A_DRIVE EQU 3 ;AN111;JW +LEN_ALT_KYBD_ID EQU 3 ;AN000; +; Equates from MACROS6.INC ; + ; + ; +; Equates from ROUTINES.ASM ; +STDOUT EQU 1 ;AN000; +STDERR EQU 2 ;AN000; +EXEC_DIR EQU 1 ;AN000; +EXEC_NO_DIR EQU 0 ;AN000; + ; +; Equates from SELECT.SKL ; +MSG_INV_DOS EQU 1 ;AN000; +MSG_INV_BOOT_MEDIA EQU 4 ;AN000; +MSG_INV_DISK_MEDIA EQU 5 ;AN000; +MSG_INV_PARMS EQU 6 ;AN000; +MSG_INV_INSTALL EQU 7 ;AN000; +MSG_LOADING EQU 8 ;AN000; +MSG_RELOADING EQU 9 ;AN000; + ; +; Equates for SEL_FLG (DB) in PRN_DEF.ASM +; SEL_FLG DB 0 +INSTALLRW EQU 80H ;AN000;The INSTALL diskette is read/write + diff --git a/v4.0/src/SELECT/MAKEFILE b/v4.0/src/SELECT/MAKEFILE new file mode 100644 index 0000000..1838228 --- /dev/null +++ b/v4.0/src/SELECT/MAKEFILE @@ -0,0 +1,249 @@ +# +###### Make file for SELECT.EXE, SELECT.DAT, SELECT.COM, SELECT.HLP ##### +# + +msg =..\messages +dos =..\dos +inc =..\inc +hinc =..\h +shell =..\shell +cas =..\shell\cassfar +make =nmake +here =..\..\select + +# +####################### dependencies begin here. ######################### +# + +all: select.exe select.dat select.com select.hlp + +# +############################ Make SELECT.EXE ############################# +# + +select.ctl: select.skl $(msg)\$(COUNTRY).msg + +select0.obj: select0.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \ + panel.mac select.inc pan-list.inc castruc.inc macros.inc \ + macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \ + macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \ + select.ctl macros8.inc pcequate.inc + +select1.obj: select1.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \ + panel.mac select.inc pan-list.inc castruc.inc macros.inc \ + macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \ + macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \ + macros8.inc pcequate.inc + +select2.obj: select2.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \ + panel.mac select.inc pan-list.inc castruc.inc macros.inc \ + macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \ + macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \ + macros8.inc pcequate.inc + +select2a.obj: select2a.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \ + panel.mac select.inc pan-list.inc castruc.inc macros.inc \ + macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \ + macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \ + macros8.inc pcequate.inc + +select3.obj: select3.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \ + panel.mac select.inc pan-list.inc castruc.inc macros.inc \ + macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \ + macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \ + macros8.inc pcequate.inc + +select4.obj: select4.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \ + panel.mac select.inc pan-list.inc castruc.inc macros.inc \ + macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \ + macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \ + macros8.inc pcequate.inc + +select5.obj: select5.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \ + panel.mac select.inc pan-list.inc castruc.inc macros.inc \ + macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \ + macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \ + macros8.inc pcequate.inc + +select5a.obj: select5a.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \ + panel.mac select.inc pan-list.inc castruc.inc macros.inc \ + macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \ + macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \ + macros8.inc pcequate.inc + +select6.obj: select6.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \ + panel.mac select.inc pan-list.inc castruc.inc macros.inc \ + macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \ + macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \ + macros8.inc pcequate.inc + +select7.obj: select7.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \ + panel.mac select.inc pan-list.inc castruc.inc macros.inc \ + macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \ + macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \ + macros8.inc pcequate.inc + +select8.obj: select8.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \ + panel.mac select.inc pan-list.inc castruc.inc macros.inc \ + macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \ + macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \ + macros8.inc pcequate.inc + +select9.obj: select9.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \ + panel.mac select.inc pan-list.inc castruc.inc macros.inc \ + macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \ + macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \ + macros8.inc pcequate.inc + +gen_coms.obj: gen_coms.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \ + panel.mac select.inc pan-list.inc castruc.inc macros.inc \ + macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \ + macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \ + macros8.inc pcequate.inc + +mparse.obj: mparse.asm $(inc)\parse.asm data.mac + +initmem.obj: initmem.asm $(inc)\struc.inc macros.inc macros2.inc macros3.inc \ + macros4.inc macros5.inc macros6.inc macros7.inc macros8.inc \ + mac_equ.inc + +input.obj: input.asm pcequate.inc + +routines.obj: routines.asm $(inc)\struc.inc mac_equ.inc varstruc.inc ext.inc \ + macros.inc macros2.inc macros3.inc macros4.inc macros5.inc \ + macros6.inc macros7.inc macros8.inc pan-list.inc panel.mac + + +routine2.obj: routine2.asm $(inc)\struc.inc mac_equ.inc ext.inc varstruc.inc \ + macros.inc macros2.inc macros3.inc macros4.inc macros5.inc \ + macros6.inc macros7.inc macros8.inc + +var.obj: var.asm $(inc)\sysmsg.inc sel_file.inc varstruc.inc + +prn_def.obj: prn_def.asm $(inc)\struc.inc macros.inc macros2.inc macros3.inc \ + macros4.inc macros5.inc macros6.inc macros7.inc macros8.inc \ + mac_equ.inc + +scn_parm.obj: scn_parm.asm $(inc)\struc.inc ext.inc macros.inc macros2.inc \ + macros3.inc macros4.inc macros5.inc macros6.inc macros7.inc \ + macros8.inc mac_equ.inc + +s_disply.obj: s_disply.asm $(inc)\struc.inc + +mod_copy.obj: mod_copy.asm $(inc)\struc.inc dos.equ xcopy.equ dosfiles.inc \ + macros.inc macros2.inc macros3.inc macros4.inc macros5.inc \ + macros6.inc macros7.inc pan-list.inc macros8.inc mac_equ.inc \ + xmainmsg.equ panel.mac casextrn.inc + +bridge.obj: bridge.asm $(inc)\casvar.inc $(inc)\casrn.inc + +caservic.obj: caservic.asm $(inc)\casvar.inc $(inc)\casrn.inc pan-list.inc \ + select.inc castruc.inc data.mac panel.mac macros.inc \ + $(inc)\struc.inc pcequate.inc mac_equ.inc + +ckdisp.obj: ckdisp.asm $(inc)\struc.inc + +intvec.obj: intvec.asm $(inc)\struc.inc mac_equ.inc pan-list.inc \ + panel.mac macros.inc varstruc.inc ext.inc casextrn.inc \ + macros8.inc + +asm2c.obj : asm2c.asm + +get_stat.obj : get_stat.c get_stat.h extern.h + +int13.obj : int13.c + +global.obj : global.c + +..\cmd\fdisk\bootrec.obj: + cd ..\cmd\fdisk + $(make) bootrec.obj + cd ..\..\select + +bootrec.obj : ..\cmd\fdisk\bootrec.obj + copy ..\cmd\fdisk\bootrec.obj + +selquit.obj : selquit.asm panel.mac pcequate.inc pan-list.inc castruc.inc \ + ext.inc $(inc)\struc.inc macros.inc macros2.inc macros3.inc \ + macros4.inc macros5.inc macros6.inc macros7.inc macros8.inc \ + mac_equ.inc + +selchild.obj : selchild.asm pcequate.inc castruc.inc macros.inc macros2.inc \ + macros3.inc macros4.inc macros5.inc macros6.inc macros7.inc \ + macros8.inc mac_equ.inc + +services.obj : services.asm pcequate.inc castruc.inc $(inc)\casvar.inc \ + macros.inc macros2.inc macros3.inc macros4.inc macros5.inc \ + macros6.inc macros7.inc macros8.inc mac_equ.inc + +get_help.obj : get_help.asm + +selserv.obj : selserv.asm + +services.lib : selquit.obj selchild.obj services.obj get_help.obj selserv.obj + + lib services.lib -+ selquit; + lib services.lib -+ selchild; + lib services.lib -+ services; + lib services.lib -+ get_help; + lib services.lib -+ selserv; + +select.exe: select0.obj select1.obj select2.obj select2a.obj select3.obj \ + select4.obj select5.obj select6.obj select7.obj select8.obj select9.obj \ + routines.obj routine2.obj gen_coms.obj intvec.obj select5a.obj \ + ckdisp.obj scn_parm.obj prn_def.obj var.obj caservic.obj input.obj \ + initmem.obj mparse.obj mod_copy.obj s_disply.obj bridge.obj \ + asm2c.obj get_stat.obj global.obj int13.obj bootrec.obj select5a.obj \ + services.lib + link /noe @select.lnk +# The "/noe" is so symbols defined in source files supercede library routines + +# +####################### make select.com ##################### +# + +sstub.obj: sstub.asm $(inc)\sysmsg.inc select.ctl + +select.com: sstub.obj + link sstub; + exe2bin sstub.exe select.com + +# +####################### make select.dat #################### +# + + +panel.inf: USA.inf + copy USA.inf panel.inf + +panels.obj: panels.asm sel-pan.inc pan-list.inc panel.inf + +colors.obj: colors.asm sel-pan.inc + +scroll.obj: scroll.asm sel-pan.inc panel.inf + +sel-pan.obj: sel-pan.asm $(inc)\casvar.inc sel-pan.inc + +sel-pan.exe: sel-pan.obj panels.obj colors.obj scroll.obj + link @sel-pan.lnk + +select.dat: sel-pan.exe + exe2bin sel-pan.exe sel-pan.dat + compress + +# +###################### make select.hlp ##################### +# + +#$(shell)\shellhlp\asc2hlp.exe : +# cd $(shell)\shellhlp +# $(make) asc2hlp.exe +# cd $(here) + +select.hlp: USA.txt + erase select.hlp + attrib -R USA.txt + asc2hlp USA.txt select.hlp + attrib +R USA.txt + + diff --git a/v4.0/src/SELECT/MOD_COPY.ASM b/v4.0/src/SELECT/MOD_COPY.ASM new file mode 100644 index 0000000..a4e65d8 --- /dev/null +++ b/v4.0/src/SELECT/MOD_COPY.ASM @@ -0,0 +1,2484 @@ + PAGE, 132 ;AN000; +TITLE XCOPY WITH FULL MEMORY USE ;AN000; + +; ##### R E A D M E ##### +; +; This file contains a copy of the XCOPY code. The code has been +; Revised (additions and many parts commented out) to conform to the +; needs of SELECT. +; +; ######################### + +;****************** START OF SPECIFICATIONS ***************************** +; MODULE NAME: XCOPY +; +; DESCRIPTIVE NAME: selectively copy groups of files, which can include +; lower level subdirectories. +; +; FUNCTION: The modules of XCOPY will be placed in the following order - +; SSEG, DSEG(MAIN DATA, MAIN MSG), CSEG (MAIN + INIT), +; DSEG_INIT(INIT DATA, INIT MSG) +; +; HEADER - informations needed about the file, subdirectory ... +; Continue_Info -> 0 - a whole single file in this header +; segment, or dir. +; 1 - Continuation of a small file. +; 2 - Continuation of a Big file +; 3 - Eof of continuation +; Next_Ptr -> points to the next header segment +; Before_Ptr -> points to the old header segment +; +; By optionally using the Archive bit in the directory of each +; file, XCOPY can be used as an alternative method of creating +; backup files which can be accessed directly by DOS and its +; applications without the need to "restore" the backup files. +; +; XCOPY is especially useful when several files are being copied +; and there is a generous amount of RAM available, because XCOPY +; will fill the memory with all the source files it can read in +; before starting to create output files. If the memory is not +; enough to hold all the source, this cycle will be repeated until +; the process is completed. For single drive systems, this maximum +; usage of the memory greatly reduces the amount of diskette +; swapping that would be required by the usual COPY command. +; +; ENTRY POINT: MAIN +; +; INPUT: (DOS COMMAND LINE PARAMETERS) +; +; SOURCE OPERAND: TARGET OPERAND: +; +; [d:] [path] filename[.ext] [d:] [path] [filename[.ext]] +; or +; [d:] path [filename[.ext]] +; or +; d: [path] [filename[.ext]] +; +; +; SWITCHES: +; +; /A /D /E /M /P /S /V /W +; +;The /A switch will copy only those files whose archive bit of the attribute is +;set to one. The attribute of the source file is not changed. This option is +;useful when making multiple backups when doing the non-final backup. +;The archive bit is one when a file has be created or Revised since the last +;time the bit was turned off. XCOPY /M or BACKUP /M will turn this bit off. +;The ATTRIB command can also be used to change the setting of the archive bit. +; +;The /D switch will copy only those files whose date is the same or later than +;the date specified. Depending on the country code you selected using the +;COUNTRY command, the date is specified in the format corresponding to the +;indicated country. +; +;The /E switch will create subdirectories on the target even if they end up +;being empty after all copying is over. If /E is not specified, empty +;subdirectories are not created. +; +;The /M switch will copy only those files whose archive bit is set in its +;attribute. Unlike the /A switch, /M will cause the archive bit in the source +;file to be turned off. This allows XCOPY to be used in making a final backup. +;The archive bit is one when a file has be created or Revised since the last +;time the bit was turned off. XCOPY /M or BACKUP /M will turn this bit off. +;The ATTRIB command can also be used to change the setting of the archive bit. +; +;The /P switch will prompt the operator before copying each file. In this +;situation, each file is copied onto the target before reading in the next +;file. The multi-file copy into a large memory buffer is not done. The prompt +;displays the complete filespec it proposes to copy and asks for (Y/N) +;response, which is then read in from the standard input device. +; +;The /S switch will not only copy the files in the current source directory but +;also those in all the subdirectories below the current one, with XCOPY +;following the Tree of the subdirectories to access these files. /S does not +;create an empty subdirectory on the target (unless /E is also specified). +;If the /S switch is not specified, XCOPY works only within the specified (or +;current) subdirectory of the source. +; +;The /V switch will cause DOS to verify that the sectors written on the target +;are recorded properly. This option has been provided so you can verify that +;critical data has been correctly recorded. This option will cause XCOPY to +;run more slowly, due to the additional overhead of verification. +; +;The /W switch will instruct XCOPY to pause before actually starting the +;movement of data, thus permit the copying of diskettes that do not actually +;have XCOPY available on them. The diskette containing XCOPY can be mounted +;first, the XCOPY command given with the /W option, then when the prompt +;requesting permission to continue is given, that diskette can then be removed +;and the source diskette mounted in its place, then the operator can press any +;key to continue after the pause. This feature is especially useful in a +;non-hardfile system. +; +; EXIT-NORMAL: ERRORLEVEL_0 - This is the normal completion code. +; ERRORLEVEL_2 - This is due to termination via Control-Break. +; ERRORLEVEL_4 - This is used to indicate an error condition. +; +; There are many types of problems that are detected and result in this +; return code, such as: +; +; write failure due to hard disk error +; disk full +; conflict between name of new subdirectory and existing filename +; access denied +; too many open files +; sharing violation +; lock violation +; general failure +; file not found +; path not found +; directory full +; invalid parms +; reserved file name as source +; insufficient memory +; incorrect DOS version +; +; +; INTERNAL REFERENCES: +; +; ROUTINES: +; +; +; DATA AREAS: +; +; +; EXTERNAL REFERENCES: +; +; ROUTINES: +; +; +; DATA AREAS: +; +; +; NOTES: This module should be processed with the SALUT pre-processor +; with the re-alignment not requested, as: +; +; SALUT XCOPY,NUL,; +; +; To assemble these modules, the sequential +; ordering of segments may be used. +; +; For LINK instructions: +; link profile ..\lib +; +; REVISION HISTORY: A000 Version 4.00: add PARSER, System Message Handler, +; Remove the BELL char.,turn off APPEND during TREE +; search,Extended Attribute processing, Uppercasing +; and "Out Of Space" during write to standard out. +; A001 PTM0011 XCOPY not handling path >63 characters. +; CHK_MAX_LENGTH proc(XCPYINIT) is Revised to err if +; >63 chrs. +; A002 PTM0012 XCOPY unnecessarily accessing current drive. +; ORG_S_T_DEF is Revised to ignore CHDIR if drive +; is not TARGET or SOURCE. +; A003 PTM0088 XCOPY (\) missing in 'FILE SHARING ERROR'. +; This problem is fixed with incorporation of the +; new message services. +; A005 DCR0201 10/9/87 Incorperate new format for EXTENDED +; ATTRIBUTES. +; +; +; Label: "DOS XCOPY Utility" +; "Version 4.00 (C) Copyright 1988 Microsoft" +; "Licensed Material - Program Property of Microsoft" +; +;****************** END OF SPECIFICATIONS ***************************** + +CLEAR_SCREEN2 MACRO;AN000; + MOV CX,0 ;;AN000; + MOV DX,184Fh ;;AN000; scroll screen from (0,0) tO (24,79) + MOV AX,0600h ;;AN000; AH = 6, Scroll Function + ;; AL = 0, Clear scroll area + MOV BH,7 ;;AN000; video I/O interrupt + INT 10H ;;AN000; + MOV DX,0 ;;AN000; RKJ-set cursor posn to top right hand corner + MOV BH,0 ;;AN000; RKJ + MOV AH,2 ;;AN000; RKJ + INT 10H ;;AN000; RKJ + ENDM ;;AN000; +;-------------------------------- +; Include Files +;-------------------------------- +INCLUDE STRUC.INC ;AN000; SAR +INCLUDE XMAINMSG.EQU ;AN000;message file +INCLUDE DOS.EQU ;AN000; +INCLUDE XCOPY.EQU ;AN000; +INCLUDE PAN-LIST.INC ;AN111;JW +INCLUDE PANEL.MAC ;AN111;JW +INCLUDE CASEXTRN.INC ;AN111;JW + + +EXTRN FK_ENT:BYTE ;AN111;JW +EXTRN FK_ENT_LEN:ABS ;AN111;JW +EXTRN E_RETURN:ABS ;AN111;JW +EXTRN S_DOS_SHEL_DISK:WORD ;AN111;JW +EXTRN S_DOS_SEL_360:WORD ;AN111;JW +EXTRN E_FILE_ATTR:ABS ;AN111;JW + +EXTRN FIND_FILE_ROUTINE:FAR ;AN111;JW +EXTRN EXIT_SELECT:near ;AN111;JW + +;------------------------------- +; Structures +;------------------------------- +;HEADER - informations needed about the file, subdirectory ... +;Continue_Info -> 0 - a whole single file in this header segment, or dir. +; 1 - Continuation of a small file. +; 2 - Continuation of a Big file +; 3 - EOF of continuation +;Next_Ptr -> points to the next header segment +;Before_Ptr -> points to the old header segment + +HEADER STRUC ;AN000; + CONTINUE_INFO DB 0 ;AN000;set for filesize bigger then 0FFD0h + NEXT_PTR DW ? ;AN000;next buffer ptr in para + BEFORE_PTR DW ? ;AN000;before ptr in para + DIR_DEPTH DB ? ;AN000;same as S_DEPTH + CX_BYTES DW 0 ;AN000;actual # of bytes in this buffer seg. + ATTR_FOUND DB ? ;AN000;attribute found + FILE_TIME_FOUND DW ?;AN000; + FILE_DATE_FOUND DW ?;AN000; + LOW_SIZE_FOUND DW ?;AN000; + HIGH_SIZE_FOUND DW ?;AN000; + TARGET_DRV_LET DB " :" ;AN000;used for writing + FILENAME_FOUND DB 13 DUP (0) ;AN000; FILENAME + ATTRIB_LIST DB ? ;AC005;EXTENDED ATTRIBUTE BUFFER +;------------------------------------------------------------------- +; extended attribute list used by extended open & get extended +;------------------------------------------------------------------- +; ATTRIB_LIST LABEL BYTE extended attribute buffer +; +;EA STRUC ; EXTENDED ATTRIBUTE +;EA_TYPE DB ? ; TYPE +;EAISUNDEF EQU 0 ; UNDEFINED TYPE (ATTRIB SKIPS) +; ; (OR TYPE NOT APPLICABLE) +; ; LENGTH: 0 TO 64K-1 BYTES +;EAISLOGICAL EQU 1 ; LOGICAL (0 OR 1) (ATTRIB DISPLAYS) ; LENGTH: 1 BYTE +;EAISBINARY EQU 2 ; BINARY INTEGER (ATTRIB DISPLAYS) +; ; LENGTH: 1, 2, 4 BYTES +;EAISASCII EQU 3 ; ASCII TYPE (ATTRIB DISPLAYS) +; ; LENGTH: 0 TO 128 BYTES +;EAISDATE EQU 4 ; DOS FILE DATE FORMAT (ATTRIB DISPLAYS) +; ; LENGTH: 2 BYTES +;EAISTIME EQU 5 ; DOS FILE TIME FORMAT (ATTRIB DISPLAYS) +; ; LENGTH: 2 BYTES +; ; OTHER VALUES RESERVED +;EA_FLAGS DW ? ; FLAGS +;EASYSTEM EQU 8000H ; EA IS SYSTEM DEFINED +; ; (BUILTIN, NOT APPLICATION DEFINED) +;EAREADONLY EQU 4000H ; EA IS READ ONLY (CANT BE CHANGED) +;EAHIDDEN EQU 2000H ; EA IS HIDDEN FROM ATTRIB +;EACREATEONLY EQU 1000H ; EA IS SETABLE ONLY AT CREATE TIME +; ; OTHER BITS RESERVED +;EA_RC DB ? ; FAILURE REASON CODE (SET BY DOS) +;EARCNOTFOUND EQU 1 ; NAME NOT FOUND +;EARCNOSPACE EQU 2 ; NO SPACE TO HOLD NAME OR VALUE +;EARCNOTNOW EQU 3 ; NAME CAN'T BE SET ON THIS FUNCTION +;EARCNOTEVER EQU 4 ; NAME CAN'T BE SET +;EARCUNDEF EQU 5 ; NAME KNOWN TO THIS FS BUT NOT SUPPORTED +;EARCDEFBAD EQU 6 ; EA DEFINTION BAD (TYPE, LENGTH, ETC) +;EARCACCESS EQU 7 ; EA ACCESS DENIED +;EARCUNKNOWN EQU -1 ; UNDETERMINED CAUSE +;EA_NAMELEN DB ? ; LENGTH OF NAME +;EA_VALLEN DW ? ; LENGTH OF VALUE +;EA_NAME DB ? ; FIRST BYTE OF NAME +; +;EA_VALUE DB ? ; FIRST BYTE OF VALUE +; +HEADER ENDS ;AN000; + +;;;;SUB_LIST STRUC ; SAR +;;;; DB 11 ; SAR ;AN000; +;;;; DB 0 ; SAR ;AN000; +;;;;DATA_OFF DW 0 ; SAR ;AN000; offset of data to be inserted +;;;;DATA_SEG DW 0 ; SAR ;AN000; offset of data to be inserted +;;;;MSG_ID DB 0 ; SAR ;AN000; n of %n +;;;;FLAGS DB 0 ; SAR ;AN000; Flags +;;;;MAX_WIDTH DB 0 ; SAR ;AN000; Maximum field width +;;;;MIN_WIDTH DB 0 ; SAR ;AN000; Minimum field width +;;;;PAD_CHAR DB 0 ; SAR ;AN000; character for pad field +;;;; ; SAR +;;;;SUB_LIST ENDS ; SAR +;****************************************************************************** +DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; DATA Segment + +INCLUDE DOSFILES.INC ;AN000; SAR + +;; ERRORLEVEL DB 0 ; SAR ;errorlevel +;; INPUT_DATE DW 0 ; SAR +;; INPUT_TIME DW 0 ; SAR +PSP_SEG DW ? ;AN000; +SAV_DEFAULT_DRV DB ? ;AN000;1 = A, 2 = B etc. saved default +SAV_DEF_DIR_ROOT DB '\';AN000; +SAV_DEFAULT_DIR DB 64 DUP (0);AN000; +SAV_S_DRV DB 'A:\' ;AN000; +SAV_S_CURDIR DB 64 DUP (0);AN000; +SAV_T_DRV DB 'B:\' ;AN000; +SAV_T_CURDIR DB 64 DUP (0);AN000; + + PUBLIC SOURCE_PANEL, DEST_PANEL, CHECK_FILE ;AN111;JW +SOURCE_PANEL DW ? ;AN111;JW +DEST_PANEL DW ? ;AN111;JW +CHECK_FILE DW ? ;AN111;JW + +SOURCE_IN DB ? ;AN111;JW +YES EQU 0 ;AN111;JW +NO EQU 1 ;AN111;JW + +OLD_DTA_SEG DW ? ;AN111;JW +OLD_DTA_OFF DW ? ;AN111;JW + +; + +;; DISP_S_PATH DB 67 DUP (0) ; SAR ;mirror image of source path. used for display message when copying +;; DISP_S_FILE DB 13 DUP (0) ; SAR +;; DISP_T_PATH DB 67 DUP (0) ; SAR ;mirror image of target path +;; DISP_T_FILE DB 13 DUP (0) ; SAR +; +;;B_SLASH DB '\',0 ; SAR + + +FILE_COUNT LABEL WORD ;AN000; +FILE_CNT_LOW DW 0 ;AN000;copied file count +FILE_CNT_HIGH DW 0 ;AN000; +; + +;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +;; APPENDFLAG DW 0 ; SAR ;append /X status save area +FOUND_FILE_FLAG DB 0 ;AN000;used for showing the message "File not found" +; +S_DRV_NUMBER DB 0 ;AN000;source, target drv # +T_DRV_NUMBER DB 0 ;AN000; +; +S_DRV_PATH LABEL BYTE ;AN000;source drv, path used for single_drv_copy +S_DRV DB 'A:\' ;AN000; +S_PATH DB 80 DUP (0) ;AN000;Initialized by calling GET CUR DIR +S_DEPTH DB 0 ;AN000; +S_DRV_1 DB 'A:' ;AN000; +S_FILE DB '????????.???',0 ;AN000;default filename to find file +;; S_DIR DB '????????.???',0 ; SAR ;to find any subdirectory name + +;; S_PARENT DB '..',0 ; SAR ;source parent used for non single_drv_copy +S_HANDLE DW 0 ;AN000;file handle opened + +;; S_ARC_DRV_PATH LABEL BYTE ; SAR ;informations used to change source file's +;; S_ARC_DRV DB 'A:\' ; SAR ;archieve bits. +;; S_ARC_PATH DB 64 DUP (0) ; SAR +;; S_ARC_DEPTH DB 0 ; SAR + +T_DRV_PATH LABEL BYTE ;AN000;target drv, path used all the time +T_DRV DB 'B:\' ;AN000; +T_PATH DB 64 DUP (0) ;AN000;initialized by calling GET CUR DIR in INIT +T_DEPTH DB 0 ;AN000; + +;; T_FILE LABEL BYTE ; SAR ;target filename for file creation +;; T_DRV_1 DB 'B:' ; SAR ;target drv letter +;; T_FILENAME DB 13 DUP (0) ; SAR ;target filename +;; T_TEMPLATE DB 11 DUP (0) ; SAR ;if global chr entered, this will be used instead of filename. + +;; T_PARENT LABEL BYTE ; SAR +;; T_DRV_2 DB 'B:' ; SAR +;; T_PARENT_1 DB '..',0 ; SAR +T_HANDLE DW 0 ;AN000;target handle created +;; T_MKDIR_LVL DB 0 ; SAR ;# of target starting directories created. +; +;------------------------------------------ +; PRINT_STDOUT input parameter save area +;------------------------------------------ +;; SUBST_COUNT DW 0 ; SAR ;AN000; message substitution count +;; MSG_CLASS DB 0 ; SAR ;AN000; message class +;; INPUT_FLAG DB 0 ; SAR ;AN000; Type of INT 21 used for KBD input +;; MSG_NUM DW 0 ; SAR ;AN000; message number + +;---------------------------------------------- +; Parameter list used by extended open DOS call +;---------------------------------------------- +PARAM_LIST LABEL WORD;AN000; +E_A_LST DD 0 ;AN005; E A LIST POINTER + DW 1 ;AN005; number of additional parameters + DB 6 ;AN005; ID for IO mode = WORD VALUE + DW 1 ;AN005; IO mode = PURE SEQUENTIAL + + +;; INPUT_BUFF db 20 dup(0) ; SAR ;AN000; keyboard input buffer used + ;for user response (Y/N) + +;-------------------------------------------------------------- +; Following three sublists are used by the Message Retriever +;-------------------------------------------------------------- +;;SUBLIST1 LABEL DWORD ; SAR ;AN000;SUBSTITUTE LIST 1 +;; DB 11 ; SAR ;AN000;sublist size +;; DB 0 ; SAR ;AN000;reserved +;; DD 0 ; SAR ;AN000;substition data Offset +;; DB 1 ; SAR ;AN000;n of %n +;; DB 0 ; SAR ;AN000;data type +;; DB 0 ; SAR ;AN000;maximum field width +;; DB 0 ; SAR ;AN000;minimum field width +;; DB 0 ; SAR ;AN000;characters for Pad field +;; ; SAR +;; ; SAR +;;SUBLIST2 LABEL DWORD ; SAR ;AN000;SUBSTITUTE LIST 2 +;; DB 11 ; SAR ;AN000;sublist size +;; DB 0 ; SAR ;AN000;reserved +;; DD 0 ; SAR ;AN000;substition data Offset +;; DB 2 ; SAR ;AN000;n of %n +;; DB 0 ; SAR ;AN000;data type +;; DB 0 ; SAR ;AN000;maximum field width +;; DB 0 ; SAR ;AN000;minimum field width +;; DB 0 ; SAR ;AN000;characters for Pad field +;; ; SAR +;; ; SAR +;;SUBLIST3 LABEL DWORD ; SAR ;AN000;SUBSTITUTE LIST 3 +;; DB 11 ; SAR ;AN000;sublist size +;; DB 0 ; SAR ;AN000;reserved +;; DD 0 ; SAR ;AN000;substition data Offset +;; DB 3 ; SAR ;AN000;n of %n +;; DB 0 ; SAR ;AN000;data type +;; DB 0 ; SAR ;AN000;maximum field width +;; DB 0 ; SAR ;AN000;minimum field width +;; DB 0 ; SAR ;AN000;characters for Pad field +;; + + +FILE_SEARCH_ATTR DW NORM_ATTR;AN000; +;; DIR_SEARCH_ATTR DW INCL_H_S_DIR_ATTR ; SAR +; +OPEN_MODE DB Read_Only_Deny_Write ;AN000;READ_ONLY_DENY_WRITE ;access, sharing mode +; +;Equates are defined in XCOPY.EQU + +MY_FLAG DB 0 ;AN000;informations for a tree walk +; find_first_flag equ 01h ;set MY_FLAG by "OR" +; findfile_flag equ 02h +; no_more_file equ 04h +; single_copy_flag equ 08h ;single copy instead of multi copy +; visit_parent_flag equ 10h ;visit parent node +; found_flag equ 20h ;found flag - for find subdir +; missing_link_flag equ 40h ;insuffiecient info. for not creating empty dir +; is_source_flag equ 80h ;if set, dealing with source +; reset_find_first equ 0FEh ;reset by AND +; reset_findfile equ 0FDh +; reset_no_more equ 0FBh +; reset_visit_parent equ 0EFh +; reset_found equ 0DFh +; reset_missing_link equ 0BFh +; reset_is_source equ 07Fh + +FILE_FLAG DB 0 ;AN000; +; cont_flag equ 01h +; eof_flag equ 02h +; big_file_flag equ 04h +; file_bigger_flag equ 08h +; created_flag equ 10h +; reset_cont equ 0FEh +; reset_eof equ 0FDh +; reset_big_file equ 0FBh +; reset_file_bigger equ 0F7h +; reset_created equ 0EFh +; reset_readfile equ 0F0h ;reset FILE_FLAG for read a file +; +COPY_STATUS DB 0;AN000; +; open_error_flag equ 01h +; read_error_flag equ 02h +; create_error_flag equ 04h +; write_error_flag equ 08h +; mkdir_error_flag equ 10h +; chdir_error_flag equ 20h +; maybe_itself_flag equ 40h +; disk_full_flag equ 80h +; reset_open_error equ 0FEh +; reset_read_error equ 0FDh +; reset_create_error equ 0FBh +; reset_write_error equ 0F7h +; reset_close_error equ 0EFh +; reset_chdir_error equ 0DFh +; +ACTION_FLAG DB 0;AN000; +; reading_flag equ 01h ;display "Reading source files..." +; reset_reading equ 0FEh ;do not display. +; +SYS_FLAG DB 0 ;AN000;system information +; one_disk_copy_flag equ 01h ;xcopy with only one logical drive. +; default_drv_set_flag equ 02h ;default drive has been changed by this program +; default_s_dir_flag equ 04h ;source current directory saved. +; default_t_dir_flag equ 08h ;target current directory saved. +; removalble_drv_flag equ 10h +; sharing_source_flag equ 20h ;source shared +; sharing_target_flag equ 40h +; turn_verify_off_flag equ 80h ;turn the verify off when exit to dos +; reset_default_s_dir equ 0FBh ;reset default_s_dir_flag +; +OPTION_FLAG DB 0;AN000; +; slash_a equ 01h ;soft archieve ? +; slash_d equ 02h ;date? +; slash_e equ 04h ;create empty dir? +; slash_m equ 08h ;hard archieve ? (turn off source archieve bit) +; slash_p equ 10h ;prompt? +; slash_s equ 20h ;walk the tree? +; slash_v equ 40h ;verify on? +; slash_w equ 80h ;show "Press any key to begin copying" msg) +; reset_slash_a equ 0FEh ;turn off soft archieve +; reset_slash_m equ 0F7h ;turn off hard archieve + +MAX_CX DW 0 ;AN000;less than 0FFD0h +ACT_BYTES DW 0 ;AN000;actual bytes read. +HIGH_FILE_SIZE DW 0;AN000; +LOW_FILE_SIZE DW 0;AN000; +; +TOP_OF_MEMORY DW 0 ;AN000;para +BUFFER_BASE DW 0 ;AN000;para +MAX_BUFFER_SIZE DW 0 ;AN000;para. BUFFER_LEFT at INIT time. +BUFFER_LEFT DW 0 ;AN000;para +BUFFER_PTR DW 0 ;AN000;para. If buffer_left=0 then invalid value +DATA_PTR DW 0 ;AN000;buffer_ptr + 2 (32 bytes) +OLD_BUFFER_PTR DW 0 ;AN000;last buffer_ptr +SIZ_OF_BUFF DW ? ;AN005;para. EXTENDED ATTRIB BUFF SIZE +BYTS_OF_HDR DW ? ;AN005;bytes TOTAL HEADER SIZE +PARA_OF_HDR DW ? ;AN005;para. TOTAL HEADER SIZE +OPEN_FILE_COUNT DW ? ;AN005;TRACKING OF OPEN FLS FOR BUFFER +; ;SIZE CALCULATION. +; +;structured data storage allocation +FILE_DTA Find_DTA <> ;AN000;DTA for find file +DTAS Find_DTA 32 dup (<>) ;AN000;DTA STACK for find dir +;** Througout the program BP will be used for referencing fieldsname in DTAS. +;For example, DS:[BP].dta_filename. +DATA ENDS ;AN000; + +;****************************************************************************** + +SELECT SEGMENT PARA PUBLIC 'SELECT';AN000; + ASSUME CS:SELECT, DS:DATA ;AN000; + +;--- START OF A PROGRAM --- + +PUBLIC MOD_XCOPY ;AN000; +MOD_XCOPY PROC NEAR ;AN000; SAR + + + PUSH ES ;AN000; SAR + PUSH BP ;AN000; SAR + ; SAR + PUSH DS ;AN000; SAR + POP ES ;AN000; SAR + MOV SP_SAVE, SP ;AN000; SAR + ; SAR + MOV SOURCE_IN,YES ;AN111;JW + .IF < AL eq 1 > ;AN000; + MOV AL,2 ;AN000; + .ELSEIF < AL eq 2 > ;AN000; + MOV AL,1 ;AN000; + .ENDIF ;AN000; + MOV DEST,AL ;AN000; SAR + MOV TABLE_OFFSET, BX ;AN000; SAR + MOV NUMBER_OF_FILES, CX ;AN000; SAR + MOV PATH_OFFSET, SI ;AN000; SAR + CALL SAVE_DTA ;AN000; + + MOV AH, 62H ;AN000; SAR + INT 21H ;AN000; SAR + MOV PSP_SEG, BX ;AN000; SAR + + CALL ALLOCATE ;AN000; SAR + .IF < C > ;AN000; SAR + JMP JUST_EXIT ;AN000; SAR + .ENDIF ;AN000; SAR + +XCOPY_INIT: ;AN000; + CALL INIT ;AN000;initialization + JC MAIN_EXIT ;AN000;error. (Already message has been displayed) + + MOV BP, OFFSET DTAS ;AN000;initialize BP + OR ACTION_FLAG, READING_FLAG ;AN000;set reading flag for copy message + + CALL TREE_COPY ;AN000; + + CALL ORG_S_DEF ;AN000;restore the original source default dir + + CALL WRITE_FROM_BUFFER ;AN000;write from buffer if we missed it. + + CALL SWITCH_DTAS ;AN111;JW + + CLC ;AN000; SAR + JMP RESTORE_DIRS ;AN000; SAR + +MAIN_EXIT: ;AN000; +;;;;; MOV BX, DATA ; SAR +;;;;; MOV DS, BX ; SAR re initialize ds, es +;;;;; MOV ES, BX ; SAR exit here if the status of source, target or default drv has been changed. +;;;;; CALL CHK_FILE_NOT_FOUND ; SAR if no files has been found, show the message. + +MAIN_EXIT_A: ;AN000; + STC ;AN000; SAR + +RESTORE_DIRS:;AN000; + MOV BX, DATA ;AN000; SAR + MOV DS, BX ;AN000;re initialize ds, es + MOV ES, BX ;AN000;exit here if the status of source, target or default drv has been changed. +;;;;; CALL CHK_MKDIR_LVL ; SAR starting target directory has been created? + PUSHF ;AN000; SAR + CALL ORG_S_T_DEF ;AN000;restore original target, source, default drv, and verify status + POPF ;AN000; SAR + JMP DO_DEALLOCATE ;AN000; SAR +JUST_EXIT: ;AN000;unconditional immediate exit + MOV AX, DATA ;AN000; SAR + MOV DS, AX ;AN000; SAR + STC ;AN000; SAR + +DO_DEALLOCATE: ;AN000; SAR +; Restore the original status of APPEND if active. + CALL DEALLOCATE ;AN000; SAR + .IF < NC > ;AN000; SAR + .IF < NOT_FOUND_FLAG EQ 1 > ;AN000; SAR + STC ;AN000; SAR + .ELSE ;AN000; SAR + CLC ;AN000; SAR + .ENDIF ;AN000; SAR + .ENDIF ;AN000; SAR + MOV SP, SP_SAVE ;AN000; SAR + POP BP ;AN000; SAR + POP ES ;AN000; SAR + RET ;AN000; SAR + +; MOV AH, 4Ch ;return to dos +; MOV AL, ERRORLEVEL ;set return code whatever +; INT 21H + +MOD_XCOPY ENDP;AN000; +; + + +;----------------- SUBROUTINES --------------------------------------------- + +ALLOCATE PROC NEAR ;AN000; SAR + ; SAR + MOV BX, 0FFFFH ;AN000; SAR Attempt to allocate as much as possible + MOV AH, 48H ;AN000; SAR + INT 21H ;AN000; SAR + MOV AH, 48H ;AN000; SAR BX contains the amount of memory available + INT 21H ;AN000; SAR + MOV ALLOCATE_START, AX ;AN000; SAR + ; SAR + RET ;AN000; SAR + ; SAR +ALLOCATE ENDP ;AN000; SAR + ; SAR +DEALLOCATE PROC NEAR ;AN000; SAR + ; SAR + PUSHF ;AN000; SAR + PUSH ES ;AN000; SAR + MOV AX, ALLOCATE_START ;AN000; SAR + MOV ES, AX ;AN000; SAR + MOV AH, 49H ;AN000; SAR + INT 21H ;AN000; SAR + POP ES ;AN000; SAR + POPF ;AN000; SAR + ; SAR + RET ;AN000; SAR + ; SAR +DEALLOCATE ENDP ;AN000; SAR + + + + +TREE_COPY PROC NEAR ;AN000; + +;Walk the source tree to read files and subdirectories + + .IF < DEST EQ 1 > ;AN000; SAR Copying to drive b? + MOV SI, OFFSET B_TARGET ;AN000; SAR Yes! Copy the drive information + MOV CX, LENGTH_B_TARGET ;AN000; SAR + .ELSEIF < DEST EQ 3 > ;AN111;JW ; SAR Copying to drive A? + MOV SI, OFFSET A_TARGET ;AN111;JW ; SAR Yes! Copy the drive information + MOV CX, LENGTH_A_TARGET ;AN111;JW ; SAR + .ELSE ;AN000; SAR + MOV SI, PATH_OFFSET ;AN000; SAR No! Copy to this directory. + MOV CX, WORD PTR [SI] ;AN000; SAR + ADD SI, 2 ;AN000; SAR Adjust for the length word + .ENDIF ;AN000; SAR + MOV DI,OFFSET T_DRV_PATH ;AN000; SAR + CLD ;AN000; SAR + REP MOVSB ;AN000; SAR + + + + OR MY_FLAG, FINDFILE_FLAG ;AN000;deals with files + OR MY_FLAG, FIND_FIRST_FLAG ;AN000;find first + + MOV NOT_FOUND_FLAG, 0 ;AN000; SAR + ; SAR +NEXT_PASS: ;AN000; SAR + ; SAR + MOV SI, TABLE_OFFSET ;AN000; SAR + MOV DOS_FILE_PTR,SI ;AN000; SAR + MOV FILE_NUM,1 ;AN000; SAR + + CALL SET_MY_DTA ;AN000;set DTA to FILE_DTA +; $DO +$$DO1: ;AN000; + AND MY_FLAG, RESET_NO_MORE ;AN000; SAR + CALL LOAD_DOS_FILENAME ;AN000; SAR + TEST MY_FLAG, NO_MORE_FILE ;AN000; SAR +; $LEAVE NZ ; SAR + JNZ $$EN1 ;AN000; + + .IF < SOURCE_IN EQ NO > AND ;AN000; + .IF < DEST EQ 3 > ;AN000; + CALL GET_SOURCE ;AN000; + .ENDIF ;AN000; + + CALL FIND_FILE ;AN000;find first (next) ; SAR + .IF < BIT MY_FLAG NAND NO_MORE_FILE > ;AN000; SAR + CALL READ_INTO_BUFFER ;AN000; SAR + .ELSE ;AN000; SAR + MOV NOT_FOUND_FLAG, 1 ;AN000; SAR + .ENDIF ;AN000; SAR +; $ENDDO ; SAR + JMP SHORT $$DO1 ;AN000; +$$EN1: ;AN000; + CLC ;AN000; SAR + +;  SAR  +;;;;;; TEST OPTION_FLAG, SLASH_S ;walk the tree? +; $IF NZ,LONG +; +; AND MY_FLAG, RESET_FINDFILE ;now, deals with directory +; OR MY_FLAG, FIND_FIRST_FLAG ;find first +; $DO +; CALL SET_MY_DTA ;set DTA to DTAS according to BP +; CALL FIND_DIR ;find first (next) +; TEST MY_FLAG, NO_MORE_FILE ;no more subdirectory? +; $LEAVE NZ ;then leave this loop to return to caller +; LEA DI, S_DRV_PATH +; LEA SI, [BP].DTA_FILENAME +; CMP S_PATH, 0 ;root directory? +; $IF E +; MOV AL, 0FFh ;then '\' is already provided. Just concat. +; $ELSE +; MOV AL, PATH_DELIM ;put delimiter +; $ENDIF +; CALL CONCAT_ASCIIZ ;make new path +; test option_flag, slash_p ;prompt mode? +; $IF NZ +; call p_concat_display_path +; $ENDIF +; INC S_DEPTH ;increase depth +; CALL MAKE_HEADER ;make header in the buffer +; OR MY_FLAG, IS_SOURCE_FLAG ;dealing with source +; AND MY_FLAG, RESET_VISIT_PARENT ;going to visit child node +; CALL CHANGE_S_DIR ;change source dir +; ADD BP, type FIND_DTA ;increase DTAS stack pointer +; CALL TREE_COPY ;tree copy the sub directory +; $ENDDO +; +; CMP S_DEPTH, 0 ;starting directory? then exit +; $IF NE ;else +; DEC S_DEPTH ;dec depth +; TEST OPTION_FLAG, SLASH_E ;copy subdirectories even if empty? +; $IF Z +; CALL DEL_EMPTY ;then check the old_buffer_ptr and +; ;if it is a directory, then restore +; ;buffer_ptr to old. +; $ENDIF +; LEA DI, S_DRV_PATH +; CALL LAST_DIR_OUT ;change environments +; test option_flag, slash_p ;prompt mode? +; $IF NZ +; call p_cut_display_path +; $ENDIF +; LEA DX, S_DRV_PATH ;before returning to the caller +; OR MY_FLAG, IS_SOURCE_FLAG +; OR MY_FLAG, VISIT_PARENT_FLAG +; CALL CHANGE_S_DIR +; SUB BP, type FIND_DTA +; $ENDIF +;;;;;;; $ENDIF ;walk the tree + RET ;AN000; +TREE_COPY ENDP;AN000; + + +GET_SOURCE PROC NEAR;AN000; + + CALL SWITCH_DTAS;AN000; + + .REPEAT ;AN000; + + INIT_PQUEUE PAN_INST_PROMPT ;AN000; initialize queue + PREPARE_PANEL SOURCE_PANEL ;AN000; remove select from A: & insert DOS + PREPARE_PANEL PAN_HBAR ;AN000; + PREPARE_CHILDREN ;AN000; prepare child panels + DISPLAY_PANEL ;AN000; + ; + GET_FUNCTION FK_ENT ;AN000; + + .IF < SOURCE_PANEL eq SUB_REM_DOS_A > ;AN000; + LEA DI, S_DOS_SEL_360 ;AN000; + .ELSE ;AN000; + LEA DI, S_DOS_SHEL_DISK ;AN000; + .ENDIF ;AN000; + MOV CX, E_FILE_ATTR ;AN000; + CALL FIND_FILE_ROUTINE ;AN000; + .LEAVE < nc > ;AN000; + ; + HANDLE_ERROR ERR_DOS_DISK, E_RETURN ;AN000; + ; + .UNTIL ;AN000; + + ;;;copying files from diskette 1 screen ; + INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue + PREPARE_PANEL SUB_COPYING ;AN000; prepare copying from diskette 1 message + DISPLAY_PANEL ;AN000; + + MOV SOURCE_IN,YES ;AN000; + + CALL SWITCH_DTAS ;AN000; + + RET ;AN000; +GET_SOURCE ENDP ;AN000; + +GET_DEST PROC NEAR ;AN000; + + + INIT_PQUEUE PAN_INST_PROMPT ;AN000; initialize queue + PREPARE_PANEL DEST_PANEL ;AN000; remove select from A: & insert DOS + PREPARE_PANEL PAN_HBAR ;AN000; + PREPARE_CHILDREN ;AN000; prepare child panels + DISPLAY_PANEL ;AN000; + ; + GET_FUNCTION FK_ENT ;AN000; + ; + + ;;;copying files from diskette 1 screen ; + INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue + PREPARE_PANEL SUB_COPYING ;AN000; prepare copying from diskette 1 message + DISPLAY_PANEL ;AN000; + + MOV SOURCE_IN,NO ;AN000; +; SUB DOS_FILE_PTR,12 +; DEC FILE_NUM + + RET ;AN000; +GET_DEST ENDP ;AN000; +; +;****************************************************************************** +; Subroutine: LOAD_DOS_FILENAME - Load the next filename into S_FILE. +; INPUT: +; SI - Points to the start of the filename +; +; OUTPUT: +; The S_FILE field in the data segment is updated. +;Registers Affected: +; SI - At the end, SI points to the end of the filename. It therefore +; also points to the beginning of the next filename. +; +;****************************************************************************** +LOAD_DOS_FILENAME PROC NEAR;AN000; + + PUSH DI ;AN000; + PUSH ES ;AN000; + + OR MY_FLAG, FIND_FIRST_FLAG ;AN000; Find first in the directory + + MOV SI,DOS_FILE_PTR ;AN000; + +LDF_SEE_IF_DONE: ;AN000; + ; + ; See if we are finished this pass of the files + ; + OR MY_FLAG, NO_MORE_FILE ;AN000; For now, assume there are not files found + MOV DX, NUMBER_OF_FILES ;AN000; Get the number of files in the table + .IF < FILE_NUM BE DX > ;AN000; Search while there are still more files + AND MY_FLAG, RESET_NO_MORE ;AN000; Indicate that there are more files + LEA DI,S_FILE ;AN000; Where to put the name + MOV CX,12 ;AN000; Number of bytes + CLD ;AN000; + REP MOVSB ;AN000; + INC FILE_NUM ;AN000; + .ENDIF ;AN000; + + MOV DOS_FILE_PTR,SI ;AN000; Save the pointer to the files + POP ES ;AN000; + POP DI ;AN000; + RET ;AN000; + +LOAD_DOS_FILENAME ENDP ;AN000; +; +READ_INTO_BUFFER PROC NEAR ;AN000; +;Read *** a *** file into buffer + +;  SAR  +; TEST MY_FLAG, SINGLE_COPY_FLAG ;single copy? +; $IF Z,AND ;no, multi copy +; TEST ACTION_FLAG, READING_FLAG ;show message? +; $IF NZ ;yes. +; MOV AX,MSG_READING_SOURCE ;AN000; message number +; MOV MSG_NUM,AX ;AN000; set message number +; MOV SUBST_COUNT,0 ;AN000; no message substitution +; MOV MSG_CLASS,-1 ;AN000; message class +; MOV INPUT_FLAG,0 ;AN000; no input +; MOV AX,MSG_READING_SOURCE +; CALL PRINT_STDOUT ;show message "Reading source files" +; +; AND ACTION_FLAG, RESET_READING ;reset it +;;;;;;; $ENDIF + + AND FILE_FLAG, RESET_READFILE ;AN000;reset file_flag to read a file + MOV AX,FILE_DTA.DTA_FILE_SIZE_HIGH;AN000; + MOV HIGH_FILE_SIZE, AX ;AN000; + MOV AX,FILE_DTA.DTA_FILE_SIZE_LOW;AN000; + MOV LOW_FILE_SIZE, AX ;AN000; + + MOV AX, PARA_OF_HDR ;AN005;GET THE HEADER SIZE (para.) + CMP MAX_BUFFER_SIZE,AX ;AN005;IS EA BUFFER TOO LARGE? + JB RIB_ERROR ;AN005;CLOSE THE FILE AND GET THE NEXT + + CALL CMP_FILESIZE_TO_BUFFER_LEFT ;AN000;compare sizes + TEST FILE_FLAG, FILE_BIGGER_FLAG ;AN000;filesize > buffer_left - header? + JZ RIB_SMALL ;AN000;if not, then small file + MOV BX, S_HANDLE ;AN005; + CALL CLOSE_A_FILE ;AN005;ONLY OPENED TO GET BUFFER SIZE + CALL WRITE_FROM_BUFFER;AN000; + + .IF < SOURCE_IN EQ NO > AND ;AN111;JW + .IF < DEST EQ 3 > ;AN111;JW + CALL GET_SOURCE ;AN111;JW put source diskette in A: + .ENDIF ;AN111;JW + +; JC RIB_ERROR ;any problem with writing? + CALL CMP_FILESIZE_TO_BUFFER_LEFT ;AN000;compare again + TEST FILE_FLAG, FILE_BIGGER_FLAG ;AN000;still bigger? + JNZ RIB_BIG ;AN000;yes. Big file +RIB_SMALL: ;AN000; + CALL SMALL_FILE;AN000; + JC RIB_ERROR ;AN000; + JMP RIB_EXIT ;AN000; +RIB_BIG: ;AN000; + MOV BX, S_HANDLE ;AN005; + CALL CLOSE_A_FILE ;AN005;ONLY OPENED TO GET BUFFER SIZE + CALL BIG_FILE ;AN000; + JNC RIB_EXIT ;AN000; +RIB_ERROR: ;AN000; + TEST COPY_STATUS, OPEN_ERROR_FLAG ;AN000;open error? + JNZ RIB_EXIT ;AN000;just exit. find next file + MOV BX, S_HANDLE ;AN000;else write error + CALL CLOSE_A_FILE ;AN000;close the troubled file + ;and find next file +RIB_EXIT: ;AN000; + TEST MY_FLAG, SINGLE_COPY_FLAG ;AN000;single copy? +; $IF NZ + JZ $$IF4 ;AN000; + CALL WRITE_FROM_BUFFER ;AN000;then write a file +; $ENDIF +$$IF4: ;AN000; + RET ;AN000; +READ_INTO_BUFFER ENDP ;AN000; +; + +SMALL_FILE PROC NEAR ;AN000; +;handles a file smaller than max_buffer_size or buffer_left, i.e. fit in memory. +;This routine will call MAKE_HEADER, SET_BUFFER_PTR< READ_A_FILE, OPEN_A_FIEL +;CALC_FILE_SIZE, CMP_FILE_FFD0h, CLOSE_A_FILE. + + TEST FILE_FLAG, BIG_FILE_FLAG ;AN000;called from BIG_FILE? + JNZ SMF_CONT ;AN000;then need not open a file again + CALL OPEN_A_FILE ;AN000;open a file using FILE_DTA + JC SMF_ERROR ;AN000;open error? +SMF_CONT: ;AN000; + CALL CMP_FILE_FFD0h ;AN000;filesize > 0FFD0h ? + TEST FILE_FLAG, FILE_BIGGER_FLAG;AN000; + JZ SMF_EOF ;AN000;filesize <= 0FFD0h + OR FILE_FLAG, CONT_FLAG ;AN000;filesize > 0FFD0h. set cont_flag + MOV CX, 0FFD0h ;AN000;# of bytes to read + CALL READ_A_FILE;AN000; + JC SMF_ERROR ;AN000;unsuccessful read? + CALL MAKE_HEADER ;AN000;else make header and ready for next + CALL CALC_FILE_SIZE ;AN000;filesize = filesize - bytes read + JMP SMF_CONT ;AN000;loop. compare again with the rest + +SMF_EOF: ;AN000; + MOV CX, LOW_FILE_SIZE ;AN000;rest of the bytes to read + OR FILE_FLAG, EOF_FLAG ;AN000;set EOF + CALL READ_A_FILE ;AN000; + JC SMF_ERROR ;AN000; + CALL MAKE_HEADER ;AN000; + MOV BX, S_HANDLE ;AN000; + CALL CLOSE_A_FILE ;AN000; + JMP SMF_EXIT ;AN000; +SMF_ERROR: ;AN000; + ; +SMF_EXIT: ;AN000; + RET ;AN000; +SMALL_FILE ENDP ;AN000; +; + +BIG_FILE PROC NEAR ;AN000; +;handles a file which is bigger than max_buffer_size +;Needs 2 file handles open concurrently for read and write + + OR FILE_FLAG, BIG_FILE_FLAG;AN000; + OR FILE_FLAG, CONT_FLAG;AN000; + CALL OPEN_A_FILE ;AN000; + JC BIF_ERROR ;AN000;error in open? + CMP MAX_BUFFER_SIZE, 0FFFh ;AN000;max buffer size > 0FFFh in para ? + JA BIF_BIG ;AN000;yes. large buffer system + ;else small buffer + MOV CX, MAX_CX ;AN000;CX = max_buffer_size * 16 - 32 +BIF_SM: ;AN000; + CALL READ_A_FILE;AN000; + JC BIF_ERROR ;AN000;read error? + CALL MAKE_HEADER;AN000; + CALL WRITE_FROM_BUFFER;AN000; + JC BIF_ERROR ;AN000;write error? + TEST FILE_FLAG, EOF_FLAG ;AN000;end of file set by READ_A_FILE? + JZ BIF_SM ;AN000;if not, read again + MOV BX, S_HANDLE;AN000; + CALL CLOSE_A_FILE;AN000; + JMP BIF_EXIT ;AN000;finished. +BIF_BIG: ;AN000; + MOV CX, 0FFD0h ;AN000;max # of data bytes this program supports +BIF_BIG1: ;AN000; + CALL READ_A_FILE;AN000; + JC BIF_ERROR ;AN000; + CALL MAKE_HEADER;AN000; + CALL CALC_FILE_SIZE ;AN000;modify file size +BIF_BIG2: ;AN000; + CALL CMP_FILESIZE_TO_BUFFER_LEFT ;AN000;filesize > buffer_left? + TEST FILE_FLAG, FILE_BIGGER_FLAG ;AN000;yes. + JZ BIF_END ;AN000;if it is not, call small_file + CMP BUFFER_LEFT, 0FFFh ;AN000;BUFFER_LEFT >= 0FFF0h in bytes? + JAE BIF_BIG ;AN000;then loop again. + CMP BUFFER_LEFT, 140H ;AN000;else BUFFER_LEFT >= 5 K in bytes? ;minimum buffer size this program supports. + JL BIF_BIG3 ;AN000;then flush buffer and try again. **IF system buffer left < 5 K then infinit loop can happen. + MOV AX,BUFFER_LEFT;AN000; + SUB AX,PARA_OF_HDR ;AC005;FOR HEADER SIZE para. + MOV CX,BYTS_OF_HDR ;AN005;FOR HEADER SIZE bytes. + JMP BIF_BIG1 ;AN000;read again +BIF_BIG3: ;AN000; + CALL WRITE_FROM_BUFFER;AN000; + JC BIF_ERROR ;AN000; + JMP BIF_BIG2 ;AN000;flush buffer and compare again. +BIF_END: ;AN000; + CALL SMALL_FILE ;AN000;when filesize <= buffer_left then SMALL_FILE will finish it. + JC BIF_ERROR ;AN000;something wrong? + CALL WRITE_FROM_BUFFER ;AN000;else finish copying this file + JNC BIF_EXIT ;AN000; +BIF_ERROR: ;AN000; + ;what happened? +BIF_EXIT: ;AN000; + RET ;AN000; +BIG_FILE ENDP ;AN000; +; +MAKE_HEADER PROC NEAR ;AN000; +;When called by READ_A_FILE after the data had been read into the buffer, this +;routine will put the header which is just below the data area where the +;current BUFFER_PTR points. The header is 32 (2 para) byte long. And this +;routine will also call SET_BUFFER_PTR to set the BUFFER_PTR, BUFFER_LEFT +;for the next process. +;If called by TREE_COPY for a SUBDIRECTORY handle, this routine should +;check the BUFFER_LEFT (when called by READ_A_FILE, the caller is assumed +;to check the size of buffer_left before calling.) In this case, this +;routine will set the next BUFFER_PTR, BUFFER_LEFT, OLD_BUFFER_PTR +;instead of SET_BUFFER_PTR routine. +;Informations are obtained from the DTA area (for file - FILE_DTA.xxx +;dir - DS:[BP].xxx ) and stored into the header by referencing ES:field;s name. +;DS - Program Data area +;ES - will be used for a header segment in the buffer. +; + PUSH ES ;AN000;save ES + PUSH AX ;AN000; + +MH_AGAIN: ;AN000; + MOV AX,BUFFER_PTR ;AN000;buffer_ptr is a segment + MOV ES, AX ;AN000;now, ES is a header seg. +; + MOV AX, PARA_OF_HDR ;AN005;GET THE HEADER SIZE (para.) + CMP BUFFER_LEFT,AX ;AC005;buffer_left=less than NEEDED? + JAE MH_START ;AN000; + CALL WRITE_FROM_BUFFER ;AN000;if so, flush buffer + JC MH_ERROR_BRIDGE ;AN000;write error? + JMP SHORT MH_AGAIN ;AN000;reinitialize ES to new buffer ptr +MH_START: ;AN000; + TEST MY_FLAG, FINDFILE_FLAG ;AN000;identify caller. + JNZ MH_FILE ;AN000;if a file, jmp to MH_FILE + ;else deals with directory. + MOV ES:CONTINUE_INFO, 0 ;AN000;not a continuation. + MOV AX,OLD_BUFFER_PTR ;AN000; + MOV ES:BEFORE_PTR, AX ;AN000;set before_ptr in header + MOV AX,BUFFER_PTR ;AN000; + MOV OLD_BUFFER_PTR, AX ;AN000;set variable OLD_BUFFER_PTR + ADD AX,PARA_OF_HDR ;AC005;AX = BUFFER_PTR+HEADER(para) + MOV BUFFER_PTR, AX ;AN000;set new BUFFER_PTR + MOV ES:NEXT_PTR, AX ;AN000;set NEXT_PTR in the header + MOV AX, PARA_OF_HDR ;AN005;GET THE HEADER SIZE (para.) + SUB BUFFER_LEFT,AX ;AC005;adjust BUFFER_LEFT + CMP BUFFER_LEFT,AX ;AC005;less than HEADER SIZE (para) ? +; $IF B + JNB $$IF6 ;AN000; + MOV BUFFER_LEFT, 0 ;AN000;indicate buffer_full +; $ENDIF +$$IF6: ;AN000; + MOV AL, S_DEPTH ;AN000; + MOV ES:DIR_DEPTH, AL ;AN000;now save other info's + MOV AL, DS:[BP].DTA_ATTRIBUTE;AN000; + MOV ES:ATTR_FOUND, AL ;AN000;in this case, DIR + MOV AL, BYTE PTR T_DRV;AN000; + MOV ES:TARGET_DRV_LET, AL ;AN000;mov target drive letter + MOV ES:TARGET_DRV_LET+1, DRV_delim ;AN000; ':' + MOV CX, 13 ;AN000; + LEA SI, [BP].DTA_FILENAME ;AN000;DS:SI + MOV DI, OFFSET ES:FILENAME_FOUND ;AN000;ES:DI + REP MOVSB ;AN000;mov sting until cx = 0 + JMP MH_EXIT ;AN000; +MH_ERROR_BRIDGE: JMP MH_ERROR;AN000; +MH_FILE: ;AN000;handles a file header hereafter. + TEST FILE_FLAG, CONT_FLAG ;AN000;continuation? + JZ MH_WHOLE_FILE ;AN000;no, just a whole file + TEST FILE_FLAG, EOF_FLAG ;AN000;Eof flag set? + JNZ MH_CONT_END ;AN000;yes, must be end of continuation + TEST FILE_FLAG, BIG_FILE_FLAG ;AN000;Is this a big file? + JNZ MH_BIG ;AN000;yes + MOV ES:CONTINUE_INFO, 1 ;AN000;else small file continuation. + JMP MH_A_FILE ;AN000; +MH_WHOLE_FILE: ;AN000; + MOV ES:CONTINUE_INFO, 0 ;AN000; + JMP MH_A_FILE ;AN000; +MH_CONT_END: ;AN000; + MOV ES:CONTINUE_INFO, 3 ;AN000; + JMP MH_A_FILE ;AN000; +MH_BIG: ;AN000; + MOV ES:CONTINUE_INFO, 2 ;AN000; +MH_A_FILE: ;AN000; + MOV AX,FILE_DTA.DTA_FILE_TIME;AN000; + MOV ES:FILE_TIME_FOUND, AX;AN000; + MOV AX, FILE_DTA.DTA_FILE_DATE;AN000; + MOV ES:FILE_DATE_FOUND, AX;AN000; + MOV AX, FILE_DTA.DTA_FILE_SIZE_LOW;AN000; + MOV ES:LOW_SIZE_FOUND, AX;AN000; + MOV AX, FILE_DTA.DTA_FILE_SIZE_HIGH;AN000; + MOV ES:HIGH_SIZE_FOUND, AX;AN000; + MOV AL, BYTE PTR T_DRV ;AN000; + MOV ES:TARGET_DRV_LET, AL;AN000; + MOV ES:TARGET_DRV_LET+1, DRV_DELIM;AN000; + MOV CX, 13 ;AN000; + MOV SI, OFFSET FILE_DTA.DTA_FILENAME;AN000; + MOV DI, OFFSET ES:FILENAME_FOUND;AN000; + REP MOVSB ;AN000; + +; Get Extended Attribute list of the opened file and save in attribute buff. + +; old method +; MOV AX,INT_ORDINAL ;AN000; SET THE ORDINAL TO 0 +; MOV ES:QUERY_LIST,AX ;AN000; PUT IT IN THE BUFFER +; MOV AX,SIZ_OF_BUFF ;AN000; SET THE SIZE TO 510 BYTES +; MOV ES:BUFR_SIZ,AX ;AN000; PUT IT IN THE BUFFER +; +; MOV BX,S_HANDLE ;AN000; BX = handle +; MOV AX, QUY_ATTRIB ;AN000; extended attribute code 5703H +; MOV DI, OFFSET QUERY_LIST ;AN000; ES:DI-->QUERY list +; INT 21H ;AN000; get extended attribute list +; + MOV BX,S_HANDLE ;AN005; BX = handle + MOV SI,ALL_ATTR ;AN005; SELECT ALL ATTRIBUTES SIZE + MOV CL, PARAGRAPH ;AN005; PARAGRAPH = 4 FOR DIV BY 16 + MOV AX,SIZ_OF_BUFF ;AN005; GET THE SIZE EXPRESSED IN para. + SHL AX, CL ;AN005; GET # OF BYTES FROM para. + MOV CX, AX ;AN005; NEEDS TO BE IN CX + MOV DI, OFFSET ES:ATTRIB_LIST ;AN005; ES:DI = E A LIST IN BUFFER + MOV AX, GET_ATTRIB ;AN005; extended attribute code 5702H + INT 21H ;AN005; get extended attribute list + +; JC MH_ERROR ;AN000; jump if error + + MOV AX, OLD_BUFFER_PTR;AN000; + MOV ES:BEFORE_PTR, AX;AN000; + MOV AX, ACT_BYTES;AN000; + MOV ES:CX_BYTES, AX;AN000; + CALL SET_BUFFER_PTR ;AN000;set buffer_ptr for next. AX is already set. + MOV AX, BUFFER_PTR ;AN000; + MOV ES:NEXT_PTR, AX ;AN000;next buffer_ptr is next_ptr + MOV AL, S_DEPTH ;AN000; + MOV ES:DIR_DEPTH, AL ;AN000;same as source depth + MOV AL, FILE_DTA.DTA_ATTRIBUTE;AN000; + MOV ES:ATTR_FOUND, AL ;AN000;attribute found + JMP MH_EXIT ;AN000; +MH_ERROR: ;AN000; + OR COPY_STATUS, OPEN_ERROR_FLAG ;AN000; + CALL EXTENDED_ERROR_HANDLER ;AN000; +MH_EXIT: ;AN000; + POP AX ;AN000; + POP ES ;AN000; + RET ;AN000; +MAKE_HEADER ENDP ;AN000; +; + +OPEN_A_FILE PROC NEAR ;AN000; + +;------------------------------------------------------------------------- +; Use extended open DOS call to open source file, +; if successfully open, then save filehand to S_HANDLE. +;------------------------------------------------------------------------- +; Set drive letter and file name pointer in parameter list + LEA SI,FILE_DTA.DTA_FILENAME ;AN005; DS:SI-->NAME TO OPEN + MOV DX,OPN_FLAG ;AN000; flag = 0101H + MOV CX,OPN_ATTR ;AN000; attribute = 0 + MOV BX,OPN_MODE ;AN000; open mode = 0002H + MOV DI, NUL_LIST ;AN005; ES:DI = -1 + MOV AX, Ext_Open ;AN000; = 6Ch + INT 21H ;AN000; OPEN SOURCE FILE + + JC OF_ERROR;AN000; + MOV S_HANDLE, AX ;AN000;save filehandle + INC OPEN_FILE_COUNT ;AN005;UPDATE THE OPEN FILE COUNTER + + + JMP OF_EXIT ;AN000; exit + +OF_ERROR: ;AN000; + OR COPY_STATUS, OPEN_ERROR_FLAG;AN000; + CALL EXTENDED_ERROR_HANDLER;AN000; +OF_EXIT: ;AN000; + RET ;AN000; +OPEN_A_FILE ENDP;AN000; +; + + +CMP_FILE_FFD0h PROC NEAR;AN000; +;check whether the filesize in HIGH_FILE_SIZE, LOW_FILE_SIZE is bigger than +;0FFD0h. If it is, then set FILE_BIGGER_FLAG, else reset it. + CMP HIGH_FILE_SIZE, 0;AN000; +; $IF E,AND + JNE $$IF8 ;AN000; + CMP LOW_FILE_SIZE, 0FFD0h;AN000; +; $IF BE + JNBE $$IF8 ;AN000; + AND FILE_FLAG, RESET_FILE_BIGGER ;AN000;filesize <= 0FFD0h +; $ELSE + JMP SHORT $$EN8 ;AN000; +$$IF8: ;AN000; + OR FILE_FLAG, FILE_BIGGER_FLAG ;AN000; +; $ENDIF +$$EN8: ;AN000; + RET ;AN000; +CMP_FILE_FFD0h ENDP ;AN000; +; + +CALC_FILE_SIZE PROC NEAR ;AN000; +;subtract the bytes read (ACT_BYTES) from the filesize in HIGH_FILE_SIZE, +;LOW_FILE_SIZE. + MOV AX, ACT_BYTES ;AN000; + SUB LOW_FILE_SIZE, AX ;AN000; + SBB HIGH_FILE_SIZE, 0 ;AN000; + RET ;AN000; +CALC_FILE_SIZE ENDP ;AN000; +; + +READ_A_FILE PROC NEAR ;AN000; +;read a file. +;if after reading, AX < CX or AX = 0 the set EOF_FLAG. +;INPUT:CX - # of bytes to read +; BUFFER_PTR +; S_HANDLE +;OUTPUT: ACT_BYTES + +; .IF < SOURCE_IN EQ NO > AND +; .IF < DEST EQ 3 > +; CALL GET_SOURCE +; .ENDIF + + PUSH DS ;AN000;save program data seg + MOV AH, Read;AN000; + MOV BX, S_HANDLE;AN000; + MOV DX, BUFFER_PTR ;AN000;current buffer header seg + ADD DX, PARA_OF_HDR ;AC005;skip the header part + MOV DS, DX ;AN000;now DS = buffer_ptr + 2, data area + XOR DX, DX ;AN000;offset DX = 0 + INT 21H ;AN000; + POP DS ;AN000;restore program data area + JC RF_ERROR ;AN000;read error? + CMP AX, CX ;AN000; + JE RF_OK ;AN000; + OR FILE_FLAG, EOF_FLAG ;AN000;EOF reached. AX = 0 or AX < CX +RF_OK: ;AN000; + CLC ;AN000;clear carry caused from CMP + MOV ACT_BYTES, AX ;AN000;save actual bytes read + JMP RF_EXIT ;AN000; +RF_ERROR: ;AN000; + OR COPY_STATUS, READ_ERROR_FLAG;AN000; + CALL EXTENDED_ERROR_HANDLER;AN000; +RF_EXIT: ;AN000; + RET ;AN000; +READ_A_FILE ENDP ;AN000; +; + +FIND_IT PROC NEAR ;AN000; +;set first or next depending on FIND_FIRST_FLAG. +;once called, reset FIND_FIRST_FLAG. + TEST MY_FLAG, FIND_FIRST_FLAG;AN000; +; $IF NZ ;yes + JZ $$IF11 ;AN000; + MOV AH, Find_First;AN000; +; $ELSE + JMP SHORT $$EN11 ;AN000; +$$IF11: ;AN000; + MOV AH, Find_Next;AN000; +; $ENDIF +$$EN11: ;AN000; + AND MY_FLAG, RESET_FIND_FIRST ;AN000;reset FIND_FIRST_FLAG + INT 21H ;AN000; + RET ;AN000; +FIND_IT ENDP ;AN000; +; +FIND_FILE PROC NEAR ;AN000; +;find a file +;set NO_MORE_FILE if carry. +; $SEARCH + +; PUSH DS +; MOV DX,DATA +; MOV DS,DX +; .IF < SOURCE_IN EQ NO > AND +; .IF < DEST EQ 3 > +; CALL GET_SOURCE +; .ENDIF +; POP DS + +$$DO14: ;AN000; + TEST MY_FLAG, FIND_FIRST_FLAG ;AN000;find first ? +; $IF NZ + JZ $$IF15 ;AN000; + MOV DX, OFFSET S_FILE ;AN000; + MOV CX, File_Search_Attr ;AN000;normal = 0 +; $ELSE + JMP SHORT $$EN15 ;AN000; +$$IF15: ;AN000; + MOV DX, OFFSET FILE_DTA ;AN000; +; $ENDIF +$$EN15: ;AN000; + CALL FIND_IT ;AN000; +; $EXITIF C + JNC $$IF14 ;AN000; + OR MY_FLAG, NO_MORE_FILE ;AN000;no more file in this directory +; $ORELSE + JMP SHORT $$SR14 ;AN000; +$$IF14: ;AN000; + MOV FOUND_FILE_FLAG, 1 ;AN000;set the flag for "File not found" msg. + OR MY_FLAG, FOUND_FLAG ;AN000; SAR +;;;;;;; CALL FILTER_FILES ;found. filter it with options + TEST MY_FLAG, FOUND_FLAG ;AN000; +; $ENDLOOP NZ ;if found, leave this loop else start again + JZ $$DO14 ;AN000; + AND MY_FLAG, RESET_NO_MORE;AN000; +; $ENDSRCH +$$SR14: ;AN000; + RET ;AN000; +FIND_FILE ENDP ;AN000; +; +SET_MY_DTA PROC NEAR ;AN000; +;set DS:DX for find_first(next). If MY_FLAG is set to FINDFILE_FLAG then +;set it to the offset FILE_DTA, otherwise to BP. +;DS should be set to the area whre FILE_DTA, DTAS are. + PUSH DX ;AN000;save current DX + TEST MY_FLAG, FINDFILE_FLAG ;AN000;handling file? +; $IF NZ + JZ $$IF22 ;AN000; + MOV DX, OFFSET FILE_DTA;AN000; +; $ELSE + JMP SHORT $$EN22 ;AN000; +$$IF22: ;AN000; + MOV DX, BP ;AN000; +; $ENDIF +$$EN22: ;AN000; + MOV AH, Set_DTA ;AN000; + INT 21H ;AN000; + POP DX ;AN000; + RET ;AN000; +SET_MY_DTA ENDP ;AN000; +; +; +SAVE_DTA PROC NEAR ;AN000; +; Save old DTA address + PUSH ES ;AN000; + PUSH BX ;AN000; + MOV AH, Get_DTA ;AN000; + INT 21H ;AN000; + MOV OLD_DTA_SEG,ES ;AN000; + MOV OLD_DTA_OFF,BX ;AN000; + POP BX ;AN000; + POP ES ;AN000; + RET ;AN000; +SAVE_DTA ENDP ;AN000; +; +; +SWITCH_DTAS PROC NEAR ;AN000; +; SWITCH DTA ADDRESSES + PUSH DS ;AN000; + PUSH DX ;AN000; + PUSH OLD_DTA_SEG ;AN000; + PUSH OLD_DTA_OFF ;AN000; + CALL SAVE_DTA ;AN000; + POP DX ;AN000; + POP DS ;AN000; + MOV AH, Set_DTA ;AN000; + INT 21H ;AN000; + POP DX ;AN000; + POP DS ;AN000; +SWITCH_DTAS ENDP ;AN000; +; +; +CHANGE_T_DIR PROC NEAR ;AN000; +;change target dir according to t_drv_path. +;Since this routine is called by WRITE_FROM_BUFFER and DS now points +;to buffer area while ES points to the program data area, we set DS +;to data seg again here for the function call Chdir. + PUSH DS ;AN000;save current buffer seg + PUSH ES ;AN000;currentpy es is a data seg + POP DS ;AN000;restore DS value as program data seg + + CMP T_DRV[2], 0 ;AN000;LAST_DIR_OUT took '\' out? +; $IF E + JNE $$IF25 ;AN000; + MOV T_DRV[2], '\' ;AN000;then put it back for root dir + MOV T_DRV[3], 0 ;AN000; +; $ENDIF +$$IF25: ;AN000; + + MOV DX, OFFSET T_DRV_PATH ;AN000; + MOV AH, CHDIR ;AN000; + INT 21H ;AN000; + + POP DS ;AN000;restore caller's DS value + RET ;AN000; +CHANGE_T_DIR ENDP;AN000; +; + +CMP_FILESIZE_TO_BUFFER_LEFT PROC NEAR;AN000; +;Compare buffer_left (paragraph) with filesize (high_file_size, low_file_size.) +;if filesize is bigger than buffer_left, then set FILE_BIGGER_FLAG +;indicating filesize > buffer_left. + PUSH DX ;AN000; + PUSH AX ;AN000; + + CMP OPEN_FILE_COUNT,NUL ;AN005;ARE THERE ANY OPEN FILES +; $IF Z ;AN005;NO, THEN GO AHEAD AND OPEN + JNZ $$IF28A ;AN000; + CALL OPEN_A_FILE ;AN005;OPEN A FILE USING FILE_DTA + +; Get extended Attribute list size. + + MOV BX,S_HANDLE ;AN005; BX = handle + MOV AX, GET_ATTRIB ;AN005; extended attribute code 5702H + MOV SI,ALL_ATTR ;AN005; SELECT ALL ATTRIBUTES SIZE + XOR CX,CX ;AN005; JUST QUERY SIZE NEEDED + MOV DI, OFFSET NUL_LIST ;AN005; DI = LIST FOR NO DATA RETURNED + INT 21H ;AN005; get extended attribute SIZE + ADD CX,PARA_BOUND ;AN005; TO FIGURE THE NEXT PARAGRAPH + MOV AX,CX ;AN005; + MOV CL,PARAGRAPH ;AN005; GET PARAGRAPHS (DIV BY 16) + SHR AX,CL ;AN005; + MOV SIZ_OF_BUFF,AX ;AN005;SAVE BUFF SIZE FOR THE HEADER + ADD AX,FIXD_HD_SIZ ;AN005;GET THE TOTAL HEADER SIZE + MOV PARA_OF_HDR,AX ;AN005;SAVE FOR LATER + SHL AX, CL ;AN005;CONVERT BACK TO TOTAL BYTES + MOV BYTS_OF_HDR,AX ;AN005;SAVE FOR LATER + MOV BX,S_HANDLE ;AN005; + CALL CLOSE_A_FILE ;AN005;CLOSE THE FILE OPENED +; $ENDIF +$$IF28A: ;AN000; + + AND FILE_FLAG, RESET_FILE_BIGGER;AN000; + MOV AX,PARA_OF_HDR ;AN005;GET THE HEADER SIZE (para.) + CMP BUFFER_LEFT,AX ;AC005;buffer_left >= HEADER SIZE +; $IF AE + JNAE $$IF27 ;AN000; + MOV AX, BUFFER_LEFT ;AN000;buffer_left in para + SUB AX,PARA_OF_HDR ;AC005;consider header size in advance + MOV CX, 16 ;AN000; + MUL CX ;AN000;* 16. result in DX;AX + CMP HIGH_FILE_SIZE, DX;AN000; +; $IF A ;if high_filesize > dx + JNA $$IF28 ;AN000; + OR FILE_FLAG, FILE_BIGGER_FLAG;AN000; +; $ELSE + JMP SHORT $$EN28;AN000; +$$IF28: ;AN000; +; $IF E + JNE $$IF30 ;AN000; + CMP LOW_FILE_SIZE, AX;AN000; +; $IF A + JNA $$IF31 ;AN000; + OR FILE_FLAG, FILE_BIGGER_FLAG;AN000; +; $ENDIF +$$IF31: ;AN000; +; $ENDIF +$$IF30: ;AN000; +; $ENDIF +$$EN28: ;AN000; +; $ELSE + JMP SHORT $$EN27 ;AN000; +$$IF27: ;AN000; + OR FILE_FLAG, FILE_BIGGER_FLAG ;AN000;buffer_left < 2 +; $ENDIF +$$EN27: ;AN000; + POP AX ;AN000; + POP DX ;AN000; + RET ;AN000; +CMP_FILESIZE_TO_BUFFER_LEFT ENDP ;AN000; +; + +SET_BUFFER_PTR PROC NEAR ;AN000; +;set BUFFER_PTR, BUFFER_LEFT, OLD_BUFFER_PTR in paragraph boundary +;to be used when reading a file into buffer. +;this routine uses current BUFFER_PTR to figure out the next BUFFER_PTR. +;So, at initialization time set BUFFER_PTR to CS, and set AX to the offset +;of INIT, then thr resultant BUFFER_PTR indicates the BUFFER_BASE and +;OLD_BUFFER_PTR indicates CS.(This means if old_buffer_ptr = cs, then +;it is the start of buffer) +;To get the next BUFFER_PTR during multi-copy, just set the AX to the +;number of bytes read. This routine will add 32 bytes for header size and +;will set the next BUFFER_PTR. +;input: AX - offset of buffer +; Top_of_memory in segment +; current BUFFER_PTR +; current OLD_BUFFER_PTR +; current BUFFER_LEFT +;output: BUFFER_PTR for next reading +; OLD_BUFFER_PTR +; BUFFER_LEFT (Top_of_memory - Buffer_Ptr. If it is 0, then indicates +; the BUFFER is FULL. In this case, the BUFFER_PTR is +; invalid, but OLD_BUFFER_PTR keep the former buffer_ptr +; value which says that it is the last header in the buffer) +;** Currently this program support maxium top of memory in seg 0FFFF - resident +; area. This routine will check the overflow case to gaurd the next buffer_ptr +; not to exceed FFFF. + + PUSH CX ;AN000; + MOV CX, BUFFER_PTR ;AN000; + MOV OLD_BUFFER_PTR, CX ;AN000;set old_buffer_ptr + MOV CL, 4 ;AN000; + SHR AX, CL ;AN000;get paragraphs + INC AX ;AN000;get next paragraph + ADD AX,PARA_OF_HDR ;AC005;consider header size + ADD BUFFER_PTR, AX ;AN000;add this to the current buffer_ptr + +; $IF NC,AND ;not exceed 16 bit. + JC $$IF37 ;AN000; + MOV AX, Top_of_memory;AN000; + SUB AX, BUFFER_PTR ;AN000;AX = Top_of_memory - Buffer_ptr +; $IF A ;if buffer_left > 0 + JNA $$IF37 ;AN000; + MOV BUFFER_LEFT, AX;AN000; +; $ELSE + JMP SHORT $$EN37 ;AN000; +$$IF37: ;AN000; + MOV BUFFER_LEFT, 0 ;AN000;indication of buffer full +; $ENDIF +$$EN37: ;AN000; + POP CX ;AN000; + RET ;AN000; +SET_BUFFER_PTR ENDP ;AN000; +; + +WRITE_FROM_BUFFER PROC NEAR ;AN000; +;Write from the first header starting at buffer_base until finishes +;the last header which, actually, happens to be the old_buffer_ptr +;at the time of the call. After the writing, reset the buffer_ptr +;to buffer_base again for the next read_into_buffer. +;If continue_info is 1 or 2 (Continue of small, bigfile) then after +;the creation of a target file, it will set the CREATED_FLAG. +;This flag will be reset when it found the continue_info to be 3 +;(End of contine). +;For convenience of use of function call, ES will be used for +;the program data seg while DS will be used for the BUFFER seg. +; + PUSH DS ;AN000; + PUSH ES ;AN000;save ds, es + + PUSH DS ;AN000; + POP ES ;AN000;set ES to program data seg + + OR ACTION_FLAG, READING_FLAG ;AN000;show reading message next time +; AND ES:MY_FLAG, RESET_IS_SOURCE ;now, deals with target + ;set this for change_dir + MOV AX, ES:BUFFER_BASE ;AN000; + MOV DS, AX ;AN000; + PUSH CS ;AN000; + POP AX ;AN000; + CMP ES:OLD_BUFFER_PTR, AX ;AN000;if old_buffer_ptr = CS then + ;buffer is empty. Just exit + JE WFB_EXIT_BRIDGE ;AN000; + + PUSH DS ;AN000; + MOV DX,DATA ;AN000; + MOV DS,DX ;AN000; + .IF < DEST eq 3 > ;AN000; + CALL GET_DEST ;AN000; + .ENDIF ;AN000; + POP DS ;AN000; + +WFB_CD: ;AN000; + CALL CHANGE_T_DIR ;AN000; + JC WFB_ERROR_BRIDGE ;AN000;error? +WFB_CHATT: ;AN000; + CMP DS:ATTR_FOUND, Is_subdirectory ;AN000;a subdirectory? = 10H + JNE WFB_FILE ;AN000;no. a file + +WFB_CMP_DEPTH: ;AN000; +;  SAR  +;;;;;;; +; MOV AH, ES:T_DEPTH ;yes. a subdir. +; CMP DS:DIR_DEPTH, AH ;DIR_DEPTH > T_DEPTH ? +; JBE WFB_DEC_DEPTH ;if not, go to parent node +; LEA DI, ES:T_DRV_PATH ;else goto child node +; LEA SI, DS:FILENAME_FOUND +; CMP ES:T_PATH, 0 ;root directory? +; $IF E +; MOV AL, 0FFh ;then don't need to put delim since it is already there +; $ELSE +; MOV AL, Path_delim ;path_delim '\' +; $ENDIF +; CALL CONCAT_ASCIIZ +; call concat_display_path ;modify the path for display +; INC ES:T_DEPTH +; CALL MAKE_DIR ;try to make a new sub directory +; JC WFB_EXIT_A_BRIDGE ;there exists a file with same name. +; MOV AX, DS ;current buffer seg = old_buffer_ptr? +; CMP ES:OLD_BUFFER_PTR, AX +; JNE WFB_NEXT ;not finished yet. jmp to next +; OR ES:MY_FLAG, MISSING_LINK_FLAG ;Finished. Missing link condition occurred regarding empty sub dir +; JMP WFB_EXIT_A ;check archieve options. +WFB_NEXT: ;AN000; +; MOV DS, DS:NEXT_PTR ;let's handles next header. +; JMP WFB_CD ;change directory first. +WFB_EXIT_BRIDGE: JMP WFB_EXIT;AN000; +WFB_ERROR_BRIDGE: JMP WFB_ERROR;AN000; +WFB_EXIT_A_BRIDGE: JMP WFB_EXIT_A;AN000; +WFB_DEC_DEPTH: ;AN000; +; LEA DI, ES:T_DRV_PATH +; CALL RM_EMPTY_DIR ;check flags and remove empty dir +; CALL LAST_DIR_OUT ;take off the last dir from path +; call cut_display_path ;modify path for display purpose +;;;;;; DEC ES:T_DEPTH ;and decrease depth + JMP WFB_CD ;AN000;CHANGE DIR AND compare the depth again. + + +WFB_FILE: ;AN000;Handling a file + AND ES:MY_FLAG, RESET_MISSING_LINK ;AN000;if found a file, then current dir is not empty. + TEST ES:FILE_FLAG, CREATED_FLAG ;AN000; A file handle is created ? + JNZ WFB_WRITE ;AN000;yes, skip create again. + CALL CREATE_A_FILE ;AN000;create a file in the cur dir + JC WFB_ERROR ;AN000;file creation error? +WFB_WRITE: ;AN000; + CALL WRITE_A_FILE;AN000; + JC WFB_EXIT_A ;AN000;target file has been already deleted. + CMP DS:CONTINUE_INFO, 0;AN000; +; $IF E,OR ;if continue_info = 0 or 3 + JE $$LL40 ;AN000; + CMP DS:CONTINUE_INFO, 3;AN000; +; $IF E + JNE $$IF40 ;AN000; +$$LL40: ;AN000; + MOV BX, ES:T_HANDLE;AN000; + CALL SET_FILE_DATE_TIME ;AN000;then set file's date, time + PUSH DS ;AN005;SAVE THE BUFFER PTR + PUSH ES ;AN005;WE NEED THE DATA PTR + POP DS ;AN005;DS = THE DATA PTR + CALL CLOSE_A_FILE ;AN000;and close the handle + POP DS ;AN005;DS = THE BUFFER PTR AGAIN +;;;;;;; CALL RESTORE_FILENAME_FOUND ; SAR if filename_found has been changed, restore it for reset_s_archieve. + AND ES:FILE_FLAG, RESET_CREATED ;AN000;and reset created_flag + CALL INC_FILE_COUNT ;AN000;increase file count +; $ENDIF +$$IF40: ;AN000; + MOV AX, DS ;AN000; + CMP ES:OLD_BUFFER_PTR, AX ;AN000;current header is the last one? + JE WFB_EXIT_A ;AN000;then exit + MOV DS, DS:NEXT_PTR ;AN000;else set ds to the next ptr + JMP WFB_CHATT ;AN000;handle the next header +WFB_ERROR: ;AN000; + jmp main_exit ;AN000;meaningful when MKDIR failed because + ;of there already exist same named file, + ;or disk_full case. +WFB_EXIT_A: ;AN000; + test ES:option_flag, slash_m ;AN000;hard archieve ? - turn off source archieve bit. + jz wfb_exit_B ;AN000;no, chk error flag and exit +;;;; call reset_s_archieve ; SAR reset source file(s) archieve bit using header info(s). +WFB_EXIT_B: ;AN000; + test ES:copy_status, mkdir_error_flag ;AN000;mkdir error happened? + JNZ WFB_ERROR ;AN000;yes, exit + test ES:copy_status, disk_full_flag ;AN000;disk full happened? + JNZ WFB_ERROR ;AN000;yes, exit +WFB_EXIT: ;AN000; + MOV ES:OLD_BUFFER_PTR, CS ;AN000;set old_buffer_ptr to CS + MOV AX, ES:BUFFER_BASE ;AN000; + MOV ES:BUFFER_PTR, AX ;AN000;set buffer_ptr to base + MOV AX, ES:MAX_BUFFER_SIZE;AN000; + MOV ES:BUFFER_LEFT, AX ;AN000;set buffer_left + POP ES ;AN000; + POP DS ;AN000; +;;;; TEST SYS_FLAG, ONE_DISK_COPY_FLAG ; SAR one drive letter copy? +; ; $IF NZ ; SAR yes +; ; CALL CHANGE_S_DIR ; SAR then change current dir to s dir +;;;; $ENDIF + RET ;AN000; +WRITE_FROM_BUFFER ENDP ;AN000; +; +INC_FILE_COUNT PROC NEAR;AN000; +;increase the file count by one. +;increase file_cnt_low, file_cnt_high. +;input: DS - buffer +; ES - data seg + INC ES:FILE_CNT_LOW ;AN000; + JNZ IFC_EXIT ;AN000; + INC ES:FILE_CNT_HIGH ;AN000;if carry over, then inc file_cnt_high +IFC_EXIT: ;AN000; + RET ;AN000; +INC_FILE_COUNT ENDP ;AN000; +; +CREATE_A_FILE PROC NEAR;AN000; +;create a file in the header and return the file handle in T_HANDLE. +;Set CREATED_FLAG. This will be reset by WRITE_FROM_BUFFER when it +;close the handle. +;this routine will check the T_FILENAME and T_TEMPLATE if any target +;filename has been entered. If T_FILENAME is there, then DX will +;points to this (This is the case when the user has specified non_global +;chr filename and any source filename be changed to this name.) +;If T_TEMPLATE is present, then modify the filename found in the +;header part. +;Also, this routine show copy messages just before a file creation using +;FILENAME_FOUND. +;ES - data seg +;DS - buffer seg + + PUSH DS ;AN000; + PUSH ES ;AN000; + +;  SAR  ;save the original filename from the header +;;;;; MOV CX, 13 ;max 13 chr +; LEA SI, DS:FILENAME_FOUND ;original source file name +; LEA DI, ES:DISP_S_FILE ;filename to be displayed +; REP MOVSB ;filename_found => disp_s_file +;;;;; test es:option_flag, slash_p ; SAR +;;;;; $IF Z ; SAR +;;;;; CALL SHOW_COPY_MESSAGE ; SAR he source path, file +;;;;; $ENDIF ; SAR +; +; CMP ES:T_FILENAME, 0 +; $IF NE ;non_global target filename entered. +; TEST ES:COPY_STATUS, MAYBE_ITSELF_FLAG +; $IF NZ +; LEA SI, DS:FILENAME_FOUND +; LEA DI, ES:T_FILENAME +; CALL COMP_FILENAME ;compare it. if same then show +; ;file cannot be copied onto itself and +; ;abort +; $ENDIF +; +; CALL SWITCH_DS_ES ;now ds - data, es - buffer +; MOV CX, 13 +; LEA SI, DS:T_FILENAME +; LEA DI, ES:FILENAME_FOUND +; REP MOVSB ; t_filename => filename_found +; CALL SWITCH_DS_ES ;now ds - buffer, es - data seg +; +; $ELSE +; CMP ES:T_TEMPLATE, 0 ;global chr target filename entered? +; $IF NE ;yes, entered. modify the filename found +;;;;; CALL MODIFY_FILENAME ; SAR +; TEST ES:COPY_STATUS, MAYBE_ITSELF_FLAG +; $IF NZ +; LEA SI, DS:FILENAME_FOUND ;compare the Revised filename +; LEA DI, ES:DISP_S_FILE ;with original name +; CALL COMP_FILENAME ;if same, then issue error message and exit +; $ENDIF +; $ELSE +; TEST ES:COPY_STATUS, MAYBE_ITSELF_FLAG ;*.* CASE +; $IF NZ +; PUSH ES +; POP DS ;ds - data seg +; +; ; Set message parameters +;;;;; MOV AX,MSG_COPY_ITSELF ; SAR +; MOV MSG_NUM,AX ; SAR ;AN000; set message number +; MOV SUBST_COUNT,0 ; SAR AN000; no message subst. +; MOV MSG_CLASS,-1 ; SAR AN000; message class +; MOV INPUT_FLAG,0 ; SAR AN000; no user input +; CALL PRINT_STDERR ; SAR AN000; display error +; JMP MAIN_EXIT +; $ENDIF +; $ENDIF +;;;;;; $ENDIF + +;------------------------------------------------------------------------- +; Use extended open DOS call to create the target file, use attribute list +; obtained from the previous Get Extended attribute DOS call +;------------------------------------------------------------------------- + +; SET ATTRIBUTE LIST POINTER IN PARAMETER LIST + MOV DX, OFFSET DS:ATTRIB_LIST ;AN005;E A BUFFER IN HEADER + MOV WORD PTR ES:E_A_LST,DX ;AN005; set offset + MOV WORD PTR ES:E_A_LST+WORD,DS ;AN005; set segment + + MOV AX, Ext_Open ;AN000; = 6Ch + MOV DX,CREATE_FLAG ;AN000; flag = 0111H + MOV BX,CREATE_MODE ;AN000;CREATE MODE = 0011H + MOV CX,CREATE_ATTR ;AN000; attribute = 0 + MOV SI,OFFSET TARGET_DRV_LET ;AN005; DS:SI-->NAME TO CREATE + LEA DI,ES:PARAM_LIST ;AN005;PARAMETER LIST (ES:DI) + INT 21H ;AN000; create file + + JC CAF_ERROR ;AN000; + MOV ES:T_HANDLE, AX ;AN000;save handle + +;;;;; CALL CHK_T_RES_DEVICE ; SAR check target handle is a reserved dev + + OR ES:FILE_FLAG, CREATED_FLAG ;AN000;set created_flag + JMP CAF_EXIT ;AN000; +CAF_ERROR: ;AN000; + PUSH DS ;AN000; + PUSH ES ;AN000; + POP DS ;AN000; + OR COPY_STATUS, CREATE_ERROR_FLAG;AN000; + CALL EXTENDED_ERROR_HANDLER ;AN000; + POP DS ;AN000; +CAF_EXIT: ;AN000; + POP ES ;AN000; + POP DS ;AN000; + RET ;AN000; +CREATE_A_FILE ENDP ;AN000; +; +;COMP_FILENAME PROC NEAR +;;this routine is called when MAYBE_COPY_ITSELF flag in on. +;;SI, DI asciiz string will be compared and if they are identical +;;the show "Cannot copy onto itself" msg and jmp to main_exit. +;;INPUT: DS - buffer +;; ES - data seg +; +; CLD +; MOV AL, 0 +; PUSH DI ;save DI +; CALL STRING_LENGTH ;CX get the length of string +; MOV BX, CX ;now, BX got the length of the target filename entered. +; PUSH BX ;save BX +; PUSH ES ;save ES +; +; PUSH DS +; POP ES ;now ES set to DS +; PUSH SI +; POP DI ;now DI points to the source filename found. +; +; MOV AL, 0 +; CALL STRING_LENGTH ;CX got the length of the string +; +; POP ES ;restore ES +; POP BX ;restore BX +; POP DI ;restore DI +; ;; +; CMP BX, CX ;COMPARE LENGTH +; JNE CF_EXIT ;IF THEY ARE DIFFERENT, EXIT +; +; REPE CMPSB ;compare SI, DI until not equal, +; CMP CX, 0 ;finish at cx = 0? +; JE CF_SAME +; JMP SHORT CF_EXIT +;CF_SAME: +; PUSH ES +; POP DS ;ds = data seg +; +;; Set message parameters +;;;;;; MOV AX,MSG_COPY_ITSELF ; SAR ;AN000; message number +;; MOV MSG_NUM,AX ; SAR AN000; set message number +;; MOV SUBST_COUNT,0 ; SAR AN000; no message substitution +;; MOV MSG_CLASS,-1 ; SAR AN000; message class +;;; MOV INPUT_FLAG,0 ; SAR AN000; no input +;; CALL PRINT_STDERR ; SAR AN000; display error message +; JMP MAIN_EXIT +;CF_EXIT: +; RET +;COMP_FILENAME ENDP +;; +WRITE_A_FILE PROC NEAR ;AN000; +;write a file from the data area in the buffer. +;Remember the caller is WRITE_FROM_BUFFER which use ES for +;the program data area and DS for the header in the buffer. + MOV AH, Write ;AN000; = 40h + MOV BX, ES:T_HANDLE ;AN000;handle saved in the program data area + MOV DX, ES:BYTS_OF_HDR ;AC005;skip header + MOV CX, DS:CX_BYTES ;AN000;get the # from the header + INT 21h ;AN000; + JC WAF_ERROR ;AN000;write error + CMP AX, DS:CX_BYTES;AN000; + JNE WAF_DISKFULL;AN000; + JMP WAF_EXIT ;AN000; +WAF_ERROR: ;AN000; + CALL CLOSE_DELETE_FILE ;AN000;close delete troubled file + OR COPY_STATUS, WRITE_ERROR_FLAG;AN000; + CALL SWITCH_DS_ES ;AN000;DS = DATA SEG, ES = BUFFER + CALL EXTENDED_ERROR_HANDLER;AN000; + CALL SWITCH_DS_ES ;AN000;ES = DATA SEG, DS = BUFFER +WAF_DISKFULL: ;AN000; +; MOV ERRORLEVEL, 4 ; SAR ;set errorlevel + +; Set message parameters +; Target disk full, critical error + + PUSH DS ;AN000;DS = BUFFER + PUSH ES ;AN000;ES = DATA SEG + POP DS ;AN000;ES => DS = DATA SEG +;;;;; MOV AX,MSG_DISK_FULL ; SAR ;AN000; message number +; MOV MSG_NUM,AX ; SAR AN000; set message number +; MOV SUBST_COUNT,0 ; SAR AN000; no message substitution +; MOV MSG_CLASS,UTILITY_MSG_CLASS ; SAR AN000; message class +; MOV INPUT_FLAG,0 ; SAR AN000; no input +; CALL PRINT_STDERR ; SAR AN000; display error message + OR COPY_STATUS, DISK_FULL_FLAG ;AN000;set disk_full_flag + POP DS ;AN000;RESTORE DS = BUFFER + CALL CLOSE_DELETE_FILE;AN000; + STC ;AN000;set carry and return to caller +WAF_EXIT:;AN000; + RET ;AN000; +WRITE_A_FILE ENDP;AN000; +; +SET_FILE_DATE_TIME PROC NEAR;AN000; +;input: BX - target file handle +; + MOV AH, File_date_time ;AN000; = 57h + MOV AL, Set_file_time ;AN000; = 1 + MOV CX, DS:FILE_TIME_FOUND;AN000; + MOV DX, DS:FILE_DATE_FOUND;AN000; + INT 21h ;AN000; + RET ;AN000; +SET_FILE_DATE_TIME ENDP;AN000; +; +CLOSE_A_FILE PROC NEAR ;AN000; +;INPUT: BX - file handle to be closed + CMP OPEN_FILE_COUNT,NUL ;AN005;ARE THERE ANY OPEN FILES? +; $IF A ;AN005; + JNA $$IF42A ;AN000; + DEC OPEN_FILE_COUNT ;AN005;IF SO, REDUCE THE COUNT BY 1. +; $ENDIF ;AN005; +$$IF42A: ;AN000; + MOV AH, Close ;AN000; = 3Eh + INT 21H ;AN000; + RET ;AN000; +CLOSE_A_FILE ENDP ;AN000; +; +DELETE_A_FILE PROC NEAR;AN000; +;input: DS:DX - points to ASCIIZ string + + MOV AH, 41h ;AN000; = 41h + INT 21H ;AN000; + RET ;AN000; +DELETE_A_FILE ENDP;AN000; +; +; +;CHK_DISK_FULL PROC NEAR +;check target disk space, and if no more clusters then set carry, disk_full_flag. +;this routine is called by MAKE_DIR routine. +;INPUT: DS - buffer +; ES - data seg +; PUSH AX +; PUSH BX +; PUSH CX +; PUSH DX +; MOV AH, 36h ;GET DISK FREE SPACE +; MOV DL, ES:T_DRV_NUMBER ;OF TARGET +; INT 21h +; CMP BX, 0 ;NO MORE CLUSTER? +; JE CDF_FULL +; CLC +; JMP SHORT CDF_EXIT +;CDF_FULL: +; OR ES:COPY_STATUS, DISK_FULL_FLAG ;SET DISK FULL FLAG +; STC ;SET CARRY +;CDF_EXIT: +; POP DX +; POP CX +; POP BX +; POP AX +; RET +; +;CHK_DISK_FULL ENDP +;; +;;subttl string_length +;page +;****************************************************************************** +;PURPOSE: Get the length of a string pointed by ES:DI until it encounters +; the same character given by the user in AL. +; The length will be an output in CX. The number includes the +; charater found. +; For example, if you want to determine the length of an ASCIIZ string, +; set ES:DI to that string and set AL to 0. The output CX is the +; total length of the ASCIIZ string including 0. +; So, if the first character pointed by DI is the same as that of AL, +; then the length will be 1. +; !!! It is the user's responsibility to make it sure that the string +; contains the character given in AL. If not, unpredictable +; results will occur.!!! +; +; DATA INPUT +; REGISTERS: AL - ASCII CHARACTER +; ES:DI - POINTER TO THE STRING. +; DATA OUTPUT +; REGISTERS: AX,DX,SI etc - PRESERVED. +; BX - DISTROYED +; CX - STRING LENGTH UNTIL FOUND THE GIVEN CHARACTER. +; DI - POINTS TO THE NEXT CHARACTER AFTER THE STRING. +; DIRECTION FLAG - CLEARED +; ZERO FLAG - RESET +;****************************************************************************** +; +;STRING_LENGTH PROC NEAR +;PUBLIC STRING_LENGTH +; CLD ;CLEAR DIRECTION +; MOV BX,DI ;SAVE ORIGINAL DI VALUE +; MOV CX,80H ;TRY MAX 128 BYTES +; REPNE SCASB ;SCAN THE STRING UNTIL FOUND +; PUSH DI ;SAVE CURRENT DI VALUE WHICH POINTS TO NEXT CHR AFTER STRING +; SUB DI,BX ;GET THE LENGTH +; MOV CX,DI ;MOV THE LENGTH TO CX +; POP DI +; RET +;STRING_LENGTH ENDP +; +;subttl concat_asciiz +;page +;****************************************************************************** +;PURPOSE: Concatenate two ASCIIZ string into one ASCIIZ string. +; The ASCIIZ string pointed by DS:SI will be concatenated to +; the one pointed by ES:DI. The result string will be pointed by +; ES:DI. +; AL is used to put the delimeter character in between the strings. +; If you *DON'T* like to put the delimeter ***make AL to 0FFh***. +; For example, assume sting1 "ABCDE",0 pointed by DI and string2 +; "FGHI",0 pointed by SI. +; If you want a delimeter "\" between two string, set AL to "\" +; before calling. The result will "ABCDE\FGHI",0 pointed by DI. +; If you set AL to "0FFh", then it becomes "ABCDEFGHI",0. +; This feature is useful for handling PATH if you set AL to "\" +; and, for any general string processes if you set AL to "0FFh". +; This routine will call subroutine STRING_LENGTH. +;DATA INPUT +; REGISTERS: AL - DELIMETER OR 0FFh +; ES:DI - POINTER TO THE DESTINATION STRING. +; DS:SI - POINTER TO THE SOURCE TO BE CONCATENATED. +;DATA OUTPUT +; REGISTERS: AL, DX - preserved +; DI - preserved. POINTER TO THE RESULT STRING +; SI - DISTROYED +; CX - RESULT ASCIIZ STRING LENGTH INCLUDE 0 +; DIRECTION FLAG - CLEARED +;****************************************************************************** +;CONCAT_ASCIIZ PROC NEAR +; +;PUBLIC CONCAT_ASCIIZ +; PUSH DI ;SAVE POINTER VALUE WHICH WILL BE RETRUNED TO CALLER. +; PUSH AX ;SAVE VALUE IN AL. +; MOV AL, 0 ;DEALING WITH ASCIIZ STRING +; CALL STRING_LENGTH ;LET DI POINTS TO THE NEXT CHR AFTER THIS STRING +; ;DIRECTION WILL BE CLEARED. +; DEC DI ;MAKE DI POINT TO THE LAST CHARACTER 0 +; POP AX ;RESTORE AL. +; CMP AL, 0FFh +;; $IF NE ;IF THE USER WANTS TO PUT DIMIMETER, +; JE $$IF42 +; STOSB ; REPLACE 0 WITH IT. +;; $ELSE +; JMP SHORT $$EN42 +;$$IF42: +; DEC CX ;ELSE DECREASE LENGTH BY 1 +;; $ENDIF +;$$EN42: +;; $DO +;$$DO45: +; LODSB ;MOV [SI] TO AL +; STOSB ;STORE AL TO [DI] +; INC CX ;INCREASE LENGTH +; CMP AL, 0 ;WAS IT A LAST CHARACTER? +;; $ENDDO E ;THEN EXIT THIS LOOP +; JNE $$DO45 +; POP DI +; RET +;CONCAT_ASCIIZ ENDP +;; +; +;subttl last_dir_out +;page +;****************************************************************************** +;PURPOSE: Take off the last directory name from the path pointed by DI. +; This routine assumes the pattern of a path to be an ASCIIZ string +; in the form of "[d:][\]dir1\dir2". Notice that this path does not +; have entailing "\". This routine will simply travel the string +; until it found last "\" which will, then, be replaced with 0. +; If no "\" found, then carry will be set. +; *** This should be not be used for the path in the form of +; *** "d:\", 0 for the root directory, since in this case the returned +; *** string will be "d:",0 and AX value returned be meaningless (Just +; *** points to 0.) +;DATA INPUT +; REGISTERS: DI - points to an ASCIIZ path string. +; ES - assumed default segment for DI +;DATA OUTPUT +; REGISTERS: DI - points to the resultant path string. +; AX - offset value of the last subdirectory name taken out, in case +; of the user's need. +; Other register will be unchanged. +; CARRY FLAG WILL SET IF NOT FOUND. +;****************************************************************************** +; +;LAST_DIR_OUT PROC NEAR +;PUBLIC LAST_DIR_OUT +; +; PUSH DI +; PUSH SI ;save current DI, SI +; CLD ;clear direction +; MOV SI, 0FFFFh ;used as a not_found flag if unchanged. +;; $DO +;$$DO47: +; MOV AL, 0 +; SCASB +;; $LEAVE Z ;if [DI] = 0, then end of string. Ends this loop. +; JZ $$EN47 +; DEC DI ;if [DI] <> 0, then go back and scan char again +; MOV AL, "\" ;to see it was a back slash. +; SCASB +;; $IF Z ;if it was, then save the addr to SI. +; JNZ $$IF49 +; PUSH DI +; POP SI +; +; DEC SI +;; $ENDIF ;else do loop again. +;$$IF49: +;; $ENDDO +; JMP SHORT $$DO47 +;$$EN47: +; CLC ;clear carry flag. +; CMP SI, 0FFFFh ;Had SI been changed? +;; $IF E +; JNE $$IF52 +; STC ;No, set the carry. Not found. +;; $ELSE +; JMP SHORT $$EN52 +;$$IF52: +; MOV BYTE PTR ES:[SI], 0 ;Yes, replace "\" with 0. Seg override to get default DI seg. +; MOV AX, SI +; INC AX ;let AX have the last dir offset value. +; CLC ;clear carry +;; $ENDIF +;$$EN52: +; POP SI ;restore original value +; POP DI ;original string offset +; RET +;LAST_DIR_OUT ENDP +;; +; +SET_DEFAULT_DRV PROC NEAR;AN000; +;change source drv as a default drv for conveniece of find, read operation +;of source. (handling target should be more specific as for as drive letter +;goes.) +;input: DL - drive # (0 = A, 1 = B ...) + + MOV AH, Select_Disk ;AN000; = 0Eh + INT 21H ;AN000; + OR SYS_FLAG, DEFAULT_DRV_SET_FLAG ;AN000;indicates default drv has been changed + ;Used for exit the program to restore default drv + RET ;AN000; +SET_DEFAULT_DRV ENDP ;AN000; +; +ORG_S_DEF PROC NEAR ;AN000; +;restore the original source directory. + PUSH ES ;AN000; + PUSH DS ;AN000; + + PUSH DS ;AN000; + POP ES ;AN000;DS=ES=data seg + + TEST SYS_FLAG, DEFAULT_S_DIR_FLAG ;AN000;source default direcotry saved? +; $IF NZ + JZ $$IF55 ;AN000; + MOV DX, OFFSET SAV_S_DRV ;AN000;saved source drive letter & directory + MOV AH, 3Bh ;AN000; + INT 21h ;AN000;restore source + AND SYS_FLAG, RESET_DEFAULT_S_DIR ;AN000;reset the flag +; $ENDIF +$$IF55: ;AN000; + + POP DS ;AN000; + POP ES ;AN000; + + RET ;AN000; +ORG_S_DEF ENDP ;AN000; +; +ORG_S_T_DEF PROC NEAR ;AN000; +;retore original target, source and default drv and directory +;check default_s(t)_dir_flag, default_drv_set_flag to restore source, +;or target directory and default drive. + + TEST SYS_FLAG, TURN_VERIFY_OFF_FLAG ;AN000;turn off verify? +; $IF NZ ;yes + JZ $$IF57 ;AN000; + MOV AX, 2E00h ;AN000;turn it off + INT 21H ;AN000; +; $ENDIF +$$IF57: ;AN000; + + TEST SYS_FLAG, DEFAULT_DRV_SET_FLAG ;AN000;default drive has been changed? +; $IF NZ ;yes + JZ $$IF59 ;AN000; + MOV DL, SAV_DEFAULT_DRV ;AN000; + DEC DL ;AN000; + CALL SET_DEFAULT_DRV ;AN000;restore default drv. + +; Following is a fix for PTR 0000012 . The fix is to skip changing default +; drive directory if source drive is not the default drive. + + MOV AL, S_DRV_NUMBER ;AN002; get source drive number + CMP AL, SAV_DEFAULT_DRV ;AN002; src drive is the default drv ? + JNE SKIP_CH_DIR ;AN002; no, dont change directory + + MOV DX, OFFSET SAV_DEF_DIR_ROOT;AN000; + MOV AH, Chdir ;AN000; + INT 21H ;AN000;restore current dir of default dir +SKIP_CH_DIR: ;AN000; +; $ENDIF +$$IF59: ;AN000; + + TEST SYS_FLAG, DEFAULT_S_DIR_FLAG ;AN000;source default direcotry saved? +; $IF NZ + JZ $$IF61 ;AN000; + MOV DX, OFFSET SAV_S_DRV ;AN000;saved source drive letter & directory + MOV AH, 3Bh ;AN000; + INT 21h ;AN000;restore source. This is for the case of ERROR exit. +; $ENDIF +$$IF61: ;AN000; + + TEST SYS_FLAG, DEFAULT_T_DIR_FLAG ;AN000;target default directory saved? +; $IF NZ ;then assume both source, target default saved + JZ $$IF63 ;AN000; + MOV DX, OFFSET SAV_T_DRV ;AN000;saved target drive letter & directory + MOV AH, 3Bh ;AN000; + INT 21h ;AN000;restore target +; $ENDIF +$$IF63: ;AN000; + + RET ;AN000; +ORG_S_T_DEF ENDP ;AN000; +; +EXTENDED_ERROR_HANDLER PROC NEAR;AN000; +;This routine calls fun 59(Get extended error) and +;check the actions returned. If it is Immediate exit, then jmp to JUST_EXIT +;If it is abort, then jmp to MAIN_EXIT. +;Or else, it check the COPY_STATUS flag. If is not open, read, create or +;write, then it is considered as a critical error and jmp to MAIN_EXIT. +;If access denied +; too many open files +; sharing violation +; lock violation +; general failure +;then show the message and jmp to the MAIN_EXIT. +; *** Currently, this routine directly jump to the main_exit instead of +; *** returing to the caller. The reason is we regard the above error conditions +; *** as being not suitable to continue copying and, hence, to simplify +; *** the error process. +;INPUT: +; DS - DATA SEG +;OUTPUT: +; ALL THE REG PRESERVED + +GOTO_MAIN_EXIT: ;AN000; + JMP MAIN_EXIT ;AN000;restore conditions + ;and exit +QUICK_EXIT: ;AN000; + JMP JUST_EXIT ;AN000;immediate exit + + RET ;AN000; + +EXTENDED_ERROR_HANDLER ENDP;AN000; +; +CLOSE_DELETE_FILE PROC NEAR;AN000; +;when writing error occurs, then this routine is called to +;clean up the troubled target file. +;INPUT: DS - buffer seg +; ES - data seg + + MOV BX, ES:T_HANDLE ;AN000;close target file + PUSH DS ;AN005;SAVE THE BUFFER PTR + PUSH ES ;AN005;WE NEED THE DATA PTR + POP DS ;AN005;DS = THE DATA PTR + CALL CLOSE_A_FILE;AN000; + POP DS ;AN005;DS = THE BUFFER PTR AGAIN + LEA DX, DS:target_drv_let ;AN000;target drv, filename + CALL DELETE_A_FILE ;AN000;delete it + RET ;AN000; +CLOSE_DELETE_FILE ENDP;AN000; +; +; + +SWITCH_DS_ES PROC NEAR;AN000; +; switch DS, ES + PUSH DS ;AN000; + PUSH ES ;AN000; + POP DS ;AN000; + POP ES ;AN000; + RET ;AN000; +SWITCH_DS_ES ENDP ;AN000; +; +; +INIT PROC NEAR ;AN000; + + CALL GET_CUR_DRV ;AN000;save current default drv + MOV DL, SAV_DEFAULT_DRV;AN000; + LEA SI, SAV_DEFAULT_DIR;AN000; + + CALL GET_CUR_DIR ;AN000;save current default dir + CALL GET_DRIVES ;AN000; SAR + CALL TOP_OF_MEM ;AN000;set top_of_memory + CALL INIT_BUFFER ;AN000;init buffer information + + MOV DL, T_DRV_NUMBER ;AN000; SAR + .IF < DL AE 3 > ;AN000; SAR + LEA SI, SAV_T_CURDIR ;AN000; SAR + CALL GET_CUR_DIR ;AN000; SAR + OR SYS_FLAG, DEFAULT_T_DIR_FLAG ;AN000; SAR + .ELSE ;AN000; SAR + AND SYS_FLAG, NOT DEFAULT_T_DIR_FLAG ;AN000; SAR + .ENDIF ;AN000; SAR + + + MOV DL, S_DRV_NUMBER;AN000; + DEC DL ;AN000; + CALL SET_DEFAULT_DRV ;AN000;set source as a default drv + CLC ;AN000; + RET ;AN000; +INIT ENDP ;AN000; +; +GET_DRIVES PROC NEAR ;AN000; +;get source and target phisical drive letter from parser area. +;set ONE_DISK_COPY_FLAG, if the user XCOPY using the same drive letter. + +;;;;; MOV AL, SO_DRIVE ;AN000;source drive letter +; CMP AL,SPACE ;AN000;IS DRIVE LETTER BLANK? +; $IF E ;AN000;YES, GET THE DEFAULT +; MOV AL, SAV_DEFAULT_DRV ;(1=A, 2=B,...) +; $ELSE ;AN000;NO, CHANGE FROM CHAR TO # +; SUB AL,BASE_OF_ALPHA_DRV ;AN000;NEED THE DRV # HERE +; $ENDIF + + MOV AL, 1 ;AN000; SAR A is the source drive + MOV S_DRV_NUMBER, AL ;AN000;SAVE DRV # + ADD AL, BASE_OF_ALPHA_DRV;AN000; + + MOV S_DRV, AL ;AN000;save source drive letter + MOV S_DRV_1, AL;AN000; +;; MOV S_ARC_DRV, AL ; SAR + MOV SAV_S_DRV, AL;AN000; + + .IF < DEST eq 3 > ;AN111;JW + MOV AL,0 ;AN111;JW + .ELSE ;AN111;JW + MOV AL, DEST ;AN000; SAR target drive letter + .ENDIF ;AN111;JW + INC AL ;AN000; SAR +;;;;; CMP AL,SPACE ;AN000;IS DRIVE LETTER BLANK? +; ; $IF E ;AN000;YES, GET THE DEFAULT +; ; MOV AL, SAV_DEFAULT_DRV ;(1=A, 2=B,...) +; ; $ELSE ;AN000;NO, CHANGE FROM CHAR TO # +; ; SUB AL,BASE_OF_ALPHA_DRV ;AN000;NEED THE DRV # HERE +;;;;; $ENDIF + MOV T_DRV_NUMBER, AL ;AN000;save target drv # + +;;;;; CMP S_DRV_NUMBER, AL ;s_drv_number = t_drv_number? +; ; $IF E +; ; OR SYS_FLAG, ONE_DISK_COPY_FLAG ;same logical drv copy +;;;;; $ENDIF + + ADD AL, BASE_OF_ALPHA_DRV ;AN000;make target drv # to drive letter + MOV T_DRV, AL ;AN000;target drive letter +;; MOV T_DRV_1, AL ; SAR +;; MOV T_DRV_2, AL ; SAR + MOV SAV_T_DRV, AL;AN000; + RET ;AN000; +GET_DRIVES ENDP ;AN000; +; +GET_CUR_DRV PROC NEAR;AN000; +;get the current default drive number (0 = A, 1 = B ..), +;change it to BIOS drive number and save it. + MOV AH, Current_Disk ;AN000; = 19h + INT 21h ;AN000; + INC AL ;AN000;(1 = A, 2 = B ..) + MOV SAV_DEFAULT_DRV, AL ;AN000;save it + RET ;AN000; +GET_CUR_DRV ENDP ;AN000; +; +GET_CUR_DIR PROC NEAR ;AN000; +;get current directory and save it +;input: DL - drive # (0 = default, 1 = A etc) +; DS:SI - pointer to 64 byte user memory + + MOV AH, Get_Current_Directory;AN000; + INT 21H ;AN000; + RET ;AN000; +GET_CUR_DIR ENDP ;AN000; +; +TOP_OF_MEM PROC NEAR ;AN000; +;set Top_of_memory + PUSH ES ;AN000; + MOV BX, PSP_SEG ;AN000; + MOV ES, BX ;AN000; + MOV AX, ES:2 ;AN000;PSP top of memory location + SUB AX, 100H ;AN000;subtract dos transient area (4k) + MOV TOP_OF_MEMORY, AX ;AN000;save it for buffer top + POP ES ;AN000; + RET ;AN000; +TOP_OF_MEM ENDP ;AN000; + +INIT_BUFFER PROC NEAR ;AN000; +;initialize buffer information +;set buffer_base, max_buffer_size +; call set_block ;SET BLOCK FOR BUFFR (for new 3.2 linker) + MOV AX, 0 ;AN000; SAR +;;;; PUSH CS ; SAR cs segment is the highest segment in this program +;;;; POP DX ; SAR + MOV DX, ALLOCATE_START ;AN000; SAR + MOV BUFFER_PTR, DX ;AN000; + CALL SET_BUFFER_PTR ;AN000; + MOV AX, BUFFER_PTR ;AN000; + MOV BUFFER_BASE, AX ;AN000;set buffer_base + MOV AX, BUFFER_LEFT ;AN000; + CMP AX, 140h ;AN000;BUFFER_LEFT < 5K which is the minimum size this program supports? + JAE IB_CONT ;AN000; +;;;;;; PUSH AX ; SAR ;AN000; +; MOV AX, MSG_INSUF_MEMORY ; SAR ;AC000;GET THE MESSAGE ID +; MOV MSG_NUM,AX ; SAR ;AN000;NEED MESSAGE ID FOR PRINT +; MOV SUBST_COUNT,NUL ; SAR ;AN000;NO SUBSTITUTION TEXT +; MOV INPUT_FLAG,NUL ; SAR ;AN000;NO INPUT = 0 +; MOV MSG_CLASS,UTILITY_MSG_CLASS ; SAR ;AN000;MESSAGE CLASS = -1 +; CALL PRINT_STDERR ; SAR ;print error. AX points to message ID +; POP AX ; SAR ;AN000; +; MOV ERRORLEVEL, 4 ; SAR ;abnormal termination + JMP MAIN_EXIT_A ;AN000;terminate this program +IB_CONT: ;AN000; + MOV MAX_BUFFER_SIZE, AX ;AN000;set max buffer size in para + CMP AX, 0FFFh ;AN000;max_buffer_size > 64 K in para ? +; $IF B + JNB $$IF65 ;AN000; + MOV CX, 16;AN000; + MUL CX ;AN000;AX = AX * 16 (DX part will be 0) + SUB AX, 544 ;AN000;AN000;subtrack header size + MOV MAX_CX, AX ;AN000;this will be max_cx +; $ELSE + JMP SHORT $$EN65 ;AN000; +$$IF65: ;AN000; + MOV MAX_CX, 0FFD0h ;AN000;else max_cx = fff0 - 32 bytes + ;which is the max # this program can support. +; $ENDIF ;(min # this program support for buffer is 5 k +$$EN65: ;AN000; + ; which has been decided by BIG_FILE ) + RET ;AN000; +INIT_BUFFER ENDP ;AN000; + + + +SELECT ENDS ;AN000; + + END ;AN000; + diff --git a/v4.0/src/SELECT/MPARSE.ASM b/v4.0/src/SELECT/MPARSE.ASM new file mode 100644 index 0000000..141df62 --- /dev/null +++ b/v4.0/src/SELECT/MPARSE.ASM @@ -0,0 +1,39 @@ +.ALPHA ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; DUMMY DATA SEGMENT +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; +DATA ENDS ;AN000;DATA +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PARSER INFORMATION +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.XLIST ;AN000; +FARSW EQU 1 ;AN000; +DATESW EQU 0 ;AN000; +TIMESW EQU 0 ;AN000; +FILESW EQU 0 ;AN000; +CAPSW EQU 0 ;AN000; +CMPXSW EQU 0 ;AN000; +DRVSW EQU 0 ;AN000; +QUSSW EQU 0 ;AN000; +KEYSW EQU 1 ;AN000; +SWSW EQU 0 ;AN000; +VAL1SW EQU 1 ;AN000; +VAL2SW EQU 1 ;AN000; +VAL3SW EQU 1 ;AN000; +.LIST ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PARSER SEGMENT PARA PUBLIC 'PARSER' ;AN000; + ASSUME CS:PARSER,DS:DATA,ES:DATA;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + PUBLIC SYSPARSE ;AN000; +PAGE ;AN000; + INCLUDE PARSE.ASM ;AN000; + +PARSER ENDS ;AN000; + END ;AN000; + \ No newline at end of file diff --git a/v4.0/src/SELECT/PAN-LIST.INC b/v4.0/src/SELECT/PAN-LIST.INC new file mode 100644 index 0000000..e6bbf4c --- /dev/null +++ b/v4.0/src/SELECT/PAN-LIST.INC @@ -0,0 +1,191 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN-LIST.INC +; +; +; +; OASIS PANEL ASSOCATION TABLE +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PAN_WELCOME EQU 1 ;AN000; Welcome screen +PAN_INTRO EQU 2 ;AN000; Introduction screen +PAN_CONFIRM EQU 3 ;AN000; Confirmation screen +PAN_WORKSPACE EQU 4 ;AN000; User memory needs screen +PAN_CTY_KYB EQU 5 ;AN000; Country/Keyboard support screen +PAN_COUNTRY EQU 6 ;AN000; Country Code Choice screen +PAN_KEYBOARD EQU 7 ;AN000; Keyboard Code Choice screen +PAN_KYBD_ALT EQU 8 ;AN000; Alternate keyboard screen +PAN_DEST_DRIVE EQU 9 ;AN000; Destination Drive screen +PAN_DOS_LOC EQU 10 ;AN000; DOS Location screen +PAN_PRINTER EQU 11 ;AN000; Printer Selection Screen +PAN_PRT_TYPE EQU 12 ;AN000; Printer type screen +PAN_PARALLEL EQU 13 ;AN000; Parallel printer port selection screen +PAN_SERIAL EQU 14 ;AN000; Serial printer port selection screen +PAN_REVIEW EQU 15 ;AN000; Review Selections Screen +PAN_FUNC_DISK EQU 16 ;AN000; Review selections made by SELECT - drive C: +PAN_FUNC_DISKET EQU 16 ;AN000; Review selections made by SELECT - drive B: +ERR_PRT_NO_HDWR EQU 17 ;AN000; +PAN_DOS_PARAM EQU 18 ;AN000; PC/DOS parameters screen +PAN_SHELL EQU 19 ;AN000; SHELL parameters screen +ERR_EXIT EQU 20 ;AN000; Unrecoverable error - exit +PAN_FASTOPEN EQU 21 ;AN000; FASTOPEN support screen +PAN_SHARE EQU 22 ;AN000; SHARE support screen +PAN_GRAPHICS EQU 23 ;AN000; GRAPHICS support screen +PAN_EXP_MEMORY EQU 24 ;AN000; Expanded Memory support screen +PAN_VDISK EQU 25 ;AN000; Virtual Disk support screen +PAN_CONFIG_PARS EQU 26 ;AN000; CONFIG.SYS parameter screen +PAN_FIXED_FIRST EQU 27 ;AN000; Partitions support for first disk only +PAN_FIXED_BOTH EQU 28 ;AN000; Partitions support for both disks +PAN_REBOOT EQU 29 ;AN000; Reboot screen +PAN_DATE_TIME EQU 30 ;AN000; Install Date/Time support screen +PAN_FORMAT EQU 31 ;AN000; Format Fixed Disk partition screen +PAN_INST_PROMPT EQU 32 ;AN000; Installing PC DOS prompt screen +PAN_INSTALL_DOS EQU 32 ;AN000; Installing PC DOS screen +ERR_KEYB EQU 33 ;AN000; Error in running the KEYB command +PAN_COMPLETE1 EQU 34 ;AN000; Installing complete screen - disk +PAN_COMPLETE2 EQU 34 ;AN000; Installing complete screen - diskette 720KB +PAN_COMPLETE3 EQU 34 ;AN000; Installing complete screen - diskette 360KB +SUB_COMP_KYS_1C EQU 35 ;AN000; message for reboot; diskette COMBINED (1.44MB) +PAN_HPAN EQU 36 ;AN000; contextual help panel +PAN_HBAR EQU 37 ;AN000; HORIZONTAL BAR +SUB_CONT_OPTION EQU 38 ;AN000; Enter to continue or Esc to cancel +SUB_PRINTER_1 EQU 39 ;AN000; printer no 1 + +CHILD_F3EXIT EQU 40 ;AN000; f3 exit child panel +SUB_FIXED_1 EQU 41 ;AN000; fixed disk 1 +SUB_LOG_DRIVE EQU 42 ;AN000; logical drive JW +SUB_REBOOT_KEYS EQU 43 ;AN000; ctrl+alt+del to reboot line +SUB_INSTALL_1 EQU 44 ;AN000; copying from diskette 1 +SUB_INSTALL_2 EQU 45 ;AN000; copying from diskette 2 +SUB_COMP_VER EQU 46 ;AN000; install of DOS 4.00 complete +SUB_COMP_KYS_1 EQU 47 ;AN000; message before reboot - disk +SUB_COMP_KYS_2 EQU 48 ;AN000; message before reboot - diskette + ; +CHILD_F1HELP EQU 49 ;AN000; help child panel +CHILD_F9KEYS EQU 50 ;AN000; keys child panel +CHILD_QUIT EQU 51 ;AN000; escape child panel +CHILD_ENTER EQU 52 ;AN000; enter child panel +SUB_COMP_REP EQU 53 ;AN000; Replacement of DOS 4.00 complete + ; +PAN_WRITE_PROT EQU 54 ;AN000; +PAN_DRIVE_ERROR EQU 55 ;AN000; +PAN_BAD_DISKET EQU 56 ;AN000; +ERR_COPY_DISK EQU 57 ;AN000; + ; +SUB_INS_START_B EQU 58 ;AN000; +SUB_REM_SEL_A EQU 59 ;AN000; +SUB_REM_START_B EQU 60 ;AN000; +SUB_REM_DOS_A EQU 61 ;AN000; + ; +ERR_BAD_PATH EQU 62 ;AN000; +ERR_BAD_PFILE EQU 63 ;AN000; +ERR_BAD_PPRO EQU 64 ;AN000; +FORMAT_DISK EQU 65 ;AN000; +FORMAT_DISKET EQU 66 ;AN000; +ERR_BORDER EQU 67 ;AN000; +ERR_DOS_DISK EQU 68 ;AN000; +ERR_GENERAL EQU 69 ;AN000; +PAN_DISKCOPY EQU 70 ;AN000; +PAN_DSKCPY_SRC EQU 71 ;AN000; +PAN_DSKCPY_TAR EQU 72 ;AN000; +PAN_DSKCPY_CPY EQU 73 ;AN000; +PAN_PARTIAL EQU 74 ;AC010; + +FORMAT_SHELL EQU 75 ;AN000;DT One drive format of SHELL diskette +FORMAT_STARTUP EQU 76 ;AN000;DT One drive format of STARTUP diskette +SUB_REM_SHELL_360 EQU 77 ;AN001;GHG D65 360KB +SUB_REM_SELECT_360 EQU 78 ;AN001;GHG D65 360KB +SUB_REM_UTIL1_360 EQU 79 ;AN001;GHG D65 360KB +SUB_COPYING EQU 80 ;AN001;GHG D65 360KB + +SUB_INS_WORK1_360 EQU 81 ;AN000;DT 2 drive 360 installation +SUB_INS_WORK2_360 EQU 82 ;AN000;DT " +SUB_INS_WORK3_360 EQU 83 ;AN000;DT " +SUB_INS_START_360 EQU 84 ;AN000;DT " +SUB_INS_INSTALL_360 EQU 85 ;AN000;DT " + ; +SUB_INS_WORK1_S360 EQU 86 ;AN000;DT 1 drive 360 installation +SUB_INS_WORK2_S360 EQU 87 ;AN000;DT " +SUB_INS_SHELL_S360 EQU 88 ;AN000;DT " +SUB_INS_STARTT_S360 EQU 89 ;AN000;DT " + +PAN_START360 EQU 90 ;AN000;DT " +SUB_COMP_KYS_3 EQU 91 ;AN000;DT message before reboot - diskette + +SUB_INSTALL_COPY EQU 92 ;AN000;DT insert INSTALL copy +SUB_INS_OPER2 EQU 93 ;AN000;DT +PAN_EXP_MEMORY2 EQU 94 ;AN000;JW Expanded Memory support screen +PAN_START720 EQU 95 ;AN000;DT Diskette introduction 720KB +PAN_START1440 EQU 96 ;AN000;DT Diskette introduction 1440KB +ERR_INS_INSTALL EQU 97 ;AN060;JW Insert the install diskette +PAN_CHOOSE_SHELL EQU 98 ; MS-DOS Shell option +SUB_INS_WORKING_A EQU 99 ; Insert the WORKING disk in drive A +SUB_INS_MSSHELL_A EQU 100 ; Insert the MS-SHELL disk in drive A +SUB_INS_SHELL_DISKS EQU 101 ; Ins. MS-SHELL in A; SHELL in B +SUB_INS_OP_WORK EQU 102 ; Ins. OPERATING in A; WORKING in B +SUB_INS_WORK3_A EQU 103 ; Ins. WORKING3 in drive A + +SCR_DOS_SUPPORT EQU 1 ;AN000; memory workspace list +SCR_CTY_KYB EQU 2 ;AN000; type of country/keyboard list +SCR_CTY_1 EQU 3 ;AN000; list of countries - code 001 to 046 +SCR_CTY_2 EQU 4 ;AN000; list of countries - code 047 to 972 +SCR_KYB_1 EQU 5 ;AN000; list of keyboards - code BE to NO +SCR_KYB_2 EQU 6 ;AN000; list of keyboards - code PO to none +SCR_FR_KYB EQU 7 ;AN000; list of alternate French keyboards +SCR_IT_KYB EQU 8 ;AN000; list of alternate Italian keyboards +SCR_UK_KYB EQU 9 ;AN000; list of alternate UK keyboards +SCR_DEST_B_C EQU 10 ;AN111; install drive list JW +SCR_PRT_TYPE EQU 11 ;AN000; list of printers supported +SCR_PARALLEL EQU 12 ;AN000; list of parallel printer ports +SCR_SERIAL EQU 13 ;AN000; list of serial printer ports +SCR_PRT_REDIR EQU 14 ;AN000; list of redirected parallel printer ports +SCR_REVIEW EQU 15 ;AN000; accept/view SELECT generated options +SCR_FUNC_DISK EQU 16 ;AN000; list of functions supported - disk +SCR_FUNC_DISKET EQU 17 ;AN000; list of functions supported - diskette +SCR_FIXED_FIRST EQU 18 ;AN000; first fixed disk unused - partition support list +SCR_FIXED_BOTH EQU 19 ;AN000; first fixed disk used - partition support list +SCR_FORMAT EQU 20 ;AN000; fixed disk partition format +SCR_CONTEXT_HLP EQU 21 ;AN000; +SCR_INDEX_HLP EQU 21 ;AN000; +SCR_TITLE_HLP EQU 22 ;AN000; +SCR_ACC_CTY EQU 23 ;AN000; +SCR_ACC_KYB EQU 24 ;AN000; +SCR_ACC_PRT EQU 25 ;AN000; +SCR_COPY_DEST EQU 26 ;AN000;JW DOS location choices +SCR_DEST_A_C EQU 27 ;AN111; install drive list JW +SCR_CHOOSE_SHELL EQU 28 ; MS-DOS Shell option + ; +STR_DOS_LOC EQU 1 ;AN000; DOS location field +STR_EXT_PARMS EQU 2 ;AN000; external diskette parameters +STR_DOS_PATH EQU 3 ;AN000; DOS path +STR_DOS_APPEND EQU 4 ;AN000; APPEND path +STR_DOS_PROMPT EQU 5 ;AN000; PROMPT path +STR_SHELL EQU 6 ;AN000; SHELL parameters +STR_KSAM EQU 7 ;AN000; KSAM parameters +STR_FASTOPEN EQU 8 ;AN000; FASTOPEN parameters +STR_SHARE EQU 9 ;AN000; SHARE parameters +STR_GRAPHICS EQU 10 ;AN000; GRAPHICS parameters +STR_XMAEM EQU 11 ;AN000; XMAEM expanded memory parameter +STR_XMA2EMS EQU 12 ;AN000; XMA2EMS expanded memory parameter +STR_VDISK EQU 13 ;AN000; VDISK parameter +STR_BREAK EQU 14 ;AN000; BREAK parameter +STR_BUFFERS EQU 15 ;AN000; BUFFERS parameter +STR_DOS_APPEND_P EQU 16 ;AN000; APPEND parameter JW +STR_FCBS EQU 17 ;AN000; FCBS parameter +STR_FILES EQU 18 ;AN000; FILES parameter +STR_LASTDRIVE EQU 19 ;AN000; LASTDRIVE parameter +STR_STACKS EQU 20 ;AN000; STACKS parameter +STR_VERIFY EQU 21 ;AN000; VERIFY parameter + +NUM_PRINTER EQU 22 ;AN000; no of printers +NUM_EXT_DISK EQU 23 ;AN000; no of external diskettes +NUM_YEAR EQU 24 ;AN000; YEAR +NUM_MONTH EQU 25 ;AN000; MONTH +NUM_DAY EQU 26 ;AN000; DAY +NUM_HOUR EQU 27 ;AN000; HOUR +NUM_MINUTE EQU 28 ;AN000; MINUTE +NUM_SECOND EQU 29 ;AN000; SECOND +STR_DEF_CP EQU 30 ;AN000; Default CodePage for the SELECT.DAT file +STR_SWISS_KEYB EQU 31 ;AN000; Default SWISS Keyboard +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/v4.0/src/SELECT/PANEL.MAC b/v4.0/src/SELECT/PANEL.MAC new file mode 100644 index 0000000..dc37545 --- /dev/null +++ b/v4.0/src/SELECT/PANEL.MAC @@ -0,0 +1,440 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PANEL.MAC +; +; This file contains the MACROS defined for the +; screen management and a number of other macros +; identified with CAS services. +; +; This file is included with the control flow files +; for the creation of SELECT.EXE! +; +; DATE: July 3, 1987 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: PREPARE_CHILDREN +; +; This routine takes the Child panels associated with the +; QM_ACTIVEPAN and adds them to the display queue - pushed +; on as Children. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PREPARE_CHILDREN MACRO ;;AN000; + CALL HANDLE_CHILDREN ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: INIT_PQUEUE +; +; This flushes both the Parent/Child queues, clears the +; refresh field table, initializes the refresh field to +; the new Parent panel (with 0 entries), and sets the break +; ON for the parent panel. Also it pushes the parent onto +; the display queue. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INIT_PQUEUE MACRO panel ;;AN000; + MOV AX,panel ;;AN000; + CALL INIT_PQUEUE_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: PREPARE_PANEL +; +; This will put the specified panel into the Parent queue +; for display. The QM_OPT2 is already set to break OFF. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PREPARE_PANEL MACRO panel ;;AN000; + MOV AX,panel ;;AN000; + CALL PREPARE_PANEL_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: DISPLAY_PANEL +; +; Display panel causes the Parent/Children on the display +; queues to be displayed on the screen. If there are any +; entries in the entry field table, then the break ON is set +; to automatically display these panels. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +DISPLAY_PANEL MACRO ;;AN000; + CALL DISPLAY_PANEL_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: DEALLOCATE_MEMORY +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +DEALLOCATE_MEMORY MACRO ;;AN000; + CALL DEALLOCATE_MEMORY_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: ALLOCATE_MEMORY +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ALLOCATE_MEMORY MACRO ;;AN000; + CALL ALLOCATE_MEMORY_CALL ;;AN000;allocate segment + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: GET_SCROLL +; +; The scroll field becomes the active field assuming a default +; colour index, and the cursor keys become active. The only +; keys valid for return are specified in the 'fkeys' list. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GET_SCROLL MACRO input,index,f_keys ;;AN000; + MOV AX,input ;;AN000; + MOV BX,index ;;AN000; + MOV CX,f_keys&_LEN ;;AN000; + LEA DX,f_keys ;;AN000; + CALL EXEC_SCROLL_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: INIT_SCROLL +; +; Sets up the scroll field with the specified index onto the +; refresh field table. The colour index table is set to a +; different colour to indicate that it is not the active field. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INIT_SCROLL MACRO input,index ;;AN000; + MOV AX,input ;;AN000; + MOV BX,index ;;AN000; + CALL INIT_SCROLL_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: INIT_SCROLL_W_LIST +; +; Sets up the scroll field with the specified index onto the +; refresh field table. The colour index table is set to a +; different colour to indicate that it is not the active field. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INIT_SCROLL_W_LIST MACRO input,list_seg,list_off,num_ele,max_width,max_title,index ;;AN000; + MOV AX,input ;;AN000; + MOV BX,max_title ;;AN000; + MOV CX,num_ele ;;AN000; + MOV DX,max_width ;;AN000; + MOV SI,list_seg ;;AN000; + MOV DI,list_off ;;AN000; + CALL INIT_SCROLL_W_LIST_CALL ;;AN000; + MOV AX,input ;;AN000; + MOV BX,index ;;AN000; + CALL INIT_SCROLL_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: INIT_SCROLL_W_NUM +; +; Sets up the scroll field with the specified index onto the +; refresh field table. The colour index table is set to a +; different colour to indicate that it is not the active field. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INIT_SCROLL_W_NUM MACRO input,num_ele,index ;;AN000; + MOV AX,input ;;AN000; + MOV CX,num_ele ;;AN000; + CALL INIT_SCROLL_W_NUM_CALL ;;AN000; + MOV AX,input ;;AN000; + MOV BX,index ;;AN000; + CALL INIT_SCROLL_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: INIT_SCROLL_COLOUR +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INIT_SCROLL_COLOUR MACRO input,colour ;;AN000; + MOV BX,input ;;AN000;get PCSLCTP field + MOV AX,colour ;;AN000; + CALL SET_SCROLL_COLOUR ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: SET_SCROLL +; +; The SET_SCROLL will set a scroll field specified to the required +; index in a different colour index to indicate it is NOT the +; active field. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SET_SCROLL MACRO input,index ;;AN000; + MOV AX,input ;;AN000; + MOV BX,index ;;AN000; + CALL SET_SCROLL_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: GET_FUNCTION +; +; This routine is used to process screens with NO scroll fields +; or input fields. The valid keys are specified in the 'fkeys' +; list. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GET_FUNCTION MACRO fkeys ;;AN000; + MOV CX,fkeys&_LEN ;;AN000; + LEA DX,fkeys ;;AN000; + CALL GET_FUNCTION_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: INIT_STRING +; +; INIT_STRING is used to add the input entry field onto the +; refresh field table. Unlike the scroll fields, the colour +; index is maintained for the input field. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INIT_STRING MACRO input,string,max_string ;;AN000; + MOV AX,input ;;AN000; + LEA BX,string ;;AN000; + MOV SI,max_string ;;AN000; + CALL INIT_STRING_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: SET_STRING +; +; This set an input field (already contained in the refresh +; field table) on the logical buffer to the defined string. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SET_STRING MACRO input,string,max_string ;;AN000; + MOV AX,input ;;AN000; + LEA BX,string ;;AN000; + MOV SI,max_string ;;AN000; + CALL SET_STRING_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: GET_STRING +; +; Causes the input field specified to become the active input +; field. The keys that will exit this input field are defined +; in the 'fkeys' list. The other characters valid for this +; input field are contained in the ICB. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GET_STRING MACRO input,string,max_string,fkeys ;;AN000; + MOV AX,input ;;AN000; + LEA BX,string ;;AN000; + MOV CX,fkeys&_LEN ;;AN000; + LEA DX,fkeys ;;AN000; + MOV SI,max_string ;;AN000; + CALL GET_STRING_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: GET_NUMERIC +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GET_NUMERIC MACRO input,value,minimum,maximum,fkeys,string ;;AN000; + LOCAL GN_0 ;;AN000; + LOCAL GN_1 ;;AN000; + MOV AX,maximum ;;AN000; + LEA BX,P_USER_STRING ;;AN000; + CALL CONVERT_ASCII ;;AN000; + MOV SI,AX ;;AN000; + ;; + MOV AX,value ;;AN000; +GN_0: LEA BX,string+2 ;;AN000; + CALL CONVERT_ASCII ;;AN000; + MOV string,AX ;;AN000; + ;; + LEA BX,string ;;AN000; + MOV AX,input ;;AN000; + MOV CX,fkeys&_LEN ;;AN000; + LEA DX,fkeys ;;AN000; + CALL GET_STRING_CALL ;;AN000; + ;; + LEA BX,P_USER_STRING ;;AN000; + MOV CX,S_USER_STRING ;;AN000; + CALL CONVERT_NUMERIC ;;AN000; + ;; + CMP N_USER_FUNC,ESCAPE ;;AN000; + JE GN_1 ;;AN000; + ;; + MOV BX,minimum ;;AN000; + MOV CX,maximum ;;AN000; + CALL CHECK_MIN_MAX ;;AN000; + JC GN_0 ;;AN000; + ;; +GN_1: MOV N_USER_NUMERIC,AX ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: INIT_NUMERIC +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INIT_NUMERIC MACRO input,value,maximum,string ;;AN000; + MOV AX,maximum ;;AN000; + LEA BX,P_USER_STRING ;;AN000; + CALL CONVERT_ASCII ;;AN000; + MOV SI,AX ;;AN000; + ;; + MOV AX,value ;;AN000; + LEA BX,string+2 ;;AN000; + CALL CONVERT_ASCII ;;AN000; + MOV string,AX ;;AN000; + ;; + LEA BX,string ;;AN000; + MOV AX,input ;;AN000; + CALL INIT_STRING_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: SET_NUMERIC +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SET_NUMERIC MACRO input,value,maximum,string ;;AN000; + MOV AX,maximum ;;AN000; + LEA BX,P_USER_STRING ;;AN000; + CALL CONVERT_ASCII ;;AN000; + MOV SI,AX ;;AN000; + ;; + MOV AX,value ;;AN000; + LEA BX,string ;;AN000; + CALL CONVERT_ASCII ;;AN000; + MOV string,AX ;;AN000; + ;; + LEA BX,string ;;AN000; + MOV AX,input ;;AN000; + CALL SET_STRING_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: GET_SUPPORT +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INIT_SCROLL_STATUS MACRO input,status_id ;;AN000; + MOV AX,input ;;AN000; + LEA SI,status_id ;;AN000; + CALL INIT_SCROLL_STATUS_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: INIT_SUPPORT +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INIT_SUPPORT MACRO table,index,status ;;AN000; + PUSH SI ;;AN000; + LEA SI,table ;;AN000; + MOV BX,index ;;AN000; + DEC BX ;;AN000; + SHL BX,1 ;;AN000; + MOV AX,status ;;AN000; + MOV [SI+BX],AX ;;AN000; + POP SI ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: RET_SUPPORT +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +RET_SUPPORT MACRO table,index,status ;;AN000; + PUSH SI ;;AN000; + LEA SI,table ;;AN000; + MOV BX,index ;;AN000; + DEC BX ;;AN000; + SHL BX,1 ;;AN000; + MOV AX,[SI+BX] ;;AN000; + MOV status,AX ;;AN000; + POP SI ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: TOGGLE_SUPPORT +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +TOGGLE_SUPPORT MACRO table,index ;;AN000; + MOV BX,index ;;AN000; + LEA DX,table ;;AN000; + CALL TOGGLE_SUPPORT_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACROS: INITIALIZE_BCHAR +; +; One needs to initialize the background panel colour index +; to match the colour attributes of the Parent panels. The +; index is based on panel #1 (which is assumed to be a good +; sample of the remaining panel colours. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INITIALIZE_BCHAR MACRO character ;;AN000; + MOV AL,character ;;AN000;Background character + MOV PM_BASECHAR,AL ;;AN000; + PUSH DI ;;AN000; + PUSH DX ;;AN000; + PUSH ES ;;AN000; + MOV BX,1 ;;AN000;get ES:DI pointer to panel #1 + CALL GET_PCB ;;AN000; + PUSH ES:[DI]+PCB_CCBID ;;AN000;get panel's color index + POP AX ;;AN000; + DEC AX ;;AN000;normalize index + POP ES ;;AN000; + PUSH ES ;;AN000; + MOV DI,CRD_CCBVECOFF ;;AN000; + PUSH CRD_CCBVECSEG ;;AN000; + POP ES ;;AN000; + MOV DX,12 ;;AN000;12 entries per colour index + MUL DX ;;AN000; + ADD DI,AX ;;AN000; + MOV AL,ES:[DI] ;;AN000; + POP ES ;;AN000; + POP DX ;;AN000; + POP DI ;;AN000; + MOV PM_BASEATTR,AL ;;AN000;set color attribute of background characters + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: RETURN_STRING +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +RETURN_STRING MACRO input,string,maximum ;;AN000; + MOV AX,input ;;AN000; + MOV DX,maximum ;;AN000; + LEA SI,string ;;AN000; + CALL RETURN_STRING_CALL ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: HANDLE_ERROR +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +HANDLE_ERROR MACRO input,action ;;AN000; + LOCAL CONTINUE ;;AN000; + MOV BX,input ;;AN000; + MOV CX,action ;;AN000; + CALL HANDLE_ERROR_CALL ;;AN000; + JNC CONTINUE ;;AN000; + CLEAR_SCREEN2 ;;AC027;SEH ;AN000; + JMP EXIT_SELECT ;;AN000; +CONTINUE: ;;AN000; + ENDM ;;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MACRO: INIT_CHAR ;;AN000;JW +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INIT_CHAR MACRO character,row,column,panid ;;AN000;JW + MOV AX,row ;;AN000;JW + MOV CX,column ;;AN000;JW + MOV DL,character ;;AN000;JW + MOV BX,panid ;;AN000;JW + CALL INIT_CHAR_CALL ;;AN000;JW + ENDM ;;AN000;JW +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/v4.0/src/SELECT/PANELS.ASM b/v4.0/src/SELECT/PANELS.ASM new file mode 100644 index 0000000..4dc5578 --- /dev/null +++ b/v4.0/src/SELECT/PANELS.ASM @@ -0,0 +1,4374 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; PANELS.ASM +; +; +; +; +; +; +; CODE Segment +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + .alpha ; arrange segments alphabetically + + INCLUDE SEL-PAN.INC ;AN024; + INCLUDE PAN-LIST.INC ;AN024; + ; + PUBLIC PCB_VECTOR ;AN024; + PUBLIC NUM_PCB ;AN024; + ; +PANEL EQU 1 ;AN024; +SCROLL EQU 0 ;AN024; + ; +CODE SEGMENT PARA PUBLIC 'CODE' ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Panel Control Block Vector +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB_VECTOR LABEL WORD ;AC024; + DW 0,OFFSET PCB1 ;AC024;PCB1 segment, offset + DW 0,OFFSET PCB2 ;AC024;PCB2 segment, offset + DW 0,OFFSET PCB3 ;AC024;PCB3 segment, offset + DW 0,OFFSET PCB4 ;AC024;PCB4 segment, offset + DW 0,OFFSET PCB5 ;AC024;PCB5 segment, offset + DW 0,OFFSET PCB6 ;AC024;PCB6 segment, offset + DW 0,OFFSET PCB7 ;AC024;PCB7 segment, offset + DW 0,OFFSET PCB8 ;AC024;PCB8 segment, offset + DW 0,OFFSET PCB9 ;AC024;PCB9 segment, offset + DW 0,OFFSET PCB10 ;AC024;PCB10 segment, offset + DW 0,OFFSET PCB11 ;AC024;PCB11 segment, offset + DW 0,OFFSET PCB12 ;AC024;PCB12 segment, offset + DW 0,OFFSET PCB13 ;AC024;PCB13 segment, offset + DW 0,OFFSET PCB14 ;AC024;PCB14 segment, offset + DW 0,OFFSET PCB15 ;AC024;PCB15 segment, offset + DW 0,OFFSET PCB16 ;AC024;PCB16 segment, offset + DW 0,OFFSET PCB17 ;AC024;PCB17 segment, offset + DW 0,OFFSET PCB18 ;AC024;PCB18 segment, offset + DW 0,OFFSET PCB19 ;AC024;PCB19 segment, offset + DW 0,OFFSET PCB20 ;AC024;PCB20 segment, offset + DW 0,OFFSET PCB21 ;AC024;PCB21 segment, offset + DW 0,OFFSET PCB22 ;AC024;PCB22 segment, offset + DW 0,OFFSET PCB23 ;AC024;PCB23 segment, offset + DW 0,OFFSET PCB24 ;AC024;PCB24 segment, offset + DW 0,OFFSET PCB25 ;AC024;PCB25 segment, offset + DW 0,OFFSET PCB26 ;AC024;PCB26 segment, offset + DW 0,OFFSET PCB27 ;AC024;PCB27 segment, offset + DW 0,OFFSET PCB28 ;AC024;PCB28 segment, offset + DW 0,OFFSET PCB29 ;AC024;PCB29 segment, offset + DW 0,OFFSET PCB30 ;AC024;PCB30 segment, offset + DW 0,OFFSET PCB31 ;AC024;PCB31 segment, offset + DW 0,OFFSET PCB32 ;AC024;PCB32 segment, offset + DW 0,OFFSET PCB33 ;AC024;PCB33 segment, offset + DW 0,OFFSET PCB34 ;AC024;PCB34 segment, offset + DW 0,OFFSET PCB35 ;AC024;PCB35 segment, offset + DW 0,OFFSET PCB36 ;AC024;PCB36 segment, offset + DW 0,OFFSET PCB37 ;AC024;PCB37 segment, offset + DW 0,OFFSET PCB38 ;AC024;PCB38 segment, offset + DW 0,OFFSET PCB39 ;AC024;PCB39 segment, offset + DW 0,OFFSET PCB40 ;AC024;PCB40 segment, offset + DW 0,OFFSET PCB41 ;AC024;PCB41 segment, offset + DW 0,OFFSET PCB42 ;AC024;PCB42 segment, offset + DW 0,OFFSET PCB43 ;AC024;PCB43 segment, offset + DW 0,OFFSET PCB44 ;AC024;PCB44 segment, offset + DW 0,OFFSET PCB45 ;AC024;PCB45 segment, offset + DW 0,OFFSET PCB46 ;AC024;PCB46 segment, offset + DW 0,OFFSET PCB47 ;AC024;PCB47 segment, offset + DW 0,OFFSET PCB48 ;AC024;PCB48 segment, offset + DW 0,OFFSET PCB49 ;AC024;PCB49 segment, offset + DW 0,OFFSET PCB50 ;AC024;PCB50 segment, offset + DW 0,OFFSET PCB51 ;AC024;PCB51 segment, offset + DW 0,OFFSET PCB52 ;AC024;PCB52 segment, offset + DW 0,OFFSET PCB53 ;AC024;PCB53 segment, offset + DW 0,OFFSET PCB54 ;AC024;PCB54 segment, offset + DW 0,OFFSET PCB55 ;AC024;PCB55 segment, offset + DW 0,OFFSET PCB56 ;AC024;PCB56 segment, offset + DW 0,OFFSET PCB57 ;AC024;PCB57 segment, offset + DW 0,OFFSET PCB58 ;AC024;PCB58 segment, offset + DW 0,OFFSET PCB59 ;AC024;PCB59 segment, offset + DW 0,OFFSET PCB60 ;AC024;PCB60 segment, offset + DW 0,OFFSET PCB61 ;AC024;PCB61 segment, offset + DW 0,OFFSET PCB62 ;AC024;PCB62 segment, offset + DW 0,OFFSET PCB63 ;AC024;PCB63 segment, offset + DW 0,OFFSET PCB64 ;AC024;PCB64 segment, offset + DW 0,OFFSET PCB65 ;AC024;PCB65 segment, offset + DW 0,OFFSET PCB66 ;AC024;PCB66 segment, offset + DW 0,OFFSET PCB67 ;AC024;PCB67 segment, offset + DW 0,OFFSET PCB68 ;AC024;PCB68 segment, offset + DW 0,OFFSET PCB69 ;AC024;PCB69 segment, offset + DW 0,OFFSET PCB70 ;AC024;PCB70 segment, offset + DW 0,OFFSET PCB71 ;AC024;PCB71 segment, offset + DW 0,OFFSET PCB72 ;AC024;PCB72 segment, offset + DW 0,OFFSET PCB73 ;AC024;PCB73 segment, offset + DW 0,OFFSET PCB74 ;AC024;PCB74 segment, offset + DW 0,OFFSET PCB75 ;AC024;PCB75 segment, offset + DW 0,OFFSET PCB76 ;AC024;PCB76 segment, offset + DW 0,OFFSET PCB77 ;AC024;PCB77 segment, offset + DW 0,OFFSET PCB78 ;AC024;PCB78 segment, offset + DW 0,OFFSET PCB79 ;AC024;PCB79 segment, offset + DW 0,OFFSET PCB80 ;AC024;PCB80 segment, offset + DW 0,OFFSET PCB81 ;AC024;PCB81 segment, offset + DW 0,OFFSET PCB82 ;AC024;PCB82 segment, offset + DW 0,OFFSET PCB83 ;AC024;PCB82 segment, offset + DW 0,OFFSET PCB84 ;AC024;PCB84 segment, offset + DW 0,OFFSET PCB85 ;AC024;PCB85 segment, offset + DW 0,OFFSET PCB86 ;AC024;PCB86 segment, offset + DW 0,OFFSET PCB87 ;AC024;PCB87 segment, offset + DW 0,OFFSET PCB88 ;AC024;PCB88 segment, offset + DW 0,OFFSET PCB89 ;AC024;PCB89 segment, offset + DW 0,OFFSET PCB90 ;AC024;PCB90 segment, offset + DW 0,OFFSET PCB91 ;AC024;PCB91 segment, offset + DW 0,OFFSET PCB92 ;AC024;PCB92 segment, offset + DW 0,OFFSET PCB93 ;AC024;PCB93 segment, offset + DW 0,OFFSET PCB94 ;AC024;PCB94 segment, offset + DW 0,OFFSET PCB95 ;AC024;PCB95 segment, offset + DW 0,OFFSET PCB96 ;AC024;PCB96 segment, offset + DW 0,OFFSET PCB97 ;AC024;PCB97 segment, offset + DW 0,OFFSET PCB98 ;AC024;PCB98 segment, offset + DW 0,OFFSET PCB99 ;AC024;PCB99 segment, offset + DW 0,OFFSET PCB100 ;AC024;PCB100 segment, offset + DW 0,OFFSET PCB101 ;AC024;PCB101 segment, offset + DW 0,OFFSET PCB102 ;AC024;PCB102 segment, offset + DW 0,OFFSET PCB103 ;AC024;PCB102 segment, offset +NUM_PCB EQU ($-PCB_VECTOR)/4;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_WELCOME EQU 1 ; Welcome Screen +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB1 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW (80-PANEL1_W)/2 ;AN000;column location of panel + DW PANEL1_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL1_W*PANEL1_L;AN000;Length expanded panel in mem + DW OFFSET PANEL1 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 2 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000; + +CHILD2 LABEL WORD ;AN000; + DW CHILD_ENTER ;AN000;child PCB element number + DW 25 ;AN000;row override + DW 1 ;AN000;column override + DW BLACK_WHITE ;AN000;color index pointer override + DW 9 ;AN000;function key attribute + DB 0,0; ENTER,0 ;AN000;keystroke associated with child + DW CHD_ABS ;AN000;option word + + DW CHILD_QUIT ;AN000;child PCB element number + DW 25 ;AN000;row override + DW PANEL52_W+3 ;AN000;column override + DW BLACK_WHITE ;AN000;color index pointer override + DW 9 ;AN000;function key attribute + DB 0,0; ESCAPE,0 ;AN000;keystroke associated with child + DW CHD_ABS ;AN000;option word + + DW CHILD_F1HELP ;AN000;child PCB element number + DW 25 ;AN000;row override + DW PANEL52_W+3+PANEL51_W+2 ;AC028;column override + DW BLACK_WHITE ;AN000;color index pointer override + DW 9 ;AN000;function key attribute + DB 0,0; 0,F1 ;AN000;keystroke associated with child + DW CHD_ABS ;AN000;option word +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_INTRO EQU 2 ; Introduction Screen +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB2 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL2_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL2_W*PANEL2_L;AN000;Length expanded panel in mem + DW OFFSET PANEL2 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 2 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_CONFIRM EQU 3 ; Confirmation Screen +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB3 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW (80-PANEL3_W)/2 ;AN000;column location of panel + DW PANEL3_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL3_W*PANEL3_L;AN000;Length expanded panel in mem + DW OFFSET PANEL3 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 2 ;AN000;Number of child panel entries + DW OFFSET CHILD4 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds + +CHILD4 LABEL WORD ;AN000; + DW CHILD_F3EXIT ;AN000;child PCB element number + DW 25 ;AN000;row override + DW 1 ;AN000;column override + DW WHITE_RED ;AN000;color index pointer override + DW 9 ;AN000;function key attribute + DB 0,0; 0,F3 ;AN000;keystroke associated with child + DW CHD_ABS ;AN000;option word + + DW CHILD_ENTER ;AN000;child PCB element number + DW 25 ;AN000;row override + DW PANEL40_W+3 ;AN000;column override + DW WHITE_RED ;AN000;color index pointer override + DW 9 ;AN000;function key attribute + DB 0,0; 13,0 ;AN000;keystroke associated with child + DW CHD_ABS ;AN000;option word +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_WORKSPACE EQU 4 ; User memory needs screen +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB4 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL4_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL4_W*PANEL4_L;AN000;Length expanded panel in mem + DW OFFSET PANEL4 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_CTY_KYB EQU 5 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB5 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL5_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL5_W*PANEL5_L;AN000;Length expanded panel in mem + DW OFFSET PANEL5 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_COUNTRY EQU 6 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB6 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL6_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL6_W*PANEL6_L;AN000;Length expanded panel in mem + DW OFFSET PANEL6 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_KEYBOARD EQU 7 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB7 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL7_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL7_W*PANEL7_L;AN000;Length expanded panel in mem + DW OFFSET PANEL7 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_KYBD_ALT EQU 8 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB8 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL8_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL8_W*PANEL8_L;AN000;Length expanded panel in mem + DW OFFSET PANEL8 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_DEST_DRIVE EQU 9 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB9 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL9_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL9_W*PANEL9_L ;AN000;Length expanded panel in mem + DW OFFSET PANEL9 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_DOS_LOC EQU 10 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB10 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL10_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL10_W*PANEL10_L;AN000;Length expanded panel in mem + DW OFFSET PANEL10 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_PRINTER EQU 11 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB11 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL11_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL11_W*PANEL11_L;AN000;Length expanded panel in mem + DW OFFSET PANEL11 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_PRT_TYPE EQU 12 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB12 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL12_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL12_W*PANEL12_L;AN000;Length expanded panel in mem + DW OFFSET PANEL12 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_PARALLEL EQU 13 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB13 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL13_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL13_W*PANEL13_L;AN000;Length expanded panel in mem + DW OFFSET PANEL13 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_SERIAL EQU 14 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB14 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL14_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL14_W*PANEL14_L;AN000;Length expanded panel in mem + DW OFFSET PANEL14 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_REVIEW EQU 15 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB15 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL15_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL15_W*PANEL15_L;AN000;Length expanded panel in mem + DW OFFSET PANEL15 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_FUNC_DISK EQU 16 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB16 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL16_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL16_W*PANEL16_L;AN000;Length expanded panel in mem + DW OFFSET PANEL16 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; err_prt_no_hdwr EQU 17 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB17 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 11 ;AN000;row location of panel + DW LEFT_COL+1 ;AN000;column location of panel + DW PANEL17_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_RED ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL17_W*PANEL17_L;AN000;Length expanded panel in mem + DW OFFSET PANEL17 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_DOS_PARAM EQU 18 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB18 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL18_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL18_W*PANEL18_L;AN000;Length expanded panel in mem + DW OFFSET PANEL18 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_SHELL EQU 19 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB19 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL19_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL19_W*PANEL19_L;AN000;Length expanded panel in mem + DW OFFSET PANEL19 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ERR_EXIT +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB20 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 11 ;AN000;row location of panel + DW LEFT_COL+1 ;AN000;column location of panel + DW PANEL20_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_RED ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL20_W*PANEL20_L;AN000;Length expanded panel in mem + DW OFFSET PANEL20 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_FASTOPEN EQU 21 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB21 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL21_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL21_W*PANEL21_L;AN000;Length expanded panel in mem + DW OFFSET PANEL21 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_SHARE EQU 22 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB22 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL22_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL22_W*PANEL22_L;AN000;Length expanded panel in mem + DW OFFSET PANEL22 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_GRAPHICS EQU 23 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB23 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL23_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL23_W*PANEL23_L;AN000;Length expanded panel in mem + DW OFFSET PANEL23 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_EXP_MEMORY EQU 24 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB24 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL24_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL24_W*PANEL24_L;AN000;Length expanded panel in mem + DW OFFSET PANEL24 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_VDISK EQU 25 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB25 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL25_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL25_W*PANEL25_L;AN000;Length expanded panel in mem + DW OFFSET PANEL25 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_CONFIG_PARS EQU 26 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB26 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL26_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL26_W*PANEL26_L;AN000;Length expanded panel in mem + DW OFFSET PANEL26 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_FIXED_FIRST EQU 27 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB27 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL27_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL27_W*PANEL27_L;AN000;Length expanded panel in mem + DW OFFSET PANEL27 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_FIXED_BOTH EQU 28 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB28 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL28_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL28_W*PANEL28_L;AN000;Length expanded panel in mem + DW OFFSET PANEL28 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_REBOOT EQU 29 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB29 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 4 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL29_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL29_W*PANEL29_L;AN000;Length expanded panel in mem + DW OFFSET PANEL29 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_date_time EQU 30 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB30 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL30_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL30_W*PANEL30_L;AN000;Length expanded panel in mem + DW OFFSET PANEL30 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 2 ;AN000;Number of child panel entries + DW OFFSET CHILD31 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds + +CHILD31 LABEL WORD ;AN000; + DW CHILD_ENTER ;AN000;child PCB element number + DW 25 ;AN000;row override + DW 1 ;AN000;column override + DW BLACK_WHITE ;AN000;color index pointer override + DW 9 ;AN000;function key attribute + DB 0,0; ENTER,0 ;AN000;keystroke associated with child + DW CHD_ABS ;AN000;option word + + DW CHILD_F1HELP ;AN000;child PCB element number + DW 25 ;AN000;row override + DW 17 ;AC087;SEH increased for translation space ;AN000;column override + DW BLACK_WHITE ;AN000;color index pointer override + DW 9 ;AN000;function key attribute + DB 0,0; 0,F1 ;AN000;keystroke associated with child + DW CHD_ABS ;AN000;option word + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_FORMAT EQU 31 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB31 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL31_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL31_W*PANEL31_L;AN000;Length expanded panel in mem + DW OFFSET PANEL31 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 2 ;AN000;Number of child panel entries + DW OFFSET CHILD31 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_INST_PROMPT EQU 32 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB32 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL+12 ;AN000;column location of panel + DW PANEL32_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL32_W*PANEL32_L;AN000;Length expanded panel in mem + DW OFFSET PANEL32 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; err_keyb EQU 33 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB33 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 11 ;AN000;row location of panel + DW LEFT_COL+3 ;AN000;column location of panel + DW PANEL33_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_RED ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL33_W*PANEL33_L;AN000;Length expanded panel in mem + DW OFFSET PANEL33 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_COMPLETE_1 EQU 34 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB34 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL+12 ;AC028;column location of panel + DW PANEL34_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL34_W*PANEL34_L;AN000;Length expanded panel in mem + DW OFFSET PANEL34 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_COMP_KYS_1C EQU 35 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB35 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW left_col+7 ;AC028;column location of panel + DW PANEL35_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL35_W*PANEL35_L;AN000;Length expanded panel in mem + DW OFFSET PANEL35 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; contextual help +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB36 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL36_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW BLACK_WHITE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL36_W*PANEL36_L;AN000;Length expanded panel in mem + DW OFFSET PANEL36 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD37 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds + ; + +CHILD37 LABEL WORD ;AN000; + DW CHILD_QUIT ;AN000;child PCB element number + DW PANEL36_L-1 ;AN000;row override + DW 2 ;AN000;column override + DW BLACK_WHITE ;AN000;color index pointer override + DW 9 ;AN000;function key attribute + DB 27,0 ;AN000;keystroke associated with child + DW 0 ;CHD_ABS ;AN000;option word + + DW CHILD_F1HELP ;AN000;child PCB element number + DW PANEL36_L-1 ;AN000;row override + DW 16 ;AC081;SEH ;AN000;column override + DW BLACK_WHITE ;AN000;color index pointer override + DW 9 ;AN000;function key attribute + DB 0,F1 ;AN000;keystroke associated with child + DW 0 ;CHD_ABS ;AN000;option word + + DW CHILD_F9KEYS ;AN000;child PCB element number + DW PANEL36_L-1 ;AN000;row override + DW 30 ;AC081;SEH ;AN000;column override + DW BLACK_WHITE ;AN000;color index pointer override + DW 9 ;AN000;function key attribute + DB 0,F9 ;AN000;keystroke associated with child + DW 0 ;CHD_ABS ;AN000;option word +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; HORIZONTAL BAR +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB37 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 24 ;AN000;row location of panel + DW 1 ;AN000;column location of panel + DW PANEL37_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL37_W*PANEL37_L;AN000;Length expanded panel in mem + DW OFFSET PANEL37 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_CONT_OPTION EQU 38 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB38 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 22 ;AN000;row location of panel + DW (80-PANEL38_W)/2 ;AN000;column location of panel + DW PANEL38_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL38_W*PANEL38_L;AN000;Length expanded panel in mem + DW OFFSET PANEL38 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_PRINTER_1 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB39 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 4 ;AN000;row location of panel + DW left_col ;AN000;column location of panel + DW PANEL39_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL39_W*PANEL39_L;AN000;Length expanded panel in mem + DW OFFSET PANEL39 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds + ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; CHILD F3=Exit +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB40 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL40_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL40_W*PANEL40_L;AN000;Length expanded panel in mem + DW OFFSET PANEL40 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_FIXED_1 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB41 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 4 ;AN000;row location of panel + DW left_col ;AN000;column location of panel + DW PANEL41_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL41_W*PANEL41_L;AN000;Length expanded panel in mem + DW OFFSET PANEL41 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_LOG_DRIVE EQU 42 ;AN000;JW +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB42 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 5 ;AC000;row location of panel JW + DW left_col ;AN000;column location of panel + DW PANEL42_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL42_W*PANEL42_L;AN000;Length expanded panel in mem + DW OFFSET PANEL42 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_REBOOT_KEYS +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB43 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 21 ;AN000;row location of panel + DW left_col ;AN000;column location of panel + DW PANEL43_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL43_W*PANEL43_L;AN000;Length expanded panel in mem + DW OFFSET PANEL43 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INSTALL_1 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB44 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW left_col ;AN000;column location of panel + DW PANEL44_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL44_W*PANEL44_L;AN000;Length expanded panel in mem + DW OFFSET PANEL44 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INSTALL_2 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB45 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW left_col ;AN000;column location of panel + DW PANEL45_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL45_W*PANEL45_L;AN000;Length expanded panel in mem + DW OFFSET PANEL45 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_COMP_VER +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB46 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW left_col+7 ;AC028;column location of panel + DW PANEL46_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL46_W*PANEL46_L;AN000;Length expanded panel in mem + DW OFFSET PANEL46 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_KEYS_1 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB47 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 21 ;AN000;row location of panel + DW left_col+5 ;AN028;column location of panel + DW PANEL47_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL47_W*PANEL47_L;AN000;Length expanded panel in mem + DW OFFSET PANEL47 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_KEYS_2 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB48 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW left_col+7 ;AC028;column location of panel + DW PANEL48_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL48_W*PANEL48_L;AN000;Length expanded panel in mem + DW OFFSET PANEL48 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; CHILD F1=HELP +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB49 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL49_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL49_W*PANEL49_L;AN000;Length expanded panel in mem + DW OFFSET PANEL49 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; CHILD F9=keys +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB50 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL50_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL50_W*PANEL50_L;AN000;Length expanded panel in mem + DW OFFSET PANEL50 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; CHILD esc +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB51 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL51_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL51_W*PANEL51_L;AN000;Length expanded panel in mem + DW OFFSET PANEL51 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; CHILD ENTER +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB52 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL52_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL52_W*PANEL52_L;AN000;Length expanded panel in mem + DW OFFSET PANEL52 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_COMP_REP +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB53 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW left_col+7 ;AC028;column location of panel + DW PANEL53_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL53_W*PANEL53_L;AN000;Length expanded panel in mem + DW OFFSET PANEL53 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ERROR PANEL 1 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB54 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 11 ;AN000;row location of panel + DW LEFT_COL+3 ;AN000;column location of panel + DW PANEL54_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_RED ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL54_W*PANEL54_L;AN000;Length expanded panel in mem + DW OFFSET PANEL54 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ERROR PANEL 2 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB55 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 11 ;AN000;row location of panel + DW LEFT_COL+3 ;AN000;column location of panel + DW PANEL55_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_RED ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL55_W*PANEL55_L;AN000;Length expanded panel in mem + DW OFFSET PANEL55 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ERROR PANEL 3 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB56 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 11 ;AN000;row location of panel + DW LEFT_COL+3 ;AN000;column location of panel + DW PANEL56_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_RED ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL56_W*PANEL56_L;AN000;Length expanded panel in mem + DW OFFSET PANEL56 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ERROR PANEL 4 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB57 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 11 ;AN000;row location of panel + DW LEFT_COL+3 ;AN000;column location of panel + DW PANEL57_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_RED ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL57_W*PANEL57_L;AN000;Length expanded panel in mem + DW OFFSET PANEL57 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_START_B +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB58 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL58_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL58_W*PANEL58_L;AN000;Length expanded panel in mem + DW OFFSET PANEL58 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_REM_SEL_A +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB59 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL59_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL59_W*PANEL59_L;AN000;Length expanded panel in mem + DW OFFSET PANEL59 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_REM_START_B +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB60 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL60_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL60_W*PANEL60_L;AN000;Length expanded panel in mem + DW OFFSET PANEL60 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_REM_DOS_A +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB61 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL61_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL61_W*PANEL61_L;AN000;Length expanded panel in mem + DW OFFSET PANEL61 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ERR_BAD_PATH +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB62 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 11 ;AN000;row location of panel + DW LEFT_COL+1 ;AN000;column location of panel + DW PANEL62_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_RED ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL62_W*PANEL62_L;AN000;Length expanded panel in mem + DW OFFSET PANEL62 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ERR_BAD_PRT_FILE +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB63 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 11 ;AN000;row location of panel + DW LEFT_COL+1 ;AN000;column location of panel + DW PANEL63_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_RED ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL63_W*PANEL63_L;AN000;Length expanded panel in mem + DW OFFSET PANEL63 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ERR_BAD_PRT_PROFILE +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB64 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 11 ;AN000;row location of panel + DW LEFT_COL+1 ;AN000;column location of panel + DW PANEL64_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_RED ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL64_W*PANEL64_L;AN000;Length expanded panel in mem + DW OFFSET PANEL64 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; FORMAT_DISK +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB65 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL65_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL65_W*PANEL65_L;AN000;Length expanded panel in mem + DW OFFSET PANEL65 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; FORMAT_DISKETTE +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB66 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL66_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL66_W*PANEL66_L;AN000;Length expanded panel in mem + DW OFFSET PANEL66 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ERR_border +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB67 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 10 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL67_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_RED ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL67_W*PANEL67_L;AN000;Length expanded panel in mem + DW OFFSET PANEL67 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 2 ;AN000;Number of child panel entries + DW OFFSET CHILD68 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds + +CHILD68 LABEL WORD ;AN000; + DW CHILD_F3EXIT ;AN000;child PCB element number + DW PANEL67_L-1 ;AN000;row override + DW 2 ;AN000;column override + DW WHITE_RED ;AN000;color index pointer override + DW 9 ;AN000;function key attribute + DB 0,F3 ;AN000;keystroke associated with child + DW 0 ;CHD_ABS ;AN000;option word + + DW CHILD_ENTER ;AN000;child PCB element number + DW PANEL67_L-1 ;AN000;row override + DW 16 ;AN000;column override + DW WHITE_RED ;AN000;color index pointer override + DW 9 ;AN000;function key attribute + DB 13,0 ;AN000;keystroke associated with child + DW 0 ;CHD_ABS ;AN000;option word +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ERR_DOS_DISK +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB68 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 11 ;AN000;row location of panel + DW LEFT_COL+1 ;AN000;column location of panel + DW PANEL68_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_RED ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL68_W*PANEL68_L;AN000;Length expanded panel in mem + DW OFFSET PANEL68 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ERR_INSTALL +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB69 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 11 ;AN000;row location of panel + DW LEFT_COL+1 ;AN000;column location of panel + DW PANEL69_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_RED ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL69_W*PANEL69_L;AN000;Length expanded panel in mem + DW OFFSET PANEL69 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_DISKCOPY +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB70 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 4 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL70_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL70_W*PANEL70_L;AN000;Length expanded panel in mem + DW OFFSET PANEL70 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 2 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_DSKCPY_SRC +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB71 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL71_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL71_W*PANEL71_L;AN000;Length expanded panel in mem + DW OFFSET PANEL71 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_DSKCPY_TAR +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB72 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL72_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL72_W*PANEL72_L;AN000;Length expanded panel in mem + DW OFFSET PANEL72 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_DSKCPY_CPY +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB73 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL73_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL73_W*PANEL73_L;AN000;Length expanded panel in mem + DW OFFSET PANEL73 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_PARTIAL +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB74 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 6 ;AN000;row location of panel + DW left_col+7 ;AC028;column location of panel + DW PANEL74_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL74_W*PANEL74_L;AN000;Length expanded panel in mem + DW OFFSET PANEL74 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; FORMAT_DISKETTE (SINGLE DRIVE - SHELL) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB75 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL75_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL75_W*PANEL75_L;AN000;Length expanded panel in mem + DW OFFSET PANEL75 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; FORMAT_DISKETTE (SINGLE DRIVE - STARTUP) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB76 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL76_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL76_W*PANEL76_L;AN000;Length expanded panel in mem + DW OFFSET PANEL76 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_REM_SHELL_360 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB77 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL77_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL77_W*PANEL77_L;AN000;Length expanded panel in mem + DW OFFSET PANEL77 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_REM_SELECT_360 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB78 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL78_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL78_W*PANEL78_L;AN000;Length expanded panel in mem + DW OFFSET PANEL78 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_REM_UTIL1_360 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB79 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL79_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL79_W*PANEL79_L;AN000;Length expanded panel in mem + DW OFFSET PANEL79 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_COPYING +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB80 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL80_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL80_W*PANEL80_L;AN000;Length expanded panel in mem + DW OFFSET PANEL80 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_WORK1_360 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB81 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL81_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL81_W*PANEL81_L;AN000;Length expanded panel in mem + DW OFFSET PANEL81 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_WORK2_360 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB82 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL82_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL82_W*PANEL82_L;AN000;Length expanded panel in mem + DW OFFSET PANEL82 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_SHELL_360 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB83 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL83_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL83_W*PANEL83_L;AN000;Length expanded panel in mem + DW OFFSET PANEL83 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_START_360 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB84 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL84_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL84_W*PANEL84_L;AN000;Length expanded panel in mem + DW OFFSET PANEL84 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_INSTALL_360 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB85 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL85_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL85_W*PANEL85_L;AN000;Length expanded panel in mem + DW OFFSET PANEL85 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_WORK1_S360 EQU 86 ;AN000;DT 1 drive 360 installation +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB86 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL86_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL86_W*PANEL86_L;AN000;Length expanded panel in mem + DW OFFSET PANEL86 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_WORK2_S360 EQU 87 ;AN000;DT +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB87 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL87_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL87_W*PANEL87_L;AN000;Length expanded panel in mem + DW OFFSET PANEL87 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_SHELL_S360 EQU 88 ;AN000;DT " +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB88 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL88_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL88_W*PANEL88_L ;AN000;Length expanded panel in mem + DW OFFSET PANEL88 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_STARTT_S360 EQU 89 ;AN000;DT " +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB89 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL89_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL89_W*PANEL89_L ;AN000;Length expanded panel in mem + DW OFFSET PANEL89 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_START360 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB90 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL90_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL90_W*PANEL90_L ;AN000;Length expanded panel in mem + DW OFFSET PANEL90 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_COMPLETE3 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB91 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW left_col+7 ;AC028;column location of panel + DW PANEL91_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL91_W*PANEL91_L ;AN000;Length expanded panel in mem + DW OFFSET PANEL91 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INSTALL_COPY +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB92 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL92_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL92_W*PANEL92_L ;AN000;Length expanded panel in mem + DW OFFSET PANEL92 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_SHELL_HD +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB93 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL93_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL93_W*PANEL93_L;AN000;Length expanded panel in mem + DW OFFSET PANEL93 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_EXP_MEMORY2 EQU 94 ;AN000;JW +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB94 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL94_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL94_W*PANEL94_L;AN000;Length expanded panel in mem + DW OFFSET PANEL94 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_START720 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB95 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL95_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL95_W*PANEL95_L ;AN000;Length expanded panel in mem + DW OFFSET PANEL95 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_START1440 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB96 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL96_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL96_W*PANEL96_L ;AN000;Length expanded panel in mem + DW OFFSET PANEL96 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ERR_INS_INSTALL +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB97 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 11 ;AN000;row location of panel + DW LEFT_COL+1 ;AN000;column location of panel + DW PANEL97_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_RED ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL97_W*PANEL97_L;AN000;Length expanded panel in mem + DW OFFSET PANEL97 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 0 ;AN000;Number of child panel entries + DW 0 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PAN_CHOOSE_SHELL EQU 98 ; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB98 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 1 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL98_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL98_W*PANEL98_L;AN000;Length expanded panel in mem + DW OFFSET PANEL98 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 3 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_WORKING_A equ 99 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB99 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL99_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL99_W*PANEL99_L;AN000;Length expanded panel in mem + DW OFFSET PANEL99 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_MSSHELL_A equ 100 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB100 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL100_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL100_W*PANEL100_L;AN000;Length expanded panel in mem + DW OFFSET PANEL100 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_SHELL_DISKS equ 101 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB101 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL101_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL101_W*PANEL101_L;AN000;Length expanded panel in mem + DW OFFSET PANEL101 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_OP_WORK = 102 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB102 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL102_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL102_W*PANEL102_L;AN000;Length expanded panel in mem + DW OFFSET PANEL102 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SUB_INS_WORK3_A equ 103 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB103 LABEL WORD ;AN000; + DW PCB_EXP ;AN000;option word + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DB 0 ;AN000;GHG new adds + DW 8 ;AN000;row location of panel + DW LEFT_COL ;AN000;column location of panel + DW PANEL103_W ;AN000;text char width of panel + DW 0 ;AN000;Max poss panel sizing in text + DW WHITE_BLUE ;AN000;Index number of log color + DB '�Ŀ�����' ;AN000;8 log border characters + DW 0 ;AN000;Length compress panel in mem + DW 0 ;AN000;Off addr compressed panel + DW 0 ;AN000;Seg addr compressed panel + DW PANEL103_W*PANEL103_L;AN000;Length expanded panel in mem + DW OFFSET PANEL103 ;AN000;Off addr of expanded panel in + DW 0 ;AN000;Seg addr of expanded panel in + DW 0 ;AN000;Len of the mixed panel in mem + DW 0 ;AN000;Off addr of mixed panel in mem + DW 0 ;AN000;Seg addr of mixed panel in mem + DW 0 ;AN000;Len of the panel label + DW 0 ;AN000;Off addr of the panel label + DW 0 ;AN000;Seg addr of the panel label + DW 0 ;AN000;Beg relative row of panel label + DW 0 ;AN000;Beg relative col of panel label + DW 0 ;AN000;Len of the panel stored in file + DW 0 ;AN000;Off address of full filespec + DW 0 ;AN000;Seg address of full filespec + DW 0 ;AN000;Lower off word of the beg off + DW 0 ;AN000;High off word of the beg off + DW 9 DUP(0) ;AN000;Reserved for scroll and size + DW 1 ;AN000;Number of child panel entries + DW OFFSET CHILD2 ;AN000;Off address of child panel table + DW 0 ;AN000;Seg address of child panel table + DW 10 DUP(0) ;AN000;GHG new adds + + + INCLUDE PANEL.INF ;AN000; + +CODE ENDS ;AN000; + END ;AN000; + \ No newline at end of file diff --git a/v4.0/src/SELECT/PCEQUATE.INC b/v4.0/src/SELECT/PCEQUATE.INC new file mode 100644 index 0000000..8faf0d5 --- /dev/null +++ b/v4.0/src/SELECT/PCEQUATE.INC @@ -0,0 +1,451 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSCRRD option bit equates (SRD_OPT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SRD_INITIAL EQU 0000000000000001B ;AN000;initialize SCB and filespec buff +SRD_READONE EQU 0000000000000010B ;AN000;read field specified by SRD_ID +SRD_APPEND EQU 0000000000000100B ;AN000;match field ID are issued new ID +SRD_READALL EQU 0000000000001000B ;AN000;read all FLDS in specified file +SRD_ALLOCRES EQU 0000000000010000B ;AN000;allocate reserved PCSLCTP space +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSCRRD error bit equates (SRD_ERROR) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SRD_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small +SRD_NOFIELDS EQU 0000000000000010B ;AN000;file does not contain fields +SRD_NOTCASFILE EQU 0000000000000100B ;AN000;file object list does not exist +SRD_FIELDSFULL EQU 0000000000001000B ;AN000;max num FLDS read into SCB vect +SRD_NOINITIAL EQU 0000000000010000B ;AN000;make initialize call first +SRD_NOFIELDID EQU 0000000000100000B ;AN000;specified field ID not found +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCHLPRD option bit equates (HRD_OPT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +HRD_TOPIC EQU 0000000000000001B ;AN000;process help TOPIC(S) index +HRD_TEXT EQU 0000000000000010B ;AN000;process HELP or ERROR text +HRD_DISPID EQU 0000000000000100B ;AN000;display unique id on topic list +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCHLPRD error bit equates (HRD_ERROR) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +HRD_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small +HRD_NOHLPOBJ EQU 0000000000000010B ;AN000;file does not contain helps +HRD_NOOBJLST EQU 0000000000000100B ;AN000;file object list does not exist +HRD_NOHELPID EQU 0000000000001000B ;AN000;requested id was not found +HRD_NOTCASFILE EQU 0000000000010000B ;AN000;not a valid cas file +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSTRST equates +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SSC_TBSL EQU 0000000000000001B ;AN000;use two byte string length +SSC_PTSB EQU 0000000000000010B ;AN000;pointer points to string buffer +SSC_VTSAO EQU 0000000000000100B ;AN000;vector table is string addr only +SSC_VTASO EQU 0000000000001000B ;AN000;vector table addr is seg:offset +SSC_SLSB EQU 0000000000010000B ;AN000;string length is in string buffer +SSC_SBTC EQU 0000000000100000B ;AN000;string buffer has term. character +SSC_VTE EQU 1 ;AN000;error in vector table +SSC_SBE EQU 2 ;AN000;error in string buffer +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSLCTP Option word one (SCB_OPT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SCB_UC EQU 0000000000000001B ;AN000;upper case option +SCB_WRAP EQU 0000000000000010B ;AN000;wrap option +SCB_FRBF EQU 0000000000000100B ;AN000;force return before first option +SCB_FRAL EQU 0000000000001000B ;AN000;force return after last option +SCB_LL EQU 0000000000010000B ;AN000;lock line +SCB_UKS EQU 0000000000100000B ;AN000;use keystroke +SCB_RD EQU 0000000001000000B ;AN000;return after display option +SCB_RUK EQU 0000000010000000B ;AN000;return unused keys option +SCB_UI EQU 0000000100000000B ;AN000;use index option +SCB_TRN EQU 0000001000000000B ;AN000;translate character +SCB_MON EQU 0000010000000000B ;AN000;convert to upper case monocasing +SCB_DBCS EQU 0000100000000000B ;AN000;check for double byte chars +SCB_TBL EQU 0001000000000000B ;AN000;use given DBCS range table +SCB_DCHECK EQU 0010000000000000B ;AN000;display check mark characters +SCB_DACTIVE EQU 0100000000000000B ;AN000;display active string indicators +SCB_DPOINT EQU 1000000000000000B ;AN000;display selection pointer string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSLCTP Option word two (SCB_OPT2) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SCB_CS EQU 0000000000000001B ;AN000;clear screen on entry option +SCB_ROTN EQU 0000000000000010B ;AN000;reset option to normal on return +SCB_UET EQU 0000000000000100B ;AN000;use existing text option +SCB_CFO EQU 0000000000001000B ;AN000;cursor follows option +SCB_LCOX EQU 0000000000010000B ;AN000;leave cursor on exit +SCB_IPAGE EQU 0000000000100000B ;AN000;instant paging +SCB_PM1 EQU 0000000001000000B ;AN000;paging is minus one line +SCB_UIND EQU 0000000010000000B ;AN000;display up, dn, lf, rg indicators +SCB_UNCA EQU 0000000100000000B ;AN000;use normal color array +SCB_DYN EQU 0000001000000000B ;AN000;option array is dynamicly created +SCB_LANDR EQU 0000010000000000B ;AN000;left and right scrolling active +SCB_CPHY EQU 0000100000000000B ;AN000;color array is physical attributs +SCB_NUML EQU 0001000000000000B ;AN000;generate num list in opt strings +SCB_SKIP EQU 0010000000000000B ;AN000;skip inactive option strings +SCB_SHIGH EQU 0100000000000000B ;AN000;highlight the selected opt strgs +SCB_AHIGH EQU 1000000000000000B ;AN000;highlight the active option strgs +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSLCTP Option word three (SCB_OPT3) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SCB_SELACT EQU 0000000000000001B ;AN000;allow selection of inactive elem +SCB_SELEXC EQU 0000000000000010B ;AN000;exclusive selection of one elemet +SCB_EXCSING EQU 0000000000000100B ;AN000;one element is always selected +SCB_NUMUIND EQU 0000000000001000B ;AN000;display line number count +SCB_CHIGH EQU 0000000000010000B ;AN000;hilight cursored and selected stg +SCB_NUMS EQU 0000000000100000B ;AN000;auto 0-9 number selection +SCB_FINDE EQU 0000000001000000B ;AN000;auto character search +SCB_RELUIND EQU 0000000010000000B ;AN000;rel row/col used w/dirct indicato +SCB_RELSCR EQU 0000000100000000B ;AN000;rel row/col used w/scroll field +SCB_LVBOVR EQU 0000001000000000B ;AN000;use video buffer seg:off override +SCB_FM EQU 0000010000000000B ;AN000;make call to dynamic format rout +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSLCTP Select Array Option (SCB_SELSEG:SCB_SELOFF) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SCB_SELECTON EQU 0000000000000001B ;AN000;element selected +SCB_ACTIVEON EQU 0000000000000010B ;AN000;element active +SCB_SKIPON EQU 0000000000000100B ;AN000;element should be skipped +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCINCHA option equates (INC_OPT) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INC_KWAIT EQU 0000000000000001B ;keystroke +INC_UTRAN EQU 0000000000000010B ;translate keys using user table +INC_UDBCS EQU 0000000000000100B ;DBCS processed using user table +INC_DDBCS EQU 0000000000001000B ;DBCS processed using DOS table +INC_UMONO EQU 0000000000010000B ;monocase keys using user table +INC_AMONO EQU 0000000000100000B ;monocase keys using USA algorithm +INC_RSCAN EQU 0000000001000000B ;return scan codes for norm chars +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCINCHA option equates (INC_STAT) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INC_KFND EQU 0000000000000001B ;AN000;character found in buffer +INC_DBCS EQU 0000000000000010B ;AN000;character found is double byte +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCCLRRD error bit equates (CRD_ERROR) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CRD_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small +CRD_NOCOLORS EQU 0000000000000010B ;AN000;file does not contain colors +CRD_NOTCASFILE EQU 0000000000000100B ;AN000;file object list does not exist +CRD_IDNOTFOUND EQU 0000000000001000B ;AN000;color index ID not found +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANRD option bit equates (PRD_OPT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PRD_INITIAL EQU 0000000000000001B ;AN000;initialize PCB and filespec buff +PRD_READONE EQU 0000000000000010B ;AN000;read pan specified by PRD_ID +PRD_APPEND EQU 0000000000000100B ;AN000;match pans ID are issued new ID +PRD_READALL EQU 0000000000001000B ;AN000;read all pans in specified file +PRD_SIZEMALL EQU 0000000000010000B ;AN000;reserve space for panel sizing +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANRD error bit equates (PRD_ERROR) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PRD_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small +PRD_NOPANELS EQU 0000000000000010B ;AN000;file does not contain panels +PRD_NOTCASFILE EQU 0000000000000100B ;AN000;file object list does not exist +PRD_PANELSFULL EQU 0000000000001000B ;AN000;max num pans read into PCB vect +PRD_NOINITIAL EQU 0000000000010000B ;AN000;make initialize call first +PRD_NOPANELID EQU 0000000000100000B ;AN000;specified panel ID not found +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCDISPQ option equates (QM_OPT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +QM_INIT EQU 0000000000000001B ;AN000;Initialize working buffer +QM_PUSHCHD EQU 0000000000000010B ;AN000;Add child number +QM_RVMCHD EQU 0000000000000100B ;AN000;Remove specific child number +QM_POPCHD EQU 0000000000001000B ;AN000;Pop (n) number of child cur queue +QM_PUSHPAN EQU 0000000000010000B ;AN000;Add panel number +QM_RVMPAN EQU 0000000000100000B ;AN000;Remove specific panel number +QM_POPPAN EQU 0000000001000000B ;AN000;Pop (n) number of panls cur queue +QM_PUSHCQU EQU 0000000010000000B ;AN000;Push current child queue +QM_POPCQU EQU 0000000100000000B ;AN000;Pop last child queue +QM_PUSHPQU EQU 0000001000000000B ;AN000;Push current panel queue +QM_POPPQU EQU 0000010000000000B ;AN000;Pop last panel queue pushed +QM_CLSCHD EQU 0000100000000000B ;AN000;Clear current child queue. +QM_CLSPAN EQU 0001000000000000B ;AN000;Clear current panel queue. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; PCDISPQ option equates (QM_OPT2) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +QM_BREAKON EQU 0000000000000001B ;AN000;break option is on +QM_BREAKOFF EQU 0000000000000010B ;AN000;break option is off +QM_SRFON EQU 0000000000000100B ;AN000;selected refresh option is on +QM_SRFOFF EQU 0000000000001000B ;AN000;selected refresh option is off +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCDISPQ error equates (QM_ERROR) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +QM_ERRMP EQU 0000000000000001B ;AN000;max number of panels added +QM_ERRMC EQU 0000000000000010B ;AN000;max number of childs added +QM_ERRMPQ EQU 0000000000000100B ;AN000;max number of panel queues pushed +QM_ERRMCQ EQU 0000000000001000B ;AN000;max number of child queues pushed +QM_ERROP EQU 0000000000010000B ;AN000;max number of panel queues popped +QM_ERROC EQU 0000000000100000B ;AN000;max number of child queues popped +QM_ERRBU EQU 0000000001000000B ;AN000;inadequate buffer size avail +QM_ERRPN EQU 0000000010000000B ;AN000;specified panel not found +QM_ERRCN EQU 0000000100000000B ;AN000;specified child not found +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANEL option bit equates (PM_OPT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PM_RF EQU 0000000000000001B ;AN000;do not refresh display +PM_SRF EQU 0000000000000010B ;AN000;selective PVB refresh from LVB +PM_BK EQU 0000000000000100B ;AN000;panel break function active +PM_CL EQU 0000000000001000B ;AN000;initialize LVB to base char/attr +PM_DOA EQU 0000000000010000B ;AN000;display childs in active parent +PM_DOV EQU 0000000000100000B ;AN000;use child row, col, color overrid +PM_DOQ EQU 0000000001000000B ;AN000;disp all child in parent chd tabl +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANEL error equates for (PM_ERROR) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PM_PANPDQ EQU 0000000000000001B ;AN000;invalid parent PDQ or start num +PM_PCBVEC EQU 0000000000000010B ;AN000;invalid PCB vector entry found +PM_UNKNPANS EQU 0000000000000100B ;AN000;unknown panel source found +PM_CHDTAB EQU 0000000000001000B ;AN000;set error with child table +PM_COLORX EQU 0000000000010000B ;AN000;panel's color index out of range +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANEL Parent and Child Display Queue option bit equates (PT_OPT) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PT_BK EQU 0000000000000001B ;AN000;panel break on +PT_SRF EQU 0000000000000010B ;AN000;selective refresh of panel to PVB +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANEL Panel Control Block option equates for individual panels (PCB_OPT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB_CRE EQU 0000000000000001B ;AN000;Create panel from scratch +PCB_CMP EQU 0000000000000010B ;AN000;Use compress text form in memory +PCB_EXP EQU 0000000000000100B ;AN000;Use expanded text form in memory +PCB_MXP EQU 0000000000001000B ;AN000;Use mixed text/attr form in memoy +PCB_LB EQU 0000000000010000B ;AN000;Use logical border +PCB_ASZ EQU 0000000000100000B ;AN000;Allow sizing of panel +PCB_ASC EQU 0000000001000000B ;AN000;Allow scrolling of panel +PCB_LAB EQU 0000000010000000B ;AN000;Use the defined panel label +PCB_DTB EQU 0000000100000000B ;AN000;Draw top border (graphics only) +PCB_DBB EQU 0000001000000000B ;AN000;Draw bottom border (graphic only) +PCB_DLB EQU 0000010000000000B ;AN000;Draw left border (graphics only) +PCB_DRB EQU 0000100000000000B ;AN000;Draw right border (graphics only) +PCB_DSHADOW EQU 0001000000000000B ;AN000;Draw shadow (graphics only) +PCB_PELCOORD EQU 0010000000000000B ;AN000;row/col in pel coordinates (grap) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCINSTR option bit equates (INS_OPT) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +INS_FKS EQU 0000000000000001B ;AN000;find keystroke +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCGVIDO Status equates (GV_STAT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GV_TV EQU 0000000000000001B ;AN000;TopView is present +GV_CGA EQU 0000000000000010B ;AN000;CGA is present +GV_EGA EQU 0000000000000100B ;AN000;EGA is present +GV_PGA EQU 0000000000001000B ;AN000;PGA is present +GV_MGA EQU 0000000000010000B ;AN000;MGA is present +GV_EGAA EQU 0000000000100000B ;AN000;EGA is active card +GV_CGAA EQU 0000000001000000B ;AN000;CGA is active card +GV_EGACM EQU 0000000010000000B ;AN000;EGA is set to monochrome +GV_PGAEM EQU 0000000100000000B ;AN000;PGA is in color emulation mode +GV_HS EQU 0000001000000000B ;AN000;display requires sync check 1=Y +GV_64K EQU 0000010000000000B ;AN000; 64K memory on EGA card +GV_128K EQU 0000100000000000B ;AN000;128K memory on EGA card +GV_192K EQU 0001000000000000B ;AN000;192K memory on EGA card +GV_256K EQU 0010000000000000B ;AN000;256K memory on EGA card +GV_UM EQU 0100000000000000B ;AN000;error unknown moniter or config +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCGVIDO Status equates (GV_STAT2) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GV_TVW EQU 0000000000000001B ;AN000;App is 'well behaved' under TV +GV_P5140 EQU 0000000000000010B ;AN000;P12 with LCD +GV_P5153 EQU 0000000000000100B ;AN000;P12 with color +GV_P5151 EQU 0000000000001000B ;AN000;P12 with monochrome +GV_COLOR EQU 0000000000010000B ;AN000;color mode +GV_TEXTGRAPH EQU 0000000000100000B ;AN000;graphics mode +GV_MONOP EQU 0000000001000000B ;AN000;monochrome adapter is primary +GV_CGAP EQU 0000000010000000B ;AN000;CGA adapter is primary card +GV_EGAP EQU 0000000100000000B ;AN000;EGA adapter is primary card +GV_TURBOP EQU 0000001000000000B ;AN000;Turbo graphics adapter is primary +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCINPUT option equates. +; +; +; PCINPUT Option equates (IN_OPT) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +IN_UTRAN EQU 0000000000000001B ;AN000;translate keys using user table +IN_ADBCS EQU 0000000000000010B ;AN000;DBCS option active +IN_UDBCS EQU 0000000000000100B ;AN000;DBCS processed using user table +IN_DDBCS EQU 0000000000001000B ;AN000;DBCS processed using DOS table +IN_UMONO EQU 0000000000010000B ;AN000;monocase keys using user table +IN_AMONO EQU 0000000000100000B ;AN000;monocase keys using USA algorithm +IN_LICBX EQU 0000000001000000B ;AN000;load ICB off:seg and exit +IN_LVBOV EQU 0000000010000000B ;AN000;use video buffer seg:off override + ; +IN_RANG EQU 0000000000000001B ;AN000;ICB ID out of vector range +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Input Field Control Block Equates +; +; ICB_OPT1 Option word one equates +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ICB_ECL EQU 0000000000000001B ;AN000;set specified color on entry +ICB_XCL EQU 0000000000000010B ;AN000;set specified color on exit +ICB_USC EQU 0000000000000100B ;AN000;use color attribute string +ICB_BEN EQU 0000000000001000B ;AN000;display entry delimiters +ICB_BEX EQU 0000000000010000B ;AN000;display exit delimiters +ICB_BOX EQU 0000000000100000B ;AN000;display border delimiters +ICB_MUS EQU 0000000001000000B ;AN000;plus and minus display active +ICB_SMU EQU 0000000010000000B ;AN000;starting default is negative +ICB_OUT EQU 0000000100000000B ;AN000;display default and accept input +ICB_CLR EQU 0000001000000000B ;AN000;clear default on first entry +ICB_PSW EQU 0000010000000000B ;AN000;password +ICB_RJU EQU 0000100000000000B ;AN000;right justification is activated +ICB_SWK EQU 0001000000000000B ;AN000;switch entry dir key active +ICB_RTA EQU 0010000000000000B ;AN000;right arrow editing +ICB_LFA EQU 0100000000000000B ;AN000;left arrow editing +ICB_BKS EQU 1000000000000000B ;AN000;backspace editing +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB_OPT2 Option word two equates +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ICB_INS EQU 0000000000000001B ;AN000;insert key editing +ICB_DEL EQU 0000000000000010B ;AN000;delete key editing +ICB_HOM EQU 0000000000000100B ;AN000;home key editing +ICB_CTE EQU 0000000000001000B ;AN000;control + end key editing +ICB_END EQU 0000000000010000B ;AN000;end key editing +ICB_AXC EQU 0000000000100000B ;AN000;auto enter on cursor +ICB_AXD EQU 0000000001000000B ;AN000;auto enter on data +ICB_CSW EQU 0000000010000000B ;AN000;wrap the cursor end to end +ICB_UPC EQU 0000000100000000B ;AN000;lower case to upper conversion +ICB_UFK EQU 0000001000000000B ;AN000;use supplied keystroke as 1 key +ICB_UDO EQU 0000010000000000B ;AN000;undo key replaces default +ICB_TSD EQU 0000100000000000B ;AN000;thousands separators during inpu +ICB_TSA EQU 0001000000000000B ;AN000;thousands separators after entry +ICB_TSR EQU 0010000000000000B ;AN000;return thousand separators +ICB_PAD EQU 0100000000000000B ;AN000;pad zeros to precision +ICB_WRP EQU 1000000000000000B ;AN000;word wrap in windowed field +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB_OPT3 Option word three equates +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ICB_WIN EQU 0000000000000001B ;AN000;windowing wrap of field +ICB_WAE EQU 0000000000000010B ;AN000;up and down arrow editing +ICB_TBX EQU 0000000000000100B ;AN000;exit if arrows reach top/bottom +ICB_HOR EQU 0000000000001000B ;AN000;horizontial windowing +ICB_WHM EQU 0000000000010000B ;AN000;full window Home key +ICB_WEN EQU 0000000000100000B ;AN000;full window End key +ICB_WCE EQU 0000000001000000B ;AN000;full window Ctrl-End key +ICB_WDL EQU 0000000010000000B ;AN000;full window Delete key +ICB_WAR EQU 0000000100000000B ;AN000;full window arrow keys +ICB_WBS EQU 0000001000000000B ;AN000;full window backspace key +ICB_FGS EQU 0000010000000000B ;AN000;use the ICB_STATUS status values +ICB_SCR EQU 0000100000000000B ;AN000;display of scroll flag active +ICB_NUM EQU 0001000000000000B ;AN000;display of numlock flag active +ICB_CAP EQU 0010000000000000B ;AN000;display of caps flag active +ICB_FIN EQU 0100000000000000B ;AN000;display of insert flag active +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ICB_STATUS status word equates +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ICB_SDEF EQU 0000000000000001B ;AN000;default value changed +ICB_SMUS EQU 0000000000000010B ;AN000;minus sign active +ICB_SPUS EQU 0000000000000100B ;AN000;plus sign active +ICB_STRU EQU 0000000000001000B ;AN000;default value was truncated +ICB_SSCR EQU 0000000000010000B ;AN000;scroll lock flag on at exit/entry +ICB_SNUM EQU 0000000000100000B ;AN000;num lock flag on at exit/entry +ICB_SCAP EQU 0000000001000000B ;AN000;caps lock flag on at exit/entry +ICB_SINS EQU 0000000010000000B ;AN000;insert flag on at exit/entry +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCWWRAP option bit equates (WWP_OPT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WWP_LEFTJUST EQU 0000000000000001B ;AN000;process with left straight edge +WWP_RIGHTJUST EQU 0000000000000010B ;AN000;process with right straight edge +WWP_LEFTNRIGHT EQU 0000000000000100B ;AN000;process with left and right edge +WWP_HYPHEN EQU 0000000000001000B ;AN000;hyphenate word(s) +WWP_DESTBUFFER EQU 0000000000010000B ;AN000;Use specified destination buffer +WWP_SRCBUFFER EQU 0000000000100000B ;AN000;Use the same buf as the text +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCWWRAP error bit equates (WWP_ERROR) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WWP_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small +WWP_DUPSYMBOL EQU 0000000000000010B ;AN000;WWP_HYSMBOL and WWP_SRCHYSMB + ; are set to same character +WWP_LONGWORD EQU 0000000000000100B ;AN000;word is longer than WWP_WIDTH +WWP_NOBUFFER EQU 0000000000001000B ;AN000;no address to src or dest buf +WWP_NOJUSTOPT EQU 0000000000010000B ;AN000;no justification option was set +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Help options (WR_HLPOPT, WR_HLPPAN, WR_HLPDIS) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +HLP_CONT EQU 0000000000000001B ;AN000;contextual help +HLP_KEYS EQU 0000000000000010B ;AN000;keys help +HLP_HELP EQU 0000000000000100B ;AN000;help-on-help +HLP_INDX EQU 0000000000001000B ;AN000;help index +HLP_OVER EQU 0000000000010000B ;AN000;help row and column overrides +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Internal equates +; +; +; Internal keystroke equates +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +UPARROW EQU 72*256 ;AN000;up arrow +DNARROW EQU 80*256 ;AN000;down arrow +LFARROW EQU 75*256 ;AN000;left arrow +RTARROW EQU 77*256 ;AN000;right arrow +PGUP EQU 73 ;AN000; +PGDN EQU 81 ;AN000; +ESCAPE EQU 27 ;AN000; +ENTER EQU 13 ;AN000; +SPACE EQU 32 ;AN000; +TAB EQU 9 ;AN000; +F1 EQU 59 ;AN000; +F2 EQU 60 ;AN000; +F3 EQU 61 ;AN000; +F4 EQU 62 ;AN000; +F5 EQU 63 ;AN000; +F6 EQU 64 ;AN000; +F7 EQU 65 ;AN000; +F8 EQU 66 ;AN000; +F9 EQU 67 ;AN000; +F10 EQU 68 ;AN000; diff --git a/v4.0/src/SELECT/PCGEQU.INC b/v4.0/src/SELECT/PCGEQU.INC new file mode 100644 index 0000000..8f25b10 --- /dev/null +++ b/v4.0/src/SELECT/PCGEQU.INC @@ -0,0 +1,170 @@ +;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" =B +; VIDEO REGISTER PORT ADDRESS EQUATES =B +; +;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" =B +seq_addr EQU 0C4H ;AN000;Sequencer Address =B +seq_data EQU 0C5H ;AN000;Sequencer Data =B +crtc_addr EQU 0D4H ;AN000;CRT Controller Address (Color) =B +crtc_addr_b EQU 0B4H ;AN000;CRT Controller Address (Mono) =B +crtc_data EQU 0D5H ;AN000;CRT Controller Data =B +graph_1_pos EQU 0CCH ;AN000;Graphics 1 Position =B +graph_2_pos EQU 0CAH ;AN000;Graphics 2 Position =B +graph_addr EQU 0CEH ;AN000;Graphics 1 & 2 Address =B +graph_data EQU 0CFH ;AN000;Graphics 1 & 2 Data =B +misc_output EQU 0C2H ;AN000;Miscellaneous Output =B +misc_read EQU 0CCH ;AN000;Miscellaneous Output Read Port Address =B +in_stat_0 EQU 0C2H ;AN000;Input Status Register 0 =B +input_status_b EQU 0BAH ;AN000;Feature Control (Mono) =B +input_status EQU 0DAH ;AN000;Feature Control (Color) =B +attr_read EQU 0C1H ;AN000;Attribute Controller Read Address =B +attr_write EQU 0C0H ;AN000;Attribute Controller Write Address =B +fctrl_read EQU 0CAH ;AN000;Feature Control Regiester Read Address =B + +;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +; SEQUENCER ADDRESS REGISTER EQUATES +; +;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +s_reset EQU 00H ;AN000;Reset =B +s_clock EQU 01H ;AN000;Clocking Mode =B +s_map EQU 02H ;AN000;Map Mask =B +s_cgen EQU 03H ;AN000;Character Map Select =B +s_mem EQU 04H ;AN000;Memory Mode =B + + +;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +; GRAPHICS ADDRESS REGISTER EQUATES +; +;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +g_set_reset EQU 00H ;AN000;set/reset =B +g_enbl_set EQU 01H ;AN000;enable set/reset =B +g_clr_comp EQU 02H ;AN000;color compare =B +g_data_rot EQU 03H ;AN000;data rotate =B +g_read_map EQU 04H ;AN000;read map select =B +g_mode EQU 05H ;AN000;mode =B +g_misc EQU 06H ;AN000;miscellaneous =B +g_color EQU 07H ;AN000;color don't care =B +g_bit_mask EQU 08H ;AN000;bit mask =B + +;---------------------------------------------------------------------+ +; | +; Miscellaneous Equates | +; | +;---------------------------------------------------------------------+ + +LINELEN EQU 80 ;AN000; Length of a Graphics Buffer Line +COLPELS EQU 8 ;AN000; Number of pels per text column +DEFROFFU EQU 0 ;AN000; Default Pointer Icon Row Center Offset +DEFROFFD EQU 14 ;AN000; Default Pointer Icon Row Center Offset +DEFCOFFR EQU 11 ;AN000; Default Pointer Icon Column Center Offst +DEFCOFFL EQU 4 ;AN000; Default Pointer Icon Column Center Offst +ICONROWS EQU 16 ;AN000; Number of Rows in Pointer Icon +ICONCOLS EQU 16 ;AN000; Number of Columns in Pointer Icon +SHFTMSK EQU 07H ;AN000; Column Shift Count Bit Mask (Hi-Res) +M_BLACK EQU 0 ;AN000;default background color (icon) +M_WHITE EQU 15 ;AN000;default foreground color (icon) +M_DAXIS EQU 11 ;AN000;default axis mouse pointer +VSICONR EQU 28 ;AN000;# pel rows +VSICONC EQU 2*8 ;AN000;# pel columns +MVSICONR EQU 16 ;AN000;minimun pel rows in sb icon +MHSICONC EQU 3*8 ;AN000;minimum pel cols in sb icon + +;; +;; Long Conditional Jump Macros +;; +lja macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jna Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +ljae macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jnae Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +ljb macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jnb Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +ljc macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jnc Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +ljbe macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jnbe Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +lje macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jne Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +ljz macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jnz Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +ljg macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jng Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +ljge macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jnge Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +ljl macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jnl Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +ljle macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jnle Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +ljnc macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jc Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +ljne macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + je Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +ljnz macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jz Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +ljno macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jo Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; +ljo macro Farlabel ;;AN000; + local Nearlabel ;;AN000; + jno Nearlabel ;;AN000; + jmp Farlabel ;;AN000; +Nearlabel: ;;AN000; + endm ;;AN000; + \ No newline at end of file diff --git a/v4.0/src/SELECT/PRN_DEF.ASM b/v4.0/src/SELECT/PRN_DEF.ASM new file mode 100644 index 0000000..3494d7a --- /dev/null +++ b/v4.0/src/SELECT/PRN_DEF.ASM @@ -0,0 +1,1556 @@ +;******************************************************************************** +; File: PRN_DEF.ASM +; +; Subroutines to read the printer profile file, extract the printer names, +; build a scroll list for the cas services and retrieve addition information +; from the file on a specific printer. +; Also contains a subroutine to change the parameters for the SELECT command +; in the autoexec.bat file. +; +;******************************************************************************** +PAGE , 132 ;AN000; +.ALPHA ;AN000; +.XLIST ;AN000; +INCLUDE MACROS.INC ;AN000; +INCLUDE STRUC.INC ;AN000; +.LIST ;AN000; + +;*************************************************************************** +; Define the public subroutines in this module +;*************************************************************************** +PUBLIC GET_PRINTER_TITLES_ROUTINE ;AN000; +PUBLIC GET_PRINTER_INFO_ROUTINE ;AN000; +PUBLIC RELEASE_PRINTER_INFO_ROUTINE ;AN000; +PUBLIC CHANGE_AUTOEXEC_ROUTINE ;AN000; +;*************************************************************************** +; Define the public values in this module +;*************************************************************************** +PUBLIC SEG_LOC ;AN000; The segment where the printer data is stored +PUBLIC NAMES_OFF ;AN000; The offset in the segment of the names table +PUBLIC N_PRN_NAMES ;AN000; The number of printer definitions read from the profile +PUBLIC MAX_NAME ;AN000; The longest name in the list +PUBLIC SIZE_NAMES ;AN000; The number of bytes between each printer name (abs) +PUBLIC SEL_FLG ;AN000; AN000; SELECT runtime flag + +EXTRN SYSPARSE: FAR;AN000; +EXTRN POS_ZERO: FAR;AN000; +EXTRN COPY_ROUTINE: FAR;AN000; +EXTRN I_PRINTER: WORD;AN000; +EXTRN N_PRINTER_TYPE: BYTE;AN000; +EXTRN S_MODE_PARM: WORD;AN000; +EXTRN S_CP_DRIVER: WORD;AN000; +EXTRN S_CP_PREPARE: WORD;AN000; +EXTRN S_GRAPH_PARM: WORD;AN000; +EXTRN HOOK_INT_24:FAR;AN000; +EXTRN RESTORE_INT_24:FAR;AN000; +EXTRN INT_24_ERROR:WORD;AN000; + + +EXTRN BIN_TO_CHAR_ROUTINE:FAR;AN000; + +DATA SEGMENT BYTE PUBLIC 'DATA';AN000; + + +SEL_FLG DB 0 ;AN000; Select flag byte +;INSTALLRW EQU 80H ;AN000; INSTALL diskette is R/W + +SEG_LOC DW 0 ;AN000; Location of the segment where the data is +NAMES_OFF DW 0 ;AN000; The offset of the names table in the segment +SEGMENT_SIZE DW 0 ;AN000; Amount of memory available +BUFFER_START DW 0 ;AN000; Starting offset of the file data buffer +BUFFER_SIZE DW 0 ;AN000; Number of bytes in the file data buffer +FILE_PTR_AT_START DD 0 ;AN000; The file pointer for the data which is at + ; the beginning of the file data buffer +AMOUNT_OF_DATA DW 0 ;AN000; The number of bytes in the file data buffer +CURRENT_PARSE_LOC DW 0 ;AN000; The location to start the next parse. +END_CUR_LINE DW 0 ;AN000; The address of the end of the line currently being parsed +CX_ORDINAL_VALUE DW 0 ;AN000; The value returned by the parse for next call +NUM_PRINTER_DEFS DB 0 ;AN000; The number of printer definitions in the file +N_PRN_NAMES DW 0 ;AN000; The next free index into the names table +FILE_HANDLE DW 0 ;AN000; Handle for the printer definition file. +MAX_NAME DW 0 ;AN000; The length of the longest printer name found in the file +START_NEXT_LINE DW 0 ;AN000; The starting offset of the next line to parse +APPEND_POINTER DW 0 ;AN000; Offset of the ASCII-N string to append to the SELECT line +FILENAME DW 0 ;AN000; Offset of the ASCII-N string containing the filename +CDP_FOUND DB 0 ;AN000; +CPP_FOUND DB 0 ;AN000; + + +W_VALUE DW 0 ;AN000; +STRING_N DB 10 DUP(0);AN000; + + +;AD000;JW BLANK_MODE DW END_BLANK_MODE - $ - 3 ; The blank line for inserting mode parameters +;AD000;JW DB ' , , , , ',? +;AD000;JW END_BLANK_MODE EQU $ + +BLANK_STRING DW 0 ;AN000; Blank values for the other printer profile parameters + +E_SIZE_CR_LF EQU 2 ;AN000; The number of bytes in W_CR_LF +W_CR_LF DB 13,10 ;AN000; Carrage return and line feed to append to the select line + +READ_FLAG DB 0 ;AN000; Flag for use when reading data + AT_EOF EQU 1B ;AN000; Indicates when the end of file has been reached + LAST_LINE EQU 10B ;AN000; Indicates if this is the last line in the buffer + + RESET_EOF EQU 11111110B ;AN000; Masks for resetting the flags + RESET_LST_LINE EQU 11111101B ;AN000; + +PARSE_FLAG DB 0 ;AN000; Flag for use when parsing the data + FIRST_PARSE EQU 1B ;AN000; Indicates if this is the first line being parsed + LINE_DONE EQU 10B ;AN000; Indicates if the current line has already been parsed + FIRST_NAME EQU 100B ;AN000; Indicates if a printer names has already been found + + RESET_FIRST_PARSE EQU 11111110B ;AN000; Masks for resetting the flags + RESET_LINE_DONE EQU 11111101B ;AN000; + RESET_FIRST_NAME EQU 11111011B ;AN000; + +;*************************************************************************** +; Error codes returned. +;*************************************************************************** +ERR_NOT_ENOUGH_MEM EQU 1 ;AN000; There was not enough memory to build the names table +ERR_OPENING_FILE EQU 2 ;AN000; Error opening a file +ERR_READING_FILE EQU 3 ;AN000; Error reading from a file +ERR_FINDING_VALUE EQU 4 ;AN000; Error finding the number of prn defs at the beginning of the file +ERR_LINE_TOO_LONG EQU 5 ;AN000; There was a line too long for the buffer +ERR_FINDING_NAME EQU 6 ;AN000; There was an error locating a printer name after a P or S +ERR_ACCESSING_FILE EQU 7 ;AN000; There was an error updating the file pointer +ERR_TOO_MANY_DEFS EQU 8 ;AN000; There are too many defintion in the file +ERR_NUMBER_MATCH EQU 9 ;AN000; The number of actual definition do not match the number expected +ERR_ALLOCATING_MEM EQU 10 ;AN000; There was an error allocating memory +ERR_CDP_CPP EQU 11 ;AN000; A prn defn had either a CDP or CPP but not both +ERR_PRN_DEFN EQU 12 ;AN000; + +TRUE EQU 1 ;AN000; +FALSE EQU 0 ;AN000; + + +E_CR EQU 13 ;AN000; +E_LF EQU 10 ;AN000; +E_FILE_TERM EQU 1AH ;AN000; + +E_MAX_PRN_NAME_LEN EQU 40 ;AN000; The maximum printer name length +LENGTH_FILE_PTR EQU 4 ;AN000; The number of bytes in the file pointer +MAX_NUM_PRINTER_DEFS EQU 31 ;AC089;SEH ;AC073; The maximum number of printer definitions +MIN_SIZE_FILE_BUFFER EQU 0400H ;AN000; The minimum amount of memory needed for the file data buffer +LENGTH_PRT_TYPE_IND EQU 1 ;AN000; The length of the printer type indicator +SIZE_NAMES EQU E_MAX_PRN_NAME_LEN+LENGTH_FILE_PTR+LENGTH_PRT_TYPE_IND ;AN000; The size of one entry in the names table +NAMES_TABLE_SIZE EQU SIZE_NAMES * MAX_NUM_PRINTER_DEFS ;AN000; The size of the names table +MINIMUM_MEMORY EQU NAMES_TABLE_SIZE + MIN_SIZE_FILE_BUFFER ;AN000; The minimum amount of memory required + +RANGE_ONLY EQU 1 ;AN000; The parser is only to look for ranges of values +RANGE_AND_STRING EQU 3 ;AN000; The parser is to look for ranges and strings + +NUMERIC_VALUE EQU 08000H ;AN000; Parser constant for searching for numeric values +SIMPLE_STRING EQU 02000H ;AN000; Parser constant for searching for strings + + +; Control blocks for the parser. +; The PARMS INPUT BLOCK +PARMS LABEL BYTE ;AN000; + PAR_EXTEN DW OFFSET PARMSX ;AN000; Offset of the PARMS EXTENSION BLOCK + PAR_NUM DB 2 ;AN000; The number of further definitions + DB 0 ;AN000; + DB 1 ;AN000; + DB 1AH ;AN000; + +; The PARMS EXTENSION BLOCK +PARMSX LABEL BYTE;AN000; + PAX_MINP DB 0 ;AN000; + PAX_MAXP DB 1 ;AN000; + DW CONTROL_P1 ;AN000; + PAX_MAX_SW DB 0;AN000; + PAX_MAX_K1 DB 0;AN000; + +; The control blocks for the definition of positional parameters, switch and +; keywords. +CONTROL_P1 EQU $ ;AN000; +CTL_FUNC_FL DW 2000H;AN000; + DW 0002H ;AN000; + DW RESULT_P1 ;AN000; + DW VALUE_LIST_P1 ;AN000; + DB 0 ;AN000; + +VALUE_LIST_P1 EQU $;AN000; +VAL_NUM DB 1 ;AN000; Number of value definitions + DB 1 ;AN000; Number of range definitions + DB 8 ;AN000; Return value if parameter is in this range + DD 0 ;AN000; + DD 255 ;AN000; + DB 0 ;AN000; Number of actual value definitions +NUM_STRINGS DB 2 ;AN000; Number of string definitions + DB 1 ;AN000; Value to be returned if this string is matched + DW OFFSET KEYWORD_PARALLEL;AN000; + DB 2 ;AN000; Value to be returned if this string is matched + DW OFFSET KEYWORD_SERIAL;AN000; + + DB 3 ;AN000; Value to be returned if this string is matched + DW OFFSET KEYWORD_MODE;AN000; + DB 4 ;AN000; Value to be returned if this string is matched + DW OFFSET KEYWORD_CODE_DRIVER;AN000; + DB 5 ;AN000; Value to be returned if this string is matched + DW OFFSET KEYWORD_CODE_PREPARE;AN000; + DB 6 ;AN000; Value to be returned if this string is matched + DW OFFSET KEYWORD_GRAPHICS;AN000; + +KEYWORD_PARALLEL DB 'P',0;AN000; +KEYWORD_SERIAL DB 'S',0;AN000; +KEYWORD_MODE DB 'SP',0;AN000; +KEYWORD_CODE_DRIVER DB 'CDP',0;AN000; +KEYWORD_CODE_PREPARE DB 'CPP',0;AN000; +KEYWORD_GRAPHICS DB 'GP',0;AN000; + +RESULT_P1 LABEL BYTE;AN000; + DB 0 ;AN000; Type of operand returned +MATCHED_TAG DB 0 ;AN000; Matched item tag +SYNONYM_PTR DW 0 ;AN000; Offset of synonym returned +RESULT_FIELD DB 0,0,0,0 ;AN000; Unsure what this is... + + +;AD000;JW ;*************************************************************************** +;AD000;JW ; Parser control blocks for parsing the mode parameters +;AD000;JW ;*************************************************************************** +;AD000;JW MODE_PARMS LABEL BYTE +;AD000;JW DW MODE_PARMSX +;AD000;JW DB 0 +;AD000;JW +;AD000;JW MODE_PARMSX LABEL BYTE +;AD000;JW DB 0,0 +;AD000;JW DB 0 +;AD000;JW DB 1 +;AD000;JW DW OFFSET CNTL_BAUD +;AD000;JW +;AD000;JW CNTL_BAUD LABEL BYTE +;AD000;JW DW SIMPLE_STRING +;AD000;JW DW 2 +;AD000;JW DW RESULT_P1 +;AD000;JW DW MODE_VALUES +;AD000;JW DB 5 +;AD000;JW SYN_BAUD DB 'BAUD',0 +;AD000;JW SYN_PARITY DB 'PARITY',0 +;AD000;JW SYN_DATA DB 'DATA',0 +;AD000;JW SYN_STOP DB 'STOP',0 +;AD000;JW SYN_RETRY DB 'RETRY',0 +;AD000;JW +;AD000;JW MODE_VALUES LABEL BYTE +;AD000;JW DB 0 + + +;*************************************************************************** +; Parser control blocks for parsing the AUTOEXEC.BAT file for 'SELECT' +;*************************************************************************** +SELECT_PARMX LABEL BYTE ;AN000; + DB 1,1 ;AN000; + DW SELECT_CONTROL ;AN000; + DB 0 ;AN000; + DB 0 ;AN000; + +SELECT_CONTROL LABEL BYTE;AN000; + DW 2000H ;AN000; + DW 2 ;AN000; + DW RESULT_P1 ;AN000; + DW SELECT_VALUE ;AN000; + DB 0 ;AN000; + +SELECT_VALUE LABEL BYTE ;AN000; + DB 3 ;AN000; + DB 0 ;AN000; + DB 0 ;AN000; + DB 1 ;AN000; + DB 1 ;AN000; + DW OFFSET SELECT_STR;AN000; + +SELECT_STR DB 'SELECT',0;AN000; +ALLOC_FLAG DB 0 +ALLOCATED EQU 80H + + +DATA ENDS ;AN000; + +CODE_FAR SEGMENT BYTE PUBLIC 'CODE';AN000; + + ASSUME CS:CODE_FAR, DS:DATA, ES:DATA;AN000; + +;*************************************************************************** +; Routines for extracting the printer names from the file data and storing +; them in a table located in high memory. In addition to the name, the +; type of printer, whether Parallel or Serial and the location in the file +; of this printer name is also saved in the table. +;*************************************************************************** + +;****************************************************************************** +; +; Routine: GET_PRINTER_TITLES_ROUTINE - Reads the names of all the printers +; and their location in the file into a data +; buffer in high memory. +; +; Input: +; DI - The offset of name of the file which contains the printer definitions +; in ASCII-N format. +; +; Output: +; If CY = 1: Indicates that an error has occured. +; BX - The error code for the error which this subroutine detected. +; AX - The error code which was returned if the error was as a result +; of a DOS call. +; If CY = 0: No error has occured. +; AX, BX - Undefined. +; +;****************************************************************************** +GET_PRINTER_TITLES_ROUTINE PROC FAR ;AN000; + ; + CALL HOOK_INT_24 ;AN000; +;; int 3 +;; nop + + PUSH ES ;AN000; + ;********************************************************************** + ; Allocate the necessary memory for the buffer. A maximum of 64K is + ; allocated. + ;********************************************************************** + CALL ALLOCATE_MEMORY ;AN000; Allocate the memory for the printer data + .IF < C > ;AN000; Was there an error? + JMP EXIT_WITH_ERROR ;AN000; If so, exit the subroutine + .ENDIF ;AN000; + ;********************************************************************** + ; See if there is enough memory to continue. + ;********************************************************************** + .IF < SEGMENT_SIZE B MINIMUM_MEMORY> ;AN000; Is there enough memory? + MOV BX, ERR_NOT_ENOUGH_MEM ;AN000; No! Return error code. + JMP EXIT_WITH_ERROR ;AN000; Exit the subroutine + .ENDIF ;AN000; + ;********************************************************************** + ; Set the pointer for the file data buffer and save the size of this buffer. + ;********************************************************************** + MOV BUFFER_START, NAMES_TABLE_SIZE ;AN000; Starting address of the file data buffer + MOV BX, SEGMENT_SIZE ;AN000; Total amount of memory available + SUB BX, NAMES_TABLE_SIZE ;AN000; Calculate the size of the file data buffer + MOV BUFFER_SIZE, BX ;AN000; Save this size. + MOV NAMES_OFF, 0 ;AN000; Offset of the printer names table + ;********************************************************************** + ; Open the printer definition file. + ;********************************************************************** + MOV INT_24_ERROR, 0 ;AN000; + CALL POS_ZERO ;AN000; Turn the ASCII-N string into an ASCII-Z string + MOV DX, DI ;AN000; Get address of the ASCII-N string + ADD DX, 2 ;AN000; Address of the filename + MOV AX, 3D00H ;AN000; Open file for reading. + DOSCALL ;AN000; + .IF < C > ;AN000; Was there an error opening the file? + MOV BX, ERR_OPENING_FILE ;AN000; Yes! Return this error code + JMP EXIT_WITH_ERROR ;AN000; + .ENDIF ;AN000; + MOV FILE_HANDLE, AX ;AN000; Save the handle for the file + ;********************************************************************** + ; Initialize the variable which holds the file pointer at the beginning + ; of the buffer. + ;********************************************************************** + MOV WORD PTR FILE_PTR_AT_START, 0 ;AN000; Zero the low word + MOV WORD PTR FILE_PTR_AT_START+2, 0 ;AN000; Zero the high word + AND READ_FLAG, RESET_EOF ;AN000; Indicate we are not at EOF + ;********************************************************************** + ; Read data into the file buffer. + ;********************************************************************** + MOV DI, BUFFER_START ;AN000; Start reading at this offset + SUB DI, NAMES_TABLE_SIZE ;AN000; Make into an offset in the buffer instead of the segment + CALL READ_FROM_HERE ;AN000; Read in the data. + .IF < C > ;AN000; Was there an error reading from the file? + MOV BX, ERR_READING_FILE ;AN000; Return this error code + JMP EXIT_WITH_ERROR ;AN000; Return from this subroutine + .ENDIF ;AN000; + ;********************************************************************** + ; Initialize the variables needed for the parsing. + ;********************************************************************** + MOV CURRENT_PARSE_LOC, NAMES_TABLE_SIZE ;AN000; Start parsing from the beginning. + MOV CX_ORDINAL_VALUE, 0 ;AN000; The first parse, CX must be zero. + MOV N_PRN_NAMES, 0 ;AN000; There are not names in the table now + AND PARSE_FLAG, RESET_LINE_DONE ;AN000; The current line has NOT been parsed + OR PARSE_FLAG, FIRST_PARSE ;AN000; Indicate that this is the first parse + ;********************************************************************** + ; Setup the control blocks for the parser + ;********************************************************************** + MOV PAR_EXTEN, OFFSET PARMSX ;AN000; Load the address of the parse extention block + ;********************************************************************** + ; Parse the data. If this is the first parse, then look for the number + ; of printer definitions. If it is not, then look for the parameters + ; P and S which preface the printer names. + ;********************************************************************** + MOV VAL_NUM, RANGE_ONLY ;AN000; Parse for a range of values only + MOV CTL_FUNC_FL, NUMERIC_VALUE ;AN000; Indicate we are looking for numbers + MOV NUM_STRINGS, 2 ;AN000; The number of parameters to look for + ;********************************************************************** + ; See if there is a complete line in the remainder of the buffer. If there + ; is not, then read more data into the buffer starting with the start of + ; the current line. + ;********************************************************************** +PARSE_NEXT_LINE: ;AN000; + CALL SEARCH_LINE ;AN000; Search for the first parameter on the line + .IF < C > ;AN000; Was there an error? + JMP EXIT_WITH_ERROR ;AN000; Yes! Exit the routine + .ENDIF ;AN000; + .IF < BIT PARSE_FLAG AND FIRST_PARSE > ;AN000; Looking for a value or a string? + .IF < AX NE 0 > ;AN000; Was there an error? + MOV BX, ERR_FINDING_VALUE ;AN000; Yes! Return with this error code + JMP EXIT_WITH_ERROR ;AN000; + .ENDIF ;AN000; + MOV AL, RESULT_FIELD ;AN000; Get the low order byte of the value + MOV NUM_PRINTER_DEFS, AL ;AN000; Store the number of definitions + AND PARSE_FLAG, RESET_FIRST_PARSE ;AN000; Indicate the first parse is finished + MOV VAL_NUM, RANGE_AND_STRING ;AN000; Specify strings and ranges + MOV CTL_FUNC_FL, SIMPLE_STRING ;AN000; Look for specific strings only. + .ENDIF ;AN000; + ;********************************************************************** + ; See if we found a printer name + ;********************************************************************** + .IF < AX EQ 0 > ;AN000; Was an error found parsing the buffer + .IF < N_PRN_NAMES AE MAX_NUM_PRINTER_DEFS > ;AN000; Are there more the 255 printer defs? + MOV BX, ERR_TOO_MANY_DEFS ;AN000; If so, return this error. + JMP EXIT_WITH_ERROR ;AN000; Terminate the subroutine. + .ENDIF ;AN000; + ; DX contains the address of the result block + CALL COPY_PRINTER_NAME ;AN000; Copy the name to the table + .IF < C > ;AN000; Was there an error? + MOV BX, ERR_FINDING_NAME ;AN000; Yes! Return this error code + JMP EXIT_WITH_ERROR ;AN000; + .ENDIF ;AN000; + .ENDIF ;AN000; + ;********************************************************************** + ; Start scanning the next line. + ;********************************************************************** + MOV DI, START_NEXT_LINE ;AN000; Get the address of the next line to parse + MOV CURRENT_PARSE_LOC, DI ;AN000; Save it + .IF < CURRENT_PARSE_LOC EQ 0 > ;AN000; Is there more data? + JMP EXIT_WITHOUT_ERROR ;AN000; No! Exit the routine + .ENDIF ;AN000; + JMP PARSE_NEXT_LINE ;AN000; Start processing this line + ; +EXIT_WITH_ERROR: ;AN000; + STC ;AN000; Set the carry flag, indicating error. + JMP EXIT_ROUTINE ;AN000; +EXIT_WITHOUT_ERROR: ;AN000; + MOV CX, N_PRN_NAMES ;AN000; The number of entries in the table + .IF < CL NE NUM_PRINTER_DEFS > ;AN000; Did the number of definitions agree with the expected number? + MOV BX, ERR_NUMBER_MATCH ;AN000; Return this error message + JMP EXIT_WITH_ERROR ;AN000; Return, setting the carry flag. + .ENDIF ;AN000; + CLC ;AN000; Clear the carry flag - No error. +EXIT_ROUTINE: ;AN000; + CALL DEALLOCATE_MEMORY + POP ES ;AN000; + CALL RESTORE_INT_24;AN000; + RET ;AN000; + ; +GET_PRINTER_TITLES_ROUTINE ENDP ;AN000; +;******************************************************************************** +; +;SEARCH_LINE: Search for the first parameter on a line. +; +;INPUT: +; None. +; +;OUTPUT: +; AX - Contains the return codes from the parser +; If CY = 1: There was an error - BX contains an error code +; if CY = 0: There were NO errors. +; All the registers are set from the parser return. +; +;OPERATION: +; +;******************************************************************************** +SEARCH_LINE PROC NEAR ;AN000; + + MOV DI, CURRENT_PARSE_LOC ;AN000; Get the current location in the buffer + CALL SCAN_FOR_EOLN ;AN000; Search for the end of the line + MOV START_NEXT_LINE, DI ;AN000; Save the start address of the next line + .IF < C > ;AN000; Was the END OF LINE found? + .IF ;AN000; Are we at the end of the file? + MOV START_NEXT_LINE, 0 ;AN000; Yes! Indicate that this is the last line + .ELSE ;AN000; We are not the the end of the file + MOV DI, CURRENT_PARSE_LOC ;AN000; The location to read from in the file + SUB DI, NAMES_TABLE_SIZE ;AN000; Make into an offset in the buffer instead of the segment + CALL READ_FROM_HERE ;AN000; Read in more data + .IF < C > ;AN000; Was there an error reading from the file? + MOV BX, ERR_READING_FILE ;AN000; Return this error code + JMP EXIT_SEARCH_ERROR ;AN000; Return from this subroutine + .ENDIF ;AN000; + MOV CURRENT_PARSE_LOC, NAMES_TABLE_SIZE ;AN000; Start back at the beginning of the buffer + MOV DI, CURRENT_PARSE_LOC ;AN000; Get the current parse location again. + CALL SCAN_FOR_EOLN ;AN000; Once again look for the end of the line + MOV START_NEXT_LINE, DI ;AN000; Save the start address of the nest line + .IF < C > ;AN000; Was it found? + MOV BX, ERR_LINE_TOO_LONG ;AN000; No! Indicate an error. + JMP EXIT_SEARCH_ERROR ;AN000; Return with this error + .ENDIF ;AN000; + .ENDIF ;AN000; + .ENDIF ;AN000; + ;********************************************************************** + ; Set up the input parameters for the parse subroutine + ;********************************************************************** + MOV DI, OFFSET PARMS ;AN000; Offset into ES of the PARMS control block + MOV SI, CURRENT_PARSE_LOC ;AN000; Where to start parsing + MOV DX, 0 ;AN000; + MOV CX, CX_ORDINAL_VALUE ;AN000; The value returned by the parse last time. + PUSH DS ;AN000; Save the current data segment + PUSH ES ;AN000; Save the file data segment + MOV AX, DATA ;AN000; Get the current data segment + MOV ES, AX ;AN000; This is the parser control blocks. + MOV AX, SEG_LOC ;AN000; Where the data to parse is located + MOV DS, AX ;AN000; + CALL SYSPARSE ;AN000; Do the parsing + POP ES ;AN000; Restore the file data segment + POP DS ;AN000; Restore the data segment + CLC ;AN000; Indicate there were no errors + RET ;AN000; +EXIT_SEARCH_ERROR: ;AN000; Here if there were errors + STC ;AN000; Indicate so to the calling program + RET ;AN000; + +SEARCH_LINE ENDP;AN000; +;******************************************************************************** +; ALLOCATE_MEMORY: Allocate a maximum of 64K of memory. +; +; INPUT: +; None. +; +; OUTPUT: +; SEGMENT_SIZE = The size of the segment allocated. +; SEG_LOC = The location of the segment allocated. +; If CY = 1: There was an error - BX contains an error code +; If CY = 0: There was NO errors. +; +; Operation: +; +;******************************************************************************** +ALLOCATE_MEMORY PROC NEAR;AN000; + + AND ALLOC_FLAG,NOT ALLOCATED + MOV BX, 0FFFH ;AN000; Try to allocate this amount of memory + MOV SEGMENT_SIZE, BX ;AN000; Save the amount of memory asked for + MOV AH, 48H ;AN000; DOS Fn. for allocating memory + DOSCALL ;AN000; Allocate the memory + .IF < C > ;AN000; Was there an error? + MOV SEGMENT_SIZE, BX ;AN000; Save the size asked for in this request + MOV AH, 48H ;AN000; DOS Fn. for allocating memory + DOSCALL ;AN000; Allocate the memory + .ENDIF ;AN000; + .IF < C > ;AN000; Was there an error allocating the memory? + MOV BX, ERR_ALLOCATING_MEM ;AN000; Yes! Return an error code + STC ;AN000; Indicate that there was an error + .ELSE ;AN000; Otherwise... + MOV SEG_LOC, AX ;AN000; Save the location of the memory block allocated + MOV ES, AX ;AN000; Save in the extra segment + MOV CL, 4 ;AN000; Multiply the number of paragraphs by 16 + SHL SEGMENT_SIZE, CL ;AN000; to get the number of bytes. + OR ALLOC_FLAG,ALLOCATED + CLC ;AN000; Indicate there was no error + .ENDIF ;AN000; + RET ;AN000; + +ALLOCATE_MEMORY ENDP;AN000; + + +;******************************************************************************** +; DEALLOCATE_MEMORY: deallocate memory. +; +; INPUT: +; SEG_LOC previously allocated segment +; +; OUTPUT: +; None. +; +;******************************************************************************** +DEALLOCATE_MEMORY PROC NEAR + + TEST ALLOC_FLAG,ALLOCATED + JZ DEM10 + + PUSH ES + MOV AX,SEG_LOC + MOV ES,AX + MOV AH,49H + INT 21H + POP ES +DEM10: + RET +DEALLOCATE_MEMORY ENDP + +;******************************************************************************* +; +; Routine: SCAN_FOR_EOLN - Scan the given string, for CR and LF. +; +; Input: +; DI - Address of the string to scan for the eoln. +; +; Output: +; If CY = 0: The end of the line was found. +; DI - Contains the address of the start of the next line in the buffer. +; - If DI = 0, the data ends just after either the CR, LF or the +; CR and LF. Therefore, more data must be read before the next line +; can be parsed. +; +; If CY = 1: The end of the line was not found. +; +;******************************************************************************* +SCAN_FOR_EOLN PROC NEAR;AN000; + + MOV CX, BUFFER_START ;AN000; The offset in the segment of the buffer + ADD CX, AMOUNT_OF_DATA ;AN000; Get the offset of the end of the data + SUB CX, DI ;AN000; Subtract the file data pointer + ; CX - Contains the amount of data after pointer + MOV AL, 0 ;AN000; Flag to indicate CR-LF has not been found yet + .WHILE < CX A 0 > ;AN000; Search until the end of the data + .IF < EQ E_FILE_TERM >;AN000; + .IF < ZERO AL > ;AN000; + MOV END_CUR_LINE, DI ;AN000; Save this location in the string + DEC END_CUR_LINE ;AN000; Point to the real end of the line + .ENDIF ;AN000; + STC ;AN000; + MOV DI, 0 ;AN000; + JMP EXIT_SCAN ;AN000; + .ENDIF ;AN000; + .IF < EQ E_LF > OR ;AN000; Is this character a CR or a LF? + .IF < EQ E_CR > ;AN000; + .IF < ZERO AL > ;AN000; Has a CR or a LF already been found? + MOV END_CUR_LINE, DI ;AN000; Save this location in the string + DEC END_CUR_LINE ;AN000; Point to the real end of the line + .ENDIF ;AN000; + INC AL ;AN000; Indicate that a CR or a LF has been found + .ELSEIF < NONZERO AL > ;AN000; If we have passed the CR-LF, + CLC ;AN000; Indicate we have found EOLN + JMP EXIT_SCAN ;AN000; Leave the subroutine + .ENDIF ;AN000; + DEC CX ;AN000; One less character to the end + INC DI ;AN000; Point to the next character + .ENDWHILE ;AN000; + + .IF < AL AE 2 > ;AN000; Does the data run out right after the CR-LF? + MOV DI, 0 ;AN000; Return 0 indicating so. + .ENDIF ;AN000; + STC ;AN000; Indicate that the whole line is not there + +EXIT_SCAN: ;AN000; + RET ;AN000; + +SCAN_FOR_EOLN ENDP;AN000; +;******************************************************************************* +; +; Routine: COPY_PRINTER_NAME - Copy the name of the printer from the file +; into the buffer holding all the names. +; +; Input: +; SI - Contains the address of the start of the printer name. +; DX - Contains the address of the parse result block +; +; Output: +; CY = 1: An error has occured. The name of the printer has not been found. +; CY = 0: No error. +; +; Operation: The name from the file buffer is copied to the printer name +; table. Starting from the address passed in DI, the file buffer is +; scanned until a valid character is found. Starting from this point +; up to forty characters are transferred to the name table. If no +; name is found, the carry flag is set, and nothing is recorded in the +; name table. +; After the name is copied, the remainder of the field in the table +; is cleared. +; +;******************************************************************************* +COPY_PRINTER_NAME PROC NEAR;AN000; + + PUSH DS ;AN000; + PUSH ES ;AN000; + PUSH DX ;AN000; Save the address of the result block + ;********************************************************************** + ; Calculate the offset into the file data table for this entry + ;********************************************************************** + MOV AX, N_PRN_NAMES ;AN000; The next free index into the names table + MOV BX, SIZE_NAMES ;AN000; Get the number of bytes per entry + MUL BX ;AN000; Multiply by the index into the table + MOV DI, AX ;AN000; Move the offset into an index register + ;********************************************************************** + ; Copy the type of printer first + ;********************************************************************** + POP BX ;AN000; Get the result block address + MOV AL, DS:[BX+1] ;AN000; Get the matched item tag + .IF < AL EQ 1 > ;AN000; Was the parameter a P? + MOV AL, 'P' ;AN000; Yes! + .ELSE ;AN000; + MOV AL, 'S' ;AN000; No! It was an S + .ENDIF ;AN000; + MOV ES:[DI+40], AL ;AN000; Store in the table + ;********************************************************************** + ; Skip the spaces between the printer type indicator and the printer name + ;********************************************************************** + MOV AL, 32 ;AN000; Character to skip - space + XCHG SI, DI ;AN000; Point DI to the line being scanned + MOV CX, END_CUR_LINE ;AN000; Get address of the last char in line + SUB CX, DI ;AN000; Subtract start + INC CX ;AN000; Get the length of the line + CLD ;AN000; Scan forward + REPZ SCASB ;AN000; Repeat search until character found + JZ NAME_NOT_FOUND ;AN000; If all spaces, then it is an error + INC CX ;AN000; Increment character count + DEC DI ;AN000; Decrement pointer to character + ;*********************************************************************** + ; Move the printer name to the names list + ;*********************************************************************** + XCHG SI, DI ;AN000; Exchange the pointers again + MOV CX, END_CUR_LINE ;AN000; Get the address of the last char + SUB CX, SI ;AN000; Subtract start + INC CX ;AN000; Get the length of the line + .IF < CX A E_MAX_PRN_NAME_LEN > ;AN000; Is the length of the line too long? + MOV CX, E_MAX_PRN_NAME_LEN ;AN000; Yes! Make the line length the maximum size + .ENDIF ;AN000; + MOV DX, CX ;AN000; Save the line length for later use + .WHILE < NONZERO CX > ;AN000; Do while there are more characters in the string + MOV AL, BYTE PTR ES:[SI] ;AN000; Get a character from the file data + .IF < AL NE 32 > ;AN000; Is this character a space? + MOV BX, DX ;AN000; Get the line length + SUB BX, CX ;AN000; Get the length of the line copied so far + INC BX ;AN000; + .IF < MAX_NAME B BX > ;AN000; Is this name longer than the longest so far? + MOV MAX_NAME, BX ;AN000; Yes! This is the new maximum + .ENDIF ;AN000; + .ENDIF ;AN000; + MOV BYTE PTR ES:[DI], AL ;AN000; Put the character in the names table + INC SI ;AN000; Increment string pointers + INC DI ;AN000; + DEC CX ;AN000; Decrement the number of characters left + .ENDWHILE ;AN000; + ;*********************************************************************** + ; Fill in the rest of the name area with spaces + ;*********************************************************************** + MOV CX, E_MAX_PRN_NAME_LEN ;AN000; The maximum line length + ; DX contains the line length from last section + SUB CX, DX ;AN000; Calculate the space left in the line + MOV AL, 32 ;AN000; Character to store + REP STOSB ;AN000; Store the blank characters + ;*********************************************************************** + ; Store the file pointer to this printer name in the name list + ;*********************************************************************** + INC DI ;AN000; Point DI passed the printer type indicator + MOV SI, CURRENT_PARSE_LOC ;AN000; Get the start of the current line + SUB SI, NAMES_TABLE_SIZE ;AN000; Subtract offset of the start of the buffer + MOV CX, WORD PTR FILE_PTR_AT_START ;AN000; Get the low order word of the pointer + MOV DX, WORD PTR FILE_PTR_AT_START[2] ;AN000; Get the high order word + ADD CX, SI ;AN000; Add the offset of the start of this line + ADC DX, 0 ;AN000; Add the high word + MOV WORD PTR ES:[DI], CX ;AN000; Store the low order word in the list + MOV WORD PTR ES:[DI+2], DX ;AN000; Store the high order word + INC N_PRN_NAMES ;AN000; Point to the next free area in the list + CLC ;AN000; + JMP EXIT_COPY ;AN000; +NAME_NOT_FOUND: ;AN000; + STC ;AN000; +EXIT_COPY: ;AN000; + POP ES ;AN000; + POP DS ;AN000; + RET ;AN000; + +COPY_PRINTER_NAME ENDP ;AN000; + +;******************************************************************************* +; Routine: READ_FROM_HERE - Read from the file into the buffer starting from +; the file position pointed to by CURRENT_PARSE_LOC. +; +; Input: +; DI - Contains the current parsing location in the buffer. +; +; Output: +; FILE_PTR_AT_START - Updated for the new data read. +; +; Operation: +; +;******************************************************************************* +READ_FROM_HERE PROC NEAR;AN000; + ; + ;********************************************************************** + ; Update the R/W pointer in the file. + ;********************************************************************** + MOV DX, WORD PTR FILE_PTR_AT_START ;AN000; Get the low order word of the pointer + MOV CX, WORD PTR FILE_PTR_AT_START[2] ;AN000; Get the high order word of the pointer + ADD DX, DI ;AN000; Add the offset of where to start reading + ADC CX, 0 ;AN000; Take care of the carry condition + MOV WORD PTR FILE_PTR_AT_START, DX ;AN000; Store the new starting position + MOV WORD PTR FILE_PTR_AT_START[2], CX ;AN000; Store the high word of pointer + MOV INT_24_ERROR, 0 ;AN000; + MOV AX, 4200H ;AN000; DOS Function for moving the file pointer + MOV BX, FILE_HANDLE ;AN000; Load the file handle + DOSCALL ;AN000; Move the file pointer + .IF < C > ;AN000; Was an error encountered? + JMP RETURN_WITH_ERROR ;AN000; Yes! Exit the subroutine. + .ENDIF ;AN000; + ;********************************************************************** + ; Read from the file into the data buffer + ;********************************************************************** + MOV CX, BUFFER_SIZE ;AN000; Number of bytes to read. As many as will fit. + MOV BX, FILE_HANDLE ;AN000; Load the DOS file handle for this file + MOV AH, 03FH ;AN000; The DOS function to perform + MOV DX, BUFFER_START ;AN000; The offset of the file data buffer + MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet + PUSH DS ;AN000; Save the current data segment + PUSH ES ;AN000; Push the file data buffer + POP DS ;AN000; DS now points to the file data buffer + DOSCALL ;AN000; Read from the file. + POP DS ;AN000; Restore the original data segment + ;********************************************************************** + ; See if the buffer was filled. + ;********************************************************************** + MOV AMOUNT_OF_DATA, AX ;AN000; Save the amount of data that was read. + .IF < AX B BUFFER_SIZE > ;AN000; Were less bytes read then we asked for? + OR READ_FLAG, AT_EOF ;AN000; Yes! Indicate that we are at EOF +; MOV DI, AX ; Move number of characters into an index pointer +; MOV BYTE PTR ES:[DI+NAMES_TABLE_SIZE], 00 ; Place a terminator at the end + .ENDIF ;AN000; + CLC ;AN000; + RET ;AN000; + +RETURN_WITH_ERROR: ;AN000; + STC ;AN000; + RET ;AN000; + +READ_FROM_HERE ENDP ;AN000; + +;******************************************************************************** +; Routines for extracting all the information supplied in the profile for a +; specific printer. Given the printer number, the location of its definition +; is looked up in the names table. The file is them parsed for the information. +;******************************************************************************** + +;****************************************************************************** +; GET_PRINTER_INFO_ROUTINE - Get all the information contained in the printer +; profile file for the specified printer. +; +; INPUT: +; AX - The number of the printer to return the information on. The number +; is the index into the names table for this printer. +; +; OUTPUT: +; If CY = 0, there were no errors. +; The following variable are updated with the information found in +; the file: +; I_PRINTER +; N_PRINTER_TYPE +; S_MODE_PARM +; S_CP_DRIVER +; S_CP_PREPARE +; S_GRAPH_PARM +; +; If CY = 1, There were errors encountered. +; BX = An error code indicating the type of error that occured. +; +; = 3 There was an error reading the file +; = 7 There was a error accessing the file +; = 11 A printer definition has either a CDP or a CPP +; Prefix, but BOTH were not present. +; = 12 There was an error in the printer definition. +; - A line was found with an invalid prefix +; +; If the error was a result of a DOS function, then +; on return, AX will contain the DOS error code. +; +; Operation: +; +; Note: +; The first printer name has an index of 1. +; +;****************************************************************************** +GET_PRINTER_INFO_ROUTINE PROC FAR;AN000; + + + + CALL HOOK_INT_24 ;AN000; + + + + PUSH ES ;AN000; Save the extra segment register + ;********************************************************************** + ; Calculate the address of the specifed printer + ;********************************************************************** + MOV I_PRINTER, AX ;AN000; Save the printer index + DEC AX ;AN000; Make the first index a 0 + MOV BX, SIZE_NAMES ;AN000; Number of bytes in each table entry + MUL BX ;AN000; Address is returned in AX + MOV DI, AX ;AN000; Move the address to an index register + ;********************************************************************** + ; Get the file location for this printer name + ;********************************************************************** + MOV AX, SEG_LOC ;AN000; Get the segment where the data is + MOV ES, AX ;AN000; Save in a segment register + MOV CX, WORD PTR ES:[DI+41] ;AN000; Get the low order word of the file location + MOV DX, WORD PTR ES:[DI+43] ;AN000; Get the high order word of the file location + ;********************************************************************** + ; Determine if the information is already in the buffer or do we have + ; to read more information from the printer profile. + ;********************************************************************** + .IF < DX B > ;AN000; Compare the high order words + JMP READ_MORE_INFORMATION ;AN000; Info in buffer is passed where we want. + .ELSE ;AN000; + .IF < DX EQ < WORD PTR FILE_PTR_AT_START+2>> AND ;AN000; High words equal so + .IF < CX B > ;AN000; compare the low order words + JMP READ_MORE_INFORMATION ;AN000; Info in buffer is passed where we want. + .ENDIF ;AN000; + .ENDIF ;AN000; + MOV BX, WORD PTR FILE_PTR_AT_START+2 ;AN000; File location at beginning of buffer + MOV SI, WORD PTR FILE_PTR_AT_START ;AN000; Low order word + ADD SI, AMOUNT_OF_DATA ;AN000; Get the file pointer of the end of the buffer + ADC BX, 0 ;AN000; Add in the high word + .IF < DX A BX > ;AN000; If data we want is further in the file, + JMP READ_MORE_INFORMATION ;AN000; Read in more data + .ELSE ;AN000; + .IF < DX EQ BX > AND ;AN000; If the high words are equal do the + .IF < CX A SI > ;AN000; comparison on the low order words + JMP READ_MORE_INFORMATION ;AN000; Still not there, so read more info + .ENDIF ;AN000; + .ENDIF ;AN000; + MOV AX, I_PRINTER ;AN000; Get the index of this printer name + .IF < AL EQ NUM_PRINTER_DEFS > ;AN000; Is this the last one in the list? + .IF < BIT READ_FLAG AND AT_EOF > ;AN000; If it is, and all the data has been read, process it + JMP PARSE_HERE ;AN000; + .ELSE ;AN000; + JMP READ_MORE_INFORMATION ;AN000; Not EOF, so read in more data just for safety + .ENDIF ;AN000; + .ENDIF ;AN000; + MOV CX, WORD PTR ES:[DI+SIZE_NAMES+41] ;AN000; Get the pointer to the NEXT printer name + MOV DX, WORD PTR ES:[DI+SIZE_NAMES+43] ;AN000; Get the high order word + .IF < DX A BX > ;AN000; See if the next printer name is in the buffer + JMP READ_MORE_INFORMATION ;AN000; If not, get more information + .ELSE ;AN000; + .IF < DX EQ BX > AND ;AN000; If the high order words are equal, + .IF < CX A SI > ;AN000; Compare the low order. Is the name there? + JMP READ_MORE_INFORMATION ;AN000; If not, read more. + .ENDIF ;AN000; + .ENDIF ;AN000; + JMP PARSE_HERE ;AN000; The necessary info is there, so parse it. + ;********************************************************************** + ; The specified printer information is not currently in the buffer. It + ; is necessary to read it from the printer profile file. + ;********************************************************************** +READ_MORE_INFORMATION: ;AN000; + MOV CX, WORD PTR ES:[DI+43] ;AN000; Get the file pointer of this printer name + MOV DX, WORD PTR ES:[DI+41] ;AN000; Get the low order word of pointer + MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet + MOV AX, 4200H ;AN000; DOS Fn. for positioning file pointer + MOV BX, FILE_HANDLE ;AN000; Get the handle of the file + DOSCALL ;AN000; Position the pointer + .IF < C > ;AN000; If CY = 1, there was an error + MOV BX, ERR_ACCESSING_FILE ;AN000; Return this error code + JMP ERROR_EXIT ;AN000; Jump to exit routine + .ENDIF ;AN000; + MOV WORD PTR FILE_PTR_AT_START, AX ;AN000; Set the new pointer at the beginning of the buffer + MOV WORD PTR FILE_PTR_AT_START+2, DX ;AN000; Set the high order word + MOV AH, 3FH ;AN000; DOS Fn. for reading from a file + MOV DX, BUFFER_START ;AN000; Offset of the start of the data buffer + MOV BX, FILE_HANDLE ;AN000; Get the file handle + MOV CX, BUFFER_SIZE ;AN000; Read as many bytes as the buffer will hold + MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet + PUSH DS ;AN000; Save the current data segment + PUSH ES ;AN000; Push the segment of the data buffer + POP DS ;AN000; Load DS with the segment where to store the data + DOSCALL ;AN000; Read in the data + POP DS ;AN000; Restore the data segment + .IF < C > ;AN000; + MOV BX, ERR_READING_FILE;AN000; + JMP ERROR_EXIT;AN000; + .ENDIF ;AN000; + .IF < AX NE BUFFER_SIZE > ;AN000; Were less bytes read then asked for? + OR READ_FLAG, AT_EOF ;AN000; If so, then we are at the end of file + .ELSE ;AN000; Otherwise... + AND READ_FLAG, RESET_EOF ;AN000; We are not at end of file + .ENDIF ;AN000; + MOV AMOUNT_OF_DATA, AX ;AN000; Save the amount of data actually read + ;********************************************************************** + ; The printer data is in the data buffer. Begin to parse the data. + ;********************************************************************** +PARSE_HERE: ;AN000; + MOV CDP_FOUND, FALSE ;AN000; + MOV CPP_FOUND, FALSE ;AN000; + PUSH DI ;AN000; Save the pointer into the names table + ;********************************************************************** + ; Load the printer profile fields with defaults. + ;********************************************************************** + COPY_STRING S_MODE_PARM, 40, BLANK_STRING ;AC000;JW + COPY_STRING S_CP_DRIVER, 22, BLANK_STRING ;AN000; + COPY_STRING S_CP_PREPARE, 12, BLANK_STRING ;AN000; + COPY_STRING S_GRAPH_PARM, 20, BLANK_STRING ;AN000; + POP DI ;AN000; Restore the pointer into the names table + ;********************************************************************** + ; Get the type of printer. + ;********************************************************************** + MOV AL, ES:[DI+40] ;AN000; Get the printer type - Parallel or Serial from the table + MOV N_PRINTER_TYPE, AL ;AN000; Save in the appropriate variable + ;********************************************************************** + ; Get the offset of the start of this printer definition + ;********************************************************************** + MOV CX, ES:[DI+41] ;AN000; Get the low order word of the file pointer + MOV DX, ES:[DI+43] ;AN000; Get the high order word + SUB DX, WORD PTR FILE_PTR_AT_START[2] ;AN000; Subtract the high order words + SBB CX, WORD PTR FILE_PTR_AT_START ;AN000; Subtract the low order words + ADD CX, BUFFER_START ;AN000; Get the offset of the start of the definition + MOV CURRENT_PARSE_LOC, CX ;AN000; Save as the scan position + OR PARSE_FLAG, FIRST_NAME ;AN000; +PARSE_NEXT_PARM: ;AN000; + MOV DI, CURRENT_PARSE_LOC ;AN000; Get the current scan position + CALL SCAN_FOR_EOLN ;AN000; Search for the end of this line + MOV START_NEXT_LINE, DI ;AN000; Save the position of the start of the next line + MOV SI, CURRENT_PARSE_LOC ;AN000; The position in the buffer to scan + MOV NUM_STRINGS, 6 ;AN000; Number of parameters to parse for + MOV DI, OFFSET PARMS ;AN000; Offset of the parameter blocks + MOV DX, 0 ;AN000; The parser wants DX = 0. + MOV CX, 0 ;AN000; Tell the parser this is the first scan of this line + PUSH DS ;AN000; Save the current data segment + PUSH ES ;AN000; Save the file data segment + MOV AX, DATA ;AN000; Get the current data segment + MOV ES, AX ;AN000; This is the parser control blocks. + MOV AX, SEG_LOC ;AN000; Where the data to parse is located + MOV DS, AX ;AN000; + CALL SYSPARSE ;AN000; Do the parsing + POP ES ;AN000; Restore the file data segment + POP DS ;AN000; Restore the data segment + .IF < AX EQ 0FFFFH > ;AN000; Was the end of the line found? + JMP UPDATE_PARSE_PTR ;AN000; If so, start the next one + .ELSEIF < NONZERO AX > ;AN000; Was an error encountered parsing the line? + MOV BX, ERR_PRN_DEFN ;AN000; + JMP ERROR_EXIT ;AN000; If so, exit the subroutine + .ENDIF ;AN000; + MOV AL, MATCHED_TAG ;AN000; Get which string was matched + .IF < AL EQ 1 > OR ;AN000; Was this a printer name and type? + .IF < AL EQ 2 > ;AN000; + .IF < BIT PARSE_FLAG AND FIRST_NAME > ;AN000; Is this the first name encountered? + AND PARSE_FLAG, RESET_FIRST_NAME ;AN000; Indicate that the a name has been found + .ELSE ;AN000; Otherwise... + JMP PARSING_DONE ;AN000; This is the second name. We are finished. + .ENDIF ;AN000; + .ELSEIF < AL EQ 3 > ;AN000; AL = 3 ==> Mode parameters + CALL HANDLE_MODE ;AN000; Process + .ELSEIF < AL EQ 4 > ;AN000; AL = 4 ==> Code page driver parameters + MOV CDP_FOUND, TRUE ;AN000; + CALL HANDLE_CODE_DRIVER ;AN000; Process + .ELSEIF < AL EQ 5 > ;AN000; AL = 5 ==> Code page preparation parameters + MOV CPP_FOUND, TRUE ;AN000; + CALL HANDLE_CODE_PREPARE ;AN000; Process + .ELSEIF < AL EQ 6 > ;AN000; AL = 6 ==> Graphics parameters + CALL HANDLE_GRAPHICS ;AN000; Process + .ENDIF ;AN000; + ;********************************************************************** + ; The current line has been parsed. Point to the next line. + ;********************************************************************** +UPDATE_PARSE_PTR: ;AN000; + MOV AX, START_NEXT_LINE ;AN000; Get the address of the start of the next line + MOV CURRENT_PARSE_LOC, AX ;AN000; Save this as the start of the current line + .IF < CURRENT_PARSE_LOC EQ 0 > ;AN000; Is there any more data? + JMP PARSING_DONE ;AN000; No. Exit the routine + .ENDIF ;AN000; + JMP PARSE_NEXT_PARM ;AN000; Start the parsing again + ;********************************************************************** + ; The subroutine is finished. + ;********************************************************************** +PARSING_DONE: ;AN000; + MOV AL, CDP_FOUND ;AN000; + XOR AL, CPP_FOUND ;AN000; + .IF < NZ > ;AN000; + MOV BX, ERR_CDP_CPP ;AN000; + JMP ERROR_EXIT ;AN000; + .ENDIF ;AN000; + CLC ;AN000; Clear the carry - No errors + JMP EXIT_INFO ;AN000; Exit the subroutine +ERROR_EXIT: ;AN000; + STC ;AN000; Set the carry - There were errors +EXIT_INFO: ;AN000; + POP ES ;AN000; Restore the extra segment + CALL RESTORE_INT_24;AN000; + RET ;AN000; return + +GET_PRINTER_INFO_ROUTINE ENDP;AN000; +;******************************************************************************** +; HANDLE_MODE - Subroutine to process the mode parameter line in the printer +; profile. +; +; INPUT: +; SI - Points to the beginning of the line to process +; +; OUTPUT: +; S_MODE_PARM - Filled with the information from the line. The line will be +; in a format for use as the parameters for the MODE command. +; +;******************************************************************************** +HANDLE_MODE PROC NEAR;AN000; + +;AD000;JW PUSH SI +;AD000;JW COPY_STRING S_MODE_PARM, 13, BLANK_MODE +;AD000;JW POP SI +;AD000;JW +;AD000;JW NEXT_MODE_SCAN: ; Scan for the next keyword. +;AD000;JW MOV DI, OFFSET MODE_PARMS ; Offset of the control blocks for parsing the mode parameters +;AD000;JW MOV CX, 0 ; Always tell the parser this is the first parse +;AD000;JW MOV DX, 0 ; The parse wants DX = 0 +;AD000;JW PUSH ES ; Save the segment registers +;AD000;JW PUSH DS +;AD000;JW MOV AX, DATA ; Get the location of the data segment +;AD000;JW MOV ES, AX ; Load in the extra segment register - The segment of the control blocks +;AD000;JW MOV AX, SEG_LOC ; Get the location of the printer data +;AD000;JW MOV DS, AX ; Load into the data segment - The segment of the data to parse +;AD000;JW CALL SYSPARSE ; Parse the line. +;AD000;JW POP DS ; Restore the segment registers +;AD000;JW POP ES +;AD000;JW +;AD000;JW ; PUSHH +;AD000;JW ; MOV W_VALUE, AX +;AD000;JW ; WORD_TO_CHAR W_VALUE, STRING_N +;AD000;JW ; PRINTN STRING_N +;AD000;JW ; CR_LF +;AD000;JW ; POPP +;AD000;JW +;AD000;JW .IF < NONZERO AX > ; If errors or the end of the line, end the routine +;AD000;JW JMP EXIT_MODE_SCAN +;AD000;JW .ENDIF +;AD000;JW MOV BX, DX ; Move result pointer into an index register +;AD000;JW .IF < EQ > ; Was this the BAUD keyword? +;AD000;JW MOV AX, 5 ; Maximum number of character to copy +;AD000;JW MOV DI, OFFSET S_MODE_PARM+2 ; Where to put the baud parameters +;AD000;JW .ELSEIF < EQ > ; Was this the PARITY keyword? +;AD000;JW MOV AX, 1 ; Maximum number of character to copy +;AD000;JW MOV DI, OFFSET S_MODE_PARM+8 ; Where to put the parity parameters +;AD000;JW .ELSEIF < EQ > ; Was this the DATA keyword? +;AD000;JW MOV AX, 1 ; Maximum number of character to copy +;AD000;JW MOV DI, OFFSET S_MODE_PARM+10 ; Where to put the data parameters +;AD000;JW .ELSEIF < EQ > ; Was this the STOP keyword? +;AD000;JW MOV AX, 1 ; Maximum number of character to copy +;AD000;JW MOV DI, OFFSET S_MODE_PARM+12 ; Where to put the stop parameters +;AD000;JW .ELSEIF < EQ > ; Was this the RETRY keyword? +;AD000;JW MOV AX, 1 ; Maximum number of character to copy +;AD000;JW MOV DI, OFFSET S_MODE_PARM+14 ; Where to put the retry parameters +;AD000;JW .ENDIF +;AD000;JW CALL COPY_RESULT ; Copy the string +;AD000;JW JMP NEXT_MODE_SCAN ; Scan for the next keyword +;AD000;JW EXIT_MODE_SCAN: +;AD000;JW CALL REMOVE_BLANKS ; Remove the blanks from the mode line +;AD000;JW + + MOV DI, OFFSET S_MODE_PARM ;AN000; Offset of the variable to load JW + MOV CX, 40 ;AN000; Maximum width of the field JW + CALL COPY_LINE ;AN000; Copy the information from the file data JW + RET ;AN000; Return JW + +HANDLE_MODE ENDP;AN000; +;AD000;JW ;******************************************************************************** +;AD000;JW ; REMOVE_BLANKS: Remove the blanks from the S_MODE_PARM string. Any trailing +;AD000;JW ; commas are also removed. +;AD000;JW ; +;AD000;JW ; INPUT: +;AD000;JW ; None. +;AD000;JW ; +;AD000;JW ; OUTPUT: +;AD000;JW ; None. +;AD000;JW ; +;AD000;JW ; OPERATION: +;AD000;JW ; +;AD000;JW ; +;AD000;JW ;******************************************************************************** +;AD000;JW REMOVE_BLANKS PROC NEAR +;AD000;JW +;AD000;JW MOV CX, WORD PTR S_MODE_PARM +;AD000;JW LEA SI, S_MODE_PARM +;AD000;JW INC SI +;AD000;JW ADD SI, CX +;AD000;JW MOV BX, CX +;AD000;JW .WHILE < CX AE 0 > +;AD000;JW .IF < EQ <' '> > OR +;AD000;JW .IF < EQ <','> > +;AD000;JW DEC BX +;AD000;JW .ELSE +;AD000;JW .LEAVE +;AD000;JW .ENDIF +;AD000;JW DEC SI +;AD000;JW DEC CX +;AD000;JW .ENDWHILE +;AD000;JW MOV WORD PTR S_MODE_PARM, BX +;AD000;JW +;AD000;JW MOV CX, BX +;AD000;JW LEA SI, S_MODE_PARM +;AD000;JW ADD SI, 2 +;AD000;JW MOV DI, SI +;AD000;JW .WHILE < CX A 0 > +;AD000;JW .IF < NE <' '>> +;AD000;JW .IF < SI NE DI > +;AD000;JW MOV AL, [SI] +;AD000;JW MOV [DI], AL +;AD000;JW .ENDIF +;AD000;JW INC DI +;AD000;JW .ELSE +;AD000;JW DEC BX +;AD000;JW .ENDIF +;AD000;JW INC SI +;AD000;JW DEC CX +;AD000;JW .ENDWHILE +;AD000;JW MOV WORD PTR S_MODE_PARM, BX +;AD000;JW RET +;AD000;JW +;AD000;JW REMOVE_BLANKS ENDP +;******************************************************************************** +; HANDLE_CODE_DRIVER - Subroutine to process the code page driver parameter +; line in the printer profile. +; +; INPUT: +; SI - Points to the beginning of the line to process +; +; OUTPUT: +; S_CP_DRIVER - Filled with the information from the line. +; +; OPERATION: The line from the file is copied to the S_CP_DRIVER variable. +; This variable is assumed to be a maximum of 22 characters wide. +; +;******************************************************************************** +HANDLE_CODE_DRIVER PROC NEAR;AN000; + + MOV DI, OFFSET S_CP_DRIVER ;AN000; Offset of the variable to load + MOV CX, 22 ;AN000; Maximum width of the field + CALL COPY_LINE ;AN000; Copy the information from the file data + RET ;AN000; + +HANDLE_CODE_DRIVER ENDP;AN000; + +;******************************************************************************** +; HANDLE_CODE_PREPARE - Subroutine to process the code prepare parameter line +; in the printer profile. +; +; INPUT: +; SI - Points to the beginning of the line to process +; +; OUTPUT: +; S_CP_PREPARE - Filled with the information from the line. +; +; OPERATION: The line from the file is copied to the variable S_CP_PREPARE. +; The variable is assumed to be a maximum of 12 characters long. +; +;******************************************************************************** +HANDLE_CODE_PREPARE PROC NEAR;AN000; + + MOV DI, OFFSET S_CP_PREPARE ;AN000; Offset of the variable to load + MOV CX, 12 ;AN000; Maximum length of the variable + CALL COPY_LINE ;AN000; Copy the information from the file data + RET ;AN000; + +HANDLE_CODE_PREPARE ENDP;AN000; + +;******************************************************************************** +; HANDLE_GRAPHICS - Subroutine to process the graphics parameter line in the +; printer profile. +; +; INPUT: +; SI - Points to the beginning of the line to process +; +; OUTPUT: +; S_GRAPH_PARM - Filled with the information from the line. +; +; OPERATION: The line from the file is copied to the S_GRAPH_PARM variable. +; The variable is assumed to be a maximum of 20 characters long. +; +;******************************************************************************** +HANDLE_GRAPHICS PROC NEAR;AN000; + + MOV DI, OFFSET S_GRAPH_PARM ;AN000; Offset of the variable to load + MOV CX, 20 ;AN000; Maximum width of the variable + CALL COPY_LINE ;AN000; Load the variable with the data from the file + RET ;AN000; + +HANDLE_GRAPHICS ENDP;AN000; + +;******************************************************************************** +; COPY_RESULT: Copy the string pointed to in the result block to the specified +; destination. +; +; INPUT: +; AX - The maximum length of the string to copy. +; DX - The offset in DS of the result block. +; DI - The offset of where the string is to be stored +; +; +; OUTPUT: +; CX - The length of the string copied. +; +; Operation: The string is copied from the result block to the area pointed to +; by DS:DI. The string is copied until a null character is encountered. +; +;******************************************************************************** +COPY_RESULT PROC NEAR;AN000; + + PUSH ES ;AN000; + PUSH SI ;AN000; + MOV BX, DX ;AN000; Put address into an index register + LES SI, [BX+4] ;AN000; Get the address of the string to copy + MOV CX, 0 ;AN000; Zero the string length indicator + .WHILE < CX B AX > ;AN000; Copy up to the number of character in AX + MOV DL, BYTE PTR ES:[SI] ;AN000; Get the first byte + .LEAVE < ZERO DL > ;AN000; Terminate loop if this is a null char + MOV BYTE PTR [DI], DL ;AN000; Save character in the destination string + INC SI ;AN000; Increment source pointer + INC DI ;AN000; Increment destination pointer + INC CX ;AN000; Increment number of characters moved + .ENDWHILE ;AN000; + POP SI ;AN000; + POP ES ;AN000; + RET ;AN000; + +COPY_RESULT ENDP;AN000; + +;******************************************************************************** +; COPY_LINE - Copy a line from the printer profile data to a specified area. +; +; INPUT: +; DI - Points to the location the data is to be copied to. +; CX - Contains the maximum number of bytes copied. +; +; OUTPUT: +; None. +; +; OPERATION: The current line being parsed is copied to the specified area. +; The length of the line is calculated with the use of the variable +; CUR_END_LINE. If the lenght of the line is longer then the number passed +; in CX, then only a portion of the line will be copied. +; +;******************************************************************************** +COPY_LINE PROC NEAR;AN000; + + + PUSH SI ;AN000; Save the index regiter used by the parser + PUSH DI ;AN000; Save the pointer to the variable to load + ADD DI, 2 ;AN000; Push pointer passed the lenght word + MOV AX, END_CUR_LINE ;AN000; Get the pointer to the end of this line + SUB AX, SI ;AN000; Get the distance to the end + INC AX ;AN000; Add to get the length of the line + .IF < AX B CX > ;AN000; If length is greater then the maximum allowed, + MOV CX, AX ;AN000; use the shorter length + .ENDIF ;AN000; + PUSH CX ;AN000; Save the length used. + PUSH ES ;AN000; Swap the values in the segment registers + PUSH DS ;AN000; + POP ES ;AN000; + POP DS ;AN000; + CLD ;AN000; Move in the forward direction + REP MOVSB ;AN000; Move the data + POP CX ;AN000; Restore the line length + POP DI ;AN000; Restore the pointer to the variable + MOV WORD PTR ES:[DI], CX ;AN000; Save the length of the string + POP SI ;AN000; Restore the parser pointer + PUSH DS ;AN000; Swap the segment registers again + PUSH ES ;AN000; + POP DS ;AN000; + POP ES ;AN000; + RET ;AN000; + +COPY_LINE ENDP;AN000; + +;******************************************************************************** +; Routine to deallocate the memory used for the storage of the printer profile +; data and the table of printer names. These routines also close the profile +; file. +;******************************************************************************** + +;******************************************************************************** +; RELEASE_PRINTER_INFO_ROUTINE - Close the printer profile file and free the +; allocated memory. +; +; INPUT: +; None. +; +; OUTPUT: +; If CY = 0, There were no error encountered. +; If CY = 1, There was an error. +; AX = The DOS error code for the deallocate memory function +; +; OPERATION: Closes the printer file and deallocated the memory. +; +;******************************************************************************** +RELEASE_PRINTER_INFO_ROUTINE PROC FAR;AN000; + + + + + CALL HOOK_INT_24 ;AN000; + + + PUSH ES ;AN000; + ;********************************************************************** + ; Close the printer definition file + ;********************************************************************** + MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet + MOV BX, FILE_HANDLE ;AN000; File handle of the profile file + MOV AH, 3EH ;AN000; DOS Fn. for closing a file + DOSCALL ;AN000; Close the file + ;********************************************************************** + ; Deallocate the memory used for the data buffer + ;********************************************************************** + MOV AX, SEG_LOC ;AN000; Location of the data buffer + MOV ES, AX ;AN000; + MOV AH, 49H ;AN000; DOS Fn. for freeing allocated memory + DOSCALL ;AN000; Free the memory + POP ES ;AN000; + CALL RESTORE_INT_24;AN000; + RET ;AN000; + +RELEASE_PRINTER_INFO_ROUTINE ENDP;AN000; + +;******************************************************************************* +; Routines for changing the SELECT command line in the AUTOEXEC.BAT. +;******************************************************************************* + +;******************************************************************************** +; CHANGE_AUTOEXEC_ROUTINE: Search a file for a line beginning with SELECT, and +; change its parameters. +; +; INPUT: +; DI - The offset of an ASCII-N string containing the file to search. +; SI - The offset of an ASCII-N string containing the data to append as +; parameters. +; +; OUTPUT: +; None. +; +; Operation: +; +;******************************************************************************** +CHANGE_AUTOEXEC_ROUTINE PROC FAR;AN000; + + + + TEST SEL_FLG,INSTALLRW ;AN000; Is the install + ;AN000; diskette read/write + ;AN000; (has DISKCOPY occurred?) + JNZ AUTO_OK ;AN000; + CLC ;AN000; no error + JMP AUTO_EXIT_RO ;AN000; If not, exit + +AUTO_OK: ;AN000; + CALL HOOK_INT_24 ;AN000; + PUSH ES ;AN000; + MOV APPEND_POINTER, SI ;AN000; Save the address of the string to be appended + MOV FILENAME, DI ;AN000; Save the address of the string containing the filename + ;********************************************************************** + ; Allocate the memory needed for reading the autoexec file. A maximum + ; of 64K is allocated for use. + ;********************************************************************** + CALL ALLOCATE_MEMORY ;AN000; Allocate the memory needed + .IF < C > ;AN000; Was there an error? + JMP AUTO_EXIT_ERROR ;AN000; Yes! Exit the subroutine + .ENDIF ;AN000; + MOV BUFFER_START, 0 ;AN000; Save the offset of the start of the buffer + COPY_WORD BUFFER_SIZE, SEGMENT_SIZE ;AN000; Save the size of the buffer + ;********************************************************************** + ; Open the input file + ;********************************************************************** + MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet + ; DI contains the address of the filename + CALL POS_ZERO ;AN000; Make the string into an ASCII-Z string + MOV DX, DI ;AN000; Load string offset + ADD DX, 2 ;AN000; Adjust for length word + MOV AX, 3D02H ;AN000; DOS Fn. for opening a file for reading and writing + DOSCALL ;AN000; Open the file + .IF < C > ;AN000; Was there an error? + JMP AUTO_EXIT_ERROR ;AN000; Exit the subroutine + .ENDIF ;AN000; + MOV FILE_HANDLE, AX ;AN000; Save the file handle + ;********************************************************************** + ; Set the file pointer + ;********************************************************************** + MOV WORD PTR FILE_PTR_AT_START[0], 0 ;AN000; Set the file pointer of the data in the buffer + MOV WORD PTR FILE_PTR_AT_START[2], 0 ;AN000; Set the high word + MOV CURRENT_PARSE_LOC, 0 ;AN000; Set the current parsing location + AND READ_FLAG, RESET_EOF ;AN000; Indicate that the end of file has not been reached + ;********************************************************************** + ; Read data into the buffer + ;********************************************************************** + MOV DI, CURRENT_PARSE_LOC ;AN000; Get the current parsing location + CALL READ_FROM_HERE ;AN000; Read data starting from this position + .IF < C > ;AN000; Was there an error? + JMP AUTO_EXIT_ERROR ;AN000; Yes! Exit the subroutine + .ENDIF ;AN000; + ;********************************************************************** + ; Setup the control blocks for the parser + ;********************************************************************** + MOV PAR_EXTEN, OFFSET SELECT_PARMX ;AN000; Address of the parameters extension block + ;********************************************************************** + ; Parse the file for 'SELECT' + ;********************************************************************** +PARSE_FOR_SELECT: ;AN000; Here to parse the line + CALL SEARCH_LINE ;AN000; Parse the line. + .IF < C > ;AN000; Was there an error? + JMP AUTO_EXIT_ERROR ;AN000; Yes! Exit the subroutine + .ENDIF ;AN000; + .IF < AX EQ 0 > ;AN000; Did the parser file 'SELECT'? + MOV CURRENT_PARSE_LOC, SI ;AN000; Yes! Save the position after select as parse location + MOV DX, WORD PTR FILE_PTR_AT_START[0];AN000; + MOV CX, WORD PTR FILE_PTR_AT_START[2];AN000; + ADD DX, CURRENT_PARSE_LOC ;AN000; + ADC CX, 0 ;AN000; + MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet + MOV BX, FILE_HANDLE ;AN000; + MOV AX, 4200H ;AN000; + DOSCALL ;AN000; + .IF < C > ;AN000; Was there an error writing the data? + JMP AUTO_EXIT_ERROR ;AN000; Yes! Exit the subroutine + .ENDIF ;AN000; + ;***************************************************************** + ; Write the select parameters to the file + ;***************************************************************** + MOV SI, APPEND_POINTER ;AN000; Address of the string to add to the select line + MOV CX, [SI] ;AN000; Size of the string + MOV DX, SI ;AN000; Get the address again + ADD DX, 2 ;AN000; Adjust pointer past length word + MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet + MOV BX, FILE_HANDLE ;AN000; Get the handle for this file + MOV AH, 40H ;AN000; DOS Fn. number for writing data + DOSCALL ;AN000; Write the data + ;***************************************************************** + ; Write a carrage return and a line feed to the file + ;***************************************************************** + MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet + MOV DX, OFFSET W_CR_LF ;AN000; Address of string to write + MOV CX, E_SIZE_CR_LF ;AN000; Size of the string + MOV BX, FILE_HANDLE ;AN000; Get the file handle + MOV AH, 40H ;AN000; DOS Fn. for writing data + DOSCALL ;AN000; Write the data + ;***************************************************************** + ; Truncate the file at the current file position + ;***************************************************************** + MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet + MOV CX, 0 ;AN000; + MOV BX, FILE_HANDLE ;AN000; + MOV AH, 40H ;AN000; + DOSCALL ;AN000; + ;***************************************************************** + ; Close the file. + ;***************************************************************** + CALL RELEASE_PRINTER_INFO_ROUTINE ;AN000; Close the original autoexec file + .ELSE ;AN000; + ;***************************************************************** + ; Parse the next line. + ;***************************************************************** + MOV DI, START_NEXT_LINE ;AN000; Get the address of the next line + MOV CURRENT_PARSE_LOC, DI ;AN000; Save this as the current parse location + .IF < CURRENT_PARSE_LOC EQ 0 > ;AN000; If this is zero, then there is no more data + JMP AUTO_EXIT_CLEAR ;AN000; Exit the subroutine - No errors + .ENDIF ;AN000; + JMP PARSE_FOR_SELECT ;AN000; Parse the next line + .ENDIF ;AN000; + JMP AUTO_EXIT_CLEAR ;AN000; Exit the subroutine - No errors + +AUTO_EXIT_ERROR: ;AN000; Here if there was an error + CALL RELEASE_PRINTER_INFO_ROUTINE ;AN000; Close the original file + STC ;AN000; Indicate that there was an error + JMP AUTO_EXIT ;AN000; Exit the subroutine + +AUTO_EXIT_CLEAR: ;AN000; Exit here if NO errors. + CLC ;AN000; Indicate there were no errors +AUTO_EXIT: ;AN000; Here to exit + CALL DEALLOCATE_MEMORY + POP ES ;AN000; Restore the extra segment + CALL RESTORE_INT_24;AN000; +AUTO_EXIT_RO: ;AN000; + RET ;AN000; + +CHANGE_AUTOEXEC_ROUTINE ENDP;AN000; + +CODE_FAR ENDS;AN000; + +END ;AN000; diff --git a/v4.0/src/SELECT/ROUTINE2.ASM b/v4.0/src/SELECT/ROUTINE2.ASM new file mode 100644 index 0000000..2a8b7ad --- /dev/null +++ b/v4.0/src/SELECT/ROUTINE2.ASM @@ -0,0 +1,1369 @@ +;*************************************************************************** +; Subroutines which are called by the macros in MACROS.INC. +; File: ROUTINE2.ASM +; Latest Change Date: August 04, 1987 +; +; This is a stand alone module and is meant to be linked with the calling +; program. +; +;*************************************************************************** +.ALPHA ;AN000; +;********************************************************************** +DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; + +PATH_STRING DW 0 ;AN000; +STRING_SIZE DW 0 ;AN000; +PATH_PTR DW 0 ;AN000; +PATH_SIZE DW 0 ;AN000; +MAX_CHAR DW 0 ;AN000; +CHAR_COUNT DW 0 ;AN000; + + +SEARCH_FLAG DB 0 ;AN000; + + PERIOD EQU 00000001B ;AN000; + SLASH_FOUND EQU 00000010B ;AN000; + + + RESET_PERIOD EQU 11111110B ;AN000; + RESET_SLASH_FOUND EQU 11111101B ;AN000; + +INVALID_STRING DB '"/\[]:|<>+=;, ' ;AN000; + END_INVALID_STRING EQU $ ;AN000; +SIZE_INVALID_STR EQU END_INVALID_STRING - INVALID_STRING ;AN000; + +ZEROED_CHAR DB 0 ;AN000; + DB 0 ;AN000; + +SEP_POSITION DW 0 ;AN000; +NUM_PATHS DW 0 ;AN000; + + +ERR_INVALID_DRV EQU 1 ;AN000; +ERR_NO_DRIVE EQU 2 ;AN000; +ERR_DRIVE EQU 3 ;AN000; +ERR_LEADING_SLASH EQU 4 ;AN000; +ERR_NO_SLASH EQU 5 ;AN000; +ERR_LAST_SLASH EQU 6 ;AN000; +ERR_INVALID_CHAR EQU 7 ;AN000; + +OLD_ATTRIB DW 0 ;AN000; +NEW_ATTRIB DW 0 ;AN000; +WAY DW 0 ;AN000; + + + +PUBLIC CHK_W_PROTECT_FLAG ;AN000; +PUBLIC W_PROTECT_FLAG ;AN000; + +W_P_FILENAME_A DB 'A:\',12 DUP(0), 0 ;AC000;JW +W_P_FILENAME_B DB 'B:\',12 DUP(0), 0 ;AN000;JW +CHK_W_PROTECT_FLAG DB 0 ;AN000; +W_PROTECT_FLAG DB 0 ;AN000; +DRIVE_FLAG DB ? ;AN000;JW + + +NUM_FILES DW 0 ;AN000; +LIST_TYPE DW 0 ;AN000; +STR_PTR DW 0 ;AN000; +FILE_PTR DW 0 ;AN000; + + + +DATA ENDS ;AN000; DATA +;********************************************************************** + ; + .XLIST ;AN000; + INCLUDE STRUC.INC ;AN000; + INCLUDE MACROS.INC ;AN000; + INCLUDE VARSTRUC.INC ;AN000; + INCLUDE EXT.INC ;AN000; + INCLUDE MAC_EQU.INC ;AN000; + EXTRN EXIT_DOS:FAR ;AN000; + EXTRN POS_ZERO:FAR ;AN000; + EXTRN HOOK_INT_24:FAR ;AN000; + EXTRN RESTORE_INT_24:FAR ;AN000; + EXTRN GGET_STATUS:FAR ;AN000; + .LIST ;AN000; + ; + ; +;********************************************************************** +CODE_FAR SEGMENT PARA PUBLIC 'CODE' ;AN000; Segment for far routine + ASSUME CS:CODE_FAR,DS:DATA ;AN000; + ; +;******************************************************************************** +; CHECK_DOS_PATH_ROUTINE: Check to see if the sepecified path for the DOS +; SET PATH command is valid. +; +; INPUT: +; SI = Points to an ASCII-N string containing the path to check. There sould +; be an extra byte following the string to facilitate changing the string +; into an ASCII-Z string. +; +; OUTPUT: +; If CY = 0, the path is valid. +; If CY = 1, The path is NOT valid: +; +;******************************************************************************** +PUBLIC CHECK_DOS_PATH_ROUTINE ;AN000; +CHECK_DOS_PATH_ROUTINE PROC FAR ;AN000; + ; + MOV PATH_PTR, SI ;AN000; Get the pointer from the path + MOV AX, [SI] ;AN000; Get the lenth of the path string + .IF < AX EQ 0 > ;AN000; If the length is zero then return that + JMP NO_ERROR_DOS_PATH ;AN000; the path is valid. + .ENDIF ;AN000; + MOV PATH_SIZE, AX ;AN000; Save the size of the string + ADD SI, 2 ;AN000; Adjust path pointer for length word + ; + .REPEAT ;AN000; Check all the path names in the string + MOV AL, ';' ;AN000; separator between filenames + MOV CX, PATH_PTR ;AN000; Get the pointer to the path + ADD CX, 2 ;AN000; Point to the start of the string + ADD CX, PATH_SIZE ;AN000; Add the size of the path + SUB CX, SI ;AN000; Subtract current pointer - Get length of string remaining + CALL ISOLATE_NEXT_PATH ;AN000; Make the next path name into an ASCII-Z string + PUSH SEP_POSITION ;AN000; Save the position of the path seperator + PUSH WORD PTR ZEROED_CHAR ;AN000; Save the character that was made into a zero + MOV CX, SEP_POSITION ;AN000; + SUB CX, SI ;AN000; Get the length of the string + MOV AX, 0101H ;AN000; + CALL FAR PTR CHECK_VALID_PATH ;AN000; Check if it is a valid filename + POP WORD PTR ZEROED_CHAR ;AN000; + POP SEP_POSITION ;AN000; + CALL RESTORE_SEPARATOR ;AN000; Restore the character between the path names + .IF < C > ;AN000; Was the file name not valid? + JMP ERROR_DOS_PATH ;AN000; Exit the subroutine + .ENDIF ;AN000; + MOV SI, DI ;AN000; Get the pointer to the next path name + .UNTIL < ZERO SI > ;AN000; If zero, all path names have been examined. +NO_ERROR_DOS_PATH: ;AN000; + CLC ;AN000; + JMP EXIT_DOS_PATH ;AN000; +ERROR_DOS_PATH: ;AN000; + STC ;AN000; +EXIT_DOS_PATH: ;AN000; + RET ;AN000; + ; +CHECK_DOS_PATH_ROUTINE ENDP ;AN000; + ; + ; +PUBLIC CHECK_VALID_PATH ;AN000; +;******************************************************************************** +; CHECK_VALID_PATH: Check to see if the sepecified path is valid. +; +; INPUT: +; SI = Points to an ASCII-Z string containing the path to check. There sould +; be an extra byte following the string to facilitate changing the string +; into an ASCII-Z string. +; +; CX = The size of the string containing the path. The zero byte at the end +; of the string is NOT included in the length. +; +; AL = 0: Drive letter cannot be specified. +; = 1: Drive letter is optional and can be specified. +; = 2: Drive letter must be specified. +; +; AH = 0: First non-drive character cannot be a backslash ('\') +; = 1: First non-drive character may be a backslash ('\') +; = 2: First non-drive character must be a backslash ('\') +; +; OUTPUT: +; If CY = 0, the path is valid. +; If CY = 1, The path is NOT valid: +; AX = 1, The drive specified is invalid. +; = 2, There was no drive specified. +; = 3, There was a drive specified. +; = 4, There was a leading backslash +; = 5, The leading backslash was NOT present. +; = 6, There was a trailing backslash. +; +;******************************************************************************** +CHECK_VALID_PATH PROC FAR ;AN000; + ; + PUSH DI ;AN000; + MOV STRING_SIZE, CX ;AN000; Save the size of the string + MOV PATH_STRING, SI ;AN000; Save the pointer to the string + CALL CHECK_VALID_DRIVE ;AN000; See if there is a valid drive + .IF < C > ;AN000; Is the drive specified invalid? + MOV AX, ERR_INVALID_DRV ;AN000; Return this error code + JMP EXIT_CHK_DRV ;AN000; Exit the subroutine + .ENDIF ;AN000; + .IF < BX EQ 0 > ;AN000; No drive sepecified? + .IF < AL EQ 2 > ;AN000; Must the drive be specified? + MOV AX, ERR_NO_DRIVE ;AN000; Return this error code + JMP EXIT_CHK_DRV ;AN000; Exit the subroutine + .ENDIF ;AN000; + .ELSE ;AN000; Otherwise, the drive WAS specified. + .IF < AL EQ 0 > ;AN000; The drive cannot be specified + MOV AX, ERR_DRIVE ;AN000; Return this error code + JMP EXIT_CHK_DRV ;AN000; Exit the subroutine + .ENDIF ;AN000; + ADD SI, 2 ;AN000; Push pointer past the drive + .ENDIF ;AN000; + .IF < EQ '\' > ;AN000; Is the next byte a backslash? + .IF < AH EQ 0 > ;AN000; Is one permitted? + MOV AX, ERR_LEADING_SLASH ;AN000; No! Return this error code + JMP EXIT_CHK_DRV ;AN000; Exit the subroutine + .ELSE ;AN000; Otherwise, one allowed. + INC SI ;AN000; Push pointer past \ + .ENDIF ;AN000; + .ELSE ;AN000; Otherwise, byte not a backslash + .IF < AH EQ 2 > ;AN000; Was one required? + MOV AX, ERR_NO_SLASH ;AN000; If so, return this error code + JMP EXIT_CHK_DRV ;AN000; Exit from this subroutine + .ENDIF ;AN000; + .ENDIF ;AN000; + ; + MOV NUM_PATHS, 0 ;AN000; + .REPEAT ;AN000; Check all the path names in the string + MOV AL, '\' ;AN000; Separator between filenames + MOV CX, PATH_STRING ;AN000; + ADD CX, STRING_SIZE ;AN000; + SUB CX, SI ;AN000; + .IF < NUM_PATHS EQ 0 > AND ;AN000; If this is the first path checked...and + .IF < CX EQ 0 > ;AN000; If the length of the path is zero... + JMP EXIT_NO_ERROR ;AN000; Exit with no error + .ENDIF ;AN000; + CALL ISOLATE_NEXT_PATH ;AN000; Make the next path name into an ASCII-Z string + CALL CHECK_VALID_FILENAME ;AN000; Check if it is a valid filename + CALL RESTORE_SEPARATOR ;AN000; Restore the character between the path names + .IF < C > ;AN000; Was the file name not valid? + .IF < NUM_PATHS EQ 0 > ;AN000; + .LEAVE ;AN000; + .ELSE ;AN000; + MOV AX, ERR_INVALID_CHAR ;AN000; If not, return this error code + JMP EXIT_CHK_DRV ;AN000; Exit the subroutine + .ENDIF ;AN000; + .ENDIF ;AN000; + MOV SI, DI ;AN000; Get the pointer to the next path name + .UNTIL < ZERO SI > ;AN000; If zero, all path names have been examined. + ; + MOV SI, PATH_STRING ;AN000; Get the pointer to the whole string + ADD SI, STRING_SIZE ;AN000; Add the string length + DEC SI ;AN000; Point to the last character in the string + .IF < EQ '\'> ;AN000; Is the last character a \ ? + MOV AX, ERR_LAST_SLASH ;AN000; If so, return this error code + JMP EXIT_CHK_DRV ;AN000; Exit from the subroutine + .ENDIF ;AN000; +EXIT_NO_ERROR: ;AN000; + CLC ;AN000; Indicate there were no errors + JMP EXIT_CHECK_PATH ;AN000; + ; +EXIT_CHK_DRV: ;AN000; + STC ;AN000; Indicate that there were errors +EXIT_CHECK_PATH: ;AN000; + POP DI ;AN000; + RET ;AN000; + ; + ; +CHECK_VALID_PATH ENDP ;AN000; +;******************************************************************************** +; CHECK_VALID_DRIVE: Check to see if there is a drive specified on the path and +; if there is, is it valid. +; +; INPUT: +; SI - Points to a string containing the path to search. +; +; OUTPUT: +; If CY = 1, the drive is specified and is invalid +; If CY = 0, The drive might be specified and is valid +; BX = 0: The drive is NOT specified. +; = 1: The drive IS specified. +; +; +;******************************************************************************** +CHECK_VALID_DRIVE PROC NEAR ;AN000; + ; + PUSH AX ;AN000; Push all registers used + .IF < EQ ':' > ;AN000; Is the second character in the string a ':' + MOV AL, [SI] ;AN000; If so, get the first character + .IF < AL AE 'A' > AND ;AN000; Is it a capital letter? + .IF < AL BE 'Z' > ;AN000; + CLC ;AN000; If so, drive valid. + MOV BX, 1 ;AN000; Indicate the drive exists + .ELSEIF < AL AE 'a' > AND ;AN000; Else, is the drive a lowercase letter? + .IF < AL BE 'z' > ;AN000; + CLC ;AN000; If so, the drive is valid + MOV BX, 1 ;AN000; Indicate that the drive exists + .ELSE ;AN000; Otherwise... + STC ;AN000; The drive is not valid + .ENDIF ;AN000; + .ELSE ;AN000; + CLC ;AN000; Indicate there were no errors + MOV BX, 0 ;AN000; The drive does not exist + .ENDIF ;AN000; + POP AX ;AN000; + ; + RET ;AN000; + ; +CHECK_VALID_DRIVE ENDP ;AN000; +;******************************************************************************** +; CHECK_VALID_FILENAME: Check to see if a filename is valid. +; +; INPUT: +; SI - Points to an ASCII-Z string containing the filename to examine. +; +; OUTPUT: +; If CY = 1, The filename is NOT valid. +; If CY = 0, the filename IS valid. +; +; +;******************************************************************************** +CHECK_VALID_FILENAME PROC NEAR ;AN000; + ; + INC NUM_PATHS ;AN000; + AND SEARCH_FLAG, RESET_PERIOD ;AN000; Indicate no periods have been found yet + MOV MAX_CHAR, 8 ;AN000; Up to 8 characters can be specified + MOV CHAR_COUNT, 0 ;AN000; Number of character so far + MOV AL, [SI] ;AN000; Get the first character in the string + .WHILE < AL NE 0 > ;AN000; Repeat untill we reach the string's end + INC CHAR_COUNT ;AN000; Increment number of characters in path + MOV BX, CHAR_COUNT ;AN000; + .IF < BX A MAX_CHAR > AND ;AN000; + .IF < AL NE '.' > ;AN000; + JMP INVALID_CHAR ;AN000; + .ENDIF ;AN000; + .IF < AL B 20 > ;AN000; Is the character's code less than 20? + JMP INVALID_CHAR ;AN000; If so, it's invalid + .ELSE ;AN000; Otherwise... + CALL VALID_CHAR ;AN000; See if it's invalid + .IF < C > ;AN000; If so, + JMP INVALID_CHAR ;AN000; Exit the subroutine + .ENDIF ;AN000; + .ENDIF ;AN000; + .IF < AL EQ '.' > ;AN000; Is the character a period? + .IF < BIT SEARCH_FLAG AND PERIOD > ;AN000; Is this the first one? + JMP INVALID_CHAR ;AN000; If not, filename is invalid. + .ELSE ;AN000; Otherwise... + OR SEARCH_FLAG, PERIOD ;AN000; Indicate that ONE has been found + .IF < CHAR_COUNT EQ 1 > ;AN000; Were there any characters before the period + JMP INVALID_CHAR ;AN000; If not, this is an invalid path + .ENDIF ;AN000; + MOV MAX_CHAR, 3 ;AN000; Allow three characters after the period + MOV CHAR_COUNT, 0 ;AN000; No characters yet + .ENDIF ;AN000; + .ENDIF ;AN000; + INC SI ;AN000; Point to next character + MOV AL, [SI] ;AN000; Get that character + .ENDWHILE ;AN000; + .IF < CHAR_COUNT EQ 0 > AND ;AN000; + .IF < MAX_CHAR EQ 8 > ;AN000; + DEC NUM_PATHS ;AN000; + JMP INVALID_CHAR ;AN000; + .ENDIF ;AN000; + CLC ;AN000; Indicate the name is valid + JMP CK_V_FILENAME ;AN000; Exit. + ; +INVALID_CHAR: ;AN000; Indicate that the name is not valid + STC ;AN000; +CK_V_FILENAME: ;AN000; + RET ;AN000; + ; +CHECK_VALID_FILENAME ENDP ;AN000; +;******************************************************************************** +; VALID_CHAR: Determine if a character is valid for a filename. +; +; INPUT: +; AL = The character to check. +; +; OUTPUT: +; If CY = 1, the character is not valid. +; If CY = 0, the character IS valid. +; +;******************************************************************************** +VALID_CHAR PROC NEAR ;AN000; + ; + PUSH CX ;AN000; Save the registers used. + PUSH DI ;AN000; + PUSH ES ;AN000; + ; + MOV DI, OFFSET INVALID_STRING ;AN000; Get the address of string containing invalid characters + PUSH DS ;AN000; Save the data segment + POP ES ;AN000; Make ES=DS + MOV CX, SIZE_INVALID_STR ;AN000; Get the size of the string + CLD ;AN000; Scan forward + REPNZ SCASB ;AN000; See if this character is in the invalid string + .IF < Z > ;AN000; If so, + STC ;AN000; Indicate the character is invalid + .ELSE ;AN000; Otherwise... + CLC ;AN000; Indicate the character is valid + .ENDIF ;AN000; + POP CX ;AN000; Restore the registers + POP DI ;AN000; + POP ES ;AN000; + RET ;AN000; + ; +VALID_CHAR ENDP ;AN000; +;******************************************************************************** +; ISOLATE_NEXT_PATH: Search the filename for a '\'. If found, it is replaced +; by a zero making the string into an ASCII-Z string. +; +; INPUT: +; SI - Points to the first character in the path string +; AL - Contains the character to search for +; CX - Contains the length of the string +; +; OUTPUT: +; DI - Points to the character following the next '\' +; If this character is the last path element, DI = 0. +; +; ZEROED_CHAR is loaded with the character which is made into a zero. +; +;******************************************************************************** +ISOLATE_NEXT_PATH PROC NEAR ;AN000; + ; + PUSH AX ;AN000; Save registers used. + PUSH BX ;AN000; + PUSH CX ;AN000; + PUSH SI ;AN000; + ; + PUSH ES ;AN000; Make ES = DS + PUSH DS ;AN000; + POP ES ;AN000; + MOV DI, SI ;AN000; Copy the string pointer + ; CX holds the length of string after the pointer DI + ; AL holds the character to search for + CLD ;AN000; Search in the forward direction + REPNZ SCASB ;AN000; Search... + JNZ END_FOUND ;AN000; If NZ, we reached the string's end + MOV ZEROED_CHAR, AL ;AN000; Character overwritten with zero + MOV SEP_POSITION, DI ;AN000; Save the position of overwritten char + DEC SEP_POSITION ;AN000; + MOV BYTE PTR [DI-1], 0 ;AN000; Make the character a zero + CMP CX,0 ;AN031; SEH User may have entered semicolon as last char, so check + JE END_FOUND2 ;AN031; SEH if it is last char instead of just a separator + JMP EXIT_ISOLATE ;AN000; Exit the subroutine +END_FOUND: ;AN000; + MOV AL, [DI] ;AN000; Get the last character + MOV ZEROED_CHAR, AL ;AN000; Save it. + MOV SEP_POSITION, DI ;AN000; Save its position + MOV BYTE PTR [DI], 0 ;AN000; Make into a zero +END_FOUND2: ;AN031; SEH Handle case of semicolon as last character in path + MOV DI, 0 ;AN000; Indicate the string is finished +EXIT_ISOLATE: ;AN000; + POP ES ;AN000; Restore the registers. + POP SI ;AN000; + POP CX ;AN000; + POP BX ;AN000; + POP AX ;AN000; + ; + RET ;AN000; + ; +ISOLATE_NEXT_PATH ENDP ;AN000; +;******************************************************************************** +; RESTORE_SEPARATOR: Restore the character which separates the characters in +; a path. +; +; INPUT: +; SEP_POSITION - Contain the address of the location to restore the separator. +; ZEROED_CHAR - Contains the character to be restored. +; +; OUTPUT: +; None. +; +;******************************************************************************** +RESTORE_SEPARATOR PROC NEAR ;AN000; + ; + PUSH AX ;AN000; Save registers used + PUSH SI ;AN000; + MOV SI, SEP_POSITION ;AN000; Get the position of the character + MOV AL, ZEROED_CHAR ;AN000; Get the character + MOV [SI], AL ;AN000; Save character in this position + POP SI ;AN000; Restore the registers + POP AX ;AN000; + RET ;AN000; + ; +RESTORE_SEPARATOR ENDP ;AN000; +;******************************************************************************** +; CHANGE_ATTRIBUTE_ROUTINE: Change the attributes on a group of files. +; +; INPUT: +; SI = The address of a list of files to change the attributes of. +; AX = 0: Attach a new attribute to the file. +; AX = 1: Restore the original attribute to the files. +; BX = The number of files in the list. +; +; OUTPUT: +; If CY = 1, there were error encountered. +; If CY = 0, there were no errors. +; +;******************************************************************************** +PUBLIC CHANGE_ATTRIBUTE_ROUTINE ;AN000; +CHANGE_ATTRIBUTE_ROUTINE PROC FAR ;AN000; + ; + CALL HOOK_INT_24 ;AN000; + ; + MOV WAY, AX ;AN000; Save flag indicating whether we are setting or restoring the attrb. + MOV NEW_ATTRIB, 02h ;AN000; Set new attribute to hidden. + MOV DI, 0 ;AN000; Count of files processed + .WHILE < DI B BX > ;AN000; + .IF < WAY EQ 0 > ;AN000; Setting the attribute? + MOV WORD PTR [SI+12],0 ;AN000; Make filename into a ASCII-Z string + MOV DX, SI ;AN000; Load address of filename into DX + MOV AX, 4300H ;AN000; Get the file's current attribute + DOSCALL ;AN000; + .IF < C > ;AN000; Was there an error? + JMP CHMOD_ERROR ;AN000; If so, exit the subroutine + .ENDIF ;AN000; + MOV OLD_ATTRIB, CX ;AN000; Save the attribute + MOV CX, NEW_ATTRIB ;AN000; Get the new attribute + .ELSE ;AN000; Otherwise, we are restoring the attribute + MOV CX, [SI+12] ;AN000; Get the old attribute + MOV OLD_ATTRIB, CX ;AN000; Save. + MOV WORD PTR [SI+12], 0 ;AN000; Make filename into an ASCII-Z string + .ENDIF ;AN000; + MOV DX, SI ;AN000; Pointer to the filename + MOV AX, 4301H ;AN000; DOS function for setting the attribute + DOSCALL ;AN000; Set it. + .IF < C > ;AN000; Was there an error? + JMP CHMOD_ERROR ;AN000; If so, exit the subroutine + .ENDIF ;AN000; + MOV CX, OLD_ATTRIB ;AN000; Get the old attribute + MOV [SI+12], CX ;AN000; Save in the table + ADD SI, 14 ;AN000; Point to the next filename + INC DI ;AN000; Increment count of files processed + .ENDWHILE ;AN000; + CLC ;AN000; Indicate there were no errors + RET ;AN000; + ; +CHMOD_ERROR: ;AN000; + STC ;AN000; Indicate there were errors + ; + CALL RESTORE_INT_24 ;AN000; + ; + RET ;AN000; + ; +CHANGE_ATTRIBUTE_ROUTINE ENDP ;AN000; +;**************************************************************************** +; +; COMPARE_ROUTINE: Compare two strings. +; +; INPUT: +; SI = The address of the first string. (ASCII-N string) +; DI = The address of the second string. (ASCII-N string) +; +; OUTPUT: +; If CY = 1, the strings do no compare. +; If CY = 0, the strings are the same. +; +; OPERATION: +; +;**************************************************************************** +PUBLIC COMPARE_ROUTINE ;AN000; +COMPARE_ROUTINE PROC FAR ;AN000; + ; + PUSH ES ;AN000; Make ES = DS + PUSH DS ;AN000; + POP ES ;AN000; + ; + MOV CX, [SI] ;AN000; Get the length of the first string + .IF < [DI] NE CX > ;AN000; Are the lengths of the strings the same? + JMP DO_NOT_COMPARE ;AN000; If not, the strings are not the same + .ENDIF ;AN000; + ADD SI, 2 ;AN000; Move points past the length words + ADD DI, 2 ;AN000; + CLD ;AN000; Compare in the forward direction + REPZ CMPSB ;AN000; Compare the strings + JNZ DO_NOT_COMPARE ;AN000; If the zero flag cleared, strings are not the same + CLC ;AN000; Indicate the strings do compare + JMP EXIT_COMPARE ;AN000; +DO_NOT_COMPARE: ;AN000; + STC ;AN000; Indicate the strings do no compare +EXIT_COMPARE: ;AN000; + POP ES ;AN000; + RET ;AN000; + ; +COMPARE_ROUTINE ENDP ;AN000; +;**************************************************************************** +; +; REMOVE_END_BLANKS: Removes the trailing blanks from a string. +; +; INPUT: +; ES:DI Points to the last character in the string. +; +; OUTPUT: +; ES:DI Points to the new end of the string after the blanks have been +; removed. +; +; OPERATION: +; +;**************************************************************************** +PUBLIC REMOVE_END_BLANKS ;AN000; +REMOVE_END_BLANKS PROC FAR ;AN000; + ; + MOV CX, 0FFFFH ;AN000; + MOV AL, ' ' ;AN000; + STD ;AN000; + REPZ SCASB ;AN000; + .IF < NZ > ;AN000; + INC DI ;AN000; + .ENDIF ;AN000; + RET ;AN000; + ; +REMOVE_END_BLANKS ENDP ;AN000; + ; +;**************************************************************************** +; +; CHECK_WRITE_ROUTINE Determine if the diskette in drive A is write +; protected. +; +; INPUT: +; CX = 0 - drive A ;AN000;JW +; = 1 - drive B ;AN000;JW +; +; OUTPUT: +; If CY = 1, The disk IS write protected. +; If CY = 0, The disk is NOT write protected. +; +; OPERATION: +; +;**************************************************************************** +PUBLIC CHECK_WRITE_ROUTINE ;AN000; +CHECK_WRITE_ROUTINE PROC FAR ;AN000; + ; + MOV DRIVE_FLAG,CL ;AN000; + ; + CALL HOOK_INT_24 ;AN000; + ; + MOV CHK_W_PROTECT_FLAG, TRUE ;AN000; Indicate to INT 24H handler we are looking for error + MOV W_PROTECT_FLAG, FALSE ;AN000; Error has not occured yet. + ; + MOV W_P_FILENAME_A+3, 0 ;AN000; Make drive string into ASCII-Z string + MOV W_P_FILENAME_B+3, 0 ;AN000; Make drive string into ASCII-Z string JW + .IF < DRIVE_FLAG eq DRIVE_A > ;AN000;JW + MOV DX, OFFSET W_P_FILENAME_A ;AN000; Get address of the string + .ELSE ;AN000;JW + MOV DX, OFFSET W_P_FILENAME_B ;AN000; Get address of the string JW + .ENDIF ;AN000;JW + MOV CX, 0 ;AN000; Attribute to give the file + MOV INT_24_ERROR, FALSE ;AN000; + MOV AH, 5AH ;AN000; DOS Fn. call to create a unique file + DOSCALL ;AN000; Create the file + .IF < C > ;AN000; Was there an error? + .IF < W_PROTECT_FLAG EQ TRUE > ;AN000; If the INT 24H handler was call... + JMP WRITE_PROTECTED ;AN000; The disk is write protected. + .ELSE ;AN000; Otherwise... + JMP CHECK_ERROR ;AN000; There was some other disk error + .ENDIF ;AN000; + .ELSE ;AN000; + .IF < W_PROTECT_FLAG EQ TRUE > ;AN000; If the INT 24H handler was call... + JMP WRITE_PROTECTED ;AN000; The disk is write protected. + .ENDIF ;AN000; + .ENDIF ;AN000; There were no errors... + CLOSE_FILE AX ;AN000; Close the created file + .IF < DRIVE_FLAG eq DRIVE_A > ;AN000;JW + MOV DX, OFFSET W_P_FILENAME_A ;AN000; Get address of the string + .ELSE ;AN000;JW + MOV DX, OFFSET W_P_FILENAME_B ;AN000; Get address of the string JW + .ENDIF ;AN000;JW + MOV AH, 41H ;AN000; DOS Fn. for erasing a file + DOSCALL ;AN000; Erase the file + MOV AX, 0 ;AN000; Indicate the file is NOT write protected + CLC ;AN000; Indicate there were no errors + JMP CHECK_EXIT ;AN000; Exit the routine + +WRITE_PROTECTED: ;AN000; + MOV AX, 1 ;AN000; Indicate the file IS write protected + CLC ;AN000; Indicate there were no errors + JMP CHECK_EXIT ;AN000; + +CHECK_ERROR: ;AN000; + MOV AX, 0 ;AN000; Indicate the file is NOT write protected + STC ;AN000; Indicate that there WERE errors + +CHECK_EXIT: ;AN000; + CALL RESTORE_INT_24 ;AN000; Restore the original INT 24H handler + MOV CHK_W_PROTECT_FLAG, FALSE ;AN000; We are no longer expecting a write protect error + RET ;AN000; + +CHECK_WRITE_ROUTINE ENDP ;AN000; +;**************************************************************************** +; +; MATCH_FILES_ROUTINE Determine is a list of file exist on a drive. +; +; INPUT: +; DI = Address of the ASCII-N string containing the drive and path to +; search for the files. +; SI = The address of the list of file. If AX = 2, the first two bytes +; in the list are ignored. +; AX = The type of list to use. +; = 1: Use a list with only 12 bytes between the filenames. +; = 2: Use a list with only 14 bytes between the filenames. +; CX = The number of files in the list. +; +; OUTPUT: +; If CY = 1, There was an error access the disk. +; If CY = 0, There were no errors. +; AX = 1: All the files are on the disk. +; AX = 0: All the files are NOT on the disk. +; +; OPERATION: +; +;**************************************************************************** +PUBLIC MATCH_FILES_ROUTINE ;AN000; +MATCH_FILES_ROUTINE PROC FAR ;AN000; + ; + ; + PUSH ES ;AN000; Make ES = DS + PUSH DS ;AN000; + POP ES ;AN000; + ; + MOV NUM_FILES, CX ;AN000; Save the number of files + MOV LIST_TYPE, AX ;AN000; Save the type of the list + ; + MOV CX, [DI] ;AN000; Get the length of the string + ADD DI, 2 ;AN000; Point SI to the start of the string + MOV DX, DI ;AN000; Copy the address of the string + ADD DI, CX ;AN000; Point to the end of the string + .IF < LIST_TYPE EQ 2 > ;AN000; If this list is a 14 byte list... + ADD SI, 2 ;AN000; Bypass the first two bytes in the list + .ENDIF ;AN000; + MOV STR_PTR, DI ;AN000; Save the pointer to the path string + MOV FILE_PTR, SI ;AN000; Save the pointer to the file list + MOV BX, 0 ;AN000; Initialize the count of files checked + ; + .WHILE < BX B NUM_FILES > ;AN000; Perform NUM_FILES interations + CLD ;AN000; + MOV CX, 12 ;AN000; Move 12 bytes for the filename + REP MOVSB ;AN000; Move the filename after the path string + MOV BYTE PTR [DI], 0 ;AN000; Make string into an ASCII-Z string + MOV AH, 4EH ;AN000; DOS Fn. for find a file + MOV CX, 0 ;AN000; Attribute used for search + DOSCALL ;AN000; Get the matching filename + .IF < C > ;AN000; Was there an error? + .IF < AX EQ 18 > ;AN000; If error no = 18, then file not found + JMP FILE_NOT_FOUND ;AN000; Return to the user + .ELSE ;AN000; Otherwise + JMP MATCH_ERROR ;AN000; There was some other type of disk error + .ENDIF ;AN000; Exit the subroutine + .ENDIF ;AN000; + MOV DI, STR_PTR ;AN000; Get the pointer to the string + MOV SI, FILE_PTR ;AN000; Get the pointer to the file list + .IF < LIST_TYPE EQ 1 > ;AN000; Check list type for incrementing the file pointer + ADD SI, 12 ;AN000; 12 bytes between files for list type 1 + .ELSE ;AN000; + ADD SI, 14 ;AN000; 14 bytes between files for list type 2 + .ENDIF ;AN000; + MOV FILE_PTR, SI ;AN000; Save the new file name pointer + INC BX ;AN000; Increment the count of files searched for + .ENDWHILE ;AN000; + CLC ;AN000; Indicate there were no errors + MOV AX, 1 ;AN000; Indicate that all the files were found + JMP EXIT_MATCH ;AN000; +FILE_NOT_FOUND: ;AN000; + CLC ;AN000; Indicate that there were no errors + MOV AX, 0 ;AN000; But, all the files were not found + JMP EXIT_MATCH ;AN000; +MATCH_ERROR: ;AN000; + STC ;AN000; Indicate that there were errors +EXIT_MATCH: ;AN000; + POP ES ;AN000; + RET ;AN000; + ; +MATCH_FILES_ROUTINE ENDP ;AN000; +;************************************************************************ +; +; CLOSE_FILE_ROUTINE: Close File +; +; INPUT: +; BX = The file handle of the file to close. +; +; OUTPUT: +; CY = 0, AX = undefined, successful +; CY = 1, AX = error code +; +; OPERATION: +; +; THIS MACROS CLOSES THE FILE WITH THE GIVEN FILE HANDLE. +; IT MAKES USE OF INT 21 (AH=3EH). +; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +; IS RETURNED IN AX. +; +;************************************************************************** +PUBLIC CLOSE_FILE_ROUTINE ;AN000; +CLOSE_FILE_ROUTINE PROC FAR ;AN000; + ; + ; + CALL HOOK_INT_24 ;AN000; Hook in the critical error handler + MOV INT_24_ERROR, FALSE ;AN000; Indicate no critical error have occured yet + MOV AH, 3EH ;AN000; DOS Fn. for closing a file + DOSCALL ;AN000; Close the file + CALL RESTORE_INT_24 ;AN000; Restore the old critical error handler + RET ;AN000; + ; +CLOSE_FILE_ROUTINE ENDP ;AN000; +;************************************************************** +; +; CREATE_FILE: Create new File +; +; INPUT: +; DI = The address of the filename in ASCII-N format +; CX = The attribute to give the file +; +; OUTPUT: +; If CY = 0: There were no errors. +; AX - The file handle of the created file. +; If CY = 1: There were file errors. AX contains the error code. +; +; OPERATION: +; +; CREATE_FILE CREATES A FILE WITH THE GIVEN NAME USING INT 21H (AH=5BH) +; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +; IS RETURNED IN AX. +; +;************************************************************************** +PUBLIC CREATE_FILE_ROUTINE ;AN000; +CREATE_FILE_ROUTINE PROC FAR ;AN000; + ; + CALL HOOK_INT_24 ;AN000; + CALL POS_ZERO ;AN000; + MOV DX, DI ;AN000; + ADD DX, 2 ;AN000; + MOV INT_24_ERROR, FALSE ;AN000; + MOV AH,5BH ;AN000; + DOSCALL ;AN000; + CALL RESTORE_INT_24 ;AN000; + RET ;AN000; + ; +CREATE_FILE_ROUTINE ENDP ;AN000; +;**************************************************************************** +; +; ERASE_FILE_ROUTINE: Routine to erase a file. +; +; INPUT: +; DI - The address of an ASCII-N string containing the name of the file +; to erase. +; +; OUTPUT: +; If CY = 0, there were no error encountered. +; If CY = 1, there were errors. AX contains the DOS error code. +; +; OPERATION: +; +; ERASE_FILE ERASES THE FILE USING INT 21H (AH=41H). +; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +; IS RETURNED IN AX. +; +;**************************************************************************** +PUBLIC ERASE_FILE_ROUTINE ;AN000; +ERASE_FILE_ROUTINE PROC FAR ;AN000; + + CALL HOOK_INT_24 ;AN000; + CALL POS_ZERO ;AN000; + MOV INT_24_ERROR, FALSE ;AN000; + MOV DX, DI ;AN000; + ADD DX, 2 ;AN000; + MOV AH,41H ;AN000; + DOSCALL ;AN000; + CALL RESTORE_INT_24 ;AN000; + RET ;AN000; + +ERASE_FILE_ROUTINE ENDP ;AN000; +;**************************************************************************** +; +; CHMOD_FILE_ROUTINE: Change file attributes to read/write +; +; SYNTAX: CHMOD_FILE_ROUTINE +; +; INPUT: DI = POINTER TO ASCII-N STRING - FILE NAME +; +; OUTPUT: None. +; +; OPERATION: +; The CHMOD dos call is executed (43H) to change the file's attributes +; to read/write. +; +;**************************************************************************** +PUBLIC CHMOD_FILE_ROUTINE ;AN000; +CHMOD_FILE_ROUTINE PROC FAR ;AN000; + + CALL HOOK_INT_24 ;AN000; + CALL POS_ZERO ;AN000; + MOV INT_24_ERROR, FALSE ;AN000; + MOV DX, DI ;AN000; + ADD DX, 2 ;AN000; + MOV AH,043H ;AN000; + MOV AL,01 ;AN000; + XOR CX,CX ;AN000; + DOSCALL ;AN000; + CALL RESTORE_INT_24 ;AN000; + RET ;AN000; + +CHMOD_FILE_ROUTINE ENDP ;AN000; +;************************************************************************ +; FIND_FILE: Find File +; +; INPUT: +; DI - The address of an ASCII-N string contian the name of the file +; to find. +; CX - The attribute to be used in the search. +; +; OUTPUT: +; If CY = 1, there were errors encountered. AX contians the DOS error +; code. +; If CY = 0, there were no errors. +; +; OPERATION: +; +; FINDFILE FINDS THE FIRST FILENAME SPECIFIED USING INT 21 (AH=4EH). +; AND LOADS INFORMATION INTO THE CURRENT DTA. +; NOTE : THE DEFAULT DTA IS AT 80H IN THE PSP. +; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +; IS RETURNED IN AX. +; +;************************************************************************ +PUBLIC FIND_FILE_ROUTINE ;AN000; +FIND_FILE_ROUTINE PROC FAR ;AN000; + ; + CALL HOOK_INT_24 ;AN000; + CALL POS_ZERO ;AN000; + MOV DX, DI ;AN000; + ADD DX, 2 ;AN000; + MOV INT_24_ERROR, FALSE ;AN000; + ; CX Contains the attribute to be used in the search + MOV AH,4EH ;AN000; + DOSCALL ;AN000; + CALL RESTORE_INT_24 ;AN000; + RET ;AN000; + +FIND_FILE_ROUTINE ENDP ;AN000; +;************************************************************************** +; +; OPEN_FILE_ROUTINE - Open File +; +; INPUT: +; DI - The address of an ASCII-N string containing the name of the +; file to open. +; AL - The mode to open the file with ( 0 = read, 1 = write, +; 2 = read/write) +; +; OUTPUT: +; If CY = 1, there were errors encountered. AX contains the DOS error +; code. +; If CY = 0, there were no errors. AX contains the file handle. +; +; OPERATION: +; +; THIS MACRO OPENS A FILE FOR READ/WRITE OPERATIONS. +; IT MAKES USE OF INT 21 (AH=3DH). +; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +; IS RETURNED IN AX. +; +;************************************************************************** +PUBLIC OPEN_FILE_ROUTINE ;AN000; +OPEN_FILE_ROUTINE PROC FAR ;AN000; + ; + CALL HOOK_INT_24 ;AN000; + CALL POS_ZERO ;AN000; + MOV INT_24_ERROR, FALSE ;AN000; + MOV DX, DI ;AN000; + ADD DX, 2 ;AN000; + ; AL contains the mode for opening the file. + MOV AH,3DH ;AN000; + DOSCALL ;AN000; + CALL RESTORE_INT_24 ;AN000; + RET ;AN000; + +OPEN_FILE_ROUTINE ENDP ;AN000; +;************************************************************************** +; +; RENAME_FILE_ROUTINE - Rename File +; +; INPUT: +; SI - The address of an ASCII-N string containing the file to rename +; current file name. +; DI - The address of an ASCII-N string containing the new name for the +; file. +; +; OUTPUT: +; If CY = 1, there were errors encountered. AX contains the DOS error +; error code. +; If CY = 0, there were no errors. +; +; +; OPERATION: +; +; THIS MACRO RENAMES A FILE GIVEN 2 NAMES. +; IT MAKES USE OF INT 21 (AH=56H). +; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE +; IS RETURNED IN AX. +; +;************************************************************************** +PUBLIC RENAME_FILE_ROUTINE ;AN000; +RENAME_FILE_ROUTINE PROC FAR ;AN000; + + CALL HOOK_INT_24 ;AN000; + PUSH ES ;AN000; + PUSH DS ;AN000; + POP ES ;AN000; + PUSH DI ;AN000; + ; SI Contains the address of the string containing the old filename. + MOV DI, SI ;AN000; + CALL POS_ZERO ;AN000; + MOV DX, DI ;AN000; + ADD DX, 2 ;AN000; + + POP DI ;AN000; + ; DI contains the address of the string containing the new filename. + CALL POS_ZERO ;AN000; + ADD DI, 2 ;AN000; + + MOV INT_24_ERROR, FALSE ;AN000; + MOV AH,56H ;AN000; + DOSCALL ;AN000; + POP ES ;AN000; + CALL RESTORE_INT_24 ;AN000; + RET ;AN000; + +RENAME_FILE_ROUTINE ENDP ;AN000; +;************************************************************************** +; +; READ_FILE_ROUTINE: Transfer the specified number of bytes from a file into a +; buffer location. +; +; INPUT: +; BX - The handle of the file to read. +; DX - The address of where to store the data +; CX - The number of characters to read +; +; OUTPUT: +; CY = 0, Read success. AX - number of bytes read +; CY = 1, Read error. AX contains the error code. +; +; OPERATION: +; +; THIS MACRO READS TO AN ALREADY OPENED FILE. +; IT MAKES USE OF INT 21 (AH=3FH). +; AX WILL RETURN THE NUMBER BYTES ACTUALLY WRITTEN. +; +;************************************************************************ +PUBLIC READ_FILE_ROUTINE ;AN000; +READ_FILE_ROUTINE PROC FAR ;AN000; + ; + CALL HOOK_INT_24 ;AN000; + MOV INT_24_ERROR, FALSE ;AN000; + ; BX - The file handle + ; CX - The number of bytes to read + ; DX - The address of the buffer to store the data + MOV AH,3FH ;AN000; + DOSCALL ;AN000; + CALL RESTORE_INT_24 ;AN000; + RET ;AN000; + +READ_FILE_ROUTINE ENDP ;AN000; +;************************************************************************** +; +; WRITE_FILE_ROUTINE: Transfer the specified number of bytes from a buffer into a +; specified file. +; +; INPUT: +; BX - The handle of the file to write to. +; DX - The address of where the data is stored. +; CX - The number of characters to write. +; +; OUTPUT: +; CY = 0, Write success. AX - number of bytes written. +; CY = 1, Write error. AX contains the error code. +; +; OPERATION: +; +; THIS MACRO WRITES TO AN ALREADY OPENED FILE. +; IT MAKES USE OF INT 21 (AH=3DH). +; AX WILL RETURN THE NUMBER BYTES ACTUALLY WRITTEN. +; +;************************************************************************ +PUBLIC WRITE_FILE_ROUTINE ;AN000; +WRITE_FILE_ROUTINE PROC FAR ;AN000; + ; + CALL HOOK_INT_24 ;AN000; + MOV INT_24_ERROR, FALSE ;AN000; + ; BX - The file handle + ; CX - The number of bytes to read + ; DX - The address of the buffer to store the data + MOV AH,40H ;AN000; + DOSCALL ;AN000; + CALL RESTORE_INT_24 ;AN000; + RET ;AN000; + +WRITE_FILE_ROUTINE ENDP ;AN000; +;*************************************************************************** +; +; CHECK_DISK: Check is the specified fixed disk is present. If disk is +; present, return disk partition status. +; +; INPUT: +; AX = 1: First fixed disk. +; = 2: Second fixed disk. +; +; OUTPUT: +; CX = 0: Disk not present. +; = 1: Disk present - No DOS or EDOS partitions +; = 2: Disk present - DOS or EDOS partitions exist +; BX = 01H: Primary DOS partition exists +; = 02H: Extended DOS partitions exists +; = 04H: Logical drives exist +; = 08H: Free space exists in EDOS partition +; = 10H: Free space exists on disk +; More than one status bit can be set +; DX = 0: There is no free space in EDOS partition and the +; disk. +; = 1: There is free space in the EDOS partition. +; = 2: There is no EDOS partition, but there is free +; disk space. +; DI = Buffer for fixed disk status information. +; +; OPERATION: A call is performed to the FDISK utility (GET_DISK_STATUS) +; to get the status of the specified fixed disk drive. The returned +; status information is checked and the memory variables are set as +; specified above. +; +;*************************************************************************** +PUBLIC CHECK_DISK_ROUTINE ;AN000; +CHECK_DISK_ROUTINE PROC FAR ;AN000; + ; + PUSH ES ;AN000; Make ES = DS + PUSH DS ;AN000; + POP ES ;AN000; + PUSH DI ;AN000; + ADD DI, 2 ;AN000; + CALL GGET_STATUS ;AN000; + POP DI ;AN000; + MOV [DI+1], CL ;AN000; Store the number of table entries + .IF < ZERO AX > ;AN000; + .IF < BIT BX AND M_DOS_EDOS_PART > ;AN000; + MOV CX, PRESENT_WITH_PART ;AN000; + .ELSE ;AN000; + MOV CX, PRESENT_WITHOUT_PART ;AN000; + .ENDIF ;AN000; + .ELSE ;AN000; + MOV CX, NOT_PRESENT ;AN000; + .ENDIF ;AN000; + MOV DX, NO_EDOS_SPACE ;AN000; Initialize + .IF < BIT BX AND M_EDOS_EXISTS > ;AN000; Does the extended DOS partition exist? + .IF < BIT BX AND M_EDOS_SPACE > ;AN000; Yes! Is there free space in it? + MOV DX, FREE_EDOS_SPACE ;AN000; Indicate that there is free space + .ELSEIF < BIT BX NAND M_FREE_SPACE > ;AN000; Is there no free space on the disk? + MOV DX, NO_EDOS_SPACE ;AN000; Indicate there is no free space in EDOS or on the disk. + .ENDIF ;AN000; + .ELSEIF < BIT BX AND M_FREE_SPACE > ;AN000; No! There is no EDOS partition + MOV DX, NO_EDOS_BUT_SPACE ;AN000; But there is free space on the disk + .ENDIF ;AN000; + POP ES ;AN000; + RET ;AN000; + ; +CHECK_DISK_ROUTINE ENDP ;AN000; +;************************************************************************;; +; +; CHECK_VALID_MEDIA: Check if the diskettes attached will support +; installation of SELECT. Also, check if install destination will +; be selected by user or determined by SELECT. +; +; SYNTAX: CHECK_VALID_MEDIA var_disk_a, var_disk_b, var_tot, var_disk, +; var_def, var_index, var_option +; +; INPUT: +; var_disk_a = diskette A presence and type +; var_disk_b = diskette B presence and type +; var_tot = total number of dikettes +; var_disk = 0: first fixed disk is not present +; > 0: first fixed disk is present +; +; OUTPUT: +; CY = 0: Success variables are returned as defined below. +; CY = 1: Error - invalid media +; var_def = 0 use default destination drive +; = 1 default destination drive not applicable +; var_index = 1 default destination is drive C +; = 2 default destination is drive B +; var_option = 1 possible drive B or C +; = 2 possible drive A or C +; = 3 possible drive A or B or C +; = 4 possible drive A or B +; +; OPERATION: The diskette drive types are checked for valid media type. +; If the diskette media types are valid, a check is made to determine if +; install destination will be user selected or will be determined by +; SELECT. The following checks are made. +; +; - if one diskette, return valid media and default destination is A +; +; - If two diskettes only, return valid and: +; if A = B, default = B +; if A <> B, default = A +; if A and B are mixed 720 and 1.44, destination option is A or B +; +; - If one diskette and a fixed disk only, return valid media and +; destination option is drive A or C. +; +; - If two diskettes and a fixed disk, return valid media and: +; if A = B, destination option is B or C +; if A <> B, destination option is A or C +; if A and B are mixed 720 and 1.44, destination option is +; A or B or C +; +;************************************************************************;; +PUBLIC CHECK_VALID_MEDIA_ROUTINE ;AN111;JW +CHECK_VALID_MEDIA_ROUTINE PROC FAR ;AN111;JW + + + VAR_DISK_A EQU AL ;AN111;JW + VAR_DISK_B EQU BL ;AN111;JW + VAR_DEF EQU CL ;AN111;JW + VAR_INDEX EQU DX ;AN111;JW + VAR_DISK EQU SI ;AN111;JW + VAR_OPTION EQU DI ;AN111;JW + + .IF < VAR_DISK_A NE E_DISKETTE_INV > ;AN111; Is disk A present + .IF ;AN111; Is disk B present + .IF < VAR_DISK GT 0 > ;AN111; Hard disk is present? + MOV VAR_DEF, DO_NOT_USE_DEFAULT ;AN111; Yes! Destination drive is undefined + MOV VAR_OPTION,E_OPTION_B_C ;AN111; options will be B or C + MOV VAR_INDEX,DEF_DEST_C ;AN073; SEH highlight option C + CLC ;AN111; Indicate valid media + .ELSE ;AN111; + MOV VAR_DEF, USE_DEFAULT ;AN111; Yes! Use the default destination = B + MOV VAR_INDEX, DEF_DEST_B ;AN111; Drive B is that default + CLC ;AN111; Indicate valid media + .ENDIF ;AN111; + .ELSE ;AN111; + .IF < VAR_DISK GT 0 > ;AN111; Hard disk is present? + MOV VAR_DEF, DO_NOT_USE_DEFAULT ;AN111; Yes! Destination drive is undefined + MOV VAR_OPTION, E_OPTION_A_C ;AN111; options are A or C + MOV VAR_INDEX,DEF_DEST_C ;AN073; SEH highlight option C + CLC ;AN111; Indicate valid media + .ELSE ;AN111; + MOV VAR_DEF, USE_DEFAULT ;AN111; no, Use the default destination + MOV VAR_INDEX, DEF_DEST_A ;AN111; Drive A is that default + CLC ;AN111; Indicate valid media + .ENDIF ;AN111; + .ENDIF ;AN111; + .ELSE ;AN111; + STC ;AN111; Indicate invalid media + .ENDIF ;AN111; + RET ;AN111; + +CHECK_VALID_MEDIA_ROUTINE ENDP ;AN111;JW +;************************************************************************;; +; +; SCAN_DISK_TABLE: Scan the specified disk status table from the +; specified index item for specified field and return status information. +; +; INPUT: +; CX = 1: First fixed disk +; = 2: Second fixed disk +; AX = Index of the information to return +; +; OUTPUT: +; AX = 0: Success - Index into table is valid +; = 1: Error - Index invalid or end of table +; N_NAME_PART = Partition name. +; N_SIZE_PART = Partition size. +; N_STATUS_PART = Partition status +; P_DRIVE_PART = Drive letter assigned. +; P_LEVEL1_PART = Version number (1st part). For DOS 4.00 1st part = blank +; P_LEVEL2_PART = Version number (2nd part). For DOS 4.00 2nd part = 4 +; P_LEVEL3_PART = Version number (3rd part). For DOS 4.00 3rd part = . +; P_LEVEL4_PART = Version number (4th part). For DOS 4.00 4th part = 0 +; +; OPERATION: +; Starts scanning the disk table from the point indicated by var_index +; for either the name, status or type. The table is scanned until either +; the desired entry is found, or the end of the table is reached. If +; the end of the table is reached before a matching entry is found, then +; var_ret returns 1, else if an entry is found, it returns 0. +; If found, var_index will also return the index of the entry. +; +; Note: The index of the first entry in the table is 1. +; +;************************************************************************;; +PUBLIC SCAN_DISK_TABLE_ROUTINE ;AN000; +SCAN_DISK_TABLE_ROUTINE PROC FAR ;AN000; + + MOV BX, 0 ;AN000; + .IF < CX EQ TABLE_ONE > ;AN000; + MOV SI, OFFSET DISK_1_START ;AN000; Get the address of the first table + MOV BL, DISK_1_VAL_ITEM ;AN000; Number of entries in the first table + .ELSE ;AN000; + MOV SI, OFFSET DISK_2_START ;AN000; Get the address of the second table + MOV BL, DISK_2_VAL_ITEM ;AN000; Number of entries in the second table + .ENDIF ;AN000; + .IF < AX BE BX > ;AN000; + ; AX contains the index + DEC AX ;AN000; Make the first index a 0 + MOV DX, TYPE DISK_STATUS ;AN000; Number of bytes in the structure + MUL DX ;AN000; Calculate the offset into the table + ADD SI, AX ;AN000; Add to the address of the table + COPY_BYTE N_NAME_PART, [SI].N_PART_NAME ;AN000; Copy the table entries + COPY_WORD N_SIZE_PART, [SI].N_PART_SIZE ;AN000; + COPY_BYTE N_STATUS_PART, [SI].N_PART_STATUS ;AN000; + COPY_BYTE P_DRIVE_PART, [SI].P_PART_DRIVE ;AN000; + COPY_BYTE N_TYPE_PART, [SI].N_PART_TYPE ;AN000; + COPY_BYTE N_LEVEL1_PART, [SI].N_PART_LEVEL1 ;AN065;SEH 1st part of version number For DOS 4.00 1st part = blank + COPY_BYTE N_LEVEL2_PART, [SI].N_PART_LEVEL2 ;AN065;SEH 2nd part of version number For DOS 4.00 2nd part = 4 + COPY_BYTE N_LEVEL3_PART, [SI].N_PART_LEVEL3 ;AN065;SEH 2nd part of version number For DOS 4.00 3rd part = . + COPY_BYTE N_LEVEL4_PART, [SI].N_PART_LEVEL4 ;AN065;SEH 2nd part of version number For DOS 4.00 4th part = 0 + MOV AX, DATA_VALID ;AN000; + .ELSE ;AN000; + MOV AX, DATA_INVALID ;AN000; + .ENDIF ;AN000; + RET ;AN000; + +SCAN_DISK_TABLE_ROUTINE ENDP ;AN000; +;************************************************************************;; +; +; UPDATE_DISK_TABLE: Update the specifed disk status table for the +; specified index item. +; +; INPUT: +; CX = 1: First fixed disk +; = 2: Second fixed disk +; AX = Index into table +; +; OUTPUT: +; AX = 0: Success - Index into table is valid +; = 1: Error - Index into table is not valid +; partition name = N_NAME_PART +; partition size = N_SIZE_PART +; partition status = N_STATUS_PART +; partition type = N_TYPE_PART +; drive letter = P_DRIVE_PART +; +; OPERATION: If the index into the disk table is valid, the disk table +; is updated for the specifed index. Disk status information is obtained +; from pre-defined locations as specified above. +; +;************************************************************************;; +PUBLIC UPDATE_DISK_TABLE_ROUTINE ;AN000; +UPDATE_DISK_TABLE_ROUTINE PROC FAR ;AN000; + + MOV BH, 0 ;AN000; + .IF < CX EQ TABLE_ONE > ;AN000; + MOV SI, OFFSET DISK_1_START ;AN000; Get the address of the first table + MOV BL, DISK_1_VAL_ITEM ;AN000; Number of entries in the first table + .ELSE ;AN000; + MOV SI, OFFSET DISK_2_START ;AN000; Get the address of the second table + MOV BL, DISK_2_VAL_ITEM ;AN000; Number of entries in the second table + .ENDIF ;AN000; + ; AX contains the index. + DEC AX ;AN000; Make the first index a 0 + MOV DX, TYPE DISK_STATUS ;AN000; Number of bytes in the structure + MUL DX ;AN000; Calculate the offset into the table + ADD SI, AX ;AN000; Add to the address of the table + .IF < VAR_INDEX BE BX > ;AN000; + COPY_BYTE [SI].N_PART_NAME, N_NAME_PART ;AN000; + COPY_WORD [SI].N_PART_SIZE, N_SIZE_PART ;AN000; + COPY_BYTE [SI].N_PART_STATUS, N_STATUS_PART ;AN000; + COPY_BYTE [SI].P_PART_DRIVE, P_DRIVE_PART ;AN000; + COPY_BYTE [SI].N_PART_TYPE, N_TYPE_PART ;AN000; + MOV AX, DATA_VALID ;AN000; No error. + .ELSE ;AN000; + MOV AX, DATA_INVALID ;AN000; Indicate an error + .ENDIF ;AN000; + RET ;AN000; + ; +UPDATE_DISK_TABLE_ROUTINE ENDP ;AN000; + ; +CODE_FAR ENDS ;AN000; + ; +END ;AN000; diff --git a/v4.0/src/SELECT/ROUTINES.ASM b/v4.0/src/SELECT/ROUTINES.ASM new file mode 100644 index 0000000..cd4fc0d --- /dev/null +++ b/v4.0/src/SELECT/ROUTINES.ASM @@ -0,0 +1,1626 @@ +;*************************************************************************** +; Subroutines which are called by the macros in MACROS.INC. +; File: ROUTINES.ASM +; +; This is a stand alone module and is meant to be linked with the calling +; program. +; +;*************************************************************************** +.ALPHA ;AN000; +INCLUDE MAC_EQU.INC ;AN000; +INCLUDE PAN-LIST.INC ;AN000; +INCLUDE PANEL.MAC ;AN000; + +;********************************************************************** +DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; + + +NULl_DEVICE DB 'nul',0 ;AN000; +CON_DEVICE DB 'con',0 ;AN000; + +SUB_PROGRAM DB 0 ;AN000; + PUBLIC EXEC_ERR ;AN000; +EXEC_ERR DB 0 ;AN000; +FIRST_TRY DB 0 ;AN000;DT +INT24_STATUS DB 0 ;AN000; +UNHOOKED EQU 0 ;AN000; +HOOKED EQU 1 ;AN000; + PUBLIC EXEC_DEALLOC,EXEC_FDISK ;AN000; +EXEC_DEALLOC DB 0 ;AN000;DT +EXEC_FDISK DB 0 ;AN000;DT +EXEC_DEHELP DB 0 ;AN000;DT + +DATA ENDS ;AN000; DATA +;********************************************************************** + +.XLIST ;AN000; + INCLUDE STRUC.INC ;AN000; + INCLUDE MACROS.INC ;AN000; + INCLUDE VARSTRUC.INC ;AN000; + INCLUDE EXT.INC ;AN000; + EXTRN EXIT_DOS:FAR ;AN000; + EXTRN SYSDISPMSG:FAR ;AN000; + EXTRN HANDLE_ERROR_CALL:FAR ;AN000; + EXTRN ALLOCATE_MEMORY_CALL:FAR ;AN000; + EXTRN DEALLOCATE_MEMORY_CALL:FAR ;AN000; + + EXTRN INT_23_VECTOR:NEAR ;AN074;SEH ctrl-break + EXTRN INT_24_VECTOR:NEAR ;AN000; + EXTRN INT_2F_VECTOR:NEAR ;AN000; + EXTRN INT_2F_256KB:NEAR ;AN000; + EXTRN INT_2F_FORMAT:NEAR ;AN111;JW + EXTRN ALLOCATE_HELP:FAR ;AN000; + EXTRN DEALLOCATE_HELP:FAR ;AN000; +.LIST ;AN000; + +;********************************************************************** +CODE_FAR SEGMENT PARA PUBLIC 'CODE' ;AN000; Segment for far routine + ASSUME CS:CODE_FAR,DS:DATA ;AN000; + ; +;************************************************************************ +; +; APPEND_STRING: Append an ASCII-N string to the specified string. +; +; INPUT: +; SI - OFFSET NAME_SRC +; CX - IMMED_MAX +; DI - OFFSET NAME_DEST +; +; OUTPUT: +; None. +; +; OPERATION: +; +; +;**************************************************************************** +PUBLIC APPEND_STRING_ROUTINE ;AN000; +APPEND_STRING_ROUTINE PROC FAR ;AN000; + + PUSH ES ;AN000; + PUSH DS ;AN000; + POP ES ;AN000; ES and DS point to the data segment + + .IF < CX LT > ;AN000; + MOV [DI], CX ;AN000; + .ELSE ;AN000; + SUB CX, [DI] ;AN000; Calculate space for the other string + .IF < CX GE > ;AN000; + MOV CX, [SI] ;AN000; Move the entire string + .ENDIF ;AN000; + MOV AX, [DI] ;AN000; Current size of destination string + ADD [DI], CX ;AN000; Add in the length of the new string + ADD DI, AX ;AN000; Add length of string to pointer + ADD DI, 2 ;AN000; Increment to pass first word and last byte + ADD SI, 2 ;AN000; Point source to start of the string + CLD ;AN000; + REP MOVSB ;AN000; + .ENDIF ;AN000; + + POP ES ;AN000; + + RET ;AN000; + +APPEND_STRING_ROUTINE ENDP ;AN000; +;************************************************************************ +; +; COPY_ROUTINE - Subroutine to perform the copy string operation. +; +; INPUT: +; SI - OFFSET NAME_SRC +; AX - IMMED_MAX +; DI - OFFSET NAME_DEST +; +; OUTPUT: +; None. +; +; OPERATION: Copies NAME_SRC1 to NAME_DEST. If NAME_SRC1 is longer then +; IMMED_MAX, then only IMMED_MAX bytes are copied. +; +;**************************************************************************** +PUBLIC COPY_ROUTINE ;AN000; +COPY_ROUTINE PROC FAR ;AN000; + + PUSH ES ;AN000; + PUSH DS ;AN000; + POP ES ;AN000; ES and DS point to the data segment + + PUSH DI ;AN000; Save OFFSET NAME_DEST + MOV DX, AX ;AN000; Save IMMED_MAX + CLD ;AN000; Move strings in the forward direction + MOV CX,WORD PTR [SI] ;AN000; Get length of source string + ADD SI,2 ;AN000; Point SI to start of string + ADD DI,2 ;AN000; Point DI to start of destination. + .IF < CX GT AX > ;AN000; + MOV CX,AX ;AN000; Will not fit so adjust length + .ENDIF ;AN000; + SUB AX,CX ;AN000; Amount of room left. +REP MOVSB ;AN000; Move the string + SUB DX,AX ;AN000; Subtract the amount left over + POP SI ;AN000; + MOV WORD PTR [SI],DX ;AN000; Store the length of the string + + POP ES ;AN000; + RET ;AN000; + +COPY_ROUTINE ENDP ;AN000; +;****************************************************************************** +; +; PUSH_ROUTINE: Routine to do the actual pushing of the screen label +; +; INPUT: +; AX - Contains the address of the code for this screen +; +; OUTPUT: +; None. +; +; OPERATION: The screen label address is pushed onto the SELECT stack +; provided the numher of entries on the stack will not exceed the +; maximum. Error will NOT be generated if the function was not +; successful. +; +;****************************************************************************** +PUBLIC PUSH_ROUTINE ;AN000; +PUSH_ROUTINE PROC FAR ;AN000; + + .IF < STACK_INDEX B STACK_SIZE > ;AN000; Is there any room? + MOV BL,STACK_INDEX ;AN000; Get the index + MOV BH, 0 ;AN000; + MOV SELECT_STACK[BX],AX ;AN000; Store the label + ADD STACK_INDEX,2 ;AN000; Point to next free space + .ENDIF ;AN000; + RET ;AN000; +PUSH_ROUTINE ENDP ;AN000; +;****************************************************************************** +; +; POP_ROUTINE: Routine to do the actual poping of the screen label +; +; INPUT: +; None. +; +; OUTPUT: +; SI contains the address of the screen code. +; +; OPERATION: The screen label address is poped from the SELECT stack +; provided there are entries on the stack. If there are no values +; on the stack then the address of the EXIT_DOS screen will be +; returned. +; +;****************************************************************************** +PUBLIC POP_ROUTINE ;AN000; +POP_ROUTINE PROC FAR ;AN000; + + .IF < STACK_INDEX A 0 > ;AN000; Is there anything on the stack? + SUB STACK_INDEX,2 ;AN000; Point to last item on the stack + MOV BL,STACK_INDEX ;AN000; Get the index + MOV BH, 0 ;AN000; + MOV SI,SELECT_STACK[BX] ;AN000; Get the label + .ELSE ;AN000; + MOV SI,OFFSET EXIT_DOS ;AN000; EXIT_DOS screen + .ENDIF ;AN000; + RET ;AN000; + +POP_ROUTINE ENDP ;AN000; +;************************************************************************ +; +; MAKE_DIR_PATHS_ROUTINE: Create the specified directory including all +; the specified sub-directories if they do not exist. +; +; INPUT: +; BX - Points to an ASCII-N string containing the path to create +; +; OUTPUT: +; CY = 0 Success +; CY = 1 Error - AX will contain an error code. +; +; OPERATION: The directory pathname is created. +; If the drive letter and colon are not followed by a '\', then the +; macro will start creating the directories from the default directory. +; If they are followed by a '\', then the macro will start at the root. +; If an error occures, then sub-directories which have been created will +; be removed. +; +; +;**************************************************************************** +PUBLIC MAKE_DIR_PATHS_ROUTINE ;AN000; +MAKE_DIR_PATHS_ROUTINE PROC FAR ;AN000; + + PUSH ES ;AN000; + PUSH DS ;AN000; + POP ES ;AN000; + + + MOV AH, 1 ;AN000; Flag indicating adding or deleting dirs + MOV SI, 0 ;AN000; End of the first path created + MOV DI, BX ;AN000; Offset of the ASCII-N string + ADD DI, 5 ;AN000; Point to the beginning of the path + MOV DX, WORD PTR [BX] ;AN000; Get the length of the string + MOV CX, DX ;AN000; Store in another variable as well + SUB CX, 3 ;AN000; Skip the first 3 characters 'C:\' + MOV AL, '\' ;AN000; Delimiter to search for + CLD ;AN000; Start searching in the forward direction + + +PROCESS_NEXT_DIR: ;AN000; + CMP AH, 1 ;AN000; Adding or deleting directories? + JNE DELETING_DIR_1 ;AN000; If adding, then jump + CMP CX,0 ;AN000; Is the string length zero? + JNE LENGTH_NOT_ZERO ;AN000; + JMP NORMAL_EXIT ;AN000; +DELETING_DIR_1: ;AN000; + CMP SI, DI ;AN000; Was this the first DIR created? + JNE LENGTH_NOT_ZERO ;AN000; + JMP ERROR_EXIT ;AN000; + +LENGTH_NOT_ZERO: ;AN000; +REPNZ SCASB ;AN000; + JNZ STRING_END ;AN000; If not zero, we reached the string end + + INC CX ;AN000; By adjusting DI, more bytes to the strings end + CMP AH,1 ;AN000; Adding or deleting + JNE DELETING_DIR_2 ;AN000; + DEC DI ;AN000; Back DI up to point to the '\' +STRING_END: ;AN000; + MOV WORD PTR [BX], DX ;AN000; Length of entire string + SUB WORD PTR [BX], CX ;AN000; Subtract the amount left in string + JMP ADJUST_DONE ;AN000; +DELETING_DIR_2: ;AN000; + INC DI ;AN000; Adjust DI to point to the '\' + MOV WORD PTR [BX], CX ;AN000; Length left in string +ADJUST_DONE: ;AN000; + + CMP AH, 1 ;AN000; Adding or deleting directories + JNE DELETING_DIR_3 ;AN000; + CMP SI, 0 ;AN000; Created a DIR yet? + JNE MAKE_START ;AN000; + PUSH AX ;AN000; +;********************************************************************** + PUSHH ;AN000; + + MOV DI,BX ;AN000; Get the offset of the string + CALL FAR PTR POS_ZERO ;AN000; Make into an ASCII-Z string + MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors + MOV DX,BX ;AN000; Get the start of the string + ADD DX, 2 ;AN000; + MOV AH,3BH ;AN000; DOS function call number + DOSCALL ;AN000; + + POPP ;AN000; +;********************************************************************** + POP AX ;AN000; + JNC DIR_DONE ;AN000; + MOV SI, DI ;AN000; +MAKE_START: ;AN000; + PUSH AX ;AN000; +;********************************************************************** + PUSHH ;AN000; + MOV DI,BX ;AN000; + CALL FAR PTR POS_ZERO ;AN000; position the '0' at the end of the path + MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors + MOV DX,BX ;AN000; advance pointer to beginning of path + ADD DX, 2 ;AN000; + MOV AH,39H ;AN000; make directory interrupt + DOSCALL ;AN000; call to DOS interrupt 21 + POPP ;AN000; +;********************************************************************** + JC CANNOT_MAKE ;AN000; + POP AX ;AN000; + JMP DIR_DONE ;AN000; +CANNOT_MAKE: ;AN000; + POP CX ;AN000; Pop the previously saved AX value + PUSH AX ;AN000; Push the make dir error message + MOV AX, '\' ;AN000; + STD ;AN000; Now search in the backward direction + MOV CX, WORD PTR [BX] ;AN000; + JMP DIR_DONE ;AN000; +DELETING_DIR_3: ;AN000; + PUSH AX ;AN000; +;********************************************************************** + PUSHH ;AN000; + MOV DI,BX ;AN000; + CALL FAR PTR POS_ZERO ;AN000; position the '0' at the end of the path + MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors + MOV DX,BX ;AN000; advance pointer to beginning of path + ADD DX, 2 ;AN000; + MOV AH,3AH ;AN000; remove the specified directory + DOSCALL ;AN000; call to DOS interrupt 21 + POPP ;AN000; +;********************************************************************** + JC ERROR_POP_EXIT ;AN000; + POP AX ;AN000; +DIR_DONE: ;AN000; + MOV BYTE PTR [DI], '\' ;AN000; Put the delimiter back + CMP CX,0 ;AN000; + JE NORMAL_EXIT ;AN000; If CX = 0, string ends + DEC CX ;AN000; + CMP AH,1 ;AN000; + JNE DELETING_DIR_4 ;AN000; + INC DI ;AN000; + JMP PROCESS_NEXT_DIR ;AN000; +DELETING_DIR_4: ;AN000; + DEC DI ;AN000; + JMP PROCESS_NEXT_DIR ;AN000; + +ERROR_POP_EXIT: ;AN000; + POP CX ;AN000; Pop the extra value off the stack. +ERROR_EXIT: ;AN000; + POP AX ;AN000; Pop the error message number + STC ;AN000; + JMP PATHS_DONE ;AN000; +NORMAL_EXIT: ;AN000; + CLC ;AN000; + +PATHS_DONE: ;AN000; + MOV WORD PTR [BX], DX ;AN000; Restore the original path length + + POP ES ;AN000; + + RET ;AN000; + +MAKE_DIR_PATHS_ROUTINE ENDP ;AN000; +;************************************************************************ +; +; POS_ZERO - Position a zero at the end of an ASCII-N string, making it +; into an ASCII-Z string. +; +; INPUT: +; DI - Points to the string to covert. +; +; OUTPUT: +; None. +; +; OPERATION: An ASCII-N string is converted to an ASCII-Z string. +; +;**************************************************************************** +PUBLIC POS_ZERO ;AN000; +POS_ZERO PROC FAR ;AN000; + + PUSH AX ;AN000; + PUSH DI ;AN000; + + MOV AX,[DI] ;AN000; Get the length of the string + ADD DI,AX ;AN000; Add the length to the offset + ADD DI,2 ;AN000; Adjust for the length word + MOV BYTE PTR [DI],0 ;AN000; Position the zero after the end. + + POP DI ;AN000; + POP AX ;AN000; + + RET ;AN000; + +POS_ZERO ENDP ;AN000; +;************************************************************************ +; +; BEEP_ROUTINE - Cause the speaker to create a tone of a given frequency +; and duration. +; +; INPUT: +; DI - The frequency of the tone to create. +; BX - The duration of the tone. +; +; OUTPUT: +; None. +; +; OPERATION: Causes the speaker to produce a tone. +; +;**************************************************************************** +PUBLIC BEEP_ROUTINE ;AN000; +BEEP_ROUTINE PROC FAR ;AN000; + + MOV AL,0B6H ;AN000; write timer mode register + OUT 43H,AL ;AN000; + MOV DX,14H ;AN000; timer divisor= + MOV AX,4F38H ;AN000; 1331000/frequency + DIV DI ;AN000; + OUT 42H,AL ;AN000; write timer 2 count low byte + MOV AL,AH ;AN000; + OUT 42H,AL ;AN000; write timer 2 count high byte + IN AL,61H ;AN000; get current PORT B setting + MOV AH,AL ;AN000; and save it in AH + OR AL,3 ;AN000; turn on speaker + OUT 61H,AL ;AN000; +B_WAIT: MOV CX,2801 ;AN000; wait 10 milliseconds +SPKR_ON:LOOP SPKR_ON ;AN000; + DEC BX ;AN000; + JNZ B_WAIT ;AN000; beep until finished + MOV AL,AH ;AN000; recover value of port + OUT 61H,AL ;AN000; + RET ;AN000; + +BEEP_ROUTINE ENDP ;AN000; +;************************************************************************ +; +; BIN_TO_CHAR_ROUTINE: Convert a binary number to ASCII format. +; +; INPUT: +; AX - The binary number to convert. +; DI - Pointer to the ASCII-N string to store the result. +; +; OUTPUT: +; None. +; +; OPERATION: The specified 16 bit numeric variable contents are +; converted to ASCII and stored in ASCII-N format. Leading zeros +; will not be stored. +; +;**************************************************************************** +PUBLIC BIN_TO_CHAR_ROUTINE ;AN000; +BIN_TO_CHAR_ROUTINE PROC FAR ;AN000; + + MOV SI, DI ;AN000; Copy the string pointer + ADD SI, 6 ;AN000; Point to the string END + MOV CX, 10 ;AN000; Number to divide AX by + + .WHILE < NONZERO AX> ;AN000; + MOV DX, 0 ;AN000; Zero the high order word + DIV CX ;AN000; Divide the binary number + ADD DL, 48 ;AN000; Convert to ASCII + MOV [SI], DL ;AN000; Store in the string. + DEC SI ;AN000; Point to the next free string space + .ENDWHILE ;AN000; + SUB SI, DI ;AN000; Get the difference in the pointers + DEC SI ;AN000; Adjust for the lenght word + MOV WORD PTR [DI], 5 ;AN000; Store the number of characters + SUB WORD PTR [DI], SI ;AN000; Subtract the number of extra digits + MOV CX, WORD PTR [DI] ;AN000; + MOV BX, DI ;AN000; + ADD BX, 2 ;AN000; + .WHILE < NONZERO CX > ;AN000; + COPY_BYTE [BX],[BX+SI] ;AN000; + DEC CX ;AN000; + INC BX ;AN000; + .ENDWHILE ;AN000; + RET ;AN000; + +BIN_TO_CHAR_ROUTINE ENDP ;AN000; +;************************************************************************** +; +; PREPARE_FILE_ROUTINE: Prepare a file and a buffer for the construction +; of that file line by line. +; +; INPUT: +; BX = The address of an ASCII-N string containing the name of the file +; to create. +; +; OUTPUT: CY = 0: No error was encountered. +; CY = 1: There was an error encountered. +; +; OPERATION: A attempt is made to create the file. If it fails because +; the file already exists, then the file is opened for writing. +; The user will then write to the file be calling WRITE_LINE macro. The +; data will be temperarily stored in a buffer to limit the actual number +; of writes to the file. +; +;************************************************************************** +PUBLIC PREPARE_FILE_ROUTINE ;AN000; +PREPARE_FILE_ROUTINE PROC FAR ;AN000; + ; + ;********************************************************************** + ; Try to create the file + ;********************************************************************** + MOV DI, BX ;AN000; Get the address of the file name string + CALL POS_ZERO ;AN000; Make the ASCII-N string into an ASCII-Z + MOV DX, DI ;AN000; Get the address again + ADD DX, 2 ;AN000; Pass the length word and point to string + MOV N_WRITE_ERR_CODE, 0 ;AN000; Indicate there have been no errors yet + MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors + MOV CX, 0 ;AN000; Attributes to give the file + MOV AH, 3CH ;AN000; Function for creating a file + DOSCALL ;AN000; Create the file + ;********************************************************************** + ; See if an error has occured. + ;********************************************************************** + .IF < C > ;AN000; Did the DOS fn. return an error? + .IF < AX EQ 5 > ;AN000; Was the error ACCESS DENIED? + MOV DX, BX ;AN000; Get the address of the string + MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors + MOV AX, 3D01H ;AN000; DOS Fn. for opening a file + DOSCALL ;AN000; + .IF < C > ;AN000; Was there an error? + MOV N_WRITE_ERR_CODE, AX ;AN000; Save this error code + .ENDIF ;AN000; + .ELSE ;AN000; + MOV N_WRITE_ERR_CODE, AX ;AN000; + .ENDIF ;AN000; + .ENDIF ;AN000; + ; + .IF < N_WRITE_ERR_CODE NE 0 > ;AN000; + STC ;AN000; + .ELSE ;AN000; + MOV N_WRITE_HANDLE, AX ;AN000; + CLC ;AN000; + .ENDIF ;AN000; + ; +END_PREPARE_FILE: ;AN000; + ; + RET ;AN000; + ; +PREPARE_FILE_ROUTINE ENDP ;AN000; +;************************************************************************** +; +; WRITE_LINE_ROUTINE: Write a line to the file being constructed. +; +; INPUT: +; BX = The address of an ASCII-N string containing the line to write +; to the file. +; +; OUTPUT: CY = 0: No error was encountered. +; CY = 1: An error was encountered. +; +; OPERATION: The line that is passed, has a CR and a LF appended to the +; end of the line. The data is then stored in a buffer. When the +; buffer is full, the data is written to the disk. +; +;************************************************************************** +PUBLIC WRITE_LINE_ROUTINE ;AN000; +WRITE_LINE_ROUTINE PROC FAR ;AN000; + + + ; See if there has been an error so far ; + .IF < N_WRITE_ERR_CODE EQ 0 > ;AN000; Has there been an error? + MOV SI, BX ;AN000; No! Get the string address + ADD SI, WORD PTR [BX] ;AN000; Get the end of string address + ADD SI, 2 ;AN000; Adjust for the length word + MOV BYTE PTR [SI], E_CR ;AN000; Append a carrage return to the string + MOV BYTE PTR [SI+1], E_LF ;AN000; Append a line feed to the string + MOV CX, WORD PTR [BX] ;AN000; Get the length of the string + ADD CX, 2 ;AN000; Increase the string length by two + MOV DX, BX ;AN000; Get the address of the string + ADD DX, 2 ;AN000; Adjust pointer for length word + MOV BX, N_WRITE_HANDLE ;AN000; Handle for the already opened file + MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors + MOV AH, 40H ;AN000; Function call for writing to a file + DOSCALL ;AN000; Write the line + .IF < C > ;AN000; Was there an error? + MOV N_WRITE_ERR_CODE, AX ;AN000; Yes! Save the error code + .ENDIF ;AN000; + .ENDIF ;AN000; + RET ;AN000; + ; +WRITE_LINE_ROUTINE ENDP ;AN000; +;************************************************************************** +; +; SAVE_FILE_ROUTINE: Empty the data in the buffer being used to create +; the file and then close the file. +; +; INPUT: +; BX - The address of the string containing the file name. +; +; OUTPUT: CY = 0: No error was encountered. +; CY = 1: An error was encountered. +; AX will contain the code of the error which occured. +; +; OPERATION: The routine will check to see if there is any data left in +; the buffer. If there is, the data is written to the file being +; created. The file is then closed. If errors were encountered at +; anytime during the create process, then the carry flag will be set +; and the error code will be returned in AX. +; +;************************************************************************** +PUBLIC SAVE_FILE_ROUTINE ;AN000; +SAVE_FILE_ROUTINE PROC FAR ;AN000; + ; + .IF < N_WRITE_ERR_CODE NE 0 > ;AN000; Has an error been encountered? + MOV DI, BX ;AN000; Yes! Erase the file. + CALL POS_ZERO ;AN000; Make string into an ASCII-Z string + MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors + MOV DX, DI ;AN000; Get the address of the string + ADD DX, 2 ;AN000; Advance pointer past length word + MOV AH, 41H ;AN000; DOS function for erasing a file + DOSCALL ;AN000; Erase the file + .ELSE ;AN000; Otherwise, if no error. + MOV BX, N_WRITE_HANDLE ;AN000; Get the file handle + MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors + MOV AH, 3EH ;AN000; DOS function for closing a file + DOSCALL ;AN000; Close the file + .IF < C > ;AN000; Error closing the file? + MOV N_WRITE_ERR_CODE, AX ;AN000; Yes! Save the error code + .ENDIF ;AN000; + .ENDIF ;AN000; + ; + MOV AX, N_WRITE_ERR_CODE ;AN000; Return the error code + .IF < N_WRITE_ERR_CODE NE 0 > ;AN000; Have errors been encountered? + STC ;AN000; Yes! Set the carry flag + .ELSE ;AN000; No! + CLC ;AN000; Clear the carry flag + .ENDIF ;AN000; + ; + RET ;AN000; + ; +SAVE_FILE_ROUTINE ENDP ;AN000; +;**************************************************************************** +; +; EXEC_PROGRAM_ROUTINE: Loads another program into memory and begins +; execution. +; +; INPUT: child = Name of the program to execute (ASCII-N format) +; name_com = The command line to be passed to parm_block +; parm_block = Parameter block for child program. +; re_dir = Flag indicating whether to redirect the output or not. +; = 1: Redirect the output. +; = 0: Don't redirect the output. +; +; OUTPUT: CY = 0: Successful +; CY = 1: Error - AX has the error code. +; +; OPERATION: The command line to be passed to the parameter block is +; copied to the command buffer specified for the parameter block and +; a carrage return is appended to the end of the buffer. (The +; command line length can be zero. +; +; The segment offsets in the parameter block are defined and DOS +; function call 29H is performed to set up the default FCB's. +; +; DOS function call 4Bh is performed to load and execute the +; specified child program. The contents of SS and SP are destroyed +; during the call, so they must be save and restored later. When the +; parent program (SELECT) gets control, all available memory is +; allocated to it. It is assumed that memory has been freed (Function +; call 4Ah - FREE_MEM) before invoking this function. +; +;************************************************************************ + +PUBLIC EXEC_PROGRAM_ROUTINE ;AN000; +EXEC_PROGRAM_ROUTINE PROC FAR ;AN000; + ; + ; + EX_CHILD EQU [BP]+12 ;AN000; Equates for temporary variables + EX_NAME_COM EQU [BP]+10 ;AN000; + EX_PARM_BLOCK EQU [BP]+8 ;AN000; + EX_RE_DIR EQU [BP]+6 ;AN000; + ; + MOV SUB_PROGRAM, TRUE ;AN000; + ; + PUSH BP ;AN000; Save base pointer + MOV BP, SP ;AN000; Set up pointer for temp. variables + ; + PUSH DS ;AN000; Save the segment registers + PUSH ES ;AN000; + ; + MOV AH,2FH ;AC000;JW + DOSCALL ;AC000;JW get DTA address + PUSH ES ;AC000;JW save DTA seg + PUSH BX ;AC000;JW save DTA off + ; + PUSH DS ;AN000; + POP ES ;AN000; Point ES to the current data segment + ; + .IF < EQ EXEC_DIR > ;AN000; + MOV AH, 3EH ;AN000; Close Stdout + MOV BX, STDOUT ;AN000; + DOSCALL ;AN000; + MOV DX, OFFSET NULL_DEVICE ;AN000; Open the NULL device + MOV AX, 3D01H ;AN000; + DOSCALL ;AN000; + MOV AH, 3EH ;AN000; Close Stderr + MOV BX, STDERR ;AN000; + DOSCALL ;AN000; + MOV DX, OFFSET NULL_DEVICE ;AN000; Open the NULL device + MOV AX, 3D01H ;AN000; + DOSCALL ;AN000; + .ENDIF ;AN000; + ; + ; + MOV SI, EX_NAME_COM ;AN000; Get the address of the command line + MOV CX, WORD PTR [SI] ;AN000; Get the length of the command line + MOV BYTE PTR CMD_BUFF, CL ;AN000; Store the lenth of the string + MOV DI, OFFSET CMD_BUFF+1 ;AN000; Location to place the string + ADD SI, 2 ;AN000; Adjust pointer for length word + CLD ;AN000; Move in the forward direction + REP MOVSB ;AN000; Copy the string + MOV BYTE PTR [DI], 0DH ;AN000; Place a carriage return at the end. + ; + MOV DI, EX_CHILD ;AN000; Get the address of the program name string + CALL POS_ZERO ;AN000; Turn into an ASCII-Z string + MOV SI,EX_PARM_BLOCK ;AN000; Address of the parameters + MOV AH,62H ;AN000; DOS Function number for getting the PSP segment + DOSCALL ;AN000; Get the current PSP segment + ; + MOV [SI]+8, BX ;AN000; Store PSP segment in the parm block + MOV [SI]+12, BX ;AN000; These are the FCB segments + MOV AX, DATA ;AN000; Get the address of the data segment + MOV [SI]+4, AX ;AN000; Segment of the command line + ; + MOV ES, BX ;AN000; ES:DI points to the FCB to load + MOV DI, 5CH ;AN000; First FCB to load + MOV BX, SI ;AN000; Move the address of the parm block + MOV SI, [BX]+2 ;AN000; Get the address of the command line + INC SI ;AN000; Skip the length byte + MOV AX, 2900H ;AN000; DOS Function for parsing a command line + DOSCALL ;AN000; Parse the command line + MOV AX, 2900H ;AN000; + MOV DI, 6CH ;AN000; ES:DI points to the second FCB + DOSCALL ;AN000; Parse the second filename + ; +;INT 4BH DESTROYS SS,SP ; + MOV WORD PTR SAVE_AREA, SP ;AN000; Save the stack segment and pointer + MOV WORD PTR SAVE_AREA[2], SS ;AN000; + ; + MOV FIRST_TRY,TRUE ;AN000;DT initialize variables + MOV EXEC_DEALLOC,FALSE ;AN000;DT + MOV EXEC_DEHELP,FALSE ;AN000;DT + ; + MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors + PUSH DS ;AN000; Save the current data segment + POP ES ;AN000; Point ES to the current data segment + MOV DX, EX_CHILD ;AN000; Get the string with the name of the sub-program + ADD DX, 2 ;AN000; Adjust pointer passed length word + MOV AX,4B00H ;AN000; DOS Function number of executing a sub-program + PUSH BX ;AN000;DT + DOSCALL ;AN000; Fork to the sub-process + POP BX ;AN000;DT + .IF < c > ;AN000;DT + MOV EXEC_ERR,TRUE ;AN000;DT + .ELSE ;AN000;DT + MOV EXEC_ERR,FALSE ;AN000;DT + .ENDIF ;AN000;DT +;RESTORE REGISTERS ; + MOV AX,DATA ;AN000; Restore the data register first + MOV DS,AX ;AN000; Load the data segment register + MOV ES,AX ;AN000; + CLI ;AN000; Turn off interrupts while setting SS + MOV SS,WORD PTR SAVE_AREA[2] ;AN000; Restore the stack segment and pointer + MOV SP,WORD PTR SAVE_AREA ;AN000; + STI ;AN000; Turn interrupts on again. + CALL FAR PTR HOOK_INT_24 ;AN000; + ; + .IF < EQ EXEC_DIR > ;AN000; Redirect Stdout? + MOV AH, 3EH ;AN000; Close Stdout. + MOV BX, 1 ;AN000; + DOSCALL ;AN000; + MOV DX, OFFSET CON_DEVICE ;AN000; Open CON as stdout. + MOV AX, 3D01H ;AN000; + DOSCALL ;AN000; + MOV AH, 3EH ;AN000; Close Stderr. + MOV BX, 2 ;AN000; + DOSCALL ;AN000; + MOV DX, OFFSET CON_DEVICE ;AN000; Open CON as stdout. + MOV AX, 3D01H ;AN000; + DOSCALL ;AN000; + .ENDIF ;AN000; + ; + MOV AH,1AH ;AN000;JW + POP DX ;AN000;JW get old DTA off + POP DS ;AN000;JW get old DTA seg + DOSCALL ;AN000;JW restore the DTA address + ; + POP ES ;AN000; Restore all the registers. + POP DS ;AN000; + POP BP ;AN000; Restore the base pointer + ; + MOV AH, 4DH ;AN000; Get the return code from the sub-process + DOSCALL ;AN000; + .IF < AX NE 0 > or ;AN000; SAR;If not zero... + .IF < EXEC_ERR eq TRUE > ;AN000; SAR + .THEN ;AN000; SAR + MOV SUB_ERROR,AL ;AN000; + STC ;AN000; Indicate there was an error + .ELSE ;AN000; Otherwise... + MOV SUB_ERROR,0 ;AN000; + CLC ;AN000; No error. + .ENDIF ;AN000; + MOV SUB_PROGRAM, FALSE ;AN000; + MOV EXEC_FDISK, FALSE ;AN000;DT reset FDISK flag + ; + RET 8 ;AN000; Return, popping the parameters. +EXEC_PROGRAM_ROUTINE ENDP ;AN000; +;************************************************************************ +; +; GET_CNTY_DEF_ROUTINE: Get country, keyboard and codepage for the +; specified entry from the CTY_TABLE. +; +; INPUT: +; BX = 1: Use CTY_TAB_A +; = 2: Use CTY_TAB_B +; AX = index into country list table +; +; OUTPUT: +; N_COUNTRY = Country code +; N_KYBD_VAL = 0: Keyboard code is not valid +; = 1: Keyboard code is valid +; S_KEYBOARD = Keyboard code (ASCII-N format) +; N_CP_PRI = Primary code page +; N_CP_SEC = Secondary code page +; N_DESIGNATES = Number of disignates +; N_CPSW = Cpsw status +; N_CTY_RES = Reserved +; +; +; OPERATION: The country code, keyboard, primary codepage and the +; seondary codepage from the CTY_TABLE for the specified index is +; returned as spedified above. +; +; Note: Index of the first item is the table is 1. +; +;**************************************************************************** +PUBLIC GET_CNTY_DEF_ROUTINE ;AN000; +GET_CNTY_DEF_ROUTINE PROC FAR ;AN000; + ; AX contains the search's start index + SUB AX, 1 ;AN000; Make the first index 0 + MOV DX, TYPE CTY_DEF ;AN000; There are 9 bytes per entry + MUL DX ;AN000; Calculate the starting offset + MOV SI, AX ;AN000; Move the address into an index reg + ; + .IF < BX EQ 1 > ;AN000; BX contains which table to search + ADD SI, OFFSET CTY_TAB_A_1 ;AN000; Use the first table + .ELSE ;AN000; + ADD SI, OFFSET CTY_TAB_B_1 ;AN000; Use the second table + .ENDIF ;AN000; + ; + COPY_WORD N_COUNTRY, [SI+0] ;AN000; Get the counrty code + COPY_BYTE N_KYBD_VAL, [SI+2] ;AN000; See if the keyboard is valid + MOV S_KEYBOARD, 2 ;AN000; Length of the keyboard code string + COPY_WORD S_KEYBOARD[2], [SI+3] ;AN000; Get the keyboard code string + COPY_WORD N_CP_PRI, [SI+5] ;AN000; Get the primary code page + COPY_WORD N_CP_SEC, [SI+7] ;AN000; Get the secondary code page + COPY_WORD N_DESIGNATES, [SI+9] ;AN000; Get the number of designates + COPY_WORD N_CPSW, [SI+11] ;AN000; Get the code page switching status + COPY_BYTE ALT_KYB_ID, [SI+13] ;AN000; Get default alternate keyboard + COPY_BYTE N_CTY_RES, [SI+14] ;AN000; A reserved byte + + COPY_WORD I_KYBD_ALT,2 ;AC090;JW + RET ;AN000; + +GET_CNTY_DEF_ROUTINE ENDP ;AN000; +;**************************************************************************** +; +; GET_CNTY_INDEX_ROUTINE: Scan CTY_TABLE for the specified country code and +; return index of country code into the table. +; +; INPUT: +; CX = The country code +; +; OUTPUT: +; DX = 1: Country code is in table CTY_TAB_A +; = 2: Country code is in table CTY_TAB_B +; BX = The index into the country list. +; +; OPERATION: The CTY_TABLE is scanned for the specified country code and +; the index into the table is returned. +; +; Note: The index of the first item in the table is 1. +; +;************************************************************************ +PUBLIC GET_CNTY_INDEX_ROUTINE ;AN000; +GET_CNTY_INDEX_ROUTINE PROC FAR ;AN000; + ; + MOV DX, 1 ;AN000; Which table to search + MOV AH, 0 ;AN000; Clear the high byte + .WHILE < DX LE 2 > ;AN000; Search the TWO tables + .IF < DX EQ 1 > ;AN000; Are we searching the first table? + MOV SI, OFFSET CTY_TAB_A_1 ;AN000; Yes! Get the offset of the table + MOV AL, CTY_TAB_A ;AN000; Get the number of entries + .ELSE ;AN000; Otherwise... + MOV SI, OFFSET CTY_TAB_B_1 ;AN000; Get the offset of the second table + MOV AL, CTY_TAB_B ;AN000; Get the number of entries in this table + .ENDIF ;AN000; + MOV BX, 1 ;AN000; Index currently being scaned + ; + ; CX contains the country code. + .WHILE < NE CX> AND ;AN000; Search until this code is found + .WHILE < BX LE AX > ;AN000; And while there are still table entries + INC BX ;AN000; Increment the index into the table + ADD SI, TYPE CTY_DEF ;AN000; Point to the next table record + .ENDWHILE ;AN000; + ; + .IF < BX GT AX > ;AN000; Index is finished for this table + INC DX ;AN000; Examine the next table + .ELSE ;AN000; + .LEAVE ;AN000; Exit the while loop + .ENDIF ;AN000; + ; + .ENDWHILE ;AN000; + RET ;AN000; +GET_CNTY_INDEX_ROUTINE ENDP ;AN000; +;**************************************************************************** +; +; GET_KYBD_INDEX_ROUTINE: Scan KYBD_TABLE for the specified keyboard code and +; return index of keyboard code in the table and the +; alternate keyboard indicator. +; +; INPUT: +; DI = The offset of an ASCII-N string containing the keyboard code. +; +; OUTPUT: +; DX = 1: Keyboard is in table KYBD_TAB_A +; = 2: Keyboard is in table KYBD_TAB_B +; BX = The index into keyboard table. +; AL = 0: No alternate keyboard +; = 1: Alternate keyboard present +; +; OPERATION: The KYBD_TABLE is scanned for the specifies keyboard code and +; the index into the table is returned. +; +; Note: The index of the first item in the table is 1. +; +;************************************************************************ +PUBLIC GET_KYBD_INDEX_ROUTINE ;AN000; +GET_KYBD_INDEX_ROUTINE PROC FAR ;AN000; + ; + MOV BX, 0 ;AN000; Zero the table index + MOV DX, 1 ;AN000; Which table to search + MOV AH, 0 ;AN000; Clear high byte to use 16-bit value + .WHILE < DX LE 2 > ;AN000; + .IF < DX EQ 1 > ;AN000; + MOV SI, OFFSET KYBD_TAB_A_1 ;AN000; Get the offset of the table + MOV AL, KYBD_TAB_A ;AN000; Get the number of entries + .ELSE ;AN000; + MOV SI, OFFSET KYBD_TAB_B_1 ;AN000; Get the offset of the second table + MOV AL, KYBD_TAB_B ;AN000; Get the number of entries in this table + .ENDIF ;AN000; + MOV BX, 1 ;AN000; Index currently being scaned + ; + MOV CX, WORD PTR [DI+2] ;AN000; Get the keyboard code + .WHILE < NE CX> AND ;AN000; + .WHILE < BX LE AX > ;AN000; + INC BX ;AN000; + ADD SI, TYPE KYB_DEF ;AN000; + .ENDWHILE ;AN000; + ; + .IF < BX GT AX > ;AN000; Index is finished for this table + INC DX ;AN000; Examine the next table + .ELSE ;AN000; + MOV AL, BYTE PTR [SI+2] ;AN000; Get the alternate keyboard flag + .LEAVE ;AN000; Exit the while loop + .ENDIF ;AN000; + ; + .ENDWHILE ;AN000; + RET ;AN000; + ; +GET_KYBD_INDEX_ROUTINE ENDP ;AN000; +;************************************************************************; +; +; GET_KYBD_ROUTINE: Get the keyboard code and the alternate keyboard +; indicator from the KYBD_TABLE for the item specified by the index +; into the keyboard table. +; +; INPUT: +; CX = 1: Keyboard code is in table KYBD_TAB_A +; = 2: Keyboard code is is table KYBD_TAB_B +; AX = index into the keyboard table. +; DI = Address of the keyboard code. (ASCII-N format) +; +; OUTPUT: +; AL = 0: No alternate keyboard +; = 1: Alternate keyboard present +; +; OPERATION: The keyboard code from the KYBD_TABLE for the specified +; index item is returned. Also, the alternate keyboard present +; variable is updated. +; +; Note: Index of the first item in the table is 1. +; +;**************************************************************************** +PUBLIC GET_KYBD_ROUTINE ;AN000; +GET_KYBD_ROUTINE PROC FAR ;AN000; + ; AX contins the search's start index + SUB AX, 1 ;AN000; Make the first index 0 + MOV DX, TYPE KYB_DEF ;AN000; There are 3 bytes per entry + MUL DX ;AN000; Calculate the offset into the table + MOV SI, AX ;AN000; Move the address into an index reg + .IF < CX EQ 1> ;AN000; CX Contains which table to search + ADD SI, OFFSET KYBD_TAB_A_1 ;AN000; + .ELSE ;AN000; + ADD SI, OFFSET KYBD_TAB_B_1 ;AN000; + .ENDIF ;AN000; + ; + MOV WORD PTR [DI], 2 ;AN000; Length of the string + COPY_WORD [DI+2], [SI] ;AN000; Get the keyboard name + MOV AL, [SI+2] ;AN000; See if there is an alternate keyboard + RET ;AN000; + ; +GET_KYBD_ROUTINE ENDP ;AN000; +;;************************************************************************ +;; +;; CHK_EX_MEM_ROUTINE: Check if the system supports expanded memory. +;; +;; INPUT: +;; None. +;; +;; OUTPUT: +;; SI = 0: Expanded memory is NOT supported. +;; = 1: Expanded memory is supported. +;; BX = 0: XMA card +;; = 1: MODEL 80 +;; +;; OPERATION: A call to the system services (INT 15H, AH = C0H) is performed +;; to get the system configuration parameters. (model byte). +;; +;; The Personal System/2 Model 80 (model byte = 0F8h) always support +;; expanded memory. +;; +;; The Personal System/2 Models 50 and 60 (model byte = 0FCh) support +;; expanded memory if the CATSKILL 2 is present. The CATSKILL 2 card has +;; the identity number of F7FEh. F7H is read through the port address +;; 101h and FEH is read through port 100H +;; +;; The PS2 50/60 also support expanded memory if the HOLSTER card is +;; is present (id = FEFEh). +;; +;; AT's (and some XT's ?) support expanded memory if the CATSKILL 1 +;; (XMA) card is present. +;; +;; All other models do not support expanded memory. +;; +;;************************************************************************ +SLOT_SETUP EQU 08h ;AN000;Mask to put the desired adapter @RH2 +CARD_ID_LO EQU 100H ;AN000;PS/2 Adapter card id low and @RH2 +CARD_ID_HI EQU 101H ;AN000; high bytes - read only @RH2 + ;Card IDs read from port 100,101 @RH2 +XMAA_CARD_ID EQU 0FEF7h ;AN000; XMA/A Card ID @RH2 +HLST_CARD_ID EQU 0FEFEh ;AN000; HOLSTER card id JW +MODE_REG EQU 31A7H ;AN000; Mode register +TTPOINTER EQU 31A0H ;AN000; Translate Table Pointer (word) + ; +NUM_OF_SLOTS EQU 8 ;AN000; + ; +PUBLIC CHK_EX_MEM_ROUTINE ;AN000; +CHK_EX_MEM_ROUTINE PROC FAR ;AN000; + ; + PUSH ES ;AN000; + MOV AH, 0C0H ;AN000; Function number to get the model byte + INT 15H ;AN000; + .IF < AH eq 80H > ;AN000;IF AH = 80H + MOV SI, 0 ;AN000;then this is a PC or PCjr. No Expanded memory + MOV BX, 0 ;AN000;JW not a model 80 + .ELSE near ;AN000; + .IF < AH ne 086H > ;AN000;If not an old XT or AT + MOV AH, BYTE PTR ES:[BX]+2 ;AN000; Get the model byte + MOV AL, BYTE PTR ES:[BX]+3 ;AN000; Get the sub-model byte + .ENDIF ;AN000; + .IF < AH eq 0F8H> ;AN000; Is this a model 80? + MOV SI, 1 ;AN000; Yes! Expanded memory supported + MOV BX, 1 ;AN000;JW + .ELSEIF < AH eq 0FCH > and ;AN000; Is this a model 50 or 60? + .IF < AL eq 04 > or ;AN000; + .IF < AL eq 05 > ;AN000; + ;------------------------------------- + ; Search for XMA/A cards � + ;------------------------------------- + XOR CX,CX ;AN000;Check all slots starting at 0 @RH2 + MOV BX,0 ;AN000;JW say not a model 80 + .REPEAT ;AN000; + ; + MOV AL,CL ;AN000;Enable the specific slot by ORing @RH2 + OR AL,SLOT_SETUP ;AN000; the slot (bits 0-2) with the @RH2 + OUT 96H,AL ;AN000; setup flag (bit 3). @RH2 + ; + MOV DX,CARD_ID_LO ;AN000;Read the signature ID of the card @RH2 + IN AL,DX ;AN000; @RH2 + XCHG AL,AH ;AN000; @RH2 + MOV DX,CARD_ID_HI ;AN000; @RH2 + IN AL,DX ;AN000; @RH2 + ; + .IF < AX eq XMAA_CARD_ID > or ;AN000; + .IF < AX eq HLST_CARD_ID > ;AN000;JW + MOV SI, 1 ;AN000; Yes! Expanded memory supported + .LEAVE ;AN000; + .ENDIF ;AN000; + ; + .IF < CL eq NUM_OF_SLOTS > ;AN000; + MOV SI, 0 ;AN000; No! Expanded memoory isn't supported + .LEAVE ;AN000; + .ENDIF ;AN000; + ; + INC CL ;AN000;Check next adapter slot @RH2 + ; + .UNTIL ;AN000; + XOR AX,AX ;AN000;JW + OUT 96H,AL ;AN000;JW Reset port to neutral state + ; + .ELSE ;AN000; AT or XT + ;------------------------------------- + ; Search for XMA cards � + ;------------------------------------- + MOV DX,MODE_REG ;AN000;SAVE CONTENTS OF MODE REG + IN AL,DX ;AN000; + PUSH AX ;AN000; + ; + MOV AX,0AA55H ;AN000;DATA PATTERN (IN REAL MODE) + ;BE CERTAIN MODE REG GETS + ;REAL MODE + MOV DX,MODE_REG ;AN000;I/O TO MODE REG + OUT DX,AL ;AN000;WRITE PATTERN + MOV DX,TTPOINTER + 1 ;AN000;I/O TO TT POINTER (ODD ADDR) + XCHG AL,AH ;AN000;CHRG BUS WITH INVERSE PATTERN + OUT DX,AL ;AN000;WRITE IT + MOV DX,MODE_REG ;AN000; + IN AL,DX ;AN000;READ BACK MODE REG + XOR AL,AH ;AN000; + AND AL,0FH ;AN000;MASK OFF UNUSED BITS + ;ZERO FLAG = 0 IF ERROR + POP AX ;AN000; + PUSHF ;AN000;SAVE FLAGS + MOV DX,MODE_REG ;AN000; + OUT DX,AL ;AN000;RESTORE MODE REG TO INITIAL STATE + POPF ;AN000;RESTORE FLAGS + .IF < z > ;AN000; + MOV SI,1 ;AN000;XMA card present + .ELSE ;AN000; + MOV SI,0 ;AN000;no XMA card present + .ENDIF ;AN000; + MOV BX,0 ;AN000;not a model 80 + .ENDIF ;AN000; + .ENDIF ;AN000; + POP ES ;AN000; + RET ;AN000; +CHK_EX_MEM_ROUTINE ENDP ;AN000; +;**************************************************************************** +; +; GET_PRINTER_PARAMS_ROUTINE: Get parameters for specified printer. +; +; INPUT: +; AX = The printer number. +; BX = The number of the port to retrieve the information on. +; If var_port = 0, the information that is returned is +; that which corresponds to var_prt. +; BX = 0 : Get the information on printer number VAR_PRT +; = 1 : Get the information for the printer attached to LPT1 +; = 2 : Get the information for the printer attached to LPT2 +; = 3 : Get the information for the printer attached to LPT3 +; = 4 : Get the information for the printer attached to COM1 +; = 5 : Get the information for the printer attached to COM2 +; = 6 : Get the information for the printer attached to COM3 +; = 7 : Get the information for the printer attached to COM4 +; +; OUTPUT: +; AX = 1: Printer information is valid +; = 0: Printer not valid: default values returned +; +; OPERATION: Printer information for the specified printer is returned. +; If the specified printer is not defined, default values will be +; returned. +; I_PRINTER = Index into printer list (16 bit variable) : default 1 +; N_PRINTER_TYPE = P: Parallel printer +; = S: Serial printer +; I_PORT = Port number (16 bit variable) : default 1 +; I_REDIRECT = Redirection port number (16 bit variable) : default 1 +; S_MODE_PARM = Mode parameters - ASCII-N format +; S_CP_DRIVER = Code page driver parameters - ASCII-N format +; S_CP_PREPARE = Code prepare parameters - ASCII-N format +; S_GRAPH_PARM = Graphics parameters - ASCII-N format +; +; The structures of printer information are searched for the one with +; the same number as specified by AX. If found, the information +; in that structure is returned in the variables listed above. +; +;**************************************************************************** +PUBLIC GET_PRINTER_PARAMS_ROUTINE ;AN000; +GET_PRINTER_PARAMS_ROUTINE PROC FAR ;AN000; + + .IF < BX NE 0 > ;AN000; + DEC BX ;AN000; + MOV AX, TYPE PRINTER_DEF ;AN000; + MUL BX ;AN000; + MOV SI, AX ;AN000; + .IF < PRINTER_TABLES[SI].PRINTER_DATA_VALID EQ 1 > ;AN000; + JMP COPY_INFO ;AN000; + .ELSE ;AN000; + JMP RETURN_DEFAULTS ;AN000; + .ENDIF ;AN000; + .ELSE ;AN000; + MOV SI, 0 ;AN000; Index into the printer table + MOV BX, 1 ;AN000; Which structure is being searched + .WHILE < BX BE 7 > ;AN000; Search the seven structures + .IF < PRINTER_TABLES[SI].PRINTER_TAB_NUM EQ AX > AND ;AN000; Does the printer number match? + .IF < PRINTER_TABLES[SI].PRINTER_DATA_VALID EQ 1 > ;AN000; And is this data valid? + JMP COPY_INFO ;AN000; + .ENDIF ;AN000; + ADD SI, TYPE PRINTER_DEF ;AN000; Search the next structure + INC BX ;AN000; + .ENDWHILE ;AN000; +RETURN_DEFAULTS: ;AN000; + MOV I_PRINTER, 1 ;AN000; Yes! Return the default information + MOV I_PORT, 1 ;AN000; + MOV I_REDIRECT, 1 ;AN000; + MOV S_MODE_PARM, 0 ;AN000; + MOV S_CP_DRIVER, 0 ;AN000; + MOV S_CP_PREPARE, 0 ;AN000; + MOV S_GRAPH_PARM, 0 ;AN000; + MOV AX, 0 ;AN000; Indicate that the default values are being returned + JMP EXIT_GET_PARAMS ;AN000; + .ENDIF ;AN000; + +COPY_INFO: ;AN000; + COPY_WORD I_PRINTER, PRINTER_TABLES[SI].PRINTER_INDEX ;AN000; Copy the data out of the structure + COPY_BYTE N_PRINTER_TYPE, PRINTER_TABLES[SI].PRINTER_TYPE ;AN000; + COPY_WORD I_PORT, PRINTER_TABLES[SI].PORT_NUMBER ;AN000; + COPY_WORD I_REDIRECT, PRINTER_TABLES[SI].REDIRECTION_PORT ;AN000; + PUSH SI ;AN000; + COPY_STRING S_MODE_PARM, 40, PRINTER_TABLES[SI].MODE_PARMS ;AN000; + POP SI ;AN000; + PUSH SI ;AN000; + COPY_STRING S_CP_DRIVER, 22, PRINTER_TABLES[SI].CODE_DRIVER ;AN000; + POP SI ;AN000; + PUSH SI ;AN000; + COPY_STRING S_CP_PREPARE, 12, PRINTER_TABLES[SI].CODE_PREPARE ;AN000; + POP SI ;AN000; + PUSH SI ;AN000; + COPY_STRING S_GRAPH_PARM, 20, PRINTER_TABLES[SI].GRAPHICS_PARMS ;AN000; + POP SI ;AN000; + MOV AX, 1 ;AN000; Return that the data is valid + +EXIT_GET_PARAMS: ;AN000; + RET ;AN000; + ; +GET_PRINTER_PARAMS_ROUTINE ENDP ;AN000; +;**************************************************************************** +; +; SAVE_PRINTER_PARAMS_ROUTINE: Save the printer information in the printer +; structures. +; +; INPUT: +; AX = The printer number. +; +; OUTPUT: +; None. +; +; OPERATION: Printer information for the specified printer is stored. +; I_PRINTER = Index into printer list (16 bit variable) : default 1 +; N_PRINTER_TYPE = P: Parallel printer +; = S: Serial printer +; I_PORT = Port number (16 bit variable) : default 1 +; I_REDIRECT = Redirection port number (16 bit variable) : default 1 +; S_MODE_PARM = Mode parameters - ASCII-N format +; S_CP_DRIVER = Code page driver parameters - ASCII-N format +; S_CP_PREPARE = Code prepare parameters - ASCII-N format +; S_GRAPH_PARM = Graphics parameters - ASCII-N format +; +; The information is stored in the structures according to the type +; and port number of this printer. The first three structures are for +; LPT1 - LPT3, while the next four are for COM1 - COM2. +; +;**************************************************************************** +PUBLIC SAVE_PRINTER_PARAMS_ROUTINE ;AN000; +SAVE_PRINTER_PARAMS_ROUTINE PROC FAR ;AN000; + + PUSH AX ;AN000; Save the printer number + MOV AX, TYPE PRINTER_DEF ;AN000; Get the size of each structure + MOV SI, I_PORT ;AN000; Get the port number + .IF < N_PRINTER_TYPE EQ 'S'> ;AN000; Is this a serial port? + ADD SI, 3 ;AN000; Yes! Store in the later 4 structures + .ENDIF ;AN000; + DEC SI ;AN000; Make the first index a 0 + MUL SI ;AN000; Calculate the address of the structure + MOV BX, AX ;AN000; Put address into an index register + COPY_WORD PRINTER_TABLES[BX].PRINTER_INDEX, I_PRINTER ;AN000; Copy the data into the structure + COPY_BYTE PRINTER_TABLES[BX].PRINTER_TYPE, N_PRINTER_TYPE;AN000; + COPY_WORD PRINTER_TABLES[BX].PORT_NUMBER, I_PORT ;AN000; + COPY_WORD PRINTER_TABLES[BX].REDIRECTION_PORT, I_REDIRECT ;AN000; + COPY_STRING PRINTER_TABLES[BX].MODE_PARMS, 40, S_MODE_PARM ;AC000;JW + COPY_STRING PRINTER_TABLES[BX].CODE_DRIVER, 22, S_CP_DRIVER ;AN000; + COPY_STRING PRINTER_TABLES[BX].CODE_PREPARE, 12, S_CP_PREPARE ;AN000; + COPY_STRING PRINTER_TABLES[BX].GRAPHICS_PARMS, 20, S_GRAPH_PARM ;AN000; + .IF ;AN029; + COPY_STRING S_GRAPHICS,M_GRAPHICS,S_GRAPH_PARM ;AN029; + .ENDIF ;AN029; + POP AX ;AN000; Restore the printer number + MOV PRINTER_TABLES[BX].PRINTER_TAB_NUM, AX ;AN000; Save the number + MOV PRINTER_TABLES[BX].PRINTER_DATA_VALID, 1 ;AN000; Indicate that the data is valid + + MOV SI, 0 ;AN000; + MOV CX, 1 ;AN000; + .WHILE < CX BE 7 > ;AN000; + .IF < PRINTER_TABLES[SI].PRINTER_TAB_NUM EQ AX > AND ;AN000; + .IF < SI NE BX > ;AN000; + MOV PRINTER_TABLES[SI].PRINTER_DATA_VALID, 0 ;AN000; + .ENDIF ;AN000; + ADD SI, TYPE PRINTER_DEF ;AN000; + INC CX ;AN000; + .ENDWHILE ;AN000; + + RET ;AN000; + +SAVE_PRINTER_PARAMS_ROUTINE ENDP ;AN000; +;**************************************************************************** +; +; DISPLAY_MESSAGE_ROUTINE: Call the message retriever to display a message. +; +; INPUT: +; AX = The number of the message to be displayed. (16 bit value) +; +; OUTPUT: +; If CY = 1, there was an error displaying the message. +; If CY = 0, there were no errors. +; +; OPERATION: +; +;**************************************************************************** +PUBLIC DISPLAY_MESSAGE_ROUTINE ;AN000; +DISPLAY_MESSAGE_ROUTINE PROC FAR ;AN000; AX already contains the message number + MOV BX, -1 ;AN000; HANDLE -1 ==> USE ONLY DOS FUNCTION 1-12 + MOV SI, 0 ;AN000; SUBSTITUTION LIST + MOV CX, 0 ;AN000; SUBSTITUTION COUNT + MOV DL, 00 ;AN000; DOS INT21H FUNCTION FOR INPUT 0==> NO INPUT + MOV DI, 0 ;AN000; INPUT BUFFER IF DL = 0AH + MOV DH, -1 ;AN000; MESSAGE CALL -1==> UTILITY MESSAGE + CALL SYSDISPMSG ;AN000; + RET ;AN000; +DISPLAY_MESSAGE_ROUTINE ENDP ;AN000; + +;**************************************************************************** +; Procedure for hooking the INT_23_VECTOR into vector table +; INPUT: +; None. +; OUTPUT: +; None. +;**************************************************************************** +PUBLIC HOOK_INT_23 ;AN074;SEH +HOOK_INT_23 PROC FAR ;AN074;SEH + + PUSH AX ;AN074;SEH + PUSH BX ;AN074;SEH + PUSH DX ;AN074;SEH + PUSH ES ;AN074;SEH Save the segment registers. + PUSH DS ;AN074;SEH + PUSHF ;AN074;SEH + ; + MOV AL, 23H ;AN074;SEH Interrupt number to get the vector of + MOV AH, 35H ;AN074;SEH DOS Function number for getting a vector + DOSCALL ;AN074;SEH Get the interrupt vector + MOV WORD PTR OLD_INT_23, BX ;AN074;SEH Save the old vactor offset + MOV AX, ES ;AN074;SEH Get the old vector segment + MOV WORD PTR OLD_INT_23[2], AX ;AN074;SEH Save the old vector segment + PUSH DS ;AN074;SEH Save DS + PUSH CS ;AN074;SEH Point DS to the current code segment + POP DS ;AN074;SEH + MOV DX, OFFSET INT_23_VECTOR ;AN074;SEH Load offset of the new vector + MOV AL, 23H ;AN074;SEH Interrupt number to set + MOV AH, 25H ;AN074;SEH DOS Fn. number for setting a vector + DOSCALL ;AN074;SEH Set the vector + POP DS ;AN074;SEH Restore data segment + ; + POPF ;AN074;SEH + POP DS ;AN074;SEH Restore the registers + POP ES ;AN074;SEH + POP DX ;AN074;SEH + POP BX ;AN074;SEH + POP AX ;AN074;SEH + ; + RET ;AN074;SEH +HOOK_INT_23 ENDP ;AN074;SEH + +;**************************************************************************** +; Procedure for restoring the old interrupt 23h vector. +; INPUT: +; None. +; OUTPUT: +; None. +;**************************************************************************** +PUBLIC RESTORE_INT_23 ;AN074;SEH +RESTORE_INT_23 PROC FAR ;AN074;SEH + ; + PUSHF ;AN074;SEH + PUSH AX ;AN074;SEH + PUSH DX ;AN074;SEH + PUSH DS ;AN074;SEH Save the data segment + ; + PUSH DS ;AN074;SEH Save DS + LDS DX, OLD_INT_23 ;AN074;SEH Load the address of the old vector + MOV AH, 25H ;AN074;SEH DOS Fn. number for setting an interrupt vector + MOV AL, 23H ;AN074;SEH Interrupt vector to set + DOSCALL ;AN074;SEH Set the vector + POP DS ;AN074;SEH Restore data segment + ; + POP DS ;AN074;SEH Restore the data segment + POP DX ;AN074;SEH + POP AX ;AN074;SEH + POPF ;AN074;SEH + ; + RET ;AN074;SEH +RESTORE_INT_23 ENDP ;AN074;SEH +;**************************************************************************** +; Procedure for hooking the INT_24_VECTOR into vector table +; INPUT: +; None. +; OUTPUT: +; None. +;**************************************************************************** +PUBLIC HOOK_INT_24 ;AN000; +HOOK_INT_24 PROC FAR ;AN000; + + PUSH AX ;AN000; + PUSH BX ;AN000; + PUSH DX ;AN000; + PUSH ES ;AN000; Save the segment registers. + PUSH DS ;AN000; + PUSHF ;AN000; + + .IF < INT24_STATUS eq UNHOOKED > ;AN000; + + MOV AL, 24H ;AN000; Interrupt number to get the vector of + MOV AH, 35H ;AN000; DOS Function number for getting a vector + DOSCALL ;AN000; Get the interrupt vector + MOV WORD PTR OLD_INT_24, BX ;AN000; Save the old vactor offset + MOV AX, ES ;AN000; Get the old vector segment + MOV WORD PTR OLD_INT_24[2], AX ;AN000; Save the old vector segment + PUSH DS ;AN000; Save DS + PUSH CS ;AN000; Point DS to the current code segment + POP DS ;AN000; + MOV DX, OFFSET INT_24_VECTOR ;AN000; Load offset of the new vector + MOV AL, 24H ;AN000; Interrupt number to set + MOV AH, 25H ;AN000; DOS Fn. number for setting a vector + DOSCALL ;AN000; Set the vector + POP DS ;AN000; Restore data segment + MOV INT24_STATUS,HOOKED ;AN000; + + .ENDIF ;AN000; + + POPF ;AN000; + POP DS ;AN000; Restore the registers + POP ES ;AN000; + POP DX ;AN000; + POP BX ;AN000; + POP AX ;AN000; + + RET ;AN000; +HOOK_INT_24 ENDP ;AN000; + +;**************************************************************************** +; Procedure for restoring the old interrupt 24h vector. +; INPUT: +; None. +; OUTPUT: +; None. +;**************************************************************************** +PUBLIC RESTORE_INT_24 ;AN000; +RESTORE_INT_24 PROC FAR ;AN000; + + PUSHF ;AN000; + PUSH AX ;AN000; + PUSH DX ;AN000; + PUSH DS ;AN000; Save the data segment + + .IF < INT24_STATUS eq HOOKED > ;AN000; + + PUSH DS ;AN000; Save DS + LDS DX, OLD_INT_24 ;AN000; Load the address of the old vector + MOV AH, 25H ;AN000; DOS Fn. number for setting an interrupt vector + MOV AL, 24H ;AN000; Interrupt vector to set + DOSCALL ;AN000; Set the vector + POP DS ;AN000; Restore data segment + MOV INT24_STATUS,UNHOOKED ;AN000; + + .ENDIF ;AN000; + + POP DS ;AN000; Restore the data segment + POP DX ;AN000; + POP AX ;AN000; + POPF ;AN000; + + RET ;AN000; +RESTORE_INT_24 ENDP ;AN000; +;**************************************************************************** +; Procedure for hooking the INT_2F_VECTOR into vector table +; INPUT: +; None. +; OUTPUT: +; None. +;**************************************************************************** +PUBLIC HOOK_INT_2F ;AN000; +PUBLIC RESTORE_INT_2F ;AN000; +HOOK_INT_2F PROC FAR ;AN000; + + PUSH AX ;AN000; + PUSH BX ;AN000; + PUSH DX ;AN000; + PUSH ES ;AN000; Save the segment registers. + PUSH DS ;AN000; + MOV AL, 2FH ;AN000; Interrupt number to get the vector of + MOV AH, 35H ;AN000; DOS Function number for getting a vector + DOSCALL ;AN000; Get the interrupt vector + MOV WORD PTR OLD_INT_2F, BX ;AN000; Save the old vactor offset + MOV AX, ES ;AN000; Get the old vector segment + MOV WORD PTR OLD_INT_2F[2], AX ;AN000; Save the old vector segment + PUSH CS ;AN000; Point DS to the current code segment + POP DS ;AN000; + MOV DX, OFFSET INT_2F_VECTOR ;AN000; Load offset of the new vector + MOV AL, 2FH ;AN000; Interrupt number to set + MOV AH, 25H ;AN000; DOS Fn. number for setting a vector + DOSCALL ;AN000; Set the vector + POP DS ;AN000; Restore the registers + POP ES ;AN000; + POP DX ;AN000; + POP BX ;AN000; + POP AX ;AN000; + + RET ;AN000; + +HOOK_INT_2F ENDP ;AN000; +;**************************************************************************** +; Procedure for restoring the old interrupt 2Fh vector. +; INPUT: +; None. +; OUTPUT: +; None. +;**************************************************************************** +RESTORE_INT_2F PROC FAR ;AN000; + PUSHF ;AN000; + PUSH AX ;AN000; + PUSH DX ;AN000; + PUSH DS ;AN000; Save the data segment + LDS DX, OLD_INT_2F ;AN000; Load the address of the old vector + MOV AH, 25H ;AN000; DOS Fn. number for setting an interrupt vector + MOV AL, 2FH ;AN000; Interrupt vector to set + DOSCALL ;AN000; Set the vector + POP DS ;AN000; Restore the data segment + POP DX ;AN000; + POP AX ;AN000; + POPF ;AN000; + RET ;AN000; +RESTORE_INT_2F ENDP ;AN000; +;**************************************************************************** +; Procedure for hooking the INT_2F_256KB into vector table +; INPUT: +; None. +; OUTPUT: +; None. +;**************************************************************************** +PUBLIC HOOK_INT_2F_256KB ;AN000; +HOOK_INT_2F_256KB PROC FAR ;AN000; + + PUSH AX ;AN000; + PUSH BX ;AN000; + PUSH DX ;AN000; + PUSH ES ;AN000; Save the segment registers. + PUSH DS ;AN000; + MOV AL, 2FH ;AN000; Interrupt number to get the vector of + MOV AH, 35H ;AN000; DOS Function number for getting a vector + DOSCALL ;AN000; Get the interrupt vector + MOV WORD PTR OLD_INT_2F, BX ;AN000; Save the old vactor offset + MOV AX, ES ;AN000; Get the old vector segment + MOV WORD PTR OLD_INT_2F[2], AX ;AN000; Save the old vector segment + PUSH CS ;AN000; Point DS to the current code segment + POP DS ;AN000; + MOV DX, OFFSET INT_2F_256KB ;AN000; Load offset of the new vector + MOV AL, 2FH ;AN000; Interrupt number to set + MOV AH, 25H ;AN000; DOS Fn. number for setting a vector + DOSCALL ;AN000; Set the vector + POP DS ;AN000; Restore the registers + POP ES ;AN000; + POP DX ;AN000; + POP BX ;AN000; + POP AX ;AN000; + + RET ;AN000; + +HOOK_INT_2F_256KB ENDP ;AN000; +;**************************************************************************** +; Procedure for hooking the INT_2F_FORMAT into vector table +; INPUT: +; None. +; OUTPUT: +; None. +;**************************************************************************** +PUBLIC HOOK_INT_2F_FORMAT ;AN111;JW +HOOK_INT_2F_FORMAT PROC FAR ;AN111;JW + + PUSH AX ;AN111;JW + PUSH BX ;AN111;JW + PUSH DX ;AN111;JW + PUSH ES ;AN111; Save the segment registers. JW + PUSH DS ;AN111;JW + MOV AL, 2FH ;AN111; Interrupt number to get the vector of JW + MOV AH, 35H ;AN111; DOS Function number for getting a vector JW + DOSCALL ;AN111; Get the interrupt vector JW + MOV WORD PTR OLD_INT_2F, BX ;AN111; Save the old vactor offset JW + MOV AX, ES ;AN111; Get the old vector segment JW + MOV WORD PTR OLD_INT_2F[2], AX ;AN111; Save the old vector segment JW + PUSH CS ;AN111; Point DS to the current code segment JW + POP DS ; ;AN111;JW + MOV DX, OFFSET INT_2F_FORMAT ;AN111; Load offset of the new vector JW + MOV AL, 2FH ;AN111; Interrupt number to set JW + MOV AH, 25H ;AN111; DOS Fn. number for setting a vector JW + DOSCALL ;AN111; Set the vector JW + POP DS ;AN111; Restore the registers JW + POP ES ;AN111;JW + POP DX ;AN111;JW + POP BX ;AN111;JW + POP AX ;AN111;JW + ; + RET ;AN111;JW + ; +HOOK_INT_2F_FORMAT ENDP ;AN111;JW +;**************************************************************************** + +CODE_FAR ENDS ;AN000; + END ;AN000; diff --git a/v4.0/src/SELECT/ROUT_EXT.INC b/v4.0/src/SELECT/ROUT_EXT.INC new file mode 100644 index 0000000..8f937d4 --- /dev/null +++ b/v4.0/src/SELECT/ROUT_EXT.INC @@ -0,0 +1,74 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Routines in ROUTINES.ASM +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +EXTRN APPEND_STRING_ROUTINE:FAR ;AN000; +EXTRN BEEP_ROUTINE:FAR ;AN000; +EXTRN BIN_TO_CHAR_ROUTINE:FAR ;AN000; +EXTRN CHK_EX_MEM_ROUTINE:FAR ;AN000; +EXTRN COPY_ROUTINE:FAR ;AN000; +EXTRN DISPLAY_MESSAGE_ROUTINE:FAR ;AN000; +EXTRN EXEC_PROGRAM_ROUTINE:FAR ;AN000; +EXTRN GET_CNTY_DEF_ROUTINE:FAR ;AN000; +EXTRN GET_CNTY_INDEX_ROUTINE:FAR ;AN000; +EXTRN GET_KYBD_INDEX_ROUTINE:FAR ;AN000; +EXTRN GET_KYBD_ROUTINE:FAR ;AN000; +EXTRN GET_PRINTER_PARAMS_ROUTINE: FAR ;AN000; +EXTRN HOOK_INT_23:FAR ;AN074;SEH ctrl-break +EXTRN HOOK_INT_24:FAR ;AN000; +EXTRN HOOK_INT_2F:FAR ;AN000; +EXTRN HOOK_INT_2F_256KB:FAR ;AN000; +EXTRN HOOK_INT_2F_FORMAT:FAR ;AN111;JW +EXTRN MAKE_DIR_PATHS_ROUTINE:FAR ;AN000; +EXTRN POP_ROUTINE:FAR ;AN000; +EXTRN POS_ZERO:FAR ;AN000; +EXTRN PREPARE_FILE_ROUTINE:FAR ;AN000; +EXTRN PUSH_ROUTINE:FAR ;AN000; +EXTRN RESTORE_INT_23:FAR ;AN074;SEH ctrl-break +EXTRN RESTORE_INT_24:FAR ;AN000; +EXTRN RESTORE_INT_2F:FAR ;AN000; +EXTRN SAVE_FILE_ROUTINE:FAR ;AN000; +EXTRN SAVE_PRINTER_PARAMS_ROUTINE: FAR ;AN000; +EXTRN SCAN_PARAMETERS_ROUTINE:FAR ;AN000; +EXTRN SCAN_INFO_FILE_ROUTINE:FAR ;AN001; GHG for 360kb +EXTRN WRITE_LINE_ROUTINE:FAR ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Routines in ROUTINE2.ASM +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +EXTRN CHANGE_ATTRIBUTE_ROUTINE:FAR ;AN000; +EXTRN CHECK_DISK_ROUTINE:FAR ;AN000; +EXTRN CHECK_DOS_PATH_ROUTINE:FAR ;AN000; +EXTRN CHECK_VALID_MEDIA_ROUTINE:FAR ;AN000; +EXTRN CHECK_VALID_PATH:FAR ;AN000; +EXTRN CHECK_WRITE_ROUTINE:FAR ;AN000; +EXTRN CHK_W_PROTECT_FLAG:FAR ;AN000; +EXTRN CLOSE_FILE_ROUTINE:FAR ;AN000; +EXTRN COMPARE_ROUTINE:FAR ;AN000; +EXTRN CREATE_FILE_ROUTINE:FAR ;AN000; +EXTRN ERASE_FILE_ROUTINE:FAR ;AN000; +EXTRN CHMOD_FILE_ROUTINE:FAR ;AN000; +EXTRN FIND_FILE_ROUTINE:FAR ;AN000; +EXTRN MATCH_FILES_ROUTINE:FAR ;AN000; +EXTRN OPEN_FILE_ROUTINE:FAR ;AN000; +EXTRN READ_FILE_ROUTINE:FAR ;AN000; +EXTRN REMOVE_END_BLANKS:FAR ;AN000; +EXTRN RENAME_FILE_ROUTINE:FAR ;AN000; +EXTRN SCAN_DISK_TABLE_ROUTINE:FAR ;AN000; +EXTRN UPDATE_DISK_TABLE_ROUTINE:FAR ;AN000; +EXTRN WRITE_FILE_ROUTINE:FAR ;AN000; +EXTRN W_PROTECT_FLAG:FAR ;AN000; + ; +; Routine in MOD_COPY.ASM ; +EXTRN MOD_XCOPY:FAR ;AN000; + ; +; Routines in PRN_DEF.ASM ; +EXTRN CHANGE_AUTOEXEC_ROUTINE:FAR ;AN000; +EXTRN GET_PRINTER_INFO_ROUTINE:FAR ;AN000; +EXTRN GET_PRINTER_TITLES_ROUTINE:FAR ;AN000; +EXTRN RELEASE_PRINTER_INFO_ROUTINE:FAR ;AN000; + ; +; Routines in S_DISPLY.ASM ; +EXTRN SET_DISPLAY_MODE_ROUTINE:FAR ;AN000; diff --git a/v4.0/src/SELECT/SCN_PARM.ASM b/v4.0/src/SELECT/SCN_PARM.ASM new file mode 100644 index 0000000..5b6a9fd --- /dev/null +++ b/v4.0/src/SELECT/SCN_PARM.ASM @@ -0,0 +1,299 @@ +;******************************************************************************** +; File: SCN_PARM.ASM +; +; Subroutine for scanning the SELECT command line, and if the appropriate +; parameter is specified, additional information is read from the disk. +; +;******************************************************************************** +.ALPHA ;AN000; +.XLIST ;AN000; +INCLUDE MACROS.INC ;AN000; +INCLUDE STRUC.INC ;AN000; +INCLUDE EXT.INC ;AN000; +.LIST ;AN000; + + +PUBLIC SCAN_PARAMETERS_ROUTINE ;AN000; +EXTRN SYSPARSE:FAR ;AN000; +EXTRN POS_ZERO:FAR ;AN000; +EXTRN HOOK_INT_24:FAR ;AN000; +EXTRN RESTORE_INT_24:FAR ;AN000; +EXTRN CLOSE_FILE_ROUTINE:FAR ;AN000; + + +DATA SEGMENT BYTE PUBLIC 'DATA';AN000; + +PARMS LABEL BYTE ;AN000; + PAR_EXTEN DW PARMSX ;AN000; Offset of the PARMS EXTENSION BLOCK + PAR_NUM DB 0 ;AN000; The number of further definitions + +; The PARMS EXTENSION BLOCK +PARMSX LABEL BYTE ;AN000; + PAX_MINP DB 1 ;AN000; + PAX_MAXP DB 1 ;AN000; + DW OFFSET CONTROL_P1;AN000; + PAX_MAX_SW DB 0 ;AN000; + PAX_MAX_K1 DB 0 ;AN000; + +CONTROL_P1 LABEL BYTE ;AN000; + DW 02000H ;AN000; + DW 0000H ;AN000; + DW RESULT_P1 ;AN000; + DW VALUE_LIST_P1 ;AN000; + DB 0 ;AN000; + +VALUE_LIST_P1 LABEL BYTE ;AN000; + DB 3 ;AN000; Number of value definitions + DB 0 ;AN000; Number of range definitions + DB 0 ;AN000; Number of actual value definitions + DB 2 ;AN000; Number of string definitions + DB 0 ;AN000; Value to be returned if this string is matched + DW OFFSET KEYWORD_MENU;AN000; + DB 1 ;AN000; Value to be returned if this string is matched + DW OFFSET KEYWORD_FDISK ;AN000; + +KEYWORD_MENU DB 'MENU',0 ;AN000; +KEYWORD_FDISK DB 'FDISK',0 ;AN000; + +RESULT_P1 LABEL BYTE ;AN000; + DB 0 ;AN000; Type of operand returned + DB 0 ;AN000; Matched item tag + DW 0 ;AN000; Offset of synonym returned + DB 0,0,0,0 ;AN000; Unsure what this is... + + +MODE DW 0 ;AN000; +option_0 dw 0 +OPTION_1 DW 0 ;AN000; +OPTION_2 DW 0 ;AN000; +OPTION_3 DW 0 ;AN033;SEH +FILE_HANDLE DW 0 ;AN000; + +DATA ENDS ;AN000; + +CODE_FAR SEGMENT BYTE PUBLIC 'CODE' ;AN000; + + ASSUME CS:CODE_FAR, DS:DATA, ES:DATA ;AN000; + +;**************************************************************************** +; +; SCAN_PARAMETERS_ROUTINE: Scan SELECT command line for parameters. +; +; SYNTAX: SCAN_PARAMETERS mode, option, path, filename, buffer, buff_size +; +; INPUT: +; DI = The name of the file which contains the FDISK parameters. +; (ASCII-N format) +; SI = A buffer where the data read from the file can be stored. +; CX = The size of the buffer. +; +; OUTPUT: +; AX = Install mode +; = 0: Parameter is MENU +; = 1: Parameter is FDISK +; = 0FFH: Parameter is invalid +; BX = 0 +; = 1 +; = 2 +; = 0FFh: Parameter is invalid (not 0, 1, 2) +; CX = 0,1,2 +; DI = Install path in ASCII-N format +; +; OPERATION: The SELECT command line is scanned for parameters. The +; return codes for the various parameters are provided in variables +; defined above. If the parameter on the command line is FDISK, then +; the file specified in FILENAME is opened and additional parameters +; are read. If the parameters in the file are invalid, or if the file +; cannot be found, then 0FFh is returned in MODE and OPTION, and the +; path length is set to zero. +; +; Note: +; Before this macro is executed, there must be as ASSUME ES:DATA +; statement. If not, the parser will not execute properly and +; either the computer will hang or erroneous values will be returned. +; +;**************************************************************************** + PATH EQU [BP+12] ;AN000; + FILENAME EQU [BP+10] ;AN000; + BUFFER EQU [BP+8] ;AN000; + BUFF_SIZE EQU [BP+6] ;AN000; + ; +SCAN_PARAMETERS_ROUTINE PROC FAR ;AN000; + PUSH BP ;AN000; + MOV BP, SP ;AN000; + ; + MOV OPTION_1, E_SELECT_INV ;AN000; + MOV OPTION_2, E_SELECT_INV ;AN000; + ; + PUSH ES ;AN000; Save the extra register + MOV AX, DATA ;AN000; ES contain control block segment + MOV ES, AX ;AN000; + MOV DI, OFFSET PARMS ;AN000; DI contains offset of control block + MOV SI, 0081H ;AN000; SI contains offset of command line + MOV DX, 0 ;AN000; DX and CX must be zero + MOV CX, 0 ;AN000; + MOV AH, 062H ;AN000; Get the PSP segment + DOSCALL ;AN000; + ; + PUSH BX ;AN000; Save for later reference +NEXT_PARSE: ;AN000; + POP AX ;AN000; Get the PSP segment + PUSH AX ;AN000; Place on stack again + PUSH DS ;AN000; Save the current data segment + MOV DS, AX ;AN000; Load DS with the segment of the command line + CALL SYSPARSE ;AN000; Parse the command line + POP DS ;AN000; Restore the data segment + ; + .IF < AX EQ 0 > ;AN000; Were there any errors? + MOV BX, DX ;AN000; No! Get the address of the result block + MOV AL, [BX]+1 ;AN000; Yes! Get the returned value + MOV AH, 0 ;AN000; Zero the high byte + MOV MODE, AX ;AN000; Store the result + JMP NEXT_PARSE ;AN000; Parse the next parameter + .ELSEIF < AX NE -1 > ;AN000; If there was an error, indicate so. + MOV MODE, E_SELECT_INV ;AN000; Return that the values are invalid + MOV OPTION_1, E_SELECT_INV ;AN000; + MOV OPTION_2, E_SELECT_INV ;AN000; + .ENDIF ;AN000; + POP AX ;AN000; Take the PSP segment off the stack + MOV AX,MODE ;AN000; Store the result + POP ES ;AN000; + POP BP ;AN000; + RET ;AN000; +SCAN_PARAMETERS_ROUTINE ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SCAN_INFO_FILE_ROUTINE: Scan SELECT.TMP file for parameters. +; +; INPUT: +; The following variables have been passed to this routine from the +; SCAN_INFO_FILE macro by pushing them on the stack: +; PATH EQU [BP+12] +; FILENAME EQU [BP+10] +; BUFFER EQU [BP+8] +; BUFF_SIZE EQU [BP+6] +; +; OUTPUT: +; AX = Install mode +; = 0: Parameter is MENU +; = 1: Parameter is FDISK +; = 0FFH: Parameter is invalid +; BX = 1 +; = 2 +; = 3 +; = 0FFh: Parameter is invalid (not 1, 2, 3) +; CX = 1 +; = 2 +; = 0FFh: Parameter is invalid (not 1, 2) +; DX = 1 +; = 2 +; = 0FFh: Parameter is invalid (not 1, 2) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + PUBLIC SCAN_INFO_FILE_ROUTINE ;AN000; +SCAN_INFO_FILE_ROUTINE PROC FAR ;AN000; + CALL HOOK_INT_24 ;AN000; + ; + PUSH BP ;AN000; + MOV BP, SP ;AN000; + MOV OPTION_0, E_SELECT_INV ;AN000; + MOV OPTION_1, E_SELECT_INV ;AN000; + MOV OPTION_2, E_SELECT_INV ;AN000; + MOV OPTION_3, E_SELECT_INV ;AN033;SEH + PUSH ES ;AN000; Save the extra register + ; + .IF < MODE NE E_SELECT_INV> AND NEAR ;AN000; If no error has occured yet, + .IF < MODE EQ 1 > NEAR ;AN000; and if the parameter was FDISK... + MOV DI, FILENAME ;AN000; Get the offset of the filename + CALL POS_ZERO ;AN000; Make into an ASCII-Z string + MOV DX, DI ;AN000; Load filename offset again + ADD DX, 2 ;AN000; Adjust pointer past the length word + MOV AX, 3D00H ;AN000; Fn call for opening a file for reading + DOSCALL ;AN000; Open the file + .IF < C > ;AN000; If there was as error, do not continue + JMP FILE_ERROR ;AN000; Return INVALID parameters to the caller + .ENDIF ;AN000; + MOV FILE_HANDLE, AX ;AN000; Save the returned file handle + MOV AH, 3FH ;AN000; DOS Fn for reading from a file + MOV DX, BUFFER ;AN000; Get the offset of the data buffer + MOV CX, BUFF_SIZE ;AN000; Get the number of bytes in the buffer + MOV BX, FILE_HANDLE ;AN000; Get the file handle for the opened file + DOSCALL ;AN000; Read from the file + .IF < C > ;AN000; If there was an error, do not continue + JMP FILE_ERROR ;AN000; Return INVALID parameters to the caller + .ENDIF ;AN000; + MOV SI, BUFFER ;AN000; Get the offset of the data buffer + MOV BH, 0 ;AN000; Zero the high byte + MOV BL, BYTE PTR [SI] ;AN000; Get the first byte from the file + SUB BL, '0' ;AN000; Turn into a binary number + MOV OPTION_0, BX ;AN000; Save this as the first option + MOV BL, BYTE PTR [SI+3] ;AN000; Get the first byte from the file + SUB BL, '0' ;AN000; Turn into a binary number + MOV OPTION_1, BX ;AN000; Save this as the first option + MOV BL, BYTE PTR [SI+6] ;AN000; Get the second option in the file + SUB BL, '0' ;AN000; Make into a binary value + MOV OPTION_2, BX ;AN000; Save this second option + MOV BL, BYTE PTR [SI+9] ;AN033; SEH Get the third option in the file + SUB BL, '0' ;AN033; SEH Make into a binary value + MOV OPTION_3, BX ;AN033; SEH Save this third option + MOV SI, BUFFER ;AN000; Get the offset of the data buffer + ADD SI, 12 ;AC033; SEH Point to the start of the path line + MOV DI, PATH ;AN000; Get the offset of the path storage + MOV BX, DI ;AN000; + ADD DI, 2 ;AN000; Adjust pointer past the length word + ; AX contains the number of characters read from the file + SUB AX, 12 ;AC033; SEH Number of characters left in the buffer + MOV CX, 0 ;AN000; Number of characters in the path string + MOV WORD PTR [BX], 0 ;AN000; Zero the string length to begin + .WHILE < AX GT 0 > ;AN000; Continue while there are characters left + MOV DL, [SI] ;AN000; Get the character from the buffer + .IF < DL EQ E_CR > OR ;AN000; See if this is the end of the line + .IF < DL EQ E_LF > ;AN000; + MOV [BX], CX ;AN000; Store the length of path + .LEAVE ;AN000; + .ENDIF ;AN000; + MOV [DI], DL ;AN000; Store the byte in the path + INC DI ;AN000; Increment the path pointer + INC SI ;AN000; Increment the source pointer + INC CX ;AN000; Increment the count of characters + DEC AX ;AN000; Decrement the numbers of characters left + .IF < CX A M_INSTALL_PATH > ;AN000; If more then 40 characters then an error + JMP FILE_ERROR ;AN000; + .ENDIF ;AN000; + .ENDWHILE ;AN000; + .IF < OPTION_1 AE 1 > AND ;AN000; If option is 1 or 2 then a path is needed + .IF < OPTION_1 BE 3 > ;AN000; + .IF < EQ 0 > ;AN000; If the path length was 0, return error + JMP FILE_ERROR ;AN000; + .ENDIF ;AN000; + .ELSE ;AN000; + .IF < NE 0 > ;AN000; If option is 3 and there is a path, error + JMP FILE_ERROR ;AN000; + .ENDIF ;AN000; + .ENDIF ;AN000; + JMP CLOSE_THE_FILE ;AN000; +FILE_ERROR: ;AN000; Here if there has been an error + MOV MODE, E_SELECT_INV ;AN000; + MOV OPTION_1, E_SELECT_INV ;AN000; + MOV OPTION_2, E_SELECT_INV ;AN000; + MOV OPTION_3, E_SELECT_INV ;AN033; SEH + MOV BX, PATH ;AN000; + MOV WORD PTR [BX], 0 ;AN000; +CLOSE_THE_FILE: ;AN000; Close the file + MOV BX, FILE_HANDLE ;AN000; Get the file handle + CLOSE_FILE BX ;AN000; Close the file + .ENDIF ;AN000; + MOV AX, option_0 ;AN000; Return the parameters + MOV BX, OPTION_1 ;AN000; + MOV CX, OPTION_2 ;AN000; + MOV DX, OPTION_3 ;AN033; SEH + ; + POP ES ;AN000; Restore the extra segment + POP BP ;AN000; + CALL RESTORE_INT_24 ;AN000; + RET 8 ;AN000; +SCAN_INFO_FILE_ROUTINE ENDP ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CODE_FAR ENDS ;AN000; + ; +END ;AN000; diff --git a/v4.0/src/SELECT/SCROLL.ASM b/v4.0/src/SELECT/SCROLL.ASM new file mode 100644 index 0000000..260d75a --- /dev/null +++ b/v4.0/src/SELECT/SCROLL.ASM @@ -0,0 +1,3356 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SCROLL.ASM +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + .alpha ; arrange segments alphabetically + + INCLUDE SEL-PAN.INC ;AN024; + EXTRN WR_CIS:WORD ;AN024; + ; + PUBLIC WR_SCBVEC ;AN024; + PUBLIC NUM_SCB ;AN024; + ; +PANEL EQU 0 ;AN024; +SCROLL EQU 1 ;AN024; + ; +CODE SEGMENT PARA PUBLIC 'CODE' ;AN024 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Scroll Control Block Vector +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCBVEC DW 0,OFFSET WR_SCB1 ;AN024;SCB 1 segment,offset + DW 0,OFFSET WR_SCB2 ;AN024;SCB 2 segment,offset + DW 0,OFFSET WR_SCB3 ;AN024;SCB 3 segment,offset + DW 0,OFFSET WR_SCB4 ;AN024;SCB 4 segment,offset + DW 0,OFFSET WR_SCB5 ;AN024;SCB 5 segment,offset + DW 0,OFFSET WR_SCB6 ;AN024;SCB 6 segment,offset + DW 0,OFFSET WR_SCB7 ;AN024;SCB 7 segment,offset + DW 0,OFFSET WR_SCB8 ;AN024;SCB 8 segment,offset + DW 0,OFFSET WR_SCB9 ;AN024;SCB 9 segment,offset + DW 0,OFFSET WR_SCB10 ;AN024;SCB 10 segment,offset + DW 0,OFFSET WR_SCB11 ;AN024;SCB 11 segment,offset + DW 0,OFFSET WR_SCB12 ;AN024;SCB 12 segment,offset + DW 0,OFFSET WR_SCB13 ;AN024;SCB 13 segment,offset + DW 0,OFFSET WR_SCB14 ;AN024;SCB 14 segment,offset + DW 0,OFFSET WR_SCB15 ;AN024;SCB 15 segment,offset + DW 0,OFFSET WR_SCB16 ;AN024;SCB 16 segment,offset + DW 0,OFFSET WR_SCB17 ;AN024;SCB 17 segment,offset + DW 0,OFFSET WR_SCB18 ;AN024;SCB 18 segment,offset + DW 0,OFFSET WR_SCB19 ;AN024;SCB 19 segment,offset + DW 0,OFFSET WR_SCB20 ;AN024;SCB 20 segment,offset + DW 0,OFFSET WR_SCB21 ;AN024;SCB 21 segment,offset + DW 0,OFFSET WR_SCB22 ;AN024;SCB 22 segment,offset + DW 0,OFFSET WR_SCB23 ;AN024;SCB 23 segment,offset + DW 0,OFFSET WR_SCB24 ;AN024;SCB 24 segment,offset + DW 0,OFFSET WR_SCB25 ;AN024;SCB 25 segment,offset + DW 0,OFFSET WR_SCB26 ;AN024;SCB 26 segment,offset + DW 0,OFFSET WR_SCB27 ;AN024;SCB 27 segment,offset + DW 0,OFFSET WR_SCB28 ;AN024;SCB 28 segment,offset +NUM_SCB EQU ($-WR_SCBVEC)/4 ;AN024; +L_WR_SCBVEC EQU NUM_SCB ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Scroll Data Definition +; +; +; PCSCRWR parameter block +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_INDEX1 DW 15 ;AN000;element order number + DW 14 ;AN000; + DW 13 ;AN000; + DW 12 ;AN000; + DW 11 ;AN000; + DW 10 ;AN000; + DW 9 ;AN000; + DW 8 ;AN000; + DW 7 ;AN000; + DW 6 ;AN000; + DW 5 ;AN000; + DW 4 ;AN000; + DW 3 ;AN000; + DW 2 ;AN000; + DW 1 ;AN000; + ; +LEFT_COL_SCROLL EQU 11 ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; DOSLEVEL SUPPORT +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB1 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 12 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST1_W ;AN000;line width + DW SCB_LIST1_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST1_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW WR_PUKEYSLEN ;AN000;page-up string length + DW WR_PUKEYS ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW WR_PDKEYSLEN ;AN000;page-down string length + DW WR_PDKEYS ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW 0 ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 0 ;AN000;number color index table entries + DW 0 ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_NUM ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST1 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST1_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SELECT COUNTRY CODE AND KEYBOARD +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB2 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 13 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST2_W ;AN000;line width + DW SCB_LIST2_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST2_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW WR_PUKEYSLEN ;AN000;page-up string length + DW WR_PUKEYS ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW WR_PDKEYSLEN ;AN000;page-down string length + DW WR_PDKEYS ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 2 ;AN000;logical color index number + DW 0 ;AN000;number color index table entries + DW 0 ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_NUM ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST2 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST2_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; defined country codes 1 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB3 DW SCB_FRBF+SCB_FRAL ;AN000;option word one + DW SCB_ROTN ;AN000;option word two + DW 0 ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 6 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST3_W ;AN000;line width + DW SCB_LIST3_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST3_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 3 ;AN000;logical color index number + DW 0 ;AN000;number color index table entries + DW 0 ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST3 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST3_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; defined country codes 2 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB4 DW SCB_FRBF+SCB_FRAL ;AN000;option word one + DW SCB_ROTN ;AN000;option word two + DW 0 ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 6 ;AN000;upper left row + DW LEFT_COL_SCROLL+SCB_LIST4_W+2 ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST4_W ;AN000;line width + DW SCB_LIST4_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST4_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 4 ;AN000;logical color index number + DW 0 ;AN000;number color index table entries + DW 0 ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST4 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST4_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; defined keyboard codes 1 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB5 DW SCB_FRBF+SCB_FRAL ;AN000;option word one + DW SCB_ROTN ;AN000;option word two + DW 0 ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 6 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST5_W ;AN000;line width + DW SCB_LIST5_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST5_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 5 ;AN000;logical color index number + DW 0 ;AN000;number color index table entries + DW 0 ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST5 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST5_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; defined keyboard codes 2 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB6 DW SCB_FRBF+SCB_FRAL ;AN000;option word one + DW SCB_ROTN ;AN000;option word two + DW 0 ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 6 ;AN000;upper left row + DW LEFT_COL_SCROLL+SCB_LIST6_W+2 ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST6_W ;AN000;line width + DW SCB_LIST6_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST6_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 6 ;AN000;logical color index number + DW 0 ;AN000;number color index table entries + DW 0 ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST6 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST6_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; defined FRENCH keyboard +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB7 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 10 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST7_W ;AN000;line width + DW SCB_LIST7_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST7_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 7 ;AN000;logical color index number + DW 0 ;AN000;number color index table entries + DW 0 ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_NUM ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST7 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST7_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; defined italian keyboard +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB8 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 10 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST8_W ;AN000;line width + DW SCB_LIST8_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST8_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 8 ;AN000;logical color index number + DW 0 ;AN000;number color index table entries + DW 0 ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_NUM ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST8 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST8_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; defined UK keyboard +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB9 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 10 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST9_W ;AN000;line width + DW SCB_LIST9_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST9_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 9 ;AN000;logical color index number + DW 0 ;AN000;number color index table entries + DW 0 ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_NUM ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST9 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST9_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; select drive b: or c: +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB10 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 8 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST10_W ;AN000;line width + DW SCB_LIST10_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST10_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 10 ;AN000;logical color index number + DW 0 ;AN000;number color index table entries + DW 0 ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_NUM ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST10 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST10_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; select printer type +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB11 DW 0 ;AN000;option word one + DW scb_uind ;AN000;option word two + DW 0 ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 11 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST11_W ;AN000;line width + DW 10 ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST11_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 9 ;AN000;up indicator row location + DW 64 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 9 ;AN000;down indicator row location + DW 66 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST11 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST11_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PARALLEL PRINTER PORT +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB12 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 9 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST12_W ;AN000;line width + DW SCB_LIST12_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST12_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_NUM ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST12 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST12_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; serial port +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB13 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 8 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST13_W ;AN000;line width + DW SCB_LIST13_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST13_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST13 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST13_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; parallel redirection +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB14 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 17 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST14_W ;AN000;line width + DW SCB_LIST14_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST14_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW WR_PUKEYSLEN ;AN000;page-up string length + DW WR_PUKEYS ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW WR_PDKEYSLEN ;AN000;page-down string length + DW WR_PDKEYS ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW 0 ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST14 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST14_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; review selections +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB15 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 11 ;AC079;SEH ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST15_W ;AN000;line width + DW SCB_LIST15_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST15_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_NUM ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST15 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST15_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; review selections #2 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB16 DW SCB_WRAP+SCB_DCHECK+SCB_DACTIVE;AN000;option word one + DW SCB_LCOX ;AN000;option word two + DW SCB_SELACT ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 12 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW 42 ;;AN000;;;SCB_LIST16_W ;line width + DW SCB_LIST16_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST16_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_NOINDLEN ;AN000;active indicator strg length + DW WR_NOIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 50 ;AN000;active ind txt col off into stg + DW WR_YESINDLEN ;AN000;check mark text string length + DW WR_YESIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 50 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_MOD ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST16 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST16_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; review selections 3 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB17 DW SCB_WRAP+SCB_DCHECK+SCB_DACTIVE;AN000;option word one + DW SCB_LCOX ;AN000;option word two + DW SCB_SELACT ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 12 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST17_W ;AN000;line width + DW SCB_LIST17_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST17_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_NOINDLEN ;AN000;active indicator strg length + DW WR_NOIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 50 ;AN000;active ind txt col off into stg + DW WR_YESINDLEN ;AN000;check mark text string length + DW WR_YESIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 50 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_MOD ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST17 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST17_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; paritition fixed disk +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB18 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 15 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST18_W ;AN000;line width + DW SCB_LIST18_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST18_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_NUM ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST18 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST18_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; paritition fixed disk 2 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB19 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 15 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST19_W ;AN000;line width + DW SCB_LIST19_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST19_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_NUM ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST19 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST19_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; FORMAT FIXED DISK DRIVE +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB20 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 9 ;AC000;upper left row JW + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST20_W ;AN000;line width + DW SCB_LIST20_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST20_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_NUM ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST20 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST20_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; HELP SCROLL INFORMATION +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB21 DW scb_uc+SCB_LL ;AN000;option word one + DW SCB_ROTN+scb_dyn+scb_uind;AN000;option word two + DW SCB_RELSCR+SCB_RELUIND ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW 100 ;AN000;error beep frequency + DW 4 ;AN000;upper left row + DW 3 ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW 53 ;AN000;line width + DW 7 ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW 55 ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 0 ;AN000;num list txt col offset in strg + DB 0 ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW WR_REHLPKEYSLEN ;AN000;return/leave string length + DW WR_REHLPKEYS ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW WR_PUKEYSLEN ;AN000;page-up string length + DW WR_PUKEYS ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW WR_PDKEYSLEN ;AN000;page-down string length + DW WR_PDKEYS ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 50 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 51 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW 0 ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 3;AN000;BLACK_WHITE ;logical color index number + DW 0 ;AN000;number color index table entries + DW 0 ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW 0 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW 0 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW 53 ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 0 ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; HELP TITLE SCROLL INFORMATION +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB22 DW scb_uc+SCB_LL ;AN000;option word one + DW SCB_ROTN+scb_dyn+scb_uind;AN000;option word two + DW SCB_RELSCR+SCB_RELUIND ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW 100 ;AN000;error beep frequency + DW 2 ;AN000;upper left row + DW 3 ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW 53 ;AN000;line width + DW 1 ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW 1 ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 0 ;AN000;num list txt col offset in strg + DB 0 ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW WR_PUKEYSLEN ;AN000;page-up string length + DW WR_PUKEYS ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW WR_PDKEYSLEN ;AN000;page-down string length + DW WR_PDKEYS ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 23 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 21 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW 0 ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 3;AN000;BLACK_WHITE ;logical color index number + DW 0 ;AN000;number color index table entries + DW 0 ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW 0 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW 0 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW 53 ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 0 ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SCR_ACC_CTY +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB23 DW SCB_FRBF+SCB_FRAL ;AN000;option word one + DW SCB_ROTN ;AN000;option word two + DW 0 ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 4 ;AN000;upper left row + DW 37 ;AN000;**********;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST23_W ;AN000;line width + DW 1 ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST23_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST23 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST23_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SCR_ACC_KYB +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB24 DW SCB_FRBF+SCB_FRAL ;AN000;option word one + DW SCB_ROTN ;AN000;option word two + DW 0 ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 5 ;AN000;upper left row + DW 37 ;AN000;**********;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST24_W ;AN000;line width + DW 1 ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST24_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST24 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST24_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SCR_ACC_PRT +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB25 DW SCB_FRBF+SCB_FRAL ;AN000;option word one + DW SCB_ROTN ;AN000;option word two + DW 0 ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 4 ;AN000;upper left row + DW 32 ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST11_W ;AN000;line width + DW 1 ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST11_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST11 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST11_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; DOS LOCATION SUPPORT ;AN000;JW +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB26 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 17 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST26_W ;AN000;line width + DW SCB_LIST26_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST26_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW WR_PUKEYSLEN ;AN000;page-up string length + DW WR_PUKEYS ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW WR_PDKEYSLEN ;AN000;page-down string length + DW WR_PDKEYS ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW 0 ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_NUM ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST26 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST26_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; select drive a: or c: ;AN111;JW +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB27 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 8 ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST27_W ;AN000;line width + DW SCB_LIST27_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST27_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW 0 ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_NUM ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST27 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST27_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; chose shell +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_SCB28 DW SCB_WRAP ;AN000;option word one + DW SCB_SKIP ;AN000;option word two + DW SCB_NUMS ;AN000;option word three + DW 0 ;AN068;SEH option word four + DW SND_FREQ ;AN000;error beep frequency + DW 11 ;AC079;SEH ;AN000;upper left row + DW LEFT_COL_SCROLL ;AN000;upper left column + DW 0 ;AN000;relative upper left row + DW 0 ;AN000;relative upper left column + DW SCB_LIST28_W ;AN000;line width + DW SCB_LIST28_N ;AN000;number of lines + DW 1 ;AN000;number of element on top + DW SCB_LIST28_N ;AN000;number of elements + DW 1 ;AN000;current element + DW 0 ;AN000;maximun number of cols to scroll + DW 0 ;AN000;display offset into opt strings + DW 1 ;AN000;num list txt col offset in strg + DB '.' ;AN000;numbered list separator + DW 0 ;AN000;select keystroke string length + DW 0 ;AN000;select keystroke string offset + DW 0 ;AN000;select keystroke string segment + DW 0 ;AN000;return/leave string length + DW 0 ;AN000;return/leave string offset + DW 0 ;AN000;return/leave string segment + DW 0 ;AN000;return/erase string length + DW 0 ;AN000;return/erase string offset + DW 0 ;AN000;return/erase string segment + DW WR_UAKEYSLEN ;AN000;up arrow string length + DW WR_UAKEYS ;AN000;up arrow string offset + DW 0 ;AN000;up arrow string segment + DW WR_DAKEYSLEN ;AN000;down arrow string length + DW WR_DAKEYS ;AN000;down arrow string offset + DW 0 ;AN000;down arrow string segment + DW 0 ;AN000;left arrow string length + DW 0 ;AN000;left arrow string offset + DW 0 ;AN000;left arrow string segment + DW 0 ;AN000;right arrow string length + DW 0 ;AN000;right arrow string offset + DW 0 ;AN000;right arrow string segment + DW 0 ;AN000;page-up string length + DW 0 ;AN000;page-up string offset + DW 0 ;AN000;page-up string segment + DW 0 ;AN000;page-down string length + DW 0 ;AN000;page-down string offset + DW 0 ;AN000;page-down string segment + DW WR_PIINDLEN ;AN000;pointer indicator strg length + DW WR_PIIND ;AN000;pointer indicator string offset + DW 0 ;AN000;pointer indicator string segment + DW 1 ;AN000;pointer ind txt col off into strg + DW WR_AIINDLEN ;AN000;active indicator strg length + DW WR_AIIND ;AN000;active indicator string offset + DW 0 ;AN000;active indicator string segment + DW 1 ;AN000;active ind txt col off into stg + DW WR_CIINDLEN ;AN000;check mark text string length + DW WR_CIIND ;AN000;check mark text string offset + DW 0 ;AN000;check mark text string segment + DW 1 ;AN000;check mark offset into opt strg + DW WR_UIINDLEN ;AN000;up indicator string length + DW WR_UIIND ;AN000;up indicator string offset + DW 0 ;AN000;up indicator string segment + DW 2 ;AN000;up indicator row location + DW 1 ;AN000;up indicator column location + DW WR_DIINDLEN ;AN000;down indicator string length + DW WR_DIIND ;AN000;down indicator string offset + DW 0 ;AN000;down indicator string segment + DW 2 ;AN000;down indicator row location + DW 2 ;AN000;down indicator column locaiton + DW 0 ;AN000;left indicator string length + DW 0 ;AN000;left indicator string offset + DW 0 ;AN000;left indicator string segment + DW 0 ;AN000;left indicator row location + DW 0 ;AN000;left indicator column location + DW 0 ;AN000;right indicator string length + DW 0 ;AN000;right indicator string offset + DW 0 ;AN000;right indicator string segment + DW 0 ;AN000;right indicator row location + DW 0 ;AN000;right indicator column locaiton + DW WR_CIS ;AN000;normal color array offset + DW 0 ;AN000;normal color array segment + DW 1 ;AN000;logical color index number + DW 16 ;AN000;number color index table entries + DW WR_CIS ;AN000;offset addr of color index table + DW 0 ;AN000;segment addr of color index tabl + DW WR_INDEX1 ;AN000;index array offset + DW 0 ;AN000;index array segment + DW WR_SELECT_NUM ;AN000;element selection array offset + DW 0 ;AN000;element selection array segment + DW SSC_PTSB ;AN000;option array option word + DW SCB_LIST28 ;AN000;option array pointer offset + DW 0 ;AN000;option array pointer segment + DW SCB_LIST28_W ;AN000;option array string length + DW 0 ;AN000;option array string segment + DB 'A' ;AN000;option array string term char + DW 0 ;AN000;keystroke + DW 0 ;AN000;log vid buf offset override + DW 0 ;AN000;log vid buf segment override + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;general purpose format hook opt + DW 0 ;AN000;length of translation table + DW 0 ;AN000;offset of translation table + DW 0 ;AN000;segment of translation table + DW 0 ;AN000;monocasing table offset + DW 0 ;AN000;monocasing table segment + DW 0 ;AN000;dbcs table length + DW 0 ;AN000;dbcs table offset + DW 0 ;AN000;dbcs table segment + DW 0 ;AN068;SEH offset of font descriptor block + DW 0 ;AN068;SEH segment of font descriptor block + DB 236 DUP(0) ;AN024; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Keystroke Strings and length calculations +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WR_REHLPKEYS DB 0,F1,0,F9,ESCAPE ;AN000;return/erase keystroke string +WR_REHLPKEYSLEN EQU ($-WR_REHLPKEYS) ;AN000; + +WR_UAKEYS DB 0,UPARROW ;AN000;up arrow keystroke string +WR_UAKEYSLEN EQU ($-WR_UAKEYS) ;AN000; + +WR_DAKEYS DB 0,DNARROW ;AN000;down arrow keystroke string +WR_DAKEYSLEN EQU ($-WR_DAKEYS) ;AN000; + + +WR_PUKEYS DB 0,PGUP ;AN000;define page up key buffer +WR_PUKEYSLEN EQU ($-WR_PUKEYS) ;AN000; + +WR_PDKEYS DB 0,PGDN ;AN000;define page down key buffer +WR_PDKEYSLEN EQU ($-WR_PDKEYS) ;AN000; + +WR_UIIND DB 24 ;AN000;define up indicator buffer +WR_UIINDLEN EQU ($-WR_UIIND) ;AN000; + +WR_DIIND DB 25 ;AN000;define down indicator buffer +WR_DIINDLEN EQU ($-WR_DIIND) ;AN000; + +WR_PIIND DB '�' ;AN000;selection pointer indicator buff +WR_PIINDLEN EQU ($-WR_PIIND) ;AN000; + +WR_AIIND DB '<' ;AN000;active string indicator buffer +WR_AIINDLEN EQU ($-WR_AIIND) ;AN000; + +WR_CIIND DB '>' ;AN000;check mark string indicator buff +WR_CIINDLEN EQU ($-WR_CIIND) ;AN000; + +; +; Selection array structure +; +WR_SELECT_NUM DW SCB_ACTIVEON ;AN000; + DW SCB_SKIPON ;AN000; + DW SCB_ACTIVEON ;AN000; + DW SCB_SKIPON ;AN000; + DW SCB_ACTIVEON ;AN000; + DW SCB_SKIPON ;AN000; + DW SCB_ACTIVEON ;AN000; + DW SCB_SKIPON ;AN000; + DW SCB_ACTIVEON ;AN000; + DW SCB_SKIPON ;AN000; + DW SCB_ACTIVEON ;AN000; + +WR_SELECT DW SCB_ACTIVEON ;AN000; + DW SCB_ACTIVEON ;AN000; + DW SCB_ACTIVEON ;AN000; + DW SCB_ACTIVEON ;AN000; + DW SCB_ACTIVEON ;AN000; + DW SCB_ACTIVEON ;AN000; + DW SCB_ACTIVEON ;AN000; + DW SCB_ACTIVEON ;AN000; + DW SCB_ACTIVEON ;AN000; + DW SCB_ACTIVEON ;AN000; + DW SCB_ACTIVEON ;AN000; + DW SCB_ACTIVEON ;AN000; +WR_SELECT_MOD DW 10 DUP (0) ;AN000; + + INCLUDE PANEL.INF ;AN000; + +CODE ENDS ;AN000; + END ;AN000; + \ No newline at end of file diff --git a/v4.0/src/SELECT/SEL-PAN.ASM b/v4.0/src/SELECT/SEL-PAN.ASM new file mode 100644 index 0000000..7eef8fe --- /dev/null +++ b/v4.0/src/SELECT/SEL-PAN.ASM @@ -0,0 +1,48 @@ + + +PAGE 55,132 ;AN000; +NAME SELPAN ;AN000; +TITLE SELPAN - Table of entry points of panels, scroll fields, color ;AN000; +SUBTTL sel-pan.asm ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SELPAN .ASM +; +; +; Copyright 1988 Microsoft +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + .alpha ; arrange segments alphabetically + + EXTRN PCB_VECTOR:WORD ;AN000; + EXTRN NUM_PCB:ABS ;AN000; + EXTRN WR_SCBVEC:WORD ;AN000; + EXTRN NUM_SCB:ABS ;AN000; + EXTRN WR_CIS:WORD ;AN000; + EXTRN L_WR_CIS:ABS ;AN000; + EXTRN WR_CIS2:WORD ;AN000; + EXTRN L_WR_CIS2:ABS ;AN000; + ; +EXT_FILE STRUC ;AN000; +PCBS DW 0 ;AN000; +NPCBS DW 0 ;AN000; +SCBS DW 0 ;AN000; +NSCBS DW 0 ;AN000; +COLTBL DW 0 ;AN000; +NCOLTBL DW 0 ;AN000; +MONTBL DW 0 ;AN000; +NMONTBL DW 0 ;AN000; +EXT_FILE ENDS ;AN000; + ; +CODE SEGMENT PARA PUBLIC 'CODE' ;AN000; + DW PCB_VECTOR ;AN000; + DW NUM_PCB ;AN000; + DW WR_SCBVEC ;AN000; + DW NUM_SCB ;AN000; + DW WR_CIS2 ;AN000; + DW L_WR_CIS2 ;AN000; + DW WR_CIS2 ;AN000; + DW L_WR_CIS2 ;AN000; +CODE ENDS ;AN000; + END ;AN000; diff --git a/v4.0/src/SELECT/SEL-PAN.INC b/v4.0/src/SELECT/SEL-PAN.INC new file mode 100644 index 0000000..684993b --- /dev/null +++ b/v4.0/src/SELECT/SEL-PAN.INC @@ -0,0 +1,307 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; SEL-PAN.INC +; +; +FALSE = 0 + +; +; Dialog Equates +; +; These values will eventually be defined by the dialog. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.XLIST ;AN000; +LEFT_COL EQU 8 ;AN000; +SCR_CONT EQU 1 ;AN000;contextual helps +SCR_INDX EQU 2 ;AN000;indexed helps +SCR_MAIN EQU 3 ;AN000;main menu +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Help ID equates +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +HCB_KEYS EQU 1 ;AN000;help on keys text +HCB_HELP EQU 2 ;AN000;help on help text +HCB_MAIN EQU 3 ;AN000;main menu help text +HCB_SAMP EQU 4 ;AN000;sample application help text +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Color index record equates +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +WHITE_BLUE EQU 1 ;AN000; +BLACK_WHITE EQU 4 ;AN000; +WHITE_RED EQU 5 ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Color ID equates +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CLR_CLR EQU 1 ;AN000;shipped text mode color index +CLR_MON EQU 2 ;AN000;shipped monochrome color index +CLR_USE EQU 3 ;AN000;user color index +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Sound equates +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SND_DURA EQU 10000 ;AN000;duration of error beep +SND_FREQ EQU 440 ;AN000;frequency of error beep +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Size equates +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +MAX_MEMPAR EQU 4000 ;AN000;size of buffer in 16 byte paraghp +MAX_RETKSZ EQU 512 ;AN000;max # of bytes in return key buff +MAX_HELPSZ EQU 5000 ;AN000;max # of bytes in help text buff +MAX_PANNUM EQU 98 ;AN000;max num of panels possible in mem +MAX_SCRNUM EQU 28 ;AN000;max num of scroll possible in mem +MAX_CHDQUE EQU 5 ;AN000;max # of child queues to save +MAX_PANQUE EQU 4 ;AN000;max # of panel queues to save +MAX_NUMCHD EQU 11 ;AN000;max # of parent panels queued +MAX_NUMPAN EQU 10 ;AN000;max # of child panels queued +MAX_CLRECD EQU 12 ;AN000;num of bytes per PCPANEL color rc +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Keystroke equates +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +KEY_HELP EQU 3B00H ;AN000;F1=Help +KEY_SWIT EQU 3C00H ;AN000;F2=Switch +KEY_INDX EQU 3F00H ;AN000;F5=Index +KEY_KEYS EQU 4000H ;AN000;F7=Keys +KEY_SELT EQU 000DH ;AN000;Enter +KEY_QUIT EQU 001BH ;AN000;Esc=Quit +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANWR equates +; +; +; PCPANWR option bit equates (PWR_OPT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PWR_WRITEONE EQU 0000000000000001B ;AN000;write pan specified by PWR_ID +PWR_WRITEALL EQU 0000000000000010B ;AN000;write all pans to specified file +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANWR error bit equates (PWR_ERROR) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PWR_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small +PWR_NOPANELS EQU 0000000000000010B ;AN000;file does not contain panels +PWR_NOTCASFILE EQU 0000000000000100B ;AN000;CAS file obj list does not exist +PWR_PANELSFULL EQU 0000000000001000B ;AN000;panel vector is full +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANEL equates +; +; +; PCPANEL option bit equates (PM_OPT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PM_RF EQU 0000000000000001B ;AN000;do not refresh display +PM_SRF EQU 0000000000000010B ;AN000;selective PVB refresh from LVB +PM_BK EQU 0000000000000100B ;AN000;panel break function active +PM_CL EQU 0000000000001000B ;AN000;initialize LVB to base char/attr +PM_DOA EQU 0000000000010000B ;AN000;display childs in active parent +PM_DOV EQU 0000000000100000B ;AN000;use child row, col, color overrid +PM_DOQ EQU 0000000001000000B ;AN000;disp all child in parent chd tabl +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANEL error equates for (PM_ERROR) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PM_PANPDQ EQU 0000000000000001B ;AN000;invalid parent PDQ or start num +PM_PCBVEC EQU 0000000000000010B ;AN000;invalid PCB vector entry found +PM_UNKNPANS EQU 0000000000000100B ;AN000;unknown panel source found +PM_CHDTAB EQU 0000000000001000B ;AN000;set error with child table +PM_COLORX EQU 0000000000010000B ;AN000;panel's color index out of range +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANEL Parent and Child Display Queue option bit equates (PT_OPT) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PT_BK EQU 0000000000000001B ;AN000;panel break on +PT_SRF EQU 0000000000000010B ;AN000;selective refresh of panel to PVB +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANEL Panel Control Block option equates for individual panels (PCB_OPT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PCB_CRE EQU 0000000000000001B ;AN000;Create panel from scratch +PCB_CMP EQU 0000000000000010B ;AN000;Use compress text form in memory +PCB_EXP EQU 0000000000000100B ;AN000;Use expanded text form in memory +PCB_MXP EQU 0000000000001000B ;AN000;Use mixed text/attr form in memoy +PCB_LB EQU 0000000000010000B ;AN000;Use logical border +PCB_ASZ EQU 0000000000100000B ;AN000;Allow sizing of panel +PCB_ASC EQU 0000000001000000B ;AN000;Allow scrolling of panel +PCB_LAB EQU 0000000010000000B ;AN000;Use the defined panel label +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCPANEL Child information table option equates (CHILD_OPT) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CHD_ABS EQU 0000000000000001B ;AN000;calc child pan pos from scr corne +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCCLRWR equates +; +; PCCLRWR error bit equates (CWR_ERROR) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CWR_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small +CWR_NOCOLORS EQU 0000000000000010B ;AN000;file does not contain colors +CWR_NOTCASFILE EQU 0000000000000100B ;AN000;file object list does not exist +CWR_COLORSFULL EQU 0000000000001000B ;AN000;color vector is full +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSCRWR equates +; +; +; PCSCRWR option bit equates (SWR_OPT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SWR_WRITEONE EQU 0000000000000001B ;AN000;write pan specified by SWR_ID +SWR_WRITEALL EQU 0000000000000010B ;AN000;write all pans to specified file +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSCRWR error bit equates (SWR_ERROR) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SWR_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small +SWR_NOFIELDS EQU 0000000000000010B ;AN000;file does not contain fields +SWR_NOTCASFILE EQU 0000000000000100B ;AN000;file object list does not exist +SWR_FIELDSFULL EQU 0000000000001000B ;AN000;field vector is full +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSTRST equates +; +; PCSTRST equates +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SSC_TBSL EQU 0000000000000001B ;AN000;use two byte string length +SSC_PTSB EQU 0000000000000010B ;AN000;pointer points to string buffer +SSC_VTSAO EQU 0000000000000100B ;AN000;vector table is string addr only +SSC_VTASO EQU 0000000000001000B ;AN000;vector table addr is seg:offset +SSC_SLSB EQU 0000000000010000B ;AN000;string length is in string buffer +SSC_SBTC EQU 0000000000100000B ;AN000;string buffer has term. character +SSC_VTE EQU 1 ;AN000;error in vector table +SSC_SBE EQU 2 ;AN000;error in sting buffer +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSLCTP equates +; +; PCSLCTP Option word one (SCB_OPT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SCB_UC EQU 0000000000000001B ;AN000;upper case option +SCB_WRAP EQU 0000000000000010B ;AN000;wrap option +SCB_FRBF EQU 0000000000000100B ;AN000;force return before first option +SCB_FRAL EQU 0000000000001000B ;AN000;force return after last option +SCB_LL EQU 0000000000010000B ;AN000;lock line +SCB_UKS EQU 0000000000100000B ;AN000;use keystroke +SCB_RD EQU 0000000001000000B ;AN000;return after display option +SCB_RUK EQU 0000000010000000B ;AN000;return unused keys option +SCB_UI EQU 0000000100000000B ;AN000;use index option +SCB_TRN EQU 0000001000000000B ;AN000;translate character +SCB_MON EQU 0000010000000000B ;AN000;convert to upper case monocasing +SCB_DBCS EQU 0000100000000000B ;AN000;check for double byte chars +SCB_TBL EQU 0001000000000000B ;AN000;use given DBCS range table +SCB_DCHECK EQU 0010000000000000B ;AN000;display check mark characters +SCB_DACTIVE EQU 0100000000000000B ;AN000;display active string indicators +SCB_DPOINT EQU 1000000000000000B ;AN000;display selection pointer string +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSLCTP Option word two (SCB_OPT2) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SCB_CS EQU 0000000000000001B ;AN000;clear screen on entry option +SCB_ROTN EQU 0000000000000010B ;AN000;reset option to normal on return +SCB_UET EQU 0000000000000100B ;AN000;use existing text option +SCB_CFO EQU 0000000000001000B ;AN000;cursor follows option +SCB_LCOX EQU 0000000000010000B ;AN000;leave cursor on exit +SCB_IPAGE EQU 0000000000100000B ;AN000;instant paging +SCB_PM1 EQU 0000000001000000B ;AN000;paging is minus one line +SCB_UIND EQU 0000000010000000B ;AN000;display up, dn, lf, rg indicators +SCB_UNCA EQU 0000000100000000B ;AN000;use normal color array +SCB_DYN EQU 0000001000000000B ;AN000;option array is dynamicly created +SCB_LANDR EQU 0000010000000000B ;AN000;left and right scrolling active +SCB_CPHY EQU 0000100000000000B ;AN000;color array is physical attributs +SCB_NUML EQU 0001000000000000B ;AN000;generate num list in opt strings +SCB_SKIP EQU 0010000000000000B ;AN000;skip inactive option strings +SCB_SHIGH EQU 0100000000000000B ;AN000;highlight the selected opt strgs +SCB_AHIGH EQU 1000000000000000B ;AN000;highlight the active option strgs +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSLCTP Option word three (SCB_OPT3) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SCB_SELACT EQU 0000000000000001B ;AN000;allow selection of inactive elem +SCB_SELEXC EQU 0000000000000010B ;AN000;exclusive selection of one elemet +SCB_EXCSING EQU 0000000000000100B ;AN000;one element is always selected +SCB_NUMUIND EQU 0000000000001000B ;AN000;display line number count +SCB_CHIGH EQU 0000000000010000B ;AN000;hilight cursored and selected stg +SCB_NUMS EQU 0000000000100000B ;AN000;auto 0-9 number selection +SCB_FINDE EQU 0000000001000000B ;AN000;auto character search +SCB_RELUIND EQU 0000000010000000B ;AN000;rel row/col used w/dirct indicato +SCB_RELSCR EQU 0000000100000000B ;AN000;rel row/col used w/scroll field +SCB_LVBOVR EQU 0000001000000000B ;AN000;use video buffer seg:off override +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCSLCTP Select Array Option (SCB_SELSEG:SCB_SELOFF) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SCB_SELECTON EQU 0000000000000001B ;AN000;element selected +SCB_ACTIVEON EQU 0000000000000010B ;AN000;element active +SCB_SKIPON EQU 0000000000000100B ;AN000;element should be skipped +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCHLPWR equates +; +; PCHLPWR option bit equates (HWR_OPT1) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +HWR_REPLACE EQU 0000000000000001B ;AN000;Replace existing help text/topic +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; PCHLPWR error bit equates (HWR_ERROR) +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +HWR_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small +HWR_HELPUSED EQU 0000000000000010B ;AN000;help ID already in use +HWR_INVALDID EQU 0000000000000100B ;AN000;help ID is out of range +HWR_NOHLPOBJ EQU 0000000000001000B ;AN000;no help object +HWR_NOTCASFILE EQU 0000000000010000B ;AN000;not a valid cas file +HWR_HELPSFULL EQU 0000000000100000B ;AN000;help vector is full +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Internal equates +; +; internal equates +; +;;;;;;;;;;;;;;;;;;;;;;;;; +UPARROW EQU 72 ;AN000;up arrow +DNARROW EQU 80 ;AN000;down arrow +LFARROW EQU 75 ;AN000;left arrow +RTARROW EQU 77 ;AN000;right arrow +PGUP EQU 73 ;AN000; +PGDN EQU 81 ;AN000; +ESCAPE EQU 27 ;AN000; +ENTER EQU 13 ;AN000; +SPACE EQU 32 ;AN000; +F1 EQU 59 ;AN000; +F2 EQU 60 ;AN000; +F3 EQU 61 ;AN000; +F4 EQU 62 ;AN000; +F5 EQU 63 ;AN000; +F6 EQU 64 ;AN000; +F7 EQU 65 ;AN000; +F8 EQU 66 ;AN000; +F9 EQU 67 ;AN000; +F10 EQU 68 ;AN000; +.LIST ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;; + \ No newline at end of file diff --git a/v4.0/src/SELECT/SEL-PAN.LNK b/v4.0/src/SELECT/SEL-PAN.LNK new file mode 100644 index 0000000..2864fee --- /dev/null +++ b/v4.0/src/SELECT/SEL-PAN.LNK @@ -0,0 +1,5 @@ +SEL-PAN+ + PANELS+ + COLORS+ + SCROLL,,, + CASSFAR.LIB; diff --git a/v4.0/src/SELECT/SELCHILD.ASM b/v4.0/src/SELECT/SELCHILD.ASM new file mode 100644 index 0000000..139fcf3 --- /dev/null +++ b/v4.0/src/SELECT/SELCHILD.ASM @@ -0,0 +1,62 @@ +PAGE 55,132 ;AN000; +NAME SELCHILD ;AN000; +TITLE SELCHILD - CHILD processing for SELECT.EXE;AN000; +SUBTTL selchild.asm ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; HANDLE_CHILDREN +; +; Entry: +; +; +; +; Exit: +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + EXTRN QM_ID:WORD ;AN000; + EXTRN QM_OPT1:WORD ;AN000; + EXTRN QM_ACTIVEPAN:WORD ;AN000; + ; +SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine + ASSUME CS:SELECT ;AN000; + ; + EXTRN GET_PCB:NEAR ;AN000; + EXTRN PCDISPQ_CALL:NEAR ;AN000; + ; + INCLUDE PCEQUATE.INC ;AN000; + INCLUDE CASTRUC.INC ;AN000; + INCLUDE MACROS.INC ;AN000; + ; + PUBLIC HANDLE_CHILDREN ;AN000; +HANDLE_CHILDREN PROC ;AN000; + PUSHH ;AN000; + MOV QM_OPT1,QM_PUSHCHD ;AN000; push child panels + ; + MOV BX,QM_ACTIVEPAN ;AN000; + CALL GET_PCB ;AN000; get panel control block + ; for active parent panel + MOV CX,ES:[DI]+PCB_CHILDNUM ;AN000; + OR CX,CX ;AN000; + JZ HC_1 ;AN000; + ; + PUSH ES:[DI]+PCB_CHILDSEG ;AN000; get address of first child panel + PUSH ES:[DI]+PCB_CHILDOFF ;AN000; + POP DI ;AN000; + POP ES ;AN000; + ; +HC_0: MOV AX,ES:[DI]+CHD_PCB ;AN000; + MOV QM_ID,AX ;AN000; + PUSHH ;AN000; + CALL PCDISPQ_CALL ;AN000; push next child on the stack + POPP ;AN000; + ; + ADD DI,TYPE CHD_PB ;AN000; get next child control block + LOOP HC_0 ;AN000; + ; +HC_1: POPP ;AN000; + RET ;AN000; +HANDLE_CHILDREN ENDP ;AN000; +SELECT ENDS ;AN000; + END ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + diff --git a/v4.0/src/SELECT/SELECT.INC b/v4.0/src/SELECT/SELECT.INC new file mode 100644 index 0000000..855278b --- /dev/null +++ b/v4.0/src/SELECT/SELECT.INC @@ -0,0 +1,54 @@ +;-----------------------------------------------------------------------------+ +; SELECT.INC : +; : +; : +; Dialog Equates : +; : +; These values will eventually be defined by the dialog manager : +; : +;-----------------------------------------------------------------------------+ +; +; Help ID equates +; +HCB_KEYS EQU 1 ;AN000;help on keys text +HCB_HELP EQU 2 ;AN000;help on help text +; +; Color ID equates +; +CLR_CLR EQU 1 ;AN000;shipped text mode color index +CLR_MON EQU 2 ;AN000;shipped monochrome color index +; +; Sound equates +; +SND_DURA EQU 40000 ;AN000;duration of error beep +SND_FREQ EQU 440 ;AN000;frequency of error beep +; +; Size equates +; +MAX_MEMPAR EQU 0F7FH ;AC091;SEH reduce area to 62K to help 256K mem problem;AN000;size of buffer in 16 byte paraghp (64KB) +MAX_MEMLVB EQU 012BH ;AN000;size of buffer in 16 byte paraghp (4240 BYTES) +MAX_RETKSZ EQU 50 ;AN000;max # of bytes in return key buff +MAX_HELPSZ EQU 2000H ;AN000;max # of bytes in help text buff (8KB) +MAX_PANNUM EQU 98 ;AC111;JW ;max num of panels possible in mem +MAX_SCRNUM EQU 28 ;AC111;JW ;max num of scroll possible in mem +MAX_CHDQUE EQU 2 ;AN000;max # of child queues to save +MAX_PANQUE EQU 5 ;AN000;max # of panel queues to save +MAX_NUMCHD EQU 5 ;AN000;max # of parent panels queued +MAX_NUMPAN EQU 5 ;AN000;max # of child panels queued +MAX_CLRECD EQU 12 ;AN000;num of bytes per PCPANEL color rc +; +; Keystroke equates +; +KEY_HELP EQU 3B00H ;AN000;F1=Help +KEY_SWIT EQU 3C00H ;AN000;F2=Switch +KEY_INDX EQU 3F00H ;AN000;F5=Index +KEY_KEYS EQU 4300H ;AN000;F9=Keys +KEY_SELT EQU 000DH ;AN000;Enter +KEY_QUIT EQU 001BH ;AN000;Esc=Quit +; +; Miscellaneous equates +; +VECSEGLEN EQU 2 ;AN000;vector segment length +VECOFFLEN EQU 2 ;AN000;vector offset length + + INCLUDE PCEQUATE.INC ;AN000; diff --git a/v4.0/src/SELECT/SELECT.LNK b/v4.0/src/SELECT/SELECT.LNK new file mode 100644 index 0000000..1736d28 --- /dev/null +++ b/v4.0/src/SELECT/SELECT.LNK @@ -0,0 +1,36 @@ + SELECT0+ + SELECT1+ + SELECT2+ + SELECT2A+ + SELECT3+ + SELECT4+ + SELECT5+ + SELECT5A+ + SELECT6+ + SELECT7+ + SELECT8+ + SELECT9+ + ROUTINE2+ + GEN_COMS+ + ROUTINES+ + INTVEC+ + CKDISP+ + SCN_PARM+ + PRN_DEF+ + VAR+ + CASERVIC+ + INPUT+ + INITMEM+ + MPARSE+ + MOD_COPY+ + S_DISPLY+ + BRIDGE+ + ASM2C+ + GET_STAT+ + GLOBAL+ + INT13+ + BOOTREC, +SELECT.EXE /EXEPACK +SELECT/MAP +SERVICES.LIB+ +CASSFAR.LIB; diff --git a/v4.0/src/SELECT/SELECT.MAK b/v4.0/src/SELECT/SELECT.MAK new file mode 100644 index 0000000..84e9cd5 --- /dev/null +++ b/v4.0/src/SELECT/SELECT.MAK @@ -0,0 +1,287 @@ +COM=..\COMMON +MSG=..\MESSAGES +country=usa + +# +# Make file for SELECT.EXE, SELECT.DAT, SELECT.COM, SELECT.HLP +# + +# +# Build CASSFAR.LIB +# + +DUMMY.OUT: SELECT.MAK + CD ..\CASSFAR + MAKE CASSFAR.MAK + CD ..\SELECT + +# +# Make SELECT.EXE +# + +SELECT.CTL: SELECT.SKL $(MSG)\$(COUNTRY).MSG + MSGBUILD SELECT.SKL + + +SELECT0.OBJ: SELECT0.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \ + PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \ + MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \ + MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \ + SELECT.CTL SELECT.MAK + ASM87 SELECT0 -b1 + +SELECT1.OBJ: SELECT1.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \ + PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \ + MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \ + MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \ + SELECT.MAK + ASM87 SELECT1 -b1 + +SELECT2.OBJ: SELECT2.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \ + PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \ + MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \ + MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \ + SELECT.MAK + ASM87 SELECT2 -b1 + +SELECT2A.OBJ: SELECT2A.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \ + PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \ + MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \ + MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \ + SELECT.MAK + ASM87 SELECT2A -b1 + +SELECT3.OBJ: SELECT3.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \ + PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \ + MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \ + MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \ + SELECT.MAK + ASM87 SELECT3 -b1 + +SELECT4.OBJ: SELECT4.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \ + PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \ + MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \ + MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \ + SELECT.MAK + ASM87 SELECT4 -b1 + +SELECT5.OBJ: SELECT5.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \ + PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \ + MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \ + MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \ + SELECT.MAK + ASM87 SELECT5 -b1 + +SELECT5A.OBJ: SELECT5A.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \ + PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \ + MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \ + MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \ + SELECT.MAK + ASM87 SELECT5A -b1 + +SELECT6.OBJ: SELECT6.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \ + PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \ + MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \ + MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \ + SELECT.MAK + ASM87 SELECT6 -b1 + +SELECT7.OBJ: SELECT7.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \ + PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \ + MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \ + MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \ + SELECT.MAK + ASM87 SELECT7 -b1 + +SELECT8.OBJ: SELECT8.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \ + PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \ + MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \ + MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \ + SELECT.MAK + ASM87 SELECT8 -b1 + +SELECT9.OBJ: SELECT9.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \ + PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \ + MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \ + MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \ + SELECT.MAK + ASM87 SELECT9 -b1 + +GEN_COMS.OBJ: GEN_COMS.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \ + PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \ + MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \ + MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \ + SELECT.MAK + ASM87 GEN_COMS -b1 + +MPARSE.OBJ: MPARSE.ASM $(COM)\PARSE.ASM SELECT.MAK + ASM87 MPARSE -b1 + +INITMEM.OBJ: INITMEM.ASM $(COM)\STRUC.INC MACROS.INC MACROS2.INC MACROS3.INC \ + MACROS4.INC MACROS5.INC MACROS6.INC MACROS7.INC SELECT.MAK + ASM87 INITMEM -b1 + +INPUT.OBJ: INPUT.ASM PCEQUATE.INC SELECT.MAK + ASM87 INPUT -b1 + +ONEDRIVE.OBJ: ONEDRIVE.ASM SELECT.MAK + ASM87 ONEDRIVE -b1 + +ROUTINES.OBJ: ROUTINES.ASM $(COM)\STRUC.INC MAC_EQU.INC VARSTRUC.INC EXT.INC \ + MACROS.INC MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC \ + MACROS6.INC MACROS7.INC SELECT.MAK + ASM87 ROUTINES -b1 + +ROUTINE2.OBJ: ROUTINE2.ASM $(COM)\STRUC.INC MAC_EQU.INC EXT.INC VARSTRUC.INC \ + MACROS.INC MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC \ + MACROS6.INC MACROS7.INC SELECT.MAK + ASM87 ROUTINE2 -b1 + +VAR.OBJ: VAR.ASM $(COM)\SYSMSG.INC SEL_FILE.INC VARSTRUC.INC SELECT.MAK + ASM87 VAR -b1 + +PRN_DEF.OBJ: PRN_DEF.ASM $(COM)\STRUC.INC MACROS.INC MACROS2.INC MACROS3.INC \ + MACROS4.INC MACROS5.INC MACROS6.INC MACROS7.INC SELECT.MAK + ASM87 PRN_DEF -b1 + +SCN_PARM.OBJ: SCN_PARM.ASM $(COM)\STRUC.INC EXT.INC MACROS.INC MACROS2.INC \ + MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC MACROS7.INC \ + SELECT.MAK + ASM87 SCN_PARM -b1 + +S_DISPLY.OBJ: S_DISPLY.ASM $(COM)\STRUC.INC SELECT.MAK + ASM87 S_DISPLY -b1 + +MOD_COPY.OBJ: MOD_COPY.ASM $(COM)\STRUC.INC DOS.EQU XCOPY.EQU DOSFILES.INC \ + MACROS.INC MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC \ + MACROS6.INC MACROS7.INC SELECT.MAK + ASM87 MOD_COPY -b1 + +BRIDGE.OBJ: BRIDGE.ASM CASVAR.INC CASRN.INC SELECT.MAK + ASM87 BRIDGE -b1 + +CASERVIC.OBJ: CASERVIC.ASM CASVAR.INC CASRN.INC PAN-LIST.INC SELECT.INC \ + CASTRUC.INC DATA.MAC PANEL.MAC MACROS.INC SELECT.MAK + ASM87 CASERVIC -b1 + +CKDISP.OBJ: CKDISP.ASM $(COM)\STRUC.INC SELECT.MAK + ASM87 CKDISP -b1 + +INTVEC.OBJ: INTVEC.ASM $(COM)\STRUC.INC MAC_EQU.INC PAN-LIST.INC \ + PANEL.MAC MACROS.INC VARSTRUC.INC EXT.INC CASEXTRN.INC \ + SELECT.MAK + ASM87 INTVEC -b1 + +ASM2C.OBJ : ASM2C.ASM SELECT.MAK + ASM87 ASM2C -b1 + +GET_STAT.OBJ : GET_STAT.C SELECT.MAK + CCOMP GET_STAT.C /AS /Od /Zep /DLINT_ARGS + +INT13.OBJ : INT13.C SELECT.MAK + CCOMP INT13.C /AS /Od /Zep /DLINT_ARGS + +GLOBAL.OBJ : GLOBAL.C SELECT.MAK + CCOMP GLOBAL.C /AS /Od /Zep /DLINT_ARGS + +BOOTREC.OBJ : ..\Fdisk\BOOTREC.ASM ..\Fdisk\FDBOOT.INC SELECT.MAK + Copy ..\FDISK\BOOTREC.ASM BOOTREC.ASM + Copy ..\FDISK\FDBOOT.INC FDBOOT.INC + ASM87 BOOTREC -b1 + Del BOOTREC.asm + Del FDBOOT.INC + +SELQUIT.OBJ : SELQUIT.ASM PANEL.MAC PCEQUATE.INC PAN-LIST.INC CASTRUC.INC \ + EXT.INC $(COM)\STRUC.INC MACROS.INC MACROS2.INC MACROS3.INC \ + MACROS4.INC MACROS5.INC MACROS6.INC MACROS7.INC SELECT.MAK + ASM87 SELQUIT -b1 + +SELCHILD.OBJ : SELCHILD.ASM PCEQUATE.INC CASTRUC.INC MACROS.INC MACROS2.INC \ + MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC MACROS7.INC \ + SELECT.MAK + ASM87 SELCHILD -b1 + +SERVICES.OBJ : SERVICES.ASM PCEQUATE.INC CASTRUC.INC CASVAR.INC MACROS.INC \ + MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \ + MACROS7.INC SELECT.MAK + ASM87 SERVICES -b1 + +GET_HELP.OBJ : GET_HELP.ASM SELECT.MAK + ASM87 GET_HELP -b1 + +SELSERV.OBJ : SELSERV.ASM SELECT.MAK + ASM87 SELSERV -b1 + +SERVICES.LIB : SELQUIT.OBJ SELCHILD.OBJ SERVICES.OBJ GET_HELP.OBJ SELSERV.OBJ \ + SELECT.MAK + LIB SERVICES.LIB -+ SELQUIT; + LIB SERVICES.LIB -+ SELCHILD; + LIB SERVICES.LIB -+ SERVICES; + LIB SERVICES.LIB -+ GET_HELP; + LIB SERVICES.LIB -+ SELSERV; + +SELECT.EXE: SELECT0.OBJ SELECT1.OBJ SELECT2.OBJ SELECT2A.OBJ SELECT3.OBJ \ + SELECT4.OBJ SELECT5.OBJ SELECT6.OBJ SELECT7.OBJ SELECT8.OBJ SELECT9.OBJ \ + ROUTINE2.OBJ GEN_COMS.OBJ ROUTINES.OBJ INTVEC.OBJ ONEDRIVE.OBJ \ + CKDISP.OBJ SCN_PARM.OBJ PRN_DEF.OBJ VAR.OBJ CASERVIC.OBJ INPUT.OBJ \ + INITMEM.OBJ MPARSE.OBJ MOD_COPY.OBJ S_DISPLY.OBJ BRIDGE.OBJ \ + ASM2C.OBJ GET_STAT.OBJ GLOBAL.OBJ INT13.OBJ BOOTREC.OBJ \ + SERVICES.LIB CASSTMP.LIB SLIBFP.LIB $(COM)\SETVER.BAT + LINK @SELECT.ARF + TAG SELECT.EXE + +# +# Make SELECT.COM +# + +SSTUB.OBJ: SSTUB.ASM $(COM)\SYSMSG.INC SELECT.CTL SELECT.MAK + ASM87 SSTUB -b1 + +SELECT.COM: SSTUB.OBJ + LINK SSTUB; + EXE2BIN SSTUB.EXE SELECT.COM + TAG SELECT.COM + +# +# Make SELECT.DAT +# + +DUMMY.OUT: SELECT.MAK + COPY $(COUNTRY).INF+,, PANEL.INF + +PANELS.OBJ: PANELS.ASM SEL-PAN.INC PAN-LIST.INC PANEL.INF SELECT.MAK + ASM87 PANELS -a-b1 + +COLORS.OBJ: COLORS.ASM SEL-PAN.INC SELECT.MAK + ASM87 COLORS -a-b1 + +SCROLL.OBJ: SCROLL.ASM SEL-PAN.INC PANEL.INF SELECT.MAK + ASM87 SCROLL -a-b1 + +SEL-PAN.OBJ: SEL-PAN.ASM CASVAR.INC SEL-PAN.INC SELECT.MAK + ASM87 SEL-PAN -a-b1 + +SEL-PAN.EXE: PANELS.OBJ COLORS.OBJ SCROLL.OBJ SEL-PAN.OBJ + LINK @PANELS.ARF + ERASE SELECT.DAT + SEL-PAN + +# +# Make ASC2HLP.EXE +# + +DUMMY.OUT: SELECT.MAK + CD ..\SHELLHLP + MAKE SHELLHLP.MAK + CD ..\SELECT +# +# Make SELECT.HLP +# + +SELECT.HLP: $(COUNTRY).TXT SELECT.MAK + ERASE SELECT.HLP + chmode +r usa.txt + ..\SHELLHLP\ASC2HLP $(COUNTRY).TXT SELECT.HLP + chmode +r usa.txt + + \ No newline at end of file diff --git a/v4.0/src/SELECT/SELECT.PRT b/v4.0/src/SELECT/SELECT.PRT new file mode 100644 index 0000000..de646a2 --- /dev/null +++ b/v4.0/src/SELECT/SELECT.PRT @@ -0,0 +1,75 @@ +22 +P IBM 5152 Graphics Printer Model 2 +GP GRAPHICS + +P IBM 4201 Proprinter +CDP 4201,437 +CPP 4201.CPI +GP GRAPHICS + +P IBM 4201 Proprinter II +CDP 4201,437 +CPP 4201.CPI +GP GRAPHICS + +P IBM 4202 Proprinter XL +CDP 4201,437 +CPP 4201.CPI +GP GRAPHICS + +P IBM 4207 Proprinter X24 +CDP 4208,437 +CPP 4208.CPI +GP GRAPHICS + +P IBM 4208 Proprinter XL24 +CDP 4208,437 +CPP 4208.CPI +GP GRAPHICS + +S IBM 4201 Proprinter (Serial) +SP BAUD=96 PARITY=E DATA=8 STOP=1 +GP GRAPHICS + +S IBM 4202 Proprinter XL (Serial) +SP BAUD=96 PARITY=E DATA=8 STOP=1 +GP GRAPHICS + +S IBM 4207 Proprinter X24 (Serial) +SP BAUD=96 PARITY=E DATA=8 STOP=1 +GP GRAPHICS + +S IBM 4208 Proprinter XL24 (Serial) +SP BAUD=96 PARITY=E DATA=8 STOP=1 +GP GRAPHICS + +P IBM 5182 Color Printer +GP COLOR1 + +P IBM 3852 Ink Jet Printer + +P IBM 5201 Quietwriter I Printer + +P IBM 5201 Quietwriter II Printer +GP GRAPHICS + +P IBM 5202 Quietwriter III Printer +CDP 5202,437 +CPP 5202.CPI +GP GRAPHICS + +P IBM 5216 Wheelprinter + +P IBM 5223 Wheelprinter E Model 1 + +S IBM 3812 Pageprinter +SP BAUD=96 PARITY=E DATA=8 STOP=1 RETRY=P +GP GRAPHICS + +P Other IBM Parallel Printer + +S Other IBM Serial Printer + +P Other Parallel Printer + +S Other Serial Printer diff --git a/v4.0/src/SELECT/SELECT.SKL b/v4.0/src/SELECT/SELECT.SKL new file mode 100644 index 0000000..93b383f --- /dev/null +++ b/v4.0/src/SELECT/SELECT.SKL @@ -0,0 +1,43 @@ +:util select ;AN000; + ;AN000; +:class A ;AN000; +:use 1 COMMON1 ;AN000; +:use 2 common2 ;AN000; +:use 3 common3 ;AN000; +:def 4 BELL,'Invalid SELECT Boot Media',CR,LF,CR,LF ;AN000; + 'Insert INSTALL diskette in drive A, then retry' ;AN000; +:def 5 BELL,'Invalid Disk/Diskette Media',CR,LF,CR,LF ;AN000; + 'Insert INSTALL diskette in drive A, then retry' ;AN000; +:def 6 BELL,'Invalid Parameters on SELECT Command Line',CR,LF,CR,LF ;AN000; + 'Make sure the INSTALL diskette is in drive A,',CR,LF ;AN000; + 'then press Ctrl+Alt+Del to restart.' ;AN000; +:def 7 BELL,'Unable to install DOS. Program terminated',CR,LF ;AN000; +:def 8 'Loading SELECT. Please wait...' ;AN000; +:def 9 'You must restart your computer to continue.',CR,LF,CR,LF ;AN000; + 'Press Ctrl+Alt+Del to continue with DOS installation.' ;AN000; +:class B ;AN000; +:def 10 'Insert SELECT diskette in drive A',CR,LF,CR,LF ;AN000; + 'Press ENTER to continue installing DOS,',CR,LF ;AN000; + 'or press ESC to exit.',CR,LF ;AN000; +:def 11 BELL ;AN000; +:def 12 'Insert SELECT diskette in drive A',CR,LF,CR,LF ;AN000; + 'Press ENTER to continue.',CR,LF ;AN000; +:def 13 'Remove the SELECT COPY Diskette from drive A',CR,LF,CR,LF ;AC080;SEH ;AN000; + 'Insert the INSTALL Diskette in drive A',CR,LF,CR,LF,CR,LF ;AN000; + 'Press Enter to continue.',CR,LF ;AN000; +:def 14 'Remove the INSTALL Diskette from drive A',CR,LF,CR,LF ;AN000; + 'Insert the SELECT COPY Diskette in drive A',CR,LF,CR,LF,CR,LF ;AC080;SEH ;AN000; + 'Press Enter to continue.',CR,LF ;AN000; +:def 15 'Copying diskette . . .',CR,LF ;AN000; +:def 16 'Drive not ready. Please close the',CR,LF,CR,LF ;AN000; + 'diskette drive door and press Enter',CR,LF ;AN000; + 'to continue, or Esc to exit SELECT.',CR,LF ;AN000; +:def 17 'Write protect diskette in drive.',CR,LF,CR,LF ;AN000; + 'Please remove protect tab and',CR,LF ;AN000; + 'press ENTER to continue, or Esc to exit SELECT.',CR,LF ;AN000; +:def 18 'An error occurred while installing DOS.',CR,LF ;AN000; + 'Press Enter to continue, or Esc to exit SELECT.',CR,LF ;AN000; +:def 19 'Insert the INSTALL Diskette in drive A',CR,LF,CR,LF ;AN000; + 'Press Enter to continue.',CR,LF ;AN000; +:use 20 EXTEND8 ;AN067;SEH insufficient memory +:end ;AN000; diff --git a/v4.0/src/SELECT/SELECT0.ASM b/v4.0/src/SELECT/SELECT0.ASM new file mode 100644 index 0000000..f7198c4 --- /dev/null +++ b/v4.0/src/SELECT/SELECT0.ASM @@ -0,0 +1,372 @@ + + +PAGE 60,132 ;AN000; +NAME SELECT ;AN000; +TITLE SELECT0 - DOS - SELECT.EXE ;AN000; +SUBTTL select0.asm ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SELECT0.ASM : Copyright 1988 Microsoft +; +; DATE: July 4/87 +; +; COMMENTS: Assemble with MASM 3.0 (using the /A option) +; +; Panel flow is defined in the following files: +; +; � SELECT1.ASM +; � SELECT2.ASM +; � SELECT3.ASM +; � SELECT4.ASM +; � SELECT5.ASM +; � SELECT6.ASM +; +; CHANGE HISTORY: +; +; This module contains the change history for the entire SELECT +; component as of 1/25/88. Some changes before this date are +; listed in the individual modules. +; +; A000 - 1/25/88, designates original 4.00 level source. +; A001-A009, All changes made prior to 1/25/88, these descriptions +; exist in the individual modules which were Revised. +; A111 - D353, 12/28/87, added support for A: to A: installation on +; systems with only one diskette drive. J.W. +; A010 - D407, 1/25/88, changed install to one directory to not +; copy over system files. J.W. +; A011 - P3231, 1/26/88, add 'PRINT /D:LPTx' or 'PRINT /D:COMx' to +; autoexec.bat file for balanced and max. DOS function. S. H. +; A012 - P3238, 1/27/88, add /DATE as default shell invocation switch. +; S. H. +; A013 - P3239, 1/27/88, changed text of prompt setting in DOSSHELL.BAT +; file. J.W. +; A014 - P3275, 1/29/87, added check for minimum DOS function. S. H. +; A015 - P3310, 2/1/88, Removed PRINT invocation from diskette based +; system. J.W. +; A016 - D445, 2/4/88, removed /REF from DOSSHELL.BAT file. S. H. +; A017 - P3339, 2/4/88, Added check for read-only .BAT and .340 files, +; J.W. +; A018 - D418, 2/4/88, removed the default /TEXT option on a model 25 +; or 30. S. H. +; A019 - D443, 2/4/88, changed 'SHELL.BAT' to DOSSHELL.BAT'. S. H. +; A020 - D438, 2/5/88, removed EXT_DISKETTE_SCREEN and EXT_DISK_PARMS_SCREEN +; and other code related to supporting external diskette drives. +; S. H. +; A021 - D442, 2/8/88, Added selection of SHARE when >32M partition +; exists. J.W. +; A022 - P3403, 2/8/88, edited Welcome Screen to inform PS/2 users they +; can use 1 or 2 MB 3.5" blank diskette. S. H. +; A023 - P3292, 2/8/88, implemented error level check on FDISK to detect +; a disk with no primary DOS partition defined. J.W. +; A024 - D463, 2/9/88, changed method for reading and writing the +; SELECT.DAT file. File can now be compressed. Eliminated +; the large and slow CAS routines. J.W./D.T. +; A025 - P3460, 2/10/88, Changed printer panel number and panel list +; to remove unused panels. J.W. +; A026 - P3450, 2/11/88, added color change to unselected fields on +; the DOS location panel. J.W. +; A027 - P3459, 2/15/88, set the carry flag in HANDLE_F3 in order to +; eliminate an endless loop in GET_FUNCTION_CALL. S. H. +; A028 - P3592, 2/22/88, Add text to direct users to Getting Started With +; DOS 4.00 book. J.W. +; A029 - P3529, 2/17/88, Corrected GRAPHICS parameter initialization +; problem. J.W. +; A030 - P3527, 2/17/88, Changed incorrect diskette error panel to be +; more descriptive. J.W. +; A031 - P3546, 2/17/88, changed code to allow a semi-colon as the last +; character entered in DOS or APPEND PATH. S. H. +; A032 - P3576, 2/22/88, changed code to flash message on screen if +; user does not put SELECT diskette in to start SELECT (360KB +; diskettes only). S. H. +; A033 - P3620, 2/24/88, saved the value in I_DESTINATION so that it +; is not wiped out upon reboot. S. H. +; A034 - P3618, 2/25/88, changed code so that user does not have to reboot +; if he makes no changes to the partition. S. H. +; A035 - P3654, 2/29/88, updated help texts #18 and #19 received from I.D. +; S. H. +; A036 - P3666, 3/1/88, added GRAPHICS to the SELECT.PRT file for +; Quietwriter II and Pageprinter. +; A037 - P3672, 3/1/88, removed /MSG from SHELL= statement in CONFIG.SYS +; for installs to hard disk (for purposes of code reduction in +; COMMAND.COM). +; A038 - P3700, 3/2/88, changed second scroll option on DOS Location +; Screen to let user know system files not copied. +; A039 - D496, 3/3/88, added a dummy file for the user of the SHELL +; tutorial to copy and delete. +; A040 - P3741, 3/4/88, changed D_XMA2EMS_1 values. +; A041 - P3747, 3/4/88, changed initialization values for D_BUFFERS_2 +; and D_FASTOPEN_2 (max. DOS utilization) +; A042 - P3737, 3/9/88, changed FDISK.EXE to FDISK.COM. +; A043 - P3813, 3/10/88, moved the COMSPEC statement in the AUTOEXEC.BAT +; after the @ECHO OFF statement. +; A044 - P3852, 3/14/88, changed D_XMA2EMS_1 values again. +; A045 - D503, 3/15/88, changed MAJOR_DOS_VER to 4 and MINOR_DOS_VER to +; 00 for DOS 4.00 build. Everything visible to user still says +; DOS 4.00. +; A046 - D474, 3/16/88, changed the /E parameter for buffers to /X. +; +; A047 - P3924, 3/17/88, SELECT now includes VERSIONA.INC for the DOS +; version check---check formerly made in MAC_EQU.INC. +; A048 - P3857, 3/18/88, changed code for 360KB install to hardfile on +; 256KB machine to deallocate memory before COMMAND.COM is +; read in. +; A049 - P4017, 3/25/88, changed capital "W" to a small "w" in the +; Getting Started with DOS 4.00 title in panels. +; A050 - P4020, 3/25/88, removed quote marks and spaces between 1 MB +; and 2 MB on Welcome Screen. +; A051 - P3992, 3/26/88, edited code for DOS Location Screen so that +; ESC (hit from any field) takes you back to previous screen. +; +; A052 - P4015, 3/28/88, stated diskette size user needs when installing +; to a single 3.5 inch diskette. +; A053 - D505, 3/28/88, redesigned the Dos Location screen. +; A054 - P4006, 3/28/88, turned off blinking cursor on early SELECT +; screens (enhanced color display used). +; A055 - D508, 3/29/88, put SHARE.EXE on 720 Install diskette. +; A056 - P4047, 3/29/88, revised installation complete panel for +; 720 to 720 installation. +; A057 - P3866, strengthened panel msg referring user to Getting Started +; with DOS 4.00. +; A058 - P3945, corrected code that creates install path when putting +; DOSSHELL.BAT in the root. +; A059 - P4056, 3/30/88, corrected input routines to flush buffer before +; read. +; A060 - P4008, 3/30/88, added error message for help access when install +; disk not in drive. +; A061 - P4000, 3/30/88, corrected problem with allowable return key +; strings. +; A062 - P4059, 3/30/88, added FORMAT.COM to SELECT and OPERATING +; diskettes; moved IFSFUNC from OPERATING to INSTALL diskette. +; +; A063 - P3950, 4/1/88, added code to enable SELECT to install to a +; 256KB 2-drive convertible. +; A064 - D514, 4/6/88, revised two Installation Complete panels. +; +; A065 - D501, 4/6/88, added code to check for OS/2 and rename its +; config.sys and autoexec.bat to config.os2 and autoexec.os2. +; +; A066 - P4179, D519, 4/6/88, moved the print statement to next to last +; in the autoexec.bat file. +; A067 - P4290, 4/13/88, output message to user if SELECT encounters +; insufficient memory to install DOS. +; A068 - P4325, 4/14/88, updated CASTRUC.INC to match G:\CASSFAR\PCSLCTP. +; +; A069 - P4364, 4/18/88, updated SELECT to match new PCINPUT file. +; A070 - P4401, 4/19/88, changed Latin America's default code page to 850. +; +; A071 - P4428, 4/22/88, removed the /PRE parameter from the DOSSHELL.BAT. +; +; A072 - P3950, overlay PARSER and PCINPUT segments if on a 256KB machine. +; +; A073 - P4409, 5/2/88, corrected problem of SELECT using different default +; drives on different machines---variable not assigned. +; A074 - P4568, 5/2/88, disallow user to end SELECT by pressing CTRL-BREAK. +; A075 - P4720, 5/6/88, changed "INSTALL COPY" diskette name to "SELECT +; COPY". +; A076 - P4718, 5/6/88, capitalized the sentence in the INSTALLATION +; COMPLETE panels which points the user to the Getting Started +; with DOS 4.00 book. +; A077 - P4772, 5/6/88, added /PROMPT as default startup parameter for +; DOS Shell for 256K machine. +; A078 - P4782, 5/9/88, changed FASTOPEN defaults for maximum DOS +; function to 150,150. +; A079 - P4744, 5/10/88, made panel and scroll field change for Installation +; Option screen. +; A080 - P4832, 5/11/88, changed SELECT.SKL and USA.MSG to reflect the +; change of "INSTALL COPY" to "SELECT COPY" diskette (see P4720). +; +; A081 - P4848, 5/12/88, spaced over the keys at the bottom of the help +; panel to allow more room for translation; exported it on this +; ptm to export help text changes. +; A082 - P4916, 5/18/88, turned cursor off following FDISK reboot. +; +; A083 - P4917, 5/19/88, stopped typomatic effect of pressing enter key +; too long during installation. +; A084 - P4906, 5/19/88, corrected mode 40 machine installation hang. +; +; A085 - P4926, 5/19/88, homed the cursor before call to format so that +; message stating % of diskette formatted is at top of screen. +; +; A086 - P4934, 5/20/88, changed the 16h value used for INT 2Fh when +; checking for ANSI presence to 1Ah to avoid MICROSOFT collision. +; +; A087 - P4955, 5/23/88, adjusted the spacing between the ENTER and F1 +; keys on the bottom of panels 31 (Time and Date) and 32 (Format +; Fixed Disk Drive) to give more room for translation. +; A088 - P5064, 6/9/88, replaced a call to clear the input buffer in +; PCINCHA_CALL (see A059). +; A089 - P5048, 6/9/88, increased the value of MAX_NUM_PRINTER_DEFS to +; allow more printers in the SELECT.PRT file. +; A090 - P5127, 6/17/88, changed default index for alternate keyboards +; to be second (old) keyboard. J. Wright +; A091 - P5142, 6/30/88, reduced memory allocation for panels from 64KB +; to 62KB to allow more room for foreign versions of SELECT to +; run. S. Holahan +; A092 - P5173, 7/15/88, added @BREAK=OFF" after :COMMON statement +; in DOSSHELL.BAT file. S. Holahan +; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CODE SEGMENT PARA PUBLIC 'CODE' ;AN000; Segment for CASS libraries +CODE ENDS ;AN000; + ; +CODE_FAR SEGMENT PARA PUBLIC 'CODE' ;AN000; Segment for miscellaneous routines +CODE_FAR ENDS ;AN000; + ; +_TEXT segment byte public 'CODE' ;AN000; +_TEXT ends ;AN000; +_DATA segment word public 'DATA' ;AN000; +_DATA ends ;AN000; +CONST segment word public 'CONST' ;AN000; +CONST ends ;AN000; +_BSS segment word public 'BSS' ;AN000; +_BSS ends ;AN000; + ; + ; +DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; Segment for Data values +DATA ENDS ;AN000; + ; +SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000; +SELECT ENDS ;AN000; + +SERVICE SEGMENT PARA PUBLIC 'SERVICE' ;AN000; Segment for CAS_SERVICE routines +SERVICE ENDS ;AN000; + ; +OUR_STACK SEGMENT BYTE STACK ;AN000; Segment for Local Stack + DB 512 DUP('IBM ') ;AN000; +LAST_STACK EQU $ ;AN000; +OUR_STACK ENDS ;AN000; + ; +PARSER SEGMENT PARA PUBLIC 'PARSER' ;AN000; Segment for PARSE code +PARSER ENDS ;AN000; + +PCINPUT SEGMENT PARA PUBLIC 'PCINPUT' ;AN072; +PCINPUT ENDS ;AN072; + ; +ZSEG SEGMENT PARA PUBLIC 'ZSEG' ;AN000; Dummy segment for End-of-Code +ZSEG ENDS ;AN000; + ; +AGROUP GROUP CODE,CODE_FAR,DATA,PARSER,SERVICE,SELECT,OUR_STACK,ZSEG ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.XLIST ;AN000; + INCLUDE PANEL.MAC ;AN000; + INCLUDE STRUC.INC ;AN000; + INCLUDE MACROS.INC ;AN000; + INCLUDE SYSMSG.INC ;AN000; + INCLUDE ROUT_EXT.INC ;AN000; + INCLUDE EXT.INC ;AN000; + INCLUDE PAN-LIST.INC ;AN000; +.LIST ;AN000; + ; + EXTRN DEALLOCATE_MEMORY_CALL:FAR ;AN000; + EXTRN CHECK_VERSION:NEAR ;AN000; + ; + PUBLIC INSTALL ;AN000; + PUBLIC SYSDISPMSG ;AN000; + PUBLIC EXIT_SELECT ;AN000; + PUBLIC EXIT_SELECT2 ;AN000; + PUBLIC INITIALIZATION ;AN000; + PUBLIC ABORT_SELECT ;AN000; + ; + MSG_UTILNAME ;AN000; + +CODE SEGMENT PARA PUBLIC 'CODE' ;AN000; + ASSUME CS:code ;AN000; + ASSUME DS:code ;AN000; + ASSUME ES:NOTHING ;AN000; + ASSUME SS:NOTHING ;AN000; + + ORG 100H ;AN000; +MAIN PROC FAR ;AN000; +BEGIN: JMP A0 ;AN000; + +prognm DB "SELECT.EXE",0 ;AN000; EXEC this program + +execparm DW 0 ;AN000; environment string + DW 80H ;AN000; command string offset +comseg DW (?) ;AN000; command string segment + DW 5CH ;AN000; use the FCB's from this program +seg1 DW (?) ;AN000; . + DW 6CH ;AN000; use the FCB's from this program +seg2 DW (?) ;AN000; . + +enter equ 13 ;AN000;ENTER key +escape equ 27 ;AN000;ESC key + + EVEN ;AN000; +stck DB 255 DUP(0) ;AN000;stack +stck_beg DB 0 ;AN000; + +A0: ;AN000; + MOV SP,OFFSET stck_beg ;AN000;setup local stack + + CALL LOAD_MSG ;AN000; + MOV AX,10 ;AN000;insert SELECT diskette in drive A: + CALL DISPLAY_MSG ;AN000; + +AGN: ;AN000; + XOR AH,AH ;AN000;get ENTER key + INT 16H ;AN000; + CMP AL,ESCAPE ;AN000;if ESC, then exit + JE EXIT ;AN000; + CMP AL,ENTER ;AN000;if ENTER + JE INPOK ;AN000; then continue + MOV AX,11 ;AN000;else, sound BELL + CALL DISPLAY_MSG ;AN000; + JMP AGN ;AN000;try again +INPOK: ;AN000; + CALL CHECK_DISKETTE ;AN000;ensure INSTALL diskette in drive + JNC DSKTOK ;AN000;if so, continue + CALL CLEAR_SCREEN ;AN032;SEH + MOV AX,11 ;AN000;else, sound BELL + CALL DISPLAY_MSG ;AN000; + MOV AX,10 ;AN032;SEH flash msg on screen to insert SELECT diskette + CALL DISPLAY_MSG ;AN032; if user has not inserted it + JMP AGN ;AN000;try again +DSKTOK: ;AN000; + CALL CLEAR_SCREEN ;AN000; + +; Issue SETBLOCK to free memory + + PUSH CS ;AN000; restore ES pointing to this segment + POP ES ;AN000; . + LEA AX,endofcode ;AN000; get the address of the program end + MOV BL,16 ;AN000; get the paragraph size + DIV BL ;AN000; get the number of paragraphs + INC AL ;AN000; round up to next paragraph + SUB AH,AH ;AN000; clear high remainder + MOV BX,AX ;AN000; set up call + MOV AH,4AH ;AN000; setblock function code + INT 21H ;AN000; issue function to free memory + +; EXEC the main program + + MOV AX,CS ;AN000; get our segment + MOV DS,AX ;AN000; + MOV comseg,AX ;AN000; put in parameter blocks + MOV seg1,AX ;AN000; . + MOV seg2,AX ;AN000; . + MOV DX,OFFSET prognm ;AN000; get a pointer to the program name + MOV BX,OFFSET execparm ;AN000; get a pointer to the program parms + MOV AX,4BH*256 ;AN000; get function code - load & execute + INT 21H ;AN000; exec SELECT +EXIT: ;AN000; + MOV AX,4C00H ;AN000; + INT 21H ;AN000; + RET ;AN000; + +endofcode DB ? ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Message Retriever code inserted at this point.... +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +MSG_SERVICES ;AN000; +MSG_SERVICES ;AN000; +MSG_SERVICES ;AN000; +MSG_SERVICES ;AN000; + +;**************************************************************************** +; +; DISPLAY_MSG: Call the message retriever to display a message. +; +; INPUT: +; AX = message number +; +; OUTPUT: +; If CY = 1, there was an error displaying the message. +; If CY = 0, there were no errors. +; +; OPERATION: +; +;**************************************************************************** +DISPLAY_MSG PROC NEAR ;AN000; + MOV BX, -1 ;AN000; HANDLE -1 ==> USE ONLY DOS FUNCTION 1-12 + MOV SI, 0 ;AN000; SUBSTITUTION LIST + MOV CX, 0 ;AN000; SUBSTITUTION COUNT + MOV DL, 00 ;AN000; DOS INT21H FUNCTION FOR INPUT 0==> NO INPUT + MOV DI, 0 ;AN000; INPUT BUFFER IF DL = 0AH + MOV DH, -1 ;AN000; MESSAGE CALL -1==> UTILITY MESSAGE + CALL SYSDISPMSG ;AN000; + RET ;AN000; +DISPLAY_MSG ENDP ;AN000; + +;**************************************************************************** +; +; LOAD_MSG: Load the message +; +; INPUT: +; None +; +; OUTPUT: +; None +; +;**************************************************************************** +LOAD_MSG PROC NEAR ;AN000; + CALL SYSLOADMSG ;AN000; + RET ;AN000; +LOAD_MSG ENDP ;AN000; + +;**************************************************************************** +; +; CLEAR_SCREEN: Clear the screen and move cursor to top of display +; +; INPUT: +; None +; +; OUTPUT: +; None +; +;**************************************************************************** +CLEAR_SCREEN PROC NEAR ;AN000; + + MOV CX,0000H ;AN000;0,0 upper left of scroll + MOV DX,184FH ;AC032;SEH 24,79 lower right of screen + MOV BH,07H ;AN000;normal attribute + MOV AX,600H ;AN000;scroll screen + INT 10H ;AN000; + + MOV DX,0000H ;AN000;move cursor to 0,0 + XOR BH,BH ;AN000;display page + MOV AH,2 ;AN000;move cursor + INT 10H ;AN000; + + RET ;AN000; + +CLEAR_SCREEN ENDP ;AN000; + +;**************************************************************************** +; +; CHECK_DISKETTE: Check for INSTALL diskette in drive A: +; +; INPUT: +; None +; +; OUTPUT: +; CY = 0 correct diskette in drive +; CY = 1 incorrect diskette in drive +; +;**************************************************************************** +CHECK_DISKETTE PROC NEAR ;AN000; + PUSH DS ;AN000; + PUSH CS ;AN000; + POP DS ;AN000; + MOV DX,OFFSET dta ;AN000;set new dta + MOV AH,1AH ;AN000; + INT 21H ;AN000; + MOV DX,OFFSET prognm ;AN000;search for this file + XOR CX,CX ;AN000;search attribute + MOV AH,4EH ;AN000;find first matching file + INT 21H ;AN000; + POP DS ;AN000; + RET ;AN000; +CHECK_DISKETTE ENDP ;AN000; + +DTA DB ? ;AN000;start of dummy DTA for find first + +include msgdcl.inc + +MAIN ENDP ;AN000; +CODE ENDS ;AN000; + END BEGIN ;AN000; + diff --git a/v4.0/src/SELECT/S_DISPLY.ASM b/v4.0/src/SELECT/S_DISPLY.ASM new file mode 100644 index 0000000..c04540e --- /dev/null +++ b/v4.0/src/SELECT/S_DISPLY.ASM @@ -0,0 +1,112 @@ +;******************************************************************************** +; File: S_DISPLY.ASM +; +; This module contains a subroutine for setting the mode of the display to +; 80X25 text mode. +; +; If ANSI.SYS is loaded, then the calls to change the mode go through it, +; otherwise standard BIOS calls are performed. +; +; If ANSI.SYS is to be used, then a version dated July 15, 1987 or later must +; be used. +; +;******************************************************************************** +.ALPHA ;AN000; +.XLIST ;AN000; +INCLUDE STRUC.INC ;AN000; +.LIST ;AN000; + +DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; + + +; Buffer for IOCTL calls +BUFFER LABEL BYTE ;AN000; + DB 0 ;AN000; INFO LEVEL + DB 0 ;AN000; RESERVED + DW 14 ;AN000; SIZE +FLAGS DW 0 ;AN000; +D_MODE DB 0 ;AN000; 1 = TEXT, 2 = APA + DB 0 ;AN000; RESERVED +COLORS DW 0 ;AN000; +B_WIDTH DW 0 ;AN000; PELS ==> -1 FOR TEXT +B_LENGTH DW 0 ;AN000; PELS ==> -1 FOR TEXT +COLS DW 0 ;AN000; +ROWS DW 0 ;AN000; + +DATA ENDS ;AN000; + +CODE_FAR SEGMENT BYTE PUBLIC 'CODE' ;AN000; + + ASSUME CS:CODE_FAR, DS:DATA ;AN000; + +;******************************************************************************** +; SET_DISPLAY_MODE_ROUTINE: Set the display mode to 80X25 text mode. +; +; INPUT: +; None. +; +; OUTPUT: +; If CY = 1, then an error was encountered making a IOCTL call. +; If CY = 0, there were no errors. +; +; Operation: If ANSY.SYS is loaded, then the mode is set by calls to it, +; otherwise BIOS calls are used. +; +;******************************************************************************** +PUBLIC SET_DISPLAY_MODE_ROUTINE ;AN000; +SET_DISPLAY_MODE_ROUTINE PROC FAR ;AN000; + + ;********************************************************************** + ; See if ANSI.SYS is loaded + ;********************************************************************** + MOV AX, 1A00H ;AC086;SEH changed from 1600h to avoid MICROSOFT collision ;AN000; Fn. for determining ANSI.SYS state + INT 2FH ;AN000; Returns AL = 0FFh if it is loaded + .IF < AL NE 0FFH > ;AN000; Is it loaded? + MOV AH, 15 ;AN000; No! Fn. number for getting the current video state + INT 10H ;AN000; Get the video state + .IF < AL EQ 07H > OR ;AN000; If in monochrome mode, + .IF < AL EQ 0FH> ;AN000; or monochrome graphics mode, + MOV AX, 07H ;AN000; Set monochrome mode + .ELSE ;AN000; Otherwise... + MOV AX, 03H ;AN000; Set mode 3: 80 column, color enabled + .ENDIF ;AN000; + INT 10H ;AN000; Set the mode + .ELSE ;AN000; + MOV AX, 440CH ;AN000; Get the info from ANSI. + MOV BX, 0 ;AN000; + MOV CX, 037FH ;AN000; + MOV DX, OFFSET BUFFER ;AN000; + INT 21H ;AN000; + .IF < C > ;AN000; Was there an error? + JMP ERROR_SETTING ;AN000; Yes! Exit the subroutine. + .ENDIF ;AN000; + MOV D_MODE, 1 ;AN000; Set to text mode + MOV B_WIDTH, -1 ;AN000; -1 for text mode + MOV B_LENGTH, -1 ;AN000; -1 for text mode + MOV COLS, 80 ;AN000; Number of columns + MOV ROWS, 25 ;AN000; Number of rows + .IF < COLORS NE 0 > ;AN000; If colors = 0, monochrome + MOV COLORS, 16 ;AN000; Otherwise set 16 color mode + .ENDIF ;AN000; + MOV AX, 440CH ;AN000; Set the new mode + MOV BX, 0 ;AN000; + MOV CX, 035FH ;AN000; + MOV DX, OFFSET BUFFER ;AN000; + INT 21H ;AN000; + .IF < C > ;AN000; Was there en error? + JMP ERROR_SETTING ;AN000; Yes! Exit the subroutine + .ENDIF ;AN000; + CLC ;AN000; Indicate there were no errors + .ENDIF ;AN000; + JMP EXIT_SET ;AN000; +ERROR_SETTING: ;AN000; + STC ;AN000; Indicate that there were errors +EXIT_SET: ;AN000; + RET ;AN000; + +SET_DISPLAY_MODE_ROUTINE ENDP ;AN000; + + +CODE_FAR ENDS ;AN000; + +END ;AN000; diff --git a/v4.0/src/SELECT/TRANS.CHG b/v4.0/src/SELECT/TRANS.CHG new file mode 100644 index 0000000..5d01b62 --- /dev/null +++ b/v4.0/src/SELECT/TRANS.CHG @@ -0,0 +1,24 @@ +This file lists the changes to USA.INF which need to be included +in the translated versions. + +SCROLL TEXT # CHANGE +ÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄ +27 Changed text + +PANEL # CHANGE +ÄÄÄÄÄÄÄ ÄÄÄÄÄÄ +38 Changed text +59 Changed text +105 Changed text +21 Changed text +22 Changed text +24 Changed text +25 Changed text +26 Changed text +27 Changed text +28 Changed text +108 Changed text + + +ID should also be consulted for any changes to the help text (USAHELP.TXT). + \ No newline at end of file diff --git a/v4.0/src/SELECT/USA.INF b/v4.0/src/SELECT/USA.INF new file mode 100644 index 0000000..f98c4eb --- /dev/null +++ b/v4.0/src/SELECT/USA.INF @@ -0,0 +1,2381 @@ +false = 0 +IF SCROLL ;A000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SCROLL TEXT INFORMATION FILE +; +; RULES: There are a number of rules and regulations that +; MUST be followed in order to translated properly. +; For each entry there are detailed instructions to +; help facilitate any changes. +; +; The information in this file is destined for the +; 'SELECT.DAT' file. The panels and scrollable lists +; are contained in this file. +; There are two sections to this file, one for the +; SCROLL fields and one for the PANELS. +; +; Each rules is marked by '' and a brief description. +; The detailed description is contained in the header of +; this file (just below). In order to successfully +; translate SELECT, all of these rules have to be obeyed. +; +; +; The quotation marks have to left-right justified +; ���������������������������������������������Ŀ +; � The quotation marks (') tell SELECT where � +; � to start wrapping the text onto the next � +; � line. The assembler line immediately after � +; � the first text line automatically calculates� +; � the length of this field. The right border � +; � of the text can be adjusted freely - a ruler� +; � is drawn for each entry to help in centering� +; � text. � +; ����������������������������������������������� +; +; The '[' and ']' input field markers cannot be moved +; ���������������������������������������������Ŀ +; � These characters must remain in the same � +; � position. They define the boundries of � +; � input fields. � +; ����������������������������������������������� +; +; The panel will be centered in an 80 column screen +; ���������������������������������������������Ŀ +; � This panel will be centered on the screen � +; � when it is displayed. Please translate � +; � accordingly. � +; ����������������������������������������������� +; +; The number of lines for the entry MUST be maintained +; ���������������������������������������������Ŀ +; � The number of lines (from top to bottom) � +; � must not change. Translated text must � +; � conform to the existing number of lines. � +; ����������������������������������������������� +; +; The width of the entry must not exceed the RULER provided. +; ���������������������������������������������Ŀ +; � Translated text should remain the same � +; � width (do not exceed the ruler). Otherwise � +; � the text will not fit within the panel. � +; ����������������������������������������������� +; +; DO NOT TRANSLATE OR CHANGE!!!! +; ���������������������������������������������Ŀ +; � The information contained in the quotations � +; � should NEVER be changed. These fields are � +; � established for the size of the help text � +; � or error panels. � +; ����������������������������������������������� +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST1 DB ' 1. Minimum DOS function; maximum program workspace ';AN000; +SCB_LIST1_W EQU ($-SCB_LIST1) ;AN000; + DB ' ';AN000; + DB ' 2. Balance DOS function with program workspace ';AN000; + DB ' ';AN000; + DB ' 3. Maximum DOS function; minimum program workspace ';AN000; +SCB_LIST1_N EQU ($-SCB_LIST1)/SCB_LIST1_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST2 DB ' 1. Accept predefined country and keyboard ';AN000; +SCB_LIST2_W EQU ($-SCB_LIST2) ;AN000; + DB ' ';AN000; + DB ' 2. Specify a different country and keyboard ';AN000; +SCB_LIST2_N EQU ($-SCB_LIST2)/SCB_LIST2_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST23 LABEL BYTE ;AN000; +SCB_LIST3 DB ' United States (001) ';AN000; +SCB_LIST3_W EQU ($-SCB_LIST3) ;AN000; +SCB_LIST23_W EQU ($-SCB_LIST23) ;AN000; + DB ' Canada (French Speaking) (002) ';AN000; + DB ' Latin America (003) ';AN000; + DB ' Netherlands (031) ';AN000; + DB ' Belgium (032) ';AN000; + DB ' France (033) ';AN000; + DB ' Spain (034) ';AN000; + DB ' Italy (039) ';AN000; + DB ' Switzerland (041) ';AN000; + DB ' United Kingdom (044) ';AN000; + DB ' Denmark (045) ';AN000; + DB ' Sweden (046) ';AN000; +SCB_LIST3_N EQU ($-SCB_LIST3)/SCB_LIST3_W ;AN000; +SCB_LIST4 DB ' Norway (047) ';AN000; +SCB_LIST4_W EQU ($-SCB_LIST4) ;AN000; + DB ' Germany (049) ';AN000; + DB ' Australia (061) ';AN000; + DB ' Japan (081) ';AN000; + DB ' Korea (082) ';AN000; + DB ' Peoples Republic of China (086) ';AN000; + DB ' Taiwan (088) ';AN000; + DB ' Portugal (351) ';AN000; + DB ' Finland (358) ';AN000; + DB ' Arabic Speaking (785) ';AN000; + DB ' Hebrew Speaking (972) ';AN000; +SCB_LIST4_N EQU ($-SCB_LIST4)/SCB_LIST4_W ;AN000; +SCB_LIST23_N EQU ($-SCB_LIST23)/SCB_LIST23_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST24 LABEL BYTE ;AN000; +SCB_LIST5 DB ' Belgian (BE) ';AN000; +SCB_LIST5_W EQU ($-SCB_LIST5) ;AN000; +SCB_LIST24_W EQU ($-SCB_LIST24) ;AN000; + DB ' Canadian French (CF) ';AN000; + DB ' Danish (DK) ';AN000; + DB ' French (FR) ';AN000; + DB ' German (GR) ';AN000; + DB ' Italian (IT) ';AN000; + DB ' Latin American Speaking (LA) ';AN000; + DB ' Dutch (NE) ';AN000; + DB ' Norwegian (NO) ';AN000; +SCB_LIST5_N EQU ($-SCB_LIST5)/SCB_LIST5_W ;AN000; +SCB_LIST6 DB ' Portuguese (PO) ';AN000; +SCB_LIST6_W EQU ($-SCB_LIST6) ;AN000; + DB ' Swiss (French) (SF) ';AN000; + DB ' Swiss (German) (SG) ';AN000; + DB ' Spanish (SP) ';AN000; + DB ' Finnish (SU) ';AN000; + DB ' Swedish (SV) ';AN000; + DB ' UK English (UK) ';AN000; + DB ' US English (US) ';AN000; + DB ' None ';AN000; +SCB_LIST6_N EQU ($-SCB_LIST6)/SCB_LIST6_W ;AN000; + DB ' French 120 (120) ';AN000; + DB ' French (FR) ';AN000; + DB ' Italian 142 (142) ';AC090; + DB ' Italian (IT) ';AN000; + DB ' UK English 168 (168) ';AN000; + DB ' UK English (UK) ';AN000; +SCB_LIST24_N EQU ($-SCB_LIST24)/SCB_LIST24_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST7 DB ' 1. French 120 (120) ';AN000; +SCB_LIST7_W EQU ($-SCB_LIST7) ;AN000; + DB ' ';AN000; + DB ' 2. French (FR) ';AN000; +SCB_LIST7_N EQU ($-SCB_LIST7)/SCB_LIST7_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST8 DB ' 1. Italian 142 (142) ';AC090; +SCB_LIST8_W EQU ($-SCB_LIST8) ;AN000; + DB ' ';AN000; + DB ' 2. Italian (IT) ';AN000; +SCB_LIST8_N EQU ($-SCB_LIST8)/SCB_LIST8_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST9 DB ' 1. UK English 168 (168) ';AN000; +SCB_LIST9_W EQU ($-SCB_LIST9) ;AN000; + DB ' ';AN000; + DB ' 2. UK English (UK) ';AN000; +SCB_LIST9_N EQU ($-SCB_LIST9)/SCB_LIST9_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST10 DB ' 1. C ' ;AN000; +SCB_LIST10_W EQU ($-SCB_LIST10) ;AN000; + DB ' ' ;AN000; + DB ' 2. B ' ;AN000; +SCB_LIST10_N EQU ($-SCB_LIST10)/SCB_LIST10_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST11 DB ' ' ;AN000; +SCB_LIST11_W EQU ($-SCB_LIST11) ;AN000; +SCB_LIST11_N EQU ($-SCB_LIST11)/SCB_LIST11_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST12 DB ' 1. LPT1 - First port ' ;AN000; +SCB_LIST12_W EQU ($-SCB_LIST12) ;AN000; + DB ' ' ;AN000; + DB ' 2. LPT2 - Second port ' ;AN000; + DB ' ' ;AN000; + DB ' 3. LPT3 - Third port ' ;AN000; +SCB_LIST12_N EQU ($-SCB_LIST12)/SCB_LIST12_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST13 DB ' 1. COM1 - First port ' ;AN000; +SCB_LIST13_W EQU ($-SCB_LIST13) ;AN000; + DB ' 2. COM2 - Second port ' ;AN000; + DB ' 3. COM3 - Third port ' ;AN000; + DB ' 4. COM4 - Fourth port ' ;AN000; +SCB_LIST13_N EQU ($-SCB_LIST13)/SCB_LIST13_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST14 DB ' 1. None ' ;AN000; +SCB_LIST14_W EQU ($-SCB_LIST14) ;AN000; + DB ' 2. LPT1 - First port ' ;AN000; + DB ' 3. LPT2 - Second port ' ;AN000; + DB ' 4. LPT3 - Third port ' ;AN000; +SCB_LIST14_N EQU ($-SCB_LIST14)/SCB_LIST14_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST15 DB ' 1. Accept configuration and continue with installation ';AC079;SEH ;AN000; +SCB_LIST15_W EQU ($-SCB_LIST15) ;AN000; + DB ' ';AN000; + DB ' 2. Review, change, or add installation choices ';AC079;SEH ;AN000; +SCB_LIST15_N EQU ($-SCB_LIST15)/SCB_LIST15_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST16 DB ' Code Page Switching ';AN000; +SCB_LIST16_W EQU ($-SCB_LIST16) ;AN000; + DB ' Expanded Memory support ';AN000; + DB ' Extended display support (ANSI.SYS) ';AN000; + DB ' File performance enhancements (FASTOPEN) ';AN000; + DB ' GRAFTABL display support ';AN000; + DB ' GRAPHICS PrtSc support ';AN000; + DB ' DOS SHARE support ';AN000; + DB ' DOS SHELL ';AN000; + DB ' Virtual Disk support (RAMDRIVE.SYS) ';AN000; +SCB_LIST16_N EQU ($-SCB_LIST16)/SCB_LIST16_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST17 DB ' Code Page Switching ';AN000; +SCB_LIST17_W EQU ($-SCB_LIST17) ;AN000; + DB ' Extended display support (ANSI.SYS) ';AN000; + DB ' GRAFTABL display support ';AN000; + DB ' GRAPHICS PrtSc support ';AN000; + DB ' DOS SHELL ';AN000; + DB ' Virtual Disk support (RAMDRIVE.SYS) ';AN000; +SCB_LIST17_N EQU ($-SCB_LIST17)/SCB_LIST17_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST18 DB ' 1. Let SELECT define partition sizes ';AN000; +SCB_LIST18_W EQU ($-SCB_LIST18) ;AN000; + DB ' ';AN000; + DB ' 2. Define your own partition sizes ';AN000; +SCB_LIST18_N EQU ($-SCB_LIST18)/SCB_LIST18_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST19 DB ' 1. Leave disk unchanged ';AN000; +SCB_LIST19_W EQU ($-SCB_LIST19) ;AN000; + DB ' ';AN000; + DB ' 2. Define your own partition sizes ';AN000; +SCB_LIST19_N EQU ($-SCB_LIST19)/SCB_LIST19_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST20 DB ' 1. Format fixed disk partition ';AN000; +SCB_LIST20_W EQU ($-SCB_LIST20) ;AN000; + DB ' ';AN000; + DB ' 2. Do not format fixed disk partition ';AN000; +SCB_LIST20_N EQU ($-SCB_LIST20)/SCB_LIST20_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000;JW +; +; +; +; +; The quotation marks have to left-right justified ;AN000;JW +; The number of lines for the entry MUST be maintained ;AN000;JW +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000;JW +; |---------1---------2---------3---------4---------5---------6---------7---------8 ;AN000;JW + +SCB_LIST26 DB ' 1. Install all DOS files on fixed disk ' ;AC000;JW +SCB_LIST26_W EQU ($-SCB_LIST26) ;AN000;JW + DB ' ' ;AN000;JW + DB ' 2. Copy only non-system files to directory specified ' ;AC038;SEH Let user know hidden files not copied ;AC000;JW +SCB_LIST26_N EQU ($-SCB_LIST26)/SCB_LIST26_W ;AN000;JW + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN111;JW +; +; +; +; +; The quotation marks have to left-right justified ;AN111;JW +; The number of lines for the entry MUST be maintained ;AN111;JW +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN111;JW +; |---------1---------2---------3---------4---------5---------6---------7---------8 ;AN111;JW + +SCB_LIST27 DB ' 1. C ' ;AN111;JW +SCB_LIST27_W EQU ($-SCB_LIST27) ;AN111;JW + DB ' ' ;AN111;JW + DB ' 2. A ' ;AN111;JW +SCB_LIST27_N EQU ($-SCB_LIST27)/SCB_LIST27_W ;AN111;JW + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The number of lines for the entry MUST be maintained +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +SCB_LIST28 DB ' 1. Install the MS-DOS Shell ' +SCB_LIST28_W EQU ($-SCB_LIST28) ;AN000; + DB ' ' + DB ' 2. Do not install the MS-DOS Shell ' +SCB_LIST28_N EQU ($-SCB_LIST28)/SCB_LIST28_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN111;JW +; +; Translate text inside ' ' +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN111;JW + +WR_NOIND DB 'No' ;AN000;selection pointer indicator buff +WR_NOINDLEN EQU ($-WR_NOIND) ;AN000; + +WR_YESIND DB 'Yes' ;AN000;check mark string indicator buff +WR_YESINDLEN EQU ($-WR_YESIND) ;AN000; + + +ENDIF + + + +IF PANEL +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; The quotation marks have to left-right justified +; The panel will be centered in an 80 column screen +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +PANEL1 LABEL BYTE ;AN000; + DB ' Welcome ' ;AN000; +PANEL1_W EQU ($-PANEL1) ;AN000; + DB ' ' ;AN000; + DB 'Welcome to DOS 4.0 and the SELECT program. SELECT ' ;AN000; + DB 'will install DOS 4.0 on your fixed disk or diskette.' ;AN000; + DB 'If you install DOS 4.0 on a diskette, the number of ' ;AN000; + DB 'blank diskettes you need depends on the type and ' ;AN000; + DB 'capacity of your diskette drive: ' ;AN000; + DB ' ' ;AN000; + DB ' Drive Type (Capacity) Number of Diskettes ' ;AN000; + DB ' ' ;AN000; + DB ' 5.25-Inch Drive (360KB) five 5.25 (360KB) ' ;AC050;SEH ;AN000; + DB ' 5.25-Inch Drive (1.2MB) five 5.25 (360KB) ' ;AC050;SEH ;AN000; + DB ' 3.5-Inch Drive (720KB) three 3.5 (720KB) ' ;AC050;SEH;AC000;JW + DB ' 3.5-Inch Drive (1.44MB) three 3.5 (720KB) ' ;AC050;SEH;AC000;JW + DB ' ' ;AN000; + DB 'If you install DOS 4.0 onto a fixed disk, you need ' ;AN000; + DB 'one blank diskette: ' ;AN000; + DB ' ' ;AN000; + DB ' 5.25-Inch Drive one 5.25 (360KB) ' ;AC050;SEH ;AN000; + DB ' 3.5-Inch Drive one 3.5 (1 or 2MB) ' ;AC050;SEH ;AC022;SEH ;AC000;JW +PANEL1_L EQU ($-PANEL1)/PANEL1_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL2 LABEL BYTE ;AN000; + DB ' Introduction ';AN000; +PANEL2_W EQU ($-PANEL2) ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'As you view the SELECT displays, you will be asked to make a choice ';AN000; + DB 'or type an entry. If you are uncertain about what to choose or type,';AN000; + DB 'you can accept the predefined choice or press the F1 help key for ';AN000; + DB 'more information about an item. ';AN000; + DB ' ';AN000; + DB 'You will be using these keys in the SELECT program: ';AN000; + DB ' ';AN000; + DB ' Enter To proceed to the next step. ';AN000; + DB ' Esc To cancel the current display. ';AN000; + DB ' Tab To move to the next entry field. ';AN000; + DB ' PgUp/PgDn To scroll information one page at a time. ';AN000; + DB ' Up/Down Arrow To move the highlight bar to the next item. ';AN000; + DB ' F1 To view the help information. ';AN000; + DB ' F3 To exit SELECT. ';AN000; + DB ' F9 To view key assignments while viewing help. ';AN000; + DB ' Left/Right Arrow To scroll data fields horizontally ';AN000; + DB ' to the left or right. ';AN000; + DB ' ';AN000; + DB 'You can press Enter, Esc and F1 keys when they appear on the display.';AN000; +PANEL2_L EQU ($-PANEL2)/PANEL2_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The panel will be centered in an 80 column screen +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +PANEL3 LABEL BYTE ;AN000; + DB ' Exit ' ;AN000; +PANEL3_W EQU ($-PANEL3) ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'You have chosen to end SELECT. ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'If you are sure you want to end DOS ' ;AN000; + DB 'installation, press F3. ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'If not, press Enter to continue installation.' ;AN000; +PANEL3_L EQU ($-PANEL3)/PANEL3_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL4 LABEL BYTE ;AN000; + DB ' Specify Function and Workspace ';AN000; +PANEL4_W EQU ($-PANEL4) ;AN000; + DB ' ';AN000; + DB 'SELECT sets up your computer to run DOS and your programs';AN000; + DB 'most efficiently based on the option you choose. ';AN000; + DB ' ';AN000; + DB 'Note: You can review the results of your choice later ';AN000; + DB 'in this program. ';AN000; + DB ' ';AN000; + DB 'Choose an option: ';AN000; +PANEL4_L EQU ($-PANEL4)/PANEL4_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL5 LABEL BYTE ;AN000; + DB ' Select Country and Keyboard' ;AN000; +PANEL5_W EQU ($-PANEL5) ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'Predefined country . . . . .: ' ;AN000; + DB 'Predefined keyboard. . . . .: ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'Choose an option: ' ;AN000; +PANEL5_L EQU ($-PANEL5)/PANEL5_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL6 LABEL BYTE ;AN000; + DB ' Country Selection' ;AN000; +PANEL6_W EQU ($-PANEL6) ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'Choose a country: ' ;AN000; +PANEL6_L EQU ($-PANEL6)/PANEL6_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL7 LABEL BYTE ;AN000; + DB ' Keyboard Selection' ;AN000; +PANEL7_W EQU ($-PANEL7) ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'Choose a keyboard: ' ;AN000; +PANEL7_L EQU ($-PANEL7)/PANEL7_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL8 LABEL BYTE ;AN000; + DB ' Keyboard Layout Selection ';AN000; +PANEL8_W EQU ($-PANEL8) ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'If your keyboard has a number in the top left corner that matches';AN000; + DB 'the one shown in option 1, choose option 1; otherwise choose ';AN000; + DB 'option 2. ';AN000; + DB ' ';AN000; + DB 'Choose a keyboard: ';AN000; +PANEL8_L EQU ($-PANEL8)/PANEL8_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL9 LABEL BYTE ;AN000; + DB ' Select Installation Drive';AN000; +PANEL9_W EQU ($-PANEL9) ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'Choose the drive to install DOS on: ';AN000; +PANEL9_L EQU ($-PANEL9)/PANEL9_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL10 LABEL BYTE ;AN000; + DB ' Specify DOS Location ';AN000; +PANEL10_W EQU ($-PANEL10) ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'You can accept the DOS directory name shown or type a new';AC053;SEH ;AN000; + DB 'directory name. ';AC053;SEH ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'DOS Directory . . . .C:\ ';AN000; + DB ' ' + DB ' ' + DB ' ' + DB 'To select option 1 below, press Enter. To change your ';AN053;SEH + DB 'option, press the tab key, highlight your choice and then';AN053;SEH + DB 'press Enter. ';AN053;SEH + DB ' ';AN053;SEH + DB ' ';AN053;SEH +PANEL10_L EQU ($-PANEL10)/PANEL10_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL11 LABEL BYTE ;AN000; + DB ' Number of Printers ';AN000; +PANEL11_W EQU ($-PANEL11) ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'How many printers do you have? . . . . (0-7)';AN000; +PANEL11_L EQU ($-PANEL11)/PANEL11_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL12 LABEL BYTE ;AN000; + DB ' Printer Selection ';AN000; +PANEL12_W EQU ($-PANEL12) ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'Choose a printer: ';AN000; + DB ' More:';AN000; +PANEL12_L EQU ($-PANEL12)/PANEL12_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL13 LABEL BYTE ;AN000; + DB ' Parallel Printer Port';AN000; +PANEL13_W EQU ($-PANEL13) ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'Choose a parallel printer port: ';AN000; +PANEL13_L EQU ($-PANEL13)/PANEL13_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL14 LABEL BYTE ;AN000; + DB ' Serial Printer Port ';AN000; +PANEL14_W EQU ($-PANEL14) ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'Choose a serial printer port: ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'To refer to this serial printer as a parallel printer,';AN000; + DB 'choose a parallel port. If not, choose None. ';AN000; +PANEL14_L EQU ($-PANEL14)/PANEL14_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL15 LABEL BYTE ;AN000; + DB ' Installation Options ';AN000; +PANEL15_W EQU ($-PANEL15) ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'SELECT defined a configuration based on the options';AC079;SEH ;AN000; + DB 'you chose for DOS functions and program workspace. ';AC079;SEH ;AN000; + DB ' ';AC079;SEH ;AN000; + DB ' ';AC079;SEH ;AN000; + DB 'Choose an option: ';AN000; +PANEL15_L EQU ($-PANEL15)/PANEL15_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL16 LABEL BYTE ;AN000; + DB ' Review Selections ';AN000; +PANEL16_W EQU ($-PANEL16) ;AN000; + DB ' ';AN000; + DB 'SELECT made these selections for you. You can accept ';AN000; + DB 'these selections or change any of them. If you change ';AN000; + DB 'an item from No to Yes, it will increase the amount of ';AN000; + DB 'memory DOS uses. ';AN000; + DB ' ';AN000; + DB 'To change a selection, use the up and down arrow keys to ';AN000; + DB 'highlight your choice, then press the spacebar. To accept';AN000; + DB 'all the selections, press the Enter key. ';AN000; + DB ' Choice: ';AN000; +PANEL16_L EQU ($-PANEL16)/PANEL16_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL17 LABEL BYTE ;AN028; + DB 'The printer you chose is not supported. ';AN028; +PANEL17_W EQU ($-PANEL17) ;AN028; + DB ' ';AN028; + DB 'Press Enter to return to the Printer Selection';AN028; + DB 'screen and choose another printer, or Press F3';AN028; + DB 'to exit the SELECT program. ';AN028; +PANEL17_L EQU ($-PANEL17)/PANEL17_W ;AN028; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL18 LABEL BYTE ;AN000; + DB ' DOS Parameters ' ;AN000; +PANEL18_W EQU ($-PANEL18) ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'SELECT has set these values for you (if any). Press' ;AC000;JW + DB 'Enter to accept these values or type in new values. ' ;AC000;JW + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'DOS PATH . . . . . . ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'APPEND PARAMETERS . ' ;AN000;JW + DB 'APPEND PATH . . . . ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'PROMPT . . . . . . . ' ;AN000; +PANEL18_L EQU ($-PANEL18)/PANEL18_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL19 LABEL BYTE ;AN000; + DB ' DOS SHELL Parameters ' ;AN000; +PANEL19_W EQU ($-PANEL19) ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'SELECT has set these values for you (if any). Press' ;AC000;JW + DB 'Enter to accept these values or type in new values. ' ;AC000;JW + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'SHELL parameters . . ' ;AN000; +PANEL19_L EQU ($-PANEL19)/PANEL19_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL20 LABEL BYTE ;AN000; + DB 'An unrecoverable error occurred while installing' ;AN000; +PANEL20_W EQU ($-PANEL20) ;AN000; + DB 'DOS. Press F3 to exit SELECT. ' ;AN000; +PANEL20_L EQU ($-PANEL20)/PANEL20_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL21 LABEL BYTE ;AN000; + DB ' FASTOPEN Parameters ' ;AN000; +PANEL21_W EQU ($-PANEL21) ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'SELECT has set these values for you (if any). Press' ;AC000;JW + DB 'Enter to accept these values or type in new values. ' ;AC000;JW + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'FASTOPEN parameters . . . ' ;AN000; +PANEL21_L EQU ($-PANEL21)/PANEL21_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL22 LABEL BYTE ;AN000; + DB ' SHARE Parameters ' ;AN000; +PANEL22_W EQU ($-PANEL22) ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'SELECT has set these values for you (if any). Press' ;AC000;JW + DB 'Enter to accept these values or type in new values. ' ;AC000;JW + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'SHARE parameters . . . . ' ;AN000; +PANEL22_L EQU ($-PANEL22)/PANEL22_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL23 LABEL BYTE ;AN000; + DB ' GRAPHICS Parameters ' ;AN000; +PANEL23_W EQU ($-PANEL23) ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'SELECT has set these values for you (if any). Press' ;AC000;JW + DB 'Enter to accept these values or type in new values. ' ;AC000;JW + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'GRAPHICS parameters . . ' ;AN000; +PANEL23_L EQU ($-PANEL23)/PANEL23_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL24 LABEL BYTE ;AN000; + DB ' Expanded Memory Parameters ' ;AN000; +PANEL24_W EQU ($-PANEL24) ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'SELECT has set these values for you (if any). Press' ;AC000;JW + DB 'Enter to accept these values or type in new values. ' ;AC000;JW + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'XMAEM parameters . . . . ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'XMA2EMS parameters . . . ' ;AN000; +PANEL24_L EQU ($-PANEL24)/PANEL24_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL25 LABEL BYTE ;AN000; + DB ' RAMDRIVE Parameters ' ;AN000; +PANEL25_W EQU ($-PANEL25) ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'SELECT has set these values for you (if any). Press' ;AC000;JW + DB 'Enter to accept these values or type in new values. ' ;AC000;JW + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'RAMDRIVE parameters . . . . ' ;AN000; +PANEL25_L EQU ($-PANEL25)/PANEL25_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL26 LABEL BYTE ;AN000; + DB ' Configuration Parameters' ;AN000; +PANEL26_W EQU ($-PANEL26) ;AN000; + DB ' ' ;AN000; + DB 'SELECT has set these values for you. Press ' ;AN000; + DB 'Enter to accept the values shown or type in ' ;AN000; + DB 'new values. ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'BREAK. . . . . . (ON/OFF) ' ;AN000; + DB 'BUFFERS . . . . (1-99,1-8) ' ;AN000; + DB 'FCBS . . . . . . (1-255,0-255) ' ;AN000; + DB 'FILES . . . . . (8-255) ' ;AN000; + DB 'LASTDRIVE . . . (A-Z) ' ;AN000; + DB 'STACKS . . . . . (8-64,32-512) ' ;AN000; + DB 'VERIFY . . . . . (ON/OFF) ' ;AN000; +PANEL26_L EQU ($-PANEL26)/PANEL26_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL27 LABEL BYTE ;AN000; + DB ' Partition Fixed Disk ';AN000; +PANEL27_W EQU ($-PANEL27) ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'This fixed disk must be set up before you can use it. Setting up ';AN000; + DB 'involves separating the disk into areas called partitions. SELECT';AN000; + DB 'can define the partition sizes for you, or you can define your ';AN000; + DB 'own partition sizes. ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'Choose an option: ';AN000; +PANEL27_L EQU ($-PANEL27)/PANEL27_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL28 LABEL BYTE ;AN000; + DB ' Partition Fixed Disk ';AN000; +PANEL28_W EQU ($-PANEL28) ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'This fixed disk is not completely set up. The fixed disk has space';AN000; + DB 'that needs to be divided into areas called partitions. You can ';AN000; + DB 'leave the fixed disk as it is, or you can define your own ';AN000; + DB 'partition sizes. ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'Choose an option: ';AN000; +PANEL28_L EQU ($-PANEL28)/PANEL28_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL29 LABEL BYTE ;AN000; + DB 'You must restart your computer to continue.' ;AN000; +PANEL29_W EQU ($-PANEL29) ;AN000; +PANEL29_L EQU ($-PANEL29)/PANEL29_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL30 LABEL BYTE ;AN000; + DB ' Date and Time' ;AN000; +PANEL30_W EQU ($-PANEL30) ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'Current date: ' ;AN000; + DB ' ' ;AN000; + DB ' Year . . . . (1980-2079) ' ;AN000; + DB ' ' ;AN000; + DB ' Month . . . (1-12) ' ;AN000; + DB ' ' ;AN000; + DB ' Day . . . . (1-31) ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB 'Current time: ' ;AN000; + DB ' ' ;AN000; + DB ' Hour . . . . (00-23) ' ;AN000; + DB ' ' ;AN000; + DB ' Minute . . . (00-59) ' ;AN000; + DB ' ' ;AN000; + DB ' Second . . . (00-59) ' ;AN000; +PANEL30_L EQU ($-PANEL30)/PANEL30_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL31 LABEL BYTE ;AN000; + DB ' Format Fixed Disk Drive' ;AN000; +PANEL31_W EQU ($-PANEL31) ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000; + DB ' ' ;AN000;JW added line + DB ' ' ;AN000; + DB 'Choose an option: ' ;AN000; +PANEL31_L EQU ($-PANEL31)/PANEL31_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL32 LABEL BYTE ;AN000; + DB ' Continuing Installation' ;AN000; +PANEL32_W EQU ($-PANEL32) ;AN000; +PANEL32_L EQU ($-PANEL32)/PANEL32_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ************** +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL33 LABEL BYTE ;AN028; + DB 'System does not support selected keyboard. ';AN028; +PANEL33_W EQU ($-PANEL33) ;AN028; + DB ' ';AN028; + DB 'Press Enter to return to the Keyboard Selection';AN028; + DB 'screen and choose another keyboard, or Press F3';AN028; + DB 'to exit the SELECT program. ';AN028; +PANEL33_L EQU ($-PANEL33)/PANEL33_W ;AN028; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL34 LABEL BYTE ;AN000; + DB ' Installation Complete' ;AN000; +PANEL34_W EQU ($-PANEL34) ;AN000; +PANEL34_L EQU ($-PANEL34)/PANEL34_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL35 LABEL BYTE ;AN028; + DB 'Installation of MS-DOS 4.0 is complete. ';AN028; +PANEL35_W EQU ($-PANEL35) ;AN028; + DB ' ';AN028; + DB ' ';AN028; + DB 'Place the new STARTUP diskette in drive A and ';AC028; + DB 'press Ctrl+Alt+Del to start DOS. ';AC028; + DB ' ';AN028; + DB 'FOR INFORMATION ON USING THE DOS SHELL, REFER TO';AC076;SEH ;AN028; + DB 'THE "MS-DOS 4.0 USERS GUIDE" BOOK. ';AC076;SEH ;AN028; ;AC049;SEH +PANEL35_L EQU ($-PANEL35)/PANEL35_W ;AN028; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; DO NOT TRANSLATE OR CHANGE!!!! +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5----| + +PANEL36 LABEL BYTE ;AN000; + DB '������������������������������������������������������Ŀ';AN000; +PANEL36_W EQU ($-PANEL36) ;AN000; + DB '� �';AN000; + DB '� �';AN000; + DB '� �';AN000; + DB '� �';AN000; + DB '� �';AN000; + DB '� �';AN000; + DB '� �';AN000; + DB '� �';AN000; + DB '� �';AN000; + DB '������������������������������������������������������Ĵ';AN000; + DB '� �';AN000; + DB '��������������������������������������������������������';AN000; +PANEL36_L EQU ($-PANEL36)/PANEL36_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; DO NOT TRANSLATE OR CHANGE!!!! +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +PANEL37 LABEL BYTE ;AN000; + DB '��������������������������������������������������������������������������������';AN000; +PANEL37_W EQU ($-PANEL37) ;AN000; +PANEL37_L EQU ($-PANEL37)/PANEL37_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The panel will be centered in an 80 column screen +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL38 LABEL BYTE ;AN000; + DB 'Press Enter (��) to continue or Esc to Cancel' ;AN000; +PANEL38_W EQU ($-PANEL38) ;AN000; +PANEL38_L EQU ($-PANEL38)/PANEL38_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL39 LABEL BYTE ;AN000; + DB 'Printer........... ' ;AN000; +PANEL39_W EQU ($-PANEL39) ;AN000; +PANEL39_L EQU ($-PANEL39)/PANEL39_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL40 LABEL BYTE ;AN000; + DB ' F3=Exit ' ;AN000; +PANEL40_W EQU ($-PANEL40) ;AN000; +PANEL40_L EQU ($-PANEL40)/PANEL40_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL41 LABEL BYTE ;AN000; + DB 'Fixed Disk........ ' ;AC000;JW +PANEL41_W EQU ($-PANEL41) ;AN000; +PANEL41_L EQU ($-PANEL41)/PANEL41_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL42 LABEL BYTE ;AN000; + DB 'Logical Drive..... :' ;AC000;JW +PANEL42_W EQU ($-PANEL42) ;AN000; +PANEL42_L EQU ($-PANEL42)/PANEL42_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL43 LABEL BYTE ;AN000; + DB 'Press Ctrl+Alt+Del to continue with DOS installation.';AN000; +PANEL43_W EQU ($-PANEL43) ;AN000; +PANEL43_L EQU ($-PANEL43)/PANEL43_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL44 LABEL BYTE ;AN000; + DB 'Copying from OPERATING diskette . . .';AN000; +PANEL44_W EQU ($-PANEL44) ;AN000; +PANEL44_L EQU ($-PANEL44)/PANEL44_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL45 LABEL BYTE ;AN000; + DB 'Copying from INSTALL diskette . . .' ;AN000; +PANEL45_W EQU ($-PANEL45) ;AN000; +PANEL45_L EQU ($-PANEL45)/PANEL45_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL46 LABEL BYTE ;AN000; + DB 'Installation of MS-DOS 4.0 is complete. ';AN000; +PANEL46_W EQU ($-PANEL46) ;AN000; + DB ' ';AN076;SEH + DB ' ';AN076;SEH + DB 'REFER TO THE "MS-DOS 4.0 USERS GUIDE" BOOK';AC076;SEH ;AC049;SEH ;AN028; + DB 'FOR INFORMATION ON USING THE DOS SHELL. ';AC076;SEH ;AN028; +PANEL46_L EQU ($-PANEL46)/PANEL46_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL47 LABEL BYTE ;AN000; + DB 'Remove all diskettes. Press Ctrl+Alt+Del to start DOS.';AN000; +PANEL47_W EQU ($-PANEL47) ;AN000; +PANEL47_L EQU ($-PANEL47)/PANEL47_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL48 LABEL BYTE ;AN000; + DB 'Installation of MS-DOS 4.0 is complete. ';AN000; +PANEL48_W EQU ($-PANEL48) ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'To start DOS, place the STARTUP diskette in drive A';AC064;SEH;AC056;SEH ;AC000;JW + DB 'and press Ctrl+Alt+Del. ';AC064;SEH;AC056;SEH ;AC000;JW + DB ' ';AN000; + DB 'or ';AN064;SEH;AN000; + DB ' ';AN000; + DB 'To start the DOS Shell, place the SHELL diskette ';AC064;SEH;AC056;SEH ;AC028; + DB 'in drive A, and press Ctrl+Alt+Del. ';AC064;SEH;AC056;SEH ;AC028; + DB ' ';AN064;SEH + DB 'FOR INFORMATION ON USING THE DOS SHELL, REFER TO ';AC076;SEH ;AC064;SEH;AC056;SEH ;AN028; + DB 'THE "MS-DOS 4.0 USERS GUIDE" BOOK. ';AC076;SEH ;AC056;SEH ;AC049;SEH ;AN028; +PANEL48_L EQU ($-PANEL48)/PANEL48_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL49 LABEL BYTE ;AN000; + DB ' F1=Help ' ;AN000; +PANEL49_W EQU ($-PANEL49) ;AN000; +PANEL49_L EQU ($-PANEL49)/PANEL49_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL50 LABEL BYTE ;AN000; + DB ' F9=Keys ' ;AN000; +PANEL50_W EQU ($-PANEL50) ;AN000; +PANEL50_L EQU ($-PANEL50)/PANEL50_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL51 LABEL BYTE ;AN000; + DB ' Esc=Cancel ' ;AN000; +PANEL51_W EQU ($-PANEL51) ;AN000; +PANEL51_L EQU ($-PANEL51)/PANEL51_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL52 LABEL BYTE ;AN000; + DB ' Enter ' ;AN000; +PANEL52_W EQU ($-PANEL52) ;AN000; +PANEL52_L EQU ($-PANEL52)/PANEL52_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ************ +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 +PANEL53 LABEL BYTE ;AN000; + DB 'Installation of MS-DOS 4.0 is complete. ';AN000; +PANEL53_W EQU ($-PANEL53) ;AN000; + DB ' ';AN000; + DB 'The files AUTOEXEC.400 and CONFIG.400 have been ';AC057;SEH ;AN000; + DB 'copied to your fixed disk. The files contain the';AC057;SEH ;AN000; + DB 'options selected for DOS 4.0. To get the options';AC057;SEH ;AN000; + DB 'selected, update your AUTOEXEC.BAT and CONFIG.SYS';AC057;SEH ;AN000; + DB 'files. Refer to the "MS-DOS 4.0 Users Guide" ';AC057;SEH ;AN000; + DB 'book for information on updating these files. ';AC057;SEH ;AN000; + DB ' ';AC057;SEH ;AC049;SEH ;AN000; + DB 'FOR INFORMATION ON USING THE DOS SHELL, REFER TO ';AC076;SEH ;AC057;SEH ;AC028; + DB 'THE "MS-DOS 4.0 USERS GUIDE" BOOK. ';AC076;SEH ;AC057;SEH ;AN028; +PANEL53_L EQU ($-PANEL53)/PANEL53_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The width of the entry must not exceed the RULER provided. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5-| + +PANEL54 LABEL BYTE ;AN028; + DB 'Disk write-protected ' ;AN028; +PANEL54_W EQU ($-PANEL54) ;AN028; + DB ' ' ;AN028; + DB 'Use a non-protected diskette or remove' ;AN028; + DB 'the write-protection on the diskette. ' ;AN028; +PANEL54_L EQU ($-PANEL54)/PANEL54_W ;AN028; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The width of the entry must not exceed the RULER provided. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5-| + +PANEL55 LABEL BYTE ;AN028; + DB 'Drive not ready ';AN028; +PANEL55_W EQU ($-PANEL55) ;AN028; + DB ' ';AN028; + DB 'Reinsert the diskette and close the drive door.';AN028; + DB 'Press Enter to continue. ';AN028; +PANEL55_L EQU ($-PANEL55)/PANEL55_W ;AN028; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The width of the entry must not exceed the RULER provided. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5-| + +PANEL56 LABEL BYTE ;AN000; + DB 'Defective diskette ';AN000; +PANEL56_W EQU ($-PANEL56) ;AN000; + DB ' ';AN028; + DB 'Press Enter to retry, or Press F3 to exit SELECT.';AN000; +PANEL56_L EQU ($-PANEL56)/PANEL56_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The width of the entry must not exceed the RULER provided. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5-| + +PANEL57 LABEL BYTE ;AN000; + DB 'An error occurred while installing DOS. ';AN000; +PANEL57_W EQU ($-PANEL57) ;AN000; + DB 'Press Enter to continue, or F3 to exit SELECT.';AN000; +PANEL57_L EQU ($-PANEL57)/PANEL57_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL58 LABEL BYTE ;AN000; + DB 'Insert STARTUP diskette in drive B' ;AC000;JW +PANEL58_W EQU ($-PANEL58) ;AN000; +PANEL58_L EQU ($-PANEL58)/PANEL58_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL59 LABEL BYTE ;AN000; + DB 'Insert OPERATING diskette in drive A' ;AC000;JW +PANEL59_W EQU ($-PANEL59) ;AN000; +PANEL59_L EQU ($-PANEL59)/PANEL59_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL60 LABEL BYTE ;AN000; + DB 'Insert SHELL diskette in drive B' ;AC000;JW +PANEL60_W EQU ($-PANEL60) ;AN000; +PANEL60_L EQU ($-PANEL60)/PANEL60_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL61 LABEL BYTE ;AN000; + DB 'Insert INSTALL diskette in drive A' ;AC000;JW +PANEL61_W EQU ($-PANEL61) ;AN000; +PANEL61_L EQU ($-PANEL61)/PANEL61_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The width of the entry must not exceed the RULER provided. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5-| + +PANEL62 LABEL BYTE ;AN000; + DB 'Incorrect path ';AN000; +PANEL62_W EQU ($-PANEL62) ;AN000; + DB ' ';AN028; + DB 'The path specified cannot be found. ';AN000; + DB ' ';AN000; + DB 'Correct the path and retry the command.';AN000; +PANEL62_L EQU ($-PANEL62)/PANEL62_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The width of the entry must not exceed the RULER provided. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5-| + +PANEL63 LABEL BYTE ;AN028; + DB 'Missing or unreadable SELECT.PRT file ';AN028; +PANEL63_W EQU ($-PANEL63) ;AN028; + DB ' ';AN028; + DB 'Press Enter to continue SELECT and no printers';AN028; + DB 'will be defined, or Press F3 to exit SELECT. ';AN028; +PANEL63_L EQU ($-PANEL63)/PANEL63_W ;AN028; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The width of the entry must not exceed the RULER provided. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5-| + +PANEL64 LABEL BYTE ;AN000; + DB 'Printer profile information invalid ';AN000; +PANEL64_W EQU ($-PANEL64) ;AN000; + DB ' ';AN000; + DB 'Press Enter to return to the Printer Selection';AN000; + DB 'screen and choose another printer, or Press F3';AN000; + DB 'to exit SELECT. ';AN000; +PANEL64_L EQU ($-PANEL64)/PANEL64_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL65 LABEL BYTE ;AN000; + DB 'Formatting disk . . .' ;AN000; +PANEL65_W EQU ($-PANEL65) ;AN000; +PANEL65_L EQU ($-PANEL65)/PANEL65_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL66 LABEL BYTE ;AN000; + DB 'Formatting diskette in drive B . . .';AC000;JW +PANEL66_W EQU ($-PANEL66) ;AN000; +PANEL66_L EQU ($-PANEL66)/PANEL66_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; DO NOT TRANSLATE OR CHANGE!!!! +; The width of the entry must not exceed the RULER provided. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5-| + +PANEL67 LABEL BYTE ;AN000; + DB '���������������������������������������������������Ŀ';AN000; +PANEL67_W EQU ($-PANEL67) ;AN000; + DB '� �';AN000; + DB '� �';AN000; + DB '� �';AN000; + DB '� �';AN000; + DB '� �';AN000; + DB '���������������������������������������������������Ĵ';AN000; + DB '� �';AN000; + DB '�����������������������������������������������������';AN000; +PANEL67_L EQU ($-PANEL67)/PANEL67_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The width of the entry must not exceed the RULER provided. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5-| + +PANEL68 LABEL BYTE ;AN000; + DB 'Incorrect diskette ';AC030; +PANEL68_W EQU ($-PANEL68) ;AN000; + DB ' ';AN030; + DB 'Press Enter and follow instructions on screen,';AN030; + DB 'or press F3 to exit SELECT. ';AN030; +PANEL68_L EQU ($-PANEL68)/PANEL68_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The width of the entry must not exceed the RULER provided. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5-| + +PANEL69 LABEL BYTE ;AN000; + DB 'An unrecoverable error occurred while installing ';AN000; +PANEL69_W EQU ($-PANEL69) ;AN000; + DB 'DOS. Press Enter to retry, or F3 to exit SELECT.';AN000; +PANEL69_L EQU ($-PANEL69)/PANEL69_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL70 LABEL BYTE ;AN000; + DB 'Before proceeding, SELECT needs to make a copy of ';AN000; +PANEL70_W EQU ($-PANEL70) ;AN000; + DB 'the INSTALL diskette. ';AN000; + DB ' ';AN000; + DB 'During installation to a fixed disk, SELECT records';AN000; + DB 'information to a diskette for later use in the ';AN000; + DB 'installation process. Have your blank diskette, ';AN000; + DB 'labeled "SELECT COPY", ready for this purpose. ';AC075;SEH + DB ' ';AN000; + DB 'For now, leave the INSTALL diskette in drive A and ';AC000;JW + DB 'press ENTER to continue. ';AN000; +PANEL70_L EQU ($-PANEL70)/PANEL70_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL71 LABEL BYTE ;AN000; + DB 'Remove the INSTALL diskette from drive A ' ;AN000; +PANEL71_W EQU ($-PANEL71) ;AN000; + DB ' ' ;AN000; + DB 'Insert the SELECT COPY diskette in drive A' ;AC075;SEH +PANEL71_L EQU ($-PANEL71)/PANEL71_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL72 LABEL BYTE ;AN000; + DB 'Remove the SELECT COPY diskette from drive A' ;AC075;SEH ;AC000;JW +PANEL72_W EQU ($-PANEL72) ;AN000; + DB ' ' ;AC000;JW + DB 'Insert the INSTALL diskette in drive A ' ;AC000;JW +PANEL72_L EQU ($-PANEL72)/PANEL72_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL73 LABEL BYTE ;AN000; + DB 'Copying diskette . . .' ;AN000; +PANEL73_W EQU ($-PANEL73) ;AN000; +PANEL73_L EQU ($-PANEL73)/PANEL73_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PANEL74 LABEL BYTE ;AN010; + DB 'Installation of MS-DOS 4.0 is complete. ';AN010; +PANEL74_W EQU ($-PANEL74) ;AN010; + DB ' ';AN010; + DB 'The files AUTOEXEC.400 and CONFIG.400 have been';AN010; + DB 'copied to your fixed disk. These files reflect';AN010; + DB 'the options selected for DOS 4.0. ';AN010; + DB ' ';AN010; + DB 'To get the options selected for DOS 4.0: ';AN010; + DB ' 1. Update your AUTOEXEC.BAT and CONFIG.SYS ';AN010; + DB ' files ';AN010; + DB ' 2. Copy DOS 4.0 system files to drive C ';AN010; + DB ' ';AN010; + DB 'REFER TO THE "MS-DOS 4.0 USERS GUIDE" BOOK FOR ';AC076;SEH ;AC049;SEH ;AN010; + DB 'INFORMATION ON UPDATING THESE FILES AND ON ';AC076;SEH ;AN010; + DB 'USING THE DOS SHELL. ';AC076;SEH ;AN028; +PANEL74_L EQU ($-PANEL74)/PANEL74_W ;AN010; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PANEL75 LABEL BYTE ;AN000; + DB 'Formatting SHELL diskette . . .' ;AN000; +PANEL75_W EQU ($-PANEL75) ;AN000; +PANEL75_L EQU ($-PANEL75)/PANEL75_W ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PANEL76 LABEL BYTE ;AN000; + DB 'Formatting STARTUP diskette . . .' ;AN000; +PANEL76_W EQU ($-PANEL76) ;AN000; +PANEL76_L EQU ($-PANEL76)/PANEL76_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL77 LABEL BYTE ;AN000; + DB 'Insert SELECT diskette in drive A' ;AC000;JW +PANEL77_W EQU ($-PANEL77) ;AN000; +PANEL77_L EQU ($-PANEL77)/PANEL77_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL78 LABEL BYTE ;AN000; + DB 'Insert OPERATING 1 diskette in drive A' ;AC000;JW +PANEL78_W EQU ($-PANEL78) ;AN000; +PANEL78_L EQU ($-PANEL78)/PANEL78_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL79 LABEL BYTE ;AN000; + DB 'Insert OPERATING 3 diskette in drive A' ;AC000;JW +PANEL79_W EQU ($-PANEL79) ;AN000; +PANEL79_L EQU ($-PANEL79)/PANEL79_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL80 LABEL BYTE ;AN000; + DB 'Copying files . . .' ;AN000; +PANEL80_W EQU ($-PANEL80) ;AN000; +PANEL80_L EQU ($-PANEL80)/PANEL80_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL81 LABEL BYTE ;AN000; + DB 'Insert WORKING 1 diskette in drive B' ;AC000;JW +PANEL81_W EQU ($-PANEL81) ;AN000; +PANEL81_L EQU ($-PANEL81)/PANEL81_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL82 LABEL BYTE ;AN000; + DB 'Insert OPERATING 1 diskette in drive A' ;AC000;JW +PANEL82_W EQU ($-PANEL82) ;AN000; + DB ' ' ;AC000;JW + DB 'Insert WORKING 2 diskette in drive B ' ;AC000;JW +PANEL82_L EQU ($-PANEL82)/PANEL82_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL83 LABEL BYTE ;AN000; + DB 'Insert OPERATING 2 diskette in drive A' ;AC000;JW +PANEL83_W EQU ($-PANEL83) ;AN000; + DB ' ' ;AC000;JW + DB 'Insert WORKING 3 diskette in drive B ' ;AC000;JW +PANEL83_L EQU ($-PANEL83)/PANEL83_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL84 LABEL BYTE ;AN000; + DB 'Insert OPERATING 3 diskette in drive A' ;AC000;JW +PANEL84_W EQU ($-PANEL84) ;AN000; + DB ' ' ;AC000;JW + DB 'Insert STARTUP diskette in drive B ' ;AC000;JW +PANEL84_L EQU ($-PANEL84)/PANEL84_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL85 LABEL BYTE ;AN000; + DB 'Insert SELECT diskette in drive A' ;AC000;JW +PANEL85_W EQU ($-PANEL85) ;AN000; + DB ' ' ;AC000;JW + DB 'Leave STARTUP diskette in drive B' ;AC000;JW +PANEL85_L EQU ($-PANEL85)/PANEL85_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL86 LABEL BYTE ;AN000; + DB 'Insert WORKING 1 diskette in drive A';AC000;JW +PANEL86_W EQU ($-PANEL86) ;AN000; +PANEL86_L EQU ($-PANEL86)/PANEL86_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL87 LABEL BYTE ;AN000; + DB 'Insert WORKING 2 diskette in drive A' ;AC000;JW +PANEL87_W EQU ($-PANEL87) ;AN000; +PANEL87_L EQU ($-PANEL87)/PANEL87_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL88 LABEL BYTE ;AN000; + DB 'Insert SHELL diskette in drive A' ;AC000;JW +PANEL88_W EQU ($-PANEL88) ;AN000; +PANEL88_L EQU ($-PANEL88)/PANEL88_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL89 LABEL BYTE ;AN000; + DB 'Insert STARTUP diskette in drive A' ;AC000;JW +PANEL89_W EQU ($-PANEL89) ;AN000; +PANEL89_L EQU ($-PANEL89)/PANEL89_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL90 LABEL BYTE ;AN000; + DB 'SELECT will create the following diskettes:';AN000; +PANEL90_W EQU ($-PANEL90) ;AN000; + DB ' (You will need 5 blank 360KB diskettes) ';AN000; + DB ' ';AN000; + DB ' STARTUP Starting DOS ';AN000; + DB ' WORKING 1 DOS Utilities ';AC000;JW + DB ' WORKING 2 More DOS Utilities ';AC000;JW + DB ' WORKING 3 Other DOS Utilities ' + DB ' SHELL Starting SHELL (Optional)';AN000; + DB ' ';AN000; + DB 'Label the blank diskettes as shown, and ';AN000; + DB 'then follow the display prompts. ';AN000; +PANEL90_L EQU ($-PANEL90)/PANEL90_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL91 LABEL BYTE ;AN000; + DB 'Installation of MS-DOS 4.0 is complete. ';AN000; +PANEL91_W EQU ($-PANEL91) ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'Place the STARTUP diskette in drive A and press ';AC064;SEH;AC000;JW + DB 'Ctrl+Alt+Del to start DOS. ';AC064;SEH;AC000;JW + DB ' ';AN064;SEH + DB 'If you want to use the DOS Shell, place the SHELL';AC064;SEH;AC028; + DB 'diskette in drive A and type DOSSHELL to start ';AC064;SEH;AC028; + DB 'the Shell. ';AC064;SEH;AN000; + DB ' ';AN064;SEH + DB 'FOR INFORMATION ON USING THE DOS SHELL, REFER TO ';AC076;SEH;AC064;SEH;AN028; + DB 'THE "MS-DOS 4.0 USERS GUIDE" BOOK. ';AC076;SEH;AC064;SEH;AC049;SEH ;AN028; +PANEL91_L EQU ($-PANEL91)/PANEL91_W ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL92 LABEL BYTE ;AN000; + DB 'Insert SELECT COPY diskette in drive A' ;AC075;SEH ;AC000;JW +PANEL92_W EQU ($-PANEL92) ;AN000; +PANEL92_L EQU ($-PANEL92)/PANEL92_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL93 LABEL BYTE ;AN000; + DB 'Insert OPERATING 2 diskette in drive A' ;AC000;JW +PANEL93_W EQU ($-PANEL93) ;AN000; +PANEL93_L EQU ($-PANEL93)/PANEL93_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; PAN_EXP_MEMORY2 EQU 108 ;AN000;JW +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 +PANEL94 LABEL BYTE ;AN000; + DB ' Expanded Memory Parameters ';AN000; +PANEL94_W EQU ($-PANEL94) ;AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'SELECT has set these values for you (if any). Press';AC000;JW + DB 'Enter to accept these values or type in new values. ';AC000;JW + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB ' ';AN000; + DB 'XMA2EMS parameters . . . ';AN000; +PANEL94_L EQU ($-PANEL94)/PANEL94_W ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL95 LABEL BYTE ;AN000; + DB 'SELECT will create the following diskettes:' ;AN000; +PANEL95_W EQU ($-PANEL95) ;AN000; + DB ' (You will need 3 blank 1MB diskettes) ' ;AN000; + DB ' ' ;AN000; + DB ' STARTUP Starting DOS, ' ;AN000; + DB ' DOS Utilities ' ;AN000; + DB ' ' ;AN000; + DB ' WORKING Other DOS Utilities ' + DB ' ' ;AN000; + DB ' SHELL Starting SHELL, ' ;AN000; + DB ' More DOS Utilities ' ;AN000; + DB ' (Optional) ' ;AN000; + DB ' ' ;AN000; + DB 'Label the blank diskettes as shown, and ' ;AN000; + DB 'then follow the display prompts. ' ;AN000; +PANEL95_L EQU ($-PANEL95)/PANEL95_W ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL96 LABEL BYTE ;AN000; + DB 'SELECT will create the following diskette:' ;AN000; +PANEL96_W EQU ($-PANEL96) ;AN000; + DB ' (You will need 1 blank 2MB diskette) ' ;AC052;SEH ;AN000; + DB ' ' ;AN000; + DB ' STARTUP Starting DOS and SHELL, ' ;AC000;JW + DB ' DOS Utilities ' ;AN000; + DB ' ' ;AN000; + DB 'Label the blank diskette as shown, and ' ;AN000; + DB 'then follow the display prompts. ' ;AN000; +PANEL96_L EQU ($-PANEL96)/PANEL96_W ;AN000; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +; The width of the entry must not exceed the RULER provided. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5-| + +PANEL97 LABEL BYTE ;AN060; + DB 'Incorrect diskette ';AC060; +PANEL97_W EQU ($-PANEL97) ;AN060; + DB ' ';AN060; + DB 'Insert the INSTALL diskette in drive A. Press';AN060; + DB 'Enter to continue or F3 to exit SELECT. ';AN060; +PANEL97_L EQU ($-PANEL97)/PANEL97_W ;AN060; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL98 LABEL BYTE + DB ' MS-DOS Shell Option ' +PANEL98_W EQU ($-PANEL98) + DB ' ' + DB ' ' + DB 'SELECT can install the MS-DOS Shell on the system ' + DB 'being set up. Indicate whether you want to do this.' + DB ' ' + DB ' ' + DB 'Choose an option: ' +PANEL98_L EQU ($-PANEL98)/PANEL98_W +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL99 LABEL BYTE ;AN000; + DB 'Insert WORKING diskette in drive A' ;AC000;JW +PANEL99_W EQU ($-PANEL99) ;AN000; +PANEL99_L EQU ($-PANEL99)/PANEL99_W ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL100 LABEL BYTE ;AN000; + DB 'Insert MS-DOS SHELL diskette in drive A' ;AC000;JW +PANEL100_W EQU ($-PANEL100) ;AN000; +PANEL100_L EQU ($-PANEL100)/PANEL100_W ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL101 LABEL BYTE + DB 'Insert MS-DOS SHELL diskette in drive A' +PANEL101_W EQU ($-PANEL101) + DB ' ' + DB 'Insert SHELL diskette in drive B ' +PANEL101_L EQU ($-PANEL101)/PANEL101_W +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL102 LABEL BYTE ;AN000; + DB 'Insert OPERATING diskette in drive A' ;AC000;JW +PANEL102_W EQU ($-PANEL102) ;AN000; + DB ' ' ;AC000;JW + DB 'Insert WORKING diskette in drive B ' ;AC000;JW +PANEL102_L EQU ($-PANEL102)/PANEL102_W ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; +; +; +; The quotation marks have to left-right justified +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; |---------1---------2---------3---------4---------5---------6---------7---------8 + +PANEL103 LABEL BYTE ;AN000; + DB 'Insert WORKING 3 diskette in drive A' ;AC000;JW +PANEL103_W EQU ($-PANEL103) ;AN000; +PANEL103_L EQU ($-PANEL103)/PANEL103_W ;AN000; + + + +ENDIF + \ No newline at end of file diff --git a/v4.0/src/SELECT/USA.PRT b/v4.0/src/SELECT/USA.PRT new file mode 100644 index 0000000..64e0fa9 --- /dev/null +++ b/v4.0/src/SELECT/USA.PRT @@ -0,0 +1,88 @@ +25 +P IBM 3852 Ink Jet Printer + +P IBM 4201 Proprinter +CDP 4201,437 +CPP 4201.CPI +GP GRAPHICS + +P IBM 4201 Proprinter II +CDP 4201,437 +CPP 4201.CPI +GP GRAPHICS + +P IBM 4202 Proprinter XL +CDP 4201,437 +CPP 4201.CPI +GP GRAPHICS + +P IBM 4207 Proprinter X24 +CDP 4208,437 +CPP 4208.CPI +GP GRAPHICS + +P IBM 4208 Proprinter XL24 +CDP 4208,437 +CPP 4208.CPI +GP GRAPHICS + +P IBM 5152 Graphics Printer Model 2 +GP GRAPHICS + +P IBM 5182 Color Printer +GP COLOR1 + +P IBM 5201 Quietwriter Printer + +P IBM 5201 Quietwriter Printer Model 2 +GP GRAPHICS + +P IBM 5202 Quietwriter III Printer +CDP 5202,437 +CPP 5202.CPI +GP GRAPHICS + +P IBM 5204 Quickwriter Printer +CDP 5202,437 +CPP 5202.CPI +GP GRAPHICS + +P IBM 5216 Wheelprinter + +P IBM 5223 Wheelprinter E + +P Other IBM Parallel Printer + +P Other Parallel Printer + +S IBM 3812 Pageprinter +SP BAUD=96 PARITY=E DATA=8 STOP=1 RETRY=P +GP GRAPHICS + +S IBM 4201 Proprinter (Serial) +SP BAUD=96 PARITY=E DATA=8 STOP=1 +GP GRAPHICS + +S IBM 4201 Proprinter II (Serial) +SP BAUD=96 PARITY=E DATA=8 STOP=1 +GP GRAPHICS + +S IBM 4202 Proprinter XL (Serial) +SP BAUD=96 PARITY=E DATA=8 STOP=1 +GP GRAPHICS + +S IBM 4207 Proprinter X24 (Serial) +SP BAUD=96 PARITY=E DATA=8 STOP=1 +GP GRAPHICS + +S IBM 4208 Proprinter XL24 (Serial) +SP BAUD=96 PARITY=E DATA=8 STOP=1 +GP GRAPHICS + +S IBM 5204 Quickwriter Printer (Serial) +SP BAUD=96 PARITY=E DATA=8 STOP=1 +GP GRAPHICS + +S Other IBM Serial Printer + +S Other Serial Printer diff --git a/v4.0/src/SELECT/USA.TXT b/v4.0/src/SELECT/USA.TXT new file mode 100644 index 0000000..f59729a --- /dev/null +++ b/v4.0/src/SELECT/USA.TXT @@ -0,0 +1,1185 @@ +.TOPICLEN. 53 +.MAXNUMHLP. 57 +.HELPID. 1 +.TOPICTEXT.Key Assignments Help +.HELPTEXT. Key Assignments Help& +& +Enter Places into memory the information& + you select or type.& +& +Esc Cancels the current screen and returns& + you to the previous screen. Information& + on the current screen is not saved.& +& +Tab Moves the selection cursor to the next& + choice or entry on a screen.& +& + Moves the cursor in the direction of the& + arrow.& +& +F1 Displays help information.& +& +F3 Exits the SELECT program. The information& + you selected or typed is not saved.& + +& +F9 Displays the key assignments and their& + functions.& +.HELPTEND. + + +.HELPID. 2 +.TOPICTEXT.Help Facility Help +.HELPTEXT. @ Help Facility Help +& +Help is available whenever F1=Help appears on a screen. +To get help for an item, highlight the item and press F1.& +& +From a help panel you can press the F9 key to view the +key assignments.@ +.HELPTEND. + + +.HELPID. 3 +.TOPICTEXT.Minimum DOS Function Help +.HELPTEXT. @ Minimum DOS Function Help +& +Select this option to allocate more memory for +running programs than for using DOS +functions. This option is useful if you +use a large number of files or you calculate large +amounts of data. Database and spreadsheet programs, +for example, require large amounts of memory. +Select this option if your system has 256K of memory +installed.@ +.HELPTEND. + + +.HELPID. 4 +.TOPICTEXT.Balance DOS Function Help +.HELPTEXT. @ Balance DOS Function Help +& +Select this option to balance the memory between the +DOS functions and the programs you use. +This option provides sufficient memory for programs +such as word processors or text editors. +Select this option if your system has 512K of memory installed.@ +.HELPTEND. + + +.HELPID. 5 +.TOPICTEXT.Maximum DOS Function Help +.HELPTEXT. @ Maximum DOS Function Help +& +Select this option if you want to allocate the +maximum amount of memory for DOS functions.& +Select this option if your system has more than +512K of memory installed.@ +.HELPTEND. + + +.HELPID. 6 +.TOPICTEXT.Accept Country and Keyboard Help +.HELPTEXT. @ Accept Country and Keyboard Help +& +Select this option to accept the country and +keyboard shown. The SELECT program assigns +the appropriate monetary symbol, decimal +separator, date and time format, and keyboard +layout.@ +.HELPTEND. + + +.HELPID. 7 +.TOPICTEXT.Specify Country and Keyboard Help +.HELPTEXT. @ Specify Country and Keyboard Help +& +Select this option to choose a different country +and keyboard layout.@ +.HELPTEND. + + +.HELPID. 8 +.TOPICTEXT.Country Help +.HELPTEXT. @ Country Help +& +Use the Up or Down arrow keys to select a country, +then press Enter. The SELECT program assigns the +appropriate monetary symbol, decimal separator, +and date and time format for the country.@ +.HELPTEND. + + +.HELPID. 9 +.TOPICTEXT.Keyboard Help +.HELPTEXT. @ Keyboard Help +& +Use the Up or Down arrow keys to select a keyboard, +then press Enter.& +& +Select "None" if you do not want to change the +keyboard layout.& +& +The SELECT program assigns the appropriate keyboard +layout.@ +.HELPTEND. + + +.HELPID. 10 +.TOPICTEXT.Keyboard Layout Help +.HELPTEXT. @ Keyboard Layout Help +& +The keyboard you selected has two versions.& +& +Use the Up or Down arrow key to select the +keyboard version you want, then press Enter.@ +.HELPTEND. + + +.HELPID. 11 +.TOPICTEXT.Installation Drive Help +.HELPTEXT. Installation Drive Help +& +Use the Up or Down arrow key to select& +the drive you want to install DOS on,& +then press Enter.& +& +Option 1 installs DOS on a fixed disk,& +drive C.& +& +Option 2 installs DOS on a diskette.& +.HELPTEND. + + +.HELPID. 12 +.TOPICTEXT.DOS Location Help +.HELPTEXT. @ DOS Location Help +& +Accept or change the directory name shown.& +& +If you accept the directory name, DOS utilities +are placed in the DOS directory.& +& +If you change the directory name, DOS utilities +are placed in the directory you specify. +The directory name can have up to eight characters. +A backslash (\) must precede the directory name.& +& +Example : C:\MINE& +& + C: specifies the drive and \MINE is& + the new directory name.& +& +You can specify a directory path. The directory path can +have up to 40 characters. Use the backslash (\) to separate +the directory names in a path. +& +Example: C:\DOS\DIR1\DIR2& +& + C: specifies the drive and& + \DOS\DIR1\DIR2 is the directory path.@ +.HELPTEND. + + +.HELPID. 13 +.TOPICTEXT.Printer Selection Help +.HELPTEXT. @ Printer Selection Help +& +Type in a number from 0 through 7 to show the number of +printers attached to your system.@ +.HELPTEND. + + +.HELPID. 14 +.TOPICTEXT.Printer Type Help +.HELPTEXT. @ Printer Type Help +& +Use the Up or Down arrow keys to select the name of your +printer, then press Enter. If the printer attached to your +system is not listed, select "Other" to identify the type +of printer you are using. When more than one printer is +attached, this list reappears for each printer. +If you do not know the name or type of printer you have, +check the printer label or the manual that came with the +printer.@ +.HELPTEND. + + + +.HELPID. 15 +.TOPICTEXT.Parallel Printer Port Help +.HELPTEXT. @ Parallel Printer Port Help +& +If you have one printer, press Enter to accept LPT1.& +& +If you have two printers, select LPT1 for your primary +printer and LPT2 for your secondary printer. If you +have three printers, select LPT3 for the third one.& +& +You can assign only one printer to each port.@ +.HELPTEND. + + +.HELPID. 16 +.TOPICTEXT.Serial Printer Port Help +.HELPTEXT. @ Serial Printer Port Help +& +If you have one printer, press Enter to accept COM1.& +& +If you have two printers, select COM1 for your primary +printer and COM2 for you secondary printer. If you +have three printers, select COM3 for the third one. +If you have four printers, select COM4 for the fourth +printer.& +& +You can assign only one printer to each port.& +& +Note: Other devices, such as modems, lightpens, or a +mouse, attach to serial ports. If you have one of these +devices, refer to the manual that came with the device +to determine which serial port to use.& +& +If you refer to your serial printer by a parallel port +name, press the Tab key to move to the options at the +bottom of the screen.@ +.HELPTEND. + + +.HELPID. 17 +.TOPICTEXT.Serial Printer/Parallel Port Help +.HELPTEXT. @ Serial Printer/Parallel Port Help +& +This option allows you to refer to your serial printer +as a parallel printer. This option is useful if your +programs require that printer output be sent to a +parallel port.& +& +Select "None" if you use your printer only as a serial +printer.& +& +If you have one serial printer that you use as a +parallel printer select LPT1.& +& +If you have more than one serial printer that you +use as a parallel printer, select LPT 1 for your +primary printer, LPT2 for your secondary printer, +and LPT3 for your third printer.& +& +Do not select a parallel port for a serial printer if +that port has a parallel printer attached.@ +.HELPTEND. + + +.HELPID. 18 +.TOPICTEXT.Update DOS Files Help +.HELPTEXT. @ Update DOS Files Help +& +Select this option to replace previous DOS files. This +option replaces previous DOS files in the directory specified, +and installs the read-only system files in the root directory. & +& +This option does not replace DOS files in subdirectories +other than that specified.@ +.HELPTEND. + + +.HELPID. 19 +.TOPICTEXT.Update DOS Help +.HELPTEXT. @ Update DOS Help +& +Select this option to replace previous DOS files in the directory +you specify on drive C. This option is useful if you want +DOS 4.0 to co-exist with a previous version of DOS or +another operating system, or when your system is a +network server.& +& +This option does not replace system files on an existing +system or DOS files in subdirectories across multiple +logical drives.& +& +For further information on replacing system files, refer to +the "MS-DOS 4.0 Users Guide" book.@ +.HELPTEND. + + + +.HELPID. 20 +.TOPICTEXT.Continue Installation Help +.HELPTEXT. @ Continue Installation Help +& +Select this option to continue installing DOS without +reviewing the selections you made for your CONFIG.SYS +and AUTOEXEC.BAT files.@ +.HELPTEND. + + +.HELPID. 21 +.TOPICTEXT.Change Options Help +.HELPTEXT. @ Change Options Help +& +Select this option to review, change, or add values to +your CONFIG.SYS and AUTOEXEC.BAT files.& +& +Depending on the hardware installed on your system, you +can change or add options, such as expanded memory +support, FASTOPEN, and SHARE.& +& +When you change a selection from NO to YES, it increases +the amount of memory DOS uses.& +& +Refer to the "MS-DOS 4.0 Users Guide" book for additional +information.@ +.HELPTEND. + + +.HELPID. 22 +.TOPICTEXT.Code Page Switching Help +.HELPTEXT. @ Code Page Switching Help +& +Accept or change the choice shown.& +& +If you selected Denmark, Portugal, Norway, +or French-speaking Canada on a previous +display, set this choice to Yes. +& +Code Page Switching allows you +to change from one character set to +another so you can display or +print characters in different +languages.@ +.HELPTEND. + + +.HELPID. 23 +.TOPICTEXT.Expanded Memory Support Help +.HELPTEXT. @ Expanded Memory Support Help +& +Accept or change the choice shown.& +& +DOS uses expanded memory to hold part +of the operating system. This provides +more memory for running programs that +require expanded memory support.& +& +Expanded Memory is available on the IBM +Personal System/2 (registered trademark of International +Business Machines) and on other IBM +PC/AT family and compatible computers with expanded +memory cards.@ +.HELPTEND. + + +.HELPID. 24 +.TOPICTEXT.Extended Display Support Help +.HELPTEXT. @ Extended Display Support Help +& +Accept or change the choice shown.& +& +Extended display support (ANSI.SYS) +replaces the standard +input and output support on your +system. ANSI.SYS provides extended +features, such as redefining keys, +manipulating the cursor, and displaying +color attributes.@ +.HELPTEND. + + +.HELPID. 25 +.TOPICTEXT.FASTOPEN Support Help +.HELPTEXT. @ FASTOPEN Support Help +& +Accept or change the choice shown.& +& +FASTOPEN allows quick access to +recently opened files.@ +.HELPTEND. + + +.HELPID. 26 +.TOPICTEXT.GRAFTABL Display Support Help +.HELPTEXT. @ GRAFTABL Display Support Help +& +Accept or change the choice shown.& +& +GRAFTABL (Graphics Table) allows you +to display additional characters from +the National Language Code Page when +you use a color/graphics display adapter in +graphics mode.@ +.HELPTEND. + + + +.HELPID. 27 +.TOPICTEXT.GRAPHICS Support Help +.HELPTEXT. @ GRAPHICS PrtSc Support Help +& +Accept or change the choice shown.& +& +GRAPHICS allows you to print the +contents of a graphics display. +This option prints graphics, such as +drawings, graphs, or charts. +Without GRAPHICS, you can print +text characters only.@ +.HELPTEND. + +.HELPID. 28 +.TOPICTEXT.SHARE Support Help +.HELPTEXT. @ DOS SHARE Support Help +& +Accept or change the choice shown.& +& +SHARE provides support for file sharing and +diskette change protection.@ +.HELPTEND. + + +.HELPID. 29 +.TOPICTEXT.SHELL Support Help +.HELPTEXT. @ DOS SHELL Support Help +& +Accept or change the choice shown.& +& +The Shell program allows you to make selections +from menus instead of typing DOS commands.& +& +For additional information on the Shell program, +refer to the "MS-DOS 4.0 Users Guide" +book.@ +.HELPTEND. + + +.HELPID. 30 +.TOPICTEXT.Virtual Disk (RAMDRIVE) Support Help +.HELPTEXT. @ Virtual Disk Support Help +& +Accept or change the choice shown.& +& +RAMDRIVE allows you to use part of your +system memory to simulate a fixed disk +drive. A virtual drive permits quick +access to files, but it is temporary, +and data stored on the virtual drive +is lost when you turn off the system.@ +.HELPTEND. + + +.HELPID. 31 +.TOPICTEXT.DOS PATH Help +.HELPTEXT. @ DOS PATH Help +& +Accept or change the choice shown.& +& +DOS uses a path to search for files that +are not located in the current directory.& +DOS PATH searches only for files with the extensions +.COM, .EXE, or .BAT. The (;) separates the pathnames.& +& +You can type up to 120 characters in this field. +If your typing scrolls out of view, use the right +or left arrow keys to see it.& +& +Example: C:\DOS;C:\DIR1;C:\DIR2& +& + PATH searches and locates files& + in the DOS, DIR1, and DIR2& + directories on drive C.@ +.HELPTEND. + + +.HELPID. 32 +.TOPICTEXT.APPEND Path Help +.HELPTEXT. @ APPEND Path Help +& +Accept or change the choice shown.& +& +DOS uses a path to search for files that are +not in the current directory. APPEND searches +only for data files with extensions other than .COM, +.EXE, or .BAT. The (;) separates the pathnames.& +& +You can type up to 120 characters in this field. +If your typing scrolls out of view, use the right +or left arrow keys to see it.& +& +Example: C:\DOS;C:\DIR1;C:\DIR2& +& + APPEND searches and locates files& + in the DOS, DIR1, and DIR2& + directories on drive C.@ +.HELPTEND. + + +.HELPID. 33 +.TOPICTEXT.PROMPT Help +.HELPTEXT. @ PROMPT Help +& +Accept or change the choice shown.& +& +Use the following list as a guide. You can type +up to 120 characters in this field. If your +typing scrolls out of view, use the right or +left arrow keys to see it.& +& +The default DOS prompt is C:\>.& +& +PROMPT entries :& +& +$B for the : character& +& +$D for the current date& +& +$E for the Esc character& +& +$G for the > character& +& +$H for backspace; the previous& + character is erased& +& +$N for the current drive& +& +$P for the current directory& +& +$Q for the = character& +& +$T for the current time& +& +$V for the DOS version& +& +$1 for the < character& +& +$$ for the $ character& +& +$_ for advance a line& +& +Example: C>prompt HELLO& +& + Sets the DOS prompt to& + the message HELLO.@ +.HELPTEND. + + +.HELPID. 34 +.TOPICTEXT.SHELL Parameters Help +.HELPTEXT. @ SHELL Parameters Help +& +Accept or change the choices shown.& +& +Use the following list as a guide. You can type up +to 115 characters in this field. If your typing +scrolls out of view, use the right or left arrow +keys to see it.& +& +The Shell program uses menus that allow you to make +selections instead of typing DOS commands.& +& +SHELL entries:& +& + /B:xxx Specifies a buffer size& +& + /CLR:SHELL.CLR& + Identifies the filename for the Shell& + color setup. SHELL.CLR is the default.& +& + /CO1& + Displays the Shell in 16-color,& + high-resolution 640 x 350 graphics& +& + /CO2& + Displays the Shell in 2-color,& + high resolution graphics& +& + /CO3& + Displays the Shell in 16-color,& + high-resolution 640 x 480 graphics& +& + /COLOR& + Activates the "Change colors" option& +& + /COM2& + Identifies a serial mouse installed on the& + second serial port (installation default& + is COM1)& +& + /DATE& + Displays the date and time& +& + /DOS& + Activates the File System in the Shell& +& + /EXIT& + Activates the "Exit Shell" option& +& + /LF& + Enables a mouse for left-handed use& +& + /MAINT& + Activates the ability to do& + maintenance in Start Programs& +& + /MENU& + Activates the Start Programs in the& + Shell& +& + /MEU:SHELL.MEU& + Identifies the filename of the Main Group& + structure for the Start Programs& +& + /MOS:PCIBMDRV.MOS& + Identifies the filename of the IBM mouse& + driver& +& + /MOS:PCMSDRV.MOS& + Identifies the filename of the Microsoft& + serial mouse driver& +& + /MOS:PCMSPDRV.MOS& + Identifies the filename of the Microsoft& + parallel mouse driver& +& + /MUL& + Provides multiple directory and file& + buffers in the File System& +& + /PROMPT& + Activates the Shell command prompt& +& + /SND& + Enables the speaker for sound& +& + /SWAP& + Activates saving (swapping) files and& + directories to a disk file while& + performing tasks at the Shell command& + prompt& +& + /TEXT& + Displays the Shell in text mode& +& + /TRAN& + Operates the Shell in transient mode@ +.HELPTEND. + + +.HELPID. 35 +.TOPICTEXT.FASTOPEN Parameters Help +.HELPTEXT. @ FASTOPEN Parameters Help +& +Accept or change the choice shown.& +& +Use the following list as a guide. You can type +up to 60 characters in this field. If your typing +scrolls out of view, use the left or right arrow +keys to see it.& +& +FASTOPEN allows quick access to recently +opened files.& +& +FASTOPEN entries:& +& +C:& + Specifies the drive& +& +N = 10 to 999& + Specifies the number of directories or& + file entry buffers allocated in memory& +& +M = 1 to 999& + Specifies the number of continuous& + space buffers allocated in memory& +& +/X& + Used when expanded memory support is& + available. When using the /X option& + the value of "N" or "M" should not& + exceed 150.& +& +Example: C:=(50,25)& +& + Specifies FASTOPEN on drive C with& + 50 file and directory entry buffers and& + 25 continuous space buffers.@ +.HELPTEND. + + +.HELPID. 36 +.TOPICTEXT.SHARE Parameters Help +.HELPTEXT. @ SHARE Parameters Help +& +Accept or change the choice shown.&& +Use the following list as a guide.& +& +SHARE provides support for file sharing and +diskette change protection.& +& +SHARE Parameters:& +& + /F: Allocates file space in bytes for the& + area used to record information for file& + sharing& +& + /L: Allocates space for the number of locks& + you want. Lock denies read/write access& + to regions of a file.& +& +Example: /F:2048 /L:20& +& + Specifies a filespace of 2048 bytes and& + 20 locks.@ +.HELPTEND. + + +.HELPID. 37 +.TOPICTEXT.GRAPHICS Parameters Help +.HELPTEXT. @ GRAPHICS Parameters Help +& +Accept or change the choice shown.& +& +Use the following list as a guide. You can type +up to 80 characters in this field. If your typing +scrolls out of view, use the left or right arrow +keys to see it.& +& +GRAPHICS prints the contents of a graphics display. +This is useful, if you print charts, tables, or +drawings.& +& +GRAPHICS Parameters:& +& + COLOR1& + IBM 5182 Color Printer with black ribbon& +& + COLOR4& + IBM 5182 Color Printer with red, green,& + blue, and black ribbon& +& + COLOR8& + IBM 5182 Color Printer with black, cyan,& + magenta, and yellow ribbon& +& + GRAPHICS& + IBM 5152 Graphics Printer& + IBM Proprinters& + IBM 3812 Pageprinter& + IBM 5202 Quietwriter (registered& + trademark of International Business& + Machines) III Printer& + IBM 5204 Quickwriter (trademark of& + International Business Machines) Printer& +& + GRAPHICSWIDE& + IBM 5152 Graphics Printer& + IBM Proprinters (both are set for wide& + paper)& +& + THERMAL& + IBM 5140 Convertible Printer& +& + /B& + Specifies background color printing for& + COLOR4 and COLOR8 printers& +& + /LCD& + Prints data as it appears on a liquid& + crystal display& +& + /R& + Prints black and white as it appears on& + the display& +& +Example: COLOR8 /B/R& +& + Specifies black, white, and background& + color printing for the 5182 Color Printer.& +& + /PB:ID& + Prints data using the print box size& + specified by the ID. The ID should match& + the first operand of a Printbox statement& + in the printer profile. You may use& + /PRINTBOX:ID in place of /PB:ID.& +& +Supported IDS:& +& +LCD& + Specifies the LCD printbox. When used& + with an LCD display, the data is printed& + as it appears on the LCD display.& + This entry has the same effect as /LCD.& +& +STD& + Specifies standard printbox, which is the& + default value.@ +.HELPTEND. + + +.HELPID. 38 +.TOPICTEXT.XMAEM Parameters Help +.HELPTEXT. @ XMAEM Parameters Help +& +Accept or change the choice shown. Type, in 16KB +increments, the amount of memory you want to allocate. +If you do not specify an amount, the system allocates +all memory above 1MB.& +& +XMAEM enables your system to access the extended memory +available as expanded memory.& +& +Example: DEVICE=XMAEM.SYS 64& +& + Allocates 1 megabyte of extended memory.& +& +For additional information, refer +to the "MS-DOS 4.0 Users Guide" book.@ +.HELPTEND. + + +.HELPID. 39 +.TOPICTEXT.XMA2EMS Parameters Help +.HELPTEXT. @ XMA2EMS Parameters Help +& +Accept or change the choice shown. If you change +the segment address values, you must +define unused 64KB contiguous space for the FRAME and +unused 16KB contiguous space for the Pxxx pages.& +& +Example: FRAME=D000 P254=C000 P255=C400& +& +Note: These values are sample defaults only and& + may not reflect actual free segments in your& + system.& +& +For additional information, refer to the "MS-DOS 4.0 +Users Guide" book.@ +.HELPTEND. + + +.HELPID. 40 +.TOPICTEXT.RAMDRIVE Parameters Help +.HELPTEXT. @ RAMDRIVE Parameters Help +& +Accept or change the choice shown. Use the +following list as a guide.& +& +RAMDRIVE allows you to use part of the system +memory to simulate a fixed disk drive. A +virtual drive permits quick access to files, +but it is temporary, and data stored on a +virtual drive is lost when you turn off +the system.& +& +RAMDRIVE Parameters:& +& + Buffer:& + Buffer size in kilobytes;& + 16KB is the minimum buffer size& +& + Sector:& + Sector size in bytes;& + 128, 256, 512, or 1024 bytes& +& + Directory entries:& + Number of root directory entries;& + 3 to 1024& +& + /E& + Used when extended memory support& + is available& +& + /A& + Used when expanded memory support& + is available& +& +Example: 160 512 64& +& + Specifies the size of the buffers,& + sectors, and the number of directories.@ +.HELPTEND. + + +.HELPID. 41 +.TOPICTEXT.BREAK Help +.HELPTEXT. BREAK (Control Break) Help +& +Accept or change the choice shown.& +& +ON: DOS always checks for a Ctrl+Break key& + sequence and permits input or output to& + a device to be canceled.& +& +OFF: DOS checks for a Ctrl+Break key sequence only& + during standard input, output, print, and& + auxiliary device operations.& +.HELPTEND. + + +.HELPID. 42 +.TOPICTEXT.BUFFERS Help +.HELPTEXT. @ BUFFERS Help +& +Accept or change the choice shown. Use the +following list as a guide.& +& +The value shown specifies the number of disk buffers +DOS allocates in memory. If a second value is shown, +this value specifies the number of sectors the system +can read or write when processing an input or output +operation.& +& +If you do not specify a buffer, DOS sets a value +based on the amount of system memory.& +& +BUFFERS Values:& +& +1 to 99 Number of buffers the system uses& +& +1 to 8 Number of sectors the system can& + read or write in processing an input& + or output operation@ +.HELPTEND. + + +.HELPID. 43 +.TOPICTEXT.APPEND Parameter Help +.HELPTEXT. @ APPEND Parameter Help +& +Accept or change the choice shown. Use the +following list as a guide.& +& +APPEND locates data files outside of the current +directory that have extensions other then .COM, +.EXE, or .BAT.& +& +APPEND Parameters:& +& +/X:ON or /X& + Tells APPEND to search and process& + executable files& +& + /X:OFF (default value)& + Tells APPEND not to search and& + process executable files.& +& +/PATH:ON (default value)& + Tells APPEND to search for files that have& + a drive or a path specified& +& +/PATH:OFF& + Tells APPEND not to search for files that& + have a drive or a path specified& +& +/E& + Keeps the APPEND paths in the DOS& + environment. APPEND searches the& + environment on each call to find the path.& +& +;& + Separates the APPEND paths, or cancels the& + APPEND paths if the semi-colon is the only& + parameter used.& +& +Example: /E /X& + APPEND is in the DOS environment& + where it searches and processes& + executable files with extensions of& + .COM, .EXE, or .BAT.@ +.HELPTEND. + + +.HELPID. 44 +.TOPICTEXT.FCBS Help +.HELPTEXT. @ FCBS Help +& +Accept or change the choice shown. Use the +following list as a guide.& +& +FCBS allows you to specify the number of file +control blocks that DOS can open concurrently.& +& +FCBS Values:& +& + 1 to 255 Number of file control blocks& +& + 0 to 255 Number of protected file control blocks& +& +Example: 20,10& +& + Specifies 20 FCBS open and 10 protected& + from being automatically closed by DOS.@ +.HELPTEND. + + +.HELPID. 45 +.TOPICTEXT.FILES Help +.HELPTEXT. @ FILES Help +& +Accept or change the choice shown.& +& +If you do not specify a value, DOS uses a value of 8.& +& +The value specifies the number of files that& +can be open at any one time. The value can be& +from 8 through 255.@ +.HELPTEND. + + +.HELPID. 46 +.TOPICTEXT.LASTDRIVE Help +.HELPTEXT. @ LASTDRIVE Help +& +Accept or change the choice shown.& +& +If you do not specify a value, DOS uses a value of E.& +& +This value identifies the last drive installed on +your system. The value can be a letter from A through +Z, and it must represent the last valid drive letter +that DOS can accept.@ +.HELPTEND. + + +.HELPID. 47 +.TOPICTEXT.STACKS Help +.HELPTEXT. @ STACKS Help +& +Accept or change the choice shown.& +& +This value (if any) specifies stack resources. +Use the following list as a guide. You must +specify a number for each frame and a size, +in bytes, for each frame.& +& +STACKS Values:& +& +8 to 64 Number of stack frames& +& +32 to 512 Size of each stack frame& +& +Example: 8 128& +& + Specifies 8 stack frames of 128 bytes& + each.@ +.HELPTEND. + + +.HELPID. 48 +.TOPICTEXT.VERIFY Help +.HELPTEXT. @ VERIFY Help +& +Accept or change the choice shown.& +& +VERIFY confirms that data is correctly +written to a disk.& +& +ON: DOS confirms the data can be read& + without error.& +& +OFF: DOS does not verify the data.@ +.HELPTEND. + + +.HELPID. 49 +.TOPICTEXT.Use SELECT Partition Sizes Help +.HELPTEXT. @ Use SELECT Partition Sizes Help +& +Select this option to partition your fixed +disk into one partition.& +& +Note: If you have a Personal System/2 with a& + partition greater than 32MB and want to& + install a keyboard password, refer to the& + "MS-DOS 4.0 Users Guide" book for& + additional information.@ +.HELPTEND. + + +.HELPID. 50 +.TOPICTEXT.Define Your Own Partitions Sizes Help +.HELPTEXT. @ Define Your Own Partitions Sizes Help +& +Select this option if you want to use FDISK to partition +your fixed disk.& +& +Note: If you have a Personal System/2 with a& + partition greater than 32MB and want to& + install a keyboard password, refer to the& + "MS-DOS 4.0 Users Guide" book for& + additional information.@ +.HELPTEND. + + +.HELPID. 51 +.TOPICTEXT.Leave Disk Unchanged Help +.HELPTEXT. @ Leave Disk Unchanged Help +& +Select this option if you do not want to change +the non-allocated partition space on your fixed disk.@ +.HELPTEND. + + +.HELPID. 52 +.TOPICTEXT.Define Your Own Sizes Help +.HELPTEXT. @ Define Your Own Sizes Help +& +Select this option if you want to partition the non-allocated +space on your fixed disk. Refer to the "MS-DOS 4.0 Users +Guide" book for information on using FDISK.@ +.HELPTEND. + +.HELPID. 53 +.TOPICTEXT.Date and Time Help +.HELPTEXT. @ Date and Time Help +& +Type the date and time in the fields provided. The system clock +keeps an accurate record of the date and time.@ +.HELPTEND. + + +.HELPID. 54 +.TOPICTEXT.Format Fixed Disk Help +.HELPTEXT. @ Format Fixed Disk Help +& +Select this option to format your fixed disk. +A partition must be formatted before data can +be placed on it.& +& +Warning : +If your fixed disk is already formatted, this option will +reformat the disk and destroy all information on +the disk. Refer to the "MS-DOS 4.0 Users Guide" +book for additional information.@ +.HELPTEND. + + +.HELPID. 55 +.TOPICTEXT.Do Not Format Fixed Disk Help +.HELPTEXT. @ Do Not Format Fixed Disk Help +& +Select this option if you do not want to format +your fixed disk.@ +.HELPTEND. + + +.HELPID. 56 +.TOPICTEXT.Install the MS-DOS Shell Help +.HELPTEXT. @ Install the MS-DOS Shell Help +& +Select this option if you want the MS-DOS Shell +to be installed by SELECT onto the target system.& +& +The MS-DOS Shell lets you choose options from +menus instead of typing DOS commands.@ +.HELPTEND. + + +.HELPID. 57 +.TOPICTEXT.Do not install the MS-DOS Shell Help +.HELPTEXT. @ Do not install the MS-DOS Shell Help +& +Select this option if you do not want the MS-DOS +Shell to be installed by SELECT onto the target +system.@ +.HELPTEND. + \ No newline at end of file diff --git a/v4.0/src/SELECT/VAR.ASM b/v4.0/src/SELECT/VAR.ASM new file mode 100644 index 0000000..0074a81 --- /dev/null +++ b/v4.0/src/SELECT/VAR.ASM @@ -0,0 +1,946 @@ +PAGE 60,132 ;AN000; +NAME SELECT ;AN000; +TITLE VARIABLES - DOS - SELECT.EXE ;AN000; +SUBTTL var.asm ;AN000; +.ALPHA ;AN000; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; VAR.ASM: Copyright 1988 Microsoft +; +; DATE: August 8/87 +; +; COMMENTS: Assemble with MASM 3.0 (using the /A option) +; +; Module contains variables used by SELECT. +; +; CHANGE HISTORY: +; +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; + INCLUDE SYSMSG.INC ;AN000; + MSG_UTILNAME