summaryrefslogtreecommitdiff
path: root/v4.0/src/SELECT
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/SELECT')
-rw-r--r--v4.0/src/SELECT/ASM2C.ASM191
-rw-r--r--v4.0/src/SELECT/BRIDGE.ASM25
-rw-r--r--v4.0/src/SELECT/CASERVIC.ASM2644
-rw-r--r--v4.0/src/SELECT/CASEXTRN.INC39
-rw-r--r--v4.0/src/SELECT/CASSFAR.LIBbin0 -> 87455 bytes
-rw-r--r--v4.0/src/SELECT/CASTRUC.INC239
-rw-r--r--v4.0/src/SELECT/CKDISP.ASM151
-rw-r--r--v4.0/src/SELECT/COLORS.ASM83
-rw-r--r--v4.0/src/SELECT/DATA.MAC502
-rw-r--r--v4.0/src/SELECT/DOS.EQU359
-rw-r--r--v4.0/src/SELECT/DOSFILES.INC20
-rw-r--r--v4.0/src/SELECT/EXT.INC577
-rw-r--r--v4.0/src/SELECT/EXTERN.H76
-rw-r--r--v4.0/src/SELECT/GEN_COMS.ASM864
-rw-r--r--v4.0/src/SELECT/GET_HELP.ASM233
-rw-r--r--v4.0/src/SELECT/GET_STAT.C1216
-rw-r--r--v4.0/src/SELECT/GET_STAT.H191
-rw-r--r--v4.0/src/SELECT/GLOBAL.C79
-rw-r--r--v4.0/src/SELECT/INITMEM.ASM394
-rw-r--r--v4.0/src/SELECT/INPUT.ASM1737
-rw-r--r--v4.0/src/SELECT/INT13.C194
-rw-r--r--v4.0/src/SELECT/INTVEC.ASM546
-rw-r--r--v4.0/src/SELECT/MACROS.INC540
-rw-r--r--v4.0/src/SELECT/MACROS2.INC437
-rw-r--r--v4.0/src/SELECT/MACROS3.INC382
-rw-r--r--v4.0/src/SELECT/MACROS4.INC345
-rw-r--r--v4.0/src/SELECT/MACROS5.INC538
-rw-r--r--v4.0/src/SELECT/MACROS6.INC719
-rw-r--r--v4.0/src/SELECT/MACROS7.INC126
-rw-r--r--v4.0/src/SELECT/MACROS8.INC48
-rw-r--r--v4.0/src/SELECT/MAC_EQU.INC87
-rw-r--r--v4.0/src/SELECT/MAKEFILE249
-rw-r--r--v4.0/src/SELECT/MOD_COPY.ASM2484
-rw-r--r--v4.0/src/SELECT/MPARSE.ASM39
-rw-r--r--v4.0/src/SELECT/PAN-LIST.INC191
-rw-r--r--v4.0/src/SELECT/PANEL.MAC440
-rw-r--r--v4.0/src/SELECT/PANELS.ASM4374
-rw-r--r--v4.0/src/SELECT/PCEQUATE.INC451
-rw-r--r--v4.0/src/SELECT/PCGEQU.INC170
-rw-r--r--v4.0/src/SELECT/PRN_DEF.ASM1556
-rw-r--r--v4.0/src/SELECT/ROUTINE2.ASM1369
-rw-r--r--v4.0/src/SELECT/ROUTINES.ASM1626
-rw-r--r--v4.0/src/SELECT/ROUT_EXT.INC74
-rw-r--r--v4.0/src/SELECT/SCN_PARM.ASM299
-rw-r--r--v4.0/src/SELECT/SCROLL.ASM3356
-rw-r--r--v4.0/src/SELECT/SEL-PAN.ASM48
-rw-r--r--v4.0/src/SELECT/SEL-PAN.INC307
-rw-r--r--v4.0/src/SELECT/SEL-PAN.LNK5
-rw-r--r--v4.0/src/SELECT/SELCHILD.ASM62
-rw-r--r--v4.0/src/SELECT/SELECT.INC54
-rw-r--r--v4.0/src/SELECT/SELECT.LNK36
-rw-r--r--v4.0/src/SELECT/SELECT.MAK287
-rw-r--r--v4.0/src/SELECT/SELECT.PRT75
-rw-r--r--v4.0/src/SELECT/SELECT.SKL43
-rw-r--r--v4.0/src/SELECT/SELECT0.ASM372
-rw-r--r--v4.0/src/SELECT/SELECT1.ASM447
-rw-r--r--v4.0/src/SELECT/SELECT2.ASM589
-rw-r--r--v4.0/src/SELECT/SELECT2A.ASM381
-rw-r--r--v4.0/src/SELECT/SELECT3.ASM286
-rw-r--r--v4.0/src/SELECT/SELECT4.ASM438
-rw-r--r--v4.0/src/SELECT/SELECT5.ASM576
-rw-r--r--v4.0/src/SELECT/SELECT5A.ASM186
-rw-r--r--v4.0/src/SELECT/SELECT6.ASM561
-rw-r--r--v4.0/src/SELECT/SELECT7.ASM464
-rw-r--r--v4.0/src/SELECT/SELECT8.ASM453
-rw-r--r--v4.0/src/SELECT/SELECT9.ASM518
-rw-r--r--v4.0/src/SELECT/SELQUIT.ASM313
-rw-r--r--v4.0/src/SELECT/SELSERV.ASM108
-rw-r--r--v4.0/src/SELECT/SEL_FILE.INC578
-rw-r--r--v4.0/src/SELECT/SERVICES.ASM899
-rw-r--r--v4.0/src/SELECT/SSTUB.ASM209
-rw-r--r--v4.0/src/SELECT/S_DISPLY.ASM112
-rw-r--r--v4.0/src/SELECT/TRANS.CHG24
-rw-r--r--v4.0/src/SELECT/USA.INF2381
-rw-r--r--v4.0/src/SELECT/USA.PRT88
-rw-r--r--v4.0/src/SELECT/USA.TXT1185
-rw-r--r--v4.0/src/SELECT/VAR.ASM946
-rw-r--r--v4.0/src/SELECT/VARSTRUC.INC65
-rw-r--r--v4.0/src/SELECT/XCOPY.EQU144
-rw-r--r--v4.0/src/SELECT/XMAINMSG.EQU44
80 files changed, 43544 insertions, 0 deletions
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 @@
1page 60,132 ;AN000;
2name asm2c ;AN000;
3title Limited assembler to C interface;AN000;
4;-------------------------------------------------------------------
5;
6; MODULE: asm2c
7;
8; PURPOSE:
9; This routine is used as to map the assembly language
10; call made by xxx to a C language call.
11;
12; INPUT:
13;
14; ES:DI points to the buffer area where the table data
15; will be copied
16;
17; CALLING FORMAT:
18;
19; DATE: 7-16-87
20;
21;-------------------------------------------------------------------
22
23
24 public gget_status ;AN000;
25 public asm2cInRegs ;AN000;
26 public asm2coutregs ;AN000;
27 public asm2csegregs ;AN000;
28
29_TEXT segment byte public 'CODE' ;AN000;
30_TEXT ends ;AN000;
31_DATA segment word public 'DATA' ;AN000;
32_DATA ends ;AN000;
33CONST segment word public 'CONST' ;AN000;
34CONST ends ;AN000;
35_BSS segment word public 'BSS' ;AN000;
36_BSS ends ;AN000;
37DGROUP GROUP CONST, _BSS, _DATA ;AN000;
38
39_DATA segment word public 'DATA' ;AN000;
40
41;-------------------------------------------------------------------
42; define an assembly language version of the C regs structure
43;-------------------------------------------------------------------
44
45asm2cInRegs equ $ ;AN000;
46
47i_ax dw 0 ;AN000;
48i_bx dw 0 ;AN000;
49i_cx dw 0 ;AN000;
50i_dx dw 0 ;AN000;
51i_si dw 0 ;AN000;
52i_di dw 0 ;AN000;
53i_cflag dw 0 ;AN000;
54
55Asm2cOutRegs equ $ ;AN000;
56
57o_ax dw 0 ;AN000;
58o_bx dw 0 ;AN000;
59o_cx dw 0 ;AN000;
60o_dx dw 0 ;AN000;
61o_si dw 0 ;AN000;
62o_di dw 0 ;AN000;
63o_cflag dw 0 ;AN000;
64
65
66Asm2cSegRegs equ $ ;AN000;
67s_es dw 0 ;AN000;
68s_cs dw 0 ;AN000;
69s_ss dw 0 ;AN000;
70s_ds dw 0 ;AN000;
71
72 extrn _end:far ;AN000;
73
74_DATA ends ;AN000;
75
76_TEXT segment byte public 'CODE' ;AN000;
77
78 extrn _get_status:near ;AN000;
79
80 ASSUME CS: _TEXT ;AN000;
81 assume ds: nothing ;AN000;
82 assume es: nothing ;AN000;
83;-------------------------------------------------------------------
84;-------------------------------------------------------------------
85page ;AN000;
86;-------------------------------------------------------------------
87; ggetstatus
88;
89; This routine will reside in the C code segment
90;
91;-------------------------------------------------------------------
92
93segment_of_dgroup dw seg dgroup;AN000;
94
95SAVE_STACK LABEL DWORD ;AN000;
96SAVE_SP DW 0 ;AN000;
97SAVE_SS DW 0 ;AN000;
98
99SAVE_DS DW 0 ;AN000;
100SAVE_ES DW 0 ;AN000;
101
102gget_status proc far ;AN000;
103
104 MOV SAVE_DS,DS ;AN000;
105 MOV SAVE_ES,ES ;AN000;
106
107 MOV SAVE_SS,SS ;AN000;
108 MOV SAVE_SP,SP ;AN000;
109
110 mov ss,segment_of_dgroup ;AN000;
111 add sp,offset DGROUP:_end ;AN000;
112 ASSUME SS: DGROUP ;AN000;
113
114 MOV DS,segment_of_dgroup ;AN000;
115 ASSUME DS: DGROUP ;AN000;
116
117;-------------------------------------------------------------------
118; set up InRegs
119;-------------------------------------------------------------------
120
121 mov i_ax,ax ;AN000; make InRegs look like real registers
122 mov i_bx,bx ;AN000;
123 mov i_cx,cx ;AN000;
124 mov i_dx,dx ;AN000;
125 mov i_si,si ;AN000;
126 mov i_di,di ;AN000;
127
128;-------------------------------------------------------------------
129; set up SegRegs
130;-------------------------------------------------------------------
131
132 IRP XX,<ES,SS,DS> ;AN000;
133 MOV AX,SAVE_&XX ;AN000;
134 MOV S_&XX,AX ;AN000;
135 ENDM ;AN000;
136
137 mov s_cs,cs ;AN000;
138
139;-------------------------------------------------------------------
140; put far pointers on stack
141;-------------------------------------------------------------------
142
143; push ds ; push far pointer to SegRegs
144 lea ax,DGROUP:Asm2cSegRegs;AN000;
145 push ax ;AN000;
146
147; push ds ; push far pointer to OutRegs
148 lea ax,DGROUP:Asm2cOutRegs;AN000;
149 push ax ;AN000;
150
151; push ds ; push far pointer to InRegs
152 lea ax,DGROUP:Asm2cInRegs;AN000;
153 push ax ;AN000;
154
155;-------------------------------------------------------------------
156 call _get_status ;AN000;
157;-------------------------------------------------------------------
158 add sp,6 ;AN000;
159;-------------------------------------------------------------------
160; set up real registers
161;-------------------------------------------------------------------
162
163 mov ax,o_ax ;AN000; make real registers look like OutRegs
164 mov bx,o_bx ;AN000;
165 mov cx,o_cx ;AN000;
166 mov dx,o_dx ;AN000;
167 mov si,o_si ;AN000;
168 mov di,o_di ;AN000;
169
170;-------------------------------------------------------------------
171; must remove the things we put on the stack
172;-------------------------------------------------------------------
173
174 MOV DS,SAVE_DS ;AN000;
175 MOV ES,SAVE_ES ;AN000;
176 MOV SS,SAVE_SS ;AN000;
177 MOV SP,SAVE_SP ;AN000;
178
179 ret ;AN000;
180
181
182gget_status endp ;AN000;
183
184_TEXT ends ;AN000; end code segment
185
186;-------------------------------------------------------------------
187;-------------------------------------------------------------------
188
189
190 end ;AN000;
191
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 @@
1CODE SEGMENT PARA PUBLIC 'CODE' ;AN000;segment for near routine
2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3 PUBLIC _MAIN ;AN000;
4_MAIN PROC FAR ;AN000;
5 RET ;AN000;
6_MAIN ENDP ;AN000;
7 ;
8 PUBLIC INDBC ;AN000;
9INDBC PROC FAR ;AN000;
10 RET ;AN000;
11INDBC ENDP ;AN000;
12 ;
13 PUBLIC BOXDR ;AN000;
14BOXDR PROC FAR ;AN000;
15 RET ;AN000;
16BOXDR ENDP ;AN000;
17 ;
18 PUBLIC GRAPH ;AN000;
19GRAPH PROC FAR ;AN000;
20 RET ;AN000;
21GRAPH ENDP ;AN000;
22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
23CODE ENDS ;AN000;
24 END ;AN000;
25
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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3;
4; CASERVIC.ASM
5;
6;
7;
8; CAS SERVICES....FROM TSUISRD.ASM
9;
10;
11; DATE: MAY 15, 1987
12;
13;
14;
15; ;AN004; for PTM 1064 temporary fix until the CASSFAR.LIB
16; is fixed. The HELP routines of CAS, zero out the
17; frequency value.
18;
19; ;AN005; The help text comes up blank. No checking was done
20; for invalid helps (HRD_ERROR & HRD_DOSERROR). Now,
21; there is checking added to PCHLPRD_CALL!
22;
23; ;AN006; for PTM 1756 - added error checking for wrong diskette
24; when help accessed. JW
25;
26; ;AN007; for PTM 1810 - during a help request processing, any error
27; caused a problem because the manage_help routine would
28; try to remove a help panel which had not been displayed.
29;
30; ;AN008; for PTM 2191 - added code to display selected option when
31; selection is made by numeric input.
32;
33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
34.ALPHA ;AN000;
35 INCLUDE STRUC.INC ;AN000;
36 INCLUDE MACROS.INC ;AN006;JW
37 INCLUDE PANEL.MAC ;AN000;
38 INCLUDE PAN-LIST.INC ;AN000;
39 INCLUDE SELECT.INC ;AN000;
40 INCLUDE CASTRUC.INC ;AN000;
41 INCLUDE DATA.MAC ;AN000;
42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
43;
44; Variable(s) for Conditional Assembly
45;
46; These conditional assembly values are declared and set in an external
47; file and included during assembly.
48;
49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
50 INCLUDE CASVAR.INC ;AN000;
51 ;
52 EXTRN DISK_PANEL:WORD ;AN000;
53 EXTRN SEARCH_FILE:WORD;AN000;
54 EXTRN FK_ENT:BYTE ;AN000;
55 EXTRN FK_ENT_LEN:ABS ;AN000;
56 EXTRN E_FILE_ATTR:ABS ;AN000;
57 EXTRN E_RETURN:ABS ;AN000;
58 EXTRN ACTIVE:BYTE ;AN000;
59 EXTRN ALTERNATE:BYTE ;AN000;
60 EXTRN LCD:ABS ;AN000;
61 EXTRN E_RETURN:ABS ;AN000;
62 EXTRN ERROR_ACTIVE:BYTE;AN000;
63 EXTRN MEM_SIZE:WORD ;AN024;
64 ;;;;;;;;;
65 EXTRN DISPLAY_MESSAGE_ROUTINE:FAR ;AN024;
66 EXTRN HOOK_INT_24:FAR ;AN000;
67 EXTRN RESTORE_INT_24:FAR ;AN000;
68 EXTRN FIND_FILE_ROUTINE:FAR ;AN000;
69 EXTRN GET_FUNCTION_CALL:NEAR ;AN000;
70 EXTRN HANDLE_CHILDREN:NEAR ;AN000;
71 EXTRN PREPARE_PANEL_CALL:NEAR ;AN000;
72 EXTRN ALLOCATE_HELP:FAR ;AN024;
73 EXTRN DEALLOCATE_HELP:FAR ;AN024;
74 EXTRN ALLOCATE_LVB:FAR ;AN024;
75 EXTRN DEALLOCATE_LVB:FAR ;AN024;
76
77;
78; Table at OFFSET 0 of panel file
79;
80EXT_FILE STRUC ;AN024;
81 PCBS DW 0 ;AN024;offset of PCB vector table
82 NPCBS DW 0 ;AN024;number of PCBs
83 SCBS DW 0 ;AN024;offset of SCB vector table
84 NSCBS DW 0 ;AN024;number of SCBs
85 COLTBL DW 0 ;AN024;offset of COLOR attribute table
86 NCOLTBL DW 0 ;AN024;number of COLOR attribute sets
87 MONTBL DW 0 ;AN024;offset of MONO attribute table
88 NMONTBL DW 0 ;AN024;number of MONO attribute sets
89EXT_FILE ENDS ;AN024;
90 ;
91DATA SEGMENT BYTE PUBLIC 'DATA' ;AN024;
92CFILE DB 'SELECT.DAT',0 ;AN024;compressed panel file
93REPCHAR EQU 255 ;AN024;character used as repeat flag
94DATA ENDS ;AN024; ;AN000;
95 ;
96IF CASFAR ;AN000;
97 IFE CASRM ;AN000;
98 EXTRN INPUT:FAR ;AN000;
99 EXTRN HLPRD:FAR ;AN000;
100 EXTRN SLCTP:FAR ;AN000;
101 EXTRN PANEL:FAR ;AN000;
102 EXTRN DISPQ:FAR ;AN000;
103 EXTRN INCHA:FAR ;AN000;
104 EXTRN MBEEP:FAR ;AN000;
105 EXTRN INSTRN:FAR ;AN000;
106 EXTRN GVIDO:FAR ;AN000;
107 EXTRN WWRAP:FAR ;AN000;
108 ENDIF ;AN000;
109 ;
110SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine
111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
112;
113; IF NEAR procedure, then define segment and EXTRN
114;
115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
116ELSE ;AN000;
117 ;
118SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine
119 IFE CASRM ;AN000;
120 EXTRN INPUT:NEAR ;AN000;
121 EXTRN HLPRD:NEAR ;AN000;
122 EXTRN SLCTP:NEAR ;AN000;
123 EXTRN PANEL:NEAR ;AN000;
124 EXTRN DISPQ:NEAR ;AN000;
125 EXTRN INCHA:NEAR ;AN000;
126 EXTRN MBEEP:NEAR ;AN000;
127 EXTRN INSTRN:NEAR ;AN000;
128 EXTRN GVIDO:NEAR ;AN000;
129 EXTRN WWRAP:NEAR ;AN000;
130 ENDIF ;AN000;
131ENDIF ;AN000;
132 ASSUME CS:SELECT,DS:DATA,ES:DATA ;AN000;
133
134 PUBLIC CURSOROFF,PCGVIDO_CALL,INITIALIZE;AN000;
135 PUBLIC GET_KEY,PCDISPQ_CALL,PCPANEL_CALL;AN000;
136 PUBLIC GET_SCROLL_CALL,PCINPUT_CALL,CURSORON;AN000;
137 PUBLIC GET_SCB,GET_PCB,GET_ICB,PCMBEEP_CALL,PCSLCTP_CALL;AN000;
138 EXTRN GET_HELP_ID:NEAR ;AN000;
139 EXTRN ADJUST_DOWN:NEAR ;AN000;
140 EXTRN ADJUST_UP:NEAR ;AN000;
141 EXTRN INIT_SCROLL_CALL:NEAR ;AN000;
142 EXTRN INIT_PQUEUE_CALL:NEAR ;AN000;
143 EXTRN DISPLAY_PANEL_CALL:NEAR ;AN000;
144 EXTRN HANDLE_ERROR_CALL:FAR ;AN006;JW
145 EXTRN EXIT_SELECT:NEAR ;AN006;JW
146 ;
147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
148;
149; GET_SCROLL_CALL
150;
151; Process scroll field relative to current active panel.
152; Automatically handle help request, display and interaction.
153;
154; Entry: WR_DRETSEG = Segment of dynamic return key string
155; WR_DRETOFF = Offset of dynamic return key string
156; WR_DRETLEN = Length of dynamic return key string
157;
158; WR_HCBCONT = ID of the desired contextual help text
159;
160; WR_SCBID = SCB Number of scroll field
161;
162; AX 0 = Use default highlight and scroll list position
163; 1 = Initialize highlight and scroll list position
164; to the top of the list
165;
166; Exit: AX = Contains keystroke
167; BX = Current element
168;
169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
170PUSHH MACRO REG_LIST ;;AN000;
171 IRP REG,<REG_LIST> ;;AN000;
172 PUSH REG ;;AN000; save registers
173 ENDM ;;AN000;
174 ENDM ;;AN000;
175 ;;
176POPP MACRO REG_LIST ;;AN000;
177 IRP REG,<REG_LIST> ;;AN000;
178 POP REG ;;AN000; return registers to initial state
179 ENDM ;;AN000;
180 ENDM ;;AN000;
181 ;;
182DOSCALL MACRO ;;AN000;
183 INT 21H ;;AN000; call to DOS
184 ENDM ;;AN000;
185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
186;
187;
188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
189GET_SCROLL_CALL PROC NEAR ;AN000;
190 PUSH CX ;AN000;
191 PUSH DX ;AN000;
192 PUSH SI ;AN000;
193 PUSH DI ;AN000;
194 PUSH ES ;AN000;
195; ;
196; Initialize to top ;
197; ;
198 MOV BX,WR_SCBID ;AN000;get PCSLCTP field
199 CALL GET_SCB ;AN000;ES:DI points to SCB
200; ;
201 CMP AX,0 ;AN000;check to start list & highlight
202 JE GS10 ;AN000; at top
203; ;
204 MOV ES:[DI]+SCB_TOPELE,1;AN000;intialize parameters
205 MOV ES:[DI]+SCB_CURELE,AX;AN000;
206; ;
207; Locate PCB data and initialize SCB ;
208; ;
209GS10: MOV BX,QM_ACTIVEPAN ;AN000;get the active panel number
210 CALL GET_PCB ;AN000;ES:DI address of panel PCB
211 ;
212 PUSH ES:[DI]+PCB_UROW ;AN000; ;get active panel row
213 PUSH ES:[DI]+PCB_UCOL ;AN000; ;get active panel column
214 PUSH ES:[DI]+PCB_CCBID ;AN000;get active panel color index
215 ;
216 MOV BX,WR_SCBID ;AN000;get PCSLCTP field
217 CALL GET_SCB ;AN000;ES:DI points to SCB
218 ;
219 POP ES:[DI]+SCB_CCBID ;AN000;get the panel's current color ind
220 POP ES:[DI]+SCB_RELCOL ;AN000;set the panel's relative column
221 POP ES:[DI]+SCB_RELROW ;AN000;set the panel's relative row
222;
223; Build actual return string in complete buffer
224;
225 CALL SET_RETKEYS ;AN000;create complete return string
226 CALL SET_NUMKEYS ;AN000;GHG
227
228 PUSH WR_CRETSEG ;AN000;initialize SCB with complete
229 POP ES:[DI]+SCB_RLSEG ;AN000; return string information
230
231 PUSH WR_CRETOFF ;AN000;
232 POP ES:[DI]+SCB_RLOFF ;AN000;
233
234 PUSH WR_CRETLEN ;AN000;
235 POP ES:[DI]+SCB_RLLEN ;AN000;
236;
237; Process scroll field
238;
239 AND ES:[DI]+SCB_OPT1,NOT SCB_UKS;AN000;
240 ;set to not use keystrokes
241 CALL PCSLCTP_CALL ;AN000;display scroll field
242
243 MOV BX,ES:[DI]+SCB_CURELE ;AN000;get last current element
244 MOV AX,ES:[DI]+SCB_KS ;AN000;get last keystroke
245;
246;
247; determine if current element has specific contextual help text
248;
249 MOV WR_HLPOPT,HLP_OVER ;AN000;GHG position help panel with default
250 PUSH AX ;AN000;GHG
251 MOV BX,WR_SCBID ;AN000;GHG
252 MOV AX,ES:[DI]+SCB_CURELE ;AN000;GHG
253 CALL ADJUST_DOWN ;AN000;GHG
254 MOV CX,AX ;AN000;GHG
255 MOV AX,2 ;AN000;GHG
256 CALL GET_HELP_ID ;AN000;GHG
257 MOV WR_HCBCONT,AX ;AN000;GHG get current contextual help ID
258 XOR AH,AH ;AN000;GHG
259 MOV AL,DH ;AN000;GHG
260 MOV WR_HLPROW,AX ;AN000;GHG row override of 6
261 MOV AL,DL ;AN000;GHG
262 MOV WR_HLPCOL,AX ;AN000;GHG row override of 6
263 POP AX ;AN000;GHG
264
265 CALL CHK_NUMKEYS ;AN000;GHG
266 CALL CHK_RETKEYS ;AN000;check if used by other routine
267 JCXZ GS20 ;AN000;keystroke not used elsewhere
268
269 JMP GS10 ;AN000;keystroke used elswhere, continu
270 ; from last position
271;
272; Exit
273;
274GS20: MOV BX,ES:[DI]+SCB_CURELE ;AN000;return current element
275;
276; display the selected option and exit immediately
277;
278 PUSH AX ;AN008;JW
279 PUSH BX ;AN008;JW
280 OR ES:[DI]+SCB_OPT1,SCB_RD ;AN008;JW
281 CALL PCSLCTP_CALL ;AN008;JW display scroll field and exit
282 AND ES:[DI]+SCB_OPT1,NOT SCB_RD ;AN008;JW
283 POP BX ;AN008;JW
284 POP AX ;AN008;JW
285
286 POP ES ;AN000;
287 POP DI ;AN000;
288 POP SI ;AN000;
289 POP DX ;AN000;
290 POP CX ;AN000;
291
292 RET ;AN000;
293GET_SCROLL_CALL ENDP ;AN000;
294PAGE ;AN000;
295;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
296;
297; GET_INPUT_CALL
298;
299; Process input field relative to current active panel.
300; Automatically handle help request, display and interaction.
301;
302; Entry: WR_DRETSEG = Segment of dynamic return key string
303; WR_DRETOFF = Offset of dynamic return key string
304; WR_DRETLEN = Length of dynamic return key string
305;
306; WR_HCBCONT = ID of the desired contextual help text
307;
308; IN_ICBID = ICB Number of input field
309;
310; Exit: AX = Contains keystroke
311;
312;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
313 PUBLIC GET_INPUT_CALL ;AN000;GHG
314GET_INPUT_CALL PROC NEAR ;AN000;GHG
315 PUSH CX ;AN000;GHG
316 PUSH DX ;AN000;GHG
317 PUSH SI ;AN000;GHG
318 PUSH DI ;AN000;GHG
319 PUSH ES ;AN000;GHG
320 ;GHG
321 MOV BX,IN_ICBID ;AN000;GHG get PCSLCTP field
322 CALL GET_ICB ;AN000;GHG ES:DI points to SCB
323 ;GHG
324GI10: CALL SET_RETKEYS ;AN000;GHG create complete return string
325 ;GHG
326 PUSH WR_CRETSEG ;AN000;GHG initialize SCB with complete
327 POP ES:[DI]+ICB_RETSEG ;AN000;GHG return string information
328 ;GHG
329 PUSH WR_CRETOFF ;AN000;GHG
330 POP ES:[DI]+ICB_RETOFF ;AN000;GHG
331 ;GHG
332 PUSH WR_CRETLEN ;AN000;GHG
333 POP ES:[DI]+ICB_RETLEN ;AN000;GHG
334;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
335;
336; Process input field
337;
338;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
339 CALL PCINPUT_CALL ;AN000;GHG display input field
340 ;GHG
341 PUSHH <SI,DI,ES,DS> ;AN000;GHG
342 PUSH ES:[DI]+ICB_FIELDOFF ;AN000;GHG
343 PUSH ES:[DI]+ICB_FIELDSEG ;AN000;GHG
344 PUSH ES:[DI]+ICB_DEFOFF ;AN000;GHG
345 PUSH ES:[DI]+ICB_DEFSEG ;AN000;GHG
346 ;GHG
347 MOV CX,ES:[DI]+ICB_FIELDLEN;AN000;GHG
348 OR CX,CX ;AN000;GHG
349 JE GI_11 ;AN000;GHG
350 ;GHG
351 POP ES ;AN000;GHG
352 POP DI ;AN000;GHG
353 POP DS ;AN000;GHG
354 POP SI ;AN000;GHG
355 CLD ;AN000;GHG
356 REP MOVSB ;AN000;GHG
357GI_11: POPP <DS,ES,DI,SI> ;AN000;GHG
358 PUSH ES:[DI]+ICB_ENDBYTE ;AN000;GHG
359 POP ES:[DI]+ICB_DEFLEN ;AN000;GHG
360 ;GHG
361 MOV AX,ES:[DI]+ICB_KEYRET ;AN000;GHG get last keystroke
362; GHG
363;
364; determine if current element has specific contextual help text
365;
366 ;GHG
367 MOV WR_HLPOPT,HLP_OVER ;AN000;GHG position help panel with default
368 PUSH AX ;AN000;GHG
369 MOV AX,1 ;AN000;GHG
370 MOV BX,IN_ICBID ;AN000;GHG
371 CALL GET_HELP_ID ;AN000;GHG
372 MOV WR_HCBCONT,AX ;AN000;GHG get current contextual help ID
373 XOR AH,AH ;AN000;GHG
374 MOV AL,DH ;AN000;GHG
375 MOV WR_HLPROW,AX ;AN000;GHG row override
376 MOV AL,DL ;AN000;GHG
377 MOV WR_HLPCOL,AX ;AN000;GHG col override
378 POP AX ;AN000;GHG
379 ;GHG
380 CALL CURSOROFF ;AN000;GHG Turn cursor OFF!!!!
381 CALL CHK_RETKEYS ;AN000;GHG check if used by other routine
382 JCXZ GI20 ;AN000;GHG keystroke not used elsewhere
383 ;GHG
384 JMP GI10 ;AN000;GHG keystroke used elswhere, continue
385 ;GHG from last position
386GI20: POP ES ;AN000;GHG
387 POP DI ;AN000;GHG
388 POP SI ;AN000;GHG
389 POP DX ;AN000;GHG
390 POP CX ;AN000;GHG
391 ;GHG
392 RET ;AN000;GHG
393GET_INPUT_CALL ENDP ;AN000;GHG
394PAGE ;AN000;GHG
395;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GHG
396;
397; GET_INPUT
398;
399; Process input field relative to current active panel.
400; Automatically handle help request, display and interaction.
401;
402;
403; Entry: WR_DRETSEG = Segment of call's return key string
404; WR_DRETOFF = Offset of call's return key string
405; WR_DRETLEN = Length of call's return key string
406;
407; WR_HCBCONT = ID of the desired contextual help text
408;
409;
410; Exit: AX = Contains Keystroke
411;
412;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
413GET_INPUT PROC NEAR ;AN000;
414 RET ;AN000;
415GET_INPUT ENDP ;AN000;
416;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
417;
418; GET_KEY
419;
420; Get a keystroke from the keyboard and return to calling routine
421; if not used. This routine uses the string of return keys and
422; builds the complete set of return keys. Once the complete set of
423; return keys is built, the CAS keyboard routine is called to look
424; for a keystroke. When a keystroke is pressed, the CAS routine
425; returns and the keystroke is checked to determine if help should
426; be processed. If the keystroke is not used by help, then it is
427; returned to the calling routine for use.
428;
429; Entry: WR_DRETSEG = Segment of call's return key string
430; WR_DRETOFF = Offset of call's return key string
431; WR_DRETLEN = Length of call's return key string
432;
433; Exit: AX = Contains unused keystroke returned from call
434;
435;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
436GET_KEY PROC NEAR ;AN000;
437
438 PUSH CX ;AN000;save registers
439;
440; Create complete return key string
441;
442CGK10: MOV AX,0 ;AN000;clear to zero
443 ;
444 CALL SET_RETKEYS ;AN000;create complete return string
445 ;
446 PUSH WR_CRETSEG ;AN000;initialize PCINSTR parameters
447 POP INS_SSEG ;AN000; with complete return string data
448 ;
449 PUSH WR_CRETOFF ;AN000;
450 POP INS_SOFF ;AN000;
451 ;
452 PUSH WR_CRETLEN ;AN000;
453 POP INS_SLEN ;AN000;
454; ;
455; Get keystroke from keyboard ;
456; ;
457CGK20: MOV INC_OPT,INC_KWAIT ;AN000;wait for keystroke
458 CALL PCINCHA_CALL ;AN000;call CAS routine
459;
460; Check if keystroke is a valid return key
461;
462 MOV INS_OPT,INS_FKS ;AN000;set find keystroke option
463 MOV AX,INC_KS ;AN000;set keystroke to PCINSTR
464 MOV INS_KS,AX ;AN000; parameter
465 ;
466 CALL PCINSTR_CALL ;AN000;check if good key
467 ;
468 TEST INS_RSLT,0FFFFH ;AN000;check if key found
469 JNE CGK30 ;AN000;yes
470 ;
471 CALL PCMBEEP_CALL ;AN000;no
472 JMP CGK20 ;AN000;try again
473;
474; Check if help keystroke and process if yes
475;
476CGK30: CALL CHK_RETKEYS ;AN000;check keystroke
477 JCXZ CGKEXIT ;AN000;not used return to calling routin
478 JMP CGK10 ;AN000;if used by help, get another key
479 ;
480CGKEXIT: POP CX ;AN000;restore registers
481 RET ;AN000;
482GET_KEY ENDP ;AN000;
483PAGE ;AN000;
484;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
485;
486; SET_RETKEYS
487;
488; Combine the calling routine's dynamic return key string with
489; the return keys of the child panels currently displayed into
490; one complete return string.
491;
492; Entry: WR_DRETSEG = Segment of call's dynamic return key string
493; WR_DRETOFF = Offset of call's dynamic return key string
494; WR_DRETLEN = Length of call's dynamic return key string
495;
496; Exit: WR_CRETSEG = Segment of complete return key string to use
497; WR_CRETOFF = Offset of complete return key string to use
498; WR_CRETLEN = Length of complete return key string to use
499;
500;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
501SET_RETKEYS PROC NEAR ;AN000;
502 PUSH CX ;AN000;
503 PUSH DX ;AN000;
504 PUSH DI ;AN000;
505 PUSH SI ;AN000;
506 PUSH ES ;AN000;
507 PUSH DS ;AN000;
508;
509; do not exceed WR_MAXRETKSZ buffer length
510;
511;
512; Move keystrokes from dynamic return key string to complete return strg buffer
513;
514 CLD ;AN000;auto increment
515 PUSH WR_CRETSEG ;AN000;get segment of complete return
516 POP ES ;AN000; buffer
517 ;
518 MOV DI,WR_CRETOFF ;AN000;get offset of complete return
519 ;
520 MOV CX,WR_DRETLEN ;AN000;get length of dynamic return strg
521 MOV DX,CX ;AN000; and initialize DX counter
522 ;
523 MOV SI,WR_DRETOFF ;AN000;get offset of dynamic return strg
524 ;
525 PUSH DS ;AN000;save data segment
526 ;
527 PUSH WR_DRETSEG ;AN000;get offset of dynamic return strg
528 POP DS ;AN000;
529 ;
530 REP MOVSB ;AN000;copy dynamic return key string
531 ; to complete return key buffer
532 POP DS ;AN000;restore data segment
533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
534;
535; Add assigned keys from displayed child panels to complete return buffer
536;
537;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
538 MOV SI,QM_RETKEYSOFF ;AN000;get offset of return buffer
539 ;
540 MOV CX,QM_RETKEYSLEN ;AN000;
541 ADD DX,CX ;AN000;add length of return keys
542 ;
543 PUSH DS ;AN000;save data segment
544 ;
545 PUSH QM_RETKEYSSEG ;AN000;
546 POP DS ;AN000;get segment of return buffer
547 ;
548 REP MOVSB ;AN000;copy string sent
549 ;
550 POP DS ;AN000;restore data segment
551 ;
552 MOV CX,WR_MAXRETKSZ ;AN061;
553 SUB CX,DX ;AN061;
554 MOV AL,0 ;AN061;
555 REP STOSB ;AN061;
556 ;
557 MOV WR_CRETLEN,DX ;AN000;initialize current return string
558; ;
559; Exit ;
560; ;
561SRK30: POP DS ;AN000;restore registers
562 POP ES ;AN000;
563 POP SI ;AN000;
564 POP DI ;AN000;
565 POP DX ;AN000;
566 POP CX ;AN000;
567 RET ;AN000;
568SET_RETKEYS ENDP ;AN000;
569;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
570;
571; SET_NUMKEYS
572;
573; Entry: WR_CRETSEG = Segment of call's dynamic return key string
574; WR_CRETOFF = Offset of call's dynamic return key string
575; WR_CRETLEN = Length of call's dynamic return key string
576;
577; Exit: WR_CRETSEG' = Segment of complete return key string to use
578; WR_CRETOFF' = Offset of complete return key string to use
579; WR_CRETLEN' = Length of complete return key string to use
580;
581; GORD GIDDINGS
582;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583NUMKEYS DB '123456789' ;AN000;
584 ;
585SET_NUMKEYS PROC NEAR ;AN000;
586 PUSH AX ;AN000;save registers
587 PUSH BX ;AN000;
588 PUSH CX ;AN000;
589 PUSH DI ;AN000;
590 PUSH SI ;AN000;
591 PUSH ES ;AN000;
592 PUSH DS ;AN000;
593;
594; Move numeric keystrokes into completed return strg buffer
595;
596 MOV BX,WR_SCBID ;AN000;get PCSLCTP field
597 CALL GET_SCB ;AN000;ES:DI points to SCB
598 ;
599 TEST ES:[DI]+SCB_OPT3,SCB_NUMS;AN000;
600 JZ SNK_30 ;AN000;
601 ;
602 PUSH ES:[DI]+SCB_SELSEG ;AN000;
603 PUSH ES:[DI]+SCB_SELOFF ;AN000;
604 PUSH ES:[DI]+SCB_NUMELE ;AN000;
605 POP CX ;AN000;
606 POP DI ;AN000;
607 POP ES ;AN000;
608 XOR AX,AX ;AN000;
609 ;
610SNR_10: MOV BX,SCB_ACTIVEON ;AN000;
611 CMP ES:[DI],BX ;AN000;
612 JNE SNR_15 ;AN000;
613 INC AX ;AN000;
614SNR_15: INC DI ;AN000;
615 INC DI ;AN000;
616 LOOP SNR_10 ;AN000;
617 ;
618 CMP AX,9 ;AN000;
619 JBE SNR_20 ;AN000;
620 MOV AX,9 ;AN000;
621SNR_20: MOV CX,AX ;AN000;
622 ;
623 PUSH WR_CRETOFF ;AN000;get offset of complete return
624 PUSH WR_CRETSEG ;AN000;get segment of complete return
625 POP ES ;AN000;
626 POP DI ;AN000;
627 ;
628 ADD DI,WR_CRETLEN ;AN000;get length of dynamic return strg
629 ADD WR_CRETLEN,CX ;AN000;
630 LEA SI,NUMKEYS ;AN000;
631 PUSH CS ;AN000;
632 POP DS ;AN000;
633 ;
634 CLD ;AN000;auto increment
635 REP MOVSW ;AN000;
636 ;
637SNK_30: POP DS ;AN000;restore registers
638 POP ES ;AN000;
639 POP SI ;AN000;
640 POP DI ;AN000;
641 POP CX ;AN000;
642 POP BX ;AN000;
643 POP AX ;AN000;
644 RET ;AN000;
645SET_NUMKEYS ENDP ;AN000;
646;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
647;
648; CHK_RETKEYS
649;
650; Check return key for active function keys
651;
652; Note: That currently this routine searchs for only the help
653; function keys (F1=Help, F5=Index, F7=Keys); however, other
654; function keys could be searched for and processed in this
655; routine before returning to the main dialog.
656;
657; Entry: AX = Keystroke
658;
659; Exit: CX = 0= keystroke not used
660; 1= keystroke used
661;
662;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
663CHK_RETKEYS PROC NEAR ;AN000;
664 PUSHF ;AN000;save registers and variables
665 PUSH AX ;AN000;
666 PUSH BX ;AN000;
667 PUSH DX ;AN000;
668 PUSH SI ;AN000;
669 PUSH DI ;AN000;
670 PUSH ES ;AN000;
671 PUSH DS ;AN000;
672 PUSH WR_HCBCONT ;AN000;save contextual help ID
673 PUSH QM_ACTIVEPAN ;AN000;save current active panel
674 PUSH WR_SCBID ;AN000;save current SCB ID
675 PUSH WR_DRETSEG ;AN000;save dynamic return key vars
676 PUSH WR_DRETOFF ;AN000;
677 PUSH WR_DRETLEN ;AN000;
678 PUSH MB_FREQUENCY ;AN004;GHG for PTM 1064
679;
680; Check if keystroke pressed displays, processes, or removes contextual help
681;
682 CALL MANAGE_HELP ;AN000;
683;
684 CMP CX,0 ;AN000;check if keystroke used by help
685 JE CHK10 ;AN000;no, check other functions
686;
687 JMP CHKEXIT ;AN000;yes, exit
688;
689; Keys may be check here and processed for other functions
690;
691CHK10: ;AN000;
692;
693; Exit to calling routine
694;
695CHKEXIT: POP MB_FREQUENCY ;AN004;GHG for PTM 1064
696 POP WR_DRETLEN ;AN000;save dynamic return key vars
697 POP WR_DRETOFF ;AN000;
698 POP WR_DRETSEG ;AN000;
699 POP WR_SCBID ;AN000;restore current SCB ID
700 POP QM_ACTIVEPAN ;AN000;restore current active panel
701 POP WR_HCBCONT ;AN000;restore contextual help ID
702 POP DS ;AN000;
703 POP ES ;AN000;
704 POP DI ;AN000;
705 POP SI ;AN000;
706 POP DX ;AN000;
707 POP BX ;AN000;
708 POP AX ;AN000;
709 POPF ;AN000;
710 RET ;AN000;
711CHK_RETKEYS ENDP ;AN000;
712;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
713;
714; CHK_NUMKEYS
715;
716; Check return key for numeric keys
717;
718; Entry: AX = Keystroke
719;
720; Exit: AX = The first character in the completed return key string
721; WR_CRETSEG:WR_CRETOFF
722;
723;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
724CHK_NUMKEYS PROC NEAR ;AN000;
725 PUSH ES ;AN000;
726 PUSH DI ;AN000;
727 PUSH BX ;AN000;
728 MOV BX,WR_SCBID ;AN000;
729 CALL GET_SCB ;AN000;
730 TEST ES:[DI]+SCB_OPT3,SCB_NUMS ;AN000;
731 JZ CNK_20 ;AN000;
732 OR AH,AH ;AN000;
733 JNZ CNK_20 ;AN000;
734 CMP AL,'1' ;AN000;
735 JB CNK_20 ;AN000;
736 CMP AL,'9' ;AN000;
737 JA CNK_20 ;AN000;
738 ;
739 MOV BX,AX ;AN000; now form the index value
740 SUB BX,'0' ;AN000; from the keystroke!
741 ;
742 PUSHH <ES,DI> ;AN000;GHG
743 PUSHH <WR_CRETSEG,WR_CRETOFF> ;AN000;GHG
744 POPP <DI,ES> ;AN000;GHG
745 MOV AL,ES:[DI] ;AN000;GHG
746 POPP <DI,ES> ;AN000;GHG
747 ; ;
748 MOV ES:[DI]+SCB_KS,AX ;AN000;
749 PUSH AX ;AN000;
750 MOV AX,BX ;AN000;get PCSLCTP field
751 MOV BX,WR_SCBID ;AN000;
752 CALL ADJUST_UP ;AN000;
753 MOV ES:[DI]+SCB_CURELE,AX ;AN000;
754 POP AX ;AN000;
755 ;
756CNK_20: POP BX ;AN000;
757 POP DI ;AN000;
758 POP ES ;AN000;
759 RET ;AN000;
760CHK_NUMKEYS ENDP ;AN000;
761;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
762;
763; MANAGE_HELP
764;
765; Manage contextual, indexed and keys help. This routine is used :
766; to display, process and remove help from the screen.
767;
768; Entry: AX = Keystroke pressed
769;
770; WR_HLPOPT = Help display and operation options
771; WR_HLPROW = Override row for help panel
772; WR_HLPCOL = Override column for help panel
773;
774; WR_HCBCONT = Current contextual help ID
775; WR_HCBHELP = Help-on-help ID
776; WR_HCBKEYS = Keys help ID
777;
778; WR_PCBHPAN = Help panel ID
779;
780; WR_SCBCONT = Scroll ID for context forms of help
781; WR_SCBINDX = Scroll ID for indexed forms of help
782;
783; WR_KEYQUIT = Quit keystroke (Esc)
784; WR_KEYKEYS = Keys help keystroke (F7=Keys)
785; WR_KEYHELP = Help-on-help keystroke (F1=Help)
786; WR_KEYCONT = Contextual help keystroke (F1=Help)
787; WR_KEYINDX = Indexed help keystroke (F5=Index)
788; WR_KEYSWIT = Switch keystroke (F2=Switch)
789;
790; HRD_FILSPOFF = Offset of contextual help file path name
791; HRD_FILSPSEG = Segment of contextual help file path name
792;
793; Exit: AX = Keystroke
794; CX 0 = Keystroke not used
795; 1 = Keystroke used
796;
797;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
798MANAGE_HELP PROC NEAR ;AN000;
799;
800; Check if help is displayed
801;
802 MOV CX,0 ;AN000;
803
804 PUSH DS ;AN007;JW
805 PUSH CS ;AN007;JW
806 POP DS ;AN007;JW
807 CMP ERROR_ACTIVE,1 ;AN007;JW is an error being processed?
808 POP DS ;AN007;JW
809 JNE MH00 ;AN007;JW no, continue
810 JMP MHEXIT ;AN007;JW yes, exit
811
812MH00: CMP WR_HLPDIS,0 ;AN000;check if help is displayed
813 JE MH30 ;AN000;
814
815 CMP AX,WR_KEYSWIT ;AN000;check if any key but switch
816 JNE MH10 ;AN000; and remove help
817
818 TEST WR_HLPDIS,HLP_INDX ;AN000;check if index displayed
819 JNE MH05 ;AN000;yes
820
821 MOV QM_OPT1,QM_RVMCHD ;AN000;remove child panel
822 MOV AX,WR_PCBENTR ;AN000;Enter panel
823 MOV QM_ID,AX ;AN000;parent PCB number
824 CALL PCDISPQ_CALL ;AN000;
825
826MH05: MOV QM_OPT1,QM_PUSHCHD ;AN000;add child panel
827 MOV AX,WR_PCBHELP ;AN000;F1=Help panel
828 MOV QM_ID,AX ;AN000;parent PCB number
829 CALL PCDISPQ_CALL ;AN000;
830 JMP MH20 ;AN000;
831
832MH10: CALL REMOVE_HELP ;AN000;restore original display queues
833 JMP MH80 ;AN000;exit
834;
835; Process read help text
836;
837MH20: CALL PROCESS_HELP ;AN000;process contextual help
838
839 MOV CX,1 ;AN000;set keystroke used flag
840
841 CMP AX,WR_KEYSWIT ;AN000;check if help should be left
842 JNE MH25 ;AN000; on the screen
843
844 MOV QM_OPT1,QM_RVMCHD ;AN000;remove child panel
845 MOV AX,WR_PCBHELP ;AN000;F1=Help
846 MOV QM_ID,AX ;AN000;parent PCB number
847 CALL PCDISPQ_CALL ;AN000;
848
849 MOV AX,WR_PCBHELP ;AN000;F1=Help
850 MOV QM_ID,AX ;AN000;parent PCB number
851 CALL PCDISPQ_CALL ;AN000;
852
853 TEST WR_HLPDIS,HLP_INDX ;AN000;check if index displayed
854 JNE MH22 ;AN000;yes
855
856 MOV QM_OPT1,QM_PUSHCHD ;AN000;add child panel
857 MOV AX,WR_PCBENTR ;AN000;Enter panel
858 MOV QM_ID,AX ;AN000;parent PCB number
859 CALL PCDISPQ_CALL ;AN000;
860
861MH22: JMP MH80 ;AN000;exit
862
863MH25: CMP AL,01BH ;AN000;check for quit key
864 JNE MH30 ;AN000; refresh display
865
866 CALL REMOVE_HELP ;AN000;restore original display queues
867 JMP MH80 ;AN000;exit
868
869; Read help if requested
870
871MH30: CMP AX,WR_KEYHELP ;AN000;check if F1=help requested
872 JNE MH60 ;AN000;
873
874 CMP WR_HLPDIS,0 ;AN000;is help already displayed
875 JE MH40 ;AN000;no
876
877 CALL REMOVE_HELP ;AN000;restore original display queues
878
879MH40: TEST WR_HLPDIS,HLP_CONT ;AN000;check if contextual help already
880 JE MH50 ;AN000; on
881
882 MOV WR_HLPPAN,HLP_KEYS ;AN000;turn on help on keys
883 OR WR_HLPPAN,HLP_CONT ;AN000;turn on contextual help
884 OR WR_HLPPAN,HLP_INDX ;AN000;turn on help index
885
886 PUSH WR_HCBHELP ;AN000;set help-on-help ID
887 POP HRD_ID ;AN000;
888
889 MOV WR_HLPDIS,HLP_HELP ;AN000;turn help-on-help status on
890 CALL READ_HELP ;AN000;prepare help text
891 JMP MH20 ;AN000;loop to process
892
893MH50: MOV WR_HLPPAN,HLP_KEYS ;AN000;turn on help on keys
894 OR WR_HLPPAN,HLP_HELP ;AN000;turn on help-on-help
895 OR WR_HLPPAN,HLP_INDX ;AN000;turn on help index
896
897 PUSH WR_HCBCONT ;AN000;get current contextual help text
898 POP HRD_ID ;AN000; ID
899
900 MOV WR_HLPDIS,HLP_CONT ;AN000;turn contextual help status on
901 CALL READ_HELP ;AN000;prepare help text
902 JMP MH20 ;AN000;loop to process
903;
904; Check if indexed help requested for display
905;
906MH60: CMP AX,WR_KEYINDX ;AN000;check if index selected
907 JNE MH70 ;AN000;
908
909 CMP WR_HLPDIS,0 ;AN000;is help already displayed
910 JE MH65 ;AN000;no
911
912 CALL REMOVE_HELP ;AN000;restore original display queues
913
914MH65: MOV WR_HLPPAN,HLP_CONT ;AN000;turn on contextual help
915 OR WR_HLPPAN,HLP_KEYS ;AN000;turn on help on keys
916
917 MOV HRD_ID,0 ;AN000;set contextual help ID
918
919 MOV WR_HLPDIS,HLP_INDX ;AN000;turn index status on
920 CALL READ_HELP ;AN000;prepare help text
921 JMP MH20 ;AN000;loop to process
922;
923; Check if keys help requested for display
924;
925MH70: CMP AX,WR_KEYKEYS ;AN000;check for help on keys
926 JNE MHEXIT ;AN000;
927
928 CMP WR_HLPDIS,0 ;AN000;is help already displayed
929 JE MH75 ;AN000;no
930
931 CALL REMOVE_HELP ;AN000;restore original display queues
932
933MH75: MOV WR_HLPPAN,HLP_CONT ;AN000;turn on contextual help
934 OR WR_HLPPAN,HLP_INDX ;AN000;turn on help index
935
936 PUSH WR_HCBKEYS ;AN000;set keys help ID
937 POP HRD_ID ;AN000;
938
939 MOV WR_HLPDIS,HLP_KEYS ;AN000;turn keys help status on
940 CALL READ_HELP ;AN000;prepare help text
941 JMP MH20 ;AN000;loop to process
942;
943; Help was processed restore original active panel and return key string
944;
945MH80: MOV QM_OPT1,0 ;AN000;make original panel active
946 CALL PCDISPQ_CALL ;AN000; and update the return keys
947
948 CALL SET_RETKEYS ;AN000;restore original return keys
949
950 PUSH AX ;AN000;save keystroke
951
952 MOV AX,1 ;;AN000;;;;;;;;;;0 ;set break option off
953
954 CMP WR_HLPDIS,0 ;AN000;is help displayed
955 JE MH90 ;AN000;
956
957 MOV AX,1 ;AN000;turn break option on
958
959MH90: CALL PCPANEL_CALL ;AN000;make original panel the active
960 ; panel with the child panels
961 POP AX ;AN000;restore keystroke
962;
963; Exit
964;
965MHEXIT: ;AN000;exit
966;
967 RET ;AN000;
968MANAGE_HELP ENDP ;AN000;
969
970PAGE ;AN000;
971;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
972;
973; READ_HELP
974;
975; Read Help Text and Prepare for Display:
976;
977; o Read the specified contextual help text into the help buffer :
978;
979; o Save the current parent and child display queues
980;
981; o Add the contextual help panel to the new display queue
982;
983; o Exit without updating display
984;
985;
986; Entry: WR_PCBHPAN = Help panel ID
987; WR_SCBCONT = Scroll ID for context forms of help
988; WR_SCBINDX = Scroll ID for indexed forms of help
989;
990; HRD_ID = Current contextual help ID to read
991; HRD_FILSPOFF = Offset of help file path name
992; HRD_FILSPSEG = Segment of help file path name
993;
994; WR_HLPOPT = Help options
995; WR_HLPDIS = Help display status
996; WR_HLPPAN = Active help panels
997; WR_HLPROW = Override row for help panel
998; WR_HLPCOL = Override column for help panel
999;
1000; Exit: None
1001;
1002;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1003READ_HELP PROC NEAR ;AN000;
1004 PUSH BX ;AN000;save registers
1005 PUSH DX ;AN000;
1006 PUSH DI ;AN000;
1007 PUSH QM_ACTIVEPAN ;AN000;
1008;
1009; Read specified help text from file into memory buffer
1010;
1011 MOV HRD_OPT1,HRD_TEXT ;AN000;set the contextual option
1012 ;
1013 TEST WR_HLPDIS,HLP_INDX ;AN000;check if index status on
1014 JE RH05 ;AN000;
1015 ;
1016 MOV HRD_OPT1,HRD_TOPIC ;AN000;set the indexed help option
1017 ;
1018RH05: CALL HOOK_INT_24 ;AN000;
1019 ;
1020RH06: PUSH HRD_BUFOFF ;AN000;
1021 PUSH HRD_BUFLEN ;AN000;save help buffer length
1022 ;
1023 CALL PCHLPRD_CALL ;AN005;GHG call help read routine
1024 JNC RH07 ;AN006;JW
1025 ;
1026 POP HRD_BUFLEN ;AN006;JW restore help buffer length
1027 POP HRD_BUFOFF ;AN006;JW
1028 MOV BX,ERR_INS_INSTALL ;AN060;JW
1029 MOV CX,E_RETURN ;AN000;
1030 CALL HANDLE_ERROR_CALL ;AN000;
1031 JNC RH06 ;AN000;
1032 CLEAR_SCREEN2 ;AN000;
1033 JMP EXIT_SELECT ;AN000;
1034 ;
1035RH07: POP HRD_BUFLEN ;AN000;restore help buffer length
1036 POP HRD_BUFOFF ;AN000;
1037 CALL RESTORE_INT_24 ;AN006;JW
1038;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1039;
1040; Handle error for help text not found
1041;
1042; Perform WORD WRAP on help buffer...
1043;
1044;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1045 PUSH HRD_TEXTSEG ;AN000;GHG
1046 POP WWP_SRCTXTSEG ;AN000;GHG
1047 ;GHG
1048 PUSH HRD_TEXTOFF ;AN000;GHG
1049 POP WWP_SRCTXTOFF ;AN000;GHG
1050 ;GHG
1051 PUSH HRD_TEXTLEN ;AN000;GHG
1052 POP WWP_SRCTXTLEN ;AN000;GHG
1053 ;GHG
1054 PUSH WR_MAXHELPSZ ;AN000;GHG
1055 POP WWP_SRCBUFLEN ;AN000;GHG
1056 ;GHG
1057 PUSH ES ;AN000;GHG
1058 PUSH DI ;AN000;GHG
1059 MOV BX,WR_SCBCONT ;AN000;GHG get help scroll ID
1060 CALL GET_SCB ;AN000;GHG ES:DI points to SCB
1061 MOV BX,ES:[DI]+SCB_WIDTH ;AN000;GHG calculate number of help text
1062 MOV WWP_WIDTH,BX ;AN000;GHG
1063 POP DI ;AN000;GHG
1064 POP ES ;AN000;GHG
1065 ;GHG
1066 ;GHG
1067 XOR AX,AX ;AN000;GHG
1068 MOV WWP_NUMLINES,AX ;AN000;GHG
1069 MOV WWP_ERROR,AX ;AN000;GHG
1070 MOV WWP_OPT1,WWP_LEFTJUST+WWP_HYPHEN+WWP_SRCBUFFER ;AN000;GHG
1071 ;GHG
1072 CALL PCWWRAP_CALL ;AN000;GHG
1073;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1074;
1075; Determine position and add help panel to parent display queue
1076;
1077;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1078 MOV QM_OPT1,QM_PUSHPQU ;AN000;push parent queue
1079 OR QM_OPT1,QM_PUSHCQU ;AN000;push child queue
1080 CALL PCDISPQ_CALL ;AN000;update display queue
1081
1082 TEST WR_HLPOPT,HLP_OVER ;AN000;check for help panel position
1083 JE RH10 ;AN000; override
1084
1085 PUSH WR_HLPCOL ;AN000;set override
1086 POP QM_COLUMOVER ;AN000;
1087
1088 PUSH WR_HLPROW ;AN000;set override
1089 POP QM_ROWOVER ;AN000;
1090
1091RH10: MOV QM_OPT1,QM_RVMCHD ;AN000;remove child panel
1092 MOV AX,WR_PCBENTR ;AN000;Enter panel
1093 MOV QM_ID,AX ;AN000;parent PCB number
1094 CALL PCDISPQ_CALL ;AN000;update display queue
1095
1096 MOV AX,WR_PCBQUIT ;AN000;Quit panel
1097 MOV QM_ID,AX ;AN000;parent PCB number
1098 CALL PCDISPQ_CALL ;AN000;update display queue
1099
1100 MOV QM_OPT1,QM_PUSHPAN ;AN000;add help panel
1101 OR QM_OPT2,QM_BREAKON ;AN000;break on
1102 MOV BX,WR_PCBHPAN ;AN000;
1103 MOV QM_ID,BX ;AN000;get help panel number
1104 MOV QM_ACTIVEPAN,BX ;AN000;make help panel active
1105 CALL PCDISPQ_CALL ;AN000;update display queue
1106
1107 MOV QM_OPT2,0 ;AN000;set options off
1108 MOV QM_ROWOVER,0 ;AN000;deactivate overrides
1109 MOV QM_COLUMOVER,0 ;AN000;
1110;
1111; Check if help panel's children are active and add to display queue
1112;
1113 MOV QM_OPT1,QM_PUSHCHD ;AN000;add child panels option
1114
1115 MOV BX,WR_PCBQUIT ;AN000;Esc=Quit
1116 MOV QM_ID,BX ;AN000;get help panel number
1117 CALL PCDISPQ_CALL ;AN000;update display queue
1118
1119 TEST WR_HLPPAN,HLP_CONT ;AN000;check if contextual help active
1120 JE RH15 ;AN000;
1121
1122 MOV BX,WR_PCBHELP ;AN000;F1=Help panel
1123 MOV QM_ID,BX ;AN000;get help panel number
1124 CALL PCDISPQ_CALL ;AN000;update display queue
1125
1126RH15: TEST WR_HLPPAN,HLP_HELP ;AN000;check if help-on-help active
1127 JE RH20 ;AN000;
1128
1129 MOV BX,WR_PCBHELP ;AN000;F1=Help panel
1130 MOV QM_ID,BX ;AN000;get help panel number
1131 CALL PCDISPQ_CALL ;AN000;update display queue
1132
1133RH20: TEST WR_HLPPAN,HLP_INDX ;AN000;check if help index active
1134 JE RH30 ;AN000;
1135
1136 MOV BX,WR_PCBINDX ;AN000;F5=Index panel
1137 MOV QM_ID,BX ;AN000;get help panel number
1138 CALL PCDISPQ_CALL ;AN000;update display queue
1139
1140RH30: TEST WR_HLPPAN,HLP_KEYS ;AN000;check if help keys active
1141 JE RH40 ;AN000;
1142
1143 MOV BX,WR_PCBKEYS ;AN000;
1144 MOV QM_ID,BX ;AN000;get help panel number
1145 CALL PCDISPQ_CALL ;AN000;update display queue
1146;
1147; Locate help panel PCB data and initialize common data
1148;
1149RH40: MOV BX,WR_PCBHPAN ;AN000;get help panel ID
1150 CALL GET_PCB ;AN000;ES:DI points to PCB
1151
1152 PUSH ES:[DI]+PCB_UROW ;AN000;get help panel row
1153 PUSH ES:[DI]+PCB_UCOL ;AN000;get help panel column
1154;
1155; Initialize for indexed form of help
1156;
1157 TEST WR_HLPDIS,HLP_INDX ;AN000;check is index help status is on
1158 JE RH50 ;AN000;
1159
1160 LEA AX,WR_REFBUF ;AN000;get address of refresh table
1161 MOV WR_REFOFF,AX ;AN000;
1162
1163 LEA AX,WR_REFBUF ;AN000;get address of refresh table
1164 MOV WR_REFOFF,AX ;AN000;
1165
1166 MOV QM_OPT1,QM_PUSHCHD ;AN000;push child
1167 MOV AX,WR_PCBENTR ;AN000;Enter panel
1168 MOV QM_ID,AX ;AN000;parent PCB number
1169 CALL PCDISPQ_CALL ;AN000;update display queue
1170
1171 MOV BX,WR_SCBINDX ;AN000;get help scroll ID
1172 CALL GET_SCB ;AN000;ES:DI points to SCB
1173
1174 POP ES:[DI]+SCB_RELCOL ;AN000;set panel's relative column
1175 POP ES:[DI]+SCB_RELROW ;AN000;set panel's relative row
1176
1177 MOV ES:[DI]+SCB_TOPELE,1 ;AN000;set top element
1178 MOV ES:[DI]+SCB_CURELE,1 ;AN000;set current line
1179 MOV ES:[DI]+SCB_CURCOL,1 ;AN000;display offset into opt strings
1180
1181 ;
1182 ; adjust scrolling field width to be contained within panel
1183 ;
1184
1185 MOV AX,HRD_TOPICLEN ;AN000;get topic length
1186 MOV ES:[DI]+SCB_OASLEN,AX ;AN000;fixed string length
1187 MOV ES:[DI]+SCB_NUMCOL,AX ;AN000;maximum number of cols to scroll
1188
1189 ;
1190 ; adjust scrolling field number of display lines to be
1191 ; contained within panel
1192 ;
1193
1194 PUSH HRD_TOPICNUM ;AN000;set number of elements
1195 POP ES:[DI]+SCB_NUMELE ;AN000;
1196
1197 MOV AX,HRD_TOPICSEG ;AN000;set segment of topic vector
1198 MOV ES:[DI]+SCB_OAPSEG,AX ;AN000;
1199 MOV ES:[DI]+SCB_OASSEG,AX ;AN000;set option array string segment
1200
1201 PUSH HRD_TOPICOFF ;AN000;set offset of topic vector
1202 POP ES:[DI]+SCB_OAPOFF ;AN000;
1203
1204 JMP RHEXIT ;AN000;index initialized
1205;
1206; Initialize for contextual forms of help (cont, help, and keys)
1207;
1208RH50: LEA AX,WR_REFBUF ;AN000;get address of refresh table
1209 MOV WR_REFOFF,AX ;AN000;
1210;
1211 MOV BX,WR_SCBCONT ;AN000;get help scroll ID
1212 CALL GET_SCB ;AN000;ES:DI points to SCB
1213;
1214 POP ES:[DI]+SCB_RELCOL ;AN000;set panel's relative column
1215 POP ES:[DI]+SCB_RELROW ;AN000;set panel's relative row
1216;
1217 MOV ES:[DI]+SCB_TOPELE,1 ;AN000;GHG set top element
1218 MOV ES:[DI]+SCB_CURELE,1 ;AN000;GHG set current line
1219 MOV ES:[DI]+SCB_CURCOL,1 ;AN000;display offset into opt strings
1220;
1221 MOV AX,WWP_NUMLINES ;AN000;GHG Use WordWrap # lines
1222 DEC AX ;AN000;GHG
1223 MOV ES:[DI]+SCB_NUMELE,AX ;AN000;initialize number of elements
1224
1225 PUSH HRD_TEXTSEG ;AN000;set segment of help text
1226 POP ES:[DI]+SCB_OAPSEG ;AN000;
1227
1228 PUSH HRD_TEXTOFF ;AN000;set offset of help text
1229 POP ES:[DI]+SCB_OAPOFF ;AN000;
1230 MOV BX,ES:[DI]+SCB_WIDTH ;AN000;GHG SKIP OVER FIRST ELEMENT
1231 ADD ES:[DI]+SCB_OAPOFF,BX ;AN000;GHG
1232
1233RHEXIT: POP QM_ACTIVEPAN ;AN000;restore current active panel
1234 POP DI ;AN000;restore registers and exit
1235 POP DX ;AN000;
1236 POP BX ;AN000;
1237 RET ;AN000;
1238READ_HELP ENDP ;AN000;
1239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1240;
1241; PROCESS_HELP
1242;
1243; Process Help Panel and Text:
1244; o Update display to make help panel active
1245; o Configure proper return keys
1246; o Process scrolling of help text until exit key pressed
1247;
1248; Entry: WR_PCBHPAN = Help panel ID
1249; WR_SCBCONT = Scroll ID for context forms of help
1250; WR_SCBINDX = Scroll ID for indexed forms of help
1251;
1252; Exit: AX = Exit keystroke pressed
1253;
1254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1255PROCESS_HELP PROC NEAR ;AN000;
1256 PUSH BX ;AN000;save registers
1257 PUSH DI ;AN000;
1258 PUSH ES ;AN000;
1259 PUSH WR_DRETSEG ;AN000;save dynamic return key vars
1260 PUSH WR_DRETOFF ;AN000;
1261 PUSH WR_DRETLEN ;AN000;
1262 PUSH QM_ACTIVEPAN ;AN000;
1263;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1264;
1265; Refresh display with help panel
1266;
1267;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1268 PUSH WR_PCBHPAN ;AN000;set the help panel as active
1269 POP QM_ACTIVEPAN ;AN000;
1270 ;
1271 MOV QM_OPT1,0 ;AN000;make help panel active panel
1272 CALL PCDISPQ_CALL ;AN000; and update the return keys
1273 ;
1274 MOV AX,1 ;AN000;set break option on
1275 CALL PCPANEL_CALL ;AN000;refresh display
1276;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1277;
1278; Locate proper scroll SCB for help form
1279;
1280;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1281 MOV BX,WR_SCBCONT ;AN000;set for contextual help form
1282 ;
1283 TEST WR_HLPDIS,HLP_INDX ;AN000;check if indexed help status on
1284 JE PH10 ;AN000;
1285 ;
1286 MOV BX,WR_SCBINDX ;AN000;set for indexed help form
1287 ;
1288PH10: CALL INIT_HELP_TITLE ;AN000;** GG
1289 CALL GET_SCB ;AN000;loads PCSLCTP vars with field
1290;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1291;
1292; Build return string of keystrokes and process help
1293;
1294;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1295 LEA AX,WR_RETHLPBUF ;AN000;set help dynamic return keys
1296 MOV WR_DRETOFF,AX ;AN000;
1297 ;
1298 MOV AX,WR_RETHLPLEN ;AN000;
1299 MOV WR_DRETLEN,AX ;AN000;
1300 ;
1301 MOV AX,DATA ;AN000;
1302 MOV WR_DRETSEG,AX ;AN000;
1303 ;
1304 CALL SET_RETKEYS ;AN000;create complete return string
1305 ;
1306 PUSH WR_CRETSEG ;AN000;initialize SCB with complete
1307 POP ES:[DI]+SCB_RLSEG ;AN000; return string information
1308 ;
1309 PUSH WR_CRETOFF ;AN000;
1310 POP ES:[DI]+SCB_RLOFF ;AN000;
1311 ;
1312 PUSH WR_CRETLEN ;AN000;
1313 POP ES:[DI]+SCB_RLLEN ;AN000;
1314 ;
1315 CALL PCSLCTP_CALL ;AN000;process help text until exit
1316 ;
1317 MOV AX,ES:[DI]+SCB_KS ;AN000;get keystroke from PCSLCTP
1318 ;
1319 TEST WR_HLPDIS,HLP_INDX ;AN000;check if index help status is on
1320 JE PHEXIT ;AN000;
1321 ;
1322 CMP AX,WR_KEYSELT ;AN000;check if select key pressed to
1323 JNE PHEXIT ;AN000; select desired topic
1324 ;
1325 MOV BX,ES:[DI]+SCB_CURELE;AN000;get current selected element
1326 MOV WR_HCBCONT,BX ;AN000;return new contextual help number
1327 ; selected from the help index
1328 MOV AX,WR_KEYHELP ;AN000;return contextual help key requst
1329 ; instead of enter key
1330PHEXIT: POP QM_ACTIVEPAN ;AN000;restore current active panel
1331 POP WR_DRETLEN ;AN000;restore return key vars
1332 POP WR_DRETOFF ;AN000;
1333 POP WR_DRETSEG ;AN000;
1334 POP ES ;AN000;restore registers and exit
1335 POP DI ;AN000;
1336 POP BX ;AN000;
1337 RET ;AN000;
1338PROCESS_HELP ENDP ;AN000;
1339;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1340;
1341;
1342; INITIALIZE_HELP_TITLE
1343;
1344;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1345INIT_HELP_TITLE PROC NEAR ;AN000;
1346 PUSHH <AX,BX,ES,DI,WR_SCBID> ;AN000;
1347 ;
1348 MOV BX,WR_PCBHPAN ;AN000;get help panel ID
1349 CALL GET_PCB ;AN000;ES:DI points to PCB
1350 ;
1351 PUSH ES:[DI]+PCB_UROW ;AN000;get help panel row
1352 PUSH ES:[DI]+PCB_UCOL ;AN000;get help panel column
1353 ;
1354 MOV BX,SCR_TITLE_HLP ;AN000;
1355 MOV WR_SCBID,BX ;AN000;
1356 CALL GET_SCB ;AN000;
1357 ;
1358 POP ES:[DI]+SCB_RELCOL ;AN000;
1359 POP ES:[DI]+SCB_RELROW ;AN000;
1360 ;
1361 PUSH HRD_TEXTSEG ;AN000;
1362 POP ES:[DI]+SCB_OAPSEG ;AN000;
1363 ;
1364 PUSH HRD_TEXTOFF ;AN000;
1365 POP ES:[DI]+SCB_OAPOFF ;AN000;
1366 ;
1367 PUSH ES:[DI]+SCB_OPT1 ;AN000;
1368 OR ES:[DI]+SCB_OPT1,SCB_RD ;AN000;
1369 CALL PCSLCTP_CALL ;AN000;display scroll field
1370 POP ES:[DI]+SCB_OPT1 ;AN000;
1371 ;
1372 POPP <WR_SCBID,DI,ES,BX,AX> ;AN000;
1373 RET ;AN000;
1374INIT_HELP_TITLE ENDP ;AN000;
1375;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1376;
1377; REMOVE_HELP
1378;
1379; Remove Help Panel:
1380;
1381; o Restore original parent and child display queues; thereby,
1382; removing help panels
1383;
1384; o Exit without updating display
1385;
1386; Entry: WR_KEYHELP = Help-on-help keystroke (F1=Help)
1387;
1388; Exit: WR_HLPDIS = Help status off
1389;
1390;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1391REMOVE_HELP PROC NEAR ;AN000;
1392 PUSH BX ;AN000;save registers
1393 PUSH DI ;AN000;
1394;
1395; Restore original parent and child queues
1396;
1397 MOV QM_OPT1,QM_POPPQU ;AN000;restore parent queue
1398 OR QM_OPT1,QM_POPCQU ;AN000;restore child queue
1399 CALL PCDISPQ_CALL ;AN000;update display queue
1400;
1401; Reset variables for exit
1402;
1403 TEST WR_HLPDIS,HLP_CONT ;AN000;check if contextual help
1404 JE RM20 ;AN000; already on, no set status off
1405
1406 CMP AX,WR_KEYHELP ;AN000;check if help on help request
1407 JE RMEXIT ;AN000;
1408
1409RM20: MOV WR_HLPDIS,0 ;AN000;help panels not on
1410;
1411; Exit
1412;
1413RMEXIT: POP DI ;AN000;restore registers and exit
1414 POP BX ;AN000;
1415 RET ;AN000;
1416REMOVE_HELP ENDP ;AN000;
1417;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1418;
1419; GET_PCB
1420;
1421; Get Panel Control Block information for child or parent panel. :
1422;
1423; Entry: BX = Number of PCB vector desired.
1424;
1425; Exit: ES = Segment of desired PCB.
1426; DI = Offset of desired PCB.
1427;
1428;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1429;
1430GET_PCB PROC NEAR ;AN000;
1431 PUSH AX ;AN000;
1432 PUSH BX ;AN000;
1433 PUSH CX ;AN000;
1434 PUSH DX ;AN000;GHG
1435;
1436; read panel control block vector to obtain PCB address
1437;
1438 PUSH QM_PCBVECSEG ;AN000;get beginning PCB vector address
1439 POP ES ;AN000;
1440 PUSH QM_PCBVECOFF ;AN000;
1441 POP DI ;AN000;
1442
1443 DEC BX ;AN000;make zero based
1444 MOV AX,VECSEGLEN ;AN000;multiply PCB element length by
1445 ADD AX,VECOFFLEN ;AN000; desired vector number in BX
1446 MUL BX ;AN000; to determine offset into PCB vec
1447 ADD DI,AX ;AN000;add offset inside table
1448 MOV BX,ES:[DI] ;AN000;get actual PCB segment
1449 MOV CX,ES:[DI]+VECSEGLEN ;AN000;point past PCB seg to get PCB off
1450
1451 MOV ES,BX ;AN000;set ES:DI to panel's actual
1452 MOV DI,CX ;AN000; PCB address
1453
1454 POP DX ;AN000;GHG
1455 POP CX ;AN000;
1456 POP BX ;AN000;
1457 POP AX ;AN000;
1458
1459 RET ;AN000;
1460GET_PCB ENDP ;AN000;
1461;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1462;
1463; GET_SCB
1464;
1465; Get Scroll Field Control Block information.
1466;
1467; Entry: BX = Number of SCB vector desired.
1468;
1469; Exit: ES:DI = Address of desired SCB
1470;
1471;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1472;
1473GET_SCB PROC NEAR ;AN000;
1474;
1475 PUSH AX ;AN000;
1476 PUSH BX ;AN000;
1477 PUSH CX ;AN000;
1478 PUSH DX ;AN000;GHG
1479;
1480; read scroll control block vector to obtain SCB address
1481;
1482 PUSH SRD_SCBVECSEG ;AN000;get beginning SCB vector address
1483 POP ES ;AN000;
1484 PUSH SRD_SCBVECOFF ;AN000;
1485 POP DI ;AN000;
1486;
1487 DEC BX ;AN000;make zero based
1488 MOV AX,VECSEGLEN ;AN000;multiply SCB element length by
1489 ADD AX,VECOFFLEN ;AN000; desired vector number in BX
1490 MUL BX ;AN000; to determine offset into SCB vec
1491 ADD DI,AX ;AN000;add offset inside table
1492 MOV BX,ES:[DI] ;AN000;get actual SCB segment
1493 MOV CX,ES:[DI]+VECSEGLEN ;AN000;point past SCB seg to get SCB off
1494;
1495 MOV ES,BX ;AN000;set ES:DI to scroll's actual
1496 MOV DI,CX ;AN000; SCB address
1497;
1498 POP DX ;AN000;GHG
1499 POP CX ;AN000;
1500 POP BX ;AN000;
1501 POP AX ;AN000;
1502;
1503 RET ;AN000;
1504GET_SCB ENDP ;AN000;
1505;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1506;
1507; GET_ICB
1508;
1509; Get Input Control Block information.
1510;
1511; Entry: BX = Number of ICB vector desired.
1512;
1513; Exit: ES:DI = Address of ICB
1514;
1515;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1516GET_ICB PROC NEAR ;AN000;
1517 PUSH AX ;AN000;
1518 PUSH BX ;AN000;
1519 PUSH CX ;AN000;
1520 PUSH DX ;AN000;GHG
1521;
1522; read input control block vector to obtain ICB address
1523;
1524 PUSH WR_ICBVECSEG ;AN000;get beginning ICB vector address
1525 POP ES ;AN000;
1526 PUSH WR_ICBVECOFF ;AN000;
1527 POP DI ;AN000;
1528
1529 DEC BX ;AN000;make zero based
1530 MOV AX,VECSEGLEN ;AN000;multiply ICB element length by
1531 ADD AX,VECOFFLEN ;AN000; desired vector number in BX
1532 MUL BX ;AN000; to determine offset into ICB vec
1533 ADD DI,AX ;AN000;add offset inside table
1534 MOV BX,ES:[DI] ;AN000;get actual ICB segment
1535 MOV CX,ES:[DI]+VECSEGLEN ;AN000;point past ICB seg to get ICB off
1536
1537 MOV ES,BX ;AN000;set ES:DI to field's actual
1538 MOV DI,CX ;AN000; ICB address
1539
1540 POP DX ;AN000;GHG
1541 POP CX ;AN000;
1542 POP BX ;AN000;
1543 POP AX ;AN000;
1544 RET ;AN000;
1545GET_ICB ENDP ;AN000;
1546;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1547;
1548; REFRESH_FLDS
1549;
1550; Refresh specified input and scrolling fields in the logical video :
1551; buffer during screen build.
1552;
1553; Format = DW Panel control block number
1554; DW Number of fields in this record
1555; DW Object type ID
1556; DW Field ID
1557;
1558; DW Object type ID
1559; DW Field ID
1560;
1561; Entry: WR_REFNUM = Number of PCB entries
1562; WR_REFOFF = Offset of table
1563; WR_REFSEG = Segment of table
1564;
1565; PM_PANBRKID = Panel PCB number to refresh
1566;
1567; Exit: None
1568;
1569;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1570REFRESH_FLDS PROC NEAR ;AN000;
1571 PUSH AX ;AN000;save registers
1572 PUSH BX ;AN000;
1573 PUSH CX ;AN000;
1574 PUSH DX ;AN000;
1575 PUSH ES ;AN000;
1576 PUSH DI ;AN000;
1577;
1578; Initialize for table search
1579;
1580 MOV CX,WR_REFNUM ;AN000;get number of refresh table recs
1581 CMP CX,0 ;AN000;check the number of PCB entries
1582 JA RF10 ;AN000;
1583 JMP RFEXIT ;AN000;no records, exit
1584
1585RF10: PUSH WR_REFOFF ;AN000;get address of refresh table
1586 POP WR_REFCNT ;AN000;
1587
1588 PUSH WR_REFSEG ;AN000;
1589 POP ES ;AN000;
1590;
1591; Locate matching table and PCB break number
1592;
1593RF20: MOV DI,WR_REFCNT ;AN000;set beginning address of current
1594 ; table record
1595
1596 MOV AX,ES:[DI]+2 ;AN000;get number of fields in record
1597 MOV BX,4 ;AN000;4 bytes per field entry *
1598 MUL BX ;AN000; number of fields in this record
1599 ADD WR_REFCNT,AX ;AN000; + 4 bytes for the number of
1600 ADD WR_REFCNT,4 ;AN000; PCB bytes and the number of flds
1601
1602 MOV BX,PM_PANBRKID ;AN000;
1603 CMP BX,ES:[DI] ;AN000;check if PCB match to table rec
1604 JE RF30 ;AN000;
1605
1606 LOOP RF20 ;AN000;check next table record
1607 JMP RFEXIT ;AN000;no match, exit
1608;
1609; Match found, refresh all fields
1610;
1611RF30: MOV CX,ES:[DI]+2 ;AN000;get number of fields
1612
1613RF40: ADD DI,4 ;AN000;point to field data
1614 MOV AX,SCROLLOBJID ;AN000;check if scroll field
1615 CMP AX,ES:[DI] ;AN000;
1616 JNE RF50 ;AN000;
1617
1618 MOV BX,ES:[DI]+2 ;AN000;get field ID
1619 CALL REFRESH_SCB ;AN000;update logical video buffer
1620 JMP RF60 ;AN000;get next field entry
1621
1622RF50: MOV AX,INPUTOBJID ;AN000;check if input field
1623 CMP AX,ES:[DI] ;AN000;
1624 JNE RF60 ;AN000;
1625
1626 MOV BX,ES:[DI]+2 ;AN000;get field ID
1627 CALL REFRESH_ICB ;AN000;update logical video buffer
1628
1629RF60: LOOP RF40 ;AN000;get next field in same record
1630
1631RFEXIT: POP DI ;AN000;restore registers
1632 POP ES ;AN000;
1633 POP DX ;AN000;
1634 POP CX ;AN000;
1635 POP BX ;AN000;
1636 POP AX ;AN000;
1637
1638 RET ;AN000;
1639REFRESH_FLDS ENDP ;AN000;
1640;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1641;
1642; REFRESH_SCB
1643;
1644; Refresh scroll field in logic video buffer and exit.
1645;
1646; Entry: BX = Scroll ID field number
1647;
1648; Exit: None
1649;
1650;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1651REFRESH_SCB PROC NEAR ;AN000;
1652 PUSH ES ;AN000;save registers
1653 PUSH DI ;AN000;
1654
1655 CALL GET_SCB ;AN000;load SCB address
1656
1657 PUSH ES:[DI]+SCB_OPT1 ;AN000;save options
1658 PUSH ES:[DI]+SCB_OPT3 ;AN000;
1659
1660 OR ES:[DI]+SCB_OPT1,SCB_RD ;AN000;set display and exit option
1661 AND ES:[DI]+SCB_OPT1,NOT SCB_UKS;AN000;
1662 OR ES:[DI]+SCB_OPT3,SCB_LVBOVR;AN000;
1663
1664 PUSH PM_LVBOFF ;AN000;initialize logical video address
1665 POP ES:[DI]+SCB_LVBOFF ;AN000;
1666
1667 PUSH PM_LVBSEG ;AN000;
1668 POP ES:[DI]+SCB_LVBSEG ;AN000;
1669
1670 CALL PCSLCTP_CALL ;AN000;refresh logical video buffer
1671
1672 POP ES:[DI]+SCB_OPT3 ;AN000;restore option
1673 POP ES:[DI]+SCB_OPT1 ;AN000;
1674
1675RSEXIT: POP DI ;AN000;restore registers
1676 POP ES ;AN000;
1677
1678 RET ;AN000;
1679REFRESH_SCB ENDP ;AN000;
1680;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1681;
1682; REFRESH_ICB
1683;
1684; Refresh input field in logic video buffer and exit.
1685;
1686; Entry: BX = Input ID field number
1687;
1688; Exit: None
1689;
1690;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1691REFRESH_ICB PROC NEAR ;AN000;
1692 PUSH AX ;AN000;
1693 PUSH ES ;AN000;save registers
1694 PUSH DI ;AN000;
1695 PUSH IN_ICBID ;AN000;
1696 ;
1697 MOV IN_ICBID,BX ;AN000;
1698 CALL GET_ICB ;AN000;load ICB address
1699 ;
1700 CMP ES:[DI]+ICB_FIELDLEN ,0;AN000;
1701 CMP ES:[DI]+ICB_FIELDOFF ,0;AN000;
1702 CMP ES:[DI]+ICB_FIELDSEG ,0;AN000;
1703 CMP ES:[DI]+ICB_DEFLEN ,0;AN000;
1704 CMP ES:[DI]+ICB_DEFOFF ,0;AN000;
1705 CMP ES:[DI]+ICB_DEFSEG ,0;AN000;
1706
1707 PUSH IN_OPT ;AN000;
1708 PUSH ES:[DI]+ICB_OPT1 ;AN000;
1709 OR ES:[DI]+ICB_OPT1,ICB_OUT;AN000;
1710 OR IN_OPT,IN_LVBOV ;AN000;
1711 ;
1712 PUSH PM_LVBOFF ;AN000;initialize logical video address
1713 POP IN_LVBOFF ;AN000;
1714 ;
1715 PUSH PM_LVBSEG ;AN000;
1716 POP IN_LVBSEG ;AN000;
1717 ;
1718 CALL PCINPUT_CALL ;AN000;
1719 ;
1720 POP ES:[DI]+ICB_OPT1 ;AN000;
1721 POP IN_OPT ;AN000;
1722 CALL CURSOROFF ;AN000;
1723 ;
1724 POP IN_ICBID ;AN000;
1725 POP DI ;AN000;restore registers
1726 POP ES ;AN000;
1727 POP AX ;AN000;
1728 RET ;AN000;
1729REFRESH_ICB ENDP ;AN000;
1730;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1731;
1732; CURSOROFF
1733;
1734; Deactivates cursor from display.
1735;
1736; Entry: None
1737;
1738; Exit: None
1739;
1740;;;;;;;;;;;;;;;;;;;;;;;;;
1741CURSOROFF PROC NEAR ;AN000;
1742 PUSH AX ;AN000;save registers
1743 PUSH BX ;AN000;
1744 PUSH CX ;AN000;
1745 ;
1746 MOV AH,3 ;AN000;function to get cursor info
1747 MOV BH,0 ;AN000;page zero
1748 INT 10H ;AN000;
1749 OR CH,20H ;AN000;set bit 6
1750 MOV AH,1 ;AN000;function to set cursor
1751 INT 10H ;AN000;
1752 ;
1753 POP CX ;AN000;restore registers
1754 POP BX ;AN000;
1755 POP AX ;AN000;
1756 RET ;AN000;
1757CURSOROFF ENDP ;AN000;
1758;;;;;;;;;;;;;;;;;;;;;;;;;
1759;
1760; CURSORON
1761;
1762; Activates cursor display on screen.
1763;
1764; Entry: None
1765;
1766; Exit: None
1767;
1768;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1769CURSORON PROC NEAR ;AN000;
1770 PUSH AX ;AN000;save registers
1771 PUSH BX ;AN000;
1772 PUSH CX ;AN000;
1773 ;
1774 MOV AH,3 ;AN000;function to get cursor info
1775 MOV BH,0 ;AN000;page zero
1776 INT 10H ;AN000;
1777 AND CH,NOT 20H ;AN000;clear bit 6
1778 MOV AH,1 ;AN000;function to set cursor
1779 INT 10H ;AN000;
1780 ;
1781 POP CX ;AN000;restore registers
1782 POP BX ;AN000;
1783 POP AX ;AN000;
1784 ;
1785 RET ;AN000;
1786CURSORON ENDP ;AN000;
1787;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1788;
1789; PCINCHA_CALL
1790;
1791; Call to PCINCHA.
1792;
1793; Entry: PB initialized.
1794;
1795; Exit: None
1796;
1797;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1798PCINCHA_CALL PROC NEAR ;AN000;
1799 ;
1800 CALL CLEAR_INBUFF ;AN088;SEH this call was moved and now replaced to exist both before and after call
1801 ;
1802 PUSH DS ;AN000;set segment
1803 POP ES ;AN000;
1804 PUSH DS ;AN000;
1805 PUSH DI ;AN000;save registers
1806 LEA DI,INC_OPT ;AN000;set DI to proper parameter block
1807 ; for call
1808IF CASRM ;AN000;
1809 MOV AH,00H ;AN000;make call to CAS-RM
1810 MOV BX,INC_RN ;AN000;set CAS routine number
1811 INT CASINT ;AN000;call routine
1812ELSE ;AN000;
1813 CALL INCHA ;AN000;
1814 CALL CLEAR_INBUFF ;AC083;SEH call moved to after call to INCHA in order to flush buffer ;AN059;
1815ENDIF ;AN000;
1816 POP DI ;AN000;restore registers
1817 POP DS ;AN000;
1818 RET ;AN000;
1819PCINCHA_CALL ENDP ;AN000;
1820;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1821;
1822; PCDISPQ_CALL
1823;
1824; Call to PCDISPQ.
1825;
1826; Entry: PB initialized.
1827;
1828; Exit: None
1829;
1830;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1831PCDISPQ_CALL PROC NEAR ;AN000;
1832 PUSH DS ;AN000;set segment
1833 POP ES ;AN000;
1834 PUSH DS ;AN000;
1835 PUSH DI ;AN000;save registers
1836 LEA DI,QM_OPT1 ;AN000;set DI to proper parameter block
1837IF CASRM ;AN000;
1838 MOV AH,00H ;AN000;make call to CAS-RM
1839 MOV BX,QM_RN ;AN000;set CAS routine number
1840 INT CASINT ;AN000;call routine
1841ELSE ;AN000;
1842 CALL DISPQ ;AN000;
1843ENDIF ;AN000;
1844 POP DI ;AN000;restore registers
1845 POP DS ;AN000;
1846 RET ;AN000;
1847PCDISPQ_CALL ENDP ;AN000;
1848;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1849;
1850; PCPANEL_CALL
1851;
1852; Initialize for call to PCPANEL including refresh of input and
1853; scroll fields in the logical video buffer before display.
1854;
1855; Entry: PB initialized.
1856;
1857; Exit: None
1858;
1859;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1860PCPANEL_CALL PROC NEAR ;AN000;
1861 PUSH QM_PANQUENUM ;AN000;
1862 POP PM_PANQUENUM ;AN000;number of panels in parent queue
1863 ;
1864 PUSH QM_CHDQUENUM ;AN000;
1865 POP PM_CHDQUENUM ;AN000;number panels in child queue
1866 ;
1867 PUSH QM_ACTIVEPAN ;AN000;
1868 POP PM_ACTIVEPAN ;AN000;active parent panel number
1869 ;
1870 MOV BX,PM_DOA ;AN000;display child panels in active
1871 OR BX,PM_DOV ;AN000;use child row, col, color overrid
1872 OR BX,PM_DOQ ;AN000;display childs in active parent
1873 OR BX,PM_CL ;AN000;initialize LVB to base char/attr
1874 ;
1875 CMP AX,1 ;AN000;check if break option is on
1876 JNE PP05 ;AN000;
1877 ;
1878 CMP WR_REFIELDCNT,0 ;AN000;GHG
1879 JNE PP06 ;AN000;GHG
1880 XOR AX,AX ;AN000;GHG
1881 JMP PP05 ;AN000;GHG
1882 ;
1883PP06: OR BX,PM_BK ;AN000;set panel manager break option on
1884 ;
1885PP05: MOV PM_OPT1,BX ;AN000;set options
1886 MOV PM_PANPDQNUM,1 ;AN000;beg/ending parent PDQ number
1887 MOV PM_PANBRKOFF,0 ;AN000;panel off in lvb of break panel
1888 JMP PP20 ;AN000;begin update
1889 ;set options to continue panel break
1890PP10: AND PM_OPT1,NOT PM_CL ;AN000;turn init LVB base char/attr off
1891 ;do Actual PCPANEL call
1892PP20: PUSH DS ;AN000;set segment
1893 POP ES ;AN000;
1894 PUSH DS ;AN000;
1895 PUSH DI ;AN000;save registers
1896 LEA DI,PM_OPT1 ;AN000;set DI to proper parameter block
1897IF CASRM ;AN000;
1898 MOV AH,00H ;AN000;make call to CAS-RM
1899 MOV BX,PM_RN ;AN000;set CAS routine number
1900 INT CASINT ;AN000;call routine
1901ELSE ;AN000;
1902 CALL PANEL ;AN000;
1903ENDIF ;AN000;
1904 POP DI ;AN000;restore registers
1905 POP DS ;AN000;
1906 ;
1907 CMP AX,1 ;AN000;check if the break option is
1908 JNE PPEXIT ;AN000; active
1909 ;
1910 MOV AX,PM_PANPDQNUM ;AN000;beg/ending parent PDQ number
1911 DEC AX ;AN000;adjust for possible break option
1912 ; on last panel in PDQ
1913 CMP AX,PM_PANQUENUM ;AN000;check if all panels updated
1914 JA PPEXIT ;AN000; when complete var is 1 greater
1915 ;
1916 CALL REFRESH_FLDS ;AN000;refresh fields in break panel
1917 JMP PP10 ;AN000;continue to process panels
1918PPEXIT: RET ;AN000;
1919PCPANEL_CALL ENDP ;AN000;
1920;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1921;
1922; PCMBEEP_CALL
1923;
1924; Call to PCMBEEP.
1925;
1926; Entry: PB initialized.
1927;
1928; Exit: None
1929;
1930;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1931PCMBEEP_CALL PROC NEAR ;AN000;
1932 PUSH DS ;AN000;set segment
1933 POP ES ;AN000;
1934 PUSH DS ;AN000;
1935 PUSH DI ;AN000;save registers
1936 LEA DI,MB_FREQUENCY ;AN000;set DI to proper parameter block
1937IF CASRM ;AN000;
1938 MOV AH,00H ;AN000;make call to CAS-RM
1939 MOV BX,MB_RN ;AN000;set CAS routine number
1940 INT CASINT ;AN000;call routine
1941ELSE ;AN000;
1942 CALL MBEEP ;AN000;
1943ENDIF ;AN000;
1944 POP DI ;AN000;restore registers
1945 POP DS ;AN000;
1946 RET ;AN000;
1947PCMBEEP_CALL ENDP ;AN000;
1948;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1949;
1950; PCSLCTP_CALL
1951;
1952; Call to PCSCLTP.
1953;
1954; Entry: ES:DI = beginning address of PCSLCTP parameter block.
1955;
1956; Exit: None
1957;
1958;
1959; Initialize color index vector
1960;
1961;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1962PCSLCTP_CALL PROC NEAR ;AN000;
1963 ;
1964 CALL CLEAR_INBUFF ;AN059;
1965 ;
1966 PUSH PM_CCBVECNUM ;AN000;set color index number
1967 POP ES:[DI]+SCB_CCBVECNUM;AN000;
1968
1969 PUSH CRD_CCBVECOFF ;AN000;set color index offset
1970 POP ES:[DI]+SCB_CCBVECOFF;AN000;
1971
1972 PUSH CRD_CCBVECSEG ;AN000;set color index segment
1973 POP ES:[DI]+SCB_CCBVECSEG;AN000;
1974
1975 PUSH ES:[DI]+SCB_OPT1 ;AN000;
1976 PUSH ES:[DI]+SCB_OPT2 ;AN000;
1977 PUSH ES:[DI]+SCB_OPT3 ;AN000;
1978 PUSH ES:[DI]+SCB_NUMLINE ;AN000;
1979 AND ES:[DI]+SCB_OPT3,NOT SCB_NUMS;AN000;
1980IF CASRM ;AN000;
1981 MOV AH,00H ;AN000;make call to CAS-RM
1982 MOV BX,SCB_RN ;AN000;set CAS routine number
1983 INT CASINT ;AN000;call slctopt
1984ELSE ;AN000;
1985 CALL SLCTP ;AN000;
1986ENDIF ;AN000;
1987 POP ES:[DI]+SCB_NUMLINE ;AN000;
1988 POP ES:[DI]+SCB_OPT3 ;AN000;
1989 POP ES:[DI]+SCB_OPT2 ;AN000;
1990 POP ES:[DI]+SCB_OPT1 ;AN000;
1991 RET ;AN000;
1992PCSLCTP_CALL ENDP ;AN000;
1993;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1994;
1995; PCHLPRD_CALL
1996;
1997; Call to PCHLPRD.
1998;
1999; Entry: PB initialized.
2000;
2001; Exit: None
2002;
2003;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2004PCHLPRD_CALL PROC NEAR ;AN000;
2005 PUSH DS ;AN000;set segment
2006 POP ES ;AN000;
2007 PUSH DS ;AN000;
2008 PUSH DI ;AN000;save registers
2009 LEA DI,HRD_OPT1 ;;AN000;set DI to proper parameter block
2010IF CASRM ;AN000;
2011 MOV AH,00H ;AN000;make call to CAS-RM
2012 MOV BX,HRD_RN ;AN000;set CAS routine number
2013 INT CASINT ;AN000;call routine
2014ELSE ;AN000;
2015 CALL HLPRD ;AN000;
2016ENDIF ;AN000;
2017 .IF < HRD_ERROR eq 0 > and;AN005;GHG
2018 .IF < HRD_DOSERROR eq 0 > ;AN005;GHG
2019 CLC ;AN005;GHG
2020 .ELSE ;AN005;GHG
2021 STC ;AN005;GHG
2022 .ENDIF ;AN005;GHG
2023 ;
2024 POP DI ;AN000;restore registers
2025 POP DS ;AN000;
2026 RET ;AN000;
2027PCHLPRD_CALL ENDP ;AN000;
2028;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2029;
2030; PCINSTR_CALL
2031;
2032; Call to PCINSTR.
2033;
2034; Entry: PB initialized.
2035;
2036; Exit: None
2037;
2038;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2039PCINSTR_CALL PROC NEAR ;AN000;
2040 PUSH DS ;AN000;set segment
2041 POP ES ;AN000;
2042 PUSH DS ;AN000;
2043 PUSH DI ;AN000;save registers
2044 LEA DI,INS_OPT ;;AN000;set DI to proper parameter block
2045IF CASRM ;AN000;
2046 MOV AH,00H ;AN000;make call to CAS-RM
2047 MOV BX,INS_RN ;AN000;set CAS routine number
2048 INT CASINT ;AN000;call routine
2049ELSE ;AN000;
2050 CALL INSTRN ;AN000;
2051ENDIF ;AN000;
2052 POP DI ;AN000;restore registers
2053 POP DS ;AN000;
2054 RET ;AN000;
2055PCINSTR_CALL ENDP ;AN000;
2056;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2057;
2058; PCINPUT_CALL
2059;
2060; Call to PCINPUT.
2061;
2062; Entry: PB initialized.
2063;
2064; Exit: None
2065;
2066;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2067PCINPUT_CALL PROC NEAR ;AN000;
2068 ;
2069 CALL CLEAR_INBUFF ;AN059;
2070 ;
2071 PUSH DS ;AN000;set segment
2072 POP ES ;AN000;
2073 PUSH DS ;AN000;
2074 PUSH DI ;AN000;save registers
2075 LEA DI,IN_OPT ;AN000;set DI to proper parameter block
2076IF CASRM ;AN000;
2077 MOV AH,00H ;AN000;make call to CAS-RM
2078 MOV BX,IN_RN ;AN000;set CAS routine number
2079 INT CASINT ;AN000;call slctopt
2080ELSE ;AN000;
2081 CALL INPUT ;AN000;
2082ENDIF ;AN000;
2083 POP DI ;AN000;restore registers
2084 POP DS ;AN000;
2085 RET ;AN000;
2086PCINPUT_CALL ENDP ;AN000;
2087;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2088;
2089; PCGVIDO_CALL
2090;
2091; Call to PCGVIDO.
2092;
2093; Entry: PB initialized.
2094;
2095; Exit: None
2096;
2097;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2098PCGVIDO_CALL PROC NEAR ;AN000;
2099 PUSH DS ;AN000;set segment
2100 POP ES ;AN000;
2101 PUSH DS ;AN000;
2102 PUSH DI ;AN000;save registers
2103 LEA DI,GV_STAT1 ;AN000;set DI to proper parameter block
2104IF CASRM ;AN000;
2105 MOV AH,00H ;AN000;make call to CAS-RM
2106 MOV BX,GV_RN ;AN000;set CAS routine number
2107 INT CASINT ;AN000;call routine
2108ELSE ;AN000;
2109 CALL GVIDO ;AN000;
2110ENDIF ;AN000;
2111 POP DI ;AN000;restore registers
2112 POP DS ;AN000;
2113 RET ;AN000;
2114PCGVIDO_CALL ENDP ;AN000;
2115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2116;
2117; PCWWRAP_CALL
2118;
2119; Call to PCWWRAP.
2120;
2121; Entry: PB initialized.
2122;
2123; Exit: None
2124;
2125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2126PCWWRAP_CALL PROC NEAR ;AN000;
2127 PUSH DS ;AN000;set segment
2128 POP ES ;AN000;
2129 PUSH DS ;AN000;
2130 PUSH DI ;AN000;save registers
2131 LEA DI,WWP_OPT1 ;AN000;set DI to proper parameter block
2132IF CASRM ;AN000;
2133 MOV AH,00H ;AN000;make call to CAS-RM
2134 MOV BX,PM_RN ;AN000;set CAS routine number
2135 INT CASINT ;AN000;call slctopt
2136ELSE ;AN000;
2137 CALL WWRAP ;AN000;
2138ENDIF ;AN000;
2139 POP DI ;AN000;restore registers
2140 POP DS ;AN000;
2141 RET ;AN000;
2142PCWWRAP_CALL ENDP ;AN000;
2143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2144;
2145;
2146; INITIALIZE
2147;
2148; Initialize the DOS allocated buffer with data (color, panels
2149; scrolling fields) and reserve room for help, queue management
2150; and the logical video buffer.
2151;
2152; Entry: WR_DATA2LEN = Length of DOS allocated buffer
2153; WR_DATA2OFF = Offset of DOS allocated buffer
2154; WR_DATA2SEG = Segment of DOS allocated buffer
2155;
2156; Exit: CY=0 and WR_ERROR = 0, No error occurred, 1= error occurred
2157; WR_DATA2LEN = Amount of DOS allocated buffer remaining
2158; WR_DATA2OFF = New offset of DOS allocated buffer
2159;
2160; ELSE
2161; CY=1 and WR_ERROR = 1, Error occurred (WR_DATA2LEN/OFF are invalid)
2162;
2163; CY support added
2164;
2165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2166INITIALIZE PROC NEAR ;AN000;
2167 ;AN000;
2168 PUSH ES ;AN000;
2169 PUSH DI ;AN000;
2170 PUSH DS ;AN000;
2171 PUSH SI ;AN000;
2172 ;AN000;
2173 MOV WR_ERROR,0 ;AN000;reset error inidicator
2174 ;
2175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2176;
2177; Read Compressed Panel file
2178;
2179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2180 ;
2181 MOV DX,OFFSET CFILE ;AN024;filename to read , SELECT.DAT
2182 XOR AL,AL ;AN024;
2183 MOV AH,3DH ;AN024;
2184 INT 21H ;AN024;open file
2185 ;AN024;
2186 MOV BX,AX ;AN024;get file handle
2187 PUSH BX ;AN024;save it
2188 XOR CX,CX ;AN024;
2189 XOR DX,DX ;AN024;
2190 MOV AL,2 ;AN024;move ptr to end of file
2191 MOV AH,42H ;AN024;LSEEK
2192 INT 21H ;AN024;
2193 ;AN024;
2194 PUSH AX ;AN024;save length
2195 XOR CX,CX ;AN024;zero file offset
2196 XOR DX,DX ;AN024; "
2197 MOV AL,0 ;AN024;move ptr to start of file
2198 MOV AH,42H ;AN024;LSEEK
2199 INT 21H ;AN024;
2200 POP BX ;AN024;restore length
2201 PUSH BX ;AN024;save it again
2202 SHR BX,1 ;AN024;convert to paragraph
2203 SHR BX,1 ;AN024;
2204 SHR BX,1 ;AN024;
2205 SHR BX,1 ;AN024;
2206 INC BX ;AN024;ensure enough room
2207 MOV AX,BX ;AN024;
2208 ;AN024;
2209 POP CX ;AN024;restore length
2210 POP BX ;AN024;restore file handle
2211
2212 MOV DX,WR_DATA2SEG ;AN024;GS:DI = target
2213 ADD DX,MAX_MEMPAR ;AN024;
2214 SUB DX,AX ;AN024;
2215 MOV DS,DX ;AN024;get segment of read buffer
2216 XOR DX,DX ;AN024;get offset to read into
2217 MOV AH,3FH ;AN024;read it
2218 INT 21H ;AN024;
2219 ;AN024;
2220 MOV AH,3EH ;AN024;close it
2221 INT 21H ;AN024;
2222 ;AN024;
2223 PUSH DS ;AN024;save source segment
2224 MOV AX,DATA ;AN024;
2225 MOV DS,AX ;AN024;get DATA segment
2226 MOV AX,WR_DATA2SEG ;AN024;ES:DI = target
2227 MOV ES,AX ;AN024;
2228 MOV DI,WR_DATA2OFF ;AN024;
2229 POP DS ;AN024;restore source segment
2230 XOR SI,SI ;AN024;offset is zero
2231 ;
2232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2233;
2234; Expand Panel file
2235;
2236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2237 ;
2238 MOV DX,0 ;AN024;initialize result string
2239EC1: CMP CX,0 ;AN024;any characters left?
2240 JNE EC2 ;AN024;yes
2241 JMP DONE1 ;AN024;no
2242 ;AN024;
2243EC2: LODSB ;AN024;get character
2244 DEC CX ;AN024;adjust character count
2245 MOV BL,1 ;AN024;set default repeat
2246 CMP AL,REPCHAR ;AN024;is it a repeat character
2247 JNE EC4 ;AN024;no
2248 ;AN024;
2249 CMP CX,0 ;AN024;any characters left?
2250 JNE EC2_4 ;AN024;
2251 JMP DONE1 ;AN024;no
2252 ;AN024;
2253EC2_4: LODSB ;AN024;get number of characters
2254 DEC CX ;AN024;Adjust character count
2255 CMP AL,REPCHAR ;AN024;is it still the repeat character
2256 JNE EC2_1 ;AN024;no
2257 JMP EC4 ;AN024;
2258 ;AN024;
2259EC2_1: CMP AL,1 ;AN024;code <CR>?
2260 JNE EC2_2 ;AN024;no
2261 ;AN024;
2262 MOV AL,13 ;AN024;
2263 JMP EC4 ;AN024;
2264 ;AN024;
2265EC2_2: CMP AL,2 ;AN024;code <EOF>?
2266 JNE EC3 ;AN024;no
2267 ;AN024;
2268 MOV AL,26 ;AN024;
2269 JMP EC4 ;AN024;
2270 ;AN024;
2271EC3: MOV BL,AL ;AN024;save number of repeats
2272 ;AN024;
2273 CMP CX,0 ;AN024;any characters left?
2274 JNE EC3_6 ;AN024;
2275 JMP DONE1 ;AN024;no
2276 ;AN024;
2277EC3_6: LODSB ;AN024;get actual character
2278 DEC CX ;AN024;adjust character count
2279 CMP AL,REPCHAR ;AN024;coded character?
2280 JNE EC4 ;AN024;no
2281 ;AN024;
2282 CMP CX,0 ;AN024;any characters left?
2283 JNE EC3_8 ;AN024;
2284 JMP DONE1 ;AN024;no
2285 ;AN024;
2286EC3_8: LODSB ;AN024;yes
2287 DEC CX ;AN024;adjust character count
2288 CMP AL,REPCHAR ;AN024;coded repchar?
2289 JE EC4 ;AN024;yes
2290 ;AN024;
2291 CMP AL,1 ;AN024;coded <CR>?
2292 JNE EC3_1 ;AN024;no
2293 ;AN024;
2294 MOV AL,13 ;AN024;yes
2295 JMP EC4 ;AN024;
2296 ;AN024;
2297EC3_1: CMP AL,2 ;AN024;coded <EOF>?
2298 JNE EC3_2 ;AN024;no
2299 ;AN024;
2300 MOV AL,26 ;AN024;
2301 JMP EC4 ;AN024;
2302 ;AN024;
2303EC3_2: INC CX ;AN024;unknown, restore
2304 DEC SI ;AN024;
2305 MOV AL,REPCHAR ;AN024;
2306 ;AN024;
2307EC4: ADD DL,BL ;AN024;adjust length
2308 ADC DH,0 ;AN024;
2309 ;AN024;
2310EC7: PUSH CX ;AN024;save CX
2311 XOR CX,CX ;AN024;zero CX
2312 MOV CL,BL ;AN024;set repeat number
2313 ;AN024;
2314EC8: REP STOSB ;AN024;store char
2315 POP CX ;AN024;recover CX
2316 JMP EC1 ;AN024;
2317 ;
2318;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2319;
2320; Finished expanding panel file
2321;
2322;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2323 ;
2324DONE1: ;AN024;
2325 MOV AX,DATA ;AN024;restore DATA segment
2326 MOV DS,AX ;AN024;
2327 ;AN024;
2328 MOV DI,WR_DATA2OFF ;AN024;restore pointer to start
2329 ADD DX,16 ;AN024;add paragraph to expanded length
2330 ADD WR_DATA2OFF,DX ;AN024;save new available offset
2331 ;AN024;
2332 MOV AX,WR_DATA2LEN ;AN024;calculate remaining buffer space
2333 SUB AX,DX ;AN024; from required space
2334 MOV WR_DATA2LEN,AX ;AN024;set remaining space
2335 ;
2336;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2337;
2338; initialize Color Table information
2339;
2340;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2341 ;
2342 .IF < GV_VIDMODE eq 7 > or ;AN000;
2343 .IF < ACTIVE eq LCD > ;AN000;
2344 .THEN ;AN000;
2345 MOV AX,ES:[DI].MONTBL ;AN000;
2346 MOV BX,ES:[DI].NMONTBL ;AN000;
2347 .ELSE ;AN000;
2348 MOV AX,ES:[DI].COLTBL ;AN000;
2349 MOV BX,ES:[DI].NCOLTBL ;AN000;
2350 .ENDIF ;AN000;
2351 ;AN000;
2352 MOV PM_CCBVECNUM,BX ;AN000;
2353 MOV PM_CCBVECOFF,AX ;AN000;set color index offset to PCPANEL
2354 MOV CRD_CCBVECOFF,AX ;AN000;set color index offset to PCPANEL
2355 MOV AX,ES ;AN000;set color index segment to
2356 MOV PM_CCBVECSEG,AX ;AN000; PCPANEL
2357 MOV CRD_CCBVECSEG,AX ;AN000; PCPANEL
2358 ;
2359;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2360;
2361; initialize PCDISPQ information
2362;
2363;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2364 ;
2365 MOV AX,ES:[DI].NPCBS ;AN000;
2366 MOV QM_PCBVECNUM,AX ;AN000;number of PCB elements in vector
2367 ;AN000;
2368 MOV AX,ES:[DI].PCBS ;AN000;
2369 MOV QM_PCBVECOFF,AX ;AN000;offset of PCB vector
2370 ;AN000;
2371 MOV AX,ES ;AN000;
2372 MOV QM_PCBVECSEG,AX ;AN000;segment of PCB vector
2373 ;
2374;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2375;
2376; initialize PCPANEL with PCDISPQ and PCPANRD information
2377;
2378;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2379 ;
2380 MOV SI,ES:[DI].PCBS ;AN000;offset of PCB vector read from
2381 MOV PM_PCBVECOFF,SI ;AN000; disk
2382 ;AN000;
2383 MOV AX,ES ;AN000;segment of PCB vector read from
2384 MOV PM_PCBVECSEG,AX ;AN000; disk
2385 ;AN000;
2386 MOV CX,ES:[DI].NPCBS ;AN000;number of PCB vectors read from
2387 MOV PM_PCBVECNUM,CX ;AN000; disk
2388 ;
2389;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2390;
2391; add segment address to PCBs
2392;
2393;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2394 ;
2395 ADD SI,2 ;AN000;move to offset
2396I_PCB_SEG: ;AN000;
2397 MOV BX,ES:[SI] ;AN000;
2398 MOV ES:[BX].PCB_EXPANDSEG,AX ;AN000;
2399 MOV ES:[BX].PCB_CHILDSEG,AX ;AN000;
2400 ADD SI,4 ;AN000;
2401 LOOP I_PCB_SEG ;AN000;
2402 ;
2403;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2404;
2405; add segment address to PCB vectors
2406;
2407;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2408 ;
2409 MOV CX,ES:[DI].NPCBS ;AN000;number of PCB vectors
2410 MOV SI,ES:[DI].PCBS ;AN000;offset of PCB vectors
2411I_PCBVEC_SEG: ;AN000;
2412 MOV ES:[SI],AX ;AN000;
2413 ADD SI,4 ;AN000;
2414 LOOP I_PCBVEC_SEG ;AN000;
2415 ;
2416;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2417;
2418; initialize SCB vector table pointer
2419;
2420;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2421 ;
2422 MOV AX,ES ;AN000;
2423 MOV SRD_SCBVECSEG,AX ;AN000;get beginning SCB vector address
2424 MOV SI,ES:[DI].SCBS ;AN000;
2425 MOV SRD_SCBVECOFF,SI ;AN000;
2426 MOV CX,ES:[DI].NSCBS ;AN000;number of SCB vectors
2427 ;
2428;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2429;
2430; add segment address to SCBs
2431;
2432;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2433 ;
2434 ADD SI,2 ;AN000;move to offset
2435 ;AN000;
2436I_SCB_SEG: ;AN000;
2437 MOV BX,ES:[SI] ;AN000;
2438 MOV ES:[BX].SCB_UASEG,AX ;AN000;
2439 MOV ES:[BX].SCB_DASEG,AX ;AN000;
2440 MOV ES:[BX].SCB_PUSEG,AX ;AN000;
2441 MOV ES:[BX].SCB_PDSEG,AX ;AN000;
2442 MOV ES:[BX].SCB_PISEG,AX ;AN000;
2443 MOV ES:[BX].SCB_AISEG,AX ;AN000;
2444 MOV ES:[BX].SCB_CISEG,AX ;AN000;
2445 MOV ES:[BX].SCB_UISEG,AX ;AN000;
2446 MOV ES:[BX].SCB_DISEG,AX ;AN000;
2447 MOV ES:[BX].SCB_INDEXSEG,AX ;AN000;
2448 MOV ES:[BX].SCB_SELSEG,AX ;AN000;
2449 MOV ES:[BX].SCB_OAPSEG,AX ;AN000;
2450 MOV ES:[BX].SCB_OASSEG,AX ;AN000;
2451 ADD SI,4 ;AN000;
2452 LOOP I_SCB_SEG ;AN000;
2453 ;
2454;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2455;
2456; add segment address to SCB vectors
2457;
2458;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2459 ;
2460 MOV CX,ES:[DI].NSCBS ;AN000;number of SCB vectors
2461 MOV SI,ES:[DI].SCBS ;AN000;offset of SCB vectors
2462I_SCBVEC_SEG: ;AN000;
2463 MOV ES:[SI],AX ;AN000;
2464 ADD SI,4 ;AN000;
2465 LOOP I_SCBVEC_SEG ;AN000;
2466 ;
2467;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2468;
2469; Init 4KB for logical video buffer for PCPANEL
2470;
2471;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2472 ;
2473 ;AN000;
2474 MOV AX,GV_SCRWIDTH ;AN000;
2475 MOV PM_LVBWIDTH,AX ;AN000;width of log vid buf in bytes
2476 ;AN000;
2477 MOV AX,GV_SCRLEN ;AN000;
2478 MOV PM_LVBLEN,AX ;AN000;number bytes in logical video
2479 ;AN000;
2480 PUSH WR_LVBOFF ;AN000;
2481 POP PM_LVBOFF ;AN000;offset of logical video buffer
2482 ;AN000;
2483 PUSH WR_LVBSEG ;AN000;set the allocated segment
2484 POP PM_LVBSEG ;AN000;
2485 ;AN000;
2486 MOV AX,WR_LVBLEN ;AN000;calculate remaining buffer
2487 SUB AX,GV_SCRLEN ;AN000;
2488 MOV WR_LVBLEN,AX ;AN000;set remaining space
2489 ;AN000;
2490 MOV AX,GV_SCRLEN ;AN000;
2491 ADD WR_LVBOFF,AX ;AN000;set new free buffer offset
2492 ;AN000;
2493 MOV LVB_INITED,TRUE ;AN000;LVB always remains
2494 ;
2495;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2496;
2497; PCDISPQ buffer initialization option
2498;
2499;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2500 ;
2501 MOV QM_OPT1,QM_INIT ;AN000;Initialize working buffer
2502 ;AN000;
2503 PUSH WR_MAXCHDQUE ;AN000;
2504 POP QM_MAXCHDQUE ;AN000;max # of child queues to save
2505 ;AN000;
2506 PUSH WR_MAXPANQUE ;AN000;
2507 POP QM_MAXPANQUE ;AN000;max # of panel queues to save
2508 ;AN000;
2509 PUSH WR_MAXNUMCHD ;AN000;
2510 POP QM_MAXNUMCHD ;AN000;max # of parent panels queued
2511 ;AN000;
2512 PUSH WR_MAXNUMPAN ;AN000;
2513 POP QM_MAXNUMPAN ;AN000;max # of child panels queued
2514 ;AN000;
2515 PUSH WR_LVBLEN ;AN000;
2516 POP QM_BUFLEN ;AN000;length of avail buffer
2517 ;AN000;
2518 PUSH WR_LVBOFF ;AN000;
2519 POP QM_BUFOFF ;AN000;offset of buffer
2520 ;AN000;
2521 PUSH WR_LVBSEG ;AN000;
2522 POP QM_BUFSEG ;AN000;segment of buffer
2523 ;AN000;
2524 CALL PCDISPQ_CALL ;AN000;update display queue
2525 ;AN000;
2526 MOV AX,WR_LVBLEN ;AN000;calculate remaining buffer space
2527 SUB AX,QM_BUFLEN ;AN000; from required space
2528 MOV WR_LVBLEN,AX ;AN000;set remaining space
2529 ;AN000;
2530 MOV AX,QM_BUFLEN ;AN000;add returned buffer size
2531 ADD WR_LVBOFF,AX ;AN000;set new free buffer offset
2532 ;AN000;
2533 PUSH QM_PANQUEOFF ;AN000;offset address of parent queue
2534 POP PM_PANQUEOFF ;AN000;offset address of parent queue
2535 ;AN000;
2536 PUSH QM_PANQUESEG ;AN000;segment address of parent queue
2537 POP PM_PANQUESEG ;AN000;segment address of parent queue
2538 ;AN000;
2539 PUSH QM_CHDQUEOFF ;AN000;offset of child queue
2540 POP PM_CHDQUEOFF ;AN000;offset of child queue
2541 ;AN000;
2542 PUSH QM_CHDQUESEG ;AN000;segment of child queue
2543 POP PM_CHDQUESEG ;AN000;segment of child queue
2544 ;
2545;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2546;
2547; Reserve buffer for completed return key buffer
2548;
2549;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2550 ;
2551 PUSH WR_MAXRETKSZ ;AN000;maximum number of bytes in return
2552 POP WR_CRETLEN ;AN000; buffer
2553 ;AN000;
2554 PUSH WR_LVBOFF ;AN000;offset of completed return buffer
2555 POP WR_CRETOFF ;AN000;
2556 ;AN000;
2557 PUSH WR_LVBSEG ;AN000;segment of completed return
2558 POP WR_CRETSEG ;AN000; buffer
2559 ;AN000;
2560 MOV AX,WR_LVBLEN ;AN000;calculate remaining buffer space
2561 SUB AX,WR_MAXRETKSZ ;AN000;
2562 MOV WR_LVBLEN,AX ;AN000;set remaining space
2563 ;AN000;
2564 MOV AX,WR_MAXRETKSZ ;AN000;
2565 ADD WR_LVBOFF,AX ;AN000;set new free buffer offset
2566 CLC ;AN000;GHG
2567 JMP IEXIT ;AN000;
2568 ;AN000;
2569I110: MOV WR_ERROR,1 ;AN000;set error indicator
2570 STC ;AN000;GHG
2571IEXIT: ;AN000;exit
2572 POP SI ;AN000;
2573 POP DS ;AN000;
2574 POP DI ;AN000;
2575 POP ES ;AN000;
2576 RET ;AN000;
2577INITIALIZE ENDP ;AN000;
2578;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2579;
2580; INSERT_DISK_ROUTINE: Prompts user for insertion of disk into A: drive
2581;
2582; INPUT: DISK_PANEL - Panel number to be displayed
2583; SEARCH_FILE - File to search for on diskette
2584;
2585; OUTPUT: none
2586;
2587; OPERATION: Panel macros are called to display the panel and search
2588; for the file.
2589;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2590PUBLIC INSERT_DISK_ROUTINE ;AN000;
2591INSERT_DISK_ROUTINE PROC NEAR ;AN000;
2592 ;
2593 .REPEAT ;AN000;
2594 MOV AX,PAN_INST_PROMPT ;AN000;
2595 CALL INIT_PQUEUE_CALL ;AN000;
2596 MOV AX,DISK_PANEL ;AN000;
2597 CALL PREPARE_PANEL_CALL ;AN000;
2598 MOV AX,PAN_HBAR ;AN000;
2599 CALL PREPARE_PANEL_CALL ;AN000;
2600 CALL HANDLE_CHILDREN ;AN000;
2601 CALL DISPLAY_PANEL_CALL ;AN000;
2602 ;
2603 MOV CX,FK_ENT_LEN ;AN000;
2604 LEA DX,FK_ENT ;AN000;
2605 CALL GET_FUNCTION_CALL ;AN000;
2606 ;
2607 MOV DI, SEARCH_FILE ;AN000;
2608 MOV CX, E_FILE_ATTR ;AN000;
2609 CALL FIND_FILE_ROUTINE ;AN000;
2610 .LEAVE < nc > ;AN000;
2611 ;
2612 MOV BX,ERR_DOS_DISK ;AN000;
2613 MOV CX,E_RETURN ;AN000;
2614 CALL HANDLE_ERROR_CALL ;AN000;
2615 JNC CONTINUE ;AN000;
2616 CLEAR_SCREEN2 ;AN000;
2617 JMP EXIT_SELECT ;AN000;
2618CONTINUE: ;AN000;
2619 .UNTIL ;AN000;
2620 ;
2621 RET ;AN000;
2622INSERT_DISK_ROUTINE ENDP ;AN000;
2623;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2624;
2625; Clear the input buffer
2626;
2627;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2628CLEAR_INBUFF PROC NEAR ;AN059;
2629; ;
2630CI_1: MOV AH,0BH ;AN059;
2631 INT 21H ;AN059;
2632 CMP AL,0 ;AN059;
2633 JE CI_2 ;AN059;
2634 MOV AH,07H ;AN059;
2635 INT 21H ;AN059;
2636 JMP CI_1 ;AN059;
2637 ;
2638CI_2: RET ;AN059;
2639CLEAR_INBUFF ENDP ;AN059;
2640;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2641;
2642;
2643SELECT ENDS ;AN000;
2644 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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3;
4;
5;
6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7 EXTRN GET_PCB:NEAR ;AN000;
8 EXTRN CURSORON:NEAR ;AN000;
9 EXTRN CURSOROFF:NEAR ;AN000;
10 EXTRN ADJUST_UP:NEAR ;AN000;
11 EXTRN INITIALIZE:NEAR ;AN000;
12 EXTRN ADJUST_DOWN:NEAR ;AN000;
13 EXTRN PCGVIDO_CALL:NEAR ;AN000;
14 EXTRN HANDLE_CHILDREN:NEAR ;AN000;
15 EXTRN INIT_STRING_CALL:NEAR ;AN000;
16 EXTRN INIT_PQUEUE_CALL:NEAR ;AN000;
17 EXTRN EXEC_SCROLL_CALL:NEAR ;AN000;
18 EXTRN INIT_SCROLL_CALL:NEAR ;AN000;
19 EXTRN GET_STRING_CALL:NEAR ;AN000;
20 EXTRN INIT_SCROLL_STATUS_CALL:NEAR ;AN000;
21 EXTRN PREPARE_PANEL_CALL:NEAR ;AN000;
22 EXTRN DISPLAY_PANEL_CALL:NEAR ;AN000;
23 EXTRN GET_FUNCTION_CALL:NEAR ;AN000;
24 EXTRN TOGGLE_SUPPORT_CALL:NEAR ;AN000;
25 EXTRN CHECK_MIN_MAX:NEAR ;AN000;
26 EXTRN CONVERT_NUMERIC:NEAR ;AN000;
27 EXTRN CONVERT_ASCII:NEAR ;AN000;
28 EXTRN SET_SCROLL_COLOUR:NEAR ;AN000;
29 EXTRN SET_SCROLL_CALL:NEAR ;AN000;
30 EXTRN INIT_SCROLL_W_LIST_CALL:NEAR ;AN000;
31 EXTRN INIT_SCROLL_W_NUM_CALL:NEAR ;AN000;
32 EXTRN HANDLE_ERROR_CALL:FAR ;AN000;
33 EXTRN HANDLE_PANEL_CALL:FAR ;AN000;
34 EXTRN HANDLE_KEYSTROKE:FAR ;AN000;
35 EXTRN RETURN_STRING_CALL:NEAR ;AN000;
36 EXTRN INIT_CHAR_CALL:NEAR ;AN000;JW
37 EXTRN INSERT_DISK_ROUTINE:NEAR ;AN000;JW
38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
39 \ 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
--- /dev/null
+++ b/v4.0/src/SELECT/CASSFAR.LIB
Binary files 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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3; CASTRUC.INC
4;
5;
6;
7;
8;
9; PCPANEL PCB Structure
10;
11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
12PCB_PB STRUC ;AN000;
13PCB_OPT1 DW 0 ;AN000;option word
14PCB_OPT2 DB 0 ;AN000;option 2 added
15PCB_OPT3 DB 0 ;AN000;option 3 added
16PCB_OPT4 DB 0 ;AN000;option 4 added
17PCB_UROW DW 0 ;AN000;row location of panel
18PCB_UCOL DW 0 ;AN000;column location of panel
19PCB_WIDTH DW 0 ;AN000;text char width of panel
20PCB_MAXSIZE DW 0 ;AN000;Max poss panel sizing in text
21PCB_CCBID DW 0 ;AN000;Index number of log color
22PCB_BORDER DB 8 DUP(0) ;AN000;8 log border characters
23PCB_COMPLEN DW 0 ;AN000;Length compress panel in mem
24PCB_COMPOFF DW 0 ;AN000;Off addr compressed panel
25PCB_COMPSEG DW 0 ;AN000;Seg addr compressed panel
26PCB_EXPANDLEN DW 0 ;AN000;Length expanded panel in mem
27PCB_EXPANDOFF DW 0 ;AN000;Off addr of expanded panel in
28PCB_EXPANDSEG DW 0 ;AN000;Seg addr of expanded panel in
29PCB_MIXEDLEN DW 0 ;AN000;Len of the mixed panel in mem
30PCB_MIXEDOFF DW 0 ;AN000;Off addr of mixed panel in mem
31PCB_MIXEDSEG DW 0 ;AN000;Seg addr of mixed panel in mem
32PCB_LABELLEN DW 0 ;AN000;Len of the panel label
33PCB_LABELOFF DW 0 ;AN000;Off addr of the panel label
34PCB_LABELSEG DW 0 ;AN000;Seg addr of the panel label
35PCB_LABELROW DW 0 ;AN000;Beg row of title relative to pan
36PCB_LABELCOL DW 0 ;AN000;Beg col of title relative to pan
37PCB_FPANLEN DW 0 ;AN000;Len of the panel stored in file
38PCB_FNAMEOFF DW 0 ;AN000;Off address of full filespec
39PCB_FNAMESEG DW 0 ;AN000;Seg address of full filespec
40PCB_FTEXTLOCL DW 0 ;AN000;Lower off word of the beg off
41PCB_FTEXTLOCH DW 0 ;AN000;High off word of the beg off
42PCB_LROW DW 0 ;AN000;lower right corner (graphs only)
43PCB_LCOL DW 0 ;AN000;lower left corner (graphs only)
44PCB_VERTSHADE DB 0 ;AN000;vertical shadow mask (grap only)
45PCB_HORZSHADE DB 0 ;AN000;horizontal shadow mask (graphs)
46PCB_GFILLOFF DW 0 ;AN000;offset of wind char fill bit map
47PCB_GFILLSEG DW 0 ;AN000;segmnt of wind char fill bit map
48PCB_SCRSV1OFF DW 0 ;AN000;off scr buffer save 10H, 12H
49PCB_SCRSV2OFF DW 0 ;AN000;off scr buffer save 11H
50PCB_SCRSAVSEG DW 0 ;AN000;segment of screen buffer save
51PCB_RESERVED DW 0 ;AN000;reserved
52PCB_CHILDNUM DW 0 ;AN000;Number of child panel entries
53PCB_CHILDOFF DW 0 ;AN000;Off address of child panel table
54PCB_CHILDSEG DW 0 ;AN000;Seg address of child panel table
55PCB_PB ENDS ;AN000;
56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
57;
58; PCSLCTP Structure
59;
60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
61SCB_PB STRUC ;AN000;
62SCB_OPT1 DW 0 ;AN000;option word one
63SCB_OPT2 DW 0 ;AN000;option word two
64SCB_OPT3 DW 0 ;AN000;option word three
65SCB_OPT4 DW 0 ;AN068;SEH option word four
66SCB_FREQ DW 0 ;AN000;error beep frequency
67SCB_ROW DW 0 ;AN000;upper left row
68SCB_COL DW 0 ;AN000;upper left column
69SCB_RELROW DW 0 ;AN000;relative upper left row
70SCB_RELCOL DW 0 ;AN000;relative upper left column
71SCB_WIDTH DW 0 ;AN000;line width
72SCB_NUMLINE DW 0 ;AN000;number of lines
73SCB_TOPELE DW 0 ;AN000;number of element on top
74SCB_NUMELE DW 0 ;AN000;number of elements
75SCB_CURELE DW 0 ;AN000;current element
76SCB_NUMCOL DW 0 ;AN000;maximun number of cols to scroll
77SCB_CURCOL DW 0 ;AN000;display offset into opt strings
78SCB_NLISTCOL DW 0 ;AN000;num list txt col offset in strg
79SCB_NLISTSEP DB 0 ;AN000;numbered list separator
80SCB_SKLEN DW 0 ;AN000;select keystroke string length
81SCB_SKOFF DW 0 ;AN000;select keystroke string offset
82SCB_SKSEG DW 0 ;AN000;select keystroke string segment
83SCB_RLLEN DW 0 ;AN000;return/leave string length
84SCB_RLOFF DW 0 ;AN000;return/leave string offset
85SCB_RLSEG DW 0 ;AN000;return/leave string segment
86SCB_RELEN DW 0 ;AN000;return/erase string length
87SCB_REOFF DW 0 ;AN000;return/erase string offset
88SCB_RESEG DW 0 ;AN000;return/erase string segment
89SCB_UALEN DW 0 ;AN000;up arrow string length
90SCB_UAOFF DW 0 ;AN000;up arrow string offset
91SCB_UASEG DW 0 ;AN000;up arrow string segment
92SCB_DALEN DW 0 ;AN000;down arrow string length
93SCB_DAOFF DW 0 ;AN000;down arrow string offset
94SCB_DASEG DW 0 ;AN000;down arrow string segment
95SCB_LALEN DW 0 ;AN000;left arrow string length
96SCB_LAOFF DW 0 ;AN000;left arrow string offset
97SCB_LASEG DW 0 ;AN000;left arrow string segment
98SCB_RALEN DW 0 ;AN000;right arrow string length
99SCB_RAOFF DW 0 ;AN000;right arrow string offset
100SCB_RASEG DW 0 ;AN000;right arrow string segment
101SCB_PULEN DW 0 ;AN000;page-up string length
102SCB_PUOFF DW 0 ;AN000;page-up string offset
103SCB_PUSEG DW 0 ;AN000;page-up string segment
104SCB_PDLEN DW 0 ;AN000;page-down string length
105SCB_PDOFF DW 0 ;AN000;page-down string offset
106SCB_PDSEG DW 0 ;AN000;page-down string segment
107SCB_PILEN DW 0 ;AN000;pointer indicator strg length
108SCB_PIOFF DW 0 ;AN000;pointer indicator string offset
109SCB_PISEG DW 0 ;AN000;pointer indicator string segment
110SCB_PICOL DW 0 ;AN000;pointer ind txt col off into stg
111SCB_AILEN DW 0 ;AN000;active indicator strg length
112SCB_AIOFF DW 0 ;AN000;active indicator string offset
113SCB_AISEG DW 0 ;AN000;active indicator string segment
114SCB_AICOL DW 0 ;AN000;active ind txt col off into stg
115SCB_CILEN DW 0 ;AN000;check mark text string length
116SCB_CIOFF DW 0 ;AN000;check mark text string offset
117SCB_CISEG DW 0 ;AN000;check mark text string segment
118SCB_CICOL DW 0 ;AN000;check mark offset into opt strg
119SCB_UILEN DW 0 ;AN000;up indicator string length
120SCB_UIOFF DW 0 ;AN000;up indicator string offset
121SCB_UISEG DW 0 ;AN000;up indicator string segment
122SCB_UIROW DW 0 ;AN000;up indicator row location
123SCB_UICOL DW 0 ;AN000;up indicator column location
124SCB_DILEN DW 0 ;AN000;down indicator string length
125SCB_DIOFF DW 0 ;AN000;down indicator string offset
126SCB_DISEG DW 0 ;AN000;down indicator string segment
127SCB_DIROW DW 0 ;AN000;down indicator row location
128SCB_DICOL DW 0 ;AN000;down indicator column locaiton
129SCB_LILEN DW 0 ;AN000;left indicator string length
130SCB_LIOFF DW 0 ;AN000;left indicator string offset
131SCB_LISEG DW 0 ;AN000;left indicator string segment
132SCB_LIROW DW 0 ;AN000;left indicator row location
133SCB_LICOL DW 0 ;AN000;left indicator column location
134SCB_RILEN DW 0 ;AN000;right indicator string length
135SCB_RIOFF DW 0 ;AN000;right indicator string offset
136SCB_RISEG DW 0 ;AN000;right indicator string segment
137SCB_RIROW DW 0 ;AN000;right indicator row location
138SCB_RICOL DW 0 ;AN000;right indicator column locaiton
139SCB_NCRAYOFF DW 0 ;AN000;normal color array offset
140SCB_NCRAYSEG DW 0 ;AN000;normal color array segment
141SCB_CCBID DW 0 ;AN000;logical color index number
142SCB_CCBVECNUM DW 0 ;AN000;number color index table entries
143SCB_CCBVECOFF DW 0 ;AN000;offset addr of color index table
144SCB_CCBVECSEG DW 0 ;AN000;segment addr of color index tabl
145SCB_INDEXOFF DW 0 ;AN000;index array offset
146SCB_INDEXSEG DW 0 ;AN000;index array segment
147SCB_SELOFF DW 0 ;AN000;element selection array offset
148SCB_SELSEG DW 0 ;AN000;element selection array segment
149SCB_OAOPT DW 0 ;AN000;option array option word
150SCB_OAPOFF DW 0 ;AN000;option array pointer offset
151SCB_OAPSEG DW 0 ;AN000;option array pointer segment
152SCB_OASLEN DW 0 ;AN000;option array string length
153SCB_OASSEG DW 0 ;AN000;option array string segment
154SCB_OASTERMC DB 0 ;AN000;option array string term char
155SCB_KS DW 0 ;AN000;keystroke
156SCB_LVBOFF DW 0 ;AN000;log vid buf offset override
157SCB_LVBSEG DW 0 ;AN000;log vid buf segment override
158SCB_FMOPT1 DW 0 ;AN000;general purpose format hook opt
159SCB_FMOPT2 DW 0 ;AN000;general purpose format hook opt
160SCB_TRANLEN DW 0 ;AN000;length of translation table
161SCB_TRANOFF DW 0 ;AN000;offset of translation table
162SCB_TRANSEG DW 0 ;AN000;segment of translation table
163SCB_MONOOFF DW 0 ;AN000;monocasing table offset
164SCB_MONOSEG DW 0 ;AN000;monocasing table segment
165SCB_DBCSLEN DW 0 ;AN000;dbcs table length
166SCB_DBCSOFF DW 0 ;AN000;dbcs table offset
167SCB_DBCSSEG DW 0 ;AN000;dbcs table segment
168SCB_FONTOFF DW 0 ;AN068;SEH offset of font descriptor block
169SCB_FONTSEG DW 0 ;AN068;SEH segment of font descriptor block
170SCB_PB ENDS ;AN000;
171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
172;
173;
174;
175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
176CHD_PB STRUC ;AN000;
177CHD_PCB DW 0 ;AN000;child PCB element number
178CHD_ROW DW 0 ;AN000;row override
179CHD_COL DW 0 ;AN000;column override
180CHD_INX DW 0 ;AN000;color index pointer override
181 DW 0 ;AN000;function key attribute
182 DB 0,0 ;AN000;keystroke associated with child
183 DW 0 ;AN000;option word
184CHD_PB ENDS ;AN000;
185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
186;
187; Input Field Control Block (ICB) Structure
188;
189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
190ICB_PB STRUC ;AN000;begin input field control block
191ICB_OPT1 DW 0 ;AN000;option word one
192ICB_OPT2 DW 0 ;AN000;option word two
193ICB_OPT3 DW 0 ;AN000;option word three
194ICB_OPT4 DW 0 ;AN000;option word four
195ICB_ROW DW 0 ;AN000;upper left corner field row
196ICB_COL DW 0 ;AN000;upper left corner field column
197ICB_WIDTH DW 0 ;AN000;number of chars before wrapping
198ICB_CCBID DW 0 ;AN000;color index number assigned
199ICB_STATUS DW 0 ;AN000;default change/minus status
200ICB_CURCHAR DW 0 ;AN000;cursor character pos in field
201ICB_HRSTART DW 0 ;AN000;NEW ADD...Hor scroll support
202ICB_SOUND DW 0 ;AN000;frequency of error beep
203ICB_KEYRET DW 0 ;AN000;ASCII code of the key returned
204ICB_ENDBYTE DW 0 ;AN000;length of data entered into fld
205ICB_FIELDLEN DW 0 ;AN000;length of input field
206ICB_FIELDOFF DW 0 ;AN000;offset of input field
207ICB_FIELDSEG DW 0 ;AN000;segment of input field
208ICB_ATTROFF DW 0 ;AN000;offset of color attribute buffer
209ICB_ATTRSEG DW 0 ;AN000;segment of color attr buffer
210ICB_DEFLEN DW 0 ;AN000;length of field's default value
211ICB_DEFOFF DW 0 ;AN000;offset field's default value
212ICB_DEFSEG DW 0 ;AN000;segment field's default value
213ICB_RETLEN DW 0 ;AN000;length of return string
214ICB_RETOFF DW 0 ;AN000;offset of return string
215ICB_RETSEG DW 0 ;AN000;segment of return string
216ICB_ALLLEN DW 0 ;AN000;length of allow chars
217ICB_ALLOFF DW 0 ;AN000;offset of allow chars
218ICB_ALLSEG DW 0 ;AN000;segment of allow chars
219ICB_SKIPLEN DW 0 ;AN000;length of skip chars
220ICB_SKIPOFF DW 0 ;AN000;offset of skip chars
221ICB_SKIPSEG DW 0 ;AN000;segment of skip chars
222ICB_ALL1LEN DW 0 ;AN000;length of allow once chars
223ICB_ALL1OFF DW 0 ;AN000;offset of allow once chars
224ICB_ALL1SEG DW 0 ;AN000;segment of allow once chars
225ICB_DECPOS DW 0 ;AN000;precision of decimal point
226ICB_RANUML1 DW 0 ;AN000;low numeric range (low intrgr)
227ICB_RANUMH1 DW 0 ;AN000;low numeric range (high intrgr)
228ICB_RANUML2 DW 0 ;AN000;high numeric range (low intrgr)
229ICB_RANUMH2 DW 0 ;AN000;high numeric range (high intrgr)
230ICB_MANDPROW DW 0 ;AN000;beginning row of minus and plus
231ICB_MANDPCOL DW 0 ;AN000;beginning col of minus & plus
232ICB_MINUSLEN DW 0 ;AN000;length of minus sign string
233ICB_MINUSOFF DW 0 ;AN000;offset of minus sign string
234ICB_MINUSSEG DW 0 ;AN000;segment of minus sign string
235ICB_PLUSLEN DW 0 ;AN000;length of plus sign string
236ICB_PLUSOFF DW 0 ;AN000;offset of plus sign string
237ICB_PLUSSEG DW 0 ;AN000;segment of plus sign string
238ICB_PB ENDS ;AN000;
239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3;
4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5.ALPHA ;AN000;
6.XLIST ;AN000;
7INCLUDE STRUC.INC ;AN000;
8.LIST ;AN000;
9 ;
10 PUBLIC MONO, CGA, EGA, LCD ;AN000;
11 PUBLIC ACTIVE, ALTERNATE ;AN000;
12 ;
13 EXTRN IN_CURNOR:WORD ;AN000;JW
14 ;
15DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
16MONO EQU 1 ;AN000;
17CGA EQU 2 ;AN000;
18EGA EQU 3 ;AN000;
19LCD EQU 4 ;AN000;
20 ;
21READ_DISPLAY EQU 1AH ;AN000;
22ALT_SELECT EQU 12H ;AN000;
23EGA_INFO EQU 10H ;AN000;
24MONOCHROME EQU 1 ;AN000;
25BASE_COLOR EQU 0B800H ;AN000;
26BASE_MONO EQU 0B000H ;AN000;
27GET_SYS_ID EQU 0C0H ;AN000;
28LCD_MODEL EQU 0F9H ;AN000;
29GET_STATUS EQU 43H ;AN000;
30ON EQU 1 ;AN000;
31 ;
32SYSTEM_ID STRUC ;AN000;
33 DW ? ;AN000;
34MODEL_BYTE DB ? ;AN000;
35SYSTEM_ID ENDS ;AN000;
36 ;
37ACTIVE DB 0 ;AN000;
38ALTERNATE DB 0 ;AN000;
39 ;
40DATA ENDS ;AN000;DATA
41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
42;
43;
44;
45;
46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
47SERVICE SEGMENT PARA PUBLIC 'SERVICE' ;AN000;segment for far routine
48 ASSUME CS:SERVICE,DS:DATA ;AN000;
49 ;
50 PUBLIC VIDEO_CHECK ;AN000;
51VIDEO_CHECK PROC FAR ;AN000;
52 PUSH AX ;AN000;
53 PUSH BX ;AN000; save all registers
54 PUSH CX ;AN000;
55 PUSH DX ;AN000;
56 PUSH SI ;AN000;
57 PUSH DI ;AN000;
58 PUSH ES ;AN000;
59 XOR AL,AL ;AN000;
60 MOV AH,READ_DISPLAY ;AN000; check for VGA first.
61 INT 10H ;AN000;
62 .IF <AL EQ READ_DISPLAY> ;AN000; VGA present?
63 .SELECT ;AN000; yes....BL contains active..
64 .WHEN <BL EQ MONO> ;AN000; display code.
65 MOV ACTIVE,MONO ;AN000;
66 .WHEN <BL EQ CGA> ;AN000;
67 MOV ACTIVE,CGA ;AN000;
68 .WHEN <BL A CGA> ;AN000;
69 MOV ACTIVE,EGA ;AN000;
70 .ENDSELECT ;AN000;
71 .SELECT ;AN000; ...and BH contains alternate..
72 .WHEN <BH EQ MONO> ;AN000; display code.
73 MOV ALTERNATE,MONO ;AN000;
74 .WHEN <BH EQ CGA> ;AN000;
75 MOV ALTERNATE,CGA ;AN000;
76 .WHEN <BH A CGA> ;AN000;
77 MOV ALTERNATE,EGA ;AN000;
78 .ENDSELECT ;AN000;
79 .ELSE ;AN000; VGA not there..check for EGA.
80 MOV AH,ALT_SELECT ;AN000;
81 MOV BL,EGA_INFO ;AN000;
82 INT 10H ;AN000;
83 .IF <BL NE EGA_INFO> ;AN000; EGA present?
84 MOV ACTIVE,EGA ;AN000; yes....set as active.
85 .IF <BH EQ MONOCHROME> ;AN000; if monochrome attached to EGA then..
86 MOV AX,BASE_COLOR ;AN000; check if CGA is an alternate.
87 CALL CHECK_BUFF ;AN000;
88 .IF <AH EQ AL> ;AN000; CGA there?
89 MOV ALTERNATE,CGA ;AN000; yes....alternate display.
90 .ENDIF ;AN000;
91 .ELSE ;AN000; if color attached to EGA then...
92 MOV AX,BASE_MONO ;AN000; check if monochrome is an alternate.
93 CALL CHECK_BUFF ;AN000;
94 .IF <AH EQ AL> ;AN000; MONO there?
95 MOV ALTERNATE,MONO ;AN000; yes....alternate display.
96 .ENDIF ;AN000;
97 .ENDIF ;AN000;
98 .ELSE ;AN000; EGA not present so...
99 MOV AH,GET_SYS_ID ;AN000; check for LCD.
100 INT 15H ;AN000;
101 .IF <ES:[BX].MODEL_BYTE EQ LCD_MODEL> AND ;AN000; if model byte says convertible..
102 MOV AH,GET_STATUS ;AN000; and..
103 INT 15H ;AN000;
104 .IF <BIT AL NAND ON> ;AN000; if LCD screen attached..then
105 MOV ACTIVE,LCD ;AN000; set LCD as active display.
106 .ELSE ;AN000;
107 MOV AX,BASE_MONO ;AN000; not LCD...check for..
108 CALL CHECK_BUFF ;AN000; MONO....
109 .IF <AH EQ AL> ;AN000;
110 MOV ACTIVE,MONO ;AN000; MONO found...set as active.
111 MOV IN_CURNOR,0B0CH ;AN000;JW set mono cursor size
112 .ENDIF ;AN000;
113 MOV AX,BASE_COLOR ;AN000; ..and check for color.
114 CALL CHECK_BUFF ;AN000;
115 .IF <AH EQ AL> ;AN000;
116 MOV ALTERNATE,CGA ;AN000; color found...set CGA as alternate.
117 .ENDIF ;AN000;
118 .ENDIF ;AN000;
119 .ENDIF ;AN000;
120 .ENDIF ;AN000;
121 POP ES ;AN000;
122 POP DI ;AN000; restore registers.
123 POP SI ;AN000;
124 POP DX ;AN000;
125 POP CX ;AN000;
126 POP BX ;AN000;
127 POP AX ;AN000;
128 RET ;AN000;
129VIDEO_CHECK ENDP ;AN000;
130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
131;
132;
133;
134;
135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
136CHECK_BUFF PROC NEAR ;AN000; write to video buffer to see if it is present
137 PUSH DS ;AN000;
138 MOV DS,AX ;AN000; load DS with address of buffer
139 MOV CH,DS:0 ;AN000; save buffer information (if present)
140 MOV AL,55H ;AN000; prepare to write sample data
141 MOV DS:0,AL ;AN000; write to buffer
142 PUSH BX ;AN000; terminate the bus so that lines..
143 POP BX ;AN000; are reset
144 MOV AH,DS:0 ;AN000; bring sample data back...
145 MOV DS:0,CH ;AN000; repair damage to buffer
146 POP DS ;AN000;
147 RET ;AN000;
148CHECK_BUFF ENDP ;AN000;
149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
150SERVICE ENDS ;AN000;
151 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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3; COLORS.ASM
4;
5;
6;
7; Color CODE Definition
8;
9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
10
11 .alpha ; arrange segments alphabetically
12
13 INCLUDE SEL-PAN.INC ;AN000;
14 ;
15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
16;
17; Color Index Structure
18;
19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
20CCB_PB STRUC ;AN000;
21CCB_A1 DB 0 ;AN000;Normal/Base Panel
22CCB_A2 DB 0 ;AN000;Selection Bar/Field Highlight
23CCB_A3 DB 0 ;AN000;Selected Options
24CCB_A4 DB 0 ;AN000;Highlighted and Selected Options
25CCB_A5 DB 0 ;AN000;Active Options
26CCB_A6 DB 0 ;AN000;Direction Indicators
27CCB_A7 DB 0 ;AN000;Title
28CCB_A8 DB 0 ;AN000;Instructions
29CCB_A9 DB 0 ;AN000;Function Keys
30CCB_AA DB 0 ;AN000;Mnemonic Highlight
31CCB_AB DB 0 ;AN000;Reserved
32CCB_AC DB 0 ;AN000;Reserved
33CCB_PB ENDS ;AN000;
34 ;
35 PUBLIC WR_CIS,WR_CIS2,L_WR_CIS,L_WR_CIS2;AN000;
36 ;
37CODE SEGMENT PARA PUBLIC 'CODE' ;AN000;
38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
39;
40; Color Index Structure (Actual color values)
41;
42; Attribute Color Attribute Assignment
43; --------- -----------------------------------
44; A1 - Normal/Base Panel
45; A2 - Selection Bar/Field Highlight
46; A3 - Selected Options
47; A4 - Highlighted and Selected Options
48; A5 - Active Options
49; A6 - Direction Indicators
50; A7 - Title
51; A8 - Instructions
52; A9 - Function Keys
53; AA - Mnemonic Highlight
54; AB - Reserved
55; AC - Reserved
56;
57; A1, A2, A3, A4, A5, A6, A7, A8, A9, AA, AB, AC
58; � � � � � � � � � � � �
59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
60WR_CIS DB 31,113, 48,113, 31, 31, 30, 30,112, 28, 00, 00 ;AN000;Logo Scr
61WR_CIS_W EQU $-WR_CIS ;AN000;
62 DB 31,127, 48,113, 31, 31, 30, 30,112, 28, 00, 00 ;AN000;Inactive scroll
63 DB 112,112,112,112,112,112,112,112,112,112, 00, 00 ;AN000;Ctxt Help
64 DB 112,112,112,112,112,112,112,112,112,112, 00, 00 ;AN000;Ctxt Help
65; DB 4Fh,112,112,112,112,112,112,112,112,112, 00, 00 ;Indx Help
66 DB 112,112,112,112,112,112,112,112,112,112, 00, 00 ;AN000;Indx Help
67L_WR_CIS EQU ($-WR_CIS)/WR_CIS_W ;AN000;
68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
69;
70; Color Index Structure (Actual MONO values)
71;
72; A1, A2, A3, A4, A5, A6, A7, A8, A9, AA, AB, AC
73; � � � � � � � � � � � �
74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
75WR_CIS2 DB 7,112, 48,112, 7, 7, 7, 7,112, 28, 00, 00 ;AN000;Logo Scr
76WR_CIS2_W EQU $-WR_CIS2 ;AN000;
77 DB 7,127, 48,112, 7, 7, 7, 7,112, 28, 00, 00 ;AN000;Logo Scr
78 DB 112,112,112,112,112,112,112,112,112,112, 00, 00 ;AN000;Ctxt Help
79 DB 112,112,112,112,112,112,112,112,112,112, 00, 00 ;AN000;Ctxt Help
80 DB 112,112,112,112,112,112,112,112,112,112, 00, 00 ;AN000;Indx Help
81L_WR_CIS2 EQU ($-WR_CIS2)/WR_CIS2_W ;AN000;
82CODE ENDS ;AN000;
83 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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3;
4;
5; DATA.MAC
6;
7;
8; Define data segment
9;
10; The following variables are defined in the data segment and are used as
11; parameter block structures for specific CAS routine calls. The
12; initialization of these variables will eventually occur by the dialog.
13;
14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15 ;
16 PUBLIC QM_OPT1,QM_ID ;AN000;
17 PUBLIC WR_DRETLEN,WR_DRETOFF,WR_DATA2LEN ;AN000;
18 PUBLIC WR_MAXMEMPAR,WR_DATA2SEG,WR_DATA2OFF ;AN000;
19 PUBLIC WR_LVBMEM,WR_LVBSEG,WR_LVBOFF,WR_LVBLEN ;AN000;
20 PUBLIC WR_ERROR,PM_BASECHAR,PM_BASEATTR,QM_ACTIVEPAN ;AN000;
21 PUBLIC WR_DRETSEG,QM_OPT2 ;AN000;
22 PUBLIC CRD_CCBVECOFF,CRD_CCBVECSEG,INC_KS ;AN000;
23 PUBLIC IN_ICBID,WR_REFBUF ;AN000;
24 PUBLIC WR_HLPOPT,WR_HLPROW,WR_HCBCONT,WR_SCBID ;AN000;
25 PUBLIC IN_CCBVECOFF,IN_CCBVECSEG ;AN000;
26 PUBLIC WR_REFNUM,WR_REFOFF,WR_REFSEG,WR_REFCNT ;AN000;
27 PUBLIC WR_REFIELDCNT,WR_REFID ;AN000;
28 PUBLIC WR_MAXREFID ;AN000;
29 PUBLIC WR_MAXHELPSZ ;AN000;
30 PUBLIC HRD_BUFSEG ;AN000;
31 PUBLIC HRD_BUFOFF ;AN000;
32 PUBLIC HRD_BUFLEN ;AN000;
33 PUBLIC IN_CURNOR ;AN000;JW
34 ;
35DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
36 ;
37 EXTRN WR_ICBVEC:WORD ;AN000;
38 EXTRN KD_BACKSPACE:BYTE ;AN000;
39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
40;
41; PCGVIDO Parameter Block
42;
43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
44GV_STAT1 DW 0 ;AN000;low bit flag indicating status
45GV_STAT2 DW 0 ;AN000;high bit flag indicating status
46GV_SCRWIDTH DW 0 ;AN000;# of attr and char in one line
47GV_SCRLEN DW 0 ;AN000;# of bytes per video buffer page
48GV_CURPAGENUM DB 0 ;AN000;current active page
49GV_VIDMODE DB 0 ;AN000;current video state/mode
50GV_BASE_6845 DW 0 ;AN000;base port address of 6845
51GV_STAT_6845 DW 0 ;AN000;status port address of 6845
52GV_PHYOFF DW 0 ;AN000;phy video buffer offset
53GV_PHYOFFPAGE DW 0 ;AN000;phys vid buf off adj for page
54GV_PHYSEG DW 0 ;AN000;phy video buffer segment
55GV_OSLOGOFF DW 0 ;AN000;operating sys log vid buff os
56GV_OSLOGSEG DW 0 ;AN000;operating sys log vid buff seg
57GV_APLOGOFF DW 0 ;AN000;application log vid buf offset
58GV_APLOGSEG DW 0 ;AN000;application log vid buf segment
59GV_CSH DW 0 ;AN000;character height in scan lines
60GV_CSW DW 0 ;AN000;character width in scan lines
61GV_NUMLINES DW 0 ;AN000;number of rows in text screen
62GV_CURPOS0 DW 0 ;AN000;cursor position for page 0 R/C
63GV_CURPOS1 DW 0 ;AN000;cursor position for page 1
64GV_CURPOS2 DW 0 ;AN000;cursor position for page 2
65GV_CURPOS3 DW 0 ;AN000;cursor position for page 3
66GV_CURPOS4 DW 0 ;AN000;cursor position for page 4
67GV_CURPOS5 DW 0 ;AN000;cursor position for page 5
68GV_CURPOS6 DW 0 ;AN000;cursor position for page 6
69GV_CURPOS7 DW 0 ;AN000;cursor position for page 7
70GV_CURMOD0 DW 0 ;AN000;cursor mode for page 0
71GV_CURMOD1 DW 0 ;AN000;cursor mode for page 1
72GV_CURMOD2 DW 0 ;AN000;cursor mode for page 2
73GV_CURMOD3 DW 0 ;AN000;cursor mode for page 3
74GV_CURMOD4 DW 0 ;AN000;cursor mode for page 4
75GV_CURMOD5 DW 0 ;AN000;cursor mode for page 5
76GV_CURMOD6 DW 0 ;AN000;cursor mode for page 6
77GV_CURMOD7 DW 0 ;AN000;cursor mode for page 7
78GV_CURROW DW 0 ;AN000;cursor row location
79GV_CURCOL DW 0 ;AN000;cursor column location
80GV_CURSTART DW 0 ;AN000;cursor size (starline)
81GV_CUREND DW 0 ;AN000;cursor size (endline)
82GV_CURWIDTH DW 0 ;AN000;cursor width
83GV_CURATTR DW 0 ;AN000;cursor attribute
84GV_COLORBITS DB 0 ;AN000;color bits (graphics mode)
85GV_ERRCODE DW 0 ;AN000;error code
86GV_RESERVED DB 40 DUP(0) ;AN000;reserved locations
87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
88;
89; PCINSTR parameter block
90;
91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
92INS_OPT DW 0 ;AN000;option word
93INS_KS DW 0 ;AN000;keystroke
94INS_FLEN DW 0 ;AN000;length of find string
95INS_FOFF DW 0 ;AN000;offset of find string
96INS_FSEG DW 0 ;AN000;segment of find string
97INS_SLEN DW 0 ;AN000;length of string to search
98INS_SOFF DW 0 ;AN000;offset of string to search
99INS_SSEG DW 0 ;AN000;segment of string to search
100INS_SPOFF DW 0 ;AN000;position to start seach
101INS_RSLT DW 0 ;AN000;result
102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
103;
104; PCHLPRD parameter block
105;
106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
107HRD_OPT1 DW 0 ;AN000;option word
108HRD_BUFLEN DW 0 ;AN000;length of avail buffer
109HRD_BUFOFF DW 0 ;AN000;offset of buffer
110HRD_BUFSEG DW 0 ;AN000;segment of buffer
111HRD_ID DW 0 ;AN000;ID of help text
112HRD_FILSPOFF DW WR_HLPBUF ;AN000;offset of filespec
113HRD_FILSPSEG DW DATA ;AN000;segment of filespec
114HRD_TOPICNUM DW 0 ;AN000;max num of helps
115HRD_TOPICLEN DW 0 ;AN000;Length of longest topic
116HRD_TOPICOFF DW 0 ;AN000;offset to table of offsets
117HRD_TOPICSEG DW 0 ;AN000;segment to table of offsets
118HRD_TEXTLEN DW 0 ;AN000;Length of help text
119HRD_TEXTOFF DW 0 ;AN000;offset to help text
120HRD_TEXTSEG DW 0 ;AN000;Segment to help text
121HRD_ERROR DW 0 ;AN000;errors
122HRD_DOSERROR DW 0 ;AN000;DOS error conditions
123HRD_RESERVED DB 48 DUP(0) ;AN000;reserved for internal use
124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
125;
126; PCSCRRD parameter block
127;
128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
129SRD_OPT1 DW 0 ;AN000;option word
130SRD_BUFLEN DW 0 ;AN000;length of avail buffer
131SRD_BUFOFF DW 0 ;AN000;offset of buffer
132SRD_BUFSEG DW 0 ;AN000;segment of buffer
133SRD_ID DW 0 ;AN000;ID number to read
134SRD_FILSPEOFF DW WR_SCRBUF ;AN000;offset of filespec
135SRD_FILSPESEG DW DATA ;AN000;segment of filespec
136SRD_SCBVECNUM DW 0 ;AN000;num SCBs in vector
137SRD_SCBVECOFF DW 0 ;AN000;offset of SCB vector
138SRD_SCBVECSEG DW 0 ;AN000;segment of SCB vector
139SRD_MAXNUMSCB DW 0 ;AN000;max # flds poss in memry at once
140SRD_ERROR DW 0 ;AN000;errors
141SRD_DOSERROR DW 0 ;AN000;DOS error conditions
142SRD_RESERVED DB 50 DUP(0) ;AN000;reserved for internal use
143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
144;
145; PCINCHA parameter block
146;
147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
148INC_OPT DW 0 ;AN000;option word
149INC_STAT DW 0 ;AN000;status word
150INC_KS DW 0 ;AN000;keystroke found
151INC_TRANLEN DW 0 ;AN000;length of translation table
152INC_TRANOFF DW 0 ;AN000;offset of translation table
153INC_TRANSEG DW 0 ;AN000;segment of translation table
154INC_DBCSLEN DW 0 ;AN000;length of DBCS table
155INC_DBCSOFF DW 0 ;AN000;offset of DBCS table
156INC_DBCSSEG DW 0 ;AN000;segment of DBCS table
157INC_MONOOFF DW 0 ;AN000;offset of monocasing table
158INC_MONOSEG DW 0 ;AN000;segment of monocasing table
159INC_RESERVED DB 12 DUP(0) ;AN000;reserved for internal use
160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
161;
162; PCCLRRD parameter block
163;
164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
165CRD_OPT1 DW 0 ;AN000;option word
166CRD_BUFLEN DW 0 ;AN000;length of avail buffer
167CRD_BUFOFF DW 0 ;AN000;offset of buffer
168CRD_BUFSEG DW 0 ;AN000;segment of buffer
169CRD_ID DW 0 ;AN000;color index ID number to read
170CRD_FILSPEOFF DW WR_CLRBUF ;AN000;offset of filespec
171CRD_FILSPESEG DW DATA ;AN000;segment of filespec
172CRD_CCBVECLEN DW 0 ;AN000;length of index in bytes
173CRD_CCBVECOFF DW 0 ;AN000;offset of color index
174CRD_CCBVECSEG DW 0 ;AN000;segment of color index
175CRD_ERROR DW 0 ;AN000;errors
176CRD_DOSERROR DW 0 ;AN000;DOS error conditions
177CRD_RESERVED DB 34 DUP(0) ;AN000;reserved for internal use
178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
179;
180; PCPANRD parameter block
181;
182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
183PRD_OPT1 DW 0 ;AN000;option word
184PRD_BUFLEN DW 0 ;AN000;length of avail buffer
185PRD_BUFOFF DW 0 ;AN000;offset of buffer
186PRD_BUFSEG DW 0 ;AN000;segment of buffer
187PRD_ID DW 0 ;AN000;PCB number to read
188PRD_FILSPELEN DW WR_PANLEN ;AN000;length of filespec
189PRD_FILSPEOFF DW WR_PANBUF ;AN000;offset of filespec
190PRD_FILSPESEG DW DATA ;AN000;segment of filespec
191PRD_PCBVECNUM DW 0 ;AN000;num PCBs in vector
192PRD_PCBVECOFF DW 0 ;AN000;offset of PCB vector
193PRD_PCBVECSEG DW 0 ;AN000;segment of PCB vector
194PRD_MAXNUMPAN DW 0 ;AN000;max # pans poss in memry at once
195PRD_ERROR DW 0 ;AN000;errors
196PRD_DOSERROR DW 0 ;AN000;DOS error conditions
197PRD_RESERVED DB 48 DUP(0) ;AN000;reserved for internal use
198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
199;
200; PCDISPQ Parameter Block
201;
202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
203QM_OPT1 DW 0 ;AN000;option word one
204QM_OPT2 DW 0 ;AN000;option word two
205QM_ID DW 0 ;AN000;parent/child PCB number
206QM_ACTIVEPAN DW 0 ;AN000;current active parent panel
207QM_COLOROVER DW 0 ;AN000;parent/child override color indx
208QM_ROWOVER DW 0 ;AN000;parent/child override row
209QM_COLUMOVER DW 0 ;AN000;parent/child override column
210QM_MAXCHDQUE DW 0 ;AN000;max # of child queues to save
211QM_MAXPANQUE DW 0 ;AN000;max # of panel queues to save
212QM_MAXNUMCHD DW 0 ;AN000;max # of parent panels queued
213QM_MAXNUMPAN DW 0 ;AN000;max # of child panels queued
214QM_PCBVECNUM DW 0 ;AN000;number of PCB elements in vector
215QM_PCBVECOFF DW 0 ;AN000;offset of PCB vector
216QM_PCBVECSEG DW 0 ;AN000;segment of PCB vector
217QM_BUFLEN DW 0 ;AN000;length of avail buffer
218QM_BUFOFF DW 0 ;AN000;offset of buffer
219QM_BUFSEG DW 0 ;AN000;segment of buffer
220QM_PANQUENUM DW 0 ;AN000;returns number in parent PDQ
221QM_PANQUEOFF DW 0 ;AN000;returns parent PDQ offset
222QM_PANQUESEG DW 0 ;AN000;returns parent PDQ segment
223QM_CHDQUENUM DW 0 ;AN000;returns number in child PDQ
224QM_CHDQUEOFF DW 0 ;AN000;returns child PDQ offset
225QM_CHDQUESEG DW 0 ;AN000;returns child PDQ segment
226QM_RETKEYSLEN DW 0 ;AN000;active child keys buffer length
227QM_RETKEYSOFF DW 0 ;AN000;active child keys buffer offset
228QM_RETKEYSSEG DW 0 ;AN000;active child keys buffer segmente
229QM_ERROR DW 0 ;AN000;returns error status
230QM_RESERVED DB 66 DUP(0) ;AN000;reserved for internal use
231;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
232;
233; PCPANEL Parameter Control Block
234;
235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
236PM_OPT1 DW 0 ;AN000;option word
237PM_PANPDQNUM DW 0 ;AN000;beg/ending parent PDQ number
238PM_PANBRKOFF DW 0 ;AN000;panel off in lvb of break panel
239PM_PANBRKID DW 0 ;AN000;ID number of break panel
240PM_ACTIVEPAN DW 0 ;AN000;current active parent panel PCB
241PM_BASECHAR DB 0 ;AN000;text background character
242PM_BASEATTR DB 0 ;AN000;color attribute of back char
243PM_PANQUENUM DW 0 ;AN000;number of panels in parent queue
244PM_PANQUEOFF DW 0 ;AN000;offset address of parent queue
245PM_PANQUESEG DW 0 ;AN000;segment address of parent queue
246PM_CHDQUENUM DW 0 ;AN000;number panels in child queue
247PM_CHDQUEOFF DW 0 ;AN000;offset of child queue
248PM_CHDQUESEG DW 0 ;AN000;segment of child queue
249PM_PCBVECNUM DW 0 ;AN000;number of index elements
250PM_PCBVECOFF DW 0 ;AN000;off addr of vect pointing to pan
251PM_PCBVECSEG DW 0 ;AN000;seg addr of vect pointing to pan
252PM_CCBVECNUM DW 0 ;AN000;number color index table entries
253PM_CCBVECOFF DW 0 ;AN000;offset addr of color index table
254PM_CCBVECSEG DW 0 ;AN000;segment addr of color index tabl
255PM_LVBLEN DW 0 ;AN000;number bytes in logical vid buf
256PM_LVBOFF DW 0 ;AN000;offset of logical video buffer
257PM_LVBSEG DW 0 ;AN000;segment of logical video buffer
258PM_LVBWIDTH DW 0 ;AN000;width of log vid buf in bytes
259PM_TRANS_C DB 0 ;AN000;character indicating trans field
260PM_TRANS_A DB 0 ;AN000;attribute indicating trans field
261PM_REFVECNUM DW 0 ;AN000;number refresh table entries
262PM_REFVECOFF DW 0 ;AN000;offset of refresh table
263PM_REFVECSEG DW 0 ;AN000;segment of refresh table
264PM_ERROR DW 0 ;AN000;error conditions
265PM_RESERVED DB 417 DUP (0) ;AN000;reserved for internal use
266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
267;
268; PCINPUT parameter block
269;
270;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
271IN_OPT DW IN_AMONO ;AN000;option word one
272IN_ICBID DW 1 ;AN000;current input field to process
273IN_ICBOFF DW 0 ;AN000;returned offset of current ICB
274IN_ICBSEG DW 0 ;AN000;returned segment of current ICB
275IN_ICBVECNUM DW 31 ;AN000;number of ICB entires in vector
276IN_ICBVECOFF DW WR_ICBVEC ;AN000;offset of ICB vector
277IN_ICBVECSEG DW DATA ;AN000;segment of ICB vector
278IN_CCBVECOFF DW 0 ;AN000;offset of color index table
279IN_CCBVECSEG DW 0 ;AN000;segment of color index table
280IN_CURNOR DW 0607H ;AN000;normal cursor size
281IN_CURINS DW 0207H ;AN000;cursor size in insert mode
282IN_TRANLEN DW 0 ;AN000;length of key translation table
283IN_TRANOFF DW 0 ;AN000;offset of key translation table
284IN_TRANSEG DW 0 ;AN000;segment of key translation table
285IN_MONOOFF DW 0 ;AN000;offset of monocasing table
286IN_MONOSEG DW 0 ;AN000;segment of monocasing table
287IN_DBCSLEN DW 0 ;AN000;length double byte range table
288IN_DBCSOFF DW 0 ;AN000;offset double byte range table
289IN_DBCSSEG DW 0 ;AN000;segment double byte range table
290IN_KEYSOFF DW KD_BACKSPACE ;AN000;offset of keystroke definitions
291IN_KEYSSEG DW DATA ;AN000;segment of keystroke definitions
292IN_CAPROW DW 0 ;AN000;row of caps lock flag
293IN_CAPCOL DW 0 ;AN000;col of caps lock flag
294IN_CAPLEN DW 0 ;AN000;length of caps lock flag text
295IN_CAPOFF DW 0 ;AN000;offset of caps lock flag text
296IN_CAPSEG DW 0 ;AN000;segment of caps lock flag text
297IN_INSROW DW 0 ;AN000;row of insert flag
298IN_INSCOL DW 0 ;AN000;col of insert flag
299IN_INSLEN DW 0 ;AN000;length of insert flag text
300IN_INSOFF DW 0 ;AN000;offset of insert flag text
301IN_INSSEG DW 0 ;AN000;segment of insert flag text
302IN_NUMROW DW 0 ;AN000;row of num lock flag
303IN_NUMCOL DW 0 ;AN000;col of num lock flag
304IN_NUMLEN DW 0 ;AN000;length of num lock flag text
305IN_NUMOFF DW 0 ;AN000;offset of num lock flag text
306IN_NUMSEG DW 0 ;AN000;segment of num lock flag text
307IN_SCRROW DW 0 ;AN000;row of scroll lock flag
308IN_SCRCOL DW 0 ;AN000;col of scroll lock flag
309IN_SCRLEN DW 0 ;AN000;length of scroll lock flag text
310IN_SCROFF DW 0 ;AN000;offset of scroll lock flag text
311IN_SCRSEG DW 0 ;AN000;segment of scroll lock flag text
312IN_THOUSEP DB 0,0 ;AN000;thousands separator
313IN_THOUPOS DW 0 ;AN000;space between thousnd separators
314IN_DECSEP DB 0,0 ;AN000;decimal separator
315IN_DELIMITEN DB '[]' ;AN000;left & right bracket char - on
316IN_DELIMITEX DB ' ' ;AN000;left & right bracket char - off
317IN_DELIMITDIR DB '<>' ;AN000;direction delimitors (horz wind)
318IN_BORDEREN DB '�Ŀ�����' ;AN000;8 border char (�Ŀ�����) entry
319IN_BORDEREX DB '12345678' ;AN000;8 border char (�Ŀ�����) exit
320IN_LVBOFF DW 0 ;AN000;log vid buf offset override
321IN_LVBSEG DW 0 ;AN000;log vid buf segment override
322IN_CURINSOFF DW 0 ;AN000;offset insert cursor bit map (W)
323IN_CURINSSEG DW 0 ;AN000;segment insert cursor bit map (W)
324IN_CURRPLOFF DW 0 ;AN000;offset replace cursor bit map (W)
325IN_CURRPLSEG DW 0 ;AN000;segment replace cursor bit map (W)
326IN_DELOFF DW 0 ;AN000;offset delimiter bit maps =W
327IN_DELSEG DW 0 ;AN000;segment delimiter bit maps =W
328IN_ERROR DW 0 ;AN000;error word
329IN_RESERVED DB 450 DUP(0) ;AN000;reserved for internal use
330;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
331;
332; PCWWRAP parameter block
333;
334;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
335WWP_OPT1 DW 0 ;AN000;option word
336WWP_SRCTXTLEN DW 0 ;AN000;the length of actual text
337WWP_SRCTXTOFF DW 0 ;AN000;the offset to actual text
338WWP_SRCTXTSEG DW 0 ;AN000;the segment to actual text
339WWP_SRCBUFLEN DW 0 ;AN000;lenght of the entire buffer
340WWP_DESBUFLEN DW 0 ;AN000;the length of dest buffer
341WWP_DESBUFOFF DW 0 ;AN000;the offset to dest buffer
342WWP_DESBUFSEG DW 0 ;AN000;the segment to dest buffer
343WWP_WIDTH DW 53 ;AN000;width of the # of char on a line
344WWP_NUMLINES DW 0 ;AN000;Number of actual line process
345WWP_FORMAT DB '@' ;AN000;Used to indicate the begin formt
346WWP_NOFORMAT DB '@' ;AN000;Used to indicate the format off
347WWP_SRCHYSMB DB '#' ;AN000;Symbol that is used as hyphen
348WWP_HYSYMBOL DB '-' ;AN000;Actual hyphen symbol
349WWP_SPACESYM DB '&' ;AN000;symbol for padding spaces at EOL
350WWP_ERROR DW 0 ;AN000;Internal error conditions
351WWP_RESERVED DB 5 DUP(0) ;AN000;reserved for internal use
352;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
353;
354; PCMBEEP parameter block
355;
356;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
357MB_FREQUENCY DW SND_FREQ ;AN000;beep frequency
358MB_DURATION DW SND_DURA ;AN000;beep duration
359;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
360;
361; Input field management internal variables:
362;
363; Miscellaneous internal variables
364;
365WR_ICBID DW 0 ;AN000;general ICB ID number
366WR_ICBVECOFF DW WR_ICBVEC ;AN000;ICB vector address
367WR_ICBVECSEG DW DATA ;AN000;ICB vector address
368;
369; Return key string internal variables:
370; Dynamic return key string variables to add to complete return string
371;
372WR_DRETLEN DW 0 ;AN000;dynamic return string length
373WR_DRETOFF DW 0 ;AN000;dynamic return string offset
374WR_DRETSEG DW 0 ;AN000;dynamic return string segment
375;
376; Complete return key string buffer variables
377;
378WR_CRETLEN DW 0 ;AN000;current length of complete ret sg
379WR_CRETOFF DW 0 ;AN000;current offset of complete ret sg
380WR_CRETSEG DW 0 ;AN000;current segment of complete ret s
381;
382; Help management internal variables:
383;
384; Help options, status, filespec, and override variables
385;
386WR_HLPOPT DW 0 ;AN000;help options
387WR_HLPPAN DW 0 ;AN000;help child panels that are active
388WR_HLPDIS DW 0 ;AN000;help status
389WR_HLPROW DW 0 ;AN000;help row override
390WR_HLPCOL DW 0 ;AN000;help column override
391;
392; Help text ID variables
393;
394WR_HCBCONT DW 0 ;AN000;current contextual help ID
395WR_HCBHELP DW HCB_HELP ;AN000;help-on-help ID
396WR_HCBKEYS DW HCB_KEYS ;AN000;help on keys ID
397;
398; Help scroll ID variable
399;
400WR_SCBCONT DW SCR_CONTEXT_HLP ;AN000;scroll contextual help ID
401WR_SCBINDX DW SCR_CONTEXT_HLP ;AN000;scroll indexed help ID
402;
403; Help panel ID variables
404;
405WR_PCBHELP DW CHILD_F1HELP ;AN000;F1=Help
406WR_PCBSWIT DW 0 ;AN000;F2=Switch
407WR_PCBINDX DW 0 ;AN000;F5=Index
408WR_PCBKEYS DW CHILD_F9KEYS ;AN000;F9=Keys
409WR_PCBHPAN DW PAN_HPAN ;AN000;contextual help panel
410WR_PCBQUIT DW CHILD_QUIT ;AN000;Esc=Quit
411WR_PCBENTR DW CHILD_ENTER ;AN000;Enter
412WR_PCBERROR DW ERR_BORDER ;AN000;Error panel
413;
414; Help keystroke variables
415;
416WR_KEYHELP DW KEY_HELP ;AN000;F1=Help
417WR_KEYSWIT DW KEY_SWIT ;AN000;F2=Switch
418WR_KEYINDX DW KEY_INDX ;AN000;F5=Index
419WR_KEYKEYS DW KEY_KEYS ;AN000;F9=Keys
420WR_KEYSELT DW KEY_SELT ;AN000;Enter
421WR_KEYQUIT DW KEY_QUIT ;AN000;Esc=Quit
422
423WR_RETHLPBUF DB ESCAPE ;AN000;help dynamic return keys
424WR_RETHLPLEN EQU ($-WR_RETHLPBUF) ;AN000;
425;-----------------------
426;
427; Management internal variables:
428;
429WR_PANBUF LABEL BYTE ;AN000;
430WR_SCRBUF LABEL BYTE ;AN000;
431WR_CLRBUF DB 'SELECT.DAT',0 ;AN000;filespec
432WR_CLRLEN EQU ($-WR_CLRBUF) ;AN000;
433WR_SCRLEN EQU ($-WR_SCRBUF) ;AN000;
434WR_PANLEN EQU ($-WR_PANBUF) ;AN000;
435;-----------------------
436WR_HLPBUF DB 'SELECT.HLP',0 ;AN000;filespec
437WR_HLPLEN EQU ($-WR_HLPBUF) ;AN000;
438;
439; Panel Field Refresh Relationship Table
440;
441; Format = DW Panel control block number
442; DW Total number of fields in this record
443; DW Object type ID
444; DW Field ID
445;
446; DW Object type ID
447; DW Field ID
448;
449; Panel Field Refresh Table Location
450;
451;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
452WR_REFNUM DW 1 ;AN000;number of PCB entries
453WR_REFOFF DW WR_REFBUF ;AN000;offset of table
454WR_REFSEG DW DATA ;AN000;segment of table
455WR_REFCNT DW 0 ;AN000;refresh counter
456
457WR_REFBUF DW 0 ;AN000; PCB number
458WR_REFIELDCNT DW 0 ;AN000; #fields with this PCB
459WR_REFID DW 0,0 ;AN000; Object ID 1, Field ID 1
460 DW 0,0 ;AN000; Object ID 2, Field ID 2
461 DW 0,0 ;AN000; Object ID 3, Field ID 3
462 DW 0,0 ;AN000; Object ID 4, Field ID 4
463 DW 0,0 ;AN000; Object ID 5, Field ID 5
464 DW 0,0 ;AN000; Object ID 6, Field ID 6
465 DW 0,0 ;AN000; Object ID 7, Field ID 7
466 DW 0,0 ;AN000; Object ID 8, Field ID 8
467 DW 0,0 ;AN000; Object ID 9, Field ID 9
468 DW 0,0 ;AN000; Object ID10, Field ID10
469WR_MAXREFID EQU ($-WR_REFID)/2;AN000;
470
471WR_SCBID DW 0 ;AN000;current PCSLCTP ID number
472WR_ERROR DW 0 ;AN000;0= no error, 1= error condition
473;
474; Memory allocation variables - needs to support multiple segment table
475;
476WR_DATA2SEG DW 0 ;AN000;segment of allocated buffer
477WR_DATA2OFF DW 0 ;AN000;offset of allocated buffer
478WR_DATA2LEN DW 0 ;AN000;length of allocated buffer
479;
480WR_LVBSEG DW 0 ;AN000;segment of LVB (logical video buffer)
481WR_LVBOFF DW 0 ;AN000;offset of LVB
482WR_LVBLEN DW 0 ;AN000;length of LVB
483;
484; Maximum limits for data
485;
486WR_LVBMEM DW MAX_MEMLVB ;AN000;size of LVB in 16 byte paraghp
487WR_MAXMEMPAR DW MAX_MEMPAR ;AN000;size of memory in 16 byte paraghp
488WR_MAXRETKSZ DW MAX_RETKSZ ;AN000;max size of return key buffer
489WR_MAXHELPSZ DW MAX_HELPSZ ;AN000;max size of help text buffer
490WR_MAXPANNUM DW MAX_PANNUM ;AN000;max # of panels possible in memry
491WR_MAXSCRNUM DW MAX_SCRNUM ;AN000;max # of scroll possible in memry
492WR_MAXCHDQUE DW MAX_CHDQUE ;AN000;max # of child queues to save
493WR_MAXPANQUE DW MAX_PANQUE ;AN000;max # of panel queues to save
494WR_MAXNUMCHD DW MAX_NUMCHD ;AN000;max # of parent panels queued
495WR_MAXNUMPAN DW MAX_NUMPAN ;AN000;max # of child panels queued
496WR_MAXCLRECD DW MAX_CLRECD ;AN000;num # bytes per color record
497
498LVB_INITED DB 0 ;AN000;flag for LVB allocated
499;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
500DATA ENDS ;AN000;
501PAGE ;AN000;
502 \ 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 @@
1;
2;******************************************************************************
3; DOS Interrupts
4;
5; REVISION HISTORY:
6;
7; PTM P00 - WAIT & LOCK to WAITP & LOCKF for MASM errors. DRM 4/23/87
8;
9; A005 DCR0201 10/9/87 Incorperate new format for EXTENDED
10; ATTRIBUTES.
11;
12;******************************************************************************
13;
14
15Terminate equ 20h ;AN000;
16DOS_Function equ 21h ;AN000;
17Terminate_Address equ 22h ;AN000;
18CNTRL_BREAK equ 23h ;AN000;
19Critical_Error equ 24h ;AN000;
20Disk_Read equ 25h ;AN000;
21Disk_Write equ 26h ;AN000;
22Terminate_Stay_Resident equ 27h ;AN000;
23Printer equ 2Fh ;AN000;
24CHK_APPEND EQU 0B700H ;AN000; CHECK IF APPEND ACTIVE INT 2FH
25GET_APPEND EQU 0B706H ;AN000; Read /X status with INT 2FH
26 ; BX = 0 if /X is not active
27 ; BX = 1 if /X is active
28SET_APPEND EQU 0B707H ;AN000; Set /X status with INT 2FH
29EXT_OPEN EQU 6C00H ;AN000; Extended Open function code
30 CREATE_FLAG EQU 0112H ;AN005;FUNCTION CONTROL
31 CREATE_ATTR EQU 0 ;AN000;SEARCH/CREATE ATTRIBUTE
32 CREATE_MODE EQU 0011H ;AN000;CREATE MODE
33 OPN_FLAG EQU 0101H ;AN000;OPEN FUNCTION CONTROL
34 OPN_ATTR EQU 0 ;AN000;OPEN ATTRIBUTE
35 OPN_MODE EQU 0002H ;AN000;OPEN MODE
36 NUL_LIST EQU -1 ;AN005;JUST TO OPEN
37
38GET_ATTRIB EQU 05702H ;AN000; Get ext. attribute by handle
39QUY_ATTRIB EQU 05703H ;AN000; QUERY EXT. ATTRIBUTES BY HANDLE
40 INT_ORDINAL EQU 0 ;AN000;ATTRIBUTE LIST ORDINAL = 0
41 ALL_ATTR EQU -1 ;AN005;TO SELECT ALL THE ATTRIBUTES
42;
43;******************************************************************************
44; DOS Function Calls
45;******************************************************************************
46;
47
48Program_Terminate equ 00h ;AN000;
49Keyboard_Input equ 01h ;AN000;
50Display_Output equ 02h ;AN000;
51Auxiliary_Input equ 03h ;AN000;
52Auxiliary_Output equ 04h ;AN000;
53Printer_Output equ 05h ;AN000;
54Direct_Console_IO equ 06h ;AN000;
55Direct_Input_No_Echo equ 07h ;AN000;
56Console_Input_No_Echo equ 08h ;AN000;
57Print_String equ 09h ;AN000;
58Buffered_Keyboard_Input equ 0Ah ;AN000;
59Check_Std_Input_Status equ 0Bh ;AN000;
60Clear_Keyboard_Buffer equ 0Ch ;AN000;
61Disk_Reset equ 0Dh ;AN000;
62Select_Disk equ 0Eh ;AN000;
63FCB_Open equ 0Fh ;AN000;
64FCB_Close equ 10h ;AN000;
65Search_First equ 11h ;AN000;
66Search_Next equ 12h ;AN000;
67FCB_Delete equ 13h ;AN000;
68Sequential_Read equ 14h ;AN000;
69Sequential_Write equ 15h ;AN000;
70FCB_Create equ 16h ;AN000;
71FCB_Rename equ 17h ;AN000;
72Current_Disk equ 19h ;AN000;
73Set_DTA equ 1Ah ;AN000;
74Allocation_Info equ 1Bh ;AN000;
75Allocation_Info_Device equ 1Ch ;AN000;
76Random_Read equ 21h ;AN000;
77Random_Write equ 22h ;AN000;
78File_Size equ 23h ;AN000;
79Set_Relative_Record equ 24h ;AN000;
80Set_Interrupt_Vector equ 25h ;AN000;
81Create_New_PSP equ 26h ;AN000;
82Random_Block_Read equ 27h ;AN000;
83Random_Block_Write equ 28h ;AN000;
84Parse_Filename equ 29h ;AN000;
85Get_Date equ 2Ah ;AN000;
86Set_Date equ 2Bh ;AN000;
87Get_Time equ 2Ch ;AN000;
88Set_Time equ 2Dh ;AN000;
89Verify equ 2Eh ;AN000;
90 Verify_Off equ 02h ;AN000;
91 Verify_On equ 01h ;AN000;
92Set_Verify_On equ 2E01h ;AN000;
93Get_DTA equ 2Fh ;AN000;
94DOS_Version equ 30h ;AN000;
95Terminate_Resident equ 31h ;AN000;
96Get_Interrupt_Vector equ 35h ;AN000;
97Get_Disk_Free_Space equ 36h ;AN000;
98Country_Code equ 38h ;AN000;
99Mkdir equ 39h ;AN000;
100Rmdir equ 3Ah ;AN000;
101Chdir equ 3Bh ;AN000;
102Create equ 3Ch ;AN000;
103Open equ 3Dh ;AN000;
104 Read_Only equ 00h ;AN000;
105 Write_Only equ 01h ;AN000;
106 Read_Write equ 02h ;AN000;
107 Read_Only_Exclusive equ 10h ;AN000;
108 Write_Only_Exclusive equ 11h ;AN000;
109 Read_Write_Exclusive equ 12h ;AN000;
110 Read_Only_Deny_Write equ 20h ;AN000;
111 Write_Only_Deny_Write equ 21h ;AN000;
112 Read_Write_Deny_Write equ 22h ;AN000;
113 Read_Only_Deny_Read equ 30h ;AN000;
114 Write_Only_Deny_Read equ 31h ;AN000;
115 Read_Write_Deny_Read equ 32h ;AN000;
116 Read_Only_Deny_None equ 40h ;AN000;
117 Write_Only_Deny_None equ 41h ;AN000;
118 Read_Write_Deny_None equ 42h ;AN000;
119Close equ 3Eh ;AN000;
120Read equ 3Fh ;AN000;
121Write equ 40h ;AN000;
122Delete equ 41h ;AN000;
123Lseek equ 42h ;AN000;
124 Lseek_Offset equ 00h ;AN000;
125 Lseek_Plus_Offset equ 01h ;AN000;
126 Lseek_End_Offset equ 02h ;AN000;
127Chmod equ 43h ;AN000;
128IOCTL equ 44h ;AN000;
129 Get_Device_Info equ 00h ;AN000;
130 Set_Device_Info equ 01h ;AN000;
131 Read_Channel equ 02h ;AN000;
132 Write_Channel equ 03h ;AN000;
133 Read_Drive_Channel equ 04h ;AN000;
134 Write_Drive_Channel equ 05h ;AN000;
135 Get_Input_Status equ 06h ;AN000;
136 Get_Output_Status equ 07h ;AN000;
137 Is_Removable equ 08h ;AN000;
138 Is_Block_Redirected equ 09h ;AN000;
139 Is_Handle_Redirected equ 0Ah ;AN000;
140 Set_Retry_Count equ 0Bh ;AN000;
141Dup_Handle equ 45h ;AN000;
142Force_Dup_Handle equ 46h ;AN000;
143Get_Current_Directory equ 47h ;AN000;
144Free_Memory equ 49h ;AN000;
145Setblock equ 4Ah ;AN000;
146Exec equ 4Bh ;AN000;
147Exit equ 4Ch ;AN000;
148Waitp equ 4Dh ;AN000;
149Find_First equ 4Eh ;AN000;
150 norm_attr equ 00h ;AN000;
151 incl_read_attr equ 01h ;AN000;
152 incl_h_attr equ 02h ;AN000;
153 incl_h_s_attr equ 06h ;AN000;
154 incl_h_s_dir_attr equ 16h ;AN000;
155Find_Next equ 4Fh ;AN000;
156Get_Verify_Setting equ 54h ;AN000;
157Rename equ 56h ;AN000;
158File_Date_Time equ 57h ;AN000;
159 Get_File_Time equ 00h ;AN000;
160 Set_File_Time equ 01h ;AN000;
161Get_Extended_Error equ 59h ;AN000;
162Create_Temp equ 5Ah ;AN000;
163Create_New equ 5Bh ;AN000;
164File_Access equ 5Ch ;AN000;
165 Lockf equ 00h ;AN000;
166 Unlock equ 01h ;AN000;
167Get_PSP equ 62h ;AN000;
168Upper_Case_String equ 6521h ;AN000;GET EXTENDED COUNTRY INFORMATION
169;
170;******************************************************************************
171; DOS File Handles
172;******************************************************************************
173;
174
175STDIN equ 00h ;AN000;
176STDOUT equ 01h ;AN000;
177STDERR equ 02h ;AN000;
178STDAUX equ 03h ;AN000;
179STDPRN equ 04h ;AN000;
180
181
182;
183;******************************************************************************
184; File's attributes in a Directory entry
185;******************************************************************************
186;
187read_only_file equ 01h ;AN000;
188hidden_file equ 02h ;AN000;
189system_file equ 04h ;AN000;
190has_volume_label equ 08h ;AN000;
191is_subdirectory equ 10h ;AN000;
192archive_on equ 20h ;AN000;
193
194;
195;******************************************************************************
196; Return Codes
197;******************************************************************************
198;
199
200Errorlevel_0 equ 0 ;AN000;
201Errorlevel_1 equ 1 ;AN000;
202Errorlevel_2 equ 2 ;AN000;
203Errorlevel_3 equ 3 ;AN000;
204Errorlevel_4 equ 4 ;AN000;
205Errorlevel_5 equ 5 ;AN000;
206Errorlevel_6 equ 6 ;AN000;
207Errorlevel_7 equ 7 ;AN000;
208Errorlevel_8 equ 8 ;AN000;
209
210;
211;******************************************************************************
212; Extended Error Codes
213;******************************************************************************
214;
215
216Error_No_Error equ 00 ;AN000;
217Error_Invalid_Function equ 01 ;AN000;
218Error_File_Not_Found equ 02 ;AN000;
219Error_Path_Not_Found equ 03 ;AN000;
220Error_No_Handles_Left equ 04 ;AN000;
221Error_Access_Denied equ 05 ;AN000;
222Error_Invalid_Handle equ 06 ;AN000;
223Error_Memory_Blocks_Bad equ 07 ;AN000;
224Error_Insufficient_Memory equ 08 ;AN000;
225Error_Inv_Address equ 09 ;AN000;
226Error_Inv_Environment equ 10 ;AN000;
227Error_Inv_Format equ 11 ;AN000;
228Error_Inv_Access_Code equ 12 ;AN000;
229Error_Inv_Data equ 13 ;AN000;
230Error_Inv_Drive equ 15 ;AN000;
231Error_Rmdir_Current_Dir equ 16 ;AN000;
232Error_Not_Same_Device equ 17 ;AN000;
233Error_No_More_Files equ 18 ;AN000;
234Error_Write_Protect equ 19 ;AN000;
235Error_Unknown_Unit equ 20 ;AN000;
236Error_Drive_Not_Ready equ 21 ;AN000;
237Error_Unknown_Command equ 22 ;AN000;
238Error_Data_Error equ 23 ;AN000;
239Error_Bad_Request_Len equ 24 ;AN000;
240Error_Seek_Error equ 25 ;AN000;
241Error_Unknown_Media_Type equ 26 ;AN000;
242Error_Sector_Not_Found equ 27 ;AN000;
243Error_Out_Of_Paper equ 28 ;AN000;
244Error_Write_Fault equ 29 ;AN000;
245Error_Read_Fault equ 30 ;AN000;
246Error_Gerneral_Failure equ 31 ;AN000;
247Error_Sharing_Violation equ 32 ;AN000;
248Error_Lock_Violation equ 33 ;AN000;
249Error_Inv_Disk_Change equ 34 ;AN000;
250Error_FCB_Unavailable equ 35 ;AN000;
251Error_File_Exists equ 80 ;AN000;
252Error_Cannot_Make equ 82 ;AN000;
253Error_Fail_On_Int24 equ 83 ;AN000;
254
255;
256;******************************************************************************
257; Extended Error Classes
258;******************************************************************************
259;
260
261Out_Of_Resource equ 1 ;AN000;
262Temporary equ 2 ;AN000;
263Authorization equ 3 ;AN000;
264Internal equ 4 ;AN000;
265Hardware_Failure equ 5 ;AN000;
266System_Failure equ 6 ;AN000;
267Program_Error equ 7 ;AN000;
268Not_Found equ 8 ;AN000;
269Bad_Format equ 9 ;AN000;
270Locked equ 10 ;AN000;
271Media equ 11 ;AN000;
272Already_Exists equ 12 ;AN000;
273Unknown equ 13 ;AN000;
274
275;
276;*****************************************************************************
277; Extended Error Actions
278;*****************************************************************************
279;
280
281Retry equ 1 ;AN000;
282Delay_Retry equ 2 ;AN000;
283User equ 3 ;AN000;
284Abort equ 4 ;AN000;
285Immediate_Exit equ 5 ;AN000;
286Ignore equ 6 ;AN000;
287Retry_After_User equ 7 ;AN000;
288
289;
290;******************************************************************************
291; Extended Error Locus
292;******************************************************************************
293;
294
295Non_Specific equ 1 ;AN000;
296Block_Device equ 2 ;AN000;
297Serial_Device equ 4 ;AN000;
298Memory equ 5 ;AN000;
299
300;
301;******************************************************************************
302; Internal Program Initialization Errors
303;******************************************************************************
304;
305
306Init_Err_DOS_Ver_1 equ 1 ;AN000;Bad DOS version prior to 2.0
307Init_Err_DOS_Ver_2 equ 2 ;AN000;Bad DOS version 2.0 or above
308Init_Err_Inv_Drive equ 3 ;AN000;Invalid drive specification
309Init_Err_Inv_Parm equ 4 ;AN000;Invalid parameter
310Init_Err_Inv_Num_Parm equ 5 ;AN000;Invalid number of parameters
311Init_Err_Inv_Path equ 6 ;AN000;Invalid path
312Init_Err_Insuff_Mem equ 7 ;AN000;Insufficient memory
313Init_Err_Inv_Date equ 8 ;AN000;Invalid date
314Init_Err_Inv_Time equ 9 ;AN000;Invalid time
315Init_Err_Inv_Device equ 10 ;AN000;Invalid device name
316Init_Err_Ill_Device equ 11 ;AN000;Illegal device name
317Init_Err_Inv_Filename equ 12 ;AN000;Invalid filename
318
319;
320;******************************************************************************
321; FCB Structure
322;******************************************************************************
323;
324
325FCB STRUC ;AN000;
326Drive_Number db 0 ;AN000;
327Filename_FCB db 8 dup(0) ;AN000;
328Extension db 3 dup(0) ;AN000;
329Current_Block dw 0 ;AN000;
330Record_Size dw 0 ;AN000;
331File_Size_Low_FCB dw 0 ;AN000;
332File_Size_High_FCB dw 0 ;AN000;
333File_Date_Time_FCB dw 0 ;AN000;
334Reserved_FCB db 10 dup(0) ;AN000;
335Current_Record db 0 ;AN000;
336Relative_Record_Low dw 0 ;AN000;
337Relative_Record_High dw 0 ;AN000;
338FCB ENDS ;AN000;
339
340
341;
342;******************************************************************************
343; Find First/Next DTA area
344;******************************************************************************
345;
346
347Find_DTA STRUC ;AN000;
348DTA_Reserved db 21 dup(0) ;AN000;
349DTA_Attribute db 0 ;AN000;
350DTA_File_Time dw 0 ;AN000;
351DTA_File_Date dw 0 ;AN000;
352DTA_File_Size_Low dw 0 ;AN000;
353DTA_File_Size_High dw 0 ;AN000;
354DTA_Filename db 13 dup(0) ;AN000;
355Find_DTA ENDS ;AN000;
356
357
358
359 \ 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 @@
1ALLOCATE_START DW 0 ;AN000;
2 ;
3DEST DB 0 ;AN000;
4FILE_NUM DW 0 ;AN000;
5NUMBER_OF_FILES DW 0 ;AN000;
6TABLE_OFFSET DW 0 ;AN000;
7PATH_OFFSET DW 0 ;AN000;
8NOT_FOUND_FLAG DB 0 ;AN000;
9SP_SAVE DW 0 ;AN000;
10 ;
11EVERYTHING DB 'B:*.*',0 ;AN000;
12 ;
13DOS_FILE_PTR DW 0 ;AN000;
14BUFFER_START DW 0 ;AN000;
15 ;
16B_TARGET DB 'B:\',0 ;AN000;
17LENGTH_B_TARGET EQU $-B_TARGET ;AN000;
18 ;
19A_TARGET DB 'A:\',0 ;AN111;JW
20LENGTH_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 @@
1; Change History:
2;
3; ;AN003; for DCR225
4; ;AN004; for DCR65 (360KB support)
5;
6;
7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8 EXTRN SUPPORT_STATUS:WORD ;AN000;
9 EXTRN I_USER_INDEX:WORD ;AN000;
10 EXTRN N_USER_NUMERIC:WORD ;AN000;
11 EXTRN MIN_INPUT_VAL:WORD ;AN000;
12 EXTRN MAX_INPUT_VAL:WORD ;AN000;
13 EXTRN S_USER_STRING:WORD ;AN000;
14 EXTRN P_USER_STRING:BYTE ;AN000;
15 EXTRN M_USER_STRING:ABS ;AN000;
16 EXTRN N_VALID_KEYS:WORD ;AN000;
17 EXTRN N_USER_FUNC:WORD ;AN000;
18 EXTRN E_ENTER:ABS ;AN000;
19 EXTRN E_ESCAPE:ABS ;AN000;
20 EXTRN E_TAB:ABS ;AN000;
21 EXTRN E_F3:ABS ;AN000;
22 EXTRN E_SPACE:ABS ;AN000;
23 EXTRN ERROR_KEYS:BYTE ;AN000;
24 EXTRN ERROR_KEYS_LEN:ABS ;AN000;
25 EXTRN E_QUIT:ABS ;AN000;
26 EXTRN E_RETURN:ABS ;AN000;
27 EXTRN FK_ENT_F3:BYTE ;AN000;DT
28 EXTRN FK_ENT_F3_LEN:ABS ;AN000;DT
29 EXTRN FK_ENT_ESC:BYTE ;AN000;
30 EXTRN FK_ENT_ESC_LEN:ABS ;AN000;
31 EXTRN FK_ENT_ESC_F3:BYTE ;AN003;GHG
32 EXTRN FK_ENT_ESC_F3_LEN:ABS ;AN003;GHG
33 EXTRN FK_ENT:BYTE ;AN000;
34 EXTRN FK_ENT_LEN:ABS ;AN000;
35 EXTRN FK_TEXT:BYTE ;AN000;
36 EXTRN FK_TEXT_LEN:ABS ;AN000;
37 EXTRN FK_SCROLL:BYTE ;AN000;
38 EXTRN FK_SCROLL_LEN:ABS ;AN000;
39 EXTRN FK_TAB:BYTE ;AN000;
40 EXTRN FK_TAB_LEN:ABS ;AN000;
41 EXTRN FK_REVIEW:BYTE ;AN000;
42 EXTRN FK_REVIEW_LEN:ABS ;AN000;
43 EXTRN FK_DATE:BYTE ;AN000;
44 EXTRN FK_DATE_LEN:ABS ;AN000;
45 EXTRN FK_FORMAT:BYTE ;AN000;
46 EXTRN FK_FORMAT_LEN:ABS ;AN000;
47 EXTRN FK_REBOOT:BYTE ;AN000;
48 EXTRN FK_REBOOT_LEN:ABS ;AN000;
49 EXTRN E_YES:ABS ;AN000;
50 EXTRN E_NO:ABS ;AN000;
51 EXTRN E_NA:ABS ;AN000;
52 EXTRN N_SELECT_MODE:WORD ;AN000;
53 EXTRN E_SELECT_MENU:ABS ;AN000;
54 EXTRN E_SELECT_FDISK:ABS ;AN000;
55 EXTRN E_SELECT_INV:ABS ;AN000;
56 EXTRN S_SELECT_TMP:WORD ;AN000;
57 EXTRN N_FORMAT_MODE:WORD ;AN000;
58 EXTRN E_FORMAT_SELECT:ABS ;AN000;
59 EXTRN E_FORMAT_NEW:ABS ;AN000;
60 EXTRN E_FORMAT_USED:ABS ;AN000;
61 EXTRN S_SPACE:WORD ;AN000;
62 EXTRN S_OFF:WORD ;AN000;
63 EXTRN S_ON:WORD ;AN000;
64 EXTRN I_WORKSPACE:WORD ;AN000;
65 EXTRN N_WORK_PREV:WORD ;AN000;
66 EXTRN E_WORKSPACE_BAL:ABS ;AN000;
67 EXTRN E_WORKSPACE_MIN:ABS ;AN000;
68 EXTRN E_WORKSPACE_MAX:ABS ;AN000;
69 EXTRN S_ANSI:WORD ;AN000;
70 EXTRN M_ANSI:ABS ;AN000;
71 EXTRN D_ANSI_1:WORD ;AN000;
72 EXTRN F_ANSI:WORD ;AN000;
73 EXTRN E_ANSI_NO:ABS ;AN000;
74 EXTRN E_ANSI_YES:ABS ;AN000;
75 EXTRN E_ANSI_B:ABS ;AN000;
76 EXTRN E_ANSI_C:ABS ;AN000;
77 EXTRN S_APPEND:WORD ;AN000;
78 EXTRN M_APPEND:ABS ;AN000;
79 EXTRN S_APPEND_P:WORD ;AN000;JW
80 EXTRN M_APPEND_P:ABS ;AN000;JW
81 EXTRN F_APPEND:WORD ;AN000;
82 EXTRN E_APPEND_NO:ABS ;AN000;
83 EXTRN E_APPEND_YES:ABS ;AN000;
84 EXTRN S_BREAK:WORD ;AN000;
85 EXTRN M_BREAK:ABS ;AN000;
86 EXTRN ST_BREAK:WORD ;AN000;
87 EXTRN MT_BREAK:ABS ;AN000;
88 EXTRN S_BUFFERS:WORD ;AN000;
89 EXTRN M_BUFFERS:ABS ;AN000;
90 EXTRN D_BUFFERS_1:WORD ;AN000;
91 EXTRN D_BUFFERS_2:WORD ;AN000;
92 EXTRN ST_BUFFERS:WORD ;AN000;
93 EXTRN MT_BUFFERS:ABS ;AN000;
94 EXTRN S_CPSW:WORD ;AN000;
95 EXTRN M_CPSW:ABS ;AN000;
96 EXTRN F_CPSW:WORD ;AN000;
97 EXTRN E_CPSW_NO:ABS ;AN000;
98 EXTRN E_CPSW_YES:ABS ;AN000;
99 EXTRN E_CPSW_NA:ABS ;AN000;
100 EXTRN E_CPSW_B:ABS ;AN000;
101 EXTRN E_CPSW_C:ABS ;AN000;
102 EXTRN ST_CPSW:WORD ;AN000;
103 EXTRN MT_CPSW:ABS ;AN000;
104 EXTRN N_CPSW:WORD ;AN000;
105 EXTRN E_CPSW_NOT_VAL:ABS ;AN000;
106 EXTRN E_CPSW_NOT_REC:ABS ;AN000;
107 EXTRN E_CPSW_VALID:ABS ;AN000;
108 EXTRN S_FASTOPEN:WORD ;AN000;
109 EXTRN M_FASTOPEN:ABS ;AN000;
110 EXTRN D_FASTOPEN_1:WORD ;AN000;
111 EXTRN D_FASTOPEN_2:WORD ;AN000;
112 EXTRN F_FASTOPEN:WORD ;AN000;
113 EXTRN E_FASTOPEN_NO:ABS ;AN000;
114 EXTRN E_FASTOPEN_YES:ABS ;AN000;
115 EXTRN E_FASTOPEN_C:ABS ;AN000;
116 EXTRN S_FCBS:WORD ;AN000;
117 EXTRN M_FCBS:ABS ;AN000;
118 EXTRN D_FCBS_1:WORD ;AN000;
119 EXTRN ST_FCBS:WORD ;AN000;
120 EXTRN MT_FCBS:ABS ;AN000;
121 EXTRN S_FILES:WORD ;AN000;
122 EXTRN M_FILES:ABS ;AN000;
123 EXTRN D_FILES_1:WORD ;AN000;
124 EXTRN D_FILES_2:WORD ;AN000;
125 EXTRN ST_FILES:WORD ;AN000;
126 EXTRN MT_FILES:ABS ;AN000;
127 EXTRN S_GRAPHICS:WORD ;AN000;
128 EXTRN M_GRAPHICS:ABS ;AN000;
129 EXTRN F_GRAPHICS:WORD ;AN000;
130 EXTRN E_GRAPHICS_NO:ABS ;AN000;
131 EXTRN E_GRAPHICS_YES:ABS ;AN000;
132 EXTRN E_GRAPHICS_B:ABS ;AN000;
133 EXTRN E_GRAPHICS_C:ABS ;AN000;
134 EXTRN F_GRAFTABL:WORD ;AN000;
135 EXTRN E_GRAFTABL_NO:ABS ;AN000;
136 EXTRN E_GRAFTABL_YES:ABS ;AN000;
137 EXTRN E_GRAFTABL_NA:ABS ;AN000;
138 EXTRN E_GRAFTABL_B:ABS ;AN000;
139 EXTRN E_GRAFTABL_C:ABS ;AN000;
140 EXTRN S_LASTDRIVE:WORD ;AN000;
141 EXTRN M_LASTDRIVE:ABS ;AN000;
142 EXTRN D_LASTDRIVE_1:WORD ;AN000;
143 EXTRN ST_LASTDRIVE:WORD ;AN000;
144 EXTRN MT_LASTDRIVE:ABS ;AN000;
145 EXTRN S_PATH:WORD ;AN000;
146 EXTRN M_PATH:ABS ;AN000;
147 EXTRN F_PATH:WORD ;AN000;
148 EXTRN E_PATH_NO:ABS ;AN000;
149 EXTRN E_PATH_YES:ABS ;AN000;
150 EXTRN S_PROMPT:WORD ;AN000;
151 EXTRN M_PROMPT:ABS ;AN000;
152 EXTRN D_PROMPT_1:WORD ;AN000;
153 EXTRN F_PROMPT:WORD ;AN000;
154 EXTRN E_PROMPT_NO:ABS ;AN000;
155 EXTRN E_PROMPT_YES:ABS ;AN000;
156 EXTRN S_SHARE:WORD ;AN000;
157 EXTRN F_SHARE:WORD ;AN000;
158 EXTRN M_SHARE:ABS ;AN000;
159 EXTRN E_SHARE_NO:ABS ;AN000;
160 EXTRN E_SHARE_YES:ABS ;AN000;
161 EXTRN E_SHARE_C:ABS ;AN000;
162 EXTRN S_SHELL:WORD ;AN000;
163 EXTRN M_SHELL:ABS ;AN000;
164 EXTRN D_SHELL_1:WORD ;AN000;
165 EXTRN D_SHELL_2:WORD ;AN000;
166 EXTRN F_SHELL:WORD ;AN000;
167 EXTRN E_SHELL_NO:ABS ;AN000;
168 EXTRN E_SHELL_YES:ABS ;AN000;
169 EXTRN E_SHELL_B:ABS ;AN000;
170 EXTRN E_SHELL_C:ABS ;AN000;
171 EXTRN S_STACKS:WORD ;AN000;
172 EXTRN M_STACKS:ABS ;AN000;
173 EXTRN ST_STACKS:WORD ;AN000;
174 EXTRN MT_STACKS:ABS ;AN000;
175 EXTRN S_VDISK:WORD ;AN000;
176 EXTRN M_VDISK:ABS ;AN000;
177 EXTRN F_VDISK:WORD ;AN000;
178 EXTRN E_VDISK_NO:ABS ;AN000;
179 EXTRN E_VDISK_YES:ABS ;AN000;
180 EXTRN E_VDISK_B:ABS ;AN000;
181 EXTRN E_VDISK_C:ABS ;AN000;
182 EXTRN S_VERIFY:WORD ;AN000;
183 EXTRN M_VERIFY:ABS ;AN000;
184 EXTRN ST_VERIFY:WORD ;AN000;
185 EXTRN MT_VERIFY:ABS ;AN000;
186 EXTRN S_XMAEM:WORD ;AN000;
187 EXTRN M_XMAEM:ABS ;AN000;
188 EXTRN S_XMA2EMS:WORD ;AN000;
189 EXTRN M_XMA2EMS:ABS ;AN000;
190 EXTRN D_XMA2EMS_1:WORD ;AN000;
191 EXTRN F_XMA:WORD ;AN000;
192 EXTRN E_XMA_NO:ABS ;AN000;
193 EXTRN E_XMA_YES:ABS ;AN000;
194 EXTRN E_XMA_NA:ABS ;AN000;
195 EXTRN E_XMA_C:ABS ;AN000;
196 EXTRN N_XMA:WORD ;AN000;
197 EXTRN E_XMA_ABSENT:ABS ;AN000;
198 EXTRN E_XMA_PRESENT:ABS ;AN000;
199 EXTRN I_DEST_DRIVE:WORD ;AN000;
200 EXTRN E_DEST_DRIVE_C:ABS ;AN000;
201 EXTRN E_DEST_DRIVE_B:ABS ;AN000;
202 EXTRN E_DEST_DRIVE_A:ABS ;AN111;JW
203 EXTRN N_DEST_DRIVE:BYTE ;AN000;
204 EXTRN E_DEST_SELECT:ABS ;AN000;
205 EXTRN E_DEST_USER:ABS ;AN000;
206 EXTRN N_DISKETTE_TOT:BYTE ;AN000;
207 EXTRN N_ZERO_DISKETTE:ABS ;AN000;
208 EXTRN N_DISKETTE_A:BYTE ;AN000;
209 EXTRN N_DISKETTE_B:BYTE ;AN000;
210 EXTRN E_DISKETTE_INV:ABS ;AN000;
211 EXTRN E_DISKETTE_360:ABS ;AN000;
212 EXTRN E_DISKETTE_720:ABS ;AN000;
213 EXTRN E_DISKETTE_1200:ABS ;AN000;
214 EXTRN E_DISKETTE_1440:ABS ;AN000;
215 EXTRN S_DEST_DRIVE:WORD ;AN000;
216 EXTRN M_DEST_DRIVE:ABS ;AN000;
217 EXTRN S_DRIVE_A:WORD ;AN000;
218 EXTRN S_A_DRIVE:WORD ;AN039;SEH
219 EXTRN S_B_DRIVE:WORD ;AN039;SEH
220 EXTRN S_C_DRIVE:WORD ;AN000;JW
221 EXTRN S_DOS_LOC:WORD ;AN000;
222 EXTRN M_DOS_LOC:ABS ;AN000;
223 EXTRN D_DOS_LOC_1:WORD ;AN000;
224 EXTRN S_INSTALL_PATH:WORD ;AN000;
225 EXTRN M_INSTALL_PATH:ABS ;AN000;
226 EXTRN I_CTY_KYBD:WORD ;AN000;
227 EXTRN E_CTY_KB_PREDEF:ABS ;AN000;
228 EXTRN E_CTY_KB_USER:ABS ;AN000;
229 EXTRN N_CTY_LIST:WORD ;AN000;
230 EXTRN E_CTY_LIST_1:ABS ;AN000;
231 EXTRN E_CTY_LIST_2:ABS ;AN000;
232 EXTRN I_COUNTRY:WORD ;AN000;
233 EXTRN N_COUNTRY:WORD ;AN000;
234 EXTRN N_KYBD_LIST:WORD ;AN000;
235 EXTRN E_KYBD_LIST_1:ABS ;AN000;
236 EXTRN E_KYBD_LIST_2:ABS ;AN000;
237 EXTRN I_KEYBOARD:WORD ;AN000;
238 EXTRN S_KEYBOARD:WORD ;AN000;
239 EXTRN M_KEYBOARD:ABS ;AN000;
240 EXTRN N_KYBD_VAL:BYTE ;AN000;
241 EXTRN E_KYBD_VAL_NO:ABS ;AN000;
242 EXTRN E_KYBD_VAL_YES:ABS ;AN000;
243 EXTRN E_KYBD_VAL_DEF:ABS ;AN000;
244 EXTRN N_DESIGNATES:WORD ;AN000;
245 EXTRN N_CP_PRI:WORD ;AN000;
246 EXTRN N_CP_SEC:WORD ;AN000;
247 EXTRN I_KYBD_ALT:WORD ;AN000;
248 EXTRN S_KYBD_ALT:WORD ;AN000;
249 EXTRN M_KYBD_ALT:ABS ;AN000;
250 EXTRN N_KYBD_ALT:BYTE ;AN000;
251 EXTRN E_KYBD_ALT_NO:ABS ;AN000;
252 EXTRN E_KYBD_ALT_YES:ABS ;AN000;
253 EXTRN N_KYB_LOAD:WORD ;AN000;
254 EXTRN E_KYB_LOAD_SUC:ABS ;AN000;
255 EXTRN E_KYB_LOAD_ERR:ABS ;AN000;
256 EXTRN E_KYB_LOAD_US:ABS ;AN000;
257 EXTRN E_KYB_LOAD_UND:ABS ;AN000;
258 EXTRN CTY_TAB_A:BYTE ;AN000;
259 EXTRN CTY_TAB_A_1:BYTE ;AN000;
260 EXTRN CTY_A_ITEMS:ABS ;AN000;
261 EXTRN CTY_TAB_B:BYTE ;AN000;
262 EXTRN CTY_TAB_B_1:BYTE ;AN000;
263 EXTRN CTY_B_ITEMS:ABS ;AN000;
264 EXTRN N_CTY_RES:BYTE ;AN000;
265 EXTRN KYBD_TAB_A:BYTE ;AN000;
266 EXTRN KYBD_TAB_A_1:BYTE ;AN000;
267 EXTRN KYBD_A_ITEMS:ABS ;AN000;
268 EXTRN KYBD_TAB_B:BYTE ;AN000;
269 EXTRN KYBD_TAB_B_1:BYTE ;AN000;
270 EXTRN KYBD_B_ITEMS:ABS ;AN000;
271 EXTRN ALT_TAB_PTR:WORD ;AN000;
272 EXTRN ALT_KYB_ID:BYTE ;AN000;
273 EXTRN ALT_KYB_ID_PREV:BYTE ;AN000;
274 EXTRN ALT_FRENCH:ABS ;AN000;
275 EXTRN ALT_ITALIAN:ABS ;AN000;
276 EXTRN ALT_UK:ABS ;AN000;
277 EXTRN ALT_KYB_TABLE:BYTE ;AN000;
278 EXTRN ALT_KYB_TAB_1:BYTE ;AN000;
279 EXTRN ALT_KYB_ITEMS:ABS ;AN000;
280 EXTRN ALT_KYBD_FR:BYTE ;AN000;
281 EXTRN ALT_KYBD_FR_1:WORD ;AN000;
282 EXTRN ALT_FR_ITEMS:ABS ;AN000;
283 EXTRN ALT_KYBD_IT:BYTE ;AN000;
284 EXTRN ALT_KYBD_IT_1:BYTE ;AN000;
285 EXTRN ALT_IT_ITEMS:ABS ;AN000;
286 EXTRN ALT_KYBD_UK:BYTE ;AN000;
287 EXTRN ALT_KYBD_UK_1:BYTE ;AN000;
288 EXTRN ALT_UK_ITEMS:ABS ;AN000;
289 EXTRN ALT_ID_DEF:BYTE ;AN000;DT
290 EXTRN S_US:WORD ;AN000;
291 EXTRN S_SWISS:WORD ;AN000;
292 EXTRN N_NUMPRINT:WORD ;AN000;
293 EXTRN MIN_NUMPRINT:ABS ;AN000;
294 EXTRN MAX_NUMPRINT:ABS ;AN000;
295 EXTRN N_PARALLEL:WORD ;AN000;
296 EXTRN N_SERIAL:WORD ;AN000;
297 EXTRN PRINTER_TABLES:ABS ;AN000;
298 EXTRN I_PRINTER:WORD ;AN000;
299 EXTRN N_PRINTER_TYPE:BYTE ;AN000;
300 EXTRN E_SERIAL:ABS ;AN000;
301 EXTRN E_PARALLEL:ABS ;AN000;
302 EXTRN I_PORT:WORD ;AN000;
303 EXTRN I_REDIRECT:WORD ;AN000;
304 EXTRN S_MODE_PARM:WORD ;AN000;
305 EXTRN M_MODE_PARM:ABS ;AN000;
306 EXTRN S_CP_DRIVER:WORD ;AN000;
307 EXTRN M_CP_DRIVER:ABS ;AN000;
308 EXTRN S_CP_PREPARE:WORD ;AN000;
309 EXTRN M_CP_PREPARE:ABS ;AN000;
310 EXTRN S_GRAPH_PARM:WORD ;AN000;
311 EXTRN M_GRAPH_PARM:ABS ;AN000;
312 EXTRN F_REVIEW:WORD ;AN000;
313 EXTRN E_REVIEW_ACCEPT:ABS ;AN000;
314 EXTRN E_REVIEW_VIEW:ABS ;AN000;
315 EXTRN N_DISPLAY:BYTE ;AN000;
316 EXTRN E_CPSW_DISP:ABS ;AN000;
317 EXTRN E_NOCPSW_DISP:ABS ;AN000;
318 EXTRN N_YEAR:WORD ;AN000;
319 EXTRN MIN_YEAR:ABS ;AN000;
320 EXTRN MAX_YEAR:ABS ;AN000;
321 EXTRN N_MONTH:WORD ;AN000;
322 EXTRN MIN_MONTH:ABS ;AN000;
323 EXTRN MAX_MONTH:ABS ;AN000;
324 EXTRN N_DAY:WORD ;AN000;
325 EXTRN MIN_DAY:ABS ;AN000;
326 EXTRN MAX_DAY:ABS ;AN000;
327 EXTRN N_HOUR:WORD ;AN000;
328 EXTRN MIN_HOUR:ABS ;AN000;
329 EXTRN MAX_HOUR:ABS ;AN000;
330 EXTRN N_MINUTE:WORD ;AN000;
331 EXTRN MIN_MINUTE:ABS ;AN000;
332 EXTRN MAX_MINUTE:ABS ;AN000;
333 EXTRN N_SECOND:WORD ;AN000;
334 EXTRN MIN_SECOND:ABS ;AN000;
335 EXTRN MAX_SECOND:ABS ;AN000;
336 EXTRN PARM_BLOCK:WORD ;AN000;
337 EXTRN CMD_BUFF:BYTE ;AN000;
338 EXTRN S_STR40:WORD ;AN000;JW
339 EXTRN M_STR40:ABS ;AN000;JW
340 EXTRN S_STR120_1:WORD ;AN000;
341 EXTRN P_STR120_1:BYTE ;AN000;
342 EXTRN M_STR120_1:ABS ;AN000;
343 EXTRN S_STR120_2:WORD ;AN000;
344 EXTRN M_STR120_2:ABS ;AN000;
345 EXTRN S_STR120_3:WORD ;AN000;
346 EXTRN M_STR120_3:ABS ;AN000;
347 EXTRN S_STR120_4:WORD ;AN039;SEH
348 EXTRN M_STR120_4:ABS ;AN039;SEH
349 EXTRN SC_LINE:WORD ;AN000;
350 EXTRN MC_LINE:ABS ;AN000;
351 EXTRN COPY_INST_1200_1440:BYTE ;AN000;
352 EXTRN E_INST_1200_1440:ABS ;AN000;
353 EXTRN COPY_SEL_SHEL:BYTE ;AN000;
354 EXTRN E_SEL_SHEL:ABS ;AN000;
355 EXTRN COPY_SEL_EGA:BYTE ;AN000;
356 EXTRN E_SEL_EGA:ABS ;AN000;
357 EXTRN COPY_SEL_LCD:BYTE ;AN000;
358 EXTRN E_SEL_LCD:ABS ;AN000;
359 EXTRN COPY_OPER_1200_1440:BYTE ;AN000;
360 EXTRN E_OPER_1200_1440:ABS ;AN000;
361 EXTRN COPY_SHELL_1200_1440:BYTE ;AN000;
362 EXTRN E_SHELL_1200_1440:ABS ;AN000;
363 EXTRN S_DOS_SHEL_DISK:WORD ;AN000;
364 EXTRN S_DOS_SEL_360:WORD ;AN000;GHG 360KB
365 EXTRN S_DOS_UTIL1_DISK:WORD ;AN000;GHG 360KB
366 EXTRN S_DOS_UTIL2_DISK:WORD ;AN000;GHG 360KB
367 EXTRN S_DOS_UTIL3_DISK:WORD ;AN000;GHG 360KB
368 EXTRN S_DOS_COM_360:WORD ;AN000;DT 360KB
369 EXTRN E_FILE_ATTR:ABS ;AN000;
370 EXTRN S_SHELL2:BYTE ;AN000;DT
371 EXTRN S_SHELL_NEW:WORD ;AN000;DT
372 EXTRN S_SHELL_NEW_B:WORD ;AN000;DT
373 EXTRN S_DSKCPY_TO_B:WORD ;AN000;DT
374 EXTRN S_SELCOM_NEW_B:WORD ;AN000;DT
375 EXTRN S_SELHLP_NEW_B:WORD ;AN000;DT
376 EXTRN S_SELPRT_NEW_B:WORD ;AN000;DT
377 EXTRN S_SELEXE_NEW_B:WORD ;AN000;DT
378 EXTRN S_SELDAT_NEW_B:WORD ;AN000;DT
379 EXTRN S_SELCOM_C:WORD ;AN000;DT
380 EXTRN S_SELDAT_C:WORD ;AN000;DT
381 EXTRN S_SELPRT_C:WORD ;AN000;DT
382 EXTRN S_SELEXE_C:WORD ;AN000;DT
383 EXTRN S_SELHLP_C:WORD ;AN000;DT
384 EXTRN S_AUTOEX_C:WORD ;AN000;DT
385 EXTRN S_CONSYS_C:WORD ;AN000;DT
386 EXTRN S_VDISK_B:WORD ;AN000;JW
387 EXTRN S_ANSI_B:WORD ;AN000;JW
388 EXTRN S_APPEND_B:WORD ;AN000;JW
389 EXTRN S_GRAFTABL_B:WORD ;AN000;JW
390 EXTRN S_GRAPHICS_B:WORD ;AN000;JW
391 EXTRN S_GRAPHPRO_B:WORD ;AN000;JW
392 EXTRN S_RECOVER_B:WORD ;AN000;JW
393 EXTRN S_FASTOPEN_B:WORD ;AN000;JW
394 EXTRN S_VDISK_C:WORD ;AN000;JW
395 EXTRN S_ANSI_C:WORD ;AN000;JW
396 EXTRN S_APPEND_C:WORD ;AN000;JW
397 EXTRN S_GRAFTABL_C:WORD ;AN000;JW
398 EXTRN S_GRAPHICS_C:WORD ;AN000;JW
399 EXTRN S_GRAPHPRO_C:WORD ;AN000;JW
400 EXTRN S_RECOVER_C:WORD ;AN000;JW
401 EXTRN S_FASTOPEN_C:WORD ;AN000;JW
402 EXTRN S_AUTO_NEW:WORD ;AN000;
403 EXTRN S_CONFIG_NEW:WORD ;AN000;
404 EXTRN S_AUTO_NEW_B:WORD ;AN000;
405 EXTRN S_CONFIG_NEW_B:WORD ;AN000;
406 EXTRN S_OS2_CONFIG_C:WORD ;AN065;SEH
407 EXTRN S_OS2_AUTO_C:WORD ;AN065;SEH
408 EXTRN S_AUTO_REN:WORD ;AN000;
409 EXTRN S_CONFIG_REN:WORD ;AN000;
410 EXTRN S_AUTO_NEW_C:WORD ;AN000;
411 EXTRN S_CONFIG_NEW_C:WORD ;AN000;
412 EXTRN S_AUTO_C:WORD ;AN000;
413 EXTRN S_CONFIG_C:WORD ;AN000;
414 EXTRN S_CONFIG_AUTO:BYTE ;AN000;
415 EXTRN S_AUTO_MENU:WORD ;AN000;
416 EXTRN S_AUTO_FDISK:WORD ;AN000;
417 EXTRN S_AUTO_REBOOT:WORD ;AN000;
418 EXTRN E_FILES:ABS ;AN000;
419 EXTRN SH_FILES:ABS ;AN000;DT
420 EXTRN HIDE_SEL:BYTE ;AN000;
421 EXTRN HIDE_STARTUP:BYTE ;AN004;GHG
422 EXTRN E_HIDE_SEL:ABS ;AN000;
423 EXTRN E_HIDE_STARTUP:ABS ;AN004;GHG
424 EXTRN S_PREP_EGA:WORD ;AN000;
425 EXTRN S_PREP_LCD:WORD ;AN000;
426 EXTRN S_CP_SEL:WORD ;AN000;
427 EXTRN S_MODE:WORD ;AN000;
428 EXTRN N_HANDLE:WORD ;AN000;
429 EXTRN N_WRITE_HANDLE:WORD ;AN000;
430 EXTRN N_WRITE_ERR_CODE:WORD ;AN000;
431 EXTRN N_RETCODE:WORD ;AN000;
432 EXTRN N_COUNTER:WORD ;AN000;
433 EXTRN N_WORD_1:WORD ;AN000;
434 EXTRN N_WORD_2:WORD ;AN000;
435 EXTRN N_WORD_3:WORD ;AN000;
436 EXTRN N_WORD_4:WORD ;AN000;
437 EXTRN N_WORD_5:WORD ;AN000;
438 EXTRN N_WORD_6:WORD ;AN000;
439 EXTRN N_BYTE_1:BYTE ;AN025;
440 EXTRN SAVE_AREA:BYTE ;AN000;
441 EXTRN S_KEYB:WORD ;AN000;
442 EXTRN S_FDISK:WORD ;AN000;
443 EXTRN S_DISKCOPY:WORD ;AN000;
444 EXTRN S_DISKCOPY_PARM:WORD ;AN000;
445 EXTRN SC_1:WORD ;AN000;
446 EXTRN SC_2:WORD ;AN000;
447 EXTRN SC_PRI:WORD ;AN000;
448 EXTRN SC_EXT:WORD ;AN000;
449 EXTRN SC_LOG:WORD ;AN000;
450 EXTRN S_FORMAT:WORD ;AN000;
451 EXTRN S_FORMAT_B:WORD ;AN000;
452 EXTRN S_FORMAT_A:WORD ;AN000;
453 EXTRN S_REPLACE:WORD ;AN000;
454 EXTRN S_REPLACE_PAR1:WORD ;AN000;
455 EXTRN S_A_STARS:WORD ;AN000;
456 EXTRN S_SLASH_A:WORD ;AN000;
457 EXTRN S_SLASH_R:WORD ;AN000;JW
458 EXTRN S_SLASH_S:WORD ;AN000;
459 EXTRN S_SLASH_Q:WORD ;AN000;
460 EXTRN S_SLASH:WORD ;AN000;DT
461 EXTRN S_COLON:WORD ;AN000;
462 EXTRN S_SYS_C:WORD ;AN000;
463 EXTRN S_VOL_SEL:WORD ;AN000;
464 EXTRN S_DRIVE_C:WORD ;AN000;
465 EXTRN N_HOUSE_CLEAN:BYTE ;AN000;
466 EXTRN E_CLEAN_YES:ABS ;AN000;
467 EXTRN E_CLEAN_NO:ABS ;AN000;
468 EXTRN E_CR:ABS ;AN000;
469 EXTRN E_LF:ABS ;AN000;
470 EXTRN E_PART_PRI_DOS:ABS ;AN000;
471 EXTRN E_PART_EXT_DOS:ABS ;AN000;
472 EXTRN E_PART_LOG_DRI:ABS ;AN000;
473 EXTRN E_FREE_MEM_EDOS:ABS ;AN000;
474 EXTRN E_FREE_MEM_DISK:ABS ;AN000;
475 EXTRN E_PART_OTHER:ABS ;AN000;
476 EXTRN E_PART_UNFORMAT:ABS ;AN000;
477 EXTRN E_PART_FORMAT:ABS ;AN000;
478 EXTRN E_PART_FAT:ABS ;AN000;
479 EXTRN E_PART_KSAM:ABS ;AN000;
480 EXTRN E_PART_UNDEF:ABS ;AN000;
481 EXTRN E_PART_IGNORE:ABS ;AN000;
482 EXTRN N_DISK_1:WORD ;AN000;
483 EXTRN E_DISK_1:ABS ;AN000;
484 EXTRN N_DISK_2:WORD ;AN000;
485 EXTRN E_DISK_2:ABS ;AN000;
486 EXTRN E_DISK_INV:ABS ;AN000;
487 EXTRN E_DISK_NO_PART:ABS ;AN000;
488 EXTRN E_DISK_VAL_PART:ABS ;AN000;
489 EXTRN N_DISK_1_S1:WORD ;AN000;
490 EXTRN N_DISK_2_S1:WORD ;AN000;
491 EXTRN E_DISK_PRI:ABS ;AN000;
492 EXTRN E_DISK_EXT_DOS:ABS ;AN000;
493 EXTRN E_DISK_LOG_DRI:ABS ;AN000;
494 EXTRN E_DISK_EDOS_MEM:ABS ;AN000;
495 EXTRN E_DISK_FREE_MEM:ABS ;AN000;
496 EXTRN N_DISK_1_S2:WORD ;AN000;
497 EXTRN N_DISK_2_S2:WORD ;AN000;
498 EXTRN E_SPACE_NONE:ABS ;AN000;
499 EXTRN E_SPACE_EDOS:ABS ;AN000;
500 EXTRN E_SPACE_DISK:ABS ;AN000;
501 EXTRN F_PARTITION:WORD ;AN000;
502 EXTRN E_PART_DEFAULT:ABS ;AN000;
503 EXTRN E_PART_USER:ABS ;AN000;
504 EXTRN F_FORMAT:WORD ;AN000;
505 EXTRN E_FORMAT_FAT:ABS ;AN000;
506 EXTRN E_FORMAT_NO:ABS ;AN000;
507 EXTRN N_DISK1_MODE:WORD ;AN000;
508 EXTRN E_DISK1_INSTALL:ABS ;AN000;
509 EXTRN E_DISK1_REPLACE:ABS ;AN000;
510 EXTRN DISK_1_TABLE:BYTE ;AN000;
511 EXTRN DISK_1_VAL_ITEM:BYTE ;AN000;
512 EXTRN DISK_1_START:BYTE ;AN000;
513 EXTRN M_DISK_1_ITEMS:ABS ;AN000;
514 EXTRN DISK_2_TABLE:BYTE ;AN000;
515 EXTRN DISK_2_VAL_ITEM:BYTE ;AN000;
516 EXTRN DISK_2_START:BYTE ;AN000;
517 EXTRN M_DISK_2_ITEMS:ABS ;AN000;
518 EXTRN N_NAME_PART:BYTE ;AN000;
519 EXTRN N_SIZE_PART:WORD ;AN000;
520 EXTRN N_STATUS_PART:BYTE ;AN000;
521 EXTRN N_TYPE_PART:BYTE ;AN000;
522 EXTRN P_DRIVE_PART:BYTE ;AN000;
523 EXTRN N_LEVEL1_PART:BYTE ;AN065;SEH version number for DOS 4.00 1st part = blank
524 EXTRN N_LEVEL2_PART:BYTE ;AN065;SEH version number for DOS 4.00 2nd part = 4
525 EXTRN N_LEVEL3_PART:BYTE ;AN065;SEH version number for DOS 4.00 3rd part = .
526 EXTRN N_LEVEL4_PART:BYTE ;AN065;SEH version number for DOS 4.00 4th part = 0
527 EXTRN STACK_INDEX:BYTE ;AN000;
528 EXTRN SELECT_STACK:WORD ;AN000;
529 EXTRN STACK_SIZE:ABS ;AN000;
530 EXTRN N_DEST:BYTE ;AN000;
531 EXTRN E_DEST_DOS:ABS ;AN000;
532 EXTRN E_DEST_SHELL:ABS ;AN000;
533 EXTRN INT_24_ERROR:WORD ;AN000;
534 EXTRN INT_24_FLAG:BYTE ;AN000;
535 EXTRN OLD_INT_24:DWORD ;AN000;
536 EXTRN OLD_INT_23:DWORD ;AN000;
537 EXTRN OLD_INT_2F:DWORD ;AN000;
538 EXTRN ACTIVE:BYTE ;AN000;
539 EXTRN ALTERNATE:BYTE ;AN000;
540 EXTRN EGA:ABS ;AN000;
541 EXTRN LCD:ABS ;AN000;
542 EXTRN CGA:ABS ;AN000;
543 EXTRN MONO:ABS ;AN000;
544 EXTRN S_PRINT_FILE:WORD ;AN000;
545 EXTRN M_PRINT_FILE:ABS ;AN000;
546 EXTRN I_DESTINATION:WORD ;AN000;JW
547 EXTRN E_ENTIRE_DISK:ABS ;AN000;JW
548 EXTRN N_MOD80:WORD ;AN000;JW
549 EXTRN E_IS_MOD80:ABS ;AN000;JW
550 EXTRN E_DISK_ROW:ABS ;AN000;JW
551 EXTRN E_DISK_COL:ABS ;AN000;JW
552 EXTRN E_DRIVE_ROW:ABS ;AN000;JW
553 EXTRN E_DRIVE_COL:ABS ;AN000;JW
554 EXTRN N_DISK_NUM:BYTE ;AN000;JW
555 EXTRN MEM_SIZE:WORD ;AN000;DT
556 EXTRN MACHINE_TYPE:BYTE ;AN000;JW
557 EXTRN PS2_FLAG:BYTE ;AN000;JW
558 EXTRN MOD25_OR_MOD30:ABS ;AN000;JW
559 EXTRN DRIVE_A:ABS ;AN000;JW
560 EXTRN DRIVE_B:ABS ;AN000;JW
561 EXTRN N_DSKCPY_ERR:BYTE ;AN000;JW
562 EXTRN E_DSKCPY_RETRY:ABS ;AN000;JW
563 EXTRN E_DSKCPY_OK:ABS ;AN000;JW
564 EXTRN N_DRIVE_OPTION:WORD ;AN111;JW
565 EXTRN E_OPTION_B_C:ABS ;AN111;JW
566 EXTRN E_OPTION_A_C:ABS ;AN111;JW
567 EXTRN SOURCE_PANEL:WORD ;AN111;JW
568 EXTRN DEST_PANEL:WORD ;AN111;JW
569 EXTRN FORMAT_WHICH:BYTE ;AN111;JW
570 EXTRN STARTUP:ABS ;AN111;JW
571 EXTRN SHELL:ABS ;AN111;JW
572 EXTRN DISK_PANEL:WORD ;AN000;JW
573 EXTRN SEARCH_FILE:WORD ;AN000;JW
574 EXTRN SUB_ERROR:BYTE ;AN000;JW
575 EXTRN S_COMMAND_COM:WORD ;AN017;JW
576;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
577 \ 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 @@
1/* */
2/* */
3/****************************************************************************/
4/* Declare Global variables */
5/****************************************************************************/
6/* */
7
8
9
10extern char cur_disk; /* ;AN000; */
11extern FLAG good_disk[2]; /* ;AN000; */
12extern unsigned char number_of_drives; /* ;AN000; */
13extern FLAG reboot_flag; /* ;AN000; */
14extern char errorlevel; /* ;AN000; */
15extern char max_partition_size; /* ;AN000; */
16extern char sort[24]; /* ;AN000; */
17extern FLAG no_fatal_error; /* ;AC000; */
18extern char valid_input; /* ;AN000; */
19extern unsigned char video_mode; /* ;AN000; */
20extern unsigned char display_page; /* ;AN000; */
21
22extern unsigned total_disk[2]; /* ;AN000; */
23extern XFLOAT total_mbytes[2]; /* ;AN000; */
24extern unsigned char max_sector[2]; /* ;AN000; */
25extern unsigned char max_head[2]; /* ;AN000; */
26extern unsigned required_cyls[2]; /* ;AN000; */
27
28extern unsigned input_row; /* ;AN000; */
29extern unsigned input_col; /* ;AN000; */
30extern char insert[800]; /* ;AC000; */
31extern char *pinsert; /* ;AN000; */
32
33extern unsigned char master_boot_record[2][512]; /* ;AN000; */
34extern unsigned char boot_record[512]; /* ;AN000; */
35
36extern FLAG next_letter; /* ;AN000; */
37extern FLAG primary_flag; /* ;AN000; */
38extern FLAG extended_flag; /* ;AN000; */
39extern FLAG logical_flag; /* ;AN000; */
40extern FLAG disk_flag; /* ;AN000; */
41extern unsigned primary_buff; /* ;AN000; */
42extern unsigned extended_buff; /* ;AN000; */
43extern unsigned logical_buff; /* ;AN000; */
44extern char cur_disk_buff; /* ;AN000; */
45extern unsigned long NOVAL; /* ;AN000; */
46extern char next_letter; /* ;AN000; */
47
48
49/* */
50/* */
51/****************************************************************************/
52/* Define Global structures */
53/****************************************************************************/
54/* */
55
56extern struct entry part_table[2][4]; /* ;AN000; */
57extern struct entry ext_table[2][24]; /* ;AN000; */
58extern struct freespace free_space[24]; /* ;AN000; */
59extern struct KeyData *input_data; /* ;AN000; */
60extern struct dx_buffer_ioctl dx_buff; /* ;AN000; */
61extern struct SREGS segregs; /* ;AN000; */
62extern struct subst_list sublist; /* ;AN000; */
63
64/* */
65/****************************************************************************/
66/* Define UNIONS */
67/****************************************************************************/
68/* */
69
70extern union REGS regs; /* ;AN000; */
71
72extern char *format_string; /* ;AN000; */
73extern char far *fat12_String; /* ;AN000; */
74extern char far *fat16_String; /* ;AN000; */
75extern char far *hilda_string; /* ;AN000; */
76 \ 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 @@
1PAGE 55,132 ;AN000;
2NAME SELECT ;AN000;
3TITLE SELECT - SELECT.EXE ;AN000;
4SUBTTL GEN_COMS ;AN000;
5.ALPHA ;AN000;
6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7;
8; GEN_COMS.ASM : Copyright 1988 Microsoft
9;
10; DATE: August 8/87
11;
12; COMMENTS: Assemble with MASM 3.0 (using the -A option)
13;
14; Module contains code for :
15; - creation of AUTOEXEC file
16; - creation of CONFIG file
17; - creation of DOSSHELL.BAT
18;
19; CHANGE HISTORY:
20;
21; ;AN000; for DT
22; ;AN001; for PTM1181 GHG
23;
24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
25;
26; DATA SEGMENT
27;
28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
30 ;
31SC_CD DW MC_CD ;AN000;
32PC_CD DB '@CD ' ;AN000;
33MC_CD EQU $ - PC_CD ;AN000;
34 ;
35SC_BREAK DW MC_BREAK ;AN000;
36PC_BREAK DB 'BREAK=' ;AN000;
37MC_BREAK EQU $ - PC_BREAK ;AN000;
38 ;
39SC_CPSW DW MC_CPSW ;AN000;
40PC_CPSW DB 'CPSW=' ;AN000;
41MC_CPSW EQU $ - PC_CPSW ;AN000;
42 ;
43SC_VERIFY DW MC_VERIFY ;AN000;
44PC_VERIFY DB 'VERIFY ' ;AN000;
45MC_VERIFY EQU $ - PC_VERIFY ;AN000;
46 ;
47SC_COUNTRY DW MC_COUNTRY ;AN000;
48PC_COUNTRY DB 'COUNTRY=' ;AN000;
49MC_COUNTRY EQU $ - PC_COUNTRY ;AN000;
50 ;
51SC_COUNTRY_SYS DW MC_COUNTRY_SYS ;AN000;
52PC_COUNTRY_SYS DB 'COUNTRY.SYS' ;AN000;
53MC_COUNTRY_SYS EQU $ - PC_COUNTRY_SYS ;AN000;
54 ;
55SC_BUFFERS DW MC_BUFFERS ;AN000;
56PC_BUFFERS DB 'BUFFERS=' ;AN000;
57MC_BUFFERS EQU $ - PC_BUFFERS ;AN000;
58 ;
59SC_SLASH_X DW MC_SLASH_X ;AC046;SEH changed from /E
60PC_SLASH_X DB ' /X' ;AC046;SEH
61MC_SLASH_X EQU $ - PC_SLASH_X ;AC046;SEH
62 ;
63SC_FCBS DW MC_FCBS ;AN000;
64PC_FCBS DB 'FCBS=' ;AN000;
65MC_FCBS EQU $ - PC_FCBS ;AN000;
66 ;
67SC_FILES DW MC_FILES ;AN000;
68PC_FILES DB 'FILES=' ;AN000;
69MC_FILES EQU $ - PC_FILES ;AN000;
70 ;
71SC_LASTDRIVE DW MC_LASTDRIVE ;AN000;
72PC_LASTDRIVE DB 'LASTDRIVE=' ;AN000;
73MC_LASTDRIVE EQU $ - PC_LASTDRIVE ;AN000;
74 ;
75SC_STACKS DW MC_STACKS ;AN000;
76PC_STACKS DB 'STACKS=' ;AN000;
77MC_STACKS EQU $ - PC_STACKS ;AN000;
78 ;
79SC_SHELL DW MC_SHELL ;AN000;
80PC_SHELL DB 'SHELL=' ;AN000;
81MC_SHELL EQU $ - PC_SHELL ;AN000;
82 ;
83SC_SHELL_1 DW MC_SHELL_1 ;AN000;
84PC_SHELL_1 DB 'COMMAND.COM' ;AC037; SEH Split the original SC_SHELL_1 into
85MC_SHELL_1 EQU $ - PC_SHELL_1 ;AC037; SEH 3 parts
86 ;
87SC_SHELL_2 DW MC_SHELL_2 ;AN037; SEH Used for diskettes only
88PC_SHELL_2 DB ' /MSG' ;AN037; SEH
89MC_SHELL_2 EQU $ - PC_SHELL_2 ;AN037; SEH
90 ;
91SC_SHELL_3 DW MC_SHELL_3 ;AN037; SEH Use for diskettes and hardfile
92PC_SHELL_3 DB ' /P /E:256 ' ;AN037; SEH Two spaces required for CR and LF
93MC_SHELL_3 EQU $ - PC_SHELL_3 - 2 ;AN037; SEH
94 ;
95SC_DEVICE DW MC_DEVICE ;AN000;
96PC_DEVICE DB 'DEVICE=' ;AN000;
97MC_DEVICE EQU $ - PC_DEVICE ;AN000;
98 ;
99SC_XMAEM_SYS DW MC_XMAEM_SYS ;AN000;
100PC_XMAEM_SYS DB 'XMAEM.SYS ' ;AN000;
101MC_XMAEM_SYS EQU $ - PC_XMAEM_SYS ;AN000;
102 ;
103SC_XMA2EMS_SYS DW MC_XMA2EMS_SYS ;AN000;
104PC_XMA2EMS_SYS DB 'XMA2EMS.SYS ' ;AN000;
105MC_XMA2EMS_SYS EQU $ - PC_XMA2EMS_SYS ;AN000;
106 ;
107SC_ANSI_SYS DW MC_ANSI_SYS ;AN000;
108PC_ANSI_SYS DB 'ANSI.SYS ' ;AN000;
109MC_ANSI_SYS EQU $ - PC_ANSI_SYS ;AN000;
110 ;
111SC_VDISK_SYS DW MC_VDISK_SYS ;AN000;
112PC_VDISK_SYS DB 'RAMDRIVE.SYS ' ;AN000;
113MC_VDISK_SYS EQU $ - PC_VDISK_SYS ;AN000;
114 ;
115SC_DISPLAY_SYS DW MC_DISPLAY_SYS ;AN000;
116PC_DISPLAY_SYS DB 'DISPLAY.SYS CON=(' ;AN000;
117MC_DISPLAY_SYS EQU $ - PC_DISPLAY_SYS ;AN000;
118 ;
119 PUBLIC SC_DISPLAY_EGA ;AN000;
120SC_DISPLAY_EGA DW MC_DISPLAY_EGA ;AN000;
121PC_DISPLAY_EGA DB 'EGA.CPI)' ;AN000;
122MC_DISPLAY_EGA EQU $ - PC_DISPLAY_EGA ;AN000;
123 ;
124 PUBLIC SD_DISPLAY_EGA ;AN001;GHG
125SD_DISPLAY_EGA DW MD_DISPLAY_EGA ;AN001;GHG
126PD_DISPLAY_EGA DB 'EGA' ;AN001;GHG
127MD_DISPLAY_EGA EQU $ - PD_DISPLAY_EGA ;AN001;GHG
128 ;
129 PUBLIC SC_DISPLAY_LCD ;AN000;
130SC_DISPLAY_LCD DW MC_DISPLAY_LCD ;AN000;
131PC_DISPLAY_LCD DB 'LCD.CPI)' ;AN000;
132MC_DISPLAY_LCD EQU $ - PC_DISPLAY_LCD ;AN000;
133 ;
134 PUBLIC SD_DISPLAY_LCD ;AN001;GHG
135SD_DISPLAY_LCD DW MD_DISPLAY_LCD ;AN001;GHG
136PD_DISPLAY_LCD DB 'LCD' ;AN001;GHG
137MD_DISPLAY_LCD EQU $ - PD_DISPLAY_LCD ;AN001;GHG
138 ;
139SC_PRINTER_SYS DW MC_PRINTER_SYS ;AN000;
140PC_PRINTER_SYS DB 'PRINTER.SYS ' ;AN000;
141MC_PRINTER_SYS EQU $ - PC_PRINTER_SYS ;AN000;
142 ;
143SC_LPT DW MC_LPT ;AN000;
144PC_LPT DB 'LPT' ;AN000;
145MC_LPT EQU $ - PC_LPT ;AN000;
146 ;
147SC_COM DW MC_COM ;AN011; SEH
148PC_COM DB 'COM' ;AN011; SEH
149MC_COM EQU $ - PC_COM ;AN011; SEH
150 ;
151SC_EQUAL_OPEN DW MC_EQUAL_OPEN ;AN000;
152PC_EQUAL_OPEN DB '=(' ;AN000;
153MC_EQUAL_OPEN EQU $ - PC_EQUAL_OPEN ;AN000;
154 ;
155SC_437 DW MC_437 ;AN000;
156PC_437 DB ',437,' ;AN000;
157MC_437 EQU $ - PC_437 ;AN000;
158 ;
159SC_COMMA DW MC_COMMA ;AN000;
160PC_COMMA DB ',' ;AN000;
161MC_COMMA EQU $ - PC_COMMA ;AN000;
162 ;
163SC_INSTALL DW MC_INSTALL ;AN000;
164PC_INSTALL DB 'INSTALL=' ;AN000;
165MC_INSTALL EQU $ - PC_INSTALL ;AN000;
166 ;
167SC_KEYB_C DW MC_KEYB_C ;AN000;
168PC_KEYB_C DB 'KEYB.COM ' ;AN000;
169MC_KEYB_C EQU $ - PC_KEYB_C ;AN000;
170 ;
171SC_KEYBOARD_SYS DW MC_KEYBOARD_SYS ;AN000;
172PC_KEYBOARD_SYS DB 'KEYBOARD.SYS' ;AN000;
173MC_KEYBOARD_SYS EQU $ - PC_KEYBOARD_SYS ;AN000;
174 ;
175SC_KEYB_SWITCH DW MC_KEYB_SWITCH ;AN002;JW
176PC_KEYB_SWITCH DB ' /ID:' ;AN002;JW
177MC_KEYB_SWITCH EQU $ - PC_KEYB_SWITCH ;AN002;JW
178 ;
179SC_SHARE DW MC_SHARE ;AN000;
180PC_SHARE DB 'SHARE.EXE ' ;AN000;
181MC_SHARE EQU $ - PC_SHARE ;AN000;
182 ;
183SC_FASTOPEN DW MC_FASTOPEN ;AN000;
184PC_FASTOPEN DB 'FASTOPEN.EXE ' ;AN000;
185MC_FASTOPEN EQU $ - PC_FASTOPEN ;AN000;
186 ;
187SC_NLSFUNC DW MC_NLSFUNC ;AN000;
188PC_NLSFUNC DB 'NLSFUNC.EXE ' ;AN000;
189MC_NLSFUNC EQU $ - PC_NLSFUNC ;AN000;
190 ;
191SC_ECHO DW MC_ECHO ;AN000;
192PC_ECHO DB '@ECHO OFF ' ;AN000; TWO SPACES REQUIRED FOR CR,LF
193MC_ECHO EQU $ - PC_ECHO - 2 ;AN000;
194 ;
195SC_PATH DW MC_PATH ;AN000;
196PC_PATH DB 'PATH ' ;AN000;
197MC_PATH EQU $ - PC_PATH ;AN000;
198 ;
199SC_APPEND DW MC_APPEND ;AN000;
200PC_APPEND DB 'APPEND ' ;AN000;
201MC_APPEND EQU $ - PC_APPEND ;AN000;
202 ;
203SC_PROMPT DW MC_PROMPT ;AN000;
204PC_PROMPT DB 'PROMPT ' ;AN000;
205MC_PROMPT EQU $ - PC_PROMPT ;AN000;
206 ;
207SC_SET_COMSPEC DW MC_SET_COMSPEC ;AN000;
208PC_SET_COMSPEC DB 'SET COMSPEC=' ;AN000;
209MC_SET_COMSPEC EQU $ - PC_SET_COMSPEC ;AN000;
210 ;
211SC_COMMAND_COM DW MC_COMMAND_COM ;AN000;
212PC_COMMAND_COM DB 'COMMAND.COM' ;AN000;
213MC_COMMAND_COM EQU $ - PC_COMMAND_COM ;AN000;
214 ;
215SC_GRAPHICS DW MC_GRAPHICS ;AN000;
216PC_GRAPHICS DB 'GRAPHICS ' ;AN000;
217MC_GRAPHICS EQU $ - PC_GRAPHICS ;AN000;
218 ;
219SC_GRAFTABL DW MC_GRAFTABL ;AN000;
220PC_GRAFTABL DB 'GRAFTABL ' ;AN000;
221MC_GRAFTABL EQU $ - PC_GRAFTABL ;AN000;
222 ;
223;SC_DATE DW MC_DATE ;
224;PC_DATE DB 'DATE ' ; TWO SPACES REQUIRED FOR CR,LF
225;MC_DATE EQU $ - PC_DATE - 2 ;
226 ;
227;SC_TIME DW MC_TIME ;
228;PC_TIME DB 'TIME ' ; TWO SPACES REQUIRED FOR CR,LF
229;MC_TIME EQU $ - PC_TIME - 2 ;
230 ;
231SC_VER DW MC_VER ;AN000;
232PC_VER DB 'VER ' ;AN000; TWO SPACES REQUIRED FOR CR,LF
233MC_VER EQU $ - PC_VER - 2 ;AN000;
234 ;
235SC_MODE_CON DW MC_MODE_CON ;AN000;
236PC_MODE_CON DB 'MODE CON CP PREP=((' ;AN000;
237MC_MODE_CON EQU $ - PC_MODE_CON ;AN000;
238 ;
239SC_MODE_COM DW MC_MODE_COM ;AN000;
240PC_MODE_COM DB 'MODE COM' ;AN000;
241MC_MODE_COM EQU $ - PC_MODE_COM ;AN000;
242 ;
243SC_MODE_LPT DW MC_MODE_LPT ;AN000;
244PC_MODE_LPT DB 'MODE LPT' ;AN000;
245MC_MODE_LPT EQU $ - PC_MODE_LPT ;AN000;
246 ;
247SC_EQUAL_COM DW MC_EQUAL_COM ;AN000;
248PC_EQUAL_COM DB '=COM' ;AN000;
249MC_EQUAL_COM EQU $ - PC_EQUAL_COM ;AN000;
250 ;
251SC_PREPARE DW MC_PREPARE ;AN000;
252PC_PREPARE DB ' CP PREP=((' ;AN000;
253MC_PREPARE EQU $ - PC_PREPARE ;AN000;
254 ;
255SC_CLOSE_BRAC DW MC_CLOSE_BRAC ;AN000;
256PC_CLOSE_BRAC DB ') ' ;AN000;
257MC_CLOSE_BRAC EQU $ - PC_CLOSE_BRAC ;AN000;
258 ;
259SC_KEYB_A DW MC_KEYB_A ;AN000;
260PC_KEYB_A DB 'KEYB ' ;AN000;
261MC_KEYB_A EQU $ - PC_KEYB_A ;AN000;
262 ;
263SC_COMMAS DW MC_COMMAS ;AN000;
264PC_COMMAS DB ',,' ;AN000;
265MC_COMMAS EQU $ - PC_COMMAS ;AN000;
266 ;
267SC_CHCP DW MC_CHCP ;AN000;
268PC_CHCP DB 'CHCP ' ;AN000;
269MC_CHCP EQU $ - PC_CHCP ;AN000;
270 ;
271SC_DRIVE_C DW MC_DRIVE_C ;AN013;JW
272PC_DRIVE_C DB '@C: ' ;AN013;JW
273MC_DRIVE_C EQU $ - PC_DRIVE_C - 2 ;AN013;JW
274 ;
275SC_SHELLC_1 DW MC_SHELLC_1 ;AN000;
276PC_SHELLC_1 DB '@SHELLB DOSSHELL',E_CR,E_LF ;AC019;SEH
277 DB '@IF ERRORLEVEL 255 GOTO END',E_CR,E_LF ;AN000;
278 DB ':COMMON ' ;AN000;
279MC_SHELLC_1 EQU $ - PC_SHELLC_1 - 2 ;AN000; 2 SPACES FOR ASCII-Z CONVERSION
280 ;
281SC_SHELLC_2 DW MC_SHELLC_2 ;AN000;
282PC_SHELLC_2 DB ':END ' ;AN000;
283MC_SHELLC_2 EQU $ - PC_SHELLC_2 - 2 ;AN000;
284 ;
285SC_SHELLC DW MC_SHELLC ;AN000;
286PC_SHELLC DB '@SHELLC ' ;AN000;
287MC_SHELLC EQU $ - PC_SHELLC ;AN000;
288 ;
289SC_SHELLP DW MC_SHELLP ;AN000;
290PC_SHELLP DB 'DOSSHELL ' ;AC019;SEH
291MC_SHELLP EQU $ - PC_SHELLP - 2 ;AN000;
292 ;
293SC_PRINT_COM DW MC_PRINT_COM ;AN000;
294PC_PRINT_COM DB 'PRINT /D:' ;AC011; SEH
295MC_PRINT_COM EQU $ - PC_PRINT_COM ;AN011; SEH
296 ;
297SC_AT_SIGN DW MC_AT_SIGN ;AN000;
298PC_AT_SIGN DB '@' ;AN000;
299MC_AT_SIGN EQU $ - PC_AT_SIGN ;AN000;
300 ;
301S_DOS_PATH DW M_DOS_PATH ;AN000;
302P_DOS_PATH DB 50 DUP(?) ;AN000;
303M_DOS_PATH EQU $ - P_DOS_PATH ;AN000;
304 ;
305DATA ENDS ;AN000;DATA
306;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
307;
308;
309;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
310 INCLUDE EXT.INC ;AN000;
311 INCLUDE STRUC.INC ;AN000;
312 INCLUDE MACROS.INC ;AN000;
313 INCLUDE ROUT_EXT.INC ;AN000;
314;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
315;
316;
317;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
318SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine
319 ASSUME CS:SELECT,DS:DATA ;AN000;
320 ;
321 PUBLIC CREATE_CONFIG_SYS ;AN000;
322 PUBLIC CREATE_AUTOEXEC_BAT ;AN000;
323 PUBLIC CREATE_SHELL_BAT ;AN000;
324;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
325;
326; Create AUTOEXEC.BAT file
327;
328;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
329CREATE_AUTOEXEC_BAT PROC ;AN000;
330 ;
331 ;;;install to B:, install path = null ;
332 ;;;install to root of C:, install path = c:\ ;
333 ;;;install to directory in C:, install path = c:\path\ ;
334 .IF < I_DEST_DRIVE eq E_DEST_DRIVE_B > ;AN000; if install to drive B:
335 .THEN ;AN000;
336 INIT_VAR S_DOS_PATH,0 ;AN000; set path = null
337 .ELSE ;AN000; else
338 COPY_STRING S_DOS_PATH,M_DOS_PATH,S_INSTALL_PATH;AN000;set path = user defined path
339 .IF < S_DOS_PATH gt M_DEST_DRIVE > ;AN000; if install is not to root of drive C:
340 .THEN ;AN000;
341 APPEND_STRING S_DOS_PATH,M_DOS_PATH,S_SLASH ;AN000; append back slash
342 .ENDIF ;AN000;
343 .ENDIF ;AN000;
344 ;
345 ;;;write @ECHO OFF ;
346 WRITE_LINE SC_ECHO ;AN000; write ECHO OFF command
347 ;
348 ;;;write SET COMSPEC=<path>\COMMAND.COM ;
349 .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
350 MERGE_STRING SC_LINE,MC_LINE,SC_SET_COMSPEC,S_DRIVE_A ;AC043;SEH ;AN000;JW
351 .ELSE ;AC043;SEH ;AN000;JW
352 MERGE_STRING SC_LINE,MC_LINE,SC_SET_COMSPEC,S_DOS_PATH ;AC043;SEH ;AN000;JW
353 .ENDIF ;AC043;SEH ;AN000;JW
354 APPEND_STRING SC_LINE,MC_LINE, SC_COMMAND_COM ;AC043;SEH ;AN000;
355 WRITE_LINE SC_LINE ;AC043;SEH ;AN000; write SET COMSPEC command
356 ;
357 ;;;write VERIFY <parameter> ;
358 .IF < S_VERIFY gt 0 > ;AN000; if field length > zero
359 .THEN ;AN000;
360 MERGE_STRING SC_LINE,MC_LINE,SC_VERIFY,S_VERIFY;AN000;
361 WRITE_LINE SC_LINE ;AN000; write VERIFY command
362 .ENDIF ;AN000;
363 ;
364 ;;;write PATH <parameter> ;
365 .IF < F_PATH eq E_PATH_YES > and ;AN000; if PATH command required
366 .IF < S_PATH gt 0 > ;AN000; and field length > zero
367 .THEN ;AN000;
368 MERGE_STRING SC_LINE,MC_LINE,SC_PATH, S_PATH ;AN000;
369 WRITE_LINE SC_LINE ;AN000; write PATH command
370 .ENDIF ;AN000;
371 ;
372 ;;;write APPEND <parameter> ;AN000;JW
373 ;;;write APPEND <path> ;
374 .IF < F_APPEND eq E_APPEND_YES > ;AN000; if APPEND command required
375 .IF < S_APPEND_P gt 0 > ;AN000; and field length > zero JW
376 .THEN ;AN000; JW
377 MERGE_STRING SC_LINE,MC_LINE,SC_APPEND,S_APPEND_P ;AN000;JW
378 WRITE_LINE SC_LINE ;AN000; write APPEND command JW
379 .ENDIF ;AN000; JW
380 .IF < S_APPEND gt 0 > ;AN000; and field length > zero
381 .THEN ;AN000;
382 MERGE_STRING SC_LINE,MC_LINE,SC_APPEND,S_APPEND;AN000;
383 WRITE_LINE SC_LINE ;AN000; write APPEND command
384 .ENDIF ;AN000;
385 .ENDIF ;AN000;JW
386 ;
387 ;;;write PROMPT <parameter> ;
388 .IF < F_PROMPT eq E_PROMPT_YES > and ;AN000; if PROMPT command required
389 .IF < S_PROMPT gt 0 > ;AN000; and field length > zero
390 .THEN ;AN000;
391 MERGE_STRING SC_LINE,MC_LINE,SC_PROMPT,S_PROMPT;AN000;
392 WRITE_LINE SC_LINE ;AN000; write PROMPT command
393 .ENDIF ;AN000;
394 ;
395 ;;;write <path>\GRAPHICS <parameter> ;
396 .IF < F_GRAPHICS eq E_GRAPHICS_YES > ;AN000; if GRAPHICS command is to be included
397 .THEN ;AN000;
398 MERGE_STRING SC_LINE,MC_LINE,S_DOS_PATH,SC_GRAPHICS;AN000;
399 APPEND_STRING SC_LINE, MC_LINE, S_GRAPHICS ;AN000;
400 WRITE_LINE SC_LINE ;AN000; write GRAPHICS command
401 .ENDIF ;AN000;
402 ;
403 ;;;init S_STR120_1 to primary code page ;
404 ;;;init S_STR120_2 to secondary code page ;
405 WORD_TO_CHAR N_CP_PRI, S_STR120_1 ;AN000; primary code page in ASCII-N format
406 WORD_TO_CHAR N_CP_SEC, S_STR120_2 ;AN000; secondary code page in ASCII-N format
407 ;
408 ;;;write <path>\GRAFTABL <primary code page> ;
409 .IF < F_GRAFTABL eq E_GRAFTABL_YES > ;AN000; if GRAFTABL command required
410 .THEN ;AN000;
411 MERGE_STRING SC_LINE,MC_LINE,S_DOS_PATH,SC_GRAFTABL;AN000;
412 APPEND_STRING SC_LINE, MC_LINE, S_STR120_1 ;AN000;
413 WRITE_LINE SC_LINE ;AN000; write GRAFTABL command
414 .ENDIF ;AN000;
415 ;
416 ;;;write VER ;
417 WRITE_LINE SC_VER ;AN000; write VER command
418 ;
419 ;;;S_STR120_1 = primary code page ;
420 ;;;S_STR120_2 = secondary code apge ;
421 ;;;init S_STR120_3 to code page list ;
422 INIT_VAR S_STR120_3, 0 ;AN000;
423 .IF < N_CP_PRI eq 0 > or ;AN000; if primary code page is 0 or 437
424 .IF < N_CP_PRI eq 437 > ;AN000;
425 .THEN ;AN000; no action
426 .ELSE ;AN000; else
427 APPEND_STRING S_STR120_3,M_STR120_3,S_STR120_1;AN000; append code page to cp list
428 .ENDIF ;AN000;
429 ;
430 .IF < N_CP_SEC eq 0 > or ;AN000; if secondary code page is 0 or 437
431 .IF < N_CP_SEC eq 437 > ;AN000;
432 .THEN ;AN000; no action
433 .ELSE ;AN000; else
434 .IF < S_STR120_3 ne 0 > ;AN000; if primary code page is in cp list
435 .THEN ;AN000;
436 APPEND_STRING S_STR120_3, M_STR120_3, S_SPACE ;AN000; append space to cp list
437 .ENDIF ;AN000;
438 APPEND_STRING S_STR120_3,M_STR120_3,S_STR120_2;AN000; append code page to cp list
439 .ENDIF ;AN000;
440 ;
441 ;;;S_STR120_3 = code page list ;
442 ;;;write MODE CON CODEPAGE PREPARE ((<cp list>) <path>\<display>.CPI
443 .IF < F_CPSW eq E_CPSW_YES > near ;AN000; if code page switching required
444 .THEN ;AN000;
445 .IF < S_STR120_3 ne 0 > near ;AN000; if primary/secondary code pages are not 0 or 437
446 .THEN ;AN000;
447 MERGE_STRING SC_LINE,MC_LINE,SC_MODE_CON,S_STR120_3;AN000;
448 APPEND_STRING SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000; append close bracket
449 APPEND_STRING SC_LINE, MC_LINE,S_DOS_PATH ;AN000; append path
450 .IF < ACTIVE eq EGA > or ;AN000; if EGA adaptor
451 .IF < ALTERNATE eq EGA > ;AN000;
452 .THEN ;AN000;
453 APPEND_STRING SC_LINE, MC_LINE, SC_DISPLAY_EGA;AN000; append EGA.CPI)
454 .ELSEIF < ACTIVE eq LCD > or ;AN000; if LCD adaptor
455 .IF < ALTERNATE eq LCD > ;AN000;
456 .THEN ;AN000;
457 APPEND_STRING SC_LINE, MC_LINE, SC_DISPLAY_LCD;AN000; append LCD.CPI)
458 .ENDIF ;AN000;
459 WRITE_LINE SC_LINE ;AN000; write MODE CON CODEPAGE command
460 .ENDIF ;AN000;
461 .ENDIF ;AN000;
462 ;
463 ;;;S_STR120_3 = cp list ;
464 ;;;write MODE LPT1 CODEPAGE PREPARE=((<cp list>) <path>\<cp paramaeters.CPI>)
465 ;;;write MODE LPT2 CODEPAGE PREPARE=((<cp list>) <path>\<cp paramaeters.CPI>)
466 ;;;write MODE LPT3 CODEPAGE PREPARE=((<cp list>) <path>\<cp paramaeters.CPI>)
467 ;;;N_WORD_1 = parallel port number ;
468 INIT_VAR N_WORD_1, 1 ;AN000; set port number = 1
469 .IF < F_CPSW eq E_CPSW_YES > near ;AN000; if code page switching required
470 .THEN ;AN000;
471 .REPEAT ;AN000; repeat code block
472 GET_PRINTER_PARAMS 0, N_WORD_1, N_RETCODE ;AN000; get printer parameters
473 .IF < N_RETCODE eq 1 > and near ;AN000; if valid return
474 .IF < N_PRINTER_TYPE eq E_PARALLEL > and near ;AN000; and parallel printer
475 .IF < S_CP_DRIVER gt 0 > and near ;AN000; and driver and prepare
476 .IF < S_CP_PREPARE gt 0 > near ;AN000; parameters valid
477 .THEN ;AN000;
478 COPY_STRING SC_LINE, MC_LINE, SC_MODE_LPT ;AN000; append MODE LPT
479 WORD_TO_CHAR N_WORD_1, S_STR120_2 ;AN000;
480 APPEND_STRING SC_LINE, MC_LINE, S_STR120_2 ;AN000; append lpt number
481 APPEND_STRING SC_LINE, MC_LINE, SC_PREPARE ;AN000; append CODEPAGE PREPARE
482 APPEND_STRING SC_LINE, MC_LINE, S_STR120_3 ;AN000; append cp list
483 APPEND_STRING SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000; append close bracket
484 APPEND_STRING SC_LINE, MC_LINE, S_DOS_PATH ;AN000; append path
485 APPEND_STRING SC_LINE, MC_LINE, S_CP_PREPARE ;AN000; append driver parameters
486 APPEND_STRING SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000; append close bracket
487 WRITE_LINE SC_LINE ;AN000; write PRINTER.SYS command
488 .ENDIF ;AN000;
489 INC_VAR N_WORD_1 ;AN000; inc printer number
490 .UNTIL < N_WORD_1 gt 3 > near ;AN000; end of repeat block
491 .ENDIF ;AN000;
492 ;
493 ;;;write serial printer parameters and redirection command
494 ;;;write MODE COMx:<parameter> ;
495 ;;;write MODE LPTy=COMx ;
496 ;;;N_WORD_1 = serial port number ;
497 INIT_VAR N_WORD_1, 4 ;AN000; set port number = 4
498 INIT_VAR N_WORD_2, 1 ;AN000; set serial port number = 1
499 .REPEAT ;AN000; repeat code block
500 GET_PRINTER_PARAMS 0, N_WORD_1, N_RETCODE ;AN000; get printer parameters
501 .IF < N_RETCODE eq 1 > and near ;AN000; if valid return
502 .IF < N_PRINTER_TYPE eq E_SERIAL > and near ;AN000; and serial printer
503 .IF < S_MODE_PARM gt 0 > near ;AN000; and mode parameters present
504 .THEN ;AN000;
505 COPY_STRING SC_LINE, MC_LINE, SC_MODE_COM ;AN000; append MODE COM
506 WORD_TO_CHAR N_WORD_2, S_STR120_3 ;AN000; S_STR120_3 = serial port number
507 APPEND_STRING SC_LINE, MC_LINE, S_STR120_3 ;AN000; append serial port number
508 APPEND_STRING SC_LINE, MC_LINE, S_COLON ;AN000; append colon
509 APPEND_STRING SC_LINE, MC_LINE, S_MODE_PARM ;AN000; append mode parameters
510 WRITE_LINE SC_LINE ;AN000; write MODE COMx command
511 .IF < I_REDIRECT gt 1 > ;AN000; if printer redirection
512 .THEN ;AN000;
513 COPY_STRING SC_LINE,MC_LINE,SC_MODE_LPT ;AN000; append MODE LPT
514 DEC_VAR I_REDIRECT ;AN000; first item in list is 'None'
515 WORD_TO_CHAR I_REDIRECT, S_STR120_2 ;AN000; convert LPT no to chars
516 APPEND_STRING SC_LINE,MC_LINE,S_STR120_2 ;AN000; append parallel port
517 APPEND_STRING SC_LINE,MC_LINE,SC_EQUAL_COM ;AN000; append =COM
518 APPEND_STRING SC_LINE,MC_LINE,S_STR120_3 ;AN000; append serial port number
519 WRITE_LINE SC_LINE ;AN000; write MODE LPTx=COMy command
520 .ENDIF ;AN000;
521 .ENDIF ;AN000;
522 INC_VAR N_WORD_1 ;AN000; inc printer number
523 INC_VAR N_WORD_2 ;AN000; inc serial port number
524 .UNTIL < N_WORD_1 gt 7 > near ;AN000; end of repeat block
525 ;
526 ;;;write KEYB <keyboard>,,<path>\KEYBOARD.SYS ;
527 .IF < N_KYBD_VAL eq E_KYBD_VAL_YES > near ;AN000; if kybd id is valid
528 .THEN ;AN000;
529 COPY_STRING SC_LINE, MC_LINE, SC_KEYB_A ;AN000; copy KEYB
530 APPEND_STRING SC_LINE, MC_LINE, S_KEYBOARD ;AN000; append kybd id
531 APPEND_STRING SC_LINE, MC_LINE, SC_COMMAS ;AN000; append ,,
532 APPEND_STRING SC_LINE,MC_LINE, S_DOS_PATH ;AN000; append install path
533 APPEND_STRING SC_LINE,MC_LINE,SC_KEYBOARD_SYS ;AN000; append \KEYBOARD.SYS
534 .IF < N_KYBD_ALT ne E_KYBD_ALT_NO > and ;AN002; if alternate keyboard valid JW
535 .IF < I_KYBD_ALT eq 2 > ;AN002; and not default setting JW
536 .THEN ;AN002; JW
537 APPEND_STRING SC_LINE, MC_LINE,SC_KEYB_SWITCH ;AN002; append keyb id switch '/ID:' JW
538 APPEND_STRING SC_LINE, MC_LINE, S_KYBD_ALT ;AN002; append alternate keyboard id JW
539 APPEND_STRING SC_LINE, MC_LINE, S_SPACE ;AN090;JPW add space so last char not overwritten
540 .ENDIF ;AN002; JW
541 WRITE_LINE SC_LINE ;AN000; write KEYB command
542 .ENDIF ;AN000;
543 ;
544 ;;;write CHCP <primary code page> ;
545 .IF < F_CPSW eq E_CPSW_YES > ;AN000; if code page switching required
546 .THEN ;AN000;
547 MERGE_STRING SC_LINE,MC_LINE,SC_CHCP,S_STR120_1;AN000;
548 WRITE_LINE SC_LINE ;AN000; write CHCP command
549 .ENDIF ;AN000;
550 ;
551 ;;;write 'PRINT /D:LPTx' or 'PRINT /D:COMx' ;AC066;SEH moved print stmt. NOTE: PRINT AND SHELL STMTS MUST BE LAST IN AUTOEXEC.BAT
552 .IF < I_WORKSPACE ne E_WORKSPACE_MIN > and near ;AC066;SEH ;AN011; SEH
553 .IF < I_DEST_DRIVE eq E_DEST_DRIVE_C > and near ;AC066;SEH ;AN015; JW If install to fixed disk
554 .IF < N_NUMPRINT gt 0 > near ;AC066;SEH ;AN011; SEH
555 .THEN ;AC066;SEH ;AN011; SEH
556 GET_PRINTER_PARAMS 1, 0, N_RETCODE ;AC066;SEH ;AN011; SEH get parameters for 1st printer selected
557 .IF < N_RETCODE ne 0 > near ;AC066;SEH ;AN011; SEH if valid return
558 .THEN ;AC066;SEH ;AN011; SEH
559 .IF < N_PRINTER_TYPE eq E_PARALLEL > ;AC066;SEH ;AN011; SEH LPT1, LPT2 or LPT3
560 .THEN ;AC066;SEH ;AN011; SEH
561 MERGE_STRING SC_LINE, MC_LINE, SC_PRINT_COM, SC_LPT;AC066;SEH ;AN011; SEH 'PRINT /D:LPT'
562 COPY_WORD N_WORD_1, I_PORT ;AC066;SEH ;AN011; SEH get LPT number (1-3)
563 .ELSE ;AC066;SEH ;AN011; SEH serial printer
564 .IF < I_REDIRECT gt 1 > ;AC066;SEH ;AN011; SEH check if redirected to LPT
565 .THEN ;AC066;SEH ;AN011; SEH
566 MERGE_STRING SC_LINE, MC_LINE, SC_PRINT_COM, SC_LPT ;AC066;SEH ;AN011; SEH 'PRINT /D:LPT'
567 COPY_WORD N_WORD_1, I_REDIRECT ;AC066;SEH ;AN011; SEH gives LPT printer redirected to ---
568 DEC N_WORD_1 ;AC066;SEH ;AN011; SEH but must subtract off value 'none' to get port#
569 .ELSE ;AC066;SEH ;AN011; SEH serial port that hasn't been redirected
570 MERGE_STRING SC_LINE, MC_LINE, SC_PRINT_COM, SC_COM ;AC066;SEH ;AN011; SEH 'PRINT /D:COM'
571 COPY_WORD N_WORD_1, I_PORT ;AC066;SEH ;AN011; SEH value of COM port
572 .ENDIF ;AC066;SEH ;AN011; SEH
573 .ENDIF ;AC066;SEH ;AN011; SEH
574 WORD_TO_CHAR N_WORD_1, S_STR120_3 ;AC066;SEH ;AN011; SEH
575 APPEND_STRING SC_LINE, MC_LINE, S_STR120_3 ;AC066;SEH ;AN011; SEH add on the com or lpt number to the string
576 WRITE_LINE SC_LINE ;AC066;SEH ;AN011; SEH write 'PRINT /D:LPTx' or 'PRINT /D:COMx' x=number
577 .ENDIF ;AC066;SEH ;AN011; SEH
578 .ENDIF ;AC066;SEH ;AN011; SEH
579 ;
580 ;;;write SHELL <parameter> ;
581 .IF < N_DEST eq E_DEST_SHELL > and ;AN000; if preparing for SHELL diskette
582 .IF < F_SHELL eq E_SHELL_YES > ;AN000; if SHELL support required
583 .THEN ;AN000;
584 WRITE_LINE SC_SHELLP ;AN000;
585 .ENDIF ;AN000;
586 ;
587 RET ;AN000;
588CREATE_AUTOEXEC_BAT ENDP ;AN000;
589;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
590;
591; Create CONFIG.SYS file
592;
593;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
594CREATE_CONFIG_SYS PROC ;AN000;
595 ;
596 ;;;install to B:, install path = null ;
597 ;;;install to root of C:, install path = c:\ ;
598 ;;;install to directory in C:, install path = c:\path\ ;
599 .IF < I_DEST_DRIVE eq E_DEST_DRIVE_B > ;AN000; if install to drive B:
600 .THEN ;AN000;
601 INIT_VAR S_DOS_PATH,0 ;AN000; set path = null
602 .ELSE ;AN000; else
603 COPY_STRING S_DOS_PATH,M_DOS_PATH,S_INSTALL_PATH;AN000;set path = user defined path
604 .IF < S_DOS_PATH gt M_DEST_DRIVE > ;AN000; if install is not under root of C:
605 .THEN ;AN000;
606 APPEND_STRING S_DOS_PATH,M_DOS_PATH,S_SLASH ;AN000; append back slash to path
607 .ENDIF ;AN000;
608 .ENDIF ;AN000;
609 ;
610 ;;;write BREAK=<parameter> ;
611 .IF < S_BREAK gt 0 > ;AN000; if field length > zero
612 .THEN ;AN000;
613 MERGE_STRING SC_LINE,MC_LINE,SC_BREAK,S_BREAK;AN000;
614 WRITE_LINE SC_LINE ;AN000; write BREAK command
615 .ENDIF ;AN000;
616 ;
617 ;;;write COUNTRY=<country>,,<path>\COUNTRY.SYS ;
618 .IF < N_COUNTRY eq 1 > ;AN000; if country is US (001)
619 .THEN ;AN000; no action
620 .ELSE ;AN000; else
621 WORD_TO_CHAR N_COUNTRY, S_STR120_1 ;AN000; S_STR120_1 = country in ASCII
622 MERGE_STRING SC_LINE,MC_LINE,SC_COUNTRY,S_STR120_1;AN000;
623 APPEND_STRING SC_LINE, MC_LINE, SC_COMMAS ;AN000;
624 APPEND_STRING SC_LINE, MC_LINE,S_DOS_PATH ;AN000;
625 APPEND_STRING SC_LINE, MC_LINE,SC_COUNTRY_SYS ;AN000;
626 WRITE_LINE SC_LINE ;AN000; write COUNTRY command
627 .ENDIF ;AN000;
628 ;
629 ;;;write BUFFERS=<parameter> ;
630 ;;;write BUFFERS=<parameter> /E if expanded memory support
631 .IF < S_BUFFERS gt 0 > ;AN000; if field lengh > zero
632 .THEN ;AN000;
633 MERGE_STRING SC_LINE,MC_LINE,SC_BUFFERS,S_BUFFERS;AN000;
634 .IF < N_XMA eq E_XMA_PRESENT > and ;AN000; if expanded memory present
635 .IF < F_XMA eq E_XMA_YES > ;AN000; and is to be used
636 .THEN ;AN000;
637 APPEND_STRING SC_LINE, MC_LINE, SC_SLASH_X ;AC046;SEH append /X to command (formerly /E)
638 .ENDIF ;AN000;
639 WRITE_LINE SC_LINE ;AN000; write BUFFERS command
640 .ENDIF ;AN000;
641 ;
642 ;;;write FCBS=<parameter> ;
643 .IF < S_FCBS gt 0 > ;AN000; if field length > zero
644 .THEN ;AN000;
645 MERGE_STRING SC_LINE,MC_LINE, SC_FCBS,S_FCBS ;AN000;
646 WRITE_LINE SC_LINE ;AN000; write FCBS command
647 .ENDIF ;AN000;
648 ;
649 ;;;write FILES=<parameter> ;
650 .IF < S_FILES gt 0 > ;AN000; if field length > zero
651 .THEN ;AN000;
652 MERGE_STRING SC_LINE,MC_LINE,SC_FILES,S_FILES;AN000;
653 WRITE_LINE SC_LINE ;AN000; write FILES command
654 .ENDIF ;AN000;
655 ;
656 ;;;write LASTDRIVE=<parameter> ;
657 .IF < S_LASTDRIVE gt 0 > ;AN000; if field length > zero
658 .THEN ;AN000;
659 MERGE_STRING SC_LINE,MC_LINE,SC_LASTDRIVE,S_LASTDRIVE;AN000;
660 WRITE_LINE SC_LINE ;AN000; write LASTDRIVE command
661 .ENDIF ;AN000;
662 ;
663 ;;;write STACKS=<parameter> ;
664 .IF < S_STACKS gt 0 > ;AN000; if field length > zero
665 .THEN ;AN000;
666 MERGE_STRING SC_LINE,MC_LINE,SC_STACKS,S_STACKS;AN000;
667 WRITE_LINE SC_LINE ;AN000; write STACKS command
668 .ENDIF ;AN000;
669 ;
670 ;;;write SHELL=<path>\COMMAND.COM /MSG /P /E:256 ;
671 .IF < I_DEST_DRIVE ne E_DEST_DRIVE_C > ;AN111; if install destination is drive B: or A: JW
672 MERGE_STRING SC_LINE,MC_LINE,SC_SHELL,S_DRIVE_A ;AN000;JW
673 APPEND_STRING SC_LINE,MC_LINE,SC_SHELL_1 ;AN037;SEH
674 APPEND_STRING SC_LINE,MC_LINE,SC_SHELL_2 ;AN037;SEH Only diskettes get /MSG in SHELL command
675 .ELSE ;AN000;JW
676 MERGE_STRING SC_LINE,MC_LINE,SC_SHELL,S_DOS_PATH ;AN000;JW
677 APPEND_STRING SC_LINE,MC_LINE,SC_SHELL_1 ;AC037;SEH
678 .ENDIF ;AN000;JW
679 APPEND_STRING SC_LINE, MC_LINE, SC_SHELL_3 ;AC037;SEH
680 WRITE_LINE SC_LINE ;AN000; write SHELL command
681 ;
682 ;;;init S_STR120_1 to DEVICE=<path>\ ;
683 MERGE_STRING S_STR120_1,M_STR120_1,SC_DEVICE,S_DOS_PATH;AN000;
684 ;
685 ;;;S_STR120_1 = DEVICE=<path>\ ;
686 ;;;write DEVICE=<path>\XMAEM.SYS<parameter> ;
687 ;;;write DEVICE=<path>\XMA2EMS.SYS<parameter> ;
688 .IF < N_XMA eq E_XMA_PRESENT > near and ;AC000; if expanded memory present JW
689 .IF < F_XMA eq E_XMA_YES > ;AN000; and support to be included
690 .THEN ;AN000;
691 .IF < N_MOD80 eq E_IS_MOD80 > ;AN000;JW
692 .THEN ;AN000;JW
693 MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_XMAEM_SYS;AN000;
694 APPEND_STRING SC_LINE, MC_LINE, S_XMAEM ;AN000;
695 WRITE_LINE SC_LINE ;AN000; write XMAEM command
696 .ENDIF ;AN000;JW
697 MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_XMA2EMS_SYS;AN000;
698 APPEND_STRING SC_LINE, MC_LINE, S_XMA2EMS ;AN000;
699 WRITE_LINE SC_LINE ;AN000; write XMA2EMS command
700 .ENDIF ;AN000;
701 ;
702 ;;;S_STR120_1 = DEVICE=<path>\ ;
703 ;;;write DEVICE=<path>\ANSI.SYS ;
704 ;;;write DEVICE=<path>\ANSI.SYS /X ,additional parameter based on workspace option
705 .IF < F_ANSI eq E_ANSI_YES > ;AN000; if ANSI support required
706 .THEN ;AN000;
707 MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_ANSI_SYS;AN000;
708 APPEND_STRING SC_LINE, MC_LINE, S_ANSI ;AN000;
709 WRITE_LINE SC_LINE ;AN000; write ANSI command
710 .ENDIF ;AN000;
711 ;
712 ;;;S_STR120_1 = DEVICE=<path>\ ;
713 ;;;write DEVICE=<path>\RAMDRIVE.SYS <parameter> ;
714 .IF < F_VDISK eq E_VDISK_YES > ;AN000; if VDISK support required
715 .THEN ;AN000;
716 MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_VDISK_SYS;AN000;
717 APPEND_STRING SC_LINE, MC_LINE, S_VDISK ;AN000;
718 WRITE_LINE SC_LINE ;AN000; write VDISK command
719 .ENDIF ;AN000;
720 ;
721 ;;;init S_STR120_2 to number of designates ;
722 WORD_TO_CHAR N_DESIGNATES, S_STR120_2 ;AN000; set S_STR120_2 = no. of designates
723 ;
724 ;;;S_STR120_1 = DEVICE=<path>\ ;
725 ;;;write DEVICE=<path>\DISPLAY.SYS CON=(<display>,437,<desig>)
726 .IF < F_CPSW eq E_CPSW_YES > near ;AN000; if code page switching required
727 .THEN ;AN000;
728 MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_DISPLAY_SYS;AN000;
729 .IF < ACTIVE eq EGA > or ;AN000; if EGA adaptor
730 .IF < ALTERNATE eq EGA > ;AN000;
731 .THEN ;AN000;
732 APPEND_STRING SC_LINE, MC_LINE, SD_DISPLAY_EGA;AN001;GHG set display to EGA
733 .ELSEIF < ACTIVE eq LCD > or ;AN000; if LCD adaptor
734 .IF < ALTERNATE eq LCD > ;AN000;
735 .THEN ;AN000;
736 APPEND_STRING SC_LINE, MC_LINE, SD_DISPLAY_LCD;AN001;GHG set display to LCD
737 .ENDIF ;AN000;
738 APPEND_STRING SC_LINE, MC_LINE, SC_437 ;AN000; append hardware code page
739 APPEND_STRING SC_LINE, MC_LINE, S_STR120_2 ;AN000; append no of designates
740 APPEND_STRING SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000;
741 WRITE_LINE SC_LINE ;AN000; write DISPLAY.SYS command
742 .ENDIF ;AN000;
743 ;
744 ;;;S_STR120_1 = DEVICE=<path>\ ;
745 ;;;S_STR120_2 = number of designates ;
746 ;;;write DEVICE=<path>\PRINTER.SYS LPT1=(<cdp parameters>,437,<desig>)
747 ;;; LPT2=(<cdp parameters>,437,<desig>)
748 ;;; LPT3=(<cdp parameters>,437,<desig>)
749 ;;;N_WORD_1 = parallel port number ;
750 ;;;N_WORD_2 set if driver is prepared ;
751 INIT_VAR N_WORD_1, 1 ;AN000; set port number = 1
752 INIT_VAR N_WORD_2, 0 ;AN000; set driver status = false
753 .IF < F_CPSW eq E_CPSW_YES > near ;AN000; if code page switching required
754 .THEN ;AN000;
755 MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_PRINTER_SYS;AN000;
756 .REPEAT ;AN000; repeat code block
757 GET_PRINTER_PARAMS 0, N_WORD_1, N_RETCODE ;AN000; get printer parameters
758 .IF < N_RETCODE eq 1 > and near ;AN000; if valid return
759 .IF < S_CP_DRIVER gt 0 > and near ;AN000; and driver and prepare
760 .IF < S_CP_PREPARE gt 0 > near ;AN000; parameters valid
761 .THEN ;AN000;
762 APPEND_STRING SC_LINE, MC_LINE, SC_LPT ;AN000; append LPT
763 WORD_TO_CHAR N_WORD_1, S_STR120_3 ;AN000;
764 APPEND_STRING SC_LINE, MC_LINE, S_STR120_3 ;AN000; append lpt number
765 APPEND_STRING SC_LINE, MC_LINE, SC_EQUAL_OPEN ;AN000; append =(
766 APPEND_STRING SC_LINE, MC_LINE, S_CP_DRIVER ;AN000; append driver parameters
767 APPEND_STRING SC_LINE, MC_LINE, SC_COMMA ;AN000; append comma
768 APPEND_STRING SC_LINE, MC_LINE, S_STR120_2 ;AN000; append no of designates
769 APPEND_STRING SC_LINE, MC_LINE, SC_CLOSE_BRAC ;AN000; append close bracket
770 INIT_VAR N_WORD_2, 1 ;AN000; set driver status = valid
771 .ENDIF ;AN000;
772 INC_VAR N_WORD_1 ;AN000; inc printer number
773 .UNTIL < N_WORD_1 gt 3 > near ;AN000; end of repeat block
774 .IF < N_WORD_2 eq 1 > ;AN000; if driver status is valid
775 .THEN ;AN000;
776 WRITE_LINE SC_LINE ;AN000; write PRINTER.SYS command
777 .ENDIF ;AN000;
778 .ENDIF ;AN000;
779 ;
780 ;;;init S_STR120_1 to INSTALL=<path>\ ;
781 MERGE_STRING S_STR120_1,M_STR120_1,SC_INSTALL,S_DOS_PATH ;AN000;
782 ;
783 ;;;write INSTALL=<path>\KEYB.COM US,,<path>\KEYBOARD.SYS
784 COMPARE_STRINGS S_KEYBOARD, S_US ;AN000;
785 .IF < c > and ;AN000; if keyboard not US (will be handled in autoexec)
786 .IF < N_KYBD_VAL eq E_KYBD_VAL_YES > near ;AN000; if keyboard is valid
787 .THEN ;AN000;
788 MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_KEYB_C ;AN000;
789 APPEND_STRING SC_LINE, MC_LINE, S_US ;AN000; append keyboard id = US
790 APPEND_STRING SC_LINE, MC_LINE, SC_COMMAS ;AN000; append comma
791 APPEND_STRING SC_LINE, MC_LINE,S_DOS_PATH ;AN000; append install path
792 APPEND_STRING SC_LINE,MC_LINE,SC_KEYBOARD_SYS ;AN000; append KEYBOARD.SYS
793 WRITE_LINE SC_LINE ;AN000; write KEYB command
794 .ENDIF ;AN000;
795 ;
796 ;;;S_STR120_1 = INSTALL=<path>\ ;
797 ;;;write INSTALL=<path>\SHARE <parameter> ;
798 .IF < F_SHARE eq E_SHARE_YES > ;AN000; if SHARE support required
799 .THEN ;AN000;
800 MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_SHARE;AN000;
801 APPEND_STRING SC_LINE, MC_LINE, S_SHARE ;AN000;
802 WRITE_LINE SC_LINE ;AN000; write SHARE command
803 .ENDIF ;AN000;
804 ;
805 ;;;S_STR120_1 = INSTALL=<path>\ ;
806 ;;;write INSTALL=<path>\FASTOPEN <parameter> ;
807 .IF < F_FASTOPEN eq E_FASTOPEN_YES > ;AN000; if FASTOPEN support required
808 .THEN ;AN000;
809 MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_FASTOPEN;AN000;
810 APPEND_STRING SC_LINE, MC_LINE, S_FASTOPEN ;AN000;
811 WRITE_LINE SC_LINE ;AN000; write FASTOPEN command
812 .ENDIF ;AN000;
813 ;
814 ;;;S_STR120_1 = INSTALL=<path>\ ;
815 ;;;write INSTALL=<path>\NLSFUNC <path>\COUNTRY.SYS ;
816 .IF < F_CPSW eq E_CPSW_YES > ;AN000; if code page switching support required
817 .THEN ;AN000;
818 MERGE_STRING SC_LINE,MC_LINE,S_STR120_1,SC_NLSFUNC;AN000;
819 APPEND_STRING SC_LINE,MC_LINE,S_DOS_PATH ;AN000;
820 APPEND_STRING SC_LINE, MC_LINE,SC_COUNTRY_SYS ;AN000;
821 WRITE_LINE SC_LINE ;AN000; write NLSFUNC command
822 .ENDIF ;AN000;
823 ;
824 RET ;AN000;
825CREATE_CONFIG_SYS ENDP ;AN000;
826;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
827;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
828;
829; Create DOSSHELL.BAT file
830;
831;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
832CREATE_SHELL_BAT PROC ;AN000;DT
833 ;AN000;DT
834 ;;;write SHELL <parameter> ;AN000;DT
835 .IF < I_DEST_DRIVE eq E_DEST_DRIVE_C > ;AN000; If install fixed disk ;AN111;JW
836 WRITE_LINE SC_DRIVE_C ;AN013;JW
837 COPY_STRING SC_LINE, MC_LINE, SC_CD ;AN000;
838 APPEND_STRING SC_LINE, MC_LINE, S_INSTALL_PATH ;AN000;
839 WRITE_LINE SC_LINE ;AN000; write CD path command
840 .ENDIF ;AN000;
841 ;
842 WRITE_LINE SC_SHELLC_1 ;AN000;DT
843 MERGE_STRING SC_LINE,MC_LINE,SC_AT_SIGN,SC_BREAK ;AN092;SEH break=off
844 APPEND_STRING SC_LINE,MC_LINE,S_OFF ;AN092;SEH
845 WRITE_LINE SC_LINE ;AN092;SEH
846 MERGE_STRING SC_LINE,MC_LINE,SC_SHELLC,S_SHELL ;AN000;DT
847 WRITE_LINE SC_LINE ;AN000;DT write SHELL command
848 WRITE_LINE SC_SHELLC_2 ;AN000;DT
849 ;
850 ;;;restore BREAK=<parameter> ;
851 .IF < S_BREAK gt 0 > ;AN000;JW if field length > zero
852 MERGE_STRING SC_LINE,MC_LINE,SC_AT_SIGN,SC_BREAK ;AN000;JW
853 APPEND_STRING SC_LINE,MC_LINE,S_BREAK ;AN000;JW
854 WRITE_LINE SC_LINE ;AN000;JW write BREAK command
855 .ENDIF ;AN000;JW
856 ;
857 ;
858 RET ;AN000;DT
859CREATE_SHELL_BAT ENDP ;AN000;DT
860;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
861
862SELECT ENDS ;AN000;
863 END ;AN000;
864 \ 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 @@
1PAGE 55,132 ;AN000;
2NAME SELECT ;AN000;
3TITLE SELECT - GET_HELP_ID ;AN000;
4SUBTTL Get_Help.asm ;AN000;
5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6;
7; GET_HELP_ID
8;
9; Entry:
10;
11;
12;
13; Exit:
14;
15;
16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
17SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine
18 ASSUME CS:SELECT ;AN000;
19 ;
20 ;
21INP_HELP_ID DW 12,10,10 ;AN000; help_id 1, row', col' STR_DOS_LOC
22 DW 19,12,15 ;AN000; help_id 2, row', col' STR_EXT_PARMS
23 DW 31,11,20 ;AN000; help_id 3, row', col' STR_DOS_PATH
24 DW 32,11,20 ;AN000; help_id 4, row', col' STR_DOS_APPEND
25 DW 33,11,20 ;AN000; help_id 5, row', col' STR_DOS_PROMPT
26 DW 34,12,20 ;AN000; help_id 6, row', col' STR_SHELL
27 DW 35,12,20 ;AN000; help_id 7, row', col' STR_KSAM
28 DW 35,12,20 ;AN000; help_id 8, row', col' STR_FASTOPEN
29 DW 36,12,20 ;AN000; help_id 9, row', col' STR_SHARE
30 DW 37,12,20 ;AN000; help_id 10, row', col' STR_GRAPHICS
31 DW 38,12,20 ;AN000; help_id 11, row', col' STR_XMAEM
32 DW 39,12,20 ;AN000; help_id 12, row', col' STR_XMA2EMS
33 DW 40,13,20 ;AN000; help_id 13, row', col' STR_VDISK
34 DW 41,12,20 ;AN000; help_id 14, row', col' STR_BREAK
35 DW 42,12,20 ;AN000; help_id 15, row', col' STR_BUFFERS
36 DW 43,11,20 ;AC000; help_id 16, row', col' STR_DOS_APPEND_P JW
37 DW 44, 2,20 ;AN000; help_id 17, row', col' STR_FCBS
38 DW 45, 2,20 ;AN000; help_id 18, row', col' STR_FILES
39 DW 46, 2,20 ;AN000; help_id 19, row', col' STR_LASTDRIVE
40 DW 47, 2,20 ;AN000; help_id 20, row', col' STR_STACKS
41 DW 48, 2,20 ;AN000; help_id 21, row', col' STR_VERIFY
42 DW 13,10,10 ;AN000; help_id 22, row', col' NUM_PRINTER
43 DW 18,10,20 ;AN000; help_id 23, row', col' NUM_EXT_DISK
44 DW 53,12,20 ;AN000; help_id 24, row', col' NUM_YEAR
45 DW 53,12,20 ;AN000; help_id 25, row', col' NUM_MONTH
46 DW 53,12,20 ;AN000; help_id 26, row', col' NUM_DAY
47 DW 53,12,20 ;AN000; help_id 27, row', col' NUM_HOUR
48 DW 53,12,20 ;AN000; help_id 28, row', col' NUM_MINUTE
49 DW 53,11,20 ;AN000; help_id 29, row', col' NUM_SECOND
50INP_HELP_ID_LEN EQU ($-INP_HELP_ID)/6 ;AN000;
51INP_HELP_ID_ELE EQU 3 ;AN000;
52 ;
53SCR_HELP_ID DW 3 ;AN000; scr_id1
54 DW 3,12,20 ;AN000; help_id1,row1',col1'
55 DW 4, 1,20 ;AN000;
56 DW 5, 3,20 ;AN000;
57 DW 2 ;AN000; scr_id2
58 DW 6, 1,20 ;AN000;
59 DW 7, 3,20 ;AN000;
60 DW 1 ;AN000;
61 DW 8, 3,20 ;AN000; SCR_CTY_1
62 DW 1 ;AN000;
63 DW 8, 3,20 ;AN000; SCR_CTY_2
64 DW 1 ;AN000;
65 DW 9,10,20 ;AN000; SCR_KYB_1
66 DW 1 ;AN000;
67 DW 9,10,20 ;AN000; SCR_KYB_2
68 DW 1 ;AN000;
69 DW 10,10,23 ;AN000; SCR_FR_KYB
70 DW 1 ;AN000;
71 DW 10,10,23 ;AN000; SCR_IT_KYB
72 DW 1 ;AN000;
73 DW 10,10,23 ;AN000; SCR_UK_KYB
74 DW 1 ;AN000;
75 DW 11,10,20 ;AN111; SCR_DEST_B_C JW
76 DW 1 ;AN000;
77 DW 14, 1,25 ;AN000; SCR_PRT_TYPE
78 DW 1 ;AN000;
79 DW 15, 9,20 ;AN000; SCR_PARALLEL
80 DW 1 ;AN000;
81 DW 16,10,20 ;AN000; SCR_SERIAL
82 DW 1 ;AN000;
83 DW 17, 8,20 ;AN000; SCR_PRT_REDIR
84 DW 2 ;AN000;
85 DW 20, 6,20 ;AN000; SCR_REVIEW
86 DW 21, 6,20 ;AN000; SCR_REVIEW
87 DW 9 ;AN000;
88 DW 22,10,11 ;AN000;
89 DW 23,11,11 ;AN000;
90 DW 24,12,11 ;AN000;
91 DW 25, 1,11 ;AN000;
92 DW 26, 2,11 ;AN000;
93 DW 27, 3,11 ;AN000;
94 DW 28, 4,11 ;AN000;
95 DW 29, 5,11 ;AN000;
96 DW 30, 6,11 ;AN000;
97 DW 6 ;AN000;
98 DW 22,10,11 ;AN000;
99 DW 24,11,11 ;AN000;
100 DW 26,12,11 ;AN000;
101 DW 27, 1,11 ;AN000;
102 DW 29, 2,11 ;AN000;
103 DW 30, 3,11 ;AN000; SCR_FUNC_DISKET
104 DW 2 ;AN000;
105 DW 49, 1,11 ;AN000;
106 DW 50, 1,11 ;AN000; SCR_FIXED_FIRST
107 DW 2 ;AN000;
108 DW 51, 1,11 ;AN000;
109 DW 52, 1,11 ;AN000; SCR_FIXED_BOTH
110 DW 2 ;AN000;
111 DW 54, 1,11 ;AN000;
112 DW 55, 1,11 ;AN000; SCR_FORMAT
113 DW 0 ;AN000; SCR_CONTEXT_HLP
114 DW 0 ;AN000; SCR_INDEX_HLP
115 DW 0 ;AN000; SCR_TITLE_HLP
116 DW 0 ;AN000;
117 DW 0 ;AN000;
118 DW 2 ;AN000; SCR_COPY_DEST JW
119 DW 18,10,10 ;AC035; SEH new help text
120 DW 19,10,10 ;AC035; SEH new help text
121 DW 1 ;AN000;
122 DW 11,10,20 ;AN111; SCR_DEST_A_C JW
123 DW 2 ;AN000;
124 DW 56, 6,20 ;AN000; SCR_choose_screen
125 DW 57, 6,20 ;AN000; SCR_choose_screen
126SCR_HELP_ID_LEN EQU 28 ;AN000;
127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
128;
129;
130; GET_HELP_ID
131;
132; Entry:
133; AX = 1 for input field help_id's
134; BX = field_id
135; AX = 2 for scroll help_id's
136; BX = scroll_id
137; CX = index
138;
139; Exit:
140; AX = help_id
141; DH = row'
142; DL = col'
143;
144;
145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
146THREE DW 3 ;AN000;
147 ;
148 PUBLIC GET_HELP_ID ;AN000;
149GET_HELP_ID PROC ;AN000;
150 CMP AX,1 ;AN000;
151 JNE GH_8 ;AN000;
152 ;
153 CMP AX,INP_HELP_ID_LEN ;AN000;
154 JA GH_8 ;AN000;
155 ;
156 PUSH BX ;AN000;
157 PUSH CX ;AN000;
158 MOV AX,BX ;AN000;
159 DEC AX ;AN000;
160 MOV BX,INP_HELP_ID_ELE*2 ;AN000;
161 MUL BX ;AN000;
162 MOV BX,AX ;AN000;
163 MOV AX,CS:[BX].INP_HELP_ID ;AN000;
164 MOV CX,CS:[BX+2].INP_HELP_ID;AN000;
165 MOV DX,CS:[BX+4].INP_HELP_ID;AN000;
166 XCHG CH,CL ;AN000;
167 MOV DH,CH ;AN000;
168 POP CX ;AN000;
169 POP BX ;AN000;
170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
171;
172; AX = 2 for scroll help_id's
173; BX = scroll_id
174; CX = index
175;
176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
177GH_8: CMP AX,2 ;AN000;
178 JNE GH_20 ;AN000;
179 ;
180 CMP BX,SCR_HELP_ID_LEN ;AN000;
181 JA GH_20 ;AN000;
182 ;
183 OR CX,CX ;AN000;
184 JE GH_20 ;AN000;
185 ;
186 PUSH CX ;AN000; search for matching scroll_id
187 PUSH SI ;AN000;
188 MOV DX,1 ;AN000;
189 XOR SI,SI ;AN000;
190 ;
191GH_9: CMP DX,BX ;AN000;
192 JE GH_10 ;AN000;
193 MOV AX,CS:[SI]+SCR_HELP_ID ;AN000; get number of help screens
194 PUSH DX ;AN000;
195 MUL THREE ;AN000;
196 POP DX ;AN000;
197 ADD AX,1 ;AN000; +additional entries (row',col',count)
198 SHL AX,1 ;AN000; account for WORD entries
199 ADD SI,AX ;AN000;
200 INC DX ;AN000;
201 CMP DX,SCR_HELP_ID_LEN ;AN000;
202 JBE GH_9 ;AC000; JW Changed to JBE
203 JMP GH_15 ;AN000;
204 ;
205GH_10: CMP CX,CS:[SI]+SCR_HELP_ID ;AN000; check for index out of range?
206 JBE GH_11 ;AN000; then
207 MOV CX,1 ;AN000; set to first help_id....
208 ;
209GH_11: MOV AX,CX ;AN000; scroll_id found!!!!
210 DEC AX ;AN000;
211 MUL THREE ;AN000;
212 INC AX ;AN000;
213 SHL AX,1 ;AN000;
214 ADD SI,AX ;AN000;
215 MOV AX,CS:[SI]+SCR_HELP_ID ;AN000;
216 MOV CX,CS:[SI+2].SCR_HELP_ID;AN000;
217 MOV DX,CS:[SI+4].SCR_HELP_ID;AN000;
218 XCHG CH,CL ;AN000;
219 MOV DH,CH ;AN000;
220GH_15: POP SI ;AN000;
221 POP CX ;AN000;
222GH_20: ;AN000;
223 RET ;AN000;
224GET_HELP_ID ENDP ;AN000;
225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
226;
227;
228;
229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
230SELECT ENDS ;AN000;
231 END GET_HELP_ID ;AN000;
232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
233
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 @@
1 /************************************************************/
2 /* */
3 /* Header: GET_STATUS */
4 /* Purpose: To transfer information provided by FDISK */
5 /* to the DOS SELECT utility. The information */
6 /* provided will determine the status of the */
7 /* specified fixed disk. The information is */
8 /* is pertinent to determine the parameters */
9 /* displayed and utilized in SELECT panels */
10 /* that will assume default values according */
11 /* to option the user selected without viewing */
12 /* or modifying FDISK. */
13 /* */
14 /* The status info will be returned in the control */
15 /* block defined below: */
16 /* */
17 /* DISK_STATUS STRUC */
18 /* N_PART_NAME DB 0 ;partition name */
19 /* N_PART_SIZE DW 0 ;size of the above */
20 /* ;partition in (Mbytes)*/
21 /* N_PART_STATUS DB 0 ;Partition status */
22 /* P_PART_DRIVE DB ? ;drive letter assigned*/
23 /* ;to the partition */
24 /* DISK_STATUS ENDS ;(ASCII value) */
25 /* */
26 /*************************************************************/
27
28 /*************************************************************/
29 /* First check to make the ax is specified correctly to make */
30 /* the call to Get_STATUS; The value in AX should be 01 */
31 /* IF compare is true then proceed with migration */
32 /* ELSE */
33 /* set AX to to one and report error wrong call value */
34 /* ENDIF */
35 /* */
36 /* */
37 /*************************************************************/
38/*****************************************************************************/
39
40#include "stdio.h"
41#include "stdlib.h"
42#include "string.h"
43#include "dos.h"
44#include "get_stat.h"
45#include "extern.h"
46
47
48void get_status(union REGS *, union REGS *, struct SREGS *);
49void valid_stat(struct DISK_STATUS far *, union REGS *);
50void init_partition_tables(void);
51char read_boot_record(unsigned,unsigned char,unsigned char,unsigned char); /* AC000 */
52char get_drive_parameters(unsigned char);
53void sort_part_table(char);
54void sort_ext_table(char);
55unsigned find_part_free_space(void);
56unsigned find_ext_free_space(void);
57void load_logical_drive(char, unsigned char);
58char find_logical_drive(void);
59unsigned cylinders_to_mbytes(unsigned,unsigned char,unsigned char); /* AN000 */
60char find_partition_location(unsigned char);
61char find_free_partition(void);
62char find_partition_type(unsigned char);
63char get_disk_info(void);
64unsigned copy_fdisk2select(unsigned, DSE far * );
65char get_num_logical_dos_drives(void);
66unsigned get_partition_size(unsigned char);
67
68void DiskIo(union REGS *,union REGS *, struct SREGS *);
69unsigned char find_partition_system_type(void);
70
71#define DptrOf(ti) ( Dptr + (sizeof(DSE) * (ti)) )
72
73void get_status(RinPtr, RoutPtr, SrPtr)
74 union REGS *RinPtr;
75 union REGS *RoutPtr;
76 struct SREGS *SrPtr;
77
78BEGIN
79 DSE (far * Dptr);
80
81 /* ------------- drive = regs.x.ax; */
82 /* Make drive zero based */
83 /* ------------- drive--; */
84
85 FP_SEG(Dptr) = SrPtr->es;
86 FP_OFF(Dptr) = RinPtr->x.di;
87
88 RoutPtr->x.bx = 0;
89 RoutPtr->x.cx = 0;
90
91 switch(RinPtr->x.ax) /* Check the value in AX */
92 BEGIN
93
94 case uc(FST_DRV): /* Is it a query for the first drive? */
95 case uc(SEC_DRV): /* Is it a query for the 2nd drive? */
96 cur_disk = c(RinPtr ->x.ax - 1);
97 RoutPtr->x.ax = 0;
98 valid_stat(Dptr,RoutPtr); /* yes than go execute */
99 break;
100
101 default: /* otherwise - set AX to one & exit */
102 RoutPtr->x.ax = 1;
103 break;
104 END
105
106 return;
107
108END
109
110/*****************************************************************************/
111/******************* START OF SPECIFICATIONS *******************/
112/* */
113/* SUBROUTINE NAME: VALID_STAT */
114/* */
115/* DESCRIPTIVE NAME: */
116/* */
117/* FUNCTION: */
118/* ENTRY: */
119/* */
120/* MOV AX,?? ; AX = 1 first fixed drive */
121/* */
122/* ; = 2 second fixed drive */
123/* ; ES:DI - points to parameter block */
124/* ; */
125/* CALL GET_DISK_STATUS ; call to subroutine */
126/* ; */
127/* ; EXIT: */
128/* ; AX = 1 drive is not valid */
129/* ; = 0 drive is valid */
130/* ; CX = number of items in parameter block */
131/* ; BX = status of fixed drive */
132/* ; as defined below - */
133/* ; more than 1 bit can be set */
134/* ; ES:DI is filled with data */
135/* */
136/* EXIT-NORMAL: ERROR=FALSE */
137/* */
138/* EXIT-ERROR: ERROR=TRUE */
139/* GOTO internal_program_error if invalid num */
140/* input is returned to this level */
141/* */
142/* EFFECTS: */
143/* */
144/* */
145/* */
146/* INTERNAL REFERENCES: */
147/* ROUTINES: */
148/* */
149/* */
150/* EXTERNAL REFERENCES: */
151/* ROUTINES: */
152/* */
153/******************** END OF SPECIFICATIONS ********************/
154
155void valid_stat(Dptr,RoutPtr)
156 DSE (far * Dptr);
157 union REGS *RoutPtr;
158
159BEGIN
160
161unsigned table_count;
162char i;
163unsigned m;
164unsigned temp;
165
166/**********************************replacement***********************************************/
167/* Initialize the tables that will be used to store the data needed for */
168/* SELECT. The disk_status tables will be initialized to 0 for all */
169/* values except the logical drive value, if exist in an extended partition */
170/* other wise the field will remain undefined. This must be done for both */
171/* tables although it has not been established that two physical drives exist */
172/* at this point. Additional tables needed are the tables 1) To store the */
173/* amount of free space between each partition 2) the amount of free space */
174/* between each logical drive (the tables are declared to integer */
175/********************************************************************************************/
176
177
178 /* Init variables */
179 RoutPtr->x.bx = 0;
180 RoutPtr->x.cx = 0;
181 table_count = 0;
182
183 /* Read drives to get disk information on size, etc..... */
184 /* good_disk[] = FALSE if can't read disk */
185 good_disk[0] = TRUE;
186 good_disk[1] = TRUE;
187 if (!get_disk_info())
188 BEGIN
189 good_disk[0] = FALSE;
190 good_disk[1] = FALSE;
191 END
192
193 /* See if we could read the selected drive */
194 if ( !good_disk[cur_disk] )
195 RoutPtr->x.ax = 1; /* indicate disk read failed */
196 else
197 BEGIN
198 init_partition_tables();
199
200 /* Is there a primary ? */
201
202 if (find_partition_system_type() != uc(NOT_FOUND))
203 BEGIN
204 RoutPtr->x.bx |= E_DISK_PRI;
205 (Dptr+table_count) -> n_part_name = E_PART_PRI_DOS;
206 (Dptr+table_count) -> n_part_size = get_partition_size(find_partition_system_type());
207
208 for (i = c(0); i < c(4);i++) /* AC000 */
209 if ( (part_table[cur_disk][i].sys_id == DOS12) ||
210 (part_table[cur_disk][i].sys_id == DOS16) ||
211 (part_table[cur_disk][i].sys_id == DOSNEW) )
212 break;
213
214 (Dptr+table_count) -> n_part_status = E_PART_UNFORMAT;
215 if (part_table[cur_disk][i].formatted)
216 (Dptr+table_count) -> n_part_status = E_PART_FORMAT;
217 (Dptr+table_count) -> p_part_drive = part_table[cur_disk][i].drive_letter;
218 for (m=u(0);m < u(4); m++)
219 (Dptr+table_count) -> n_part_level[m] = part_table[cur_disk][i].system_level[m];
220
221
222 table_count++;
223 END
224
225 /* if there an extended? */
226
227 if (find_partition_type(EXTENDED))
228 BEGIN
229 /* Found one, now fill in entry with vital stats */
230 RoutPtr->x.bx |= E_DISK_EXT_DOS;
231 (Dptr+table_count) ->n_part_name = E_PART_EXT_DOS;
232 (Dptr+table_count) ->n_part_size = get_partition_size(EXTENDED);
233 (Dptr+table_count) -> n_part_status = E_PART_UNFORMAT;
234 (Dptr+table_count) -> p_part_drive = next_letter;
235 for (m=u(0);m < u(4); m++)
236 (Dptr+table_count) -> n_part_level[m] = NUL;
237 table_count++;
238 END
239
240 /* Are there any logical drives */
241
242 if ( (find_partition_type(EXTENDED)) && (find_logical_drive()) )
243 RoutPtr->x.bx |= E_DISK_LOG_DRI;
244
245 /* Is there free extended partition space, and are there free entries?*/
246
247 if ( (temp = find_ext_free_space()) != u(0))
248 BEGIN
249 /* Indicate we have room in the extended, and build entry to show how much */
250 RoutPtr->x.bx |= E_DISK_EDOS_MEM;
251 (Dptr+table_count) ->n_part_name = uc(E_FREE_MEM_EDOS);
252 (Dptr+table_count) ->n_part_size = temp;
253 (Dptr+table_count) -> n_part_status = E_PART_UNFORMAT;
254 (Dptr+table_count) -> p_part_drive = c(' ');
255 for (m=u(0);m < u(4); m++)
256 (Dptr+table_count) -> n_part_level[m] = NUL;
257 table_count++;
258 END
259
260 /* Is there any free space in master boot record partitions, and free partitions? */
261
262 if ( (temp = find_part_free_space()) != u(0))
263 BEGIN
264 /* Indicate we have free space in the MBR partition tables */
265 RoutPtr->x.ax = 0;
266 RoutPtr->x.bx |= E_DISK_FREE_MEM;
267 (Dptr+table_count) ->n_part_name = uc(E_FREE_MEM_DISK);
268 (Dptr+table_count) ->n_part_size = temp;
269 for (m=u(0);m < u(4); m++)
270 (Dptr+table_count) -> n_part_level[m] = NUL;
271 table_count++;
272 END
273
274 /* If there is a logical drive get the drive letters and the associated */
275 /* size, and for the logical drive */
276
277 /* First check again to see if their is an extended partition */
278 /* and see if there exist any logical drives --- sort the logical */
279 /* drives and and get the drive and stuffit ine the table */
280
281 /********************************CNS******************************************/
282 if ( (find_partition_type(EXTENDED)) && (find_logical_drive()) )
283 table_count += copy_fdisk2select(table_count,Dptr); /* go fill the tables */
284 /*****************************************************************************/
285 /* Now we should get the number of items that will be returned to select */
286 /* and stuff it in CX */
287 /******************************************************************************/
288 RoutPtr->x.cx = table_count; /* number of items */
289 regs.x.ax = u(0);
290
291 END
292
293 return;
294
295END
296
297void init_partition_tables()
298BEGIN
299
300unsigned i;
301unsigned char j;
302unsigned k;
303unsigned l;
304unsigned m;
305unsigned n;
306unsigned partition_location;
307char temp;
308char more_drives_exist;
309char num_logical_drives;
310unsigned insert;
311unsigned index;
312char save_disk;
313
314 save_disk = cur_disk;
315
316 /* initialize first drive found to "C" */
317 next_letter = c('C'); /* AC000 */
318
319 /* Look at both disks */
320 for (j = uc(0); j < number_of_drives; j++) /* AC000 */
321 BEGIN
322
323 /* Initialize the cur_disk field to the drive in question so */
324 /* that the calls to the partition information routines will work */
325 cur_disk = ((char)(j));
326
327 /* Read in the master boot record and see if it was okay */
328 if (read_boot_record(u(0),j,uc(0),uc(1))) /* AC000 */
329 BEGIN
330
331 /* See if there was a valid boot record there */
332 if ((boot_record[510] == uc(0x55)) && (boot_record[511] == uc(0xAA))) /* AC000 */
333 BEGIN
334
335 /* What was on the disk is a valid boot record, so save it */
336 for (i=u(0);i < u(BYTES_PER_SECTOR); i++) /* AC000 */
337 BEGIN
338 master_boot_record[j][i] = boot_record[i];
339 END
340 END
341 /* We've now got a copy of the master boot record saved. Now we need */
342 /* to translate what in the boot record to the area that it's going
343 /* to be worked on (part_table) */
344
345 /* Read in the data from the master boot record partition entries*/
346 for (i=u(0); i < u(4); i++) /* AC000 */
347 BEGIN
348 index = i*16;
349
350 /* Get boot ind */
351 part_table[j][i].boot_ind = master_boot_record[j][0x1BE+index];
352
353 /* Start head */
354 part_table[j][i].start_head = master_boot_record[j][0x1BF+index];
355
356 /* Start sector - unscramble it from INT 13 format*/
357 part_table[j][i].start_sector= (master_boot_record[j][0x1C0+index] & 0x3F);
358
359 /* Start cyl - unscramble it from INT 13 format*/
360 part_table[j][i].start_cyl= ((((unsigned)master_boot_record[j][0x1C0+index]) & 0x00C0) << 2)
361 + ((unsigned)master_boot_record[j][0x1C1+index]);
362
363 /* System id */
364 part_table[j][i].sys_id = master_boot_record[j][0x1C2+index];
365
366 /* End head */
367 part_table[j][i].end_head = master_boot_record[j][0x1C3+index];
368
369 /* End sector - unscramble it from INT 13 format*/
370 part_table[j][i].end_sector= (master_boot_record[j][0x1C4+index] & 0x3F);
371
372 /* End cyl - unscramble it from INT 13 format*/
373 part_table[j][i].end_cyl= ((((unsigned)master_boot_record[j][0x1C4+index]) & 0x00C0) << 2)
374 + ((unsigned)master_boot_record[j][0x1C5+index]);
375
376 /* Relative sectors */
377
378 part_table[j][i].rel_sec =
379 ((unsigned long)master_boot_record[j][0x1C9+index]) << 24;
380
381 part_table[j][i].rel_sec = part_table[j][i].rel_sec +
382 (((unsigned long)master_boot_record[j][0x1C8+index]) << 16);
383
384 part_table[j][i].rel_sec = part_table[j][i].rel_sec +
385 (((unsigned long)master_boot_record[j][0x1C7+index]) << 8);
386
387 part_table[j][i].rel_sec = part_table[j][i].rel_sec +
388 ((unsigned long)master_boot_record[j][0x1C6+index]);
389
390 /* Number of sectors */
391 part_table[j][i].num_sec =
392 ((unsigned long)master_boot_record[j][0x1CD+index]) << 24;
393
394 part_table[j][i].num_sec = part_table[j][i].num_sec +
395 (((unsigned long)master_boot_record[j][0x1CC+index]) << 16);
396
397 part_table[j][i].num_sec = part_table[j][i].num_sec +
398 (((unsigned long)master_boot_record[j][0x1CB+index]) << 8);
399
400 part_table[j][i].num_sec = part_table[j][i].num_sec +
401 ((unsigned long)master_boot_record[j][0x1CA+index]);
402
403 part_table[j][i].mbytes_used =
404 cylinders_to_mbytes(((part_table[j][i].end_cyl-part_table[j][i].start_cyl)+1),
405 max_sector[cur_disk], max_head[cur_disk]); /* AN000 */
406
407 /* Set drive letter */
408 if ( (part_table[j][i].sys_id == DOS12) || /* AN000 */
409 (part_table[j][i].sys_id == DOS16) || /* AN000 */
410 (part_table[j][i].sys_id == DOSNEW) ) /* AN000 */
411 part_table[j][i].drive_letter = next_letter++; /* AN000 */
412
413 /* Clean out the boot_record */
414 for (m=u(0);m < u(BYTES_PER_SECTOR); m++) /* AC000 */
415 BEGIN
416 boot_record[m] = uc(0); /* AC000 */
417 END
418
419 part_table[j][i].formatted = FALSE;
420 for (m=u(0);m < u(4); m++)
421 part_table[j][i].system_level[m] = NUL;
422 if (read_boot_record(part_table[j][i].start_cyl, /* AN000 */
423 j,
424 part_table[j][i].start_head,
425 part_table[j][i].start_sector))
426 BEGIN /* AN000 */
427 /* See if the disk has already been formated */
428 if ((boot_record[510] == uc(0x55)) && (boot_record[511] == uc(0xAA))) /* AN000 */
429 BEGIN
430 part_table[j][i].formatted = TRUE; /* AN000 */
431 for (m=u(0);m < u(4); m++)
432 BEGIN
433 n = (m + u(7));
434 part_table[j][i].system_level[m] = boot_record[n];
435 END
436 END
437 read_boot_record(part_table[j][i].start_cyl,j,uc(0),uc(1));
438 END
439 END
440 END
441 else
442 BEGIN
443 cur_disk = save_disk;
444 return;
445 END
446 END
447
448 /* Look at both disks */
449 for (j = uc(0); j < number_of_drives; j++) /* AC000 */
450 BEGIN
451
452 /* Initialize the cur_disk field to the drive in question so */
453 /* that the calls to the partition information routines will work */
454 cur_disk = ((char)(j));
455 BEGIN
456 /* Read in the master boot record and see if it was okay */
457 if (read_boot_record(u(0),j,uc(0),uc(1))) /* AC000 */
458 /* Now, go read in extended partition info */
459 BEGIN
460 if (find_partition_type(uc(EXTENDED))) /* AC000 */
461 BEGIN
462 /* Initialize the array to zero's - include one dummy entry */
463 for (i=u(0); i < u(24); i++) /* AC000 */
464 BEGIN
465 ext_table[j][i].boot_ind = uc(0); /* AC000 */
466 ext_table[j][i].start_head = uc(0); /* AC000 */
467 ext_table[j][i].start_sector = uc(0); /* AC000 */
468 ext_table[j][i].start_cyl = u(0); /* AC000 */
469 ext_table[j][i].sys_id = uc(0); /* AC000 */
470 ext_table[j][i].end_head = uc(0); /* AC000 */
471 ext_table[j][i].end_sector = uc(0); /* AC000 */
472 ext_table[j][i].end_cyl = u(0); /* AC000 */
473 ext_table[j][i].rel_sec = ul(0); /* AC000 */
474 ext_table[j][i].num_sec = ul(0); /* AC000 */
475 ext_table[j][i].mbytes_used = f(0); /* AN000 */
476 ext_table[j][i].drive_letter = NUL; /* AN000 */
477
478 for (m=u(0);m < u(4); m++)
479 ext_table[j][i].system_level[m] = NUL; /* AN000 */
480
481 END
482
483 /* Find where the first extended boot record is */
484 temp = find_partition_location(uc(EXTENDED)); /* AC000 */
485 partition_location = part_table[j][temp].start_cyl;
486
487 /* Go find extended boot records as long as there are more of them */
488 more_drives_exist = TRUE;
489
490 /* Init the number of logical drives, for a array index */
491 num_logical_drives = c(0); /* AC000 */
492
493 while (more_drives_exist)
494 BEGIN
495 /* Assume we won't find another logical drive */
496 more_drives_exist = FALSE;
497
498 /*Read in the extended boot record */
499 if (read_boot_record(partition_location,j,uc(0),uc(1))) /* AC000 */
500 BEGIN
501 load_logical_drive(num_logical_drives,j);
502
503
504 /* find the next logical drive */
505 for (i = u(0); i < u(4); i++) /* AC000 */
506 BEGIN
507 index = i*16;
508 /* See if a sys id byte of exteneded exists */
509 if (boot_record[0x1C2+index] == uc(EXTENDED)) /* AC000 */
510 BEGIN
511 /* Found another drive, now get its location */
512 partition_location= (((((unsigned)(boot_record[0x1C0 + index])) & 0x00C0) << 2));
513 partition_location = partition_location + ((unsigned)(boot_record[0x1C1+index]));
514
515 /* Indicate we found another one */
516 more_drives_exist = TRUE;
517
518 /* Up the count of found ones */
519 num_logical_drives++;
520 break;
521 END
522 END
523 END
524 END
525 END
526 END
527 END
528 END
529 cur_disk = save_disk;
530 return;
531END
532
533
534/* */
535unsigned find_part_free_space()
536
537BEGIN
538
539
540char i;
541char partition_count;
542char last_found_partition;
543unsigned temp;
544char freespace_count;
545char any_partition;
546unsigned temp_size;
547
548 /* Sort the partition table */
549 sort_part_table(c(4)); /* AC000 */
550
551
552 /* Intialize free space to zero */
553 for (i = c(0); i < c(24); i++) /* AC000 */
554 BEGIN
555 free_space[i].space = u(0); /* AC000 */
556 free_space[i].start = u(0); /* AC000 */
557 free_space[i].end = u(0); /* AC000 */
558 free_space[i].mbytes_unused = u(0); /* AC000 */ /* AN000 */
559 END
560
561 /* Find space between start of disk and first partition */
562 partition_count = c(0); /* AC000 */
563
564 any_partition = FALSE;
565 for (i = c(0); i < c(4); i++) /* AC000 */
566 BEGIN
567 if (part_table[cur_disk][sort[i]].sys_id != uc(0)) /* AC000 */
568 BEGIN
569 /* Found a partition, get the space */
570
571 free_space[0].start = u(0); /* AC000 */
572
573 /* free space ends before start of next valid partition */
574 if (part_table[cur_disk][sort[i]].start_cyl > u(0)) /* AC000 */
575 free_space[0].end = part_table[cur_disk][sort[i]].start_cyl-1;
576
577 free_space[0].space = part_table[cur_disk][sort[i]].start_cyl;
578 free_space[0].mbytes_unused =
579 cylinders_to_mbytes(free_space[0].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */
580
581 partition_count = i;
582 last_found_partition = sort[i];
583 any_partition = TRUE;
584 break;
585 END
586 END
587 /* See if any partitions were there */
588 if (any_partition)
589 BEGIN
590 /* Look for space between the rest of the partitions */
591 freespace_count = c(1); /* AC000 */
592 for (i = partition_count+1; i < c(4); i++) /* AC000 */
593 BEGIN
594 if (part_table[cur_disk][sort[i]].sys_id != uc(0)) /* AC000 */
595 BEGIN
596
597 /* Check to see if more than one partition on a cylinder (i.e. XENIX bad block) */
598 /* If so, leave the space at zero */
599
600 if (part_table[cur_disk][sort[i]].start_cyl != part_table[cur_disk][last_found_partition].end_cyl)
601
602 BEGIN
603 /* No, things are normal */
604 /* Get space between the end of the last one and the start of the next one */
605 free_space[freespace_count].space = part_table[cur_disk][sort[i]].start_cyl
606 - (part_table[cur_disk][last_found_partition].end_cyl+1);
607
608 temp_size = (part_table[cur_disk][sort[i]].start_cyl -
609 part_table[cur_disk][last_found_partition].end_cyl);
610
611 if (temp_size != u(0) ) /* AC000 */
612 free_space[freespace_count].space = temp_size - u(1); /* AC000 */
613 END
614
615 free_space[freespace_count].start = part_table[cur_disk][last_found_partition].end_cyl+1;
616 free_space[freespace_count].end = part_table[cur_disk][sort[i]].start_cyl -1;
617 free_space[freespace_count].mbytes_unused =
618 cylinders_to_mbytes(free_space[freespace_count].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */
619
620 /* update the last found partition */
621 last_found_partition = sort[i];
622 freespace_count++;
623 END
624 END
625 /* Find the space between the last partition and the end of the disk */
626 free_space[freespace_count].space = (total_disk[cur_disk]
627 - part_table[cur_disk][last_found_partition].end_cyl)-1;
628 free_space[freespace_count].start = part_table[cur_disk][last_found_partition].end_cyl+1;
629 free_space[freespace_count].end = total_disk[cur_disk]-1;
630 free_space[freespace_count].mbytes_unused =
631 cylinders_to_mbytes(free_space[freespace_count].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */
632 END
633 else
634 BEGIN
635 /* No partitions found, show entire space as free */
636 free_space[0].start = u(0); /* AC000 */
637 free_space[0].end = total_disk[cur_disk]-1;
638 free_space[0].space = (free_space[0].end - free_space[0].start)+1;
639 free_space[0].mbytes_unused =
640 cylinders_to_mbytes(free_space[0].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */
641 END
642
643 /* Find largest free space */
644 /* Zip thru the table */
645 for (i = c(0); i < c(24); i++) /* AC000 */
646 BEGIN
647 /* Is this one bigger ? */
648 if (free_space[i].space > temp)
649 BEGIN
650 temp = free_space[i].space;
651 last_found_partition = i;
652 END
653 END
654
655 return(free_space[last_found_partition].mbytes_unused);
656END
657
658/* */
659unsigned find_ext_free_space()
660BEGIN
661char i;
662char partition_count;
663char last_found_partition;
664unsigned temp;
665char freespace_count;
666char any_partition;
667char ext_location;
668
669 /* Sort the partition table */
670 sort_ext_table(c(23)); /* AC000 */
671
672 /* Initialize free space to zero */
673 for (i = c(0); i < c(24); i++) /* AC000 */
674 BEGIN
675 free_space[i].space = u(0); /* AC000 */
676 free_space[i].start = u(0);
677 free_space[i].end = u(0); /* AC000 */
678 free_space[i].mbytes_unused = u(0); /* AN000 */
679 END
680
681 /* Find space between start of Extended partition and first volume */
682 partition_count = c(0); /* AC000 */
683 last_found_partition = c(0);
684 ext_location = find_partition_location(uc(EXTENDED)); /* AC000 */
685
686 if (ext_location != c(NOT_FOUND))
687 BEGIN
688
689 any_partition = FALSE;
690 for (i = c(0); i < c(24); i++) /* AC000 */
691 BEGIN
692 if (ext_table[cur_disk][sort[i]].sys_id != uc(0)) /* AC000 */
693 BEGIN
694 /* Found a partition, get the space */
695 free_space[0].space = ext_table[cur_disk][sort[i]].start_cyl - part_table[cur_disk][ext_location].start_cyl;
696 free_space[0].start = part_table[cur_disk][ext_location].start_cyl;
697 free_space[0].end = ext_table[cur_disk][sort[i]].start_cyl-1;
698 free_space[0].mbytes_unused =
699 cylinders_to_mbytes(free_space[0].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */
700
701 partition_count = i;
702 last_found_partition = sort[i];
703 any_partition = TRUE;
704 break;
705 END
706 END
707 /* See if any partitions were there */
708 if (any_partition)
709 BEGIN
710 /* Look for space between the rest of the partitions */
711 freespace_count = c(1); /* AC000 */
712 for (i = partition_count+1; i < c(24); i++) /* AC000 */
713 BEGIN
714 if (ext_table[cur_disk][sort[i]].sys_id != uc(0)) /* AC000 */
715 BEGIN
716
717 /* Get space between the end of the last one and the start of the next one */
718 temp = ext_table[cur_disk][sort[i]].start_cyl - (ext_table[cur_disk][last_found_partition].end_cyl+1);
719 free_space[freespace_count].space = temp;
720 free_space[freespace_count].start = ext_table[cur_disk][last_found_partition].end_cyl+1;
721 free_space[freespace_count].end = ext_table[cur_disk][sort[i]].start_cyl -1;
722 free_space[freespace_count].mbytes_unused =
723 cylinders_to_mbytes(free_space[freespace_count].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */
724
725
726 /* update the last found partition */
727 last_found_partition = sort[i];
728 freespace_count++;
729 END
730 END
731 /* Find the space between the last partition and the end of the extended partition */
732 temp = part_table[cur_disk][ext_location].end_cyl - ext_table[cur_disk][last_found_partition].end_cyl;
733 free_space[freespace_count].space = temp;
734 free_space[freespace_count].start = ext_table[cur_disk][last_found_partition].end_cyl+1;
735 free_space[freespace_count].end = part_table[cur_disk][ext_location].end_cyl;
736 free_space[freespace_count].mbytes_unused =
737 cylinders_to_mbytes(free_space[freespace_count].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */
738
739 END
740 else
741 BEGIN
742 /* No partitions found, show entire space as free */
743 free_space[0].space = (part_table[cur_disk][ext_location].end_cyl - part_table[cur_disk][ext_location].start_cyl) + 1;
744 free_space[0].start = part_table[cur_disk][ext_location].start_cyl;
745 free_space[0].end = part_table[cur_disk][ext_location].end_cyl;
746 free_space[0].mbytes_unused =
747 cylinders_to_mbytes(free_space[0].space,max_sector[cur_disk],max_head[cur_disk]); /* AN000 */
748 END
749
750 /* Find largest free space */
751 temp = u(0); /* AC000 */
752
753 /* Find largest free space */
754 temp = u(0); /* AC000 */
755
756 /* Zip thru the table */
757 for (i = c(0); i < c(24); i++) /* AC000 */
758 BEGIN
759 /* Is this one bigger ? */
760 if (free_space[i].space > temp)
761 BEGIN
762 temp = free_space[i].space;
763 last_found_partition = i;
764 END
765 END
766 END
767 /* Return with the largest free space */
768 return(free_space[last_found_partition].mbytes_unused);
769END
770/* */
771void sort_part_table(size)
772
773char size;
774
775BEGIN
776
777char changed;
778char temp;
779char i;
780
781 /* Init the sorting parameters */
782
783 for (i=c(0); i < size; i++) /* AC000 */
784 BEGIN
785 sort[i] = i;
786 END
787
788 /* Do a bubble sort */
789 changed = TRUE;
790
791 /* Sort until we don't do a swap */
792 while (changed)
793
794 BEGIN
795 changed = FALSE;
796 for (i=c(1); i < size; i++) /* AC000 */
797 BEGIN
798
799 /* Does the partition entry start before the previous one, or */
800 /* is it empty (0 ENTRY). If empty, it automatically gets shoved */
801 /* to the front, if the previous entry isn't also empty */
802
803 if ((part_table[cur_disk][sort[i]].end_cyl < part_table[cur_disk][sort[i-1]].end_cyl)
804 || ((part_table[cur_disk][sort[i]].sys_id == uc(0)) && (part_table[cur_disk][sort[i-1]].sys_id != uc(0)))) /* AC000 */
805
806 BEGIN
807 /* Swap the order indicators */
808 temp = sort[i-1];
809 sort[i-1] = sort[i];
810 sort[i] = temp;
811
812 /* printf("\nI-1 =%d\n",part_table[cur_disk][sort[i-1]].start_cyl);*/
813 /* printf("I =%d\n",part_table[cur_disk][sort[i]].start_cyl);*/
814 /* printf("Sort[i-1] = %d\n",sort[i-1]);*/
815 /* printf("Sort[i] = %d\n",sort[i]); */
816 /* wait_for_ESC(); */
817
818
819 /* indicate we did a swap */
820 changed = TRUE;
821 END
822 END
823 END
824 return;
825END
826
827
828
829
830/* */
831/* */
832void sort_ext_table(size)
833
834char size;
835
836BEGIN
837
838char changed;
839char temp;
840char i;
841
842 /* Init the sorting parameters */
843
844 for (i=c(0); i < size; i++) /* AC000 */
845 BEGIN
846 sort[i] = i;
847 END
848
849 /* Do a bubble sort */
850 changed = TRUE;
851
852 /* Sort until we don't do a swap */
853 while (changed)
854
855 BEGIN
856 changed = FALSE;
857 for (i=c(1); i < size; i++) /* AC000 */
858 BEGIN
859
860 if (ext_table[cur_disk][sort[i]].start_cyl < ext_table[cur_disk][sort[i-1]].start_cyl)
861 BEGIN
862
863 temp = sort[i-1];
864 sort[i-1] = sort[i];
865 sort[i] = temp;
866 /* indicate we did a swap */
867 changed = TRUE;
868 END
869 END
870 END
871 return;
872END
873
874/* */
875void load_logical_drive(point,drive)
876
877char point;
878unsigned char drive;
879
880BEGIN
881
882char volume_label[11]; /* AN000 */
883unsigned i;
884unsigned m;
885unsigned n;
886unsigned index;
887unsigned dx_pointer; /* AN000 */
888unsigned partition_location; /* AN000 */
889
890 /* Check to see if anything is there */
891 if ((boot_record[510] == uc(0x55)) && (boot_record[511] == uc(0xAA))) /* AC000 */
892 BEGIN
893 /* The boot record is there - read in the logical drive if it is there */
894 for (i = u(0); i < u(4); i++) /* AC000 */
895 BEGIN
896
897 index = i*16;
898 /* See if it is a defined extended drive*/
899 if ((boot_record[0x1C2 + index] != uc(0)) && (boot_record[0x1C2 + index] != uc(EXTENDED))) /* AC000 */
900 BEGIN
901 /* Get boot ind */
902 ext_table[drive][point].boot_ind = boot_record[0x1BE + index];
903
904 /* Start head */
905 ext_table[drive][point].start_head = boot_record[0x1BF + index];
906
907 /* Start sector - unscramble it from INT 13 format*/
908 ext_table[drive][point].start_sector= (boot_record[0x1C0 + index] & 0x3F);
909
910 /* Start cyl - unscramble it from INT 13 format*/
911 ext_table[drive][point].start_cyl= ((((unsigned)boot_record[0x1C0+index]) & 0x00C0) << 2)
912 + ((unsigned)boot_record[0x1C1+index]);
913
914
915 /* System id */
916 ext_table[drive][point].sys_id = boot_record[0x1C2+index];
917
918 /* End head */
919 ext_table[drive][point].end_head = boot_record[0x1C3+index];
920
921 /* End sector - unscramble it from INT 13 format*/
922 ext_table[drive][point].end_sector= (boot_record[0x1C4+index] & 0x3F);
923
924
925 /* End cyl - unscramble it from INT 13 format*/
926 ext_table[drive][point].end_cyl= ((((unsigned)boot_record[0x1C4+index]) & 0x00C0) << 2)
927 + ((unsigned)boot_record[0x1C5+index]);
928
929 /* Relative sectors */
930 ext_table[drive][point].rel_sec =
931 ((unsigned long)boot_record[0x1C9+index]) << 24;
932
933 ext_table[drive][point].rel_sec =
934 ext_table[drive][point].rel_sec+(((unsigned long)boot_record[0x1C8+index]) << 16);
935
936 ext_table[drive][point].rel_sec =
937 ext_table[drive][point].rel_sec + (((unsigned long)boot_record[0x1C7+index]) << 8);
938
939 ext_table[drive][point].rel_sec =
940 ext_table[drive][point].rel_sec + ((unsigned long)boot_record[0x1C6+index]);
941
942 /* Number of sectors */
943
944 ext_table[drive][point].num_sec =
945 ((unsigned long)boot_record[0x1CD+index]) << 24;
946
947 ext_table[drive][point].num_sec =
948 ext_table[drive][point].num_sec+(((unsigned long)boot_record[0x1CC+index]) << 16);
949
950 ext_table[drive][point].num_sec =
951 ext_table[drive][point].num_sec + (((unsigned long)boot_record[0x1CB+index]) << 8);
952
953 ext_table[drive][point].num_sec =
954 ext_table[drive][point].num_sec + ((unsigned long)boot_record[0x1CA+index]);
955
956 ext_table[drive][point].mbytes_used =
957 cylinders_to_mbytes(((ext_table[drive][point].end_cyl - ext_table[drive][point].start_cyl)+1),
958 max_sector[drive], max_head[drive]); /* AN000 */
959
960 if ( (ext_table[drive][point].sys_id == DOS12) || /* AN000 */
961 (ext_table[drive][point].sys_id == DOS16) || /* AN000 */
962 (ext_table[drive][point].sys_id == DOSNEW) ) /* AN000 */
963 ext_table[drive][point].drive_letter = next_letter++; /* AN000 */
964
965 partition_location = ext_table[drive][point].start_cyl;
966
967 ext_table[drive][point].formatted = FALSE;
968 for (m=u(0);m < u(4); m++)
969 ext_table[drive][point].system_level[m] = NUL;
970 if (read_boot_record(ext_table[drive][point].start_cyl, /* AN000 */
971 drive,
972 ext_table[drive][point].start_head,
973 ext_table[drive][point].start_sector))
974 BEGIN /* AN000 */
975 /* See if the disk has already been formated */
976 if ((boot_record[510] == uc(0x55)) && (boot_record[511] == uc(0xAA))) /* AN000 */
977 BEGIN
978 ext_table[drive][point].formatted = TRUE; /* AN000 */
979 for (m=u(0);m < u(4); m++)
980 BEGIN
981 n = (m + u(7));
982 ext_table[drive][point].system_level[m] = boot_record[n];
983 END
984 END
985
986
987 read_boot_record(ext_table[drive][point].start_cyl,drive,uc(0),uc(1));
988 END
989 END
990 END
991 END
992
993 return;
994
995END
996
997/* */
998char find_partition_location(type)
999
1000unsigned char type;
1001
1002BEGIN
1003 char i;
1004
1005/* Look at all four partition entries for system id byte that matches */
1006 for (i = c(0); i < c(4);i++) /* AC000 */
1007 BEGIN
1008
1009 /* if we find a match, do a TRUE return */
1010 if (part_table[cur_disk][i].sys_id == type)
1011 BEGIN
1012 return(i);
1013 break;
1014 END
1015 END
1016 /* Did not find one, return */
1017 return(c(NOT_FOUND)); /* AC000 */
1018END
1019
1020/* */
1021FLAG find_partition_type(type)
1022unsigned char type;
1023
1024BEGIN
1025char i;
1026
1027/* Look at all four partition entries for system id byte that matches */
1028 for (i = c(0); i < c(4);i++) /* AC000 */
1029 BEGIN
1030
1031 /* if we find a match, do a TRUE return */
1032 if (part_table[cur_disk][i].sys_id == type) return(TRUE);
1033 END
1034 /* Did not find one, return FALSE */
1035 return(FALSE);
1036END
1037/* */
1038unsigned char find_partition_system_type()
1039
1040BEGIN
1041char i;
1042
1043/* Look at all four partition entries for system id byte that matches */
1044 for (i = c(0); i < c(4);i++) /* AC000 */
1045 BEGIN
1046
1047 /* if we find a match, do a TRUE return */
1048 if ( (part_table[cur_disk][i].sys_id == DOS12) ||
1049 (part_table[cur_disk][i].sys_id == DOS16) ||
1050 (part_table[cur_disk][i].sys_id == DOSNEW) )
1051 return(part_table[cur_disk][i].sys_id);
1052 END
1053 return(uc(NOT_FOUND)); /* AC000 */
1054END
1055/* */
1056char find_logical_drive()
1057
1058BEGIN
1059char i;
1060
1061 /* See if there is a logical drive defined in Extended Partition */
1062 for (i = c(0); i < c(24); i++) /* AC000 */
1063 BEGIN
1064 /* See if we find a sys id that is not 0 */
1065 if (ext_table[cur_disk][i].sys_id != uc(0)) return(TRUE); /* AC000 */
1066 END
1067 return(FALSE);
1068END
1069/* */
1070/*******************************************************************************/
1071/*Routine name: CYLINDERS_TO_MBYTES */
1072/*******************************************************************************/
1073/* */
1074/*Description: This routine will take input of cylinders and convert */
1075/* it to MBytes. */
1076/* */
1077/* */
1078/*Called Procedures: */
1079/* */
1080/* */
1081/*Change History: Created 5/16/87 DRM */
1082/* */
1083/*Input: Cylinders_in */
1084/* */
1085/*Output: MBytes_out */
1086/* */
1087/* */
1088/* */
1089/*******************************************************************************/
1090
1091unsigned cylinders_to_mbytes(cylinders_in,sectors_per_track,number_of_heads) /* AN000 */
1092
1093unsigned cylinders_in; /* AN000 */
1094unsigned char number_of_heads; /* AN000 */
1095unsigned char sectors_per_track; /* AN000 */
1096
1097BEGIN /* AN000 */
1098
1099unsigned mbytes_out; /* AN000 */
1100unsigned long number_of_bytes; /* AN000 */
1101unsigned long number_of_sectors; /* AN000 */
1102unsigned long number_of_tracks; /* AN000 */
1103
1104 number_of_tracks = ul((cylinders_in * number_of_heads)); /* AN000 */
1105 number_of_sectors = ul((number_of_tracks * sectors_per_track)); /* AN000 */
1106 number_of_bytes = ul((number_of_sectors * BYTES_PER_SECTOR)); /* AN000 */
1107 mbytes_out = u((number_of_bytes / ONE_MEG)); /* AN000 */
1108 return(mbytes_out); /* AN000 */
1109
1110END /* AN000 */
1111
1112
1113
1114/**********************************replacement********************************************/
1115/* To find out how many logical drives there are, if an extended partition exist */
1116/* copy_fdisk2select. This procedure requires a check to see if any */
1117/* logical drives exist if so, the drives must be sorted just as the */
1118/* partitions to distinguish the amount of free space between the current logical */
1119/* drive and the next. The ASCII drive value for each should also be */
1120/* determined at this point. The same calculation using the start & end */
1121/* cylinder must be used to determine the freespace. */
1122/*****************************************************************************************/
1123
1124unsigned copy_fdisk2select(table_count,Dptr)
1125 unsigned table_count;
1126 DSE (far * Dptr);
1127
1128BEGIN
1129
1130unsigned i;
1131unsigned m;
1132unsigned x;
1133FLAG drive_found;
1134char drive_num;
1135char first_stuff;
1136char num_logical_drives ;
1137
1138 /* loop thru the partitions, only load stuff if it is there */
1139 drive_num = c(0); /* Current drive */
1140 drive_found = FALSE;
1141
1142 /* Find out how many logical drives are available for this hardfile */
1143 /* To get the number of maximum times to loop thru the table */
1144
1145 num_logical_drives = get_num_logical_dos_drives();
1146 for ( i=u(0); i < u(num_logical_drives); i++)
1147 BEGIN
1148 /* See if entry exists */
1149 if ( (ext_table[cur_disk][i].sys_id == uc(DOS12)) ||
1150 (ext_table[cur_disk][i].sys_id == uc(DOS16)) ||
1151 (ext_table[cur_disk][i].sys_id == uc(DOSNEW)) ) /* AC000 */
1152 BEGIN
1153 drive_found = TRUE;
1154 (Dptr+table_count) ->n_part_size = ext_table[cur_disk][i].mbytes_used; /* AC000 */
1155 (Dptr+table_count) ->n_part_name = E_PART_LOG_DRI; /* SET the name field to logical drive */
1156 (Dptr+table_count) -> n_part_status = E_PART_UNFORMAT;
1157 if (ext_table[cur_disk][i].formatted)
1158 (Dptr+table_count) -> n_part_status = E_PART_FORMAT;
1159 (Dptr+table_count) ->p_part_drive = ext_table[cur_disk][i].drive_letter;
1160 for (m=u(0);m < u(4); m++)
1161 (Dptr+table_count) -> n_part_level[m] = ext_table[cur_disk][i].system_level[m];
1162 drive_num++; /* Go to the next actual drive value */
1163 table_count++; /* Go to the next disk status structure */
1164 END /* End of check for logical drives */
1165 END /* End of loop to traverse thru ext_table */
1166
1167 return(drive_num);
1168
1169END
1170
1171/* */
1172char get_num_logical_dos_drives()
1173BEGIN
1174
1175char i;
1176char number;
1177
1178 number = c(0); /* AC000 */
1179 /* See if there is a logical drive defined in Extended Partition */
1180 for (i = c(0); i < c(24);i++) /* AC000 */
1181 BEGIN
1182
1183 /* See if we find a sys id that is DOS */
1184 if ((ext_table[cur_disk][i].sys_id == uc(DOS12)) || (ext_table[cur_disk][i].sys_id == uc(DOS16)) ||
1185 (ext_table[cur_disk][i].sys_id == uc(DOSNEW))) /* AC000 */
1186 BEGIN
1187 number++;
1188 END
1189 END
1190 return(number);
1191END
1192
1193/* */
1194
1195/* */
1196XFLOAT get_partition_size(type) /* AC000 */
1197
1198unsigned char type; /* AC000 */
1199
1200BEGIN
1201 char i;
1202
1203 /* Look at all four partition entries for system id byte that matches */
1204 for (i = c(0); i < c(4);i++) /* AC000 */
1205 BEGIN
1206
1207 /* if we find a match, get the size */
1208 if (part_table[cur_disk][i].sys_id == type)
1209 BEGIN
1210 /* Get the size of the partition from the array */
1211 return(part_table[cur_disk][i].mbytes_used); /* AC000 */
1212 END
1213 END
1214 /* Did not find one, something bad wrong happened */
1215 return(f(0));
1216END
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 @@
1
2/* */
3/* */
4/****************************************************************************/
5/* Define statements */
6/****************************************************************************/
7/* Get_status Input */
8#define FST_DRV 0x01
9#define SEC_DRV 0x02
10/* */
11/* EQUATES FOR N_PART_NAME */
12#define E_PART_PRI_DOS 0x01
13#define E_PART_EXT_DOS 0x02
14#define E_PART_LOG_DRI 0x03
15#define E_FREE_MEM_EDOS 0x04
16#define E_FREE_MEM_DISK 0x05
17#define E_PART_OTHER 0x06
18/* */
19/* EQUATES FOR N_PART_STATUS */
20#define E_PART_UNFORMAT 0x00
21#define E_PART_FORMAT 0x01
22/* */
23/* EQUATES FOR N_PART_TYPE */
24#define E_PART_FAT 0x01
25#define E_PART_KSAM 0x02
26#define E_PART_UNDEF 0x03
27#define E_PART_IGNORE 0x04
28
29/* DISK_1_TABLE equals M_DISK_1_ITEMS */
30/* DISK_1_VAL_ITEM equals zero */
31/* DISK_1_START equals 100 times SIZ_DISKSTRUC bytes */
32#define M_DISK_1_ITEMS ( sizeof(disk_1_start) / SIZ_DISKSTRUC )
33
34
35/* DISK_2_TABLE equals M_DISK_2_ITEMS */
36/* DISK_2_VAL_ITEM equals zero */
37/* DISK_2_START equals 100 times SIZ_DISKSTRUC bytes */
38#define SIZ_DISKSTRUC ( sizeof(struc disk_status))
39#define M_DISK_2_ITEMS ( sizeof(disk_2_start) / SIZ_DISKSTRUC )
40/* EQUATES FOR BX FLAGS */
41#define E_DISK_PRI 0x01
42#define E_DISK_EXT_DOS 0x02
43#define E_DISK_LOG_DRI 0x04
44#define E_DISK_EDOS_MEM 0x08
45#define E_DISK_FREE_MEM 0x10
46
47
48/* */
49
50#define FLAG char /* AN000 */
51#define BEGIN {
52#define END }
53#define ESC 0x1B
54#define NUL 0x00
55#define NOT_FOUND 0xFF
56#define DELETED 0xFF
57#define INVALID 0xFF
58#define PRIMARY 0x00
59#define EXTENDED 0x05
60#define BAD_BLOCK 0xFF
61#define XENIX1 0x02
62#define XENIX2 0x03
63#define PCIX 0x75
64#define DOS12 0x01
65#define DOS16 0x04
66#define DOSNEW 0x06 /* AN000 */
67#define FAT16_SIZE 32680
68#define VOLUME 0x00
69#define FALSE (char) (1==0) /* AC000 */
70#define TRUE (char) !FALSE /* AC000 */
71#define LOGICAL 0x05
72#define CR 0x0D
73#define BACKSPACE 0x08
74#define ACTIVE 0x80
75#define DOS_MAX (64*1024) /* Allow exactly 32mb worth of partitions */
76#define SYSTEM_FILE_SECTORS 100
77#define BYTES_PER_SECTOR 512 /* AN000 */
78
79
80
81#define NETWORK 0x2F
82#define INSTALLATION_CHECK 0xB800
83#define SERVER_CHECK 0x40
84
85
86#define FILE_NAME ":\\????????.???" /* AN000 */
87#define NOVOLUME " no label " /* AN000 */
88#define NOFORMAT " no fmt " /* AN000 */
89#define FAT " FAT " /* AN000 */
90#define ZERO 0 /* AN000 */
91#define NO_GOOD 0x02 /* AN000 */
92#define FIND_FIRST_MATCH 0x4E /* AN000 */
93#define GET_DTA 0x2F /* AN000 */
94#define GENERIC_IOCTL 0x440D /* AN000 */
95#define GET_MEDIA_ID 0x086E /* AN000 */
96#define CAPCHAR 0x6520 /* AN000 */
97#define CAPSTRING 0x6521 /* AN000 */
98#define CAP_YN 0x6523 /* AN000 */
99#define INT21 0x21 /* AN000 */
100#define DISK 0x13 /* AN000 */
101#define NOERROR 0 /* AN000 */
102#define BLANKS " " /* AN000 */
103
104#define READ_DISK 2
105#define WRITE_DISK 3
106#define DISK_INFO 8
107
108
109#define VOL_LABEL 0x08 /* AN000 */
110#define PERCENT 0x025 /* AN000 */
111#define PERIOD 0x02E /* AN000 */
112#define ONE_MEG 1048576 /* AN000 */
113
114#define BYTE unsigned char /* AN000 */
115#define WORD unsigned short /* AN000 */
116#define DWORD unsigned long /* AN000 */
117#define sw_type /* AN000 */
118#define sw_item_tag /* AN000 */
119#define sw_synonym /* AN000 */
120#define sw_value /* AN000 */
121
122#define CARRY_FLAG 0x0001 /* mask for carry flag */ /* AN000 */
123#define PARITY_FLAG 0x0004 /* mask for parity flag */ /* AN000 */
124#define ACARRY_FLAG 0x0010 /* mask for aux carry flag */ /* AN000 */
125#define ZERO_FLAG 0x0040 /* mask for zero flag */ /* AN000 */
126#define SIGN_FLAG 0x0080 /* mask for sign flag */ /* AN000 */
127#define TRAP_FLAG 0x0100 /* mask for trap flag */ /* AN000 */
128#define INTERRUPT_FLAG 0x0200 /* mask for interrupt flag */ /* AN000 */
129#define DIRECTION_FLAG 0x0400 /* mask for direction flag */ /* AN000 */
130#define OVERFLOW_FLAG 0x0800 /* mask for overflow flag */ /* AN000 */
131
132#define SEMICOLON 0x3B /* AN000 - VALID COMMAND LINE DELIMITER*/
133#define XFLOAT unsigned
134
135#define u(c) ((unsigned)(c)) /* AN000 */
136#define c(c) ((char)(c)) /* AN000 */
137#define f(c) ((XFLOAT)(c)) /* AN000 */
138#define uc(c) ((unsigned char)(c)) /* AN000 */
139#define ui(c) ((unsigned int)(c)) /* AN000 */
140#define ul(c) ((unsigned long)(c)) /* AN000 */
141
142
143struct entry
144 BEGIN
145 unsigned char boot_ind;
146 unsigned char start_head;
147 unsigned char start_sector;
148 unsigned start_cyl;
149 unsigned char sys_id;
150 unsigned char end_head;
151 unsigned char end_sector;
152 unsigned end_cyl;
153 unsigned long rel_sec;
154 unsigned long num_sec;
155 char order;
156 FLAG formatted;
157 XFLOAT mbytes_used; /* AN000 */
158 char drive_letter; /* AN000 */
159 char system_level[4]; /* AN000 */
160 END;
161
162struct DISK_STATUS
163 BEGIN
164 unsigned char n_part_name ;
165 unsigned n_part_size ;
166 unsigned char n_part_status;
167 unsigned char p_part_drive ; /* AN000 */
168 unsigned char n_part_type ; /* AN000 */
169 char n_part_level[4]; /* AN000 */
170 END OneDiskStatusEntry; /* TWO ARRAYS to be OUTPUT in ES:DI */
171
172typedef struct DISK_STATUS DSE ;
173
174struct freespace
175 BEGIN
176 unsigned space;
177 unsigned start;
178 unsigned end;
179 unsigned mbytes_unused; /* AN000 */
180 END;
181
182struct dx_buffer_ioctl /* AN000 */
183 BEGIN /* AN000 */
184 unsigned int info_level; /* Information level */ /* AN000 */
185 unsigned long serial_num; /* serial number */ /* AN000 */
186 char vol_label[9]; /* volume label */ /* AN000 */
187 char file_system[12]; /* file system */ /* AN000 */
188 END; /* AN000 */
189
190
191
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 @@
1
2#include "dos.h" /* ;AN000; */
3#include "get_stat.h" /* ;AN000; */
4
5/* */
6/* */
7/****************************************************************************/
8/* Declare Global variables */
9/****************************************************************************/
10/* */
11
12
13
14char cur_disk; /* ;AN000; */
15char good_disk[2]; /* ;AN000; */
16unsigned char number_of_drives; /* ;AN000; */
17char reboot_flag; /* ;AN000; */
18char errorlevel; /* ;AN000; */
19char max_partition_size; /* ;AN000; */
20char sort[24]; /* ;AN000; */
21char no_fatal_error; /* ;AN000; */
22char valid_input; /* ;AN000; */
23unsigned char video_mode; /* ;AN000; */
24unsigned char display_page; /* ;AN000; */
25
26
27unsigned total_disk[2]; /* ;AN000; */
28unsigned total_mbytes[2]; /* ;AN000; */
29unsigned char max_sector[2]; /* ;AN000; */
30unsigned char max_head[2]; /* ;AN000; */
31unsigned required_cyls[2]; /* ;AN000; */
32
33unsigned input_row; /* ;AN000; */
34unsigned input_col; /* ;AN000; */
35char insert[800]; /* ;AC000; */
36char *pinsert = insert; /* ;AN000; */
37
38extern unsigned char master_boot_record[2][512]; /* ;AN000; */
39unsigned char boot_record[512]; /* ;AN000; */
40
41char next_letter; /* ;AN000; */
42char primary_flag; /* ;AC000; */
43char extended_flag; /* ;AC000; */
44char logical_flag; /* ;AC000; */
45unsigned primary_buff; /* ;AC000; */
46unsigned extended_buff; /* ;AC000; */
47unsigned logical_buff; /* ;AC000; */
48char cur_disk_buff; /* ;AC000; */
49unsigned long NOVAL = (unsigned long) 0; /* ;AC000; */
50
51
52/* */
53/* */
54/****************************************************************************/
55/* Define Global structures */
56/****************************************************************************/
57/* */
58
59struct entry part_table[2][4]; /* ;AN000; */
60struct entry ext_table[2][24]; /* ;AN000; */
61struct freespace free_space[24]; /* ;AN000; */
62struct KeyData *input_data; /* ;AN000; */
63struct dx_buffer_ioctl dx_buff; /* ;AN000; */
64struct SREGS segregs; /* ;AN000; */
65
66/* */
67/****************************************************************************/
68/* Define UNIONS */
69/****************************************************************************/
70/* */
71
72union REGS regs; /* ;AN000; */
73
74
75char *format_string = "NO FORMAT"; /* ;AN000; */
76char far *fat12_String = "FAT_12"; /* ;AN000; */
77char far *fat16_String = "FAT_12"; /* ;AN000; */
78char far *hilda_string = "HILDA"; /* ;AN000; */
79 \ 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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3; DUMMY DATA SEGMENT THAT WILL LINK WITH THE DATA.MAC
4; FILE. THIS RESOLVES ANY REFERENCES TO THE DATA SEGMENT.
5;
6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
8HELPBUFSEG DW 0 ;AN000;
9MEM_ALLOC DB 0 ;AN000;DT Memory allocated indicator
10HELP_ALLOC EQU 80H ;AN000;DT Help memory allocated
11BLOCK_ALLOC EQU 40H ;AN000;DT PANEL memory allocated
12LVB_ALLOC EQU 20H ;AN000;DT LVB memory allocated
13BLOCK_SET EQU 01H ;AN000;DT SETBLOCK done
14DATA ENDS ;AN000;DATA
15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
16;
17; Define dummy segment to calculate end of program
18;
19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
20ZSEG SEGMENT PARA PUBLIC 'ZSEG' ;AN000;marks end of routine
21ZSEG ENDS ;AN000;ZSEG will alphabetically appear
22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
23;
24; INITMEM.ASM
25;
26;
27; Allocate Memory
28;
29; This routine will free up the required memory from DOS to make
30; space for the panels, scroll, help, and input field data.
31;
32;
33; INPUT: BX = # paragraphs to keep (in the program) ZSEG-PSP_SEG
34; CX = Length of program in bytes
35; DX = # paragraphs to allocate
36; DS = ES = CS - 10H
37;
38; OUTPUT: DS:DX = segment:offset of allocated buffer
39; BX = length of allocated buffer
40;
41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
42 EXTRN WR_MAXMEMPAR:WORD ;AN000;
43 EXTRN WR_MAXHELPSZ:WORD ;AN000;
44 EXTRN WR_DATA2SEG:WORD ;AN000;
45 EXTRN WR_DATA2OFF:WORD ;AN000;
46 EXTRN WR_DATA2LEN:WORD ;AN000;
47 EXTRN WR_LVBSEG:WORD ;AN000;DT
48 EXTRN WR_LVBOFF:WORD ;AN000;DT
49 EXTRN WR_LVBLEN:WORD ;AN000;DT
50 EXTRN WR_LVBMEM:WORD ;AN000;DT
51 EXTRN HRD_BUFSEG:WORD ;AN000;
52 EXTRN HRD_BUFOFF:WORD ;AN000;
53 EXTRN HRD_BUFLEN:WORD ;AN000;
54 ;
55SERVICE SEGMENT PARA PUBLIC 'SERVICE' ;AN000;segment for far routine
56 ASSUME CS:SERVICE,DS:DATA ;AN000;
57 ;
58 PUBLIC ALLOCATE_MEMORY_CALL ;AN000;
59 PUBLIC DEALLOCATE_MEMORY_CALL ;AN000;
60 PUBLIC ALLOCATE_HELP ;AN000;
61 PUBLIC DEALLOCATE_HELP ;AN000;
62 PUBLIC ALLOCATE_BLOCK ;AN000;
63 PUBLIC DEALLOCATE_BLOCK ;AN000;
64 PUBLIC ALLOCATE_LVB ;AN000;
65 PUBLIC DEALLOCATE_LVB ;AN000;
66 ;
67SET_BLOCK equ 4AH ;AN000;
68ALLOCATEB equ 48H ;AN000;
69FREE_BLOCK equ 49H ;AN000;
70 ;
71 INCLUDE STRUC.INC ;AN000;
72 INCLUDE MACROS.INC ;AN000;
73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DS and AX will auto pop on ret
74;
75; ALLOCATE_MEMORY_CALL
76;
77; This first takes the memory held by the active program
78; (initially all of remaining memory) and requests only the
79; memory held by the running program. Next, memory is
80; re-allocated to the running program - specified by WR_MAXMEMPAR
81; starting from the end of the program (re/ZSEG).
82;
83; ENTRY:
84; AX = CODE segment (PSP+100H)
85;
86;
87; EXIT:
88; if CY = 0 then,
89; WR_DATA2SEG = start of allocated segment
90; WR_DATA2OFF = start of allocated offset (always 0)
91; WR_DATA2LEN = length of allocated block (always WR_MAXMEMPAR)
92;
93; if CY = 1 then an error occurred allocating memory
94;
95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
96ALLOCATE_MEMORY_CALL PROC FAR ;AN000;
97 PUSHH <AX,BX,DX,DS,ES> ;AN000;
98 ;
99 TEST MEM_ALLOC,BLOCK_SET ;AN000;DT SETBLOCK done?
100 JNZ AM_SBDONE ;AN000;DT if so, skip it
101 ;
102 MOV AH,62H ;AN000; Get the PSP segment
103 INT 21H ;AN000;
104 MOV AX,BX ;AN000;save the PSP segment of SELECT
105 MOV BX,ZSEG ;AN000;get last address of code (from ZSEG)
106 MOV ES,AX ;AN000;set PSP segment in ES
107 SUB BX,AX ;AN000;calc # of paragraphs in the program
108 MOV AH,SET_BLOCK ;AN000;setblock function number
109 DOSCALL ;AN000;free used memory
110 .IF < C > ;AC000;DT
111 GOTO ALLOC_RET ;AN000;DT If error, exit
112 .ENDIF ;AN000;DT
113 OR MEM_ALLOC,BLOCK_SET ;AN000;DT
114 ;
115AM_SBDONE: ;AN000;
116 MOV AX,DATA ;AN000;initialize data segment
117 MOV DS,AX ;AN000; and extra segment
118 ;
119 PUSH CS ;AN000;call far procedure
120 CALL ALLOCATE_BLOCK_NEAR ;AN000;now allocate Panel block
121 .IF < C > ;AC000;DT
122 GOTO ALLOC_RET ;AN000;DT If error, exit
123 .ENDIF ;AN000;
124 ;
125 PUSH CS ;AN000;call far procedure
126 CALL ALLOCATE_LVB_NEAR ;AN000;now allocate LVB block
127 .IF < C > ;AC000;DT
128 GOTO ALLOC_RET ;AN000;DT If error, exit
129 .ENDIF ;AN000;
130 ;
131 PUSH CS ;AN000;call far procedure
132 CALL ALLOCATE_HELP_NEAR ;AN000;now allocate help
133 ;
134ALLOC_RET: ;AN000;
135 POPP <ES,DS,DX,BX,AX> ;AN000;
136 RET ;AN000;
137ALLOCATE_MEMORY_CALL ENDP ;AN000;
138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
139;
140; DEALLOCATE_MEMORY_CALL
141;
142; This is the house-cleaning before the running program
143; returns to DOS.
144;
145; ENTRY:
146; none
147;
148; EXIT:
149; if CY = 0 then,
150; The memory after (WR_DATA2SEG) is released to DOS
151; if CY = 1 then,
152; An error occurred while trying to release this memory
153;
154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
155DEALLOCATE_MEMORY_CALL PROC FAR;AN000;
156 PUSHH <AX,DS,ES> ;AN000;
157 MOV AX,DATA ;AN000;
158 MOV DS,AX ;AN000;
159 PUSH CS ;AN000;call far procedure
160 CALL DEALLOCATE_BLOCK_NEAR ;AN024;now deallocate Panel block
161 PUSH CS ;AN000;call far procedure
162 CALL DEALLOCATE_LVB_NEAR ;AN024; deallocate LVB block
163 PUSH CS ;AN000;call far procedure
164 CALL DEALLOCATE_HELP_NEAR ;AN000;now deallocate help
165 POPP <ES,DS,AX> ;AN000;
166 RET ;AN000;
167DEALLOCATE_MEMORY_CALL ENDP ;AN000;
168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DS and AX will auto pop on ret
169;
170; ALLOCATE_HELP
171;
172;
173; ENTRY:
174; AX = CODE segment (PSP+100H)
175;
176;
177; EXIT:
178; if CY = 0 then, ok
179; if CY = 1 then an error occurred allocating memory
180;
181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
182ALLOCATE_HELP PROC FAR ;AN000;
183ALLOCATE_HELP_NEAR: ;AN000;
184 PUSHH <AX,BX,DX,DS,ES> ;AN000;
185 MOV AX,DATA ;AN000;
186 MOV DS,AX ;AN000;
187 ;
188 TEST MEM_ALLOC,HELP_ALLOC ;AN000;DT Is help allocated
189 JNZ AH_RET ;AN000;DT if so, skip allocation
190 ;now allocate help
191 MOV BX,WR_MAXHELPSZ ;AN000;set BX to max # of paragraphs
192 SHR BX,1 ;AN000;
193 SHR BX,1 ;AN000;
194 SHR BX,1 ;AN000;
195 SHR BX,1 ;AN000;
196 MOV AH,ALLOCATEB ;AN000;set allocate function number
197 DOSCALL ;AN000;allocate memory
198 .IF < NC > ;AN000;
199 MOV HRD_BUFSEG,AX ;AN000;save segment
200 MOV HELPBUFSEG,AX ;AN000;save segment
201 MOV HRD_BUFOFF,0 ;AN000; and offset
202 MOV BX,WR_MAXHELPSZ ;AN000;set BX to max # of byte
203 MOV HRD_BUFLEN,BX ;AN000;
204 OR MEM_ALLOC,HELP_ALLOC ;AN000;DT
205 CLC ;AN000;
206 .ENDIF ;AN000;
207AH_RET: ;AN000;
208 POPP <ES,DS,DX,BX,AX> ;AN000;
209 RET ;AN000;
210ALLOCATE_HELP ENDP ;AN000;
211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
212;
213; DEALLOCATE_HELP
214;
215; This is the house-cleaning before the running program
216; returns to DOS.
217;
218; ENTRY:
219; none
220;
221; EXIT:
222; if CY = 0 then, OK
223; if CY = 1 then,
224; An error occurred while trying to release this memory
225;
226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
227DEALLOCATE_HELP PROC FAR ;AN000;
228DEALLOCATE_HELP_NEAR: ;AN000;
229 PUSHH <AX,BX,DS,ES> ;AN000;
230 MOV AX,DATA ;AN000;
231 MOV DS,AX ;AN000;
232 TEST MEM_ALLOC,HELP_ALLOC ;AN000;DT Is help allocated
233 JZ DH_RET ;AN000;DT if not, skip deallocation
234 MOV AX,HELPBUFSEG ;AN000;free help segment
235 MOV ES,AX ;AN000;
236 MOV AH,FREE_BLOCK ;AN000;
237 DOSCALL ;AN000;
238 AND MEM_ALLOC,255-HELP_ALLOC ;AN000;DT
239DH_RET: ;AN000;
240 POPP <ES,DS,BX,AX> ;AN000;
241 RET ;AN000;
242DEALLOCATE_HELP ENDP ;AN000;
243;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DS and AX will auto pop on ret
245;
246; ALLOCATE_BLOCK
247;
248; Allocate Panel and Scroll memory.
249;
250; ENTRY:
251; none
252; EXIT:
253; if CY = 0 then,
254; WR_DATA2SEG = start of allocated segment
255; WR_DATA2OFF = start of allocated offset (always 0)
256; WR_DATA2LEN = length of allocated block (always WR_MAXMEMPAR)
257;
258; if CY = 1 then an error occurred allocating memory
259;
260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
261ALLOCATE_BLOCK PROC FAR ;AN000;
262ALLOCATE_BLOCK_NEAR: ;AN000;
263 PUSHH <AX,BX,DX,DS,ES> ;AN000;
264 MOV AX,DATA ;AN000;initialize data segment
265 MOV DS,AX ;AN000; and extra segment
266 ;
267 TEST MEM_ALLOC,BLOCK_ALLOC ;AN000;DT Is PANEL block allocated
268 JNZ AB_RET ;AN000;DT if so, skip allocation
269 ;
270 MOV BX,WR_MAXMEMPAR ;AN000;set DX to max # of 16 byte parag's
271 MOV AH,ALLOCATEB ;AN000;set allocate function number
272 DOSCALL ;AN000;allocate memory
273 .IF < NC > ;AC000;DT
274 MOV BX,WR_MAXMEMPAR ;AN000;
275 SHL BX,1 ;AN000;THIS SHOULD BE REMOVED WHEN
276 SHL BX,1 ;AN000;THE INITIALIZE ROUTINE TREATS
277 SHL BX,1 ;AN000;WR_DATA2LEN AS PARAGRAPHS AND
278 SHL BX,1 ;AN000;NOT BYTES......
279 MOV WR_DATA2SEG,AX ;AN000;save segment
280 MOV WR_DATA2OFF,0 ;AN000;
281 MOV WR_DATA2LEN,BX ;AN000;
282 OR MEM_ALLOC,BLOCK_ALLOC ;AN000;DT PANEL block allocated
283 .ENDIF ;AN000;
284AB_RET: ;AN000;
285 POPP <ES,DS,DX,BX,AX> ;AN000;
286 RET ;AN000;
287ALLOCATE_BLOCK ENDP ;AN000;
288;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
289;
290; DEALLOCATE_BLOCK
291;
292; This is the house-cleaning before the running program
293; returns to DOS.
294;
295; ENTRY:
296; none
297;
298; EXIT:
299; if CY = 0 then, OK
300; if CY = 1 then,
301; An error occurred while trying to release this memory
302;
303;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
304DEALLOCATE_BLOCK PROC FAR ;AN000;
305DEALLOCATE_BLOCK_NEAR: ;AN000;
306 PUSHH <AX,BX,DS,ES> ;AN000;
307 MOV AX,DATA ;AN000;
308 MOV DS,AX ;AN000;
309 TEST MEM_ALLOC,BLOCK_ALLOC ;AN000;DT Is PANEL block allocated
310 JZ DB_RET ;AN000;DT if not, skip deallocation
311 MOV AX,WR_DATA2SEG ;AN000;free up allocated segment
312 MOV ES,AX ;AN000;
313 MOV AH,FREE_BLOCK ;AN000;
314 DOSCALL ;AN000;
315 AND MEM_ALLOC,255-BLOCK_ALLOC ;AN000;DT
316DB_RET: ;AN000;
317 POPP <ES,DS,BX,AX> ;AN000;
318 RET ;AN000;
319DEALLOCATE_BLOCK ENDP ;AN000;
320;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DS and AX will auto pop on ret
321;
322; ALLOCATE_LVB
323;
324;
325; ENTRY:
326; AX = none
327;
328;
329; EXIT:
330; if CY = 0 then, ok
331; if CY = 1 then an error occurred allocating memory
332;
333;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
334ALLOCATE_LVB PROC FAR ;AN000;
335ALLOCATE_LVB_NEAR: ;AN000;
336 PUSHH <AX,BX,DX,DS,ES> ;AN000;
337 ;
338 MOV AX,DATA ;AN000;
339 MOV DS,AX ;AN000;
340 ;;;;;;;
341 TEST MEM_ALLOC,LVB_ALLOC ;AN000;DT Is LVB block allocated
342 JNZ ALVB_RET ;AN000;DT if so, skip allocation
343 ;
344 MOV BX,WR_LVBMEM ;AN000;set BX to max # of 16 byte parag's
345 MOV AH,ALLOCATEB ;AN000;set allocate function number
346 DOSCALL ;AN000;allocate memory
347 .IF < NC > ;AN000;
348 MOV WR_LVBSEG,AX ;AN000;save segment
349 MOV WR_LVBOFF,0 ;AN000;and offset
350 SHL BX,1 ;AN000;THIS SHOULD BE REMOVED WHEN
351 SHL BX,1 ;AN000;THE INITIALIZE ROUTINE TREATS
352 SHL BX,1 ;AN000;WR_DATA2LEN AS PARAGRAPHS AND
353 SHL BX,1 ;AN000;NOT BYTES......
354 MOV WR_LVBLEN,BX ;AN000;and byte length
355 OR MEM_ALLOC,LVB_ALLOC ;AN000;DT LVB block allocated
356 .ENDIF ;AN000;
357 ;
358ALVB_RET: ;AN000;
359 POPP <ES,DS,DX,BX,AX> ;AN000;
360 RET ;AN000;
361ALLOCATE_LVB ENDP ;AN000;
362;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
363;
364; DEALLOCATE_LVB
365;
366;
367; ENTRY:
368; none
369;
370; EXIT:
371; if CY = 0 then, OK
372; if CY = 1 then,
373; An error occurred while trying to release this memory
374;
375;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
376DEALLOCATE_LVB PROC FAR ;AN000;
377DEALLOCATE_LVB_NEAR: ;AN000;
378 PUSHH <AX,BX,DS,ES> ;AN000;
379 MOV AX,DATA ;AN000;
380 MOV DS,AX ;AN000;
381 TEST MEM_ALLOC,LVB_ALLOC ;AN000;DT Is LVB block allocated
382 JZ DLVB_RET ;AN000;DT if not, skip deallocation
383 MOV AX,WR_LVBSEG ;AN000;free up LVB allocated segment
384 MOV ES,AX ;AN000;
385 MOV AH,FREE_BLOCK ;AN000;
386 DOSCALL ;AN000;
387 AND MEM_ALLOC,255-LVB_ALLOC ;AN000;DT
388DLVB_RET: ;AN000;
389 POPP <ES,DS,BX,AX> ;AN000;
390 RET ;AN000;
391DEALLOCATE_LVB ENDP ;AN000;
392
393SERVICE ENDS ;AN000;
394 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 @@
1PAGE 60,132 ;AN000;
2NAME SELECT ;AN000;
3TITLE INPUT.ASM - DOS SELECT.EXE ;AN000;
4SUBTTL input.asm ;AN000;
5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6;
7;
8; INPUT.ASM: Copyright 1988 Microsoft
9;
10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
11 ;
12DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; Define Dummy data segment
13 PUBLIC WR_ICBVEC ;AN000;
14 PUBLIC KD_BACKSPACE ;AN000;
15 ;
16 INCLUDE PCEQUATE.INC ;AN000;
17 ;
18SND_FREQ EQU 440 ;AN000; ;frequency of error beep
19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
20;
21; Input Field Control Block Vector
22;
23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
24WR_ICBVEC DW DATA,WR_ICB1 ;AN000;ICB 1 segment,offset STR_DOS_LOC
25 DW DATA,WR_ICB2 ;AN000;ICB 2 segment,offset STR_EXT_PARMS
26 DW DATA,WR_ICB3 ;AN000;ICB 3 segment,offset STR_DOS_PATH
27 DW DATA,WR_ICB4 ;AN000;ICB 4 segment,offset STR_DOS_APPEND
28 DW DATA,WR_ICB5 ;AN000;ICB 5 segment,offset STR_DOS_PROMPT
29 DW DATA,WR_ICB6 ;AN000;ICB 6 segment,offset STR_SHELL
30 DW DATA,WR_ICB7 ;AN000;ICB 7 segment,offset STR_KSAM
31 DW DATA,WR_ICB8 ;AN000;ICB 8 segment,offset STR_FASTOPEN
32 DW DATA,WR_ICB9 ;AN000;ICB 9 segment,offset STR_SHARE
33 DW DATA,WR_ICB10 ;AN000;ICB 10 segment,offset STR_GRAPHICS
34 DW DATA,WR_ICB11 ;AN000;ICB 11 segment,offset STR_XMAEM
35 DW DATA,WR_ICB12 ;AN000;ICB 12 segment,offset STR_XMA2EMS
36 DW DATA,WR_ICB13 ;AN000;ICB 13 segment,offset STR_VDISK
37 DW DATA,WR_ICB14 ;AN000;ICB 14 segment,offset STR_BREAK
38 DW DATA,WR_ICB15 ;AN000;ICB 15 segment,offset STR_BUFFERS
39 DW DATA,WR_ICB16 ;AN000;ICB 16 segment,offset STR_DOS_APPEND_P JW
40 DW DATA,WR_ICB17 ;AN000;ICB 17 segment,offset STR_FCBS
41 DW DATA,WR_ICB18 ;AN000;ICB 18 segment,offset STR_FILES
42 DW DATA,WR_ICB19 ;AN000;ICB 19 segment,offset STR_LASTDRIVE
43 DW DATA,WR_ICB20 ;AN000;ICB 20 segment,offset STR_STACKS
44 DW DATA,WR_ICB21 ;AN000;ICB 21 segment,offset STR_VERIFY
45 DW DATA,WR_ICB22 ;AN000;ICB 23 segment,offset NUM_PRINTER
46 DW DATA,WR_ICB23 ;AN000;ICB 23 segment,offset NUM_EXT_DISK
47 DW DATA,WR_ICB24 ;AN000;ICB 24 segment,offset NUM_YEAR
48 DW DATA,WR_ICB25 ;AN000;ICB 25 segment,offset NUM_MONTH
49 DW DATA,WR_ICB26 ;AN000;ICB 26 segment,offset NUM_DAY
50 DW DATA,WR_ICB27 ;AN000;ICB 27 segment,offset NUM_HOUR
51 DW DATA,WR_ICB28 ;AN000;ICB 28 segment,offset NUM_MINUTE
52 DW DATA,WR_ICB29 ;AN000;ICB 29 segment,offset NUM_SECOND
53 DW DATA,WR_ICB30 ;AN000;ICB 29 segment,offset DEF_CP
54 DW DATA,WR_ICB31 ;AN000;ICB 29 segment,offset SWISS_KEYB
55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
56;
57; ICB 1 STR_DOS_LOC
58;
59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
60WR_ICB1 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
61 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
62 DW ICB_HOR ;AC069;SEH ;AN000;option word three
63 DW 0 ;AN000;option word four
64 DW 8 ;AN000;**;upper left corner field row
65 DW 33 ;AN000;**;upper left corner field column
66 DW 40 ;AN000;**;number of chars before wrapping
67 DW 1 ;AN000;color index number assigned
68 DW 0 ;AN000;default change/minus status
69 DW 1 ;AN000;**;cursor character pos in field
70 DW 1 ;AN000;**;NEW ADD Hor scroll support
71 DW SND_FREQ ;AN000;frequency of error beep
72 DW 0 ;AN000;ASCII code of the key returned
73 DW 0 ;AN000;length of data entered into fld
74 DW 40 ;AC069;SEH ;AN000;**;length of input field
75 DW 0 ;AN000;??;offset of input field
76 DW 0 ;AN000;??;segment of input field
77 DW 0 ;AN000;offset of color attribute buffer
78 DW 0 ;AN000;segment of color attr buffer
79 DW 0 ;AN000;length of field's default value
80 DW 0 ;AN000;offset field's default value
81 DW 0 ;AN000;segment field's default value
82 DW 0 ;AN000;length of return string
83 DW 0 ;AN000;offset of return string
84 DW 0 ;AN000;segment of return string
85 DW WR_PATH_CHAR_LEN ;AN000;length of allow chars
86 DW WR_PATH_CHAR ;AN000;offset of allow chars
87 DW DATA ;AN000;segment of allow chars
88 DW 0 ;AN000;length of skip chars
89 DW 0 ;AN000;offset of skip chars
90 DW 0 ;AN000;segment of skip chars
91 DW 0 ;AN000;length of allow once chars
92 DW 0 ;AN000;offset of allow once chars
93 DW 0 ;AN000;segment of allow once chars
94 DW 2 ;AN000;precision of decimal point
95 DW 0 ;AN000;low numeric range (low intrgr)
96 DW 0 ;AN000;low numeric range (high intrgr)
97 DW 0 ;AN000;high numeric range (low intrgr)
98 DW 0 ;AN000;high numeric range (high intrgr)
99 DW 0 ;AN000;beginning row of minus and plus
100 DW 0 ;AN000;beginning col of minus & plus
101 DW 0 ;AN000;length of minus sign string
102 DW 0 ;AN000;offset of minus sign string
103 DW 0 ;AN000;segment of minus sign string
104 DW 0 ;AN000;length of plus sign string
105 DW 0 ;AN000;offset of plus sign string
106 DW 0 ;AN000;segment of plus sign string
107 ;
108WR_PATH_CHAR DB "'",',0-9,,a-z,,A-Z,,�-�, $!"#%&()-.@\`_{}~^,,,' ;AN000;
109WR_PATH_CHAR_LEN EQU ($-WR_PATH_CHAR) ;AN000;
110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
111;
112; ICB 2 STR_EXT_PARMS
113;
114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
115WR_ICB2 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
116 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
117 DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three
118 DW 0 ;AN000;option word four
119 DW 7 ;AN000;**;upper left corner field row
120 DW 44 ;AN000;**;upper left corner field column
121 DW 75 ;;AN000;35 ;**;number of chars before wrapping
122 DW 1 ;AN000;color index number assigned
123 DW 0 ;AN000;default change/minus status
124 DW 1 ;AN000;**;cursor character pos in field
125 DW 1 ;AN000;**;NEW ADD Hor scroll support
126 DW SND_FREQ ;AN000;frequency of error beep
127 DW 0 ;AN000;ASCII code of the key returned
128 DW 0 ;AN000;length of data entered into fld
129 DW 0 ;AN000;**;length of input field
130 DW 0 ;AN000;??;offset of input field
131 DW 0 ;AN000;??;segment of input field
132 DW 0 ;AN000;offset of color attribute buffer
133 DW 0 ;AN000;segment of color attr buffer
134 DW 0 ;AN000;length of field's default value
135 DW 0 ;AN000;offset field's default value
136 DW 0 ;AN000;segment field's default value
137 DW 0 ;AN000;length of return string
138 DW 0 ;AN000;offset of return string
139 DW 0 ;AN000;segment of return string
140 DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars
141 DW WR_ALLOW_CHAR ;AN000;offset of allow chars
142 DW DATA ;AN000;segment of allow chars
143 DW 0 ;AN000;length of skip chars
144 DW 0 ;AN000;offset of skip chars
145 DW 0 ;AN000;segment of skip chars
146 DW 0 ;AN000;length of allow once chars
147 DW 0 ;AN000;offset of allow once chars
148 DW 0 ;AN000;segment of allow once chars
149 DW 2 ;AN000;precision of decimal point
150 DW 0 ;AN000;low numeric range (low intrgr)
151 DW 0 ;AN000;low numeric range (high intrgr)
152 DW 0 ;AN000;high numeric range (low intrgr)
153 DW 0 ;AN000;high numeric range (high intrgr)
154 DW 0 ;AN000;beginning row of minus and plus
155 DW 0 ;AN000;beginning col of minus & plus
156 DW 0 ;AN000;length of minus sign string
157 DW 0 ;AN000;offset of minus sign string
158 DW 0 ;AN000;segment of minus sign string
159 DW 0 ;AN000;length of plus sign string
160 DW 0 ;AN000;offset of plus sign string
161 DW 0 ;AN000;segment of plus sign string
162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
163;
164; ICB 3 STR_DOS_PATH
165;
166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
167WR_ICB3 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
168 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
169 DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three
170 DW 0 ;AN000;option word four
171 DW 8 ;AN000;**;upper left corner field row
172 DW 30 ;AN000;**;upper left corner field column
173 DW 40 ;AN000;**;number of chars before wrapping
174 DW 1 ;AN000;color index number assigned
175 DW 0 ;AN000;default change/minus status
176 DW 1 ;AN000;**;cursor character pos in field
177 DW 1 ;AN000;**;NEW ADD Hor scroll support
178 DW SND_FREQ ;AN000;frequency of error beep
179 DW 0 ;AN000;ASCII code of the key returned
180 DW 0 ;AN000;length of data entered into fld
181 DW 0 ;AN000;**;length of input field
182 DW 0 ;AN000;??;offset of input field
183 DW 0 ;AN000;??;segment of input field
184 DW 0 ;AN000;offset of color attribute buffer
185 DW 0 ;AN000;segment of color attr buffer
186 DW 0 ;AN000;length of field's default value
187 DW 0 ;AN000;offset field's default value
188 DW 0 ;AN000;segment field's default value
189 DW 0 ;AN000;length of return string
190 DW 0 ;AN000;offset of return string
191 DW 0 ;AN000;segment of return string
192 DW WR_APPEND_CHAR_LEN ;AN000;length of allow chars
193 DW WR_APPEND_CHAR ;AN000;offset of allow chars
194 DW DATA ;AN000;segment of allow chars
195 DW 0 ;AN000;length of skip chars
196 DW 0 ;AN000;offset of skip chars
197 DW 0 ;AN000;segment of skip chars
198 DW 0 ;AN000;length of allow once chars
199 DW 0 ;AN000;offset of allow once chars
200 DW 0 ;AN000;segment of allow once chars
201 DW 2 ;AN000;precision of decimal point
202 DW 0 ;AN000;low numeric range (low intrgr)
203 DW 0 ;AN000;low numeric range (high intrgr)
204 DW 0 ;AN000;high numeric range (low intrgr)
205 DW 0 ;AN000;high numeric range (high intrgr)
206 DW 0 ;AN000;beginning row of minus and plus
207 DW 0 ;AN000;beginning col of minus & plus
208 DW 0 ;AN000;length of minus sign string
209 DW 0 ;AN000;offset of minus sign string
210 DW 0 ;AN000;segment of minus sign string
211 DW 0 ;AN000;length of plus sign string
212 DW 0 ;AN000;offset of plus sign string
213 DW 0 ;AN000;segment of plus sign string
214 ;;;
215 ;
216WR_APPEND_CHAR DB "'",',0-9,,a-z,,A-Z,,�-�, ;$!"#%&()-.:@\`_{}~^,,,' ;AN000;
217WR_APPEND_CHAR_LEN EQU ($-WR_APPEND_CHAR) ;AN000;
218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
219;
220; ICB 4 STR_DOS_APPEND
221;
222;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
223WR_ICB4 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
224 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
225 DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three
226 DW 0 ;AN000;option word four
227 DW 12 ;AN000;**;upper left corner field row
228 DW 30 ;AN000;**;upper left corner field column
229 DW 40 ;AN000;**;number of chars before wrapping
230 DW 1 ;AN000;color index number assigned
231 DW 0 ;AN000;default change/minus status
232 DW 1 ;AN000;**;cursor character pos in field
233 DW 1 ;AN000;**;NEW ADD Hor scroll support
234 DW SND_FREQ ;AN000;frequency of error beep
235 DW 0 ;AN000;ASCII code of the key returned
236 DW 0 ;AN000;length of data entered into fld
237 DW 0 ;AN000;**;length of input field
238 DW 0 ;AN000;??;offset of input field
239 DW 0 ;AN000;??;segment of input field
240 DW 0 ;AN000;offset of color attribute buffer
241 DW 0 ;AN000;segment of color attr buffer
242 DW 0 ;AN000;length of field's default value
243 DW 0 ;AN000;offset field's default value
244 DW 0 ;AN000;segment field's default value
245 DW 0 ;AN000;length of return string
246 DW 0 ;AN000;offset of return string
247 DW 0 ;AN000;segment of return string
248 DW WR_APPEND_CHAR_LEN ;AN000;length of allow chars
249 DW WR_APPEND_CHAR ;AN000;offset of allow chars
250 DW DATA ;AN000;segment of allow chars
251 DW 0 ;AN000;length of skip chars
252 DW 0 ;AN000;offset of skip chars
253 DW 0 ;AN000;segment of skip chars
254 DW 0 ;AN000;length of allow once chars
255 DW 0 ;AN000;offset of allow once chars
256 DW 0 ;AN000;segment of allow once chars
257 DW 2 ;AN000;precision of decimal point
258 DW 0 ;AN000;low numeric range (low intrgr)
259 DW 0 ;AN000;low numeric range (high intrgr)
260 DW 0 ;AN000;high numeric range (low intrgr)
261 DW 0 ;AN000;high numeric range (high intrgr)
262 DW 0 ;AN000;beginning row of minus and plus
263 DW 0 ;AN000;beginning col of minus & plus
264 DW 0 ;AN000;length of minus sign string
265 DW 0 ;AN000;offset of minus sign string
266 DW 0 ;AN000;segment of minus sign string
267 DW 0 ;AN000;length of plus sign string
268 DW 0 ;AN000;offset of plus sign string
269 DW 0 ;AN000;segment of plus sign string
270;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
271;
272; ICB 5 STR_DOS_PROMPT
273;
274;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
275WR_ICB5 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
276 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
277 DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three
278 DW 0 ;AN000;option word four
279 DW 15 ;AN000;**;upper left corner field row
280 DW 30 ;AN000;**;upper left corner field column
281 DW 30 ;AN000;**;number of chars before wrapping
282 DW 1 ;AN000;color index number assigned
283 DW 0 ;AN000;default change/minus status
284 DW 1 ;AN000;**;cursor character pos in field
285 DW 1 ;AN000;**;NEW ADD Hor scroll support
286 DW SND_FREQ ;AN000;frequency of error beep
287 DW 0 ;AN000;ASCII code of the key returned
288 DW 0 ;AN000;length of data entered into fld
289 DW 0 ;AN000;**;length of input field
290 DW 0 ;AN000;??;offset of input field
291 DW 0 ;AN000;??;segment of input field
292 DW 0 ;AN000;offset of color attribute buffer
293 DW 0 ;AN000;segment of color attr buffer
294 DW 0 ;AN000;length of field's default value
295 DW 0 ;AN000;offset field's default value
296 DW 0 ;AN000;segment field's default value
297 DW 0 ;AN000;length of return string
298 DW 0 ;AN000;offset of return string
299 DW 0 ;AN000;segment of return string
300 DW WR_PROMPT_CHAR_LEN ;AN000;length of allow chars
301 DW WR_PROMPT_CHAR ;AN000;offset of allow chars
302 DW DATA ;AN000;segment of allow chars
303 DW 0 ;AN000;length of skip chars
304 DW 0 ;AN000;offset of skip chars
305 DW 0 ;AN000;segment of skip chars
306 DW 0 ;AN000;length of allow once chars
307 DW 0 ;AN000;offset of allow once chars
308 DW 0 ;AN000;segment of allow once chars
309 DW 2 ;AN000;precision of decimal point
310 DW 0 ;AN000;low numeric range (low intrgr)
311 DW 0 ;AN000;low numeric range (high intrgr)
312 DW 0 ;AN000;high numeric range (low intrgr)
313 DW 0 ;AN000;high numeric range (high intrgr)
314 DW 0 ;AN000;beginning row of minus and plus
315 DW 0 ;AN000;beginning col of minus & plus
316 DW 0 ;AN000;length of minus sign string
317 DW 0 ;AN000;offset of minus sign string
318 DW 0 ;AN000;segment of minus sign string
319 DW 0 ;AN000;length of plus sign string
320 DW 0 ;AN000;offset of plus sign string
321 DW 0 ;AN000;segment of plus sign string
322 ;;;;;;;;;;;;;
323 ;
324WR_PROMPT_CHAR DB "'",',0-9,,a-z,,A-Z,,�-�,\/ $!"#%()*+-.;@`[]_{}~,,,' ;AN000;
325WR_PROMPT_CHAR_LEN EQU ($-WR_PROMPT_CHAR) ;AN000;
326;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
327;
328; ICB 6 STR_SHELL
329;
330;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
331WR_ICB6 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
332 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
333 DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three
334 DW 0 ;AN000;option word four
335 DW 8 ;AN000;**;upper left corner field row
336 DW 38 ;AN000;**;upper left corner field column
337 DW 15 ;AN000;**;number of chars before wrapping
338 DW 1 ;AN000;color index number assigned
339 DW 0 ;AN000;default change/minus status
340 DW 1 ;AN000;**;cursor character pos in field
341 DW 1 ;AN000;**;NEW ADD Hor scroll support
342 DW SND_FREQ ;AN000;frequency of error beep
343 DW 0 ;AN000;ASCII code of the key returned
344 DW 0 ;AN000;length of data entered into fld
345 DW 0 ;AN000;**;length of input field
346 DW 0 ;AN000;??;offset of input field
347 DW 0 ;AN000;??;segment of input field
348 DW 0 ;AN000;offset of color attribute buffer
349 DW 0 ;AN000;segment of color attr buffer
350 DW 0 ;AN000;length of field's default value
351 DW 0 ;AN000;offset field's default value
352 DW 0 ;AN000;segment field's default value
353 DW 0 ;AN000;length of return string
354 DW 0 ;AN000;offset of return string
355 DW 0 ;AN000;segment of return string
356 DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars
357 DW WR_ALLOW_CHAR ;AN000;offset of allow chars
358 DW DATA ;AN000;segment of allow chars
359 DW 0 ;AN000;length of skip chars
360 DW 0 ;AN000;offset of skip chars
361 DW 0 ;AN000;segment of skip chars
362 DW 0 ;AN000;length of allow once chars
363 DW 0 ;AN000;offset of allow once chars
364 DW 0 ;AN000;segment of allow once chars
365 DW 2 ;AN000;precision of decimal point
366 DW 0 ;AN000;low numeric range (low intrgr)
367 DW 0 ;AN000;low numeric range (high intrgr)
368 DW 0 ;AN000;high numeric range (low intrgr)
369 DW 0 ;AN000;high numeric range (high intrgr)
370 DW 0 ;AN000;beginning row of minus and plus
371 DW 0 ;AN000;beginning col of minus & plus
372 DW 0 ;AN000;length of minus sign string
373 DW 0 ;AN000;offset of minus sign string
374 DW 0 ;AN000;segment of minus sign string
375 DW 0 ;AN000;length of plus sign string
376 DW 0 ;AN000;offset of plus sign string
377 DW 0 ;AN000;segment of plus sign string
378;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
379;
380; ICB 7 STR_KSAM
381;
382; This field will not be used with the shipped version
383; of SELECT.
384;
385;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
386WR_ICB7 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
387 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
388 DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three
389 DW 0 ;AN000;option word four
390 DW 7 ;AN000;**;upper left corner field row
391 DW 36 ;AN000;**;upper left corner field column
392 DW 40 ;AN000;**;number of chars before wrapping
393 DW 1 ;AN000;color index number assigned
394 DW 0 ;AN000;default change/minus status
395 DW 1 ;AN000;**;cursor character pos in field
396 DW 1 ;AN000;**;NEW ADD Hor scroll support
397 DW SND_FREQ ;AN000;frequency of error beep
398 DW 0 ;AN000;ASCII code of the key returned
399 DW 0 ;AN000;length of data entered into fld
400 DW 0 ;AN000;**;length of input field
401 DW 0 ;AN000;??;offset of input field
402 DW 0 ;AN000;??;segment of input field
403 DW 0 ;AN000;offset of color attribute buffer
404 DW 0 ;AN000;segment of color attr buffer
405 DW 0 ;AN000;length of field's default value
406 DW 0 ;AN000;offset field's default value
407 DW 0 ;AN000;segment field's default value
408 DW 0 ;AN000;length of return string
409 DW 0 ;AN000;offset of return string
410 DW 0 ;AN000;segment of return string
411 DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars
412 DW WR_ALLOW_CHAR ;AN000;offset of allow chars
413 DW DATA ;AN000;segment of allow chars
414 DW 0 ;AN000;length of skip chars
415 DW 0 ;AN000;offset of skip chars
416 DW 0 ;AN000;segment of skip chars
417 DW 0 ;AN000;length of allow once chars
418 DW 0 ;AN000;offset of allow once chars
419 DW 0 ;AN000;segment of allow once chars
420 DW 2 ;AN000;precision of decimal point
421 DW 0 ;AN000;low numeric range (low intrgr)
422 DW 0 ;AN000;low numeric range (high intrgr)
423 DW 0 ;AN000;high numeric range (low intrgr)
424 DW 0 ;AN000;high numeric range (high intrgr)
425 DW 0 ;AN000;beginning row of minus and plus
426 DW 0 ;AN000;beginning col of minus & plus
427 DW 0 ;AN000;length of minus sign string
428 DW 0 ;AN000;offset of minus sign string
429 DW 0 ;AN000;segment of minus sign string
430 DW 0 ;AN000;length of plus sign string
431 DW 0 ;AN000;offset of plus sign string
432 DW 0 ;AN000;segment of plus sign string
433;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
434;
435; ICB 8 STR_FASTOPEN
436;
437;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
438WR_ICB8 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
439 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
440 DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three
441 DW 0 ;AN000;option word four
442 DW 8 ;AN000;**;upper left corner field row
443 DW 40 ;AN000;**;upper left corner field column
444 DW 40 ;AN000;**;number of chars before wrapping
445 DW 1 ;AN000;color index number assigned
446 DW 0 ;AN000;default change/minus status
447 DW 1 ;AN000;**;cursor character pos in field
448 DW 1 ;AN000;**;NEW ADD Hor scroll support
449 DW SND_FREQ ;AN000;frequency of error beep
450 DW 0 ;AN000;ASCII code of the key returned
451 DW 0 ;AN000;length of data entered into fld
452 DW 0 ;AN000;**;length of input field
453 DW 0 ;AN000;??;offset of input field
454 DW 0 ;AN000;??;segment of input field
455 DW 0 ;AN000;offset of color attribute buffer
456 DW 0 ;AN000;segment of color attr buffer
457 DW 0 ;AN000;length of field's default value
458 DW 0 ;AN000;offset field's default value
459 DW 0 ;AN000;segment field's default value
460 DW 0 ;AN000;length of return string
461 DW 0 ;AN000;offset of return string
462 DW 0 ;AN000;segment of return string
463 DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars
464 DW WR_ALLOW_CHAR ;AN000;offset of allow chars
465 DW DATA ;AN000;segment of allow chars
466 DW 0 ;AN000;length of skip chars
467 DW 0 ;AN000;offset of skip chars
468 DW 0 ;AN000;segment of skip chars
469 DW 0 ;AN000;length of allow once chars
470 DW 0 ;AN000;offset of allow once chars
471 DW 0 ;AN000;segment of allow once chars
472 DW 2 ;AN000;precision of decimal point
473 DW 0 ;AN000;low numeric range (low intrgr)
474 DW 0 ;AN000;low numeric range (high intrgr)
475 DW 0 ;AN000;high numeric range (low intrgr)
476 DW 0 ;AN000;high numeric range (high intrgr)
477 DW 0 ;AN000;beginning row of minus and plus
478 DW 0 ;AN000;beginning col of minus & plus
479 DW 0 ;AN000;length of minus sign string
480 DW 0 ;AN000;offset of minus sign string
481 DW 0 ;AN000;segment of minus sign string
482 DW 0 ;AN000;length of plus sign string
483 DW 0 ;AN000;offset of plus sign string
484 DW 0 ;AN000;segment of plus sign string
485;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
486;
487; ICB 9 STR_SHARE
488;
489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
490WR_ICB9 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
491 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
492 DW ICB_HOR ;AC069;SEH ;AN000;option word three
493 DW 0 ;AN000;option word four
494 DW 8 ;AN000;**;upper left corner field row
495 DW 36 ;AN000;**;upper left corner field column
496 DW 40 ;AN000;**;number of chars before wrapping
497 DW 1 ;AN000;color index number assigned
498 DW 0 ;AN000;default change/minus status
499 DW 1 ;AN000;**;cursor character pos in field
500 DW 1 ;AN000;**;NEW ADD Hor scroll support
501 DW SND_FREQ ;AN000;frequency of error beep
502 DW 0 ;AN000;ASCII code of the key returned
503 DW 0 ;AN000;length of data entered into fld
504 DW 40 ;AC069;SEH ;AN000;**;length of input field
505 DW 0 ;AN000;??;offset of input field
506 DW 0 ;AN000;??;segment of input field
507 DW 0 ;AN000;offset of color attribute buffer
508 DW 0 ;AN000;segment of color attr buffer
509 DW 0 ;AN000;length of field's default value
510 DW 0 ;AN000;offset field's default value
511 DW 0 ;AN000;segment field's default value
512 DW 0 ;AN000;length of return string
513 DW 0 ;AN000;offset of return string
514 DW 0 ;AN000;segment of return string
515 DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars
516 DW WR_ALLOW_CHAR ;AN000;offset of allow chars
517 DW DATA ;AN000;segment of allow chars
518 DW 0 ;AN000;length of skip chars
519 DW 0 ;AN000;offset of skip chars
520 DW 0 ;AN000;segment of skip chars
521 DW 0 ;AN000;length of allow once chars
522 DW 0 ;AN000;offset of allow once chars
523 DW 0 ;AN000;segment of allow once chars
524 DW 2 ;AN000;precision of decimal point
525 DW 0 ;AN000;low numeric range (low intrgr)
526 DW 0 ;AN000;low numeric range (high intrgr)
527 DW 0 ;AN000;high numeric range (low intrgr)
528 DW 0 ;AN000;high numeric range (high intrgr)
529 DW 0 ;AN000;beginning row of minus and plus
530 DW 0 ;AN000;beginning col of minus & plus
531 DW 0 ;AN000;length of minus sign string
532 DW 0 ;AN000;offset of minus sign string
533 DW 0 ;AN000;segment of minus sign string
534 DW 0 ;AN000;length of plus sign string
535 DW 0 ;AN000;offset of plus sign string
536 DW 0 ;AN000;segment of plus sign string
537;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
538;
539; ICB 10 STR_GRAPHICS
540;
541;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
542WR_ICB10 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
543 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
544 DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three
545 DW 0 ;AN000;option word four
546 DW 8 ;AN000;**;upper left corner field row
547 DW 34 ;AN000;**;upper left corner field column
548 DW 40 ;AN000;**;number of chars before wrapping
549 DW 1 ;AN000;color index number assigned
550 DW 0 ;AN000;default change/minus status
551 DW 1 ;AN000;**;cursor character pos in field
552 DW 1 ;AN000;**;NEW ADD Hor scroll support
553 DW SND_FREQ ;AN000;frequency of error beep
554 DW 0 ;AN000;ASCII code of the key returned
555 DW 0 ;AN000;length of data entered into fld
556 DW 0 ;AN000;**;length of input field
557 DW 0 ;AN000;??;offset of input field
558 DW 0 ;AN000;??;segment of input field
559 DW 0 ;AN000;offset of color attribute buffer
560 DW 0 ;AN000;segment of color attr buffer
561 DW 0 ;AN000;length of field's default value
562 DW 0 ;AN000;offset field's default value
563 DW 0 ;AN000;segment field's default value
564 DW 0 ;AN000;length of return string
565 DW 0 ;AN000;offset of return string
566 DW 0 ;AN000;segment of return string
567 DW WR_GRAPHIC_CHAR_LEN ;AN000;length of allow chars
568 DW WR_GRAPHIC_CHAR ;AN000;offset of allow chars
569 DW DATA ;AN000;segment of allow chars
570 DW 0 ;AN000;length of skip chars
571 DW 0 ;AN000;offset of skip chars
572 DW 0 ;AN000;segment of skip chars
573 DW 0 ;AN000;length of allow once chars
574 DW 0 ;AN000;offset of allow once chars
575 DW 0 ;AN000;segment of allow once chars
576 DW 2 ;AN000;precision of decimal point
577 DW 0 ;AN000;low numeric range (low intrgr)
578 DW 0 ;AN000;low numeric range (high intrgr)
579 DW 0 ;AN000;high numeric range (low intrgr)
580 DW 0 ;AN000;high numeric range (high intrgr)
581 DW 0 ;AN000;beginning row of minus and plus
582 DW 0 ;AN000;beginning col of minus & plus
583 DW 0 ;AN000;length of minus sign string
584 DW 0 ;AN000;offset of minus sign string
585 DW 0 ;AN000;segment of minus sign string
586 DW 0 ;AN000;length of plus sign string
587 DW 0 ;AN000;offset of plus sign string
588 DW 0 ;AN000;segment of plus sign string
589WR_GRAPHIC_CHAR DB "'",',0-9,,a-z,,A-Z,\ !"#%()*+-.;@`[]_{}~/,,,' ;AN000;
590WR_GRAPHIC_CHAR_LEN EQU ($-WR_GRAPHIC_CHAR) ;AN000;
591;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
592;
593; ICB 11 STR_XMAEM
594;
595;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
596WR_ICB11 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
597 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
598 DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three
599 DW 0 ;AN000;option word four
600 DW 8 ;AN000;**;upper left corner field row
601 DW 36 ;AN000;**;upper left corner field column
602 DW 40 ;AN000;**;number of chars before wrapping
603 DW 1 ;AN000;color index number assigned
604 DW 0 ;AN000;default change/minus status
605 DW 1 ;AN000;**;cursor character pos in field
606 DW 1 ;AN000;**;NEW ADD Hor scroll support
607 DW SND_FREQ ;AN000;frequency of error beep
608 DW 0 ;AN000;ASCII code of the key returned
609 DW 0 ;AN000;length of data entered into fld
610 DW 0 ;AN000;**;length of input field
611 DW 0 ;AN000;??;offset of input field
612 DW 0 ;AN000;??;segment of input field
613 DW 0 ;AN000;offset of color attribute buffer
614 DW 0 ;AN000;segment of color attr buffer
615 DW 0 ;AN000;length of field's default value
616 DW 0 ;AN000;offset field's default value
617 DW 0 ;AN000;segment field's default value
618 DW 0 ;AN000;length of return string
619 DW 0 ;AN000;offset of return string
620 DW 0 ;AN000;segment of return string
621 DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars
622 DW WR_ALLOW_CHAR ;AN000;offset of allow chars
623 DW DATA ;AN000;segment of allow chars
624 DW 0 ;AN000;length of skip chars
625 DW 0 ;AN000;offset of skip chars
626 DW 0 ;AN000;segment of skip chars
627 DW 0 ;AN000;length of allow once chars
628 DW 0 ;AN000;offset of allow once chars
629 DW 0 ;AN000;segment of allow once chars
630 DW 2 ;AN000;precision of decimal point
631 DW 0 ;AN000;low numeric range (low intrgr)
632 DW 0 ;AN000;low numeric range (high intrgr)
633 DW 0 ;AN000;high numeric range (low intrgr)
634 DW 0 ;AN000;high numeric range (high intrgr)
635 DW 0 ;AN000;beginning row of minus and plus
636 DW 0 ;AN000;beginning col of minus & plus
637 DW 0 ;AN000;length of minus sign string
638 DW 0 ;AN000;offset of minus sign string
639 DW 0 ;AN000;segment of minus sign string
640 DW 0 ;AN000;length of plus sign string
641 DW 0 ;AN000;offset of plus sign string
642 DW 0 ;AN000;segment of plus sign string
643;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
644;
645; ICB 12 STR_XMA2EMS
646;
647;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
648WR_ICB12 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
649 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
650 DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three
651 DW 0 ;AN000;option word four
652 DW 11 ;AN000;**;upper left corner field row
653 DW 36 ;AN000;**;upper left corner field column
654 DW 40 ;AN000;**;number of chars before wrapping
655 DW 1 ;AN000;color index number assigned
656 DW 0 ;AN000;default change/minus status
657 DW 1 ;AN000;**;cursor character pos in field
658 DW 1 ;AN000;**;NEW ADD Hor scroll support
659 DW SND_FREQ ;AN000;frequency of error beep
660 DW 0 ;AN000;ASCII code of the key returned
661 DW 0 ;AN000;length of data entered into fld
662 DW 0 ;AN000;**;length of input field
663 DW 0 ;AN000;??;offset of input field
664 DW 0 ;AN000;??;segment of input field
665 DW 0 ;AN000;offset of color attribute buffer
666 DW 0 ;AN000;segment of color attr buffer
667 DW 0 ;AN000;length of field's default value
668 DW 0 ;AN000;offset field's default value
669 DW 0 ;AN000;segment field's default value
670 DW 0 ;AN000;length of return string
671 DW 0 ;AN000;offset of return string
672 DW 0 ;AN000;segment of return string
673 DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars
674 DW WR_ALLOW_CHAR ;AN000;offset of allow chars
675 DW DATA ;AN000;segment of allow chars
676 DW 0 ;AN000;length of skip chars
677 DW 0 ;AN000;offset of skip chars
678 DW 0 ;AN000;segment of skip chars
679 DW 0 ;AN000;length of allow once chars
680 DW 0 ;AN000;offset of allow once chars
681 DW 0 ;AN000;segment of allow once chars
682 DW 2 ;AN000;precision of decimal point
683 DW 0 ;AN000;low numeric range (low intrgr)
684 DW 0 ;AN000;low numeric range (high intrgr)
685 DW 0 ;AN000;high numeric range (low intrgr)
686 DW 0 ;AN000;high numeric range (high intrgr)
687 DW 0 ;AN000;beginning row of minus and plus
688 DW 0 ;AN000;beginning col of minus & plus
689 DW 0 ;AN000;length of minus sign string
690 DW 0 ;AN000;offset of minus sign string
691 DW 0 ;AN000;segment of minus sign string
692 DW 0 ;AN000;length of plus sign string
693 DW 0 ;AN000;offset of plus sign string
694 DW 0 ;AN000;segment of plus sign string
695;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
696;
697; ICB 13 STR_VDISK
698;
699;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
700WR_ICB13 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
701 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
702 DW ICB_HOR ;AC069;SEH ;AN000;option word three
703 DW 0 ;AN000;option word four
704 DW 8 ;AN000;**;upper left corner field row
705 DW 36 ;AN000;**;upper left corner field column
706 DW 40 ;AN000;**;number of chars before wrapping
707 DW 1 ;AN000;color index number assigned
708 DW 0 ;AN000;default change/minus status
709 DW 1 ;AN000;**;cursor character pos in field
710 DW 1 ;AN000;**;NEW ADD Hor scroll support
711 DW SND_FREQ ;AN000;frequency of error beep
712 DW 0 ;AN000;ASCII code of the key returned
713 DW 0 ;AN000;length of data entered into fld
714 DW 40 ;AC069;SEH ;AN000;**;length of input field
715 DW 0 ;AN000;??;offset of input field
716 DW 0 ;AN000;??;segment of input field
717 DW 0 ;AN000;offset of color attribute buffer
718 DW 0 ;AN000;segment of color attr buffer
719 DW 0 ;AN000;length of field's default value
720 DW 0 ;AN000;offset field's default value
721 DW 0 ;AN000;segment field's default value
722 DW 0 ;AN000;length of return string
723 DW 0 ;AN000;offset of return string
724 DW 0 ;AN000;segment of return string
725 DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars
726 DW WR_ALLOW_CHAR ;AN000;offset of allow chars
727 DW DATA ;AN000;segment of allow chars
728 DW 0 ;AN000;length of skip chars
729 DW 0 ;AN000;offset of skip chars
730 DW 0 ;AN000;segment of skip chars
731 DW 0 ;AN000;length of allow once chars
732 DW 0 ;AN000;offset of allow once chars
733 DW 0 ;AN000;segment of allow once chars
734 DW 2 ;AN000;precision of decimal point
735 DW 0 ;AN000;low numeric range (low intrgr)
736 DW 0 ;AN000;low numeric range (high intrgr)
737 DW 0 ;AN000;high numeric range (low intrgr)
738 DW 0 ;AN000;high numeric range (high intrgr)
739 DW 0 ;AN000;beginning row of minus and plus
740 DW 0 ;AN000;beginning col of minus & plus
741 DW 0 ;AN000;length of minus sign string
742 DW 0 ;AN000;offset of minus sign string
743 DW 0 ;AN000;segment of minus sign string
744 DW 0 ;AN000;length of plus sign string
745 DW 0 ;AN000;offset of plus sign string
746 DW 0 ;AN000;segment of plus sign string
747;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
748;
749; ICB 14 STR_BREAK
750;
751;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
752WR_ICB14 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;;+ICB_CLR ;option word one
753 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
754 DW ICB_HOR ;AC069;SEH ;AN000;option word three
755 DW 0 ;AN000;option word four
756 DW 8 ;AN000;**;upper left corner field row
757 DW 26 ;AN000;**;upper left corner field column
758 DW 3 ;AN000;**;number of chars before wrapping
759 DW 1 ;AN000;color index number assigned
760 DW 0 ;AN000;default change/minus status
761 DW 1 ;AN000;**;cursor character pos in field
762 DW 1 ;AN000;**;NEW ADD Hor scroll support
763 DW SND_FREQ ;AN000;frequency of error beep
764 DW 0 ;AN000;ASCII code of the key returned
765 DW 0 ;AN000;length of data entered into fld
766 DW 3 ;AC069;SEH ;AN000;**;length of input field
767 DW 0 ;AN000;??;offset of input field
768 DW 0 ;AN000;??;segment of input field
769 DW 0 ;AN000;offset of color attribute buffer
770 DW 0 ;AN000;segment of color attr buffer
771 DW 0 ;AN000;length of field's default value
772 DW 0 ;AN000;offset field's default value
773 DW 0 ;AN000;segment field's default value
774 DW 0 ;AN000;length of return string
775 DW 0 ;AN000;offset of return string
776 DW 0 ;AN000;segment of return string
777 DW WR_ON_OFF_CHAR_LEN ;AN000;length of allow chars
778 DW WR_ON_OFF_CHAR ;AN000;offset of allow chars
779 DW DATA ;AN000;segment of allow chars
780 DW 0 ;AN000;length of skip chars
781 DW 0 ;AN000;offset of skip chars
782 DW 0 ;AN000;segment of skip chars
783 DW 0 ;AN000;length of allow once chars
784 DW 0 ;AN000;offset of allow once chars
785 DW 0 ;AN000;segment of allow once chars
786 DW 2 ;AN000;precision of decimal point
787 DW 0 ;AN000;low numeric range (low intrgr)
788 DW 0 ;AN000;low numeric range (high intrgr)
789 DW 0 ;AN000;high numeric range (low intrgr)
790 DW 0 ;AN000;high numeric range (high intrgr)
791 DW 0 ;AN000;beginning row of minus and plus
792 DW 0 ;AN000;beginning col of minus & plus
793 DW 0 ;AN000;length of minus sign string
794 DW 0 ;AN000;offset of minus sign string
795 DW 0 ;AN000;segment of minus sign string
796 DW 0 ;AN000;length of plus sign string
797 DW 0 ;AN000;offset of plus sign string
798 DW 0 ;AN000;segment of plus sign string
799WR_ON_OFF_CHAR DB ' OFNofn' ;AN000;
800WR_ON_OFF_CHAR_LEN EQU ($-WR_ON_OFF_CHAR) ;AN000;
801;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
802;
803; ICB 15 STR_BUFFERS
804;
805;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
806WR_ICB15 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
807 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
808 DW ICB_HOR ;AC069;SEH ;AN000;option word three
809 DW 0 ;AN000;option word four
810 DW 9 ;AN000;**;upper left corner field row
811 DW 26 ;AN000;**;upper left corner field column
812 DW 7 ;AN000;**;number of chars before wrapping
813 DW 1 ;AN000;color index number assigned
814 DW 0 ;AN000;default change/minus status
815 DW 1 ;AN000;**;cursor character pos in field
816 DW 1 ;AN000;**;NEW ADD Hor scroll support
817 DW SND_FREQ ;AN000;frequency of error beep
818 DW 0 ;AN000;ASCII code of the key returned
819 DW 0 ;AN000;length of data entered into fld
820 DW 7 ;AC069;SEH ;AN000;**;length of input field
821 DW 0 ;AN000;??;offset of input field
822 DW 0 ;AN000;??;segment of input field
823 DW 0 ;AN000;offset of color attribute buffer
824 DW 0 ;AN000;segment of color attr buffer
825 DW 0 ;AN000;length of field's default value
826 DW 0 ;AN000;offset field's default value
827 DW 0 ;AN000;segment field's default value
828 DW 0 ;AN000;length of return string
829 DW 0 ;AN000;offset of return string
830 DW 0 ;AN000;segment of return string
831 DW WR_BUFFERS_LEN ;AN000;length of allow chars
832 DW WR_BUFFERS ;AN000;offset of allow chars
833 DW DATA ;AN000;segment of allow chars
834 DW 0 ;AN000;length of skip chars
835 DW 0 ;AN000;offset of skip chars
836 DW 0 ;AN000;segment of skip chars
837 DW 0 ;AN000;length of allow once chars
838 DW 0 ;AN000;offset of allow once chars
839 DW 0 ;AN000;segment of allow once chars
840 DW 2 ;AN000;precision of decimal point
841 DW 0 ;AN000;low numeric range (low intrgr)
842 DW 0 ;AN000;low numeric range (high intrgr)
843 DW 0 ;AN000;high numeric range (low intrgr)
844 DW 0 ;AN000;high numeric range (high intrgr)
845 DW 0 ;AN000;beginning row of minus and plus
846 DW 0 ;AN000;beginning col of minus & plus
847 DW 0 ;AN000;length of minus sign string
848 DW 0 ;AN000;offset of minus sign string
849 DW 0 ;AN000;segment of minus sign string
850 DW 0 ;AN000;length of plus sign string
851 DW 0 ;AN000;offset of plus sign string
852 DW 0 ;AN000;segment of plus sign string
853 ;
854WR_BUFFERS DB ' ,0-9,,,,' ;AN000;
855WR_BUFFERS_LEN EQU $-WR_BUFFERS ;AN000;
856;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
857;
858; ICB 16 STR_DOS_APPEND_P formerly STR_CPSW ;AC000;JW
859;
860;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
861WR_ICB16 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
862 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
863 DW ICB_HOR+ICB_WHM+ICB_WEN+ICB_WDL+ICB_WAR+ICB_WBS ;AN000;option word three
864 DW 0 ;AN000;option word four
865 DW 11 ;AN000;**;upper left corner field row
866 DW 30 ;AN000;**;upper left corner field column
867 DW 40 ;AN000;**;number of chars before wrapping
868 DW 1 ;AN000;color index number assigned
869 DW 0 ;AN000;default change/minus status
870 DW 1 ;AN000;**;cursor character pos in field
871 DW 1 ;AN000;**;NEW ADD Hor scroll support
872 DW SND_FREQ ;AN000;frequency of error beep
873 DW 0 ;AN000;ASCII code of the key returned
874 DW 0 ;AN000;length of data entered into fld
875 DW 0 ;AN000;**;length of input field
876 DW 0 ;AN000;??;offset of input field
877 DW 0 ;AN000;??;segment of input field
878 DW 0 ;AN000;offset of color attribute buffer
879 DW 0 ;AN000;segment of color attr buffer
880 DW 0 ;AN000;length of field's default value
881 DW 0 ;AN000;offset field's default value
882 DW 0 ;AN000;segment field's default value
883 DW 0 ;AN000;length of return string
884 DW 0 ;AN000;offset of return string
885 DW 0 ;AN000;segment of return string
886 DW WR_ALLOW_CHAR_LEN ;AN000;length of allow chars
887 DW WR_ALLOW_CHAR ;AN000;offset of allow chars
888 DW DATA ;AN000;segment of allow chars
889 DW 0 ;AN000;length of skip chars
890 DW 0 ;AN000;offset of skip chars
891 DW 0 ;AN000;segment of skip chars
892 DW 0 ;AN000;length of allow once chars
893 DW 0 ;AN000;offset of allow once chars
894 DW 0 ;AN000;segment of allow once chars
895 DW 2 ;AN000;precision of decimal point
896 DW 0 ;AN000;low numeric range (low intrgr)
897 DW 0 ;AN000;low numeric range (high intrgr)
898 DW 0 ;AN000;high numeric range (low intrgr)
899 DW 0 ;AN000;high numeric range (high intrgr)
900 DW 0 ;AN000;beginning row of minus and plus
901 DW 0 ;AN000;beginning col of minus & plus
902 DW 0 ;AN000;length of minus sign string
903 DW 0 ;AN000;offset of minus sign string
904 DW 0 ;AN000;segment of minus sign string
905 DW 0 ;AN000;length of plus sign string
906 DW 0 ;AN000;offset of plus sign string
907 DW 0 ;AN000;segment of plus sign string
908;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
909;
910; ICB 17 STR_FCBS
911;
912;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
913WR_ICB17 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
914 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
915 DW ICB_HOR ;AC069;SEH ;AN000;option word three
916 DW 0 ;AN000;option word four
917 DW 10 ;AC000;JW ;**;upper left corner field row
918 DW 26 ;AN000;**;upper left corner field column
919 DW 7 ;AN000;**;number of chars before wrapping
920 DW 1 ;AN000;color index number assigned
921 DW 0 ;AN000;default change/minus status
922 DW 1 ;AN000;**;cursor character pos in field
923 DW 1 ;AN000;**;NEW ADD Hor scroll support
924 DW SND_FREQ ;AN000;frequency of error beep
925 DW 0 ;AN000;ASCII code of the key returned
926 DW 0 ;AN000;length of data entered into fld
927 DW 7 ;AC069;SEH ;AN000;**;length of input field
928 DW 0 ;AN000;??;offset of input field
929 DW 0 ;AN000;??;segment of input field
930 DW 0 ;AN000;offset of color attribute buffer
931 DW 0 ;AN000;segment of color attr buffer
932 DW 0 ;AN000;length of field's default value
933 DW 0 ;AN000;offset field's default value
934 DW 0 ;AN000;segment field's default value
935 DW 0 ;AN000;length of return string
936 DW 0 ;AN000;offset of return string
937 DW 0 ;AN000;segment of return string
938 DW WR_FCBS_LEN ;AN000;length of allow chars
939 DW WR_FCBS ;AN000;offset of allow chars
940 DW DATA ;AN000;segment of allow chars
941 DW 0 ;AN000;length of skip chars
942 DW 0 ;AN000;offset of skip chars
943 DW 0 ;AN000;segment of skip chars
944 DW 0 ;AN000;length of allow once chars
945 DW 0 ;AN000;offset of allow once chars
946 DW 0 ;AN000;segment of allow once chars
947 DW 2 ;AN000;precision of decimal point
948 DW 0 ;AN000;low numeric range (low intrgr)
949 DW 0 ;AN000;low numeric range (high intrgr)
950 DW 0 ;AN000;high numeric range (low intrgr)
951 DW 0 ;AN000;high numeric range (high intrgr)
952 DW 0 ;AN000;beginning row of minus and plus
953 DW 0 ;AN000;beginning col of minus & plus
954 DW 0 ;AN000;length of minus sign string
955 DW 0 ;AN000;offset of minus sign string
956 DW 0 ;AN000;segment of minus sign string
957 DW 0 ;AN000;length of plus sign string
958 DW 0 ;AN000;offset of plus sign string
959 DW 0 ;AN000;segment of plus sign string
960 ;
961WR_FCBS DB ' ,0-9,,,,' ;AN000;
962WR_FCBS_LEN EQU ($-WR_FCBS) ;AN000;
963;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
964;
965; ICB 18 STR_FILES
966;
967;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
968WR_ICB18 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
969 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
970 DW ICB_HOR ;AC069;SEH ;AN000;option word three
971 DW 0 ;AN000;option word four
972 DW 11 ;AC000;JW ;**;upper left corner field row
973 DW 26 ;AN000;**;upper left corner field column
974 DW 3 ;AN000;**;number of chars before wrapping
975 DW 1 ;AN000;color index number assigned
976 DW 0 ;AN000;default change/minus status
977 DW 1 ;AN000;**;cursor character pos in field
978 DW 1 ;AN000;**;NEW ADD Hor scroll support
979 DW SND_FREQ ;AN000;frequency of error beep
980 DW 0 ;AN000;ASCII code of the key returned
981 DW 0 ;AN000;length of data entered into fld
982 DW 3 ;AC069;SEH ;AN000;**;length of input field
983 DW 0 ;AN000;??;offset of input field
984 DW 0 ;AN000;??;segment of input field
985 DW 0 ;AN000;offset of color attribute buffer
986 DW 0 ;AN000;segment of color attr buffer
987 DW 0 ;AN000;length of field's default value
988 DW 0 ;AN000;offset field's default value
989 DW 0 ;AN000;segment field's default value
990 DW 0 ;AN000;length of return string
991 DW 0 ;AN000;offset of return string
992 DW 0 ;AN000;segment of return string
993 DW WR_BUFFERS_LEN ;AN000;length of allow chars
994 DW WR_BUFFERS ;AN000;offset of allow chars
995 DW DATA ;AN000;segment of allow chars
996 DW 0 ;AN000;length of skip chars
997 DW 0 ;AN000;offset of skip chars
998 DW 0 ;AN000;segment of skip chars
999 DW 0 ;AN000;length of allow once chars
1000 DW 0 ;AN000;offset of allow once chars
1001 DW 0 ;AN000;segment of allow once chars
1002 DW 2 ;AN000;precision of decimal point
1003 DW 0 ;AN000;low numeric range (low intrgr)
1004 DW 0 ;AN000;low numeric range (high intrgr)
1005 DW 0 ;AN000;high numeric range (low intrgr)
1006 DW 0 ;AN000;high numeric range (high intrgr)
1007 DW 0 ;AN000;beginning row of minus and plus
1008 DW 0 ;AN000;beginning col of minus & plus
1009 DW 0 ;AN000;length of minus sign string
1010 DW 0 ;AN000;offset of minus sign string
1011 DW 0 ;AN000;segment of minus sign string
1012 DW 0 ;AN000;length of plus sign string
1013 DW 0 ;AN000;offset of plus sign string
1014 DW 0 ;AN000;segment of plus sign string
1015;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1016;
1017; ICB 19 STR_LASTDRIVE
1018;
1019;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1020WR_ICB19 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
1021 DW ICB_DEL+ICB_UPC+ICB_CSW ;AN000;option word two
1022 DW ICB_HOR ;AC069;SEH ;AN000;option word three
1023 DW 0 ;AN000;option word four
1024 DW 12 ;AC000;JW ;**;upper left corner field row
1025 DW 26 ;AN000;**;upper left corner field column
1026 DW 1 ;AN000;**;number of chars before wrapping
1027 DW 1 ;AN000;color index number assigned
1028 DW 0 ;AN000;default change/minus status
1029 DW 1 ;AN000;**;cursor character pos in field
1030 DW 1 ;AN000;**;NEW ADD Hor scroll support
1031 DW SND_FREQ ;AN000;frequency of error beep
1032 DW 0 ;AN000;ASCII code of the key returned
1033 DW 0 ;AN000;length of data entered into fld
1034 DW 1 ;AC069;SEH ;AN000;**;length of input field
1035 DW 0 ;AN000;??;offset of input field
1036 DW 0 ;AN000;??;segment of input field
1037 DW 0 ;AN000;offset of color attribute buffer
1038 DW 0 ;AN000;segment of color attr buffer
1039 DW 0 ;AN000;length of field's default value
1040 DW 0 ;AN000;offset field's default value
1041 DW 0 ;AN000;segment field's default value
1042 DW 0 ;AN000;length of return string
1043 DW 0 ;AN000;offset of return string
1044 DW 0 ;AN000;segment of return string
1045 DW WR_ASCII_CHAR_LEN ;AN000;length of allow chars
1046 DW WR_ASCII_CHAR ;AN000;offset of allow chars
1047 DW DATA ;AN000;segment of allow chars
1048 DW 0 ;AN000;length of skip chars
1049 DW 0 ;AN000;offset of skip chars
1050 DW 0 ;AN000;segment of skip chars
1051 DW 0 ;AN000;length of allow once chars
1052 DW 0 ;AN000;offset of allow once chars
1053 DW 0 ;AN000;segment of allow once chars
1054 DW 2 ;AN000;precision of decimal point
1055 DW 0 ;AN000;low numeric range (low intrgr)
1056 DW 0 ;AN000;low numeric range (high intrgr)
1057 DW 0 ;AN000;high numeric range (low intrgr)
1058 DW 0 ;AN000;high numeric range (high intrgr)
1059 DW 0 ;AN000;beginning row of minus and plus
1060 DW 0 ;AN000;beginning col of minus & plus
1061 DW 0 ;AN000;length of minus sign string
1062 DW 0 ;AN000;offset of minus sign string
1063 DW 0 ;AN000;segment of minus sign string
1064 DW 0 ;AN000;length of plus sign string
1065 DW 0 ;AN000;offset of plus sign string
1066 DW 0 ;AN000;segment of plus sign string
1067WR_ASCII_CHAR DB ' ,a-z,,A-Z,' ;AN000;
1068WR_ASCII_CHAR_LEN EQU ($-WR_ASCII_CHAR) ;AN000;
1069;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1070;
1071; ICB 20 STR_STACKS
1072;
1073;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1074WR_ICB20 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
1075 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
1076 DW ICB_HOR ;AC069;SEH ;AN000;option word three
1077 DW 0 ;AN000;option word four
1078 DW 13 ;AC000;JW ;**;upper left corner field row
1079 DW 26 ;AN000;**;upper left corner field column
1080 DW 6 ;AN000;**;number of chars before wrapping
1081 DW 1 ;AN000;color index number assigned
1082 DW 0 ;AN000;default change/minus status
1083 DW 1 ;AN000;**;cursor character pos in field
1084 DW 1 ;AN000;**;NEW ADD Hor scroll support
1085 DW SND_FREQ ;AN000;frequency of error beep
1086 DW 0 ;AN000;ASCII code of the key returned
1087 DW 0 ;AN000;length of data entered into fld
1088 DW 6 ;AC069;SEH ;AN000;**;length of input field
1089 DW 0 ;AN000;??;offset of input field
1090 DW 0 ;AN000;??;segment of input field
1091 DW 0 ;AN000;offset of color attribute buffer
1092 DW 0 ;AN000;segment of color attr buffer
1093 DW 0 ;AN000;length of field's default value
1094 DW 0 ;AN000;offset field's default value
1095 DW 0 ;AN000;segment field's default value
1096 DW 0 ;AN000;length of return string
1097 DW 0 ;AN000;offset of return string
1098 DW 0 ;AN000;segment of return string
1099 DW WR_FCBS_LEN ;AN000;length of allow chars
1100 DW WR_FCBS ;AN000;offset of allow chars
1101 DW DATA ;AN000;segment of allow chars
1102 DW 0 ;AN000;length of skip chars
1103 DW 0 ;AN000;offset of skip chars
1104 DW 0 ;AN000;segment of skip chars
1105 DW 0 ;AN000;length of allow once chars
1106 DW 0 ;AN000;offset of allow once chars
1107 DW 0 ;AN000;segment of allow once chars
1108 DW 2 ;AN000;precision of decimal point
1109 DW 0 ;AN000;low numeric range (low intrgr)
1110 DW 0 ;AN000;low numeric range (high intrgr)
1111 DW 0 ;AN000;high numeric range (low intrgr)
1112 DW 0 ;AN000;high numeric range (high intrgr)
1113 DW 0 ;AN000;beginning row of minus and plus
1114 DW 0 ;AN000;beginning col of minus & plus
1115 DW 0 ;AN000;length of minus sign string
1116 DW 0 ;AN000;offset of minus sign string
1117 DW 0 ;AN000;segment of minus sign string
1118 DW 0 ;AN000;length of plus sign string
1119 DW 0 ;AN000;offset of plus sign string
1120 DW 0 ;AN000;segment of plus sign string
1121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1122;
1123; ICB 21 STR_VERIFY
1124;
1125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1126WR_ICB21 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one
1127 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
1128 DW ICB_HOR ;AC069;SEH ;AN000;option word three
1129 DW 0 ;AN000;option word four
1130 DW 14 ;AC000;JW ;**;upper left corner field row
1131 DW 26 ;AN000;**;upper left corner field column
1132 DW 3 ;AN000;**;number of chars before wrapping
1133 DW 1 ;AN000;color index number assigned
1134 DW 0 ;AN000;default change/minus status
1135 DW 1 ;AN000;**;cursor character pos in field
1136 DW 1 ;AN000;**;NEW ADD Hor scroll support
1137 DW SND_FREQ ;AN000;frequency of error beep
1138 DW 0 ;AN000;ASCII code of the key returned
1139 DW 0 ;AN000;length of data entered into fld
1140 DW 3 ;AC069;SEH ;AN000;**;length of input field
1141 DW 0 ;AN000;??;offset of input field
1142 DW 0 ;AN000;??;segment of input field
1143 DW 0 ;AN000;offset of color attribute buffer
1144 DW 0 ;AN000;segment of color attr buffer
1145 DW 0 ;AN000;length of field's default value
1146 DW 0 ;AN000;offset field's default value
1147 DW 0 ;AN000;segment field's default value
1148 DW 0 ;AN000;length of return string
1149 DW 0 ;AN000;offset of return string
1150 DW 0 ;AN000;segment of return string
1151 DW WR_ON_OFF_CHAR_LEN ;AN000;length of allow chars
1152 DW WR_ON_OFF_CHAR ;AN000;offset of allow chars
1153 DW DATA ;AN000;segment of allow chars
1154 DW 0 ;AN000;length of skip chars
1155 DW 0 ;AN000;offset of skip chars
1156 DW 0 ;AN000;segment of skip chars
1157 DW 0 ;AN000;length of allow once chars
1158 DW 0 ;AN000;offset of allow once chars
1159 DW 0 ;AN000;segment of allow once chars
1160 DW 2 ;AN000;precision of decimal point
1161 DW 0 ;AN000;low numeric range (low intrgr)
1162 DW 0 ;AN000;low numeric range (high intrgr)
1163 DW 0 ;AN000;high numeric range (low intrgr)
1164 DW 0 ;AN000;high numeric range (high intrgr)
1165 DW 0 ;AN000;beginning row of minus and plus
1166 DW 0 ;AN000;beginning col of minus & plus
1167 DW 0 ;AN000;length of minus sign string
1168 DW 0 ;AN000;offset of minus sign string
1169 DW 0 ;AN000;segment of minus sign string
1170 DW 0 ;AN000;length of plus sign string
1171 DW 0 ;AN000;offset of plus sign string
1172 DW 0 ;AN000;segment of plus sign string
1173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1174;
1175; ICB 22 NUM_PRINTER
1176;
1177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1178WR_ICB22 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
1179 DW ICB_DEL+ICB_CSW ;AN000;option word two
1180 DW ICB_HOR ;AC069;SEH ;AN000;option word three
1181 DW 0 ;AN000;option word four
1182 DW 6 ;AN000;**;upper left corner field row
1183 DW 50 ;AN000;**;upper left corner field column
1184 DW 1 ;AN000;**;number of chars before wrapping
1185 DW 1 ;AN000;color index number assigned
1186 DW 0 ;AN000;default change/minus status
1187 DW 1 ;AN000;**;cursor character pos in field
1188 DW 1 ;AN000;**;NEW ADD Hor scroll support
1189 DW SND_FREQ ;AN000;frequency of error beep
1190 DW 0 ;AN000;ASCII code of the key returned
1191 DW 0 ;AN000;length of data entered into fld
1192 DW 1 ;AC069;SEH ;AN000;**;length of input field
1193 DW 0 ;AN000;??;offset of input field
1194 DW 0 ;AN000;??;segment of input field
1195 DW 0 ;AN000;offset of color attribute buffer
1196 DW 0 ;AN000;segment of color attr buffer
1197 DW 0 ;AN000;length of field's default value
1198 DW 0 ;AN000;offset field's default value
1199 DW 0 ;AN000;segment field's default value
1200 DW 0 ;AN000;length of return string
1201 DW 0 ;AN000;offset of return string
1202 DW 0 ;AN000;segment of return string
1203 DW WR_NUM_PTR_LEN ;AN000;length of allow chars
1204 DW WR_NUM_PTR ;AN000;offset of allow chars
1205 DW DATA ;AN000;segment of allow chars
1206 DW 0 ;AN000;length of skip chars
1207 DW 0 ;AN000;offset of skip chars
1208 DW 0 ;AN000;segment of skip chars
1209 DW 0 ;AN000;length of allow once chars
1210 DW 0 ;AN000;offset of allow once chars
1211 DW 0 ;AN000;segment of allow once chars
1212 DW 2 ;AN000;precision of decimal point
1213 DW 0 ;AN000;low numeric range (low intrgr)
1214 DW 0 ;AN000;low numeric range (high intrgr)
1215 DW 0 ;AN000;high numeric range (low intrgr)
1216 DW 0 ;AN000;high numeric range (high intrgr)
1217 DW 0 ;AN000;beginning row of minus and plus
1218 DW 0 ;AN000;beginning col of minus & plus
1219 DW 0 ;AN000;length of minus sign string
1220 DW 0 ;AN000;offset of minus sign string
1221 DW 0 ;AN000;segment of minus sign string
1222 DW 0 ;AN000;length of plus sign string
1223 DW 0 ;AN000;offset of plus sign string
1224 DW 0 ;AN000;segment of plus sign string
1225 ;
1226WR_NUM_PTR DB ' ,0-7,' ;AN000;
1227WR_NUM_PTR_LEN EQU ($-WR_NUM_PTR) ;AN000;
1228;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1229;
1230; ICB 23 NUM_EXT_DISK
1231;
1232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1233WR_ICB23 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;AN000;option word one
1234 DW ICB_DEL+ICB_CSW ;AN000;option word two
1235 DW 0 ;AN000;option word three
1236 DW 0 ;AN000;option word four
1237 DW 5 ;AN000;**;upper left corner field row
1238 DW 55 ;AN000;**;upper left corner field column
1239 DW 1 ;AN000;**;number of chars before wrapping
1240 DW 1 ;AN000;color index number assigned
1241 DW 0 ;AN000;default change/minus status
1242 DW 1 ;AN000;**;cursor character pos in field
1243 DW 1 ;AN000;**;NEW ADD Hor scroll support
1244 DW SND_FREQ ;AN000;frequency of error beep
1245 DW 0 ;AN000;ASCII code of the key returned
1246 DW 0 ;AN000;length of data entered into fld
1247 DW 0 ;AN000;**;length of input field
1248 DW 0 ;AN000;??;offset of input field
1249 DW 0 ;AN000;??;segment of input field
1250 DW 0 ;AN000;offset of color attribute buffer
1251 DW 0 ;AN000;segment of color attr buffer
1252 DW 0 ;AN000;length of field's default value
1253 DW 0 ;AN000;offset field's default value
1254 DW 0 ;AN000;segment field's default value
1255 DW 0 ;AN000;length of return string
1256 DW 0 ;AN000;offset of return string
1257 DW 0 ;AN000;segment of return string
1258 DW WR_NUM_EXT_LEN ;AN000;length of allow chars
1259 DW WR_NUM_EXT ;AN000;offset of allow chars
1260 DW DATA ;AN000;segment of allow chars
1261 DW 0 ;AN000;length of skip chars
1262 DW 0 ;AN000;offset of skip chars
1263 DW 0 ;AN000;segment of skip chars
1264 DW 0 ;AN000;length of allow once chars
1265 DW 0 ;AN000;offset of allow once chars
1266 DW 0 ;AN000;segment of allow once chars
1267 DW 2 ;AN000;precision of decimal point
1268 DW 0 ;AN000;low numeric range (low intrgr)
1269 DW 0 ;AN000;low numeric range (high intrgr)
1270 DW 0 ;AN000;high numeric range (low intrgr)
1271 DW 0 ;AN000;high numeric range (high intrgr)
1272 DW 0 ;AN000;beginning row of minus and plus
1273 DW 0 ;AN000;beginning col of minus & plus
1274 DW 0 ;AN000;length of minus sign string
1275 DW 0 ;AN000;offset of minus sign string
1276 DW 0 ;AN000;segment of minus sign string
1277 DW 0 ;AN000;length of plus sign string
1278 DW 0 ;AN000;offset of plus sign string
1279 DW 0 ;AN000;segment of plus sign string
1280 ;
1281WR_NUM_EXT DB ' 012' ;AN000;
1282WR_NUM_EXT_LEN EQU ($-WR_NUM_EXT) ;AN000;
1283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1284;
1285; ICB 24 NUM_YEAR
1286;
1287;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1288WR_ICB24 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000; +ICB_CLR ;option word one
1289 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
1290 DW ICB_HOR ;AC069;SEH ;AN000;option word three
1291 DW 0 ;AN000;option word four
1292 DW 6 ;AN000;**;upper left corner field row
1293 DW 24 ;AN000;**;upper left corner field column
1294 DW 4 ;AN000;**;number of chars before wrapping
1295 DW 1 ;AN000;color index number assigned
1296 DW 0 ;AN000;default change/minus status
1297 DW 1 ;AN000;**;cursor character pos in field
1298 DW 1 ;AN000;**;NEW ADD Hor scroll support
1299 DW SND_FREQ ;AN000;frequency of error beep
1300 DW 0 ;AN000;ASCII code of the key returned
1301 DW 0 ;AN000;length of data entered into fld
1302 DW 4 ;AC069;SEH ;AN000;**;length of input field
1303 DW 0 ;AN000;??;offset of input field
1304 DW 0 ;AN000;??;segment of input field
1305 DW 0 ;AN000;offset of color attribute buffer
1306 DW 0 ;AN000;segment of color attr buffer
1307 DW 0 ;AN000;length of field's default value
1308 DW 0 ;AN000;offset field's default value
1309 DW 0 ;AN000;segment field's default value
1310 DW 0 ;AN000;length of return string
1311 DW 0 ;AN000;offset of return string
1312 DW 0 ;AN000;segment of return string
1313 DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars
1314 DW WR_ALLOW_NUM ;AN000;offset of allow chars
1315 DW DATA ;AN000;segment of allow chars
1316 DW 0 ;AN000;length of skip chars
1317 DW 0 ;AN000;offset of skip chars
1318 DW 0 ;AN000;segment of skip chars
1319 DW 0 ;AN000;length of allow once chars
1320 DW 0 ;AN000;offset of allow once chars
1321 DW 0 ;AN000;segment of allow once chars
1322 DW 2 ;AN000;precision of decimal point
1323 DW 0 ;AN000;low numeric range (low intrgr)
1324 DW 0 ;AN000;low numeric range (high intrgr)
1325 DW 0 ;AN000;high numeric range (low intrgr)
1326 DW 0 ;AN000;high numeric range (high intrgr)
1327 DW 0 ;AN000;beginning row of minus and plus
1328 DW 0 ;AN000;beginning col of minus & plus
1329 DW 0 ;AN000;length of minus sign string
1330 DW 0 ;AN000;offset of minus sign string
1331 DW 0 ;AN000;segment of minus sign string
1332 DW 0 ;AN000;length of plus sign string
1333 DW 0 ;AN000;offset of plus sign string
1334 DW 0 ;AN000;segment of plus sign string
1335;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1336;
1337; ICB 25 NUM_MONTH
1338;
1339;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1340WR_ICB25 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one
1341 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
1342 DW ICB_HOR ;AC069;SEH ;AN000;option word three
1343 DW 0 ;AN000;option word four
1344 DW 8 ;AN000;**;upper left corner field row
1345 DW 24 ;AN000;**;upper left corner field column
1346 DW 2 ;AN000;**;number of chars before wrapping
1347 DW 1 ;AN000;color index number assigned
1348 DW 0 ;AN000;default change/minus status
1349 DW 1 ;AN000;**;cursor character pos in field
1350 DW 1 ;AN000;**;NEW ADD Hor scroll support
1351 DW SND_FREQ ;AN000;frequency of error beep
1352 DW 0 ;AN000;ASCII code of the key returned
1353 DW 0 ;AN000;length of data entered into fld
1354 DW 2 ;AC069;SEH ;AN000;**;length of input field
1355 DW 0 ;AN000;??;offset of input field
1356 DW 0 ;AN000;??;segment of input field
1357 DW 0 ;AN000;offset of color attribute buffer
1358 DW 0 ;AN000;segment of color attr buffer
1359 DW 0 ;AN000;length of field's default value
1360 DW 0 ;AN000;offset field's default value
1361 DW 0 ;AN000;segment field's default value
1362 DW 0 ;AN000;length of return string
1363 DW 0 ;AN000;offset of return string
1364 DW 0 ;AN000;segment of return string
1365 DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars
1366 DW WR_ALLOW_NUM ;AN000;offset of allow chars
1367 DW DATA ;AN000;segment of allow chars
1368 DW 0 ;AN000;length of skip chars
1369 DW 0 ;AN000;offset of skip chars
1370 DW 0 ;AN000;segment of skip chars
1371 DW 0 ;AN000;length of allow once chars
1372 DW 0 ;AN000;offset of allow once chars
1373 DW 0 ;AN000;segment of allow once chars
1374 DW 2 ;AN000;precision of decimal point
1375 DW 0 ;AN000;low numeric range (low intrgr)
1376 DW 0 ;AN000;low numeric range (high intrgr)
1377 DW 0 ;AN000;high numeric range (low intrgr)
1378 DW 0 ;AN000;high numeric range (high intrgr)
1379 DW 0 ;AN000;beginning row of minus and plus
1380 DW 0 ;AN000;beginning col of minus & plus
1381 DW 0 ;AN000;length of minus sign string
1382 DW 0 ;AN000;offset of minus sign string
1383 DW 0 ;AN000;segment of minus sign string
1384 DW 0 ;AN000;length of plus sign string
1385 DW 0 ;AN000;offset of plus sign string
1386 DW 0 ;AN000;segment of plus sign string
1387;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1388;
1389; ICB 26 NUM_DAY
1390;
1391;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1392WR_ICB26 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one
1393 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
1394 DW ICB_HOR ;AC069;SEH ;AN000;option word three
1395 DW 0 ;AN000;option word four
1396 DW 10 ;AN000;**;upper left corner field row
1397 DW 24 ;AN000;**;upper left corner field column
1398 DW 2 ;AN000;**;number of chars before wrapping
1399 DW 1 ;AN000;color index number assigned
1400 DW 0 ;AN000;default change/minus status
1401 DW 1 ;AN000;**;cursor character pos in field
1402 DW 1 ;AN000;**;NEW ADD Hor scroll support
1403 DW SND_FREQ ;AN000;frequency of error beep
1404 DW 0 ;AN000;ASCII code of the key returned
1405 DW 0 ;AN000;length of data entered into fld
1406 DW 2 ;AC069;SEH ;AN000;**;length of input field
1407 DW 0 ;AN000;??;offset of input field
1408 DW 0 ;AN000;??;segment of input field
1409 DW 0 ;AN000;offset of color attribute buffer
1410 DW 0 ;AN000;segment of color attr buffer
1411 DW 0 ;AN000;length of field's default value
1412 DW 0 ;AN000;offset field's default value
1413 DW 0 ;AN000;segment field's default value
1414 DW 0 ;AN000;length of return string
1415 DW 0 ;AN000;offset of return string
1416 DW 0 ;AN000;segment of return string
1417 DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars
1418 DW WR_ALLOW_NUM ;AN000;offset of allow chars
1419 DW DATA ;AN000;segment of allow chars
1420 DW 0 ;AN000;length of skip chars
1421 DW 0 ;AN000;offset of skip chars
1422 DW 0 ;AN000;segment of skip chars
1423 DW 0 ;AN000;length of allow once chars
1424 DW 0 ;AN000;offset of allow once chars
1425 DW 0 ;AN000;segment of allow once chars
1426 DW 2 ;AN000;precision of decimal point
1427 DW 0 ;AN000;low numeric range (low intrgr)
1428 DW 0 ;AN000;low numeric range (high intrgr)
1429 DW 0 ;AN000;high numeric range (low intrgr)
1430 DW 0 ;AN000;high numeric range (high intrgr)
1431 DW 0 ;AN000;beginning row of minus and plus
1432 DW 0 ;AN000;beginning col of minus & plus
1433 DW 0 ;AN000;length of minus sign string
1434 DW 0 ;AN000;offset of minus sign string
1435 DW 0 ;AN000;segment of minus sign string
1436 DW 0 ;AN000;length of plus sign string
1437 DW 0 ;AN000;offset of plus sign string
1438 DW 0 ;AN000;segment of plus sign string
1439;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1440;
1441; ICB 27 NUM_HOUR
1442;
1443;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1444WR_ICB27 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one
1445 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
1446 DW ICB_HOR ;AC069;SEH ;AN000;option word three
1447 DW 0 ;AN000;option word four
1448 DW 16 ;AN000;**;upper left corner field row
1449 DW 24 ;AN000;**;upper left corner field column
1450 DW 2 ;AN000;**;number of chars before wrapping
1451 DW 1 ;AN000;color index number assigned
1452 DW 0 ;AN000;default change/minus status
1453 DW 1 ;AN000;**;cursor character pos in field
1454 DW 1 ;AN000;**;NEW ADD Hor scroll support
1455 DW SND_FREQ ;AN000;frequency of error beep
1456 DW 0 ;AN000;ASCII code of the key returned
1457 DW 0 ;AN000;length of data entered into fld
1458 DW 2 ;AC069;SEH ;AN000;**;length of input field
1459 DW 0 ;AN000;??;offset of input field
1460 DW 0 ;AN000;??;segment of input field
1461 DW 0 ;AN000;offset of color attribute buffer
1462 DW 0 ;AN000;segment of color attr buffer
1463 DW 0 ;AN000;length of field's default value
1464 DW 0 ;AN000;offset field's default value
1465 DW 0 ;AN000;segment field's default value
1466 DW 0 ;AN000;length of return string
1467 DW 0 ;AN000;offset of return string
1468 DW 0 ;AN000;segment of return string
1469 DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars
1470 DW WR_ALLOW_NUM ;AN000;offset of allow chars
1471 DW DATA ;AN000;segment of allow chars
1472 DW 0 ;AN000;length of skip chars
1473 DW 0 ;AN000;offset of skip chars
1474 DW 0 ;AN000;segment of skip chars
1475 DW 0 ;AN000;length of allow once chars
1476 DW 0 ;AN000;offset of allow once chars
1477 DW 0 ;AN000;segment of allow once chars
1478 DW 2 ;AN000;precision of decimal point
1479 DW 0 ;AN000;low numeric range (low intrgr)
1480 DW 0 ;AN000;low numeric range (high intrgr)
1481 DW 0 ;AN000;high numeric range (low intrgr)
1482 DW 0 ;AN000;high numeric range (high intrgr)
1483 DW 0 ;AN000;beginning row of minus and plus
1484 DW 0 ;AN000;beginning col of minus & plus
1485 DW 0 ;AN000;length of minus sign string
1486 DW 0 ;AN000;offset of minus sign string
1487 DW 0 ;AN000;segment of minus sign string
1488 DW 0 ;AN000;length of plus sign string
1489 DW 0 ;AN000;offset of plus sign string
1490 DW 0 ;AN000;segment of plus sign string
1491;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1492;
1493; ICB 28 NUM_MINUTE
1494;
1495;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1496WR_ICB28 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one
1497 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
1498 DW ICB_HOR ;AC069;SEH ;AN000;option word three
1499 DW 0 ;AN000;option word four
1500 DW 18 ;AN000;**;upper left corner field row
1501 DW 24 ;AN000;**;upper left corner field column
1502 DW 2 ;AN000;**;number of chars before wrapping
1503 DW 1 ;AN000;color index number assigned
1504 DW 0 ;AN000;default change/minus status
1505 DW 1 ;AN000;**;cursor character pos in field
1506 DW 1 ;AN000;**;NEW ADD Hor scroll support
1507 DW SND_FREQ ;AN000;frequency of error beep
1508 DW 0 ;AN000;ASCII code of the key returned
1509 DW 0 ;AN000;length of data entered into fld
1510 DW 2 ;AC069;SEH ;AN000;**;length of input field
1511 DW 0 ;AN000;??;offset of input field
1512 DW 0 ;AN000;??;segment of input field
1513 DW 0 ;AN000;offset of color attribute buffer
1514 DW 0 ;AN000;segment of color attr buffer
1515 DW 0 ;AN000;length of field's default value
1516 DW 0 ;AN000;offset field's default value
1517 DW 0 ;AN000;segment field's default value
1518 DW 0 ;AN000;length of return string
1519 DW 0 ;AN000;offset of return string
1520 DW 0 ;AN000;segment of return string
1521 DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars
1522 DW WR_ALLOW_NUM ;AN000;offset of allow chars
1523 DW DATA ;AN000;segment of allow chars
1524 DW 0 ;AN000;length of skip chars
1525 DW 0 ;AN000;offset of skip chars
1526 DW 0 ;AN000;segment of skip chars
1527 DW 0 ;AN000;length of allow once chars
1528 DW 0 ;AN000;offset of allow once chars
1529 DW 0 ;AN000;segment of allow once chars
1530 DW 2 ;AN000;precision of decimal point
1531 DW 0 ;AN000;low numeric range (low intrgr)
1532 DW 0 ;AN000;low numeric range (high intrgr)
1533 DW 0 ;AN000;high numeric range (low intrgr)
1534 DW 0 ;AN000;high numeric range (high intrgr)
1535 DW 0 ;AN000;beginning row of minus and plus
1536 DW 0 ;AN000;beginning col of minus & plus
1537 DW 0 ;AN000;length of minus sign string
1538 DW 0 ;AN000;offset of minus sign string
1539 DW 0 ;AN000;segment of minus sign string
1540 DW 0 ;AN000;length of plus sign string
1541 DW 0 ;AN000;offset of plus sign string
1542 DW 0 ;AN000;segment of plus sign string
1543;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1544;
1545; ICB 29 NUM_SECOND
1546;
1547;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1548WR_ICB29 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one
1549 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
1550 DW ICB_HOR ;AC0O69;SEH ;AN000;option word three
1551 DW 0 ;AN000;option word four
1552 DW 20 ;AN000;**;upper left corner field row
1553 DW 24 ;AN000;**;upper left corner field column
1554 DW 2 ;AN000;**;number of chars before wrapping
1555 DW 1 ;AN000;color index number assigned
1556 DW 0 ;AN000;default change/minus status
1557 DW 1 ;AN000;**;cursor character pos in field
1558 DW 1 ;AN000;**;NEW ADD Hor scroll support
1559 DW SND_FREQ ;AN000;frequency of error beep
1560 DW 0 ;AN000;ASCII code of the key returned
1561 DW 0 ;AN000;length of data entered into fld
1562 DW 2 ;AC069;SEH ;AN000;**;length of input field
1563 DW 0 ;AN000;??;offset of input field
1564 DW 0 ;AN000;??;segment of input field
1565 DW 0 ;AN000;offset of color attribute buffer
1566 DW 0 ;AN000;segment of color attr buffer
1567 DW 0 ;AN000;length of field's default value
1568 DW 0 ;AN000;offset field's default value
1569 DW 0 ;AN000;segment field's default value
1570 DW 0 ;AN000;length of return string
1571 DW 0 ;AN000;offset of return string
1572 DW 0 ;AN000;segment of return string
1573 DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars
1574 DW WR_ALLOW_NUM ;AN000;offset of allow chars
1575 DW DATA ;AN000;segment of allow chars
1576 DW 0 ;AN000;length of skip chars
1577 DW 0 ;AN000;offset of skip chars
1578 DW 0 ;AN000;segment of skip chars
1579 DW 0 ;AN000;length of allow once chars
1580 DW 0 ;AN000;offset of allow once chars
1581 DW 0 ;AN000;segment of allow once chars
1582 DW 2 ;AN000;precision of decimal point
1583 DW 0 ;AN000;low numeric range (low intrgr)
1584 DW 0 ;AN000;low numeric range (high intrgr)
1585 DW 0 ;AN000;high numeric range (low intrgr)
1586 DW 0 ;AN000;high numeric range (high intrgr)
1587 DW 0 ;AN000;beginning row of minus and plus
1588 DW 0 ;AN000;beginning col of minus & plus
1589 DW 0 ;AN000;length of minus sign string
1590 DW 0 ;AN000;offset of minus sign string
1591 DW 0 ;AN000;segment of minus sign string
1592 DW 0 ;AN000;length of plus sign string
1593 DW 0 ;AN000;offset of plus sign string
1594 DW 0 ;AN000;segment of plus sign string
1595;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1596;
1597; ICB 30 PRIMARY_CP
1598;
1599;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1600WR_ICB30 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one
1601 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
1602 DW ICB_WIN ;AN000;option word three
1603 DW 0 ;AN000;option word four
1604 DW 20 ;AN000;**;upper left corner field row
1605 DW 24 ;AN000;**;upper left corner field column
1606 DW 2 ;AN000;**;number of chars before wrapping
1607 DW 1 ;AN000;color index number assigned
1608 DW 0 ;AN000;default change/minus status
1609 DW 1 ;AN000;**;cursor character pos in field
1610 DW 1 ;AN000;**;NEW ADD Hor scroll support
1611 DW SND_FREQ ;AN000;frequency of error beep
1612 DW 0 ;AN000;ASCII code of the key returned
1613 DW 0 ;AN000;length of data entered into fld
1614 DW 0 ;AN000;**;length of input field
1615 DW 0 ;AN000;??;offset of input field
1616 DW 0 ;AN000;??;segment of input field
1617 DW 0 ;AN000;offset of color attribute buffer
1618 DW 0 ;AN000;segment of color attr buffer
1619 DW ICB_DEFBUF30_L+2 ;AN000;length of field's default value
1620 DW ICB_DEFBUF30 ;AN000;offset field's default value
1621 DW DATA ;AN000;segment field's default value
1622 DW 0 ;AN000;length of return string
1623 DW 0 ;AN000;offset of return string
1624 DW 0 ;AN000;segment of return string
1625 DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars
1626 DW WR_ALLOW_NUM ;AN000;offset of allow chars
1627 DW DATA ;AN000;segment of allow chars
1628 DW 0 ;AN000;length of skip chars
1629 DW 0 ;AN000;offset of skip chars
1630 DW 0 ;AN000;segment of skip chars
1631 DW 0 ;AN000;length of allow once chars
1632 DW 0 ;AN000;offset of allow once chars
1633 DW 0 ;AN000;segment of allow once chars
1634 DW 2 ;AN000;precision of decimal point
1635 DW 0 ;AN000;low numeric range (low intrgr)
1636 DW 0 ;AN000;low numeric range (high intrgr)
1637 DW 0 ;AN000;high numeric range (low intrgr)
1638 DW 0 ;AN000;high numeric range (high intrgr)
1639 DW 0 ;AN000;beginning row of minus and plus
1640 DW 0 ;AN000;beginning col of minus & plus
1641 DW 0 ;AN000;length of minus sign string
1642 DW 0 ;AN000;offset of minus sign string
1643 DW 0 ;AN000;segment of minus sign string
1644 DW 0 ;AN000;length of plus sign string
1645 DW 0 ;AN000;offset of plus sign string
1646 DW 0 ;AN000;segment of plus sign string
1647 ;
1648ICB_DEFBUF30 DW ICB_DEFBUF30_L ;AN000;Define default buffer ASCIIN
1649 DB '850' ;AN000;Define default buffer
1650ICB_DEFBUF30_L EQU $-ICB_DEFBUF30-2 ;AN000;
1651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1652;
1653; ICB 31 COUNTRY_LANG
1654;
1655;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1656WR_ICB31 DW ICB_BEN+ICB_RTA+ICB_LFA+ICB_BKS ;;AN000;+ICB_CLR ;option word one
1657 DW ICB_INS+ICB_DEL+ICB_HOM+ICB_END+ICB_UPC ;AN000;option word two
1658 DW ICB_WIN ;AN000;option word three
1659 DW 0 ;AN000;option word four
1660 DW 20 ;AN000;**;upper left corner field row
1661 DW 24 ;AN000;**;upper left corner field column
1662 DW 2 ;AN000;**;number of chars before wrapping
1663 DW 1 ;AN000;color index number assigned
1664 DW 0 ;AN000;default change/minus status
1665 DW 1 ;AN000;**;cursor character pos in field
1666 DW 1 ;AN000;**;NEW ADD Hor scroll support
1667 DW SND_FREQ ;AN000;frequency of error beep
1668 DW 0 ;AN000;ASCII code of the key returned
1669 DW 0 ;AN000;length of data entered into fld
1670 DW 0 ;AN000;**;length of input field
1671 DW 0 ;AN000;??;offset of input field
1672 DW 0 ;AN000;??;segment of input field
1673 DW 0 ;AN000;offset of color attribute buffer
1674 DW 0 ;AN000;segment of color attr buffer
1675 DW ICB_DEFBUF31_L+2 ;AN000;??;length of field's default value
1676 DW ICB_DEFBUF31 ;AN000;??;offset field's default value
1677 DW DATA ;AN000;??;segment field's default value
1678 DW 0 ;AN000;length of return string
1679 DW 0 ;AN000;offset of return string
1680 DW 0 ;AN000;segment of return string
1681 DW WR_ALLOW_NUM_LEN ;AN000;length of allow chars
1682 DW WR_ALLOW_NUM ;AN000;offset of allow chars
1683 DW DATA ;AN000;segment of allow chars
1684 DW 0 ;AN000;length of skip chars
1685 DW 0 ;AN000;offset of skip chars
1686 DW 0 ;AN000;segment of skip chars
1687 DW 0 ;AN000;length of allow once chars
1688 DW 0 ;AN000;offset of allow once chars
1689 DW 0 ;AN000;segment of allow once chars
1690 DW 2 ;AN000;precision of decimal point
1691 DW 0 ;AN000;low numeric range (low intrgr)
1692 DW 0 ;AN000;low numeric range (high intrgr)
1693 DW 0 ;AN000;high numeric range (low intrgr)
1694 DW 0 ;AN000;high numeric range (high intrgr)
1695 DW 0 ;AN000;beginning row of minus and plus
1696 DW 0 ;AN000;beginning col of minus & plus
1697 DW 0 ;AN000;length of minus sign string
1698 DW 0 ;AN000;offset of minus sign string
1699 DW 0 ;AN000;segment of minus sign string
1700 DW 0 ;AN000;length of plus sign string
1701 DW 0 ;AN000;offset of plus sign string
1702 DW 0 ;AN000;segment of plus sign string
1703 ;
1704ICB_DEFBUF31 DW ICB_DEFBUF31_L ;AN000;Define default buffer ASCIIN
1705 DB 'SG' ;AN000;
1706ICB_DEFBUF31_L EQU $-ICB_DEFBUF31-2 ;AN000;
1707;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1708;
1709; Table of Key Definitions
1710;
1711;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1712KD_BACKSPACE DB 8,0 ;AN000;ASCII backspace
1713KD_UNDOKEY DB 0,59 ;AN000;ASCII code replace default key
1714KD_SWCHKEY DB 0,60 ;AN000;ASCII code switch char direction
1715KD_DEL DB 0,83 ;AN000;extended ASCII delete key
1716KD_CTRLEND DB 0,117 ;AN000;extended ASCII Control-End key
1717KD_HOME DB 0,71 ;AN000;extended ASCII home key
1718KD_END DB 0,79 ;AN000;extended ASCII end key
1719KD_INS DB 0,82 ;AN000;extended ASCII insert key
1720KD_LARROW DB 0,75 ;AN000;extended ASCII left arrow
1721KD_RARROW DB 0,77 ;AN000;extended ASCII right arrow
1722KD_UARROW DB 0,72 ;AN000;extended ASCII up arrow
1723KD_DARROW DB 0,80 ;AN000;extended ASCII down arrow
1724KD_MINUS DB 45,0 ;AN000;ASCII minus sign
1725KD_PLUS DB 43,0 ;AN000;ASCII plus sign
1726;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1727;
1728; Define Buffers and Strings
1729;
1730;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1731WR_ALLOW_CHAR DB ', -�,' ;AN000;
1732WR_ALLOW_CHAR_LEN EQU ($-WR_ALLOW_CHAR) ;AN000;
1733WR_ALLOW_NUM DB ' ,0-9,' ;AN000;
1734WR_ALLOW_NUM_LEN EQU ($-WR_ALLOW_NUM) ;AN000;
1735;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1736DATA ENDS ;AN000;
1737 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 @@
1
2#include "stdio.h" /* ;AN000; */
3#include "stdlib.h" /* ;AN000; */
4#include "string.h" /* ;AN000; */
5#include "dos.h" /* ;AN000; */
6#include "get_stat.h" /* ;AN000; */
7#include "extern.h" /* ;AN000; */
8 /* ;AN000; */
9char read_boot_record(unsigned,unsigned char,unsigned char,unsigned char); /* ;AN000; */
10void DiskIo(union REGS *,union REGS *, struct SREGS *); /* ;AN000; */
11unsigned cylinders_to_mbytes(unsigned,unsigned char,unsigned char); /* ;AN000; */
12char get_drive_parameters(unsigned char); /* ;AN000; */
13char get_disk_info(void); /* ;AN000; */
14 /* ;AN000; */
15/* */ /* ;AN000; */
16char get_disk_info() /* ;AN000; */
17 /* ;AN000; */
18BEGIN /* ;AN000; */
19 /* ;AN000; */
20unsigned char i; /* ;AN000; */
21 /* ;AN000; */
22 /* Initialize values */ /* ;AN000; */
23 number_of_drives = uc(0); /* ;AN000; */
24 for (i=uc(0); i < uc(2); i++) /* ;AN000; */
25 BEGIN /* ;AN000; */
26 total_disk[i] = u(0); /* ;AN000; */
27 total_mbytes[i] = f(0); /* ;AN000; */
28 max_sector[i] = uc(0); /* ;AN000; */
29 max_head[0] = uc(0); /* ;AN000; */
30 END /* ;AN000; */
31 /* ;AN000; */
32 /* See how many drives there are */ /* ;AN000; */
33 if (get_drive_parameters(uc(0x80))) /* ;AN000; */
34 /* ;AN000; */
35 BEGIN /* ;AN000; */
36 /* Get the drive parameters for all drives */ /* ;AN000; */
37 for (i = uc(0); i < number_of_drives;i++) /* ;AN000; */
38 /* ;AN000; */
39 BEGIN /* ;AN000; */
40 if (get_drive_parameters(uc(0x80)+i)) /* ;AN000; */
41 /* ;AN000; */
42 BEGIN /* ;AN000; */
43 /* Save drive parameters */ /* ;AN000; */
44 max_sector[i] = ((unsigned char)(regs.h.cl & 0x3F)); /* ;AN000; */
45 max_head[i] = ((unsigned char)(regs.h.dh +1)); /* ;AN000; */
46 total_disk[i] = ((((unsigned)(regs.h.cl & 0xC0 )) & 0x00C0) << 2)+ ((unsigned)regs.h.ch) +1; /* ;AN000; */
47 total_mbytes[i] = cylinders_to_mbytes(total_disk[i], max_sector[i], max_head[i]); /* ;AN000; */
48 END /* ;AN000; */
49 else /* ;AN000; */
50 BEGIN /* ;AN000; */
51 good_disk[i] = FALSE; /* ;AN000; */
52 return(FALSE); /* ;AN000; */
53 END /* ;AN000; */
54 END /* ;AN000; */
55 return(TRUE); /* ;AN000; */
56 END /* ;AN000; */
57 else /* ;AN000; */
58 /* No drives present */ /* ;AN000; */
59 BEGIN /* ;AN000; */
60 no_fatal_error = FALSE; /* ;AN000; */
61 return(FALSE); /* ;AN000; */
62 END /* ;AN000; */
63END /* ;AN000; */
64 /* ;AN000; */
65 /* ;AN000; */
66 /* ;AN000; */
67 /* ;AN000; */
68/* */ /* ;AN000; */
69char get_drive_parameters(drive) /* ;AN000; */
70 /* ;AN000; */
71unsigned char drive; /* ;AN000; */
72 /* ;AN000; */
73BEGIN /* ;AN000; */
74 /* See how many drives there are */ /* ;AN000; */
75 regs.h.ah = uc(DISK_INFO); /* ;AN000; */
76 regs.h.dl = drive; /* ;AN000; */
77 DiskIo(&regs,&regs,&segregs); /* ;AN000; */
78 /* ;AN000; */
79 /* See if any drives exist */ /* ;AN000; */
80 if ((regs.h.dl == uc(0)) || ((regs.x.cflag & 1) == u(1))) /* ;AN000; */
81 BEGIN /* ;AN000; */
82 return(FALSE); /* ;AN000; */
83 END /* ;AN000; */
84 else /* ;AN000; */
85 BEGIN /* ;AN000; */
86 /* Save the number of drives */ /* ;AN000; */
87 number_of_drives = regs.h.dl; /* ;AN000; */
88 if (number_of_drives < 2) good_disk[1] = FALSE; /* ;AN000; */
89 if (number_of_drives < 1) good_disk[0] = FALSE; /* ;AN000; */
90 return(TRUE); /* ;AN000; */
91 END /* ;AN000; */
92 /* ;AN000; */
93END /* ;AN000; */
94 /* ;AN000; */
95/* */ /* ;AN000; */
96char read_boot_record(cylinder,which_disk,which_head,which_sector) /* ;AN000; */
97 /* ;AN000; */
98unsigned cylinder; /* ;AN000; */
99unsigned char which_disk; /* ;AN000; */
100unsigned char which_head; /* ;AN000; */
101unsigned char which_sector; /* ;AN000; */
102 /* ;AN000; */
103BEGIN /* ;AN000; */
104 /* ;AN000; */
105char far *buffer_pointer = boot_record; /* ;AN000; */
106 /* ;AN000; */
107 /* Setup read, always on a cylinder boundary */ /* ;AN000; */
108 regs.h.ah = uc(READ_DISK); /* ;AN000; */
109 regs.h.al = uc(1); /* ;AN000; */
110 regs.h.dh = which_head; /* ;AN000; */
111 regs.h.cl = which_sector; /* ;AN000; */
112 /* ;AN000; */
113 /* Specify the disk */ /* ;AN000; */
114 regs.h.dl = which_disk + 0x80; /* ;AN000; */
115 /* ;AN000; */
116 /* Need to scramble CX so that sectors and cyl's are in INT 13 format */ /* ;AN000; */
117 /* ;AN000; */
118 if (cylinder > u(255)) /* ;AN000; */
119 BEGIN /* ;AN000; */
120 regs.h.cl = regs.h.cl | ((char)((cylinder /256) << 6)); /* ;AN000; */
121 END /* ;AN000; */
122 regs.h.ch = (unsigned char)(cylinder & 0xFF); /* ;AN000; */
123 /* ;AN000; */
124 /* Point at the place to write the boot record */ /* ;AN000; */
125 regs.x.bx = FP_OFF(buffer_pointer); /* ;AN000; */
126 segregs.es = FP_SEG(buffer_pointer); /* ;AN000; */
127 /* ;AN000; */
128 /* read in the boot record */ /* ;AN000; */
129 DiskIo(&regs,&regs,&segregs); /* ;AN000; */
130 /* Check for error reading it */ /* ;AN000; */
131 if ((regs.x.cflag & 1) != u(1)) /* ;AN000; */
132 BEGIN /* ;AN000; */
133 return(TRUE); /* ;AN000; */
134 END /* ;AN000; */
135 else /* ;AN000; */
136 BEGIN /* ;AN000; */
137 /* Tell user there was an error */ /* ;AN000; */
138 good_disk[which_disk] = FALSE; /* ;AN000; */
139 return(FALSE); /* ;AN000; */
140 END /* ;AN000; */
141END /* ;AN000; */
142 /* ;AN000; */
143/* */ /* ;AN000; */
144void DiskIo(InRegs,OutRegs,SegRegs) /* ;AN000; */
145union REGS *InRegs; /* ;AN000; */
146union REGS *OutRegs; /* ;AN000; */
147struct SREGS *SegRegs; /* ;AN000; */
148 /* ;AN000; */
149BEGIN /* ;AN000; */
150 /* ;AN000; */
151 char *WritePtr; /* ;AN000; */
152 /* ;AN000; */
153#ifdef DEBUG /* ;AN000; */
154 /* ;AN000; */
155 switch(InRegs->h.ah) /* ;AN000; */
156 { /* ;AN000; */
157 case 0: /* ;AN000; */
158 case 1: /* ;AN000; */
159 case 2: /* ;AN000; */
160 case 4: /* ;AN000; */
161 case 8: /* ;AN000; */
162 case 15: /* ;AN000; */
163 case 16: /* ;AN000; */
164 int86x((int)DISK,InRegs,OutRegs,SegRegs); /* ;AN000; */
165 break; /* ;AN000; */
166 /* ;AN000; */
167 default: /* ;AN000; */
168 WritePtr = getenv("WRITE"); /* ;AN000; */
169 if (strcmpi(WritePtr,"ON") != 0) /* ;AN000; */
170 BEGIN /* ;AN000; */
171 printf("\nDisallowing Disk I/O Request\n"); /* ;AN000; */
172 printf("AX:%04X BX:%04X CX:%04X DX:%04X ES:%04X\n", /* ;AN000; */
173 InRegs->x.ax,InRegs->x.bx,InRegs->x.cx,InRegs->x.dx,SegRegs->es); /* ;AN000; */
174 /* ;AN000; */
175 OutRegs->h.ah = (unsigned char) 0; /* ;AN000; */
176 OutRegs->x.cflag = (unsigned) 0; /* ;AN000; */
177 END /* ;AN000; */
178 else int86x((int)DISK,InRegs,OutRegs,SegRegs); /* ;AN000; */
179 /* ;AN000; */
180 break; /* ;AN000; */
181 /* ;AN000; */
182 } /* ;AN000; */
183 /* ;AN000; */
184#else /* ;AN000; */
185 /* ;AN000; */
186 int86x((int)DISK,InRegs,OutRegs,SegRegs); /* ;AN000; */
187 /* ;AN000; */
188#endif /* ;AN000; */
189 /* ;AN000; */
190 return; /* ;AN000; */
191 /* ;AN000; */
192END /* ;AN000; */
193 /* ;AN000; */
194 \ 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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3;
4;
5;
6;
7; Change History:
8;
9;
10; ;AN000; S.R.
11; ;AN000; D.T.
12; ;AN001; DCR219
13; ;AN002; P1132 & P1136
14; ;AN003; P1757
15; ;AN004; P2683 - bad diskette in b:
16;
17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
18INCLUDE MAC_EQU.INC ;AN000;
19INCLUDE PANEL.MAC ;AN000;
20INCLUDE STRUC.INC ;AN000;
21INCLUDE MACROS.INC ;AN000;
22INCLUDE MACROS8.INC ;AN000;
23INCLUDE VARSTRUC.INC ;AN000;
24INCLUDE EXT.INC ;AN000;
25INCLUDE PAN-LIST.INC ;AN000;
26INCLUDE CASEXTRN.INC ;AN000;
27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
28 ;
29EXTRN HANDLE_PANEL_CALL2:FAR ;AN000;
30EXTRN HANDLE_PANEL_CALL3:FAR ;AN111;JW
31EXTRN FIND_FILE_ROUTINE:FAR ;AN000;
32EXTRN DISPLAY_MESSAGE_ROUTINE:FAR ;AN000;DT
33EXTRN BEEP_ROUTINE:FAR ;AN000;DT
34 ;
35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
36DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
37NULl_DEVICE DB 'nul',0 ;AN000;
38CON_DEVICE DB 'con',0 ;AN000;
39SUB_PROGRAM DB 0 ;AN000;
40EXEC_ERR DB 0 ;AN000;
41 PUBLIC DSKCPY_WHICH,DSKCPY_PAN1,DSKCPY_PAN2;AN000;
42 PUBLIC DSKCPY_PAN3,DSKCPY_OPTION,DSKCPY_SOURCE;AN000;
43DSKCPY_WHICH DB 0 ;AN000;DT
44;DSKCPY_TO_A_720 EQU 0 ;AN000;DT (MACROS8.INC for actual equates)
45;DSKCPY_TO_A_360 EQU 1 ;AN000;DT
46;DSKCPY_TO_B EQU 2 ;AN000;DT
47
48DSKCPY_OPTION DB 0 ;AN000;DT
49;SOURCE1 EQU 0 ;AN000;DT
50;NO_SOURCE1 EQU 1 ;AN000;DT
51
52DSKCPY_SOURCE DW 0 ;AN000;DT offset of filename to check for on diskette
53DSKCPY_PAN1 DW 0 ;AN000;DT
54DSKCPY_PAN2 DW 0 ;AN000;DT
55DSKCPY_PAN3 DW 0 ;AN000;DT
56
57 PUBLIC DSKCPY_ERR ;AN000;
58DSKCPY_ERR DB 0 ;AN000;
59;DSKCPY_EXIT EQU 1
60
61DATA ENDS ;AN000; DATA
62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
63;
64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
65 EXTRN CHK_W_PROTECT_FLAG:BYTE ;AN000;
66 EXTRN W_PROTECT_FLAG:BYTE ;AN000;
67 EXTRN EXIT_SELECT:FAR ;AN000;
68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
69;
70;
71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
72CODE_FAR SEGMENT PARA PUBLIC 'CODE' ;AN000; Segment for far routine
73 ASSUME CS:CODE_FAR,DS:DATA ;AN000;
74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
75;
76; The critical error handler. This routine should be placed in the CODE segment.
77;
78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
79OLD_STACK_SEG DW ? ;AN001;GHG
80OLD_STACK_OFF DW ? ;AN001;GHG
81 ;GHG
82 PUBLIC INT_24_VECTOR ;AN000;
83INT_24_VECTOR: ;AN000;
84
85 PUSHH <BX,CX,DX,SI,DI,ES,DS> ;AN000;
86 MOV AX,DATA ;AN000;
87 MOV DS,AX ;AN000;
88 MOV ES,AX ;AN000;
89 ;
90 MOV AX,CS ;AN002;S;GHG
91 CLI ;AN002;S;GHG
92 MOV OLD_STACK_SEG,SS ;AN002;S;GHG
93 MOV OLD_STACK_OFF,SP ;AN002;S;GHG
94 MOV SS,AX ;AN002;S;GHG
95 LEA SP,NEW_STACK_START ;AN002;S;GHG
96 STI ;AN002;S;GHG
97 ;
98 AND DI, 0FFH ;AN000; Mask off the high byte
99 .IF < CHK_W_PROTECT_FLAG EQ TRUE > ;AN000; Is this a check for write protect?
100 .IF < DI EQ 0 > ;AN000; Is this a write protect error?
101 MOV W_PROTECT_FLAG, TRUE ;AN000; If so, indicate to the calling program
102 .ENDIF ;AN000;
103 MOV AL, 3 ;AN000; Get DOS to trash this call
104 JMP EXIT_THE_INT ;AN000; Exit the interrupt
105 .ENDIF ;AN000;
106 ;
107 .IF < DI eq 0 > ;AN002;GHG
108 HANDLE_ERROR PAN_WRITE_PROT,2 ;AN002;GHG
109 MOV AL,1 ;AN002;GHG
110 .ELSEIF < DI eq 2 > ;AN002;GHG
111 HANDLE_ERROR PAN_DRIVE_ERROR,2 ;AN002;GHG
112 MOV AL,1 ;AN002;GHG
113 .ELSE ;AN002;GHG
114 .IF < SUB_PROGRAM EQ TRUE > ;AN000;
115 JMP END_SUB_PROGRAM ;AN000;
116 .ENDIF ;AN000;
117 MOV AL, 3 ;AN000; Fail this system call
118 .ENDIF ;AN000;
119EXIT_THE_INT: ;AN000;
120 MOV SS,OLD_STACK_SEG ;AN002;S;GHG
121 MOV SP,OLD_STACK_OFF ;AN002;S;GHG
122 POPP <DS,ES,DI,SI,DX,CX,BX> ;AN000;
123 IRET ;AN000; Return from the interrupt
124 ;
125END_SUB_PROGRAM: ;AN000;
126 MOV SS,OLD_STACK_SEG ;AN002;S;GHG
127 MOV SP,OLD_STACK_OFF ;AN002;S;GHG
128 POPP <DS,ES,DI,SI,DX,CX,BX> ;AN000;
129 ADD SP, 6 ;AN000;
130 ;
131 MOV AH, 4CH ;AN000;
132 MOV AL, 01 ;AN000;
133 DOSCALL ;AN000;
134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
135;
136; The DISKCOPY INT 2F INTERFACE
137;
138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
139 ;
140 EVEN ;AN000;
141NEW_STACK DW 200 DUP('S') ;AN001;GHG
142NEW_STACK_START DW 0 ;AN001;GHG
143 ;GHG
144FIRST_CALL DB 0 ;AN001;GHG
145 ;GHG
146 PUBLIC INT_2F_VECTOR ;AN001;GHG
147INT_2F_VECTOR: ;AN001;GHG
148 .IF < AX EQ 0ADC1H > near ;AN001;GHG
149 ;GHG
150 PUSHH <BX,CX,DX,SI,DI,ES,DS> ;AN001;GHG
151 MOV AX,DATA ;AN001;GHG
152 MOV DS,AX ;AN001;GHG
153 MOV ES,AX ;AN001;GHG
154 ;GHG
155 MOV AX,CS ;AN001;S;GHG
156 CLI ;AN001;S;GHG
157 MOV OLD_STACK_SEG,SS ;AN001;S;GHG
158 MOV OLD_STACK_OFF,SP ;AN001;S;GHG
159 MOV SS,AX ;AN001;S;GHG
160 LEA SP,NEW_STACK_START ;AN001;S;GHG
161 STI ;AN001;S;GHG
162 ;GHG
163
164 .IF < DSKCPY_WHICH eq DSKCPY_TO_B > near ;AN000;DT
165 ;
166 .IF < BX EQ 9 > and ;AN000;DT
167 .IF < DSKCPY_PAN1 ne NOPANEL > ;AN000;DT
168 .REPEAT ;AN000;DT
169 MOV BX,PAN_INSTALL_DOS ;AN000;DT
170 MOV AX,DSKCPY_PAN1 ;AN000;DT
171 CALL HANDLE_PANEL_CALL2 ;AN000;DT
172 CALL HANDLE_KEYSTROKE ;AN000;DT
173 MOV DI, DSKCPY_SOURCE ;AN000;DT
174 MOV CX, 0 ;AN000;DT
175 CALL FIND_FILE_ROUTINE ;AN000;DT
176 .LEAVE < nc > ;AN000;DT
177 MOV BX,ERR_DOS_DISK ;AN000;DT
178 CALL INT2F_ERROR ;AN000;DT
179 ;AN000;DT
180 .UNTIL ;AN000;DT
181 ;AN000;DT
182 MOV BX,PAN_INSTALL_DOS ;AN000;DT
183 MOV AX,DSKCPY_PAN2 ;AN000;DT
184 CALL HANDLE_PANEL_CALL2 ;AN000;DT
185 ;AN000;DT
186 .ELSEIF <BX eq 13 > ;AN000;DT
187 MOV BX,PAN_DRIVE_ERROR ;AN000;
188 CALL INT2F_ERROR ;AN000;DT
189 ;
190 .ELSEIF <BX eq 14 > ;AN001;GHG write protect
191 MOV BX,PAN_WRITE_PROT ;AN000;
192 CALL INT2F_ERROR ;AN000;DT
193 ;
194 .ELSEIF <BX eq 23 > or ;AN004;JW
195 .IF <BX eq 11 > or ;AN004;JW
196 .IF <BX eq 12 > or ;AN004;JW
197 .IF <BX eq 18 > or ;AN004;JW
198 .IF <BX eq 20 > ;AN004;JW
199 MOV BX,PAN_BAD_DISKET ;AN004;JW Bad diskette in b:
200 CALL INT2F_ERROR ;AN004;JW
201 MOV N_DSKCPY_ERR,E_DSKCPY_RETRY ;AN004;JW
202 ;
203 .ELSEIF <BX eq 16 > ;AN001;GHG
204 MOV FIRST_CALL,0 ;AN001;GHG
205 .ELSEIF <BX ne 2 > and ;AN001;GHG
206 .IF <BX ne 7 > and ;AN001;GHG
207 .IF <BX ne 8 > and ;AN001;GHG
208 .IF <BX ne 9 > and ;AN000;DT
209 .IF <BX ne 10 > and ;AN003;JW
210 .IF <BX ne 15 > and ;AN001;GHG
211 .IF <BX ne 17 > and ;AN001;GHG
212 .IF <BX ne 21 > and ;AN001;GHG
213 .IF <BX ne 26 > ;AN001;GHG
214 MOV BX,ERR_GENERAL ;AN000;
215 CALL INT2F_ERROR ;AN000;DT
216 .ENDIF ;AN000;
217 MOV AX,0FFFFH ;AN000;DT
218
219 .ELSEIF < DSKCPY_WHICH eq DSKCPY_TO_A_360 > near ;AN000;DT
220 .IF < BX EQ 8 > ;AN001;GHG
221 .IF < DSKCPY_OPTION eq SOURCE1 > or;AN000;
222 .IF <FIRST_CALL ne 0 > ;AN001;GHG
223 .REPEAT ;AN000;
224 MOV BX,PAN_INSTALL_DOS ;AN000;DT
225 MOV AX,DSKCPY_PAN1 ;AN000;DT
226 CALL HANDLE_PANEL_CALL2 ;AN000;DT
227 CALL HANDLE_KEYSTROKE ;AN000;DT
228 ;AN000;DT
229 MOV DI, DSKCPY_SOURCE ;AN000;DT
230 MOV CX, 0 ;AN000;DT
231 CALL FIND_FILE_ROUTINE ;AN000;DT
232 .LEAVE < nc > ;AN000;DT
233 MOV BX,ERR_DOS_DISK ;AN000;DT
234 CALL INT2F_ERROR ;AN000;DT
235 .UNTIL ;AN000;DT
236 ;AN000;DT
237 .ENDIF ;AN000;
238 MOV BX,PAN_INSTALL_DOS ;AN000;DT
239 MOV AX,DSKCPY_PAN2 ;AN000;DT
240 CALL HANDLE_PANEL_CALL2 ;AN000;DT
241 MOV FIRST_CALL,1 ;AN000;GHG
242 .ELSEIF <BX eq 9 > ;AN001;GHG
243 MOV BX,PAN_INSTALL_DOS ;AN000;DT
244 MOV AX,DSKCPY_PAN3 ;AN000;DT
245 CALL HANDLE_PANEL_CALL2 ;AN000;DT
246 CALL HANDLE_KEYSTROKE ;AN000;DT
247 MOV BX,PAN_INSTALL_DOS ;AN000;DT
248 MOV AX,DSKCPY_PAN2 ;AN000;DT
249 CALL HANDLE_PANEL_CALL2 ;AN000;DT
250 .ELSEIF <BX eq 13 > ;AN000;DT
251 MOV BX,PAN_DRIVE_ERROR ;AN000;
252 CALL INT2F_ERROR ;AN000;DT
253 ;
254 .ELSEIF <BX eq 14 > ;AN001;GHG write protect
255 MOV BX,PAN_WRITE_PROT ;AN000;
256 CALL INT2F_ERROR ;AN000;
257 ;
258 .ELSEIF <BX eq 23 > or ;AN004;JW
259 .IF <BX eq 11 > or ;AN004;JW
260 .IF <BX eq 12 > or ;AN004;JW
261 .IF <BX eq 18 > or ;AN004;JW
262 .IF <BX eq 20 > ;AN004;JW
263 MOV BX,PAN_BAD_DISKET ;AN004;JW Bad diskette in b:
264 CALL INT2F_ERROR ;AN004;JW
265 MOV N_DSKCPY_ERR,E_DSKCPY_RETRY ;AN004;JW
266 ;
267 .ELSEIF <BX eq 16 > ;AN001;GHG
268 MOV FIRST_CALL,0 ;AN001;GHG
269 .ELSEIF <BX ne 2 > and ;AN001;GHG
270 .IF <BX ne 7 > and ;AN001;GHG
271 .IF <BX ne 10 > and ;AN003;JW
272 .IF <BX ne 15 > and ;AN001;GHG
273 .IF <BX ne 17 > and ;AN001;GHG
274 .IF <BX ne 21 > and ;AN001;GHG
275 .IF <BX ne 26 > ;AN001;GHG
276 MOV BX,ERR_GENERAL ;AN000;
277 CALL INT2F_ERROR ;AN000;
278 .ENDIF ;AN001;GHG
279 ;
280 MOV AX,0FFFFH ;AN001;GHG
281 .ELSE near ;AN000;
282 .IF < BX EQ 9 > ;AN001;GHG
283 MOV AX,PAN_DSKCPY_SRC ;AN001;GHG
284 CALL HANDLE_PANEL_CALL ;AN001;GHG
285 CALL HANDLE_KEYSTROKE ;AN001;GHG
286 MOV AX,PAN_DSKCPY_CPY ;AN001;GHG
287 CALL HANDLE_PANEL_CALL ;AN001;GHG
288 .ELSEIF <BX eq 8 > ;AN001;GHG
289 .IF <FIRST_CALL ne 0 > ;AN001;GHG
290 MOV AX,PAN_DSKCPY_TAR ;AN001;GHG
291 CALL HANDLE_PANEL_CALL ;AN001;GHG
292 CALL HANDLE_KEYSTROKE ;AN001;GHG
293 .ELSE ;AN001;GHG
294 MOV FIRST_CALL,1 ;AN001;GHG
295 .ENDIF ;AN001;GHG
296 MOV AX,PAN_DSKCPY_CPY ;AN001;GHG
297 CALL HANDLE_PANEL_CALL ;AN001;GHG
298 .ELSEIF <BX eq 16 > ;AN001;GHG
299 MOV AX,0FFFFH ;AN001;GHG
300 MOV FIRST_CALL,0 ;AN001;GHG
301 JMP INT2F_1 ;AN001;GHG
302 .ELSEIF <BX eq 13 > ;AN000;DT drive not ready
303 MOV BX,PAN_DRIVE_ERROR ;AN000;
304 CALL INT2F_ERROR ;AN000;DT
305 .ELSEIF <BX eq 14 > ;AN001;GHG write protect
306 MOV BX,PAN_WRITE_PROT ;AN000;
307 CALL INT2F_ERROR ;AN000;DT
308 .ELSEIF <BX eq 23 > or ;AN004;JW
309 .IF <BX eq 11 > or ;AN004;JW
310 .IF <BX eq 12 > or ;AN004;JW
311 .IF <BX eq 18 > or ;AN004;JW
312 .IF <BX eq 20 > ;AN004;JW
313 MOV BX,PAN_BAD_DISKET ;AN004;JW Bad diskette in b:
314 CALL INT2F_ERROR ;AN004;JW
315 MOV N_DSKCPY_ERR,E_DSKCPY_RETRY ;AN004;JW
316 ;
317 .ELSEIF <BX ne 2 > and ;AN001;GHG
318 .IF <BX ne 7 > and ;AN001;GHG
319 .IF <BX ne 10 > and ;AN001;GHG
320 .IF <BX ne 15 > and ;AN001;GHG
321 .IF <BX ne 17 > and ;AN001;GHG
322 .IF <BX ne 21 > and ;AN001;GHG
323 .IF <BX ne 26 > ;AN001;GHG
324 MOV BX,ERR_GENERAL ;AN000;
325 CALL INT2F_ERROR ;AN000;DT
326 .ENDIF ;AN001;GHG
327 ;
328 MOV AX,0FFFFH ;AN001;GHG
329
330 .ENDIF ;AN000;DT
331
332INT2F_1: MOV SS,OLD_STACK_SEG ;AN001;S;GHG
333 MOV SP,OLD_STACK_OFF ;AN001;S;GHG
334
335 ;
336 POPP <DS,ES,DI,SI,DX,CX,BX> ;AN001;GHG
337 ;
338 ;
339 IRET ;AN001;GHG
340 .ELSE ;AN001;GHG
341 JMP CS:OLD_INT_2F ;AN001;GHG
342 .ENDIF ;AN001;GHG
343;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
344;
345; The FORMAT INT2F interrupt routine
346;
347;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
348 PUBLIC INT_2F_FORMAT ;AN111;JW
349INT_2F_FORMAT: ;AN111;JW
350 .IF < AX EQ 0ADC1H > near ;AN111;JW
351 ;AN111;JW
352 PUSHH <BX,CX,DX,SI,DI,ES,DS> ;AN111;JW
353 MOV AX,DATA ;AN111;JW
354 MOV DS,AX ;AN111;JW
355 MOV ES,AX ;AN111;JW
356 ;AN111;JW
357 MOV AX,CS ;AN111;JW
358 CLI ;AN111;JW
359 MOV OLD_STACK_SEG,SS ;AN111;JW
360 MOV OLD_STACK_OFF,SP ;AN111;JW
361 MOV SS,AX ;AN111;JW
362 LEA SP,NEW_STACK_START ;AN111;JW
363 STI ;AN111;JW
364 ;AN111;JW
365 .IF < FORMAT_WHICH eq STARTUP > ;AN111;JW
366 MOV AX,SUB_INS_STARTT_S360 ;AN111;JW
367 .ELSE ;AN111;JW
368 MOV AX,SUB_INS_SHELL_S360 ;AN111;JW
369 .ENDIF ;AN111;JW
370 MOV BX,PAN_INST_PROMPT ;AN111;JW
371 CALL HANDLE_PANEL_CALL2 ;AN111;JW
372 CALL HANDLE_KEYSTROKE ;AN111;JW
373 ;AN111;JW
374 .IF < FORMAT_WHICH eq STARTUP > ;AN111;JW
375 MOV AX,FORMAT_STARTUP ;AN111;JW
376 .ELSE ;AN111;JW
377 MOV AX,FORMAT_SHELL ;AN111;JW
378 .ENDIF ;AN111;JW
379 CALL HANDLE_PANEL_CALL3 ;AN111;JW
380 ;AN111;JW
381 MOV SS,OLD_STACK_SEG ;AN111;JW
382 MOV SP,OLD_STACK_OFF ;AN111;JW
383 POPP <DS,ES,DI,SI,DX,CX,BX> ;AN111;JW
384 IRET ;AN111;JW
385 .ELSE ;AN111;JW
386 JMP CS:OLD_INT_2F ;AN111;JW
387 .ENDIF ;AN111;JW
388;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
389;
390; The DISKCOPY INT 2F ERROR ROUTINE
391;
392; Input: BX = error panel
393;
394; Output: none
395;
396;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
397INT2F_ERROR PROC NEAR ;AN000;DT
398 MOV CX,2 ;AN000;DT allow ESC and ENTER
399 CALL HANDLE_ERROR_CALL ;AN000;DT display error panel
400 JNC INT2F_ERROR_EXIT ;AN000;DT if ENTER pressed, then ok
401 ;AN000;DT else ESC
402 MOV DSKCPY_ERR,DSKCPY_EXIT ;AN000;DT indicate user wants to exit
403 MOV AX,4C01H ;AN000;DT and error message already up DOS
404 INT 21H ;AN000;DT exit with error
405 ;AN000;DT
406INT2F_ERROR_EXIT: ;AN000;DT
407 RET ;AN000;DT
408INT2F_ERROR ENDP ;AN000;DT
409 ;;;;;;;;;;;;
410 ;
411;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
412;
413; The DISKCOPY INT 2F INTERFACE (256KB DISKCOPY)
414;
415;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
416 PUBLIC INT_2F_256KB ;AN000;DT
417INT_2F_256KB: ;AN000;DT
418 .IF < AX EQ 0ADC1H > near ;AN000;DT
419 ;AN000;DT
420 PUSHH <BX,CX,DX,SI,DI,ES,DS> ;AN000;DT
421 MOV AX,DATA ;AN000;DT
422 MOV DS,AX ;AN000;DT
423 MOV ES,AX ;AN000;DT
424 ;AN000;DT
425 MOV AX,CS ;AN000;DT
426 CLI ;AN000;DT
427 MOV OLD_STACK_SEG,SS ;AN000;DT
428 MOV OLD_STACK_OFF,SP ;AN000;DT
429 MOV SS,AX ;AN000;DT
430 LEA SP,NEW_STACK_START ;AN000;DT
431 STI ;AN000;DT
432 .IF < BX EQ 9 > ;AN000;DT
433 CLEAR_SCREEN ;AN000;DT
434 DISPLAY_MESSAGE 14 ;AN000;DT insert INSTALL
435 CALL HANDLE_KEY256KB ;AN000;DT
436 CLEAR_SCREEN ;AN000;DT
437 DISPLAY_MESSAGE 15 ;AN000;DT Copying diskettes
438 .ELSEIF <BX eq 8 > ;AN000;DT
439 .IF <FIRST_CALL ne 0 > ;AN000;DT
440 CLEAR_SCREEN ;AN000;DT
441 DISPLAY_MESSAGE 13 ;AN000;DT insert INSTALL COPY
442 CALL HANDLE_KEY256KB ;AN000;DT
443 .ELSE ;AN000;DT
444 MOV FIRST_CALL,1 ;AN000;DT
445 .ENDIF ;AN000;DT
446 CLEAR_SCREEN ;AN000;DT
447 DISPLAY_MESSAGE 15 ;AN000;DT Copying diskettes
448 .ELSEIF <BX eq 16 > ;AN000;DT
449 MOV AX,0FFFFH ;AN000;DT
450 MOV FIRST_CALL,0 ;AN000;DT
451 JMP INT2F_1_ALT ;AN000;DT
452 .ELSEIF <BX eq 13 > ;AN000;DT
453 CLEAR_SCREEN ;AN000;DT
454 DISPLAY_MESSAGE 16 ;AN000;DT Drive door open
455 CALL INT2F_ERRALT ;AN000;DT
456 .ELSEIF <BX eq 14 > ;AN000;DT
457 CLEAR_SCREEN ;AN000;DT
458 DISPLAY_MESSAGE 17 ;AN000;DT Write Protect error
459 CALL INT2F_ERRALT ;AN000;DT
460 ;AN000;DT
461 .ELSEIF <BX ne 2 > and ;AN000;DT
462 .IF <BX ne 7 > and ;AN000;DT
463 .IF <BX ne 10 > and ;AN000;DT
464 .IF <BX ne 15 > and ;AN000;DT
465 .IF <BX ne 17 > and ;AN000;DT
466 .IF <BX ne 21 > and ;AN000;DT
467 .IF <BX ne 26 > ;AN000;DT
468 CLEAR_SCREEN ;AN000;DT
469 DISPLAY_MESSAGE 18 ;AN000;DT General error
470 CALL INT2F_ERRALT ;AN000;DT
471 .ENDIF ;AN000;DT
472 ;AN000;DT
473 MOV AX,0FFFFH ;AN000;DT
474 ;AN000;DT
475INT2F_1_ALT: MOV SS,OLD_STACK_SEG ;AN000;DT
476 MOV SP,OLD_STACK_OFF ;AN000;DT
477 ;AN000;DT
478 POPP <DS,ES,DI,SI,DX,CX,BX> ;AN000;DT
479 IRET ;;AN000;;DT
480 .ELSE ;AN000;DT
481 JMP CS:OLD_INT_2F ;AN000;DT
482 .ENDIF ;AN000;DT
483 ;AN000;DT
484;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
485;
486; The DISKCOPY INT 2F ERROR ROUTINE (256KB)
487;
488; Input: BX = error panel
489;
490; Output: none
491;
492;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
493INT2F_ERRALT PROC NEAR ;AN000;DT
494INT2F_AGN: ;AN000;DT
495 MOV AH,0 ;AN000;DT
496 INT 16H ;AN000;DT get keystroke
497 CMP AL,13 ;AN000;DT If ENTER the continue
498 JE INT2F_ERRALT_EXIT ;AN000;DT
499 CMP AL,27 ;AN000;DT If not ESC the again
500 JE INT2F_ALT_ABORT ;AN000;
501 DISPLAY_MESSAGE 11 ;AN000;DT BEEP
502 JMP INT2F_AGN ;AN000;DT
503INT2F_ALT_ABORT: ;AN000;DT else ESC
504 MOV DSKCPY_ERR,DSKCPY_EXIT ;AN000;DT indicate user wants to exit
505 MOV AX,4C01H ;AN000;DT and error message already up DOS
506 INT 21H ;AN000;DT exit with error
507 ;AN000;DT
508INT2F_ERRALT_EXIT: ;AN000;DT
509 RET ;AN000;DT
510INT2F_ERRALT ENDP ;AN000;DT
511 ;
512;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
513;
514; The INT23 interrupt routine (CTRL-BREAK)
515;
516;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
517;
518 PUBLIC INT_23_VECTOR ;AN074;SEH
519INT_23_VECTOR: ;AN074;SEH
520 ;
521 IRET ;AN074;SEH ignore ctrl-break and return
522 ;
523;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
524;
525; The DISKCOPY GET KEY ROUTINE (256KB)
526;
527; Input: none
528;
529; Output: none
530;
531;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
532HANDLE_KEY256KB PROC NEAR ;AN000;DT
533HAKEY_AGN: ;AN000;DT
534 MOV AH,0 ;AN000;DT
535 INT 16H ;AN000;DT get keystroke
536 CMP AL,13 ;AN000;DT If ENTER the continue
537 JE HAKEY_EXIT ;AN000;DT
538 DISPLAY_MESSAGE 11 ;AN000;DT BEEP
539 JMP HAKEY_AGN ;AN000;DT
540 ;AN000;DT
541HAKEY_EXIT: ;AN000;DT
542 RET ;AN000;DT
543HANDLE_KEY256KB ENDP ;AN000;DT
544
545CODE_FAR ENDS ;AN000;
546 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 @@
1;;****************************************************************************
2;; Assembler MACROS for use with SELECT.
3;; File: MACROS.INC
4;; Latest Change Date: July 28, 1987
5;;
6;; These macros define powerful assembler verbs neccessary for SELECT.
7;;
8;; Note: Many of the macros make use of an ASCII-N string for passing
9;; parameters. The string is defined below.
10;; DW count
11;; DB "string_variable",?
12;;
13;; COUNT is the length of the string and is a word.
14;; It is necessary to follow the string with at least one byte for the
15;; purpose of changing the ASCII-N string to an ASCII-Z string.
16;;
17;;****************************************************************************
18;;****************************************************************************
19;; Macro Change History.
20;;
21;; June 18, 1987 - Split MACROS.INC into 5 smaller files. They are:
22;; MACROS.INC
23;; MACROS2.INC
24;; MACROS3.INC
25;; MACROS4.INC
26;; MACROS5.INC
27;; At the end of the files, there is an INCLUDE statement
28;; to include the next file. Therefore, the modules which
29;; use these macros do not have to add more include statements.
30;; The only one that must have an INCLUDE statement is
31;; MACROS.INC.
32;;
33;; - Removed the PUSHH and POPP macros from the other macro
34;; definitions.
35;;
36;; June 22, 1987 - Added the SCAN_PARAMETERS macro.
37;;
38;; June 24, 1987 - Added the PREPARE_FILE, WRITE_LINE and SAVE_FILE macros.
39;; - Revised the SCAN_PARAMETERS macro to read two of the
40;; parameters from a file instead of the command line.
41;;
42;; June 26, 1987 - Changed the EXEC_PROGRAM macros to perform a call to
43;; EXEC_PROGRAM_ROUTINE which performs the same tasks are the
44;; previously defined macro. EXEC_PROGRAM_ROUTINE was added
45;; to ROUTINES.INC.
46;;
47;; June 29, 1987 - Changed the GET_COUNTRY_INDEX to a subroutine call to
48;; GET_CNTY_INDEX_ROUTINE. The routine has been changed
49;; to get the new information from the structure, NUM_DESIGNATES,
50;; CPSW_STAT, and RESERVED_1.
51;; - Changed GET_COUNTRY_DEFAULTS, GET_KEYBOARD_INDEX and
52;; GET_KEYBOARD macros to perform subroutines calls.
53;;
54;;****************************************************************************
55PAGE ;AN000;
56INCLUDE MAC_EQU.INC ;AN000;
57;;****************************************************************************
58;;
59;; PUSHH: pushes the listed registers on the stack
60;;
61;; SYNTAX: PUSHH <register list>
62;;
63;; INPUT: register list = AX, BX, CX, DX, SI, DI, BP, SS, SP, CS, DS, ES
64;;
65;; OUTPUT: none
66;;
67;; OPERATION:
68;;
69;; PUSHH ALLOWS THE PROGRAMER TO SPECIFY A LIST OF REGISTER TO
70;; BE PUSHED ON A SINGLE LINE.
71;;
72;;****************************************************************************
73PUSHH MACRO REG_LIST ;;AN000;
74 IRP REG,<REG_LIST> ;;AN000;
75 PUSH REG ;;AN000; save registers
76 ENDM ;;AN000;
77 ENDM ;;AN000;
78;;****************************************************************************
79;;
80;; POPP: pops the listed registers on the stack
81;;
82;; SYNTAX: POPP <register list>
83;;
84;; INPUT: register list = AX, BX, CX, DX, SI, DI, BP, SS, SP, CS, DS, ES
85;;
86;; OUTPUT: none
87;;
88;; OPERATION:
89;;
90;; POPP ALLOWS THE PROGRAMER TO SPECIFY A LIST OF REGISTER TO
91;; BE POPPED ON A SINGLE LINE.
92;;
93;;****************************************************************************
94POPP MACRO REG_LIST ;;AN000;
95 IRP REG,<REG_LIST> ;;AN000;
96 POP REG ;;AN000; return registers to initial state
97 ENDM ;;AN000;
98 ENDM ;;AN000;
99;;****************************************************************************
100;;
101;; DOSCALL: DOS interrupt 21 function call
102;;
103;; SYNTAX: DOSCALL
104;;
105;; INPUT: none
106;;
107;; OUTPUT: none
108;;
109;; OPERATION:
110;;
111;; DOSCALL INVOKES THE DOS INTERRUPT 21 FUNCTION CALL.
112;; THE AH REGISTER MUST ALREADY BE LOADED WITH THE
113;; REQUIRED VALUE.
114;;
115;;****************************************************************************
116DOSCALL MACRO ;;AN000;
117 INT 21H ;;AN000; call to DOS
118 ENDM ;;AN000;
119;;****************************************************************************
120;;
121;; INIT_VAR: Load a variable with an immediate value.
122;;
123;; SYNTAX: INIT_VAR variable, expression
124;;
125;; INPUT: variable = Address of a variable.
126;; expression = The immediate value to load into the variable.
127;;
128;; OUTPUT:
129;; None.
130;;
131;; OPERATION: The memory variable identified by var is assigned the
132;; immediate value specified in immed.
133;;
134;;****************************************************************************
135INIT_VAR MACRO VARIABLE,EXPRESSION ;;AN000;
136 MOV VARIABLE,EXPRESSION ;;AN000; move expression into variable
137 ENDM ;;AN000;
138;;****************************************************************************
139;;
140;; COPY_WORD: Copy a word variable to another word variable.
141;;
142;; SYNTAX: COPY_WORD var_dest, var_src
143;;
144;; INPUT: var_dest - The destination word variable.
145;; var_src - The source word variable.
146;;
147;; OUTPUT: none
148;;
149;; OPERATION: The contents of var_src remain intact.
150;; The contents of AX is destroyed.
151;;
152;;************************************************************************
153COPY_WORD MACRO VAR_DEST, VAR_SRC ;;AN000;
154 MOV AX, VAR_SRC ;;AN000;
155 MOV VAR_DEST,AX ;;AN000;
156 ENDM ;;AN000;
157;;****************************************************************************
158;;
159;; COPY_BYTE: Copy a byte variable to another byte variable.
160;;
161;; SYNTAX: COPY_WORD var_dest, var_src
162;;
163;; INPUT: var_dest - The destination byte variable.
164;; var_src - The source byte variable.
165;;
166;; OUTPUT: none
167;;
168;; OPERATION: The contents of var_src remain intact.
169;; The contents of AL is destroyed.
170;;
171;;************************************************************************
172COPY_BYTE MACRO VAR_DEST, VAR_SRC ;;AN000;
173 MOV AL, VAR_SRC ;;AN000;
174 MOV VAR_DEST,AL ;;AN000;
175 ENDM ;;AN000;
176;;****************************************************************************
177;;
178;; COMP_WORDS: Compare two 16 bit memory variable.
179;;
180;; SYNTAX: COMP_WORDS var_dest, var_src
181;;
182;; INPUT: var_dest - The destination memory variable (16 bits)
183;; var_src - The source memory variable (16 bits)
184;;
185;; OUTPUT: none
186;;
187;; OPERATION: The two 16 bit memory variables are compared and the status
188;; flags are updated. Refer to the ASSEMBLER reference for more details.
189;;
190;;************************************************************************
191COMP_WORDS MACRO VAR_DEST, VAR_SRC ;;AN000;
192 ;
193 MOV AX, VAR_DEST ;;AN000;
194 CMP AX, VAR_SRC ;;AN000;
195 ENDM ;;AN000;
196;;****************************************************************************
197;;
198;; COMP_BYTES: Compare two 8 bit memory variables.
199;;
200;; SYNTAX: COMP_BYTES var_dest, var_src
201;;
202;; INPUT: var_dest - The destination memory variable ( 8 bits)
203;; var_src - The source memory variable ( 8 bits)
204;;
205;; OUTPUT: none
206;;
207;; OPERATION: The two 8 bit memory variables are compared and the status
208;; flags are updated. Refer to the ASSEMBLER reference for more details.
209;;
210;;************************************************************************
211COMP_BYTES MACRO VAR_DEST, VAR_SRC ;;AN000;
212 ;
213 MOV AL, VAR_DEST ;;AN000;
214 CMP AL, VAR_SRC ;;AN000;
215 ENDM ;;AN000;
216;;****************************************************************************
217;;
218;; INC_VAR: Increment the specified memory variable by 1.
219;;
220;; SYNTAX: INC_VAR var_dest
221;;
222;; INPUT: var_dest - The destination memory variable.
223;;
224;; OUTPUT: none
225;;
226;; OPERATION: The memory variable is incremented by one.
227;;
228;;************************************************************************
229INC_VAR MACRO VAR_DEST ;;AN000;
230 INC VAR_DEST ;;AN000;
231 ENDM ;;AN000;
232;;****************************************************************************
233;;
234;; DEC_VAR: Decrement the specified memory variable by 1.
235;;
236;; SYNTAX: DEC_VAR var_dest
237;;
238;; INPUT: var_dest - The destination memory variable.
239;;
240;; OUTPUT: none
241;;
242;; OPERATION: The memory variable is decremented by one.
243;;
244;;************************************************************************
245DEC_VAR MACRO VAR_DEST ;;AN000;
246 DEC VAR_DEST ;;AN000;
247 ENDM ;;AN000;
248;;****************************************************************************
249;;
250;; INIT: initializes the DS to the beginning of the data
251;;
252;; SYNTAX: INIT
253;;
254;; INPUT: none
255;;
256;; OUTPUT: none
257;;
258;; OPERATION:
259;;
260;; THE MACRO SIMPLY SETS UP THE DATA SEGMENT.
261;;
262;;****************************************************************************
263INIT MACRO ;;AN000;
264 PUSH DS ;;AN000;
265 XOR AX,AX ;;AN000; make AX = 0
266 PUSH AX ;;AN000;
267 MOV AX,DATA ;;AN000;
268 MOV DS,AX ;;AN000; initialize DS reg to beginning of data
269 ENDM ;;AN000;
270;;**************************************************************************
271;;
272;; MERGE_STRING: merges 2 string blocks together to form a third one
273;;
274;; SYNTAX: MERGE_STRING name_dest, immed_max, name_src1, name_src2
275;;
276;; INPUT: name_dest - Destination string variable (ASCII-N format)
277;; immed_max - Maximum length of destination string
278;; name_src1 - Source string variable 1 (ASCII-N format)
279;; name_src2 - Source string variable 2 (ASCII-N format)
280;;
281;; OUTPUT:
282;; None.
283;;
284;; OPERATION:
285;; The string pointed to by name_scr1 is copied to the destination string
286;; first followed by the string pointed to by name_scr2. If the
287;; destination string is not long enough to hold the new string, then
288;; the strings are copied until all the space is used up.
289;; It is assumed that the input strings and the output string
290;; are in the current data segment.
291;;
292;;
293;;**************************************************************************************
294MERGE_STRING MACRO NAME_DEST, IMMED_MAX, NAME_SRC1, NAME_SRC2 ;;AN000;
295
296 LEA DI, NAME_DEST ;;AN000;
297 LEA SI, NAME_SRC1 ;;AN000;
298 MOV AX, IMMED_MAX ;;AN000;
299 CALL COPY_ROUTINE ;;AN000;
300 MOV CX, IMMED_MAX ;;AN000;
301 LEA DI, NAME_DEST ;;AN000;
302 LEA SI, NAME_SRC2 ;;AN000;
303 CALL APPEND_STRING_ROUTINE ;;AN000;
304 ENDM ;;AN000;
305;;**************************************************************************
306;;
307;; APPEND_STRING: Appends an ASCII-N string to the specified string.
308;;
309;; SYNTAX: APPEND_STRING name_dest, immed_max, name_src
310;;
311;; INPUT: name_dest - Destination string variable (ASCII-N format)
312;; immed_max - Maximum length of destination string
313;; name_src - Source string variable (ASCII-N format)
314;;
315;; OUTPUT:
316;; None.
317;;
318;; OPERATION:
319;; The ASCII-N string text defined in name_scr is appended to the
320;; end of name_dest.
321;;
322;;**************************************************************************************
323APPEND_STRING MACRO NAME_DEST, IMMED_MAX, NAME_SRC ;;AN000;
324 MOV CX, IMMED_MAX ;;AN000;
325 LEA DI, NAME_DEST ;;AN000;
326 LEA SI, NAME_SRC ;;AN000;
327 CALL APPEND_STRING_ROUTINE ;;AN000;
328 ENDM ;;AN000;
329;;**************************************************************************
330;;
331;; COPY_STRING: Copy ASCII-N string text.
332;;
333;; SYNTAX: MOVE_STRING name_dest, immed_max, name_src
334;;
335;; INPUT:
336;; name_dest - The destination string variable.
337;; immed_max - The maximum length of destination string.
338;; name_src - source string veriable (ASCII-N format)
339;;
340;; OUTPUT:
341;; None.
342;;
343;; OPERATION: ASCII-N string text defined in name_src is copied to name_dest.
344;; The number of characters copied to name_dest will not exceed immed_max.
345;;
346;;**************************************************************************
347COPY_STRING MACRO NAME_DEST, IMMED_MAX, NAME_SRC ;;AN000;
348 ;
349 LEA DI, NAME_DEST ;;AN000;
350 LEA SI, NAME_SRC ;;AN000;
351 MOV AX, IMMED_MAX ;;AN000;
352 CALL COPY_ROUTINE ;;AN000;
353 ENDM ;;AN000;
354;;**************************************************************************
355;;
356;; PUSH_HEADING: Push screen label address to the SELECT stack
357;;
358;; SYNTAX: PUSH_HEADING immed_lab
359;;
360;; INPUT:
361;; immed_lab - screen label
362;;
363;; OUTPUT:
364;; None.
365;;
366;; OPERATION: The screen label address is pushed onto the SELECT stack
367;; provided the numher of entries on the stack will not exceed the
368;; maximum. Error will NOT be generated if the function was not
369;; successful.
370;;
371;;****************************************************************************
372PUSH_HEADING MACRO IMMED_LAB ;;AN000;
373 MOV AX, OFFSET IMMED_LAB ;;AN000;
374 CALL PUSH_ROUTINE ;;AN000;
375 ENDM ;;AN000;
376;;**************************************************************************
377;;
378;; POP_HEADING: Pop screen label address from the SELECT stack and jump
379;; to the label address.
380;;
381;; SYNTAX: POP_HEADING
382;;
383;; INPUT:
384;; None.
385;;
386;; OUTPUT:
387;; None.
388;;
389;; OPERATION: The screen label address from the SELECT stack is poped
390;; if the number of entries on the stack is not zero. If the number
391;; of entries is zero, the EXIT_DOS screen label address will be used.
392;; A jump to the screen label address is also performed.
393;;
394;;****************************************************************************
395POP_HEADING MACRO ;;AN000;
396 CALL POP_ROUTINE ;;AN000;
397 JMP SI ;;AN000;
398 ENDM ;;AN000;
399;;****************************************************************************
400;;
401;; DIR: get current directory
402;;
403;; SYNTAX: DIR dir_buffer
404;;
405;; INPUT: dir_buffer = POINTER TO A 64-BYTE USER MEMORY AREA
406;;
407;; OUTPUT: CY = 0, AX = N/A, successful
408;; CY = 1, AX = error code
409;;
410;; OPERATION:
411;;
412;; DIR PLACES THE FULL PATH NAME OF THE CURRENT DIRECTORY FOR THE
413;; SPECIFIED DRIVE IN THE BUFFER.
414;; THE RETURNING STRING IS AN ASCIIZ STRING AND IT DOES NOT
415;; HAVE THE DRIVE LETTER OR A BACKSLASH.
416;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
417;; IS RETURNED IN AX.
418;;
419;;****************************************************************************
420DIR MACRO DIR_BUFFER ;;AN000;
421 CALL HOOK_INT_24 ;;AN000;
422 MOV SI,OFFSET DIR_BUFFER ;;AN000; pointer to 64 byte user area
423 MOV DL,0 ;;AN000; give directory of the default drive
424 MOV AH,47H ;;AN000; get current directory
425 DOSCALL ;;AN000;
426 CALL RESTORE_INT_24 ;;AN000;
427 ENDM ;;AN000;
428;;****************************************************************************
429;;
430;; MAKE_DIR: Make a Directory
431;;
432;; SYNTAX: MAKE_DIR directory
433;;
434;; INPUT: directory = An ASCII-N STRING GIVING THE REQUIRED
435;; PATH
436;; OUTPUT: CY = 0, AX = undefined, call was successful
437;; CY = 1, AX = error code
438;;
439;; OPERATION:
440;;
441;; THE DIRECTORY IS MADE USING THE DOS INT 21H (AH=39H) CALL.
442;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
443;; IS RETURNED IN AX.
444;;
445;;
446;;****************************************************************************
447MAKE_DIR MACRO dir_len ;;AN000;
448 CALL HOOK_INT_24 ;;AN000;
449
450 MOV DI,OFFSET dir_len ;;AN000;
451 CALL POS_ZERO ;;AN000; position the '0' at the end of the path
452 MOV DX,OFFSET dir_len[2] ;;AN000; advance pointer to beginning of path
453 MOV AH,39H ;;AN000; make directory interrupt
454 DOSCALL ;;AN000; call to DOS interrupt 21
455 CALL RESTORE_INT_24 ;;AN000;
456 ENDM ;;AN000;
457;;**************************************************************************
458;;
459;; MAKE_DIR_PATHS: Create the specified directory including all the specified
460;; sub-directories if they do not exist.
461;;
462;; SYNTAX: MAKE_DIR_PATHS name_dir
463;;
464;; INPUT:
465;; name_dir - Directory pathname in ASCII-N string format.
466;;
467;; OUTPUT:
468;; CY = 0 Success
469;; CY = 1 Error - AX will contain an error code.
470;;
471;; OPERATION: The directory pathname is created.
472;; If the drive letter and colon are not followed by a '\', then the
473;; macro will start creating the directories from the default directory.
474;; If they are followed by a '\', then the macro will start at the root.
475;;
476;;
477;;****************************************************************************
478MAKE_DIR_PATHS MACRO NAME_DIR ;;AN000;
479
480 MOV BX, OFFSET NAME_DIR ;;AN000; Address of the ASCII-N string
481 CALL MAKE_DIR_PATHS_ROUTINE ;;AN000;
482 ENDM ;;AN000;
483;;****************************************************************************
484;;
485;; REMOVE_DIR: Remove Directory
486;;
487;; SYNTAX: REMOVE_DIR directory
488;;
489;; INPUT: directory = An ASCII-N STRING giving the REQUIRED PATH
490;;
491;; OUTPUT: CY = 0, AX = undefined, successful
492;; CY = 1, AX = error code
493;;
494;; OPERATION:
495;;
496;; THE DIRECTORY IS REMOVED USING THE DOS INT 21H (AH=3AH) CALL.
497;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
498;; IS RETURNED IN AX.
499;;
500;; It is assumed that the string is located in the data segment
501;;
502;;****************************************************************************
503REMOVE_DIR MACRO dir_len ;;AN000;
504
505 CALL HOOK_INT_24 ;;AN000;
506 MOV DI,OFFSET dir_len ;;AN000;
507 CALL POS_ZERO ;;AN000; position the '0' at the end of the path
508 MOV DX,OFFSET dir_len[2] ;;AN000; advance pointer to beginning of path
509 MOV AH,3AH ;;AN000; remove the specified directory
510 DOSCALL ;;AN000; call to DOS interrupt 21
511 CALL RESTORE_INT_24 ;;AN000;
512 ENDM ;;AN000;
513;;**************************************************************************
514;;
515;; CHANGE_DIR: Change the current directory to the specified directory.
516;;
517;; SYNTAX: CHANGE_DIR name_dir
518;;
519;; INPUT:
520;; name_dir - directory pathname in ASCII-N string format.
521;;
522;; OUTPUT:
523;; CY = 0 Success
524;; CY = 1 Error AX will contain an error code
525;;
526;; OPERATION: The directory pathname identified by the ASCII-N string
527;; becomes the default directory.
528;;
529;;****************************************************************************
530CHANGE_DIR MACRO NAME_DIR ;;AN000;
531
532 CALL HOOK_INT_24 ;;AN000;
533 MOV DI,OFFSET NAME_DIR ;;AN000; Get the offset of the string
534 CALL POS_ZERO ;;AN000; Make into an ASCII-Z string
535 MOV DX,OFFSET NAME_DIR+2 ;;AN000; Get the start of the string
536 MOV AH,3BH ;;AN000; DOS function call number
537 DOSCALL ;;AN000;
538 CALL RESTORE_INT_24 ;;AN000;
539 ENDM ;;AN000;
540INCLUDE 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 @@
1;;****************************************************************************
2;; Assembler MACROS for use with SELECT.
3;; File: MACROS2.INC
4;; Latest Change Date: August 04, 1987
5;;
6;; These macros define powerful assembler verbs neccessary for SELECT.
7;;
8;; Note: Many of the macros make use of an ASCII-N string for passing
9;; parameters. The string is defined below.
10;; DW count
11;; DB "string_variable",?
12;;
13;; COUNT is the length of the string and is a word.
14;; It is necessary to follow the string with at least one byte for the
15;; purpose of changing the ASCII-N string to an ASCII-Z string.
16;;
17;;****************************************************************************
18page ;AN000;
19;;************************************************************************
20;;
21;; CLOSE_FILE: Close File
22;;
23;; SYNTAX: CLOSE_FILE handle
24;;
25;; INPUT: handle = The handle of the file to close.
26;;
27;; OUTPUT: CY = 0, AX = undefined, successful
28;; CY = 1, AX = error code
29;;
30;; OPERATION:
31;;
32;; THIS MACROS CLOSES THE FILE WITH THE GIVEN FILE HANDLE.
33;; IT MAKES USE OF INT 21 (AH=3EH).
34;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
35;; IS RETURNED IN AX.
36;;
37;;**************************************************************************
38CLOSE_FILE MACRO HANDLE ;;AN000;
39 ;;
40 MOV BX, HANDLE ;;AN000;
41 CALL FAR PTR CLOSE_FILE_ROUTINE ;;AN000;
42 ENDM ;;AN000;
43;;**************************************************************
44;;
45;; CREATE_FILE: Create new File
46;;
47;; SYNTAX: CREATE_FILE name_file, immed_attr, var_handle
48;;
49;; INPUT: name_file - filename in ASCII-N string format.
50;; immed_attr - file attribute
51;;
52;; OUTPUT: CY = 0 Success: var_handle contain the file handle
53;; CY = 1 Error: AX contains as error code
54;;
55;;
56;; OPERATION:
57;;
58;; CREATE_FILE CREATES A FILE WITH THE GIVEN NAME USING INT 21H (AH=5BH)
59;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
60;; IS RETURNED IN AX.
61;;
62;;**************************************************************************
63CREATE_FILE MACRO NAME_FILE, IMMED_ATTR, VAR_HANDLE ;;AN000;
64 LEA DI, NAME_FILE ;;AN000;
65 MOV CX, IMMED_ATTR ;;AN000;
66 CALL CREATE_FILE_ROUTINE ;;AN000;
67 MOV VAR_HANDLE, AX ;;AN000;
68 ENDM ;;AN000;
69;;****************************************************************************
70;;
71;; ERASE_FILE: Erase File
72;;
73;; SYNTAX: ERASE_FILE filename
74;;
75;; INPUT: filename = POINTER TO ASCII-N STRING - FILE NAME
76;;
77;; OUTPUT: CY = 0, AX = undefined, successful
78;; CY = 1, AX = error code
79;;
80;; OPERATION:
81;;
82;; ERASE_FILE ERASES THE FILE USING INT 21H (AH=41H).
83;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
84;; IS RETURNED IN AX.
85;;
86;;****************************************************************************
87ERASE_FILE MACRO FILE_NAME ;;AN000;
88
89 LEA DI, FILE_NAME ;;AN000;
90 CALL ERASE_FILE_ROUTINE ;;AN000;
91 ENDM ;;AN000;
92;;****************************************************************************
93;;
94;; CHMOD_FILE: Change file attributes to read/write
95;;
96;; SYNTAX: CHMOD_FILE filename
97;;
98;; INPUT: filename = POINTER TO ASCII-N STRING - FILE NAME
99;;
100;; OUTPUT: None.
101;;
102;; OPERATION:
103;; The CHMOD dos call is executed (43H) to change the file's attributes
104;; to read/write.
105;;
106;;****************************************************************************
107CHMOD_FILE MACRO FILE_NAME ;;AN000;
108
109 LEA DI, FILE_NAME ;;AN000;
110 CALL CHMOD_FILE_ROUTINE ;;AN000;
111 ENDM ;;AN000;
112;;************************************************************************
113;; FIND_FILE: Find File
114;;
115;; SYNTAX: FIND_FILE name, attribute
116;;
117;; INPUT: name = POINTER TO ASCII-N STRING - FILE NAME
118;; attribute - the file attribute used in the search
119;;
120;; OUTPUT: CY = 0, AX = undefined, successful
121;; CY = 1, AX = error code
122;;
123;; OPERATION:
124;;
125;; FINDFILE FINDS THE FIRST FILENAME SPECIFIED USING INT 21 (AH=4EH).
126;; AND LOADS INFORMATION INTO THE CURRENT DTA.
127;; NOTE : THE DEFAULT DTA IS AT 80H IN THE PSP.
128;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
129;; IS RETURNED IN AX.
130;;
131;;************************************************************************
132FIND_FILE MACRO LOC_FILE,ATTRIBUTE ;;AN000;
133 ;;
134 LEA DI, LOC_FILE ;;AN000;
135 MOV CX, ATTRIBUTE ;;AN000;
136 CALL FIND_FILE_ROUTINE ;;AN000;
137 ENDM ;;AN000;
138;;************************************************************************
139;; FIND_NEXT: Find the next match in the directory.
140;;
141;; SYNTAX: FIND_NEXT
142;;
143;; INPUT:
144;; None.
145;;
146;; OUTPUT: CY = 0, AX = undefined, successful
147;; CY = 1, AX = error code
148;;
149;; OPERATION: This macro must be called after FIND_FIRST. It searched
150;; the same directory as the FIND_FIRST command for the next match.
151;; If none is found then the carry flag is set.
152;; This macro uses the data in the DTA for the directory seach so
153;; it is important not to change the address of the current DTA.
154;;
155;;
156;;************************************************************************
157FIND_NEXT MACRO LOC_FILE,ATTRIBUTE ;;AN000;
158 CALL HOOK_INT_24 ;;AN000;
159 MOV INT_24_ERROR, FALSE ;;AN000; Zero the number of critical errors
160 MOV AH,4FH ;;AN000;
161 DOSCALL ;;AN000;
162 CALL RESTORE_INT_24 ;;AN000;
163 ENDM ;;AN000;
164;;**************************************************************************
165;;
166;; OPEN_FILE - Open File
167;;
168;; SYNTAX: OPEN_FILE file_name, mode, handle
169;;
170;; INPUT: file_name = POINTER TO ASCII-N STRING - FILE NAME
171;; mode = 0,1,2 (read,write,read/write)
172;; handle = POINTER TO A LOCATION TO STORE FILE HANDLE
173;;
174;; OUTPUT: CY = 0, AX = FILE HANDLE, successful
175;; CY = 1, AX = error code
176;;
177;; OPERATION:
178;;
179;; THIS MACRO OPENS A FILE FOR READ/WRITE OPERATIONS.
180;; IT MAKES USE OF INT 21 (AH=3DH).
181;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
182;; IS RETURNED IN AX.
183;;
184;;**************************************************************************
185OPEN_FILE MACRO FILE_NAME,MODE,HANDLE ;;AN000;
186
187 LEA DI, FILE_NAME ;;AN000;
188 MOV AL, MODE ;;AN000;
189 CALL OPEN_FILE_ROUTINE ;;AN000;
190 MOV HANDLE, AX ;;AN000;
191 ENDM ;;AN000;
192;;**************************************************************************
193;;
194;; RENAME_FILE - Rename File
195;;
196;; SYNTAX: RENAME_FILE old_name, new_name
197;;
198;; INPUT: old_name = POINTER TO ASCII-N STRING -OLD FILE NAME
199;; new_name = POINTER TO ASCII-N STRING -NEW FILE NAME
200;;
201;; OUTPUT: CY = 0, AX = undefined, successful
202;; CY = 1, AX = error code
203;;
204;; OPERATION:
205;;
206;; THIS MACRO RENAMES A FILE GIVEN 2 NAMES.
207;; IT MAKES USE OF INT 21 (AH=56H).
208;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
209;; IS RETURNED IN AX.
210;;
211;;**************************************************************************
212RENAME_FILE MACRO OLD_NAME,NEW_NAME ;;AN000;
213 ;;
214 LEA SI, OLD_NAME ;;AN000;
215 LEA DI, NEW_NAME ;;AN000;
216 CALL RENAME_FILE_ROUTINE ;;AN000;
217 ENDM ;;AN000;
218;;**************************************************************************
219;;
220;; READ_FILE: Transfer the specified number of bytes from a file into a
221;; buffer location.
222;;
223;; SYNTAX: READ_FILE var_handle, buffer, immed_char, var_char
224;;
225;; INPUT:
226;; var_handle - The handle of the file to read.
227;; buffer - The address of where to store the data
228;; immed_char - The number of characters to read
229;;
230;; OUTPUT:
231;; CY = 0, Read success. var_char - number of bytes read
232;; CY = 1, Read error. AX contains the error code.
233;;
234;; OPERATION:
235;;
236;; THIS MACRO READS TO AN ALREADY OPENED FILE.
237;; IT MAKES USE OF INT 21 (AH=3FH).
238;; AX WILL RETURN THE NUMBER BYTES ACTUALLY WRITTEN.
239;;
240;;************************************************************************
241READ_FILE MACRO VAR_HANDLE,BUFFER,IMMED_CHAR, VAR_CHAR ;;AN000;
242
243 MOV BX,VAR_HANDLE ;;AN000;
244 MOV DX,OFFSET BUFFER ;;AN000;
245 MOV CX,IMMED_CHAR ;;AN000;
246 CALL READ_FILE_ROUTINE ;;AN000;
247 ENDM ;;AN000;
248;;**************************************************************************
249;;
250;; WRITE_FILE: Transfer the specified number of bytes from a buffer into a
251;; specified file.
252;;
253;; SYNTAX: WRITE_FILE var_handle, buffer, immed_char, var_char
254;;
255;; INPUT:
256;; var_handle - The handle of the file to write to.
257;; buffer - The address of where the data is stored.
258;; immed_char - The number of characters to write.
259;;
260;; OUTPUT:
261;; CY = 0, Write success. var_char - number of bytes written.
262;; CY = 1, Write error. AX contains the error code.
263;;
264;; OPERATION:
265;;
266;; THIS MACRO WRITES TO AN ALREADY OPENED FILE.
267;; IT MAKES USE OF INT 21 (AH=3DH).
268;; AX WILL RETURN THE NUMBER BYTES ACTUALLY WRITTEN.
269;;
270;;************************************************************************
271WRITE_FILE MACRO VAR_HANDLE, BUFFER, IMMED_CHAR, VAR_CHAR ;;AN000;
272 ;;
273 MOV BX,VAR_HANDLE ;;AN000;
274 MOV DX,OFFSET BUFFER ;;AN000;
275 MOV CX,IMMED_CHAR ;;AN000;
276 CALL WRITE_FILE_ROUTINE ;;AN000;
277 ENDM ;;AN000;
278;;**************************************************************************
279;;
280;; PREPARE_FILE: Prepare a file and a buffer for the construction of that
281;; file line by line.
282;;
283;; SYNTAX: PREPARE_FILE filename
284;;
285;; INPUT:
286;; filename = The name of the file to create. (ASCII-N format)
287;;
288;; OUTPUT: CY = 0: No error was encountered.
289;; CY = 1: There was an error encountered.
290;;
291;; OPERATION: A attempt is made to create the file. If it fails because
292;; the file already exists, then the file is opened for writing.
293;; The user will then write to the file be calling WRITE_LINE macro. The
294;; data will be temperarily stored in a buffer to limit the actual number
295;; of writes to the file.
296;;
297;;**************************************************************************
298PREPARE_FILE MACRO FILENAME ;;AN000;
299
300 MOV BX, OFFSET FILENAME ;;AN000; Pass the address of the filename string
301 CALL PREPARE_FILE_ROUTINE ;;AN000; Call a routine to do that actual work
302 ENDM ;;AN000;
303;;**************************************************************************
304;;
305;; WRITE_LINE: Write a line to the file being constructed.
306;;
307;; SYNTAX: WRITE_LINE line
308;;
309;; INPUT:
310;; line = The line to write to the file. (ASCII-N format)
311;;
312;; OUTPUT: CY = 0: No error was encountered.
313;; CY = 1: An error was encountered.
314;;
315;; OPERATION: The line that is passed, has a CR and a LF appended to the
316;; end of the line. The data is then stored in a buffer. When the
317;; buffer is full, the data is written to the disk.
318;;
319;;**************************************************************************
320WRITE_LINE MACRO LINE ;;AN000;
321
322 MOV BX, OFFSET LINE ;;AN000; Pass the address of the line to write
323 CALL WRITE_LINE_ROUTINE ;;AN000; Call a routine to do the actual work
324 ENDM ;;AN000;
325;;**************************************************************************
326;;
327;; SAVE_FILE: Empty the data in the buffer being used to create the file
328;; and then close the file.
329;;
330;; SYNTAX: SAVE_FILE file_name, error_code
331;;
332;; INPUT:
333;; file_name = The name of the file being built. If there has been
334;; an error encountered, then the file will be erased.
335;;
336;; OUTPUT: CY = 0: No error was encountered.
337;; CY = 1: An error was encountered.
338;; ERROR_CODE will contain the code of the error which
339;; occured.
340;;
341;; OPERATION: The routine will check to see if there is any data left in
342;; the buffer. If there is, the data is written to the file being
343;; created. The file is then closed. If errors were encountered at
344;; anytime during the create process, then the carry flag will be set
345;; and the error code will be returned in ERROR_CODE.
346;;
347;;**************************************************************************
348SAVE_FILE MACRO FILE_NAME, ERROR_CODE ;;AN000;
349
350 MOV BX, OFFSET FILE_NAME ;;AN000; Get the address of the file name string
351 CALL SAVE_FILE_ROUTINE ;;AN000; Call a subroutine to do the actual work
352 MOV ERROR_CODE, AX ;;AN000; Store the returned error code
353 ENDM ;;AN000;
354;;**************************************************************************
355;;
356;; CHECK_DOS_VERSION: Check DOS Version level is 4.00
357;;
358;; SYNTAX: CHECK_DOS_VERSION
359;;
360;; INPUT:
361;; None.
362;;
363;; OUTPUT: CY = 0: Current DOS Version is 4.00
364;; CY = 1: Current DOS Version is other than level 4.00
365;;
366;; OPERATION: DOS function call 30h is performed to get the current DOS
367;; version number. If the DOS version is not 4.00, the carry flag is set.
368;;
369;;**************************************************************************
370CHECK_DOS_VERSION MACRO ;;AN000;
371 MOV AH, 30H ;;AN000; DOS function number to perform
372 DOSCALL ;;AN000;
373 .IF < AL EQ MAJOR_VERSION > AND ;;AC047;SEH check is now made in VERSIONA.INC
374 .IF < AH EQ MINOR_VERSION > ;;AC047;SEH Check the DOS minor version
375 CLC ;;AN000; This is the correct version
376 .ELSE ;;AN000;
377 STC ;;AN000; This is the incorrect version
378 .ENDIF ;;AN000;
379 ENDM ;;AN000;
380;;**************************************************************************
381;;
382;; SET_DISPLAY_MODE: Set the display mode to 80 column.
383;;
384;; SYNTAX: SET_DISPLAY_MODE
385;;
386;; INPUT:
387;; None.
388;;
389;; OUTPUT:
390;; None.
391;;
392;; OPERATION: The Video Interrupt (INT 10H, AH = 0) is performed to set
393;; the display to 80 column mode.
394;;
395;;************************************************************************
396SET_DISPLAY_MODE MACRO ;;AN000;
397
398 CALL SET_DISPLAY_MODE_ROUTINE ;;AN000;
399 ENDM ;;AN000;
400
401;;************************************************************************
402;;
403;; CHECK_EXPANDED_MEMORY: Check if the system supports expanded memory.
404;;
405;; SYNTAX: CHECK_EXPANDED_MEMORY var_xma
406;;
407;; INPUT:
408;; None.
409;;
410;; OUTPUT:
411;; var_xma = 0: Expanded memory is NOT supported.
412;; = 1: Expanded memory is supported.
413;; var_mod80 = 0: Not model 80
414;; = 1: Model 80
415;;
416;; OPERATION: A call to the system services (INT 15H, AH = C0H) is performed
417;; to get the system configuration parameters. (model byte).
418;;
419;; The Personal System/2 Model 80 (model byte = 0F8h) always support
420;; expanded memory.
421;;
422;; The Personal System/2 Models 50 and 60 (model byte = 0FCh) support
423;; expanded memory if the ??? 2 is present. The ??? 2 card has
424;; the identity number of F7FEh. F7H is read through the port address
425;; 101h and FEH is read through port 100H
426;;
427;; All other models do not support expanded memory.
428;;
429;;************************************************************************
430CHECK_EXPANDED_MEMORY MACRO VAR_XMA, VAR_MOD80 ;;AC000;JW
431
432 CALL CHK_EX_MEM_ROUTINE ;;AN000;
433 MOV VAR_XMA, SI ;;AN000;
434 MOV VAR_MOD80,BX ;;AN000;JW
435 ENDM ;;AN000;
436
437INCLUDE 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 @@
1;;****************************************************************************
2;; Assembler MACROS for use with SELECT.
3;; File: MACROS3.INC
4;; Latest Change Date: July 28, 1987
5;;
6;; These macros define powerful assembler verbs neccessary for SELECT.
7;;
8;; Note: Many of the macros make use of an ASCII-N string for passing
9;; parameters. The string is defined below.
10;; DW count
11;; DB "string_variable",?
12;;
13;; COUNT is the length of the string and is a word.
14;; It is necessary to follow the string with at least one byte for the
15;; purpose of changing the ASCII-N string to an ASCII-Z string.
16;;
17;;****************************************************************************
18page ;AN000;
19;;************************************************************************;;
20;;
21;; CHECK_DEFAULT_DRIVE: Determine if default drive is drive A:
22;;
23;; SYNTAX: CHECK_DEFAULT_DRIVE
24;;
25;; INPUT:
26;; None.
27;;
28;; OUTPUT:
29;; CY = 0: Drive A is the default drive
30;; CY = 1: Drive A is NOT the default drive
31;;
32;; OPERATION: DOS Function Call 19h is performed to get the default drive.
33;; If the default drive is not drive A (AL <> 0), the carry flag is set.
34;;
35;;************************************************************************;;
36CHECK_DEFAULT_DRIVE MACRO ;;AN000;
37 MOV AH, 19H ;;AN000; Fn. Number for getting current drive
38 DOSCALL ;;AN000;
39 .IF < ZERO AL > ;;AN000; Is A the default drive?
40 CLC ;;AN000; Yes!
41 .ELSE ;;AN000;
42 STC ;;AN000; No!
43 .ENDIF ;;AN000;
44 ENDM ;;AN000;
45;;************************************************************************;;
46;;
47;; CHECK_DISK: Check is the specified fixed disk is present. If disk is
48;; present, return disk partition status.
49;;
50;; SYNTAX: CHECK_DISK immed_disk, var_disk, var_status, var_status_2, buffer
51;;
52;; INPUT:
53;; immed_disk = 1: First fixed disk.
54;; = 2: Second fixed disk.
55;;
56;; OUTPUT:
57;; var_disk = 0: Disk not present.
58;; = 1: Disk present - No DOS or EDOS partitions
59;; = 2: Disk present - DOS or EDOS partitions exist
60;; var_status = 01H: Primary DOS partition exists
61;; = 02H: Extended DOS partitions exists
62;; = 04H: Logical drives exist
63;; = 08H: Free space exists in EDOS partition
64;; = 10H: Free space exists on disk
65;; More than one status bit can be set
66;; var_status_2 = 0: There is no free space in EDOS partition and the
67;; disk.
68;; = 1: There is free space in the EDOS partition.
69;; = 2: There is no EDOS partition, but there is free
70;; disk space.
71;; buffer = Buffer for fixed disk status information.
72;;
73;; OPERATION: A call is performed to the FDISK utility (GET_DISK_STATUS)
74;; to get the status of the specified fixed disk drive. The returned
75;; status information is checked and the memory variables are set as
76;; specified above.
77;;
78;;************************************************************************;;
79CHECK_DISK MACRO IMMED_DISK, VAR_DISK, VAR_STATUS, VAR_STATUS_2, BUFFER ;;AN000;
80
81 LEA DI, BUFFER ;;AN000;
82 MOV AX, IMMED_DISK ;;AN000;
83 CALL CHECK_DISK_ROUTINE ;;AN000;
84 MOV VAR_DISK, CX ;;AN000;
85 MOV VAR_STATUS, BX ;;AN000;
86 MOV VAR_STATUS_2, DX ;;AN000;
87 ENDM ;;AN000;
88;;************************************************************************;;
89;;
90;; CHECK_DISKETTE: Check the type of diskettes attached to the system.
91;;
92;; SYNTAX: CHECK_DISKETTE var_disk_a, var_disk_b, var_tot, buffer
93;;
94;; INPUT:
95;; buffer = Buffer for IOCTL
96;;
97;; OUTPUT:
98;; var_disk_a = 0FFH Diskette drive A not present
99;; = 0 360k diskette (5.25 inch)
100;; = 1 740K diskette (3.5 inch)
101;; = 2 1.2M diskette (5.25 inch)
102;; = 7 1.44M diskette (3.5 inch)
103;; var_disk_b = 0FFH Diskette drive B not present
104;; = 0, 1, 2, 7 as defined above for diskette A.
105;; var_tot = total number of diskettes attached (1 or 2)
106;;
107;; OPERATION: Interrupt 11H is performed to get equipment status. The number
108;; of diskettes attached will be returned as specified above. A call
109;; is then made to the IOCTL function of DOS (AH = 44h) to get the type
110;; of media the disk drives are. The function returns its data in a
111;; 26 byte buffer, where the second byte contains a description of the
112;; drive. The codes are as follows:
113;; 0 = 320/360 KB 5-1/4-inch
114;; 1 = 5-1/4-inch, 1.2 MB
115;; 2 = 3-1/2-inch, 720 KB
116;; 3 = 8 inch single density
117;; 4 = 8 inch double density
118;; 5 = Fixed disk
119;; 6 = Tape drive
120;; 7 = Other
121;;
122;;************************************************************************;;
123CHECK_DISKETTE MACRO VAR_DISK_A, VAR_DISK_B, VAR_TOT, BUFFER ;;AN000;
124 INT 11H ;;AN000; See how many diskette drives there are
125 .IF < BIT AL NAND DISKETTES_EXIST > ;;AN000; Are there diskettes?
126 MOV AX, 0 ;;AN000; There are no diskettes.
127 .ELSE ;;AN000;
128 MOV CL,6 ;;AN000; Number of bits to shift
129 SHR AL,CL ;;AN000; Diskette bits are 6 and 7. Shift to right
130 MOV AH, 0 ;;AN000; Clear the high byte
131 INC AX ;;AN000; Make into the actual number of diskettes
132 .IF < AX GT MAX_NUM_DISKETTE > ;;AN000; Are there more then 2 diskette drives?
133 MOV AX, MAX_NUM_DISKETTE ;;AN000; Yes, but we are only concern with two.
134 .ENDIF ;;AN000;
135 .ENDIF ;;AN000;
136 MOV VAR_TOT, AL ;;AN000; Store the number of diskette drives.
137 ;;**********************************************************************
138 ;; Examine diskette drive A first.
139 ;;**********************************************************************
140 MOV VAR_DISK_A, E_DISKETTE_INV ;;AN000;
141 MOV VAR_DISK_B, E_DISKETTE_INV ;;AN000;
142 MOV DI, OFFSET VAR_DISK_A ;;AN000;
143 .FOR BL = 1 TO VAR_TOT ;;AN000;
144 MOV AX, 440DH ;;AN000;
145 MOV CX, 0860H ;;AN000;
146 MOV DX, OFFSET BUFFER ;;AN000;
147 DOSCALL ;;AN000;
148 MOV SI, OFFSET BUFFER + 1 ;;AN000;
149 MOV AL, [SI] ;;AN000;
150 .IF < AL EQ E_DISKETTE_1200 > ;;AN111;JW
151 MOV AL,E_DISKETTE_360 ;;AN111;JW
152 .ENDIF ;;AN111;JW
153 .IF < AL EQ E_DISKETTE_1440 > ;;AN000;
154 .IF < <WORD PTR [SI+3]> NE E_1440_TRACKS > OR ;;AN000;
155 .IF < <WORD PTR [SI+19]> NE E_1440_SECTORS > ;;AN000;
156 MOV AL, E_DISKETTE_INV ;;AN000;
157 .else ;yuk- don't have time to get this working on 1.4M drives
158 mov al, e_diskette_720 ;so pretend there is no such thing
159 .ENDIF ;;AN000;
160 .ENDIF ;;AN000;
161 MOV [DI], AL ;;AN000;
162 MOV DI, OFFSET VAR_DISK_B ;;AN000;
163 .NEXT BL ;;AN000;
164 ;;**********************************************************************
165 ;; Check for compatible A: to B: combinations ;AN000;JW
166 ;;**********************************************************************
167 .IF < VAR_DISK_A eq E_DISKETTE_720 > or ;;AN000;JW
168 .IF < VAR_DISK_A eq E_DISKETTE_1440 > ;;AN000;JW
169 .IF < VAR_DISK_B eq E_DISKETTE_360 > ;;AN000;JW
170 MOV VAR_DISK_B, E_DISKETTE_INV ;;AN000;JW
171 DEC VAR_TOT ;;AN000;JW
172 .ENDIF ;;AN000;JW
173 .ENDIF ;;AN000;JW
174 .IF < VAR_DISK_A eq E_DISKETTE_360 > ;;AN000;JW
175 .IF < VAR_DISK_B eq E_DISKETTE_720 > or ;;AN000;JW
176 .IF < VAR_DISK_B eq E_DISKETTE_1440 > ;;AN000;JW
177 MOV VAR_DISK_B, E_DISKETTE_INV ;;AN000;JW
178 DEC VAR_TOT ;;AN000;JW
179 .ENDIF ;;AN000;JW
180 .ENDIF ;;AN000;JW
181 ;;
182 ENDM ;;AN000;
183;;************************************************************************;;
184;;
185;; CHECK_VALID_MEDIA: Check if the diskettes attached will support
186;; installation of SELECT. Also, check if install destination will
187;; be selected by user or determined by SELECT.
188;;
189;; SYNTAX: CHECK_VALID_MEDIA var_disk_a, var_disk_b, var_tot, var_disk,
190;; var_def, var_index, var_option
191;;
192;; INPUT:
193;; var_disk_a = diskette A presence and type
194;; var_disk_b = diskette B presence and type
195;; var_tot = total number of dikettes
196;; var_disk = 0: first fixed disk is not present
197;; > 0: first fixed disk is present
198;;
199;; OUTPUT:
200;; CY = 0: Success variables are returned as defined below.
201;; CY = 1: Error - invalid media
202;; var_def = 0 use default destination drive
203;; = 1 default destination drive not applicable
204;; var_index = 1 default destination is drive C
205;; = 2 default destination is drive B
206;; var_option = 1 possible drive B or C
207;; = 2 possible drive A or C
208;; = 3 possible drive A or B or C
209;; = 4 possible drive A or B
210;;
211;; OPERATION: The diskette drive types are checked for valid media type.
212;; If the diskette media types are valid, a check is made to determine if
213;; install destination will be user selected or will be determined by
214;; SELECT. The following checks are made.
215;;
216;; - if one diskette, return valid media and default destination is A
217;;
218;; - If two diskettes only, return valid and:
219;; if A = B, default = B
220;; if A <> B, default = A
221;; if A and B are mixed 720 and 1.44, destination option is A or B
222;;
223;; - If one diskette and a fixed disk only, return valid media and
224;; destination option is drive A or C.
225;;
226;; - If two diskettes and a fixed disk, return valid media and:
227;; if A = B, destination option is B or C
228;; if A <> B, destination option is A or C
229;; if A and B are mixed 720 and 1.44, destination option is
230;; A or B or C
231;;
232;;************************************************************************;;
233CHECK_VALID_MEDIA MACRO VAR_DISK_A, VAR_DISK_B, VAR_TOT, VAR_DISK, VAR_DEF, VAR_INDEX, VAR_OPTION ;;AN111;JW
234
235 MOV AL, VAR_DISK_A ;;AN111;JW
236 MOV BL, VAR_DISK_B ;;AN111;JW
237 MOV SI, VAR_DISK ;;AN111;JW
238 CALL CHECK_VALID_MEDIA_ROUTINE ;;AN111;JW
239 MOV VAR_DEF, CL ;;AN111;JW
240 MOV VAR_INDEX, DX ;;AN111;JW
241 MOV VAR_OPTION, DI ;;AN111;JW
242 ENDM ;;AN111;JW
243;;************************************************************************;;
244;;
245;; SCAN_DISK_TABLE: Scan the specified disk status table from the
246;; specified index item for specified field and return status information.
247;;
248;; SYNTAX: SCAN_DISK_TABLE immed_disk, var_index, var_ref
249;;
250;; INPUT:
251;; immed_disk = 1: First fixed disk
252;; = 2: Second fixed disk
253;; var_index = Index of the information to return
254;;
255;; OUTPUT:
256;; var_ret = 0: Success - Index into table is valid
257;; = 1: Error - Index invalid or end of table
258;; N_NAME_PART = Partition name.
259;; N_SIZE_PART = Partition size.
260;; N_STATUS_PART = Partition status
261;; P_DRIVE_PART = Drive letter assigned.
262;;
263;; OPERATION:
264;; Starts scanning the disk table from the point indicated by var_index
265;; for either the name, status or type. The table is scanned until either
266;; the desired entry is found, or the end of the table is reached. If
267;; the end of the table is reached before a marching entry is found, then
268;; var_ret returns 1, else if an entry is found, it returns 0.
269;; If found, var_index will also return the index of the entry.
270;;
271;; Note: The index of the first entry in the table is 1.
272;;
273;;************************************************************************;;
274SCAN_DISK_TABLE MACRO IMMED_DISK, VAR_INDEX, VAR_RET ;;AN000;
275
276 MOV CX, IMMED_DISK ;;AN000;
277 MOV AX, VAR_INDEX ;;AN000;
278 CALL SCAN_DISK_TABLE_ROUTINE ;;AN000;
279 MOV VAR_RET, AX ;;AN000;
280 ENDM ;;AN000;
281;;************************************************************************;;
282;;
283;; UPDATE_DISK_TABLE: Update the specifed disk status table for the
284;; specified index item.
285;;
286;; SYNTAX: UPDATE_DISK_TABLE immed_disk, var_index, var_ref
287;;
288;; INPUT:
289;; immed_disk = 1: First fixed disk
290;; = 2: Second fixed disk
291;; var_index = Index into table
292;;
293;; OUTPUT:
294;; var_ret = 0: Success - Index into table is valid
295;; = 1: Error - Index into table is not valid
296;; partition name = N_NAME_PART
297;; partition size = N_SIZE_PART
298;; partition status = N_STATUS_PART
299;; partition type = N_TYPE_PART
300;; drive letter = P_DRIVE_PART
301;;
302;; OPERATION: If the index into the disk table is valid, the disk table
303;; is updated for the specifed index. Disk status information is obtained
304;; from pre-defined locations as specified above.
305;;
306;;************************************************************************;;
307UPDATE_DISK_TABLE MACRO IMMED_DISK, VAR_INDEX, VAR_REF ;;AN000;
308
309 MOV CX, IMMED_DISK ;;AN000;
310 MOV AX, VAR_INDEX ;;AN000;
311 CALL UPDATE_DISK_TABLE_ROUTINE ;;AN000;
312 MOV VAR_REF, AX ;;AN000;
313 ENDM ;;AN000;
314;;************************************************************************;;
315;;
316;; GET_PARTITION_SIZE: Return DOS and EDOS partition size in ASCII-N format.
317;;
318;; SYNTAX: GET_PARTITION_SIZE var_tot, var_dos, name_dos, name_edos
319;;
320;; INPUT:
321;; var_tot = Free disk space
322;; var_dos = Size of DOS partition
323;;
324;; OUTPUT:
325;; name_dos = Size of DOS partition in ASCII-N format.
326;; name_edos = Size of EDOS partition in ASCII-N format.
327;;
328;; OPERATION: The DOS partition size is converted to ASCII-N format.
329;; The size of the Extended DOS partition is obtained by subtracting
330;; the size of DOS partition from the free disk space. If the size of
331;; any partition is zero, a zero string length is returned.
332;;
333;;************************************************************************;;
334GET_PARTITION_SIZE MACRO VAR_TOT, VAR_DOS, NAME_DOS, NAME_EDOS ;;AN000;
335 ;;
336 PUSH VAR_TOT ;;AN000; Save the variable
337 MOV AX, VAR_DOS ;;AN000; Size of the DOS partition.
338 SUB VAR_TOT, AX ;;AN000; Subtract the dos partition size
339 WORD_TO_CHAR VAR_TOT, NAME_EDOS ;;AN000; Convert binay values to ASCII
340 WORD_TO_CHAR VAR_DOS, NAME_DOS ;;AN000;
341 POP VAR_TOT ;;AN000;
342 ENDM ;;AN000;
343;;************************************************************************;;
344;;
345;; CHECK_MACHINE: Return the model byte
346;;
347;; SYNTAX: CHECK_MACHINE mac_type p_flag
348;;
349;; INPUT:
350;;
351;; OUTPUT:
352;; mac_type = model byte
353;; p_flag = PS2 presence (E_YES, E_NO)
354;;
355;; OPERATION: An INT 15H is executed to return a pointer to the system
356;; descriptor vector. The model byte is retrieved from this vector
357;; and placed in the supplied variable. The ps2 flag is also set.
358;;
359;;************************************************************************;;
360CHECK_MACHINE MACRO MAC_TYPE, P_FLAG ;;AN000;JW
361 ;;
362 MOV AH,0C0H ;;AN000; INT 15H system config request
363 INT 15H ;;AN000; system services
364 .IF < nc > ;;AN000;
365 MOV AH,ES: BYTE PTR [BX+2] ;;AN000; get the model byte
366 .ELSE ;;AN000;
367 MOV AH,00 ;;AN000;
368 .ENDIF ;;AN000;
369 MOV MAC_TYPE,AH ;;AN000; save the model byte
370 MOV P_FLAG,E_YES ;;AN000;
371 ;;
372 .IF < AH eq 0 > or ;;AN000; if old pc
373 .IF < AH eq 0FBH > or ;;AN000; if pc XT
374 .IF < AH eq 0F9H > or ;;AN000; if pc convertible
375 .IF < AH eq 0FCH > and ;;AN000; if pc AT and
376 .IF <<ES:BYTE PTR [BX+3]> le 02 > ;;AN000; sub-model byte le 2
377 MOV P_FLAG,E_NO ;;AN000; not a ps2
378 .ENDIF ;;AN000;
379 ENDM ;;AN000;
380
381INCLUDE MACROS4.INC ;AN000;
382 \ 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 @@
1;;****************************************************************************
2;; Assembler MACROS for use with SELECT.
3;; File: MACROS4.INC
4;; Latest Change Date: July 16, 1987
5;;
6;; These macros define powerful assembler verbs neccessary for SELECT.
7;;
8;; Note: Many of the macros make use of an ASCII-N string for passing
9;; parameters. The string is defined below.
10;; DW count
11;; DB "string_variable",?
12;;
13;; COUNT is the length of the string and is a word.
14;; It is necessary to follow the string with at least one byte for the
15;; purpose of changing the ASCII-N string to an ASCII-Z string.
16;;
17;;****************************************************************************
18page ;;AN000;
19;;****************************************************************************
20;;
21;; GET_DATE: Get the current system date.
22;;
23;; SYNTAX: GET_DATE var_year, var_month, var_day
24;;
25;; INPUT: NONE
26;;
27;; OUTPUT: CY = 0: CURRENT SYSTEM DATE IS 1/1/80
28;; CY = 1: CURRENT SYSTEM DATE IS NOT 1/1/80
29;; VAR_YEAR - SYSTEM YEAR (16 BITS)
30;; VAR_MONTH - SYSTEM MONTH (16 BITS)
31;; VAR_DAY - SYSTEM DAY (16 BITS)
32;;
33;; OPERATION: DOS function call 2Ah is performed to get the current
34;; system date. If the system date is not 1/1/80, the
35;; carry flag is set.
36;;
37;;****************************************************************************
38GET_DATE MACRO VAR_YEAR, VAR_MONTH, VAR_DAY ;;AN000;
39
40 MOV AH,2AH ;;AN000; get time dos interrupt
41 DOSCALL ;;AN000;
42 MOV VAR_YEAR, CX ;;AN000; Save the date.
43 MOV CH,0 ;;AN000; Clear the byte
44 MOV CL,DH ;;AN000;
45 MOV VAR_MONTH, CX ;;AN000;
46 MOV CL,DL ;;AN000;
47 MOV VAR_DAY, CX ;;AN000;
48 .IF < VAR_YEAR EQ 1980 > AND ;;AN000; See if it is the base year.
49 .IF < DX EQ 0101H> ;;AN000; i.e. 1/1/80
50 CLC ;;AN000; Yes it is.
51 .ELSE ;;AN000;
52 STC ;;AN000;
53 .ENDIF ;;AN000;
54
55 ENDM ;;AN000;
56;;****************************************************************************
57;;
58;; GET_TIME: Get current system time.
59;;
60;; SYNTAX: GET_TIME var_hour, var_minutes, var_seconds
61;;
62;; INPUT: None.
63;;
64;; OUTPUT: VAR_HOUR - SYSTEM HOUR (16 BITS)
65;; VAR_MINUTES - SYSTEM MINUTES (16 BITS)
66;; VAR_SECONDS - SYSTEM SECONDS (16 BITS)
67;;
68;; OPERATION: DOS function call 2Ch is performed to get the current
69;; system time.
70;;
71;;
72;;****************************************************************************
73GET_TIME MACRO VAR_HOUR, VAR_MINUTES, VAR_SECONDS ;;AN000;
74
75
76 MOV AH,2CH ;;AN000; get time dos interrupt
77 DOSCALL ;;AN000;
78
79 MOV AH, 0 ;;AN000;
80 MOV AL, CH ;;AN000;
81 MOV VAR_HOUR, AX ;;AN000;
82 MOV AL, CL ;;AN000;
83 MOV VAR_MINUTES, AX ;;AN000;
84 MOV AL, DH ;;AN000;
85 MOV VAR_SECONDS, AX ;;AN000;
86
87
88 ENDM ;;AN000;
89;;************************************************************************;;
90;; SET_DATE: Sets the system date
91;;
92;; SYNTAX: SET_DATE var_year, var_month, var_day
93;;
94;; INPUT: var_year - 1980 - 2099 ( 16 bits )
95;; var_month - 1 - 12 ( 16 bits )
96;; var_day - 1 - 31 ( 16 bits )
97;;
98;; OUTPUT: CY = 0: SUCCESSFUL
99;; CY = 1: ERROR - Date is not valid
100;;
101;; OPERATION: DOS function call 2Bh is performed to set the system date.
102;; If the date is not valid, the carry flag is set.
103;;
104;;************************************************************;;
105SET_DATE MACRO VAR_YEAR, VAR_MONTH, VAR_DAY ;;AN000;
106 MOV CX, VAR_YEAR ;;AN000;
107 MOV AX, VAR_MONTH ;;AN000;
108 MOV DH, AL ;;AN000;
109 MOV AX, VAR_DAY ;;AN000;
110 MOV DL, AL ;;AN000;
111 MOV AH,2BH ;;AN000; set date dos interrupt
112 DOSCALL ;;AN000;
113 .IF < ZERO AL > ;;AN000;
114 CLC ;;AN000;
115 .ELSE ;;AN000;
116 STC ;;AN000;
117 .ENDIF ;;AN000;
118 ENDM ;;AN000;
119;;****************************************************************************
120;;
121;; SET_TIME: Sets the current system time.
122;;
123;; SYNTAX: SET_TIME var_hour, var_minutes, var_seconds
124;;
125;; INPUT: var_hour = 0 - 23 ( 16 BITS )
126;; var_minutes = 0 - 59 ( 16 BITS )
127;; var_seconds = 0 - 59 ( 16 BITS )
128;; hundredth = Assumed to be zero
129;;
130;; OUTPUT: CY = 0: SUCCESSFUL
131;; CY = 1: Error - Date is not valid
132;;
133;; OPERATION: DOS function call 2Dh is performed to set the current system
134;; time. If the time is not valid, the carry flag will be set.
135;;
136;;****************************************************************************
137SET_TIME MACRO VAR_HOUR, VAR_MINUTES, VAR_SECONDS ;;AN000;
138
139 MOV AX, VAR_HOUR ;;AN000;
140 MOV CH, AL ;;AN000;
141 MOV AX, VAR_MINUTES ;;AN000;
142 MOV CL, AL ;;AN000;
143 MOV AX, VAR_SECONDS ;;AN000;
144 MOV DH, AL ;;AN000;
145 MOV DL, 0 ;;AN000; Hundredths of seconds is 0
146 MOV AH,2DH ;;AN000; set time dos interrupt
147 DOSCALL ;;AN000;
148 .IF < ZERO AL > ;;AN000;
149 CLC ;;AN000;
150 .ELSE ;;AN000;
151 STC ;;AN000;
152 .ENDIF ;;AN000;
153 ENDM ;;AN000;
154;;****************************************************************************
155;;
156;; CHECK_TIME_CHANGE: Check if user entered time is different from the
157;; specified system time.
158;;
159;; SYNTAX: CHECK_TIME_CHANGE: var_u_hour, var_u_min, var_u_sec,
160;; var_s_hour, var_s_min, var_s_sec
161;;
162;; INPUT: var_u_hour = User specified hour ( 16 bits )
163;; var_u_min = User specified minutes ( 16 bits )
164;; var_u_sec = User specified seconds ( 16 bits )
165;; var_s_hour = System hour ( 16 bits )
166;; var_s_min = System min ( 16 bits )
167;; var_s_sec = System sec ( 16 bits )
168;;
169;; OUTPUT: CY = 0: User specified time is the same as the system time.
170;; CY = 1: User specified time is different from the system time.
171;;
172;; OPERATION: The user time and system time are compared and the carry
173;; flag is updated as specified above.
174;;
175;;************************************************************************;;
176CHECK_TIME_CHANGE MACRO VAR_U_HOUR, VAR_U_MIN, VAR_U_SEC, VAR_S_HOUR, VAR_S_MIN, VAR_S_SEC ;;AN000;
177 LOCAL EXIT_CHECK_TIME_CHANGE ;;AN000;
178 MOV AX, VAR_S_HOUR ;;AN000;
179 .IF < VAR_U_HOUR EQ AX > ;;AN000;
180 MOV AX, VAR_S_MIN ;;AN000;
181 .IF < VAR_U_MIN EQ AX > ;;AN000;
182 MOV AX, VAR_S_SEC ;;AN000;
183 .IF < VAR_U_SEC EQ AX > ;;AN000;
184 CLC ;;AN000;
185 JMP EXIT_CHECK_TIME_CHANGE;AN000;
186 .ENDIF ;;AN000;
187 .ENDIF ;;AN000;
188 .ENDIF ;;AN000;
189 STC ;;AN000;
190EXIT_CHECK_TIME_CHANGE: ;;AN000;
191 ENDM ;;AN000;
192;;****************************************************************************
193;;
194;; CHECK_DATE_CHANGE: Check if user entered date is different from the
195;; specified system date.
196;;
197;; SYNTAX: CHECK_DATE_CHANGE: var_u_year, var_u_month, var_u_day,
198;; var_s_year, var_s_month, var_s_day
199;;
200;; INPUT: var_u_year = User specified year ( 16 bits )
201;; var_u_month = User specified month ( 16 bits )
202;; var_u_day = User specified day ( 16 bits )
203;; var_s_year = System year ( 16 bits )
204;; var_s_month = System month ( 16 bits )
205;; var_s_day = System day ( 16 bits )
206;;
207;; OUTPUT: CY = 0: User specified date is the same as the system date.
208;; CY = 1: User specified date is different from the system date.
209;;
210;; OPERATION: The user date and system date are compared and the carry
211;; flag is updated as specified above.
212;;
213;;************************************************************************;;
214CHECK_DATE_CHANGE MACRO VAR_U_YEAR, VAR_U_MONTH, VAR_U_DAY, VAR_S_YEAR, VAR_S_MONTH, VAR_S_DAY ;;AN000;
215 LOCAL EXIT_CHECK_DATE_CHANGE ;;AN000;
216 MOV AX, VAR_S_YEAR ;;AN000;
217 .IF < VAR_U_YEAR EQ AX > ;;AN000;
218 MOV AX, VAR_S_MONTH ;;AN000;
219 .IF < VAR_U_MONTH EQ AX > ;;AN000;
220 MOV AX, VAR_S_DAY ;;AN000;
221 .IF < VAR_U_DAY EQ AX > ;;AN000;
222 CLC ;;AN000;
223 JMP EXIT_CHECK_DATE_CHANGE ;;AN000;
224 .ENDIF ;;AN000;
225 .ENDIF ;;AN000;
226 .ENDIF ;;AN000;
227 STC ;;AN000;
228EXIT_CHECK_DATE_CHANGE: ;;AN000;
229 ENDM ;;AN000;
230;;****************************************************************************
231;;
232;; SET_FILE_DATE_TIME: Set a files date and time.
233;;
234;; SYNTAX: SET_FILE_DATE_TIME file_handle, var_hour, var_minutes, var_seconds
235;; var_year, var_month, var_day
236;;
237;; INPUT:
238;; file_handle = The handle of the file to set the time/date of.
239;; var_hour = 0 - 23 ( 16 bits )
240;; var_minutes = 0 - 59 ( 16 bits )
241;; var_seconds = 0 - 59 ( 16 bits )
242;; var_year = 1980 - 2099 ( 16 bits )
243;; var_month = 1 - 12 ( 16 bits )
244;; var_day = 1 - 31 ( 16 bits )
245;;
246;; OUTPUTS:
247;; CY = 0: Success
248;; CY = 1: Error - Date/Time format is invalid
249;;
250;; OPERATION: The data and time values are converted to internal formats
251;; defined below and DOS function call 57h is performed to set the
252;; files date and time.
253;;
254;;
255;; The internal time format is:
256;; bits 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
257;; h h h h h m m m m m m x x x x x
258;;
259;; h - Binary number of hours ( 0 - 23 )
260;; m - Binary number of minutes ( 0 - 59 )
261;; x - Binary number of two second increments
262;;
263;; The internal date format is:
264;; bits 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
265;; y y y y y y y m m m m d d d d d
266;;
267;; y - 0 - 119 ( 1980 - 2099 )
268;; m - 1 - 31
269;; d - 1 - 31
270;;
271;;****************************************************************************
272SET_FILE_DATE_TIME MACRO FILE_HANDLE, VAR_HOUR, VAR_MINUTES, VAR_SECONDS, VAR_YEAR, VAR_MONTH, VAR_DAY ;;AN000;
273 CALL HOOK_INT_24 ;;AN000;
274 ;;
275 ;; Handle the file's time first
276 ;;
277 MOV BX, VAR_SECONDS ;;AN000; Get the number of seconds
278 SHR BX, 1 ;;AN000; Need the number of 2 seconds
279 MOV AX, VAR_MINUTES ;;AN000; Get the number of minutes
280 MOV CL, 5 ;;AN000;
281 SHL AX, CL ;;AN000; Least significant bit #5
282 OR BX, AX ;;AN000;
283 MOV AX, VAR_HOUR ;;AN000; Get the number of hours
284 XCHG AH, AL ;;AN000;
285 MOV CL, 3 ;;AN000;
286 SHL AX, CL ;;AN000; Put hours at bit #11
287 OR BX, AX ;;AN000;
288 ;;
289 ;; Handle the file's date now
290 ;;
291 MOV DX, VAR_DAY ;;AN000; Get the day.
292 MOV AX, VAR_MONTH ;;AN000;
293 MOV CL, 5 ;;AN000;
294 SHL AX, CL ;;AN000; Least significant month bit #5
295 OR DX, AX ;;AN000;
296 MOV AX, VAR_YEAR ;;AN000; Get the year (1980 - 2099)
297 SUB AX, 1980 ;;AN000; Put in the range 0 - 119
298 XCHG AL, AH ;;AN000;
299 SHL AX, 1 ;;AN000;
300 OR DX, AX ;;AN000;
301
302 MOV CX, BX ;;AN000;
303 MOV BX, FILE_HANDLE ;;AN000;
304 MOV AX, 5701H ;;AN000;
305 DOSCALL ;;AN000;
306 CALL RESTORE_INT_24 ;;AN000;
307
308 ENDM ;;AN000;
309;;************************************************************************;;
310;;
311;; CHECK_CLOCK: Check if the real time clock is operating.
312;;
313;; SYNTAX: CHECK_CLOCK
314;;
315;; INPUT:
316;; None.
317;;
318;; OUTPUT:
319;; CY = 0: Real time clock is operating
320;; CY = 1: Real time clock is not operating
321;;
322;; OPERATION: A call to the real time clock services (INT 1Ah, AH = 02h)
323;; is performed to get the real time clock. If the clock is operating,
324;; the time is returned in the registers and CF = 0 is returned. If the
325;; clock is not operating, CF = 1 is returned.
326;;
327;; Since the older machines may not have the clock services interrupt,
328;; the registers are set to zero before the call is made and checked for
329;; non-zero on return.
330;;
331;;****************************************************************************
332CHECK_CLOCK MACRO ;;AN000;
333 MOV CX, 0 ;;AN000; Zero the registers for later comparison
334 MOV DX, 0 ;;AN000;
335 MOV AH, 02 ;;AN000;
336 INT 1AH ;;AN000; Time of day service routine
337 .IF < ZERO CX > AND ;;AN000; If CX and DH are zero, clock is not there.
338 .IF < ZERO DH > ;;AN000;
339 STC ;;AN000;
340 .ELSE ;;AN000;
341 CLC ;;AN000; The clock is there!
342 .ENDIF ;;AN000;
343
344 ENDM ;;AN000;
345INCLUDE 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 @@
1;;****************************************************************************
2;; Assembler MACROS for use with SELECT.
3;; File: MACROS5.INC
4;; Latest Change Date: July 28, 1987
5;;
6;; These macros define powerful assembler verbs neccessary for SELECT.
7;;
8;; Note: Many of the macros make use of an ASCII-N string for passing
9;; parameters. The string is defined below.
10;; DW count
11;; DB "string_variable",?
12;;
13;; COUNT is the length of the string and is a word.
14;; It is necessary to follow the string with at least one byte for the
15;; purpose of changing the ASCII-N string to an ASCII-Z string.
16;;
17;;****************************************************************************
18page ;;AN000;
19;;************************************************************************;;
20;;
21;; GET_COUNTRY_DEFAULTS: Get country, keyboard and codepage for the
22;; specified entry from the CTY_TABLE.
23;;
24;; SYNTAX: GET_COUNTRY_DEFAULTS VAR_TABLE, VAR_INDEX
25;;
26;; INPUT:
27;; VAR_TABLE = 1: Use CTY_TAB_A
28;; = 2: Use CTY_TAB_B
29;; VAR_INDEX = index into country list table
30;;
31;; OUTPUT:
32;; N_COUNTRY = Country code
33;; N_KYBD_VAL = 0: Keyboard code is not valid
34;; = 1: Keyboard code is valid
35;; S_KEYBOARD = Keyboard code (ASCII-N format)
36;; N_CP_PRI = Primary code page
37;; N_CP_SEC = Secondary code page
38;; N_DESIGNATES = Number of disignates
39;; N_CPSW = Cpsw status
40;; N_CTY_RES = Reserved
41;;
42;;
43;; OPERATION: The country code, keyboard, primary codepage and the
44;; seondary codepage from the CTY_TABLE for the specified index is
45;; returned as spedified above.
46;;
47;; Note: Index of the first item is the table is 1.
48;;
49;;****************************************************************************
50GET_COUNTRY_DEFAULTS MACRO VAR_TABLE, VAR_INDEX ;;AN000;
51
52 MOV BX, VAR_TABLE ;;AN000; Get which table to search
53 MOV AX, VAR_INDEX ;;AN000; Get where to start in the table
54 CALL GET_CNTY_DEF_ROUTINE ;;AN000;
55 ENDM ;;AN000;
56
57;;************************************************************************;;
58;;
59;; GET_DOS_COUNTRY: Get current country information.
60;;
61;; SYNTAX: GET_DOS_COUNTRY buffer, var_country
62;;
63;; INPUT:
64;; BUFFER = 38 byte data buffer area for country information.
65;;
66;; OUTPUT:
67;; VAR_COUNTRY = Default country code
68;;
69;; OPERATION: DOS function call 65h (id=1) is performed to get the extended
70;; country information into the specified data buffer for the default
71;; and the active CON device. The country code value from the data buffer
72;; is returned in the memory variable specified.
73;;
74;;****************************************************************************
75GET_DOS_COUNTRY MACRO BUFFER, VAR_COUNTRY ;;AN000;
76
77
78 PUSH ES ;;AN000;
79 PUSH DS ;;AN000;
80 POP ES ;;AN000;
81
82 MOV DI, OFFSET BUFFER ;;AN000; Get the address of the buffer
83 MOV AX, 6501H ;;AN000; Fn call 65h with ID value = 1
84 MOV BX, -1 ;;AN000; Code page of interest (current)
85 MOV DX, -1 ;;AN000; Get information for default country
86 MOV CX, 38 ;;AN000; Amount of data to return
87 DOSCALL ;;AN000;
88
89 MOV BX, [DI]+3 ;;AN000; Get the country ID
90 MOV VAR_COUNTRY, BX ;;AN000;
91
92 POP ES ;;AN000;
93
94 ENDM ;;AN000;
95;;****************************************************************************
96;;
97;; GET_COUNTRY_INDEX: Scan CTY_TABLE for the specified country code and
98;; return index of country code into the table.
99;;
100;; SYNTAX: GET_COUNTRY_INDEX var_country, var_tab, var_index
101;;
102;; INPUT:
103;; var_country = The country code
104;;
105;; OUTPUT:
106;; var_tab = 1: Country code is in table CTY_TAB_A
107;; = 2: Country code is in table CTY_TAB_B
108;; var_index = The index into the country list.
109;;
110;; OPERATION: The CTY_TABLE is scanned for the specified country code and
111;; the index into the table is returned.
112;;
113;; Note: The index of the first item in the table is 1.
114;;
115;;************************************************************************;;
116GET_COUNTRY_INDEX MACRO VAR_COUNTRY, VAR_TAB, VAR_INDEX ;;AN000;
117
118 MOV CX, VAR_COUNTRY ;;AN000; Get the country index
119 CALL GET_CNTY_INDEX_ROUTINE ;;AN000; Search the table for this value
120 MOV VAR_TAB, DX ;;AN000; Which table it was found in
121 MOV VAR_INDEX, BX ;;AN000; Which location in that table
122 ENDM ;;AN000;
123;;****************************************************************************
124;;
125;; GET_KEYBOARD_INDEX: Scan KYBD_TABLE for the specified keyboard code and
126;; return index of keyboard code in the table and the
127;; alternate keyboard indicator.
128;;
129;; SYNTAX: GET_KEYBOARD_INDEX name_kybd, var_table, var_index, var_alt
130;;
131;; INPUT:
132;; name_kybd = The keyboard code in ASCII-N format.
133;;
134;; OUTPUT:
135;; var_table = 1: Keyboard is IN table KYBD_TAB_A
136;; = 2: Keyboard is in table KYBD_TAB_B
137;; var_index = The index into keyboard table.
138;; var_alt = 0: No alternate keyboard
139;; = 1: Alternate keyboard present
140;;
141;; OPERATION: The KYBD_TABLE is scanned for the specifies keyboard code and
142;; the index into the table is returned.
143;;
144;; Note: The index of the first item in the table is 1.
145;;
146;;************************************************************************
147GET_KEYBOARD_INDEX MACRO NAME_KYBD, VAR_TABLE, VAR_INDEX, VAR_ALT ;;AN000;
148
149 MOV DI, OFFSET NAME_KYBD ;;AN000; The name of the keyboard to search for
150 CALL GET_KYBD_INDEX_ROUTINE ;;AN000; Search for this keyboard code
151 MOV VAR_TABLE, DX ;;AN000; Which table the code was found in
152 MOV VAR_INDEX, BX ;;AN000; Which index in the table
153 MOV VAR_ALT, AL ;;AN000; Returned alternate keyboard byte
154 ENDM ;;AN000;
155;;************************************************************************;;
156;;
157;; GET_KEYBOARD: Get the keyboard code and the alternate keyboard
158;; indicator from the KYBD_TABLE for the item specified by the index
159;; into the keyboard table.
160;;
161;; SYNTAX: GET_KEYBOARD var_table, var_index, name_kybd, var_alt
162;;
163;; INPUT:
164;; var_table = 1: Keyboard code is in table KYBD_TAB_A
165;; = 2: Keyboard code is is table KYBD_TAB_B
166;; var_index = index into the keyboard table.
167;;
168;; OUTPUT:
169;; name_kybd = keyboard code in ASCII-N format.
170;; var_alt = 0: No alternate keyboard
171;; = 1: Alternate keyboard present
172;;
173;; OPERATION: The keyboard code from the KYBD_TABLE for the specified
174;; index item is returned. Also, the alternate keyboard present
175;; variable is updated.
176;;
177;; Note: Index of the first item in the table is 1.
178;;
179;;****************************************************************************
180GET_KEYBOARD MACRO VAR_TABLE, VAR_INDEX, NAME_KYBD, VAR_ALT ;;AN000;
181
182 MOV AX, VAR_INDEX ;;AN000; Where to start the search
183 MOV CX, VAR_TABLE ;;AN000; Which table to search
184 MOV DI, OFFSET NAME_KYBD ;;AN000; The name of the keyboard code returned
185 CALL GET_KYBD_ROUTINE ;;AN000;
186 MOV VAR_ALT, AL ;;AN000; Returned alternate code
187 ENDM ;;AN000;
188;;************************************************************************;;
189;;
190;; GET_ALT_KYBD_TABLE: Scan the ALT_KYB_TABLE for the specified keyboard,
191;; and return the pointer to the specified keyboards alternate keyboard
192;; code list.
193;;
194;; SYNTAX: GET_ALT_KYBD_TABLE name_kybd, var_table, var_kyb
195;;
196;; INPUT:
197;; name_kybd = Keyboard code in ASCII-N format.
198;;
199;; OUTPUT:
200;; var_table = Pointer to alternat keyboards list.
201;; var_kyb = 1: French
202;; = 2: Italian
203;; = 3: UK English
204;;
205;; OPERATION: The ALT_KYB_TABLE is scanned for the specified keyboard
206;; code. Pointer to a table of alternate keyboards available for the
207;; specified keyboard code is returned as well as the keyboard identifier.
208;;
209;;****************************************************************************
210GET_ALT_KYBD_TABLE MACRO NAME_KYBD, VAR_TABLE, VAR_KYB ;;AN000;
211 ;;
212 MOV SI, OFFSET ALT_KYB_TAB_1 ;;AN000; Offset of the data in the table
213 MOV AL, ALT_KYB_TABLE ;;AN000; Number of entries in the table
214 MOV BX, 1 ;;AN000; Index currently being scaned
215 ;;
216 MOV DX, NAME_KYBD+2 ;;AN000;
217 .WHILE <<WORD PTR [SI]> NE DX > AND ;;AN000;
218 .WHILE < BL LE AL > ;;AN000;
219 INC BL ;;AN000;
220 ADD SI, TYPE ALT_KYB_DEF ;;AN000;
221 .ENDWHILE ;;AN000;
222 ;;
223 .IF < BL GT AL > ;;AN000; Entry NOT found
224 MOV VAR_KYB, 0 ;;AN000;
225 MOV VAR_TABLE, 0 ;;AN000; Pointer is 0 since entry not found
226 .ELSE ;;AN000;
227 COPY_WORD VAR_TABLE, [SI]+2 ;;AN000; Copy the table entries
228 COPY_BYTE VAR_KYB, [SI]+4 ;;AN000;
229 .ENDIF ;;AN000;
230 ;;
231 ENDM ;;AN000;
232;;************************************************************************;;
233;;
234;; GET_ALT_KEYBOARD: Get the alternate keyboard code from the specified
235;; alternate keyboard table for the item specified by the index.
236;;
237;; SYNTAX: GET_ALT_KEYBOARD var_table, var_kyb, var_index, name_kybd
238;;
239;; INPUT:
240;; var_table = Pointer to alternate keyboard table
241;; var_kyb = 1: French
242;; = 2: Italian
243;; = 3: UK English
244;; var_index = Index into the keyboard table.
245;;
246;; OUTPUT:
247;; name_kybd = The keyboard code in ASCII-N format.
248;;
249;; OPERATION: The keyboard code from the specified table for the
250;; specified index item is returned.
251;;
252;; NOTE: The index of the first item is the table is 1.
253;;
254;;****************************************************************************
255GET_ALT_KEYBOARD MACRO VAR_TABLE, VAR_KYB, VAR_INDEX, NAME_KYBD ;;AN000;
256
257 MOV AX, VAR_INDEX ;;AN000; Get the table index
258 DEC AX ;;AN000; Make the index start at 0
259 MOV SI, VAR_TABLE ;;AN000; Pointer to the table
260 INC SI ;;AN000; Adjust pointer for table length byte
261 .IF < VAR_KYB EQ ALT_FRENCH> ;;AN000;
262 MOV CX, TYPE FR_STRUC ;;AN000;
263 .ELSEIF < VAR_KYB EQ ALT_ITALIAN > ;;AN000;
264 MOV CX, TYPE IT_STRUC ;;AN000;
265 .ELSE ;;AN000;
266 MOV CX, TYPE UK_STRUC ;;AN000;
267 .ENDIF ;;AN000;
268 MUL CX ;;AN000;
269 ADD SI, AX ;;AN000; Get the address of the required entry
270 ;;
271 PUSH ES ;;AN000;
272 PUSH DS ;;AN000;
273 POP ES ;;AN000;
274 MOV DI, OFFSET NAME_KYBD ;;AN000;
275 MOV CX, LEN_ALT_KYBD_ID ;;AN000; Number of bytes in the keyboard code
276 MOV [DI], CX ;;AN000;
277 ADD DI, 2 ;;AN000;
278 CLD ;;AN000;
279 REP MOVSB ;;AN000;
280 POP ES ;;AN000;
281 ENDM ;;AN000;
282;;****************************************************************************
283;;
284;; EXEC_PROGRAM: Loads another program into memory and begins execution.
285;;
286;; SYNTAX: EXEC_PROGRAM child, name_com, parm_block, re_dir
287;;
288;; INPUT: child = Name of the program to execute (ASCII-N format)
289;; name_com = The command line to be passed to parm_block
290;; parm_block = Parameter block for child program.
291;; re_dir = 1: Redirect Stdout and Stderr to null
292;; = 0: Don't redirect output.
293;;
294;; OUTPUT: CY = 0: Successful
295;; CY = 1: Error - AX has the error code.
296;;
297;; OPERATION: The command line to be passed to the parameter block is
298;; copied to the command buffer specified for the parameter block and
299;; a carrage return is appended to the end of the buffer. (The
300;; command line length can be zero.
301;;
302;; The segment offsets in the parameter block are defined and DOS
303;; function call 29H is performed to set up the default FCB's.
304;;
305;; DOS function call 4Bh is performed to load and execute the
306;; specified child program. The contents of SS and SP are destroyed
307;; during the call, so they must be save and restored later. When the
308;; parent program (SELECT) gets control, all available memory is
309;; allocated to it. It is assumed that memory has been freed (Function
310;; call 4Ah - FREE_MEM) before invoking this function.
311;;
312;;************************************************************************;;
313EXEC_PROGRAM MACRO CHILD, NAME_COM, PARM_BLOCK, RE_DIR ;;AN000;
314
315 MOV AX, OFFSET CHILD ;;AN000;
316 PUSH AX ;;AN000;
317 MOV AX, OFFSET NAME_COM ;;AN000;
318 PUSH AX ;;AN000;
319 MOV AX, OFFSET PARM_BLOCK ;;AN000;
320 PUSH AX ;;AN000;
321 MOV AX, RE_DIR ;;AN000;
322 PUSH AX ;;AN000;
323 CALL EXEC_PROGRAM_ROUTINE ;;AN000;
324 ENDM ;;AN000;
325;;*****************************************************************************
326;;
327;; FREE_MEM: Free memory by modifying the memory block
328;;
329;; SYNTAX: FREE_MEM address
330;;
331;; INPUT:
332;; address - The address of the first free paragraph in memory.
333;;
334;; OUTPUT: CY = 0, AX=undefined, successful
335;; CY = 1, AX= error code
336;;
337;; OPERATION:
338;;
339;; FREEMEM MODIFIES ALLOCATED MEMORY BLOCKS TO
340;; CONTAIN THE NEW SPECIFIED BLOCK SIZE.
341;; IT MAKES USE OF DOS INT 21 (AH=4AH).
342;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
343;; IS RETURNED IN AX.
344;;
345;;****************************************************************************
346FREE_MEM MACRO address ;;AN000;
347 PUSH ES ;;AN000;
348 MOV AH,62H ;;AN000;
349 DOSCALL ;;AN000; Get the current PSP segment
350 MOV ES,BX ;;AN000; Load current PSP segment
351 MOV BX, ADDRESS ;;AN000; size of program in paragraphs in bx reg
352
353 MOV AH,4AH ;;AN000; free memory function
354 DOSCALL ;;AN000;
355 POP ES ;;AN000;
356 ENDM ;;AN000;
357;;****************************************************************************
358;;
359;; CLEAR_SCREEN: clear the screen to white on blue
360;;
361;; SYNTAX: CLEAR_SCREEN
362;;
363;; INPUT:
364;; None.
365;;
366;; OUTPUT:
367;; None.
368;;
369;; OPERATION: Clears the screen using the BIOS function to scroll the
370;; screen completely.
371;;
372;;****************************************************************************
373CLEAR_SCREEN MACRO ;;AN000;
374 MOV CX,0 ;;AN000;
375 MOV DX,184Fh ;;AN000; scroll screen from (0,0) tO (24,79)
376 MOV AX,0600h ;;AN000; AH = 6, Scroll Function
377 ;; AL = 0, Clear scroll area
378 MOV BH,01FH ;;AN000; video I/O interrupt
379 INT 10H ;;AN000;
380 MOV DX,0 ;;AN000; RKJ-set cursor posn to top right hand corner
381 MOV BH,0 ;;AN000; RKJ
382 MOV AH,2 ;;AN000; RKJ
383 INT 10H ;;AN000; RKJ
384 ENDM ;;AN000;
385;;****************************************************************************
386;;
387;; CLEAR_SCREEN2: clear the screen to white on black
388;;
389;; SYNTAX: CLEAR_SCREEN2
390;;
391;; INPUT:
392;; None.
393;;
394;; OUTPUT:
395;; None.
396;;
397;; OPERATION: Clears the screen using the BIOS function to scroll the
398;; screen completely.
399;;
400;;****************************************************************************
401CLEAR_SCREEN2 MACRO ;;AN000;
402 MOV CX,0 ;;AN000;
403 MOV DX,184Fh ;;AN000; scroll screen from (0,0) tO (24,79)
404 MOV AX,0600h ;;AN000; AH = 6, Scroll Function
405 ;; AL = 0, Clear scroll area
406 MOV BH,7 ;;AN000; video I/O interrupt
407 INT 10H ;;AN000;
408 MOV DX,0 ;;AN000; RKJ-set cursor posn to top right hand corner
409 MOV BH,0 ;;AN000; RKJ
410 MOV AH,2 ;;AN000; RKJ
411 INT 10H ;;AN000; RKJ
412 ENDM ;;AN000;
413;;****************************************************************************
414;;
415;; POS_CURSOR: position the cursor to top left corner of screen
416;;
417;; SYNTAX: POS_CURSOR
418;;
419;; INPUT:
420;; None.
421;;
422;; OUTPUT:
423;; None.
424;;
425;; OPERATION: Homes the cursor using the BIOS function call.
426;;
427;;****************************************************************************
428POS_CURSOR MACRO ;;AN085; SEH
429 PUSH AX ;;AN085; SEH
430 PUSH BX ;;AN085; SEH
431 PUSH CX ;;AN085; SEH
432 PUSH DX ;;AN085; SEH
433 PUSH SI ;;AN085; SEH
434 PUSH DI ;;AN085; SEH
435 PUSH ES ;;AN085; SEH
436 MOV DX,0 ;;AN085; SEH-set cursor posn to top left hand corner
437 XOR BH,BH ;;AN085; SEH
438 MOV AH,2 ;;AN085; SEH
439 INT 10H ;;AN085; SEH
440 POP ES ;;AN085; SEH
441 POP DI ;;AN085; SEH
442 POP SI ;;AN085; SEH
443 POP DX ;;AN085; SEH
444 POP CX ;;AN085; SEH
445 POP BX ;;AN085; SEH
446 POP AX ;;AN085; SEH
447ENDM ;;AN085; SEH
448;;****************************************************************************
449;;
450;; BEEP: Produce a tone on the PC speaker
451;;
452;; SYNTAX: BEEP frequency, duration
453;;
454;; INPUT: frequency = 37 to 32767
455;; duration = 1 to 65535
456;;
457;; OUTPUT: A SOUND
458;;
459;; OPERATION:
460;;
461;; BEEP CREATES A TONE USING THE PC SPEAKER
462;;
463;;****************************************************************************
464BEEP MACRO FREQ,DUR ;;AN000;
465
466
467 MOV DI, FREQ ;;AN000; set the frequency
468 MOV BX, DUR ;;AN000; set the duration
469 CALL BEEP_ROUTINE ;;AN000;
470
471 ENDM ;;AN000;
472;;**************************************************************************
473;;
474;; GOTO : used instead of branching assembler intructions
475;;
476;; SYNTAX: GOTO label
477;;
478;; INPUT: label = an assembler label for a branching instruction
479;;
480;; OUTPUT: none
481;;
482;; OPERATION:
483;;
484;;
485;;**************************************************************************
486GOTO MACRO LABEL ;;AN000;
487 JMP LABEL ;;AN000; jump to label
488 ENDM ;;AN000;
489;;************************************************************************;;
490;;
491;; BYTE_TO_CHAR: Convert a 8-bit binary number to ASCII format.
492;;
493;; SYNTAX: BYTE_TO_CHAR var_num, name_str
494;;
495;; INPUT:
496;; var_num = binary number to convert. (8 bits)
497;;
498;; OUTPUT:
499;; name_str = ASCII-N string for the specifed value.
500;;
501;; OPERATION: The specified 8 bit numeric variable contents are converted
502;; to ASCII and stored in ASCII-N format. Leading zeros will not be
503;; stored.
504;;
505;;************************************************************************;;
506BYTE_TO_CHAR MACRO VAR_NUM, NAME_STR ;;AN000;
507
508
509 MOV AL, VAR_NUM ;;AN000;
510 MOV AH, 0 ;;AN000;
511 MOV DI, OFFSET NAME_STR ;;AN000;
512 CALL BIN_TO_CHAR_ROUTINE ;;AN000;
513 ENDM ;;AN000;
514;;************************************************************************;;
515;;
516;; WORD_TO_CHAR: Convert a binary number to ASCII format.
517;;
518;; SYNTAX: WORD_TO_CHAR var_num, name_str
519;;
520;; INPUT:
521;; var_num = binary number to convert. (16 bits)
522;;
523;; OUTPUT:
524;; name_str = ASCII-N string for the specifed value.
525;;
526;; OPERATION: The specified 16 bit numeric variable contents are converted
527;; to ASCII and stored in ASCII-N format. Leading zeros will not be
528;; stored.
529;;
530;;************************************************************************;;
531WORD_TO_CHAR MACRO VAR_NUM, NAME_STR ;;AN000;
532
533 MOV AX, VAR_NUM ;;AN000;
534 MOV DI, OFFSET NAME_STR ;;AN000;
535 CALL BIN_TO_CHAR_ROUTINE ;;AN000;
536 ENDM ;;AN000;
537
538INCLUDE 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 @@
1;;**************************************************************************** ;;AN000;
2;; Assembler MACROS for use with SELECT. ;;AN000;
3;; File: MACROS6.INC ;;AN000;
4;; Latest Change Date: July 27, 1987 ;;AN000;
5;; ;;AN000;
6;; These macros define powerful assembler verbs neccessary for SELECT. ;;AN000;
7;; ;;AN000;
8;; Note: Many of the macros make use of an ASCII-N string for passing ;;AN000;
9;; parameters. The string is defined below. ;;AN000;
10;; DW count ;;AN000;
11;; DB "string_variable",? ;;AN000;
12;; ;;AN000;
13;; COUNT is the length of the string and is a word. ;;AN000;
14;; It is necessary to follow the string with at least one byte for the ;;AN000;
15;; purpose of changing the ASCII-N string to an ASCII-Z string. ;;AN000;
16;; ;;AN000;
17;;**************************************************************************** ;;AN000;
18page ;;AN000; ;;AN000;
19;;**************************************************************************** ;;AN000;
20;; ;;AN000;
21;; SCAN_PARAMETERS: Scan SELECT command line for parameters. ;;AN000;
22;; ;;AN000;
23;; SYNTAX: SCAN_PARAMETERS mode ;;AN000;
24;; ;;AN000;
25;; INPUT: ;;AN000;
26;; PSP command line ;;AN000;
27;; ;;AN000;
28;; OUTPUT: ;;AN000;
29;; mode = Install mode ;;AN000;
30;; = 0: Parameter is MENU ;;AN000;
31;; = 1: Parameter is FDISK ;;AN000;
32;; = 0FFH: Parameter is invalid ;;AN000;
33;; ;;AN000;
34;; OPERATION: The SELECT command line is scanned for parameters. The ;;AN000;
35;; return codes for the various parameters are provided in variables ;;AN000;
36;; defined above. ;;AN000;
37;; ;;AN000;
38;; Note: ;;AN000;
39;; Before this macro is executed, there must be as ASSUME ES:DATA ;;AN000;
40;; statement. If not, the parser will not execute properly and ;;AN000;
41;; either the computer will hang or erroneous values will be returned. ;;AN000;
42;; ;;AN000;
43;;**************************************************************************** ;;AN000;
44SCAN_PARAMETERS MACRO MODE ;;AN000;
45 ;;AN000;
46 CALL SCAN_PARAMETERS_ROUTINE ;;AN000;
47 MOV MODE, AX ;;AN000;
48 ENDM ;;AN000;
49;;**************************************************************************** ;;AN000;
50;; ;;AN000;
51;; SCAN_INFO_FILE: Scan SELECT.TMP for parameters. ;;AN000;
52;; ;;AN000;
53;; SYNTAX: SCAN_INFO_FILE option_0, option_1, option_2, option_3, path, filename, buffer, buff_size ;;AC033;SEH add option_3 parameter
54;; ;;AN000;
55;; INPUT: ;;AN000;
56;; filename = The name of the file which contains the FDISK parameters. ;;AN000;
57;; (ASCII-N format) ;;AN000;
58;; buffer = A buffer where the data read from the file can be stored. ;;AN000;
59;; buff_size = The size of the buffer. ;;AN000;
60;; ;;AN000;
61;; OUTPUT: ;;AN000;
62;; option_1 = 1 ;;AC033;
63;; = 2 ;;AC033;
64;; = 3 ;;AC033;
65;; = 0FFh: Parameter is invalid (not 1, 2, 3) ;;AC033;
66;; option_2 = 1 ;;AC033;
67;; = 2 ;;AC033;
68;; = 0FFh: Parameter is invalid (not 1, 2) ;;AC033;
69;; option_3 = 1 ;;AC033;
70;; = 2 ;;AC033;
71;; = 0FFh: Parameter is invalid (not 1, 2) ;;AC033;
72;; path = Install path in ASCII-N format ;;AN000;
73;; ;;AN000;
74;; OPERATION: ;;AN000;
75;; If the parameter on the command line is FDISK, then the ;;AN000;
76;; file specified in FILENAME is opened and additional parameters ;;AN000;
77;; are read. If the parameters in the file are invalid, or if the file ;;AN000;
78;; cannot be found, then 0FFh is returned in MODE and OPTION, and the ;;AN000;
79;; path length is set to zero. ;;AN000;
80;; ;;AN000;
81;;**************************************************************************** ;;AN000;
82SCAN_INFO_FILE MACRO OPTION_0, OPTION_1, OPTION_2, OPTION_3, PATH, FILENAME, BUFFER, BUFF_SIZE
83 ;;AN000;
84 MOV AX, OFFSET PATH ;;AN000;
85 PUSH AX ;;AN000;
86 MOV AX, OFFSET FILENAME ;;AN000;
87 PUSH AX ;;AN000;
88 MOV AX, OFFSET BUFFER ;;AN000;
89 PUSH AX ;;AN000;
90 MOV AX, BUFF_SIZE ;;AN000;
91 PUSH AX ;;AN000;
92 CALL SCAN_INFO_FILE_ROUTINE ;;AN000;
93 mov option_0, ax
94 MOV OPTION_1, BX ;;AN000;
95 MOV OPTION_2, CX ;;AN000;
96 MOV OPTION_3, DX ;;AN033;SEH return OPTION_3, also
97 ENDM ;;AN000;
98;;**************************************************************************** ;;AN000;
99;; ;;AN000;
100;; COPY_FILES: Copy a list of files from the A diskette to either the B ;;AN000;
101;; or C drive. ;;AN000;
102;; ;;AN000;
103;; SYNTAX: COPY_FILES target_disk, file_table, num_files, path ;;AN000;
104;; ;;AN000;
105;; INPUT: ;;AN000;
106;; target_disk = 1: Copy the files to the B drive ;;AN000;
107;; = 2: Copy the files to the C drive ;;AN000;
108;; ;;AN000;
109;; path = The path where the files are to be copied if the ;;AN000;
110;; destination is the hard disk. ;;AN000;
111;; ;;AN000;
112;; file_table = A table listing the files to copy. It is of the ;;AN000;
113;; following format. ;;AN000;
114;; ;;AN000;
115;; db filename ;;AN000;
116;; ;;AN000;
117;; - The filename must be padded out to 12 characters. ;;AN000;
118;; ;;AN000;
119;; num_files = The number of files in the list. ;;AN000;
120;; ;;AN000;
121;; OUTPUT: ;;AN000;
122;; None. ;;AN000;
123;; ;;AN000;
124;; OPERATION: The files listed in the table are copied to the destination ;;AN000;
125;; from the A drive. If the destination is C, then a path ;;AN000;
126;; path can be specified. ;;AN000;
127;; ;;AN000;
128;;**************************************************************************** ;;AN000;
129COPY_FILES MACRO DEST, FILE_TABLE, NUM_FILES ;;AN000;
130 ;;AN000;
131 MOV AX, DEST ;;AN000;
132 MOV BX, OFFSET FILE_TABLE ;;AN000;
133 MOV CX, NUM_FILES ;;AN000;
134 CALL HOOK_INT_24 ;AN000;JW ;;AN000;JW
135 CALL MOD_XCOPY ;;AN000;
136 CALL RESTORE_INT_24 ;AN000;JW ;;AN000;JW
137 ENDM ;;AN000;
138 ;;AN000;JW
139COPY_FILES2 MACRO DEST, FILE_TABLE, NUM_FILES, PATH ;;AN111;JW
140 ;;AN111;JW
141 MOV AX, DEST ;;AN111;JW
142 MOV BX, OFFSET FILE_TABLE ;;AN111;JW
143 MOV CX, NUM_FILES ;;AN111;JW
144 MOV SI, OFFSET PATH ;;AN111;JW
145 CALL HOOK_INT_24 ;AN000;JW ;;AN111;JW
146 CALL MOD_XCOPY ;;AN111;JW
147 CALL RESTORE_INT_24 ;AN000;JW ;;AN111;JW
148 ENDM ;;AN111;JW
149 ;;AN000;
150;;**************************************************************************** ;;AN000;
151;; ;;AN000;
152;; INSTALL_FILES: Install the files from the original diskettes to the ;;AN000;
153;; startup and the operations diskette. ;;AN000;
154;; ;;AN000;
155;; SYNTAX: INSTALL_FILES source_disk, target_disk ;;AN000;
156;; ;;AN000;
157;; INPUT: ;;AN000;
158;; source_disk = 1: Read the files from the first diskette ;;AN000;
159;; = 2: Read the files from the second diskette ;;AN000;
160;; ;;AN000;
161;; target_disk = 1: Copy the files to the start-up diskette ;;AN000;
162;; = 2: Copy the files to the operations diskette ;;AN000;
163;; = 3: Copy the files to the hard disk ;;AN000;
164;; ;;AN000;
165;; OUTPUT: ;;AN000;
166;; None. ;;AN000;
167;; ;;AN000;
168;; OPERATION: ;;AN000;
169;; ;;AN000;
170;;**************************************************************************** ;;AN000;
171INSTALL_FILES MACRO SOURCE_DISK, TARGET_DISK ;;AN000;
172 ;;AN000;
173 COPY_FILES SOURCE_DISK, TARGET_DISK, S_INSTALL_PATH, DOS_FILES, NUM_DOS_FILES ;;AN000;
174 ENDM ;;AN000;
175;;**************************************************************************** ;;AN000;
176;; ;;AN000;
177;; GET_PRINTER_TITLES: Read the printer profile file and load the printer ;;AN000;
178;; names into a table. ;;AN000;
179;; ;;AN000;
180;; SYNTAX: GET_PRINTER_TITLES filename ;;AN000;
181;; ;;AN000;
182;; INPUT: ;;AN000;
183;; filename = A ASCII-N string containing the name of the file containing ;;AN000;
184;; the printer profile. ;;AN000;
185;; ;;AN000;
186;; OUTPUT: ;;AN000;
187;; If CY = 0, No error was encountered. The following information is returned: ;;AN000;
188;; SEGMENT_LOCATION = The segment where the printer names table is held ( 16 bit ) ;;AN000;
189;; NAMES_TABLE_OFFSET = The offset in the segment of the printer names table ( 16 bit ) ;;AN000;
190;; LONGEST_NAME = The longest printer name in the file ( 16 bit ) ;;AN000;
191;; SIZE_NAMES_TABLE_ENTRY = The number of bytes between each printer name in the table (abs value ) ;;AN000;
192;; PRINTER_NAME_INDEX = The number of names in the table. ( 16 bit ) ;;AN000;
193;; If CY = 1, An error was encountered. ;;AN000;
194;; BX - Contains an error number as defined below. ;;AN000;
195;; AX - Contains the DOS error number if the error listed in BX is a ;;AN000;
196;; file related error. ;;AN000;
197;; ;;AN000;
198;; Error number Explaination. ;;AN000;
199;; ;;AN000;
200;; 1 There is not enough memory to build the names ;;AN000;
201;; table and provide a data buffer for reading the ;;AN000;
202;; file information. ;;AN000;
203;; ;;AN000;
204;; 2 There was an error opening the printer profile file. ;;AN000;
205;; AX contains the DOS error code. ;;AN000;
206;; ;;AN000;
207;; 3 There was an error reading the printer profile file. ;;AN000;
208;; AX contains the DOS error code. ;;AN000;
209;; ;;AN000;
210;; 4 The number at the beginning of the printer profile ;;AN000;
211;; giving the number of definitions in the file was ;;AN000;
212;; either missing or was greater then 255. ;;AN000;
213;; ;;AN000;
214;; 5 A line in the printer profile file was found to ;;AN000;
215;; be longer then allowed in the buffer. ;;AN000;
216;; ;;AN000;
217;; 6 There was an error find a printer name in the file ;;AN000;
218;; ;;AN000;
219;; 7 There was an error updating the file pointer ;;AN000;
220;; ;;AN000;
221;; 8 There are more then 255 printer definitions in the ;;AN000;
222;; file. ;;AN000;
223;; ;;AN000;
224;; 9 The number of actual definitions in the printer profile ;;AN000;
225;; file did not agree with the number given at the ;;AN000;
226;; beginning of the file. ;;AN000;
227;; ;;AN000;
228;; 10 There was an error allocating the memory needed for ;;AN000;
229;; the data. ;;AN000;
230;; ;;AN000;
231;; ;;AN000;
232;; OPERATION: ;;AN000;
233;; ;;AN000;
234;;**************************************************************************** ;;AN000;
235GET_PRINTER_TITLES MACRO FILENAME ;;AN000;
236 ;;AN000;
237 MOV DI, OFFSET FILENAME ; The name of the printer definition file ;;AN000;
238 CALL GET_PRINTER_TITLES_ROUTINE ; Subroutine to perform the function. ;;AN000;
239 ENDM ;;AN000;
240;;**************************************************************************** ;;AN000;
241;; ;;AN000;
242;; GET_PRINTER_INFO: Given the number of a printer, this routines retrieves ;;AN000;
243;; the information for this printer from the profile file. ;;AN000;
244;; ;;AN000;
245;; SYNTAX: GET_PRINTER_INFO printer_num ;;AN000;
246;; ;;AN000;
247;; INPUT: ;;AN000;
248;; printer_num = The number the printer to get the information on. ;;AN000;
249;; The number is the location of this printer in the ;;AN000;
250;; printer names list. ;;AN000;
251;; OUTPUT: ;;AN000;
252;; If CY = 0, there were no errors. ;;AN000;
253;; The following variable are updated with the information found in ;;AN000;
254;; the file: ;;AN000;
255;; I_PRINTER ;;AN000;
256;; N_PRINTER_TYPE ;;AN000;
257;; S_MODE_PARM ;;AN000;
258;; S_CP_DRIVER ;;AN000;
259;; S_CP_PREPARE ;;AN000;
260;; S_GRAPH_PARM ;;AN000;
261;; ;;AN000;
262;; If CY = 1, There were errors encountered. ;;AN000;
263;; BX = An error code indicating the type of error that occured. ;;AN000;
264;; ;;AN000;
265;; = 3 There was an error reading the file ;;AN000;
266;; = 7 There was a error accessing the file ;;AN000;
267;; = 11 A printer definition has either a CDP or a CPP ;;AN000;
268;; Prefix, but BOTH were not present. ;;AN000;
269;; = 12 There was an error in the printer definition. ;;AN000;
270;; - A line was found with an invalid prefix ;;AN000;
271;; ;;AN000;
272;; If the error was a result of a DOS function, then ;;AN000;
273;; on return, AX will contain the DOS error code. ;;AN000;
274;; ;;AN000;
275;; OPERATION: ;;AN000;
276;; ;;AN000;
277;;**************************************************************************** ;;AN000;
278GET_PRINTER_INFO MACRO VAR_PRT ;;AN000;
279 ;;AN000;
280 MOV AX, VAR_PRT ;;AN000;
281 CALL GET_PRINTER_INFO_ROUTINE ;;AN000;
282 ENDM ;;AN000;
283 ;;AN000;
284;;**************************************************************************** ;;AN000;
285;; ;;AN000;
286;; RELEASE_PRINTER_INFO: Close the printer profile file and free the ;;AN000;
287;; allocated memory. ;;AN000;
288;; ;;AN000;
289;; SYNTAX: RELEASE_PRINTER_INFO ;;AN000;
290;; ;;AN000;
291;; INPUT: ;;AN000;
292;; None. ;;AN000;
293;; ;;AN000;
294;; OUTPUT: ;;AN000;
295;; If CY = 0, There were no error encountered. ;;AN000;
296;; If CY = 1, There was an error. ;;AN000;
297;; AX = The DOS error code for the deallocate memory function ;;AN000;
298;; ;;AN000;
299;; OPERATION: Closes the printer profile file and deallocted memory. ;;AN000;
300;; ;;AN000;
301;;**************************************************************************** ;;AN000;
302RELEASE_PRINTER_INFO MACRO ;;AN000;
303 ;;AN000;
304 CALL RELEASE_PRINTER_INFO_ROUTINE ;;AN000;
305 ENDM ;;AN000;
306;;**************************************************************************** ;;AN000;
307;; ;;AN000;
308;; GET_PRINTER_PARAMS: Get parameters for specified printer. ;;AN000;
309;; ;;AN000;
310;; SYNTAX: GET_PRINTER_PARAMS var_prt, var_port, var_status ;;AN000;
311;; ;;AN000;
312;; INPUT: ;;AN000;
313;; var_prt = The printer number. ;;AN000;
314;; var_port = The number of the port to retrieve the information on. ;;AN000;
315;; If var_port = 0, the information that is returned is ;;AN000;
316;; that which cooresponds to var_prt. ;;AN000;
317;; var_port = 0 : Get the information on printer number VAR_PRT ;;AN000;
318;; = 1 : Get the information for the printer attached to LPT1 ;;AN000;
319;; = 2 : Get the information for the printer attached to LPT2 ;;AN000;
320;; = 3 : Get the information for the printer attached to LPT3 ;;AN000;
321;; = 4 : Get the information for the printer attached to COM1 ;;AN000;
322;; = 5 : Get the information for the printer attached to COM2 ;;AN000;
323;; = 6 : Get the information for the printer attached to COM3 ;;AN000;
324;; = 7 : Get the information for the printer attached to COM4 ;;AN000;
325;; ;;AN000;
326;; OUTPUT: ;;AN000;
327;; var_status = 1: Printer information is valid ;;AN000;
328;; = 0: Printer not valid: default values returned ;;AN000;
329;; ;;AN000;
330;; OPERATION: Printer information for the specified printer is returned. ;;AN000;
331;; If the specified printer is not defined, default values will be ;;AN000;
332;; returned. ;;AN000;
333;; I_PRINTER = Index into printer list (16 bit variable) : default 1 ;;AN000;
334;; N_PRINTER_TYPE = P: Parallel printer ;;AN000;
335;; = S: Serial printer ;;AN000;
336;; I_PORT = Port number (16 bit variable) : default 1 ;;AN000;
337;; I_REDIRECT = Redirection port number (16 bit variable) : default 1 ;;AN000;
338;; S_MODE_PARM = Mode parameters - ASCII-N format ;;AN000;
339;; S_CP_DRIVER = Code page driver parameters - ASCII-N format ;;AN000;
340;; S_CP_PREPARE = Code prepare parameters - ASCII-N format ;;AN000;
341;; S_GRAPH_PARM = Graphics parameters - ASCII-N format ;;AN000;
342;; ;;AN000;
343;; The structures of printer information are searched for the one with ;;AN000;
344;; the same number as specified by VAR_PRT. If found, the information ;;AN000;
345;; in that structure is returned in the variables listed above. ;;AN000;
346;; ;;AN000;
347;;**************************************************************************** ;;AN000;
348GET_PRINTER_PARAMS MACRO VAR_PRT, VAR_PORT, VAR_STATUS ;;AN000;
349 ;;AN000;
350 MOV AX, VAR_PRT ;;AN000;
351 MOV BX, VAR_PORT ;;AN000;
352 CALL GET_PRINTER_PARAMS_ROUTINE ;;AN000;
353 MOV VAR_STATUS, AX ;;AN000;
354 ENDM ;;AN000;
355;;**************************************************************************** ;;AN000;
356;; ;;AN000;
357;; SAVE_PRINTER_PARAMS: Save the printer information in the printer structures ;;AN000;
358;; ;;AN000;
359;; SYNTAX: SAVE_PRINTER_PARAMS var_prt ;;AN000;
360;; ;;AN000;
361;; INPUT: ;;AN000;
362;; var_prt = The printer number. ;;AN000;
363;; ;;AN000;
364;; OUTPUT: ;;AN000;
365;; None. ;;AN000;
366;; ;;AN000;
367;; OPERATION: Printer information for the specified printer is stored. ;;AN000;
368;; I_PRINTER = Index into printer list (16 bit variable) : default 1 ;;AN000;
369;; N_PRINTER_TYPE = P: Parallel printer ;;AN000;
370;; = S: Serial printer ;;AN000;
371;; I_PORT = Port number (16 bit variable) : default 1 ;;AN000;
372;; I_REDIRECT = Redirection port number (16 bit variable) : default 1 ;;AN000;
373;; S_MODE_PARM = Mode parameters - ASCII-N format ;;AN000;
374;; S_CP_DRIVER = Code page driver parameters - ASCII-N format ;;AN000;
375;; S_CP_PREPARE = Code prepare parameters - ASCII-N format ;;AN000;
376;; S_GRAPH_PARM = Graphics parameters - ASCII-N format ;;AN000;
377;; ;;AN000;
378;; The information is stored in the structures according to the type ;;AN000;
379;; and port number of this printer. The first three structures are for ;;AN000;
380;; LPT1 - LPT3, while the next four are for COM1 - COM2. ;;AN000;
381;; ;;AN000;
382;;**************************************************************************** ;;AN000;
383SAVE_PRINTER_PARAMS MACRO VAR_PRT ;;AN000;
384 ;;AN000;
385 MOV AX, VAR_PRT ;;AN000;
386 CALL SAVE_PRINTER_PARAMS_ROUTINE ;;AN000;
387 ENDM ;;AN000;
388;;**************************************************************************** ;;AN000;
389;; ;;AN000;
390;; CHANGE_AUTOEXEC: Search for the SELECT command in the autoexec.bat and ;;AN000;
391;; change the parameters for that line. ;;AN000;
392;; ;;AN000;
393;; SYNTAX: CHANGE_AUTOEXEC FILENAME, APPEND_STRING ;;AN000;
394;; ;;AN000;
395;; INPUT: ;;AN000;
396;; FILENAME = An ASCII-N string containing the name of the file to change. ;;AN000;
397;; Since the string has to be converted into an ASCII-Z string, ;;AN000;
398;; an extra byte must always be available following the string. ;;AN000;
399;; APPEND_STRING = An ASCII-N string containing the parameters to add to ;;AN000;
400;; the SELECT command. ;;AN000;
401;; ;;AN000;
402;; OUTPUT: ;;AN000;
403;; None. ;;AN000;
404;; ;;AN000;
405;; OPERATION: ;;AN000;
406;; ;;AN000;
407;;**************************************************************************** ;;AN000;
408CHANGE_AUTOEXEC MACRO FILENAME, APPEND_STRING ;;AN000;
409 ;;AN000;
410 MOV DI, OFFSET FILENAME ;;AN000;
411 MOV SI, OFFSET APPEND_STRING ;;AN000;
412 CALL CHANGE_AUTOEXEC_ROUTINE ;;AN000;
413 ENDM ;;AN000;
414 ;;AN000;
415;;**************************************************************************** ;;AN000;
416;; ;;AN000;
417;; LOAD_MESSAGES: Load the messages and initialize the message retriever. ;;AN000;
418;; ;;AN000;
419;; SYNTAX: LOAD_MESSAGES ;;AN000;
420;; ;;AN000;
421;; INPUT: ;;AN000;
422;; None. ;;AN000;
423;; ;;AN000;
424;; OUTPUT: ;;AN000;
425;; If CY = 1, there was an error loading the messages. ;;AN000;
426;; If CY = 0, there were no errors. ;;AN000;
427;; ;;AN000;
428;; OPERATION: ;;AN000;
429;; ;;AN000;
430;;**************************************************************************** ;;AN000;
431LOAD_MESSAGES MACRO ;;AN000;
432 ;;AN000;
433 CALL SYSLOADMSG ;;AN000;
434 ENDM ;;AN000;
435;;**************************************************************************** ;;AN000;
436;; ;;AN000;
437;; DISPLAY_MESSAGE: Call the message retriever to display a message. ;;AN000;
438;; ;;AN000;
439;; SYNTAX: DISPLAY_MESSAGE msg_number ;;AN000;
440;; ;;AN000;
441;; INPUT: ;;AN000;
442;; msg_number = The number of the message to be displayed. (16 bit value) ;;AN000;
443;; ;;AN000;
444;; OUTPUT: ;;AN000;
445;; If CY = 1, there was an error displaying the message. ;;AN000;
446;; If CY = 0, there were no errors. ;;AN000;
447;; ;;AN000;
448;; OPERATION: ;;AN000;
449;; ;;AN000;
450;;**************************************************************************** ;;AN000;
451DISPLAY_MESSAGE MACRO MSG_NUMBER ;;AN000;
452 ;;AN000;
453 MOV AX, MSG_NUMBER ;;AN000;
454 CALL DISPLAY_MESSAGE_ROUTINE ;;AN000;
455 ENDM ;;AN000;
456;;**************************************************************************** ;;AN000;
457;; ;;AN000;
458;; CHECK_DOS_PATH: Check to see if a path for the SET PATH command is valid ;;AN000;
459;; ;;AN000;
460;; SYNTAX: CHECK_DOS_PATH path_str ;;AN000;
461;; ;;AN000;
462;; INPUT: ;;AN000;
463;; path_str - An ASCII-N string containing the path to check. ;;AN000;
464;; ;;AN000;
465;; OUTPUT: ;;AN000;
466;; If CY = 0, the path is valid. ;;AN000;
467;; If CY = 1, The path is NOT valid: ;;AN000;
468;; ;;AN000;
469;; OPERATION: ;;AN000;
470;; ;;AN000;
471;;**************************************************************************** ;;AN000;
472CHECK_DOS_PATH MACRO PATH_STR ;;AN000;
473 ;;AN000;
474 LEA SI, PATH_STR ;;AN000;
475 CALL CHECK_DOS_PATH_ROUTINE ;;AN000;
476 ENDM ;;AN000;
477;;**************************************************************************** ;;AN000;
478;; ;;AN000;
479;; CHECK_PATH: Check to see if a path is valid. ;;AN000;
480;; ;;AN000;
481;; SYNTAX: CHECK_PATH path_str, drive, root ;;AN000;
482;; ;;AN000;
483;; INPUT: ;;AN000;
484;; path_str - An ASCII-N string containing the path to check. ;;AN000;
485;; ;;AN000;
486;; drive = 0: Drive letter cannot be specified. (8 bit or immediate value) ;;AN000;
487;; = 1: Drive letter is optional and can be specified. ;;AN000;
488;; = 2: Drive letter must be specified. ;;AN000;
489;; ;;AN000;
490;; root = 0: First non-drive character cannot be a backslash ('\') (8 bit or immediate value) ;;AN000;
491;; = 1: First non-drive character may be a backslash ('\') ;;AN000;
492;; = 2: First non-drive character must be a backslash ('\') ;;AN000;
493;; ;;AN000;
494;; OUTPUT: ;;AN000;
495;; If CY = 0, the path is valid. ;;AN000;
496;; If CY = 1, The path is NOT valid: ;;AN000;
497;; AX = 1, The drive specified is invalid. ;;AN000;
498;; = 2, There was no drive specified. ;;AN000;
499;; = 3, There was a drive specified. ;;AN000;
500;; = 4, There was a leading backslash ;;AN000;
501;; = 5, The leading backslash was NOT present. ;;AN000;
502;; = 6, There was a trailing backslash. ;;AN000;
503;; ;;AN000;
504;; OPERATION: ;;AN000;
505;; ;;AN000;
506;;**************************************************************************** ;;AN000;
507CHECK_PATH MACRO PATH_STR, DRIVE, ROOT ;;AN000;
508 ;;AN000;
509 LEA SI, PATH_STR ;;AN000;
510 MOV DI, SI ;;AN000;
511 CALL POS_ZERO ;;AN000;
512 MOV CX, [SI] ;;AN000;
513 ADD SI, 2 ;;AN000;
514 MOV AL, DRIVE ;;AN000;
515 MOV AH, ROOT ;;AN000;
516 CALL CHECK_VALID_PATH ;;AN000;
517 ENDM ;;AN000;
518;;**************************************************************************** ;;AN000;
519;; ;;AN000;
520;; GET_NUMBER_PORTS: Get the number of parallel and serial ports attached ;;AN000;
521;; to the computer. ;;AN000;
522;; ;;AN000;
523;; SYNTAX: GET_NUMBER_PORTS parallel, serial ;;AN000;
524;; ;;AN000;
525;; INPUT: ;;AN000;
526;; None. ;;AN000;
527;; ;;AN000;
528;; OUTPUT: ;;AN000;
529;; parallel = The number of parallel ports attached. (8 bit value) ;;AN000;
530;; serial = The number of serial ports attached. (8 bit value) ;;AN000;
531;; ;;AN000;
532;; OPERATION: The macro performs a call to interrupt 11H to determine ;;AN000;
533;; the number of ports available. ;;AN000;
534;; ;;AN000;
535;;**************************************************************************** ;;AN000;
536GET_NUMBER_PORTS MACRO PARALLEL, SERIAL ;;AN000;
537 ;;AN000;
538 INT 11H ;; Determine equipment attached ;;AN000;
539 SHR AH, 1 ;; Put the number of serial ports in L.S. Bits ;;AN000;
540 MOV BH, 0 ;;AN000;
541 MOV BL, AH ;;AN000;
542 MOV SERIAL, BX ;;AN000;
543 AND SERIAL, 0000000000000111B ;; Mask off the unwanted information ;;AN000;
544 MOV CL, 5 ;; Number of bits to shift ;;AN000;
545 SHR AH, CL ;; Put the number of parallel ports in L.S. Bits ;;AN000;
546 MOV BL, AH ;;AN000;
547 MOV PARALLEL, BX ;; Store ;;AN000;
548 AND PARALLEL, 0000000000000011B ;; Mask off the unwanted infromation ;;AN000;
549 ENDM ;;AN000;
550;;**************************************************************************** ;;AN000;
551;; ;;AN000;
552;; CHANGE_ATTRIBUTE: Change the attributes on a group of file to be hidden ;;AN000;
553;; files. ;;AN000;
554;; ;;AN000;
555;; SYNTAX: CHANGE_ATTRIBUTE list_ptr, num_files ;;AN000;
556;; ;;AN000;
557;; INPUT: ;;AN000;
558;; list_ptr = A pointer to a the list of files to change the attributes ;;AN000;
559;; of. The list must be of the form: ;;AN000;
560;; db filename,?,? ;;AN000;
561;; Where the filename takes up 12 bytes. ;;AN000;
562;; num_file = The number of files in the list. ;;AN000;
563;; ;;AN000;
564;; OUTPUT: ;;AN000;
565;; If CY = 1, there was an error encountered. ;;AN000;
566;; If CY = 0, there were no errors. ;;AN000;
567;; ;;AN000;
568;; OPERATION: The macro reads the attribute of the file, stores it in the ;;AN000;
569;; word following the filename in the list, and then assigns the new ;;AN000;
570;; attribute to the file. ;;AN000;
571;; ;;AN000;
572;;**************************************************************************** ;;AN000;
573CHANGE_ATTRIBUTE MACRO LIST_PTR, NUM_FILES ;;AN000;
574 ;;AN000;
575 LEA SI, LIST_PTR ;; Get the address of the file list ;;AN000;
576 MOV AX, 0 ;; Indicate we are to attach a new attribute to the file ;;AN000;
577 MOV BX, NUM_FILES ;; Load the number of files in the list ;;AN000;
578 CALL CHANGE_ATTRIBUTE_ROUTINE ;; Change the attributes ;;AN000;
579 ENDM ;;AN000;
580;;**************************************************************************** ;;AN000;
581;; ;;AN000;
582;; RESTORE_ATTRIBUTE: Restore the original attributes on a group of file. ;;AN000;
583;; ;;AN000;
584;; SYNTAX: RESTORE_ATTRIBUTE list_ptr, num_files ;;AN000;
585;; ;;AN000;
586;; INPUT: ;;AN000;
587;; list_ptr = A pointer to a the list of files to change the attributes ;;AN000;
588;; of. The list must be of the form: ;;AN000;
589;; db filename,?,? ;;AN000;
590;; Where the filename takes up 12 bytes. ;;AN000;
591;; num_files = The number of files in the list. ;;AN000;
592;; ;;AN000;
593;; OUTPUT: ;;AN000;
594;; If CY = 1, there was an error encountered. ;;AN000;
595;; If CY = 0, there were no errors. ;;AN000;
596;; ;;AN000;
597;; OPERATION: This macros restores the attribute previously stored for the ;;AN000;
598;; listed files. ;;AN000;
599;; ;;AN000;
600;;**************************************************************************** ;;AN000;
601RESTORE_ATTRIBUTE MACRO LIST_PTR, NUM_FILES ;;AN000;
602 ;;AN000;
603 LEA SI, LIST_PTR ;; Get the address of the file list ;;AN000;
604 MOV AX, 1 ;; Indicate we are to attach a new attribute to the file ;;AN000;
605 MOV BX, NUM_FILES ;; Load the number of files in the list ;;AN000;
606 CALL CHANGE_ATTRIBUTE_ROUTINE ;; Change the attributes ;;AN000;
607 ENDM ;;AN000;
608;;**************************************************************************** ;;AN000;
609;; ;;AN000;
610;; COMPARE_STRINGS: Compare two strings. ;;AN000;
611;; ;;AN000;
612;; SYNTAX: COMPARE_STRINGS string_1, string_2 ;;AN000;
613;; ;;AN000;
614;; INPUT: ;;AN000;
615;; string_1 = The address of the first string. (ASCII-N string) ;;AN000;
616;; string_2 = The address of the second string. (ASCII-N string) ;;AN000;
617;; ;;AN000;
618;; OUTPUT: ;;AN000;
619;; If CY = 1, the strings do no compare. ;;AN000;
620;; If CY = 0, the strings are the same. ;;AN000;
621;; ;;AN000;
622;; OPERATION: ;;AN000;
623;; ;;AN000;
624;;**************************************************************************** ;;AN000;
625COMPARE_STRINGS MACRO STRING_1, STRING_2 ;;AN000;
626 ;;AN000;
627 LEA SI, STRING_1 ;;AN000;
628 LEA DI, STRING_2 ;;AN000;
629 CALL COMPARE_ROUTINE ;;AN000;
630 ENDM ;;AN000;
631;;**************************************************************************** ;;AN000;
632;; ;;AN000;
633;; CHECK_WRITE_PROTECT Determine if the diskette in drive A/B is write ;;AC000;JW
634;; protected. ;;AN000;
635;; ;;AN000;
636;; SYNTAX: CHECK_WRITE_PROTECT RET_CODE ;;AN000;
637;; ;;AN000;
638;; INPUT: ;;AN000;
639;; DRIVE = A_DRIVE (0) Check the diskette in the A drive ;;AC000;JW
640;; DRIVE = B_DRIVE (1) Check the diskette in the B drive ;;AC000;JW
641;; ;;AN000;
642;; OUTPUT: ;;AN000;
643;; If CY = 1, There was an error accessing the drive. ;;AN000;
644;; If CY = 0, There were no errors. ;;AN000;
645;; RET_CODE = 1: The diskette IS write protected. ;;AN000;
646;; = 0: The diskette is NOT write protected. ;;AN000;
647;; ;;AN000;
648;; OPERATION: ;;AN000;
649;; ;;AN000;
650;;**************************************************************************** ;;AN000;
651CHECK_WRITE_PROTECT MACRO DRIVE, RET_CODE ;;AC000;JW
652 MOV CX,DRIVE ;;AN000;JW
653 CALL CHECK_WRITE_ROUTINE ;;AN000;
654 MOV RET_CODE, AX ;;AN000;
655 ENDM ;;AN000;
656;;**************************************************************************** ;;AN000;
657;; ;;AN000;
658;; GET_FREE_SPACE Determine the free disk space on a diskette. ;;AN000;
659;; ;;AN000;
660;; SYNTAX: GET_FREE_SPACE drive, space ;;AN000;
661;; ;;AN000;
662;; INPUT: ;;AN000;
663;; drive = 1: Examine diskette in drive A ;;AN000;
664;; = 2: Examine diskette in drive B ;;AN000;
665;; ;;AN000;
666;; OUTPUT: ;;AN000;
667;; If CY = 1, there was an error accessing the disk ;;AN000;
668;; If CY = 0, there were no errors. ;;AN000;
669;; space = The amount of free space on the disk (32-bit value) ;;AN000;
670;; ;;AN000;
671;; OPERATION: ;;AN000;
672;; ;;AN000;
673;;**************************************************************************** ;;AN000;
674GET_FREE_SPACE MACRO DRIVE, SPACE ;;AN000;
675 ;;AN000;
676 MOV DL, DRIVE ;;AN000;
677 MOV AH, 36H ;;AN000;
678 DOSCALL ;;AN000;
679 .IF < NC > ;;AN000;
680 MUL BX ;;AN000;
681 MUL CX ;;AN000;
682 MOV WORD PTR SPACE[0], AX ;;AN000;
683 MOV WORD PTR SPACE[2], DX ;;AN000;
684 .ENDIF ;;AN000;
685 ENDM ;;AN000;
686;;**************************************************************************** ;;AN000;
687;; ;;AN000;
688;; MATCH_DISK_FILES Determine if a list of file exist on a disk. ;;AN000;
689;; ;;AN000;
690;; SYNTAX: GET_FREE_SPACE path, file_list, list_type, num_files, ret_code ;;AN000;
691;; ;;AN000;
692;; INPUT: ;;AN000;
693;; path = ASCII-N string containing the drive, and path of where to ;;AN000;
694;; search. ;;AN000;
695;; file_list = The address of the list of files to use. If AX=2, then ;;AN000;
696;; the first two bytes are ignored. ;;AN000;
697;; list_type = 1: Use a small list with 12 byte between filenames. ;;AN000;
698;; = 2: Use a list with 14 bytes between filenames. ;;AN000;
699;; ;;AN000;
700;; OUTPUT: ;;AN000;
701;; If CY = 1, There was an error accessing the disk. ;;AN000;
702;; If CY = 0, there were no errors. ;;AN000;
703;; ret_code = 1: All the files are on the disk. ;;AN000;
704;; ret_code = 0: All the file are NOT on the disk. ;;AN000;
705;; ;;AN000;
706;; OPERATION: ;;AN000;
707;; ;;AN000;
708;;**************************************************************************** ;;AN000;
709MATCH_DISK_FILES MACRO PATH, FILE_LIST, LIST_TYPE, NUM_FILES, RET_CODE ;;AN000;
710 ;;AN000;
711 LEA DI, PATH ;;AN000;
712 LEA SI, FILE_LIST ;;AN000;
713 MOV AX, LIST_TYPE ;;AN000;
714 MOV CX, NUM_FILES ;;AN000;
715 CALL MATCH_FILES_ROUTINE ;;AN000;
716 MOV RET_CODE, AX ;;AN000;
717 ENDM ;;AN000;
718 ;;AN000;
719INCLUDE 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 @@
1PROCESS_ESC MACRO ;;AN000;
2 .IF < N_USER_FUNC eq E_ESCAPE > ;;AN000;
3 .THEN ;;AN000;
4 POP_HEADING ;;AN000;
5 .ENDIF ;;AN000;
6 ENDM ;;AN000;
7 ;;AN000;
8PROCESS_F3 MACRO ;;AN000;
9 .IF < N_USER_FUNC eq E_F3 > ;;AN000;
10 .THEN ;;AN000;
11 GOTO EXIT_DOS ;;AN000;
12 .ENDIF ;;AN000;
13 ENDM ;;AN000;
14
15INIT_VAR_MINIMIZE MACRO
16 INIT_VAR S_BUFFERS, 0 ;;AN000;set BUFFERS = null (spaces)
17 INIT_VAR S_FCBS, 0 ;;AN000;set FCBS = null (spaces)
18 INIT_VAR F_ANSI, E_ANSI_NO ;;AN000;set ANSI = no
19 INIT_VAR S_ANSI, 0 ;;AN000;set ANSI field = null (spaces)
20 INIT_VAR F_FASTOPEN, E_FASTOPEN_NO ;;AN000;set FASTOPEN = no
21 INIT_VAR S_FASTOPEN, 0 ;;AN000;set FASTOPEN = null (spaces)
22 INIT_VAR F_GRAPHICS, E_GRAPHICS_NO ;;AN000;set GRAPHICS = no
23 INIT_VAR S_GRAPHICS, 0 ;;AN000;set GRAPHICS field = null (spaces)
24 COPY_STRING S_FILES, M_FILES, D_FILES_2 ;AN000; set FILES = 8
25 ENDM
26
27INIT_VAR_BALANCE MACRO
28 COPY_STRING S_BUFFERS, M_BUFFERS, D_BUFFERS_1 ;;AN000;set BUFFERS = 20
29 INIT_VAR S_FCBS, 0 ;;AN000;set FCBS = null (spaces)
30 INIT_VAR F_ANSI, E_ANSI_YES ;;AN000;set ANSI = yes
31 INIT_VAR S_ANSI, 0 ;;AN000;set ANSI field = null (spaces)
32 INIT_VAR F_FASTOPEN, E_FASTOPEN_YES ;;AN000;set FASTOPEN = yes
33 COPY_STRING S_FASTOPEN, M_FASTOPEN, D_FASTOPEN_1 ;;AN000;set FASTOPEN = C:=(50,25)
34 INIT_VAR F_GRAPHICS, E_GRAPHICS_YES ;;AN000;set GRAPHICS = yes
35 INIT_VAR S_GRAPHICS, 0 ;;AN000;set GRAPHICS field = null (spaces)
36 COPY_STRING S_FILES, M_FILES, D_FILES_1 ;AN000; set FILES = 20
37 ENDM
38
39INIT_VAR_MAXIMIZE MACRO
40 COPY_STRING S_BUFFERS, M_BUFFERS, D_BUFFERS_2 ;;AN000;set BUFFERS = 50,4
41 COPY_STRING S_FCBS, M_FCBS, D_FCBS_1 ;;AN000;set FCBS = 20,8
42 INIT_VAR F_ANSI, E_ANSI_YES ;;AN000;set ANSI = yes
43 COPY_STRING S_ANSI, M_ANSI, D_ANSI_1 ;;AN000;set ANSI field = /X
44 INIT_VAR F_FASTOPEN, E_FASTOPEN_YES ;;AN000;set FASTOPEN = yes
45 COPY_STRING S_FASTOPEN, M_FASTOPEN, D_FASTOPEN_2 ;;AN000;set FASTOPEN = C:(150,150)
46 INIT_VAR F_GRAPHICS, E_GRAPHICS_YES ;;AN000;set GRAPHICS = yes
47 INIT_VAR S_GRAPHICS, 0 ;;AN000;set GRAPHICS field = null (spaces)
48 COPY_STRING S_FILES, M_FILES, D_FILES_1 ;AN000; set FILES = 20
49 ENDM
50
51SAVE_PARAMETERS MACRO SAV_FILE, RET_CODE ;;AN000;
52 PREPARE_FILE SAV_FILE ;;AN000;
53 WORD_TO_CHAR F_SHELL, S_STR120_1
54 WRITE_LINE S_STR120_1
55 WORD_TO_CHAR N_FORMAT_MODE, S_STR120_1 ;;AN000;
56 WRITE_LINE S_STR120_1 ;;AN000;
57 WORD_TO_CHAR N_DISK_1, S_STR120_1 ;;AN000;
58 WRITE_LINE S_STR120_1 ;;AN000;
59 WORD_TO_CHAR I_DESTINATION,S_STR120_1 ;;AN033;SEH save destination, too
60 WRITE_LINE S_STR120_1 ;;AN033;SEH
61 WRITE_LINE S_INSTALL_PATH ;;AN000;
62 SAVE_FILE SAV_FILE, RET_CODE ;;AN000;
63 ENDM ;;AN000;
64
65CREATE_CONFIG MACRO CONFIG_FILE, RET_CODE ;;AN000;
66 PREPARE_FILE CONFIG_FILE ;;AN000;
67 CALL CREATE_CONFIG_SYS ;;AN000;
68 SAVE_FILE CONFIG_FILE, RET_CODE ;;AN000;
69 ENDM ;;AN000;
70
71CREATE_AUTOEXEC MACRO AUTO_FILE, DEST, RET_CODE ;;AN000;
72 MOV N_DEST, DEST ;;AN000;
73 PREPARE_FILE AUTO_FILE ;;AN000;
74 CALL CREATE_AUTOEXEC_BAT ;;AN000;
75 SAVE_FILE AUTO_FILE, RET_CODE ;;AN000;
76 ENDM ;;AN000;
77
78CREATE_SHELL MACRO SHELL_FILE, RET_CODE ;;AN000;
79 PREPARE_FILE SHELL_FILE ;;AN000;
80 CALL CREATE_SHELL_BAT ;;AN000;
81 SAVE_FILE SHELL_FILE, RET_CODE ;;AN000;
82 ENDM ;;AN000;
83
84ADD_WORD MACRO VAR1, VAR2 ;;AN000;
85 MOV AX,VAR2 ;;AN000;
86 ADD VAR1,AX ;;AN000;
87 ENDM ;;AN000;
88
89CHECK_DISPLAY MACRO ;;AN000;
90 CALL VIDEO_CHECK ;;AN000;
91 ENDM ;;AN000;
92
93SAVE_PANEL_LIST MACRO ;;AN000;
94 MOV AX,0ADC0H ;;AN000;
95 MOV BX,0FFFFH ;;AN000;
96 INT 2FH ;;AN000;
97 ENDM ;;AN000;
98
99PREP_FOR_ONE MACRO CPOS ;;AN000;
100 MOV DH,CPOS ;;AN000;
101 CALL DO_PREP_FOR_ONE ;;AN000;
102 ENDM ;;AN000;
103
104HOOK15 MACRO ;;AN000;
105 CALL DO_HOOK15 ;;AN000;
106 ENDM ;;AN000;
107
108UNHOOK15 MACRO ;;AN000;
109 CALL DO_UNHOOK15 ;;AN000;
110 ENDM ;;AN000;
111
112GET_INSTALLED_MEM MACRO MEMORY ;;AN000;
113 INT 12H ;;AN000;
114 MOV MEMORY,AX ;;AN000;
115 ENDM ;;AN000;
116
117HOOK_2F_FORMAT MACRO ;;AN000;
118 CALL HOOK_INT_2F_FORMAT ;;AN000;
119 ENDM ;;AN000;
120
121UNHOOK_2F MACRO ;;AN000;
122 CALL RESTORE_INT_2F ;;AN000;
123 ENDM ;;AN000;
124
125INCLUDE MACROS8.INC ;AN000;
126 \ 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 @@
1;DSKCPY_ERR DB 0
2DSKCPY_EXIT EQU 1 ;AN000;DT user chose to exit diskcopy
3
4;DSKCPY_WHICH DB
5DSKCPY_TO_A_720 EQU 0 ;AN000;DT
6DSKCPY_TO_A_360 EQU 1 ;AN000;DT
7DSKCPY_TO_B EQU 2 ;AN000;DT
8
9;DSKCPY_OPTION DB
10SOURCE1 EQU 0 ;AN000;DT
11NO_SOURCE1 EQU 1 ;AN000;DT
12
13NOCHECK EQU 0
14DISKCOPY_TO MACRO WHERE,HOW,CHECK ;;AN000;
15 MOV DSKCPY_WHICH,WHERE ;;AN000;
16 MOV DSKCPY_OPTION,HOW ;;AN000;
17 LEA AX,CHECK ;;AN000;
18 MOV DSKCPY_SOURCE,AX ;;AN000;
19 ENDM ;;AN000;
20
21NOPANEL EQU 0 ;;AN000;
22DISKCOPY_PANELS MACRO PANEL1, PANEL2, PANEL3 ;;AN000;
23 MOV DSKCPY_PAN1,PANEL1 ;;AN000;
24 MOV DSKCPY_PAN2,PANEL2 ;;AN000;
25 MOV DSKCPY_PAN3,PANEL3 ;;AN000;
26 ENDM ;;AN000;
27
28INSERT_DISK MACRO DSK_PANEL, SRCH_FILE ;;AN000;
29 MOV DISK_PANEL, DSK_PANEL ;;AN000;
30 LEA DI,SRCH_FILE ;;AN000;
31 MOV SEARCH_FILE, DI ;;AN000;
32 CALL INSERT_DISK_ROUTINE ;;AN000;
33 ENDM ;;AN000;
34
35HANDLE_FORMAT_ERROR MACRO ;;AN000;
36 LOCAL FORERR1,FORERR2,FORERR3 ;;AN000;
37 CMP SUB_ERROR,6 ;;AN000;
38 JNE FORERR1 ;;AN000;
39 MOV AX,PAN_DRIVE_ERROR ;;AN000;
40 JMP FORERR3 ;;AN000;
41FORERR1: CMP SUB_ERROR,7 ;;AN000;
42 JNE FORERR2 ;;AN000;
43 MOV AX,PAN_WRITE_PROT ;;AN000;
44 JMP FORERR3 ;;AN000;
45FORERR2: MOV AX,ERR_GENERAL ;;AN000;
46FORERR3: HANDLE_ERROR AX,E_RETURN ;;AN000;
47 ENDM ;;AN000;
48 \ 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 @@
1INCLUDE VERSIONA.INC ;AN047;SEH check DOS version in VERSIONA.INC instead of in MAC_EQU.INC
2
3TRUE = 1 ;AN000;
4FALSE = 0 ;AN000;
5
6; Equates from PRN_DEF.ASM
7
8ERR_NOT_ENOUGH_MEM EQU 1 ;AN000; There was not enough memory to build the names table
9ERR_OPENING_FILE EQU 2 ;AN000; Error opening a file
10ERR_READING_FILE EQU 3 ;AN000; Error reading from a file
11ERR_FINDING_VALUE EQU 4 ;AN000; Error finding the number of prn defs at the beginning of the file
12ERR_LINE_TOO_LONG EQU 5 ;AN000; There was a line too long for the buffer
13ERR_FINDING_NAME EQU 6 ;AN000; There was an error locating a printer name after a P or S
14ERR_ACCESSING_FILE EQU 7 ;AN000; There was an error updating the file pointer
15ERR_TOO_MANY_DEFS EQU 8 ;AN000; There are too many defintion in the file
16ERR_NUMBER_MATCH EQU 9 ;AN000; The number of actual definition do not match the number expected
17ERR_ALLOCATING_MEM EQU 10 ;AN000; There was an error allocating memory
18ERR_CDP_CPP EQU 11 ;AN000; A prn defn had either a CDP or CPP but not both
19ERR_PRN_DEFN EQU 12 ;AN000; There was an error in a printer definition
20
21; Equates from MACROS.INC ;
22; Equates from MACROS2.INC ;
23;MAJOR_DOS_VER EQU 4 ;AC047;SEH check now done in VERSIONA.INC ;AC045;SEH
24;MINOR_DOS_VER EQU 00 ;AC047;SEH ;AC045;SEH version update to DOS 4.00
25 ;
26; Equates from MACROS3.INC ;
27PRESENT_WITH_PART EQU 2 ;AN000;
28PRESENT_WITHOUT_PART EQU 1 ;AN000;
29NOT_PRESENT EQU 0 ;AN000;
30NO_EDOS_SPACE EQU 0 ;AN000;
31FREE_EDOS_SPACE EQU 1 ;AN000;
32NO_EDOS_BUT_SPACE EQU 2 ;AN000;
33 ;
34M_DOS_EXISTS EQU 1H ;AN000;
35M_EDOS_EXISTS EQU 2H ;AN000;
36M_LOGICAL_EXISTS EQU 4H ;AN000;
37M_EDOS_SPACE EQU 8H ;AN000;
38M_FREE_SPACE EQU 10H ;AN000;
39M_DOS_EDOS_PART EQU 3H ;AN000;
40 ;
41DISKETTES_EXIST EQU 1 ;AN000;
42MAX_NUM_DISKETTE EQU 2 ;AN000;
43 ;
44TABLE_ONE EQU 1 ;AN000;
45TABLE_TWO EQU 2 ;AN000;
46 ;
47DATA_VALID EQU 0 ;AN000;
48DATA_INVALID EQU 1 ;AN000;
49 ;
50USE_DEFAULT EQU 0 ;AN000;
51DO_NOT_USE_DEFAULT EQU 1 ;AN000;
52 ;
53DEF_DEST_A EQU 3 ;AN111;JW
54DEF_DEST_B EQU 2 ;AN000;
55DEF_DEST_C EQU 1 ;AN000;
56 ;
57E_1440_TRACKS EQU 80 ;AN000;
58E_1440_SECTORS EQU 18 ;AN000;
59 ;
60; Equates from MACROS4.INC ;
61; Equates from MACROS5.INC ;
62B_DRIVE EQU 1 ;AN000;
63C_DRIVE EQU 2 ;AN000;
64A_DRIVE EQU 3 ;AN111;JW
65LEN_ALT_KYBD_ID EQU 3 ;AN000;
66; Equates from MACROS6.INC ;
67 ;
68 ;
69; Equates from ROUTINES.ASM ;
70STDOUT EQU 1 ;AN000;
71STDERR EQU 2 ;AN000;
72EXEC_DIR EQU 1 ;AN000;
73EXEC_NO_DIR EQU 0 ;AN000;
74 ;
75; Equates from SELECT.SKL ;
76MSG_INV_DOS EQU 1 ;AN000;
77MSG_INV_BOOT_MEDIA EQU 4 ;AN000;
78MSG_INV_DISK_MEDIA EQU 5 ;AN000;
79MSG_INV_PARMS EQU 6 ;AN000;
80MSG_INV_INSTALL EQU 7 ;AN000;
81MSG_LOADING EQU 8 ;AN000;
82MSG_RELOADING EQU 9 ;AN000;
83 ;
84; Equates for SEL_FLG (DB) in PRN_DEF.ASM
85; SEL_FLG DB 0
86INSTALLRW EQU 80H ;AN000;The INSTALL diskette is read/write
87
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 @@
1#
2###### Make file for SELECT.EXE, SELECT.DAT, SELECT.COM, SELECT.HLP #####
3#
4
5msg =..\messages
6dos =..\dos
7inc =..\inc
8hinc =..\h
9shell =..\shell
10cas =..\shell\cassfar
11make =nmake
12here =..\..\select
13
14#
15####################### dependencies begin here. #########################
16#
17
18all: select.exe select.dat select.com select.hlp
19
20#
21############################ Make SELECT.EXE #############################
22#
23
24select.ctl: select.skl $(msg)\$(COUNTRY).msg
25
26select0.obj: select0.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \
27 panel.mac select.inc pan-list.inc castruc.inc macros.inc \
28 macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \
29 macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \
30 select.ctl macros8.inc pcequate.inc
31
32select1.obj: select1.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \
33 panel.mac select.inc pan-list.inc castruc.inc macros.inc \
34 macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \
35 macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \
36 macros8.inc pcequate.inc
37
38select2.obj: select2.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \
39 panel.mac select.inc pan-list.inc castruc.inc macros.inc \
40 macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \
41 macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \
42 macros8.inc pcequate.inc
43
44select2a.obj: select2a.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \
45 panel.mac select.inc pan-list.inc castruc.inc macros.inc \
46 macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \
47 macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \
48 macros8.inc pcequate.inc
49
50select3.obj: select3.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \
51 panel.mac select.inc pan-list.inc castruc.inc macros.inc \
52 macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \
53 macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \
54 macros8.inc pcequate.inc
55
56select4.obj: select4.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \
57 panel.mac select.inc pan-list.inc castruc.inc macros.inc \
58 macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \
59 macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \
60 macros8.inc pcequate.inc
61
62select5.obj: select5.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \
63 panel.mac select.inc pan-list.inc castruc.inc macros.inc \
64 macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \
65 macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \
66 macros8.inc pcequate.inc
67
68select5a.obj: select5a.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \
69 panel.mac select.inc pan-list.inc castruc.inc macros.inc \
70 macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \
71 macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \
72 macros8.inc pcequate.inc
73
74select6.obj: select6.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \
75 panel.mac select.inc pan-list.inc castruc.inc macros.inc \
76 macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \
77 macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \
78 macros8.inc pcequate.inc
79
80select7.obj: select7.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \
81 panel.mac select.inc pan-list.inc castruc.inc macros.inc \
82 macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \
83 macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \
84 macros8.inc pcequate.inc
85
86select8.obj: select8.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \
87 panel.mac select.inc pan-list.inc castruc.inc macros.inc \
88 macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \
89 macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \
90 macros8.inc pcequate.inc
91
92select9.obj: select9.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \
93 panel.mac select.inc pan-list.inc castruc.inc macros.inc \
94 macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \
95 macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \
96 macros8.inc pcequate.inc
97
98gen_coms.obj: gen_coms.asm $(inc)\struc.inc $(inc)\sysmsg.inc casextrn.inc \
99 panel.mac select.inc pan-list.inc castruc.inc macros.inc \
100 macros2.inc macros3.inc macros4.inc macros5.inc macros6.inc \
101 macros7.inc mac_equ.inc ext.inc varstruc.inc rout_ext.inc \
102 macros8.inc pcequate.inc
103
104mparse.obj: mparse.asm $(inc)\parse.asm data.mac
105
106initmem.obj: initmem.asm $(inc)\struc.inc macros.inc macros2.inc macros3.inc \
107 macros4.inc macros5.inc macros6.inc macros7.inc macros8.inc \
108 mac_equ.inc
109
110input.obj: input.asm pcequate.inc
111
112routines.obj: routines.asm $(inc)\struc.inc mac_equ.inc varstruc.inc ext.inc \
113 macros.inc macros2.inc macros3.inc macros4.inc macros5.inc \
114 macros6.inc macros7.inc macros8.inc pan-list.inc panel.mac
115
116
117routine2.obj: routine2.asm $(inc)\struc.inc mac_equ.inc ext.inc varstruc.inc \
118 macros.inc macros2.inc macros3.inc macros4.inc macros5.inc \
119 macros6.inc macros7.inc macros8.inc
120
121var.obj: var.asm $(inc)\sysmsg.inc sel_file.inc varstruc.inc
122
123prn_def.obj: prn_def.asm $(inc)\struc.inc macros.inc macros2.inc macros3.inc \
124 macros4.inc macros5.inc macros6.inc macros7.inc macros8.inc \
125 mac_equ.inc
126
127scn_parm.obj: scn_parm.asm $(inc)\struc.inc ext.inc macros.inc macros2.inc \
128 macros3.inc macros4.inc macros5.inc macros6.inc macros7.inc \
129 macros8.inc mac_equ.inc
130
131s_disply.obj: s_disply.asm $(inc)\struc.inc
132
133mod_copy.obj: mod_copy.asm $(inc)\struc.inc dos.equ xcopy.equ dosfiles.inc \
134 macros.inc macros2.inc macros3.inc macros4.inc macros5.inc \
135 macros6.inc macros7.inc pan-list.inc macros8.inc mac_equ.inc \
136 xmainmsg.equ panel.mac casextrn.inc
137
138bridge.obj: bridge.asm $(inc)\casvar.inc $(inc)\casrn.inc
139
140caservic.obj: caservic.asm $(inc)\casvar.inc $(inc)\casrn.inc pan-list.inc \
141 select.inc castruc.inc data.mac panel.mac macros.inc \
142 $(inc)\struc.inc pcequate.inc mac_equ.inc
143
144ckdisp.obj: ckdisp.asm $(inc)\struc.inc
145
146intvec.obj: intvec.asm $(inc)\struc.inc mac_equ.inc pan-list.inc \
147 panel.mac macros.inc varstruc.inc ext.inc casextrn.inc \
148 macros8.inc
149
150asm2c.obj : asm2c.asm
151
152get_stat.obj : get_stat.c get_stat.h extern.h
153
154int13.obj : int13.c
155
156global.obj : global.c
157
158..\cmd\fdisk\bootrec.obj:
159 cd ..\cmd\fdisk
160 $(make) bootrec.obj
161 cd ..\..\select
162
163bootrec.obj : ..\cmd\fdisk\bootrec.obj
164 copy ..\cmd\fdisk\bootrec.obj
165
166selquit.obj : selquit.asm panel.mac pcequate.inc pan-list.inc castruc.inc \
167 ext.inc $(inc)\struc.inc macros.inc macros2.inc macros3.inc \
168 macros4.inc macros5.inc macros6.inc macros7.inc macros8.inc \
169 mac_equ.inc
170
171selchild.obj : selchild.asm pcequate.inc castruc.inc macros.inc macros2.inc \
172 macros3.inc macros4.inc macros5.inc macros6.inc macros7.inc \
173 macros8.inc mac_equ.inc
174
175services.obj : services.asm pcequate.inc castruc.inc $(inc)\casvar.inc \
176 macros.inc macros2.inc macros3.inc macros4.inc macros5.inc \
177 macros6.inc macros7.inc macros8.inc mac_equ.inc
178
179get_help.obj : get_help.asm
180
181selserv.obj : selserv.asm
182
183services.lib : selquit.obj selchild.obj services.obj get_help.obj selserv.obj
184
185 lib services.lib -+ selquit;
186 lib services.lib -+ selchild;
187 lib services.lib -+ services;
188 lib services.lib -+ get_help;
189 lib services.lib -+ selserv;
190
191select.exe: select0.obj select1.obj select2.obj select2a.obj select3.obj \
192 select4.obj select5.obj select6.obj select7.obj select8.obj select9.obj \
193 routines.obj routine2.obj gen_coms.obj intvec.obj select5a.obj \
194 ckdisp.obj scn_parm.obj prn_def.obj var.obj caservic.obj input.obj \
195 initmem.obj mparse.obj mod_copy.obj s_disply.obj bridge.obj \
196 asm2c.obj get_stat.obj global.obj int13.obj bootrec.obj select5a.obj \
197 services.lib
198 link /noe @select.lnk
199# The "/noe" is so symbols defined in source files supercede library routines
200
201#
202####################### make select.com #####################
203#
204
205sstub.obj: sstub.asm $(inc)\sysmsg.inc select.ctl
206
207select.com: sstub.obj
208 link sstub;
209 exe2bin sstub.exe select.com
210
211#
212####################### make select.dat ####################
213#
214
215
216panel.inf: USA.inf
217 copy USA.inf panel.inf
218
219panels.obj: panels.asm sel-pan.inc pan-list.inc panel.inf
220
221colors.obj: colors.asm sel-pan.inc
222
223scroll.obj: scroll.asm sel-pan.inc panel.inf
224
225sel-pan.obj: sel-pan.asm $(inc)\casvar.inc sel-pan.inc
226
227sel-pan.exe: sel-pan.obj panels.obj colors.obj scroll.obj
228 link @sel-pan.lnk
229
230select.dat: sel-pan.exe
231 exe2bin sel-pan.exe sel-pan.dat
232 compress
233
234#
235###################### make select.hlp #####################
236#
237
238#$(shell)\shellhlp\asc2hlp.exe :
239# cd $(shell)\shellhlp
240# $(make) asc2hlp.exe
241# cd $(here)
242
243select.hlp: USA.txt
244 erase select.hlp
245 attrib -R USA.txt
246 asc2hlp USA.txt select.hlp
247 attrib +R USA.txt
248
249
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 @@
1 PAGE, 132 ;AN000;
2TITLE XCOPY WITH FULL MEMORY USE ;AN000;
3
4; ##### R E A D M E #####
5;
6; This file contains a copy of the XCOPY code. The code has been
7; Revised (additions and many parts commented out) to conform to the
8; needs of SELECT.
9;
10; #########################
11
12;****************** START OF SPECIFICATIONS *****************************
13; MODULE NAME: XCOPY
14;
15; DESCRIPTIVE NAME: selectively copy groups of files, which can include
16; lower level subdirectories.
17;
18; FUNCTION: The modules of XCOPY will be placed in the following order -
19; SSEG, DSEG(MAIN DATA, MAIN MSG), CSEG (MAIN + INIT),
20; DSEG_INIT(INIT DATA, INIT MSG)
21;
22; HEADER - informations needed about the file, subdirectory ...
23; Continue_Info -> 0 - a whole single file in this header
24; segment, or dir.
25; 1 - Continuation of a small file.
26; 2 - Continuation of a Big file
27; 3 - Eof of continuation
28; Next_Ptr -> points to the next header segment
29; Before_Ptr -> points to the old header segment
30;
31; By optionally using the Archive bit in the directory of each
32; file, XCOPY can be used as an alternative method of creating
33; backup files which can be accessed directly by DOS and its
34; applications without the need to "restore" the backup files.
35;
36; XCOPY is especially useful when several files are being copied
37; and there is a generous amount of RAM available, because XCOPY
38; will fill the memory with all the source files it can read in
39; before starting to create output files. If the memory is not
40; enough to hold all the source, this cycle will be repeated until
41; the process is completed. For single drive systems, this maximum
42; usage of the memory greatly reduces the amount of diskette
43; swapping that would be required by the usual COPY command.
44;
45; ENTRY POINT: MAIN
46;
47; INPUT: (DOS COMMAND LINE PARAMETERS)
48;
49; SOURCE OPERAND: TARGET OPERAND:
50;
51; [d:] [path] filename[.ext] [d:] [path] [filename[.ext]]
52; or
53; [d:] path [filename[.ext]]
54; or
55; d: [path] [filename[.ext]]
56;
57;
58; SWITCHES:
59;
60; /A /D /E /M /P /S /V /W
61;
62;The /A switch will copy only those files whose archive bit of the attribute is
63;set to one. The attribute of the source file is not changed. This option is
64;useful when making multiple backups when doing the non-final backup.
65;The archive bit is one when a file has be created or Revised since the last
66;time the bit was turned off. XCOPY /M or BACKUP /M will turn this bit off.
67;The ATTRIB command can also be used to change the setting of the archive bit.
68;
69;The /D switch will copy only those files whose date is the same or later than
70;the date specified. Depending on the country code you selected using the
71;COUNTRY command, the date is specified in the format corresponding to the
72;indicated country.
73;
74;The /E switch will create subdirectories on the target even if they end up
75;being empty after all copying is over. If /E is not specified, empty
76;subdirectories are not created.
77;
78;The /M switch will copy only those files whose archive bit is set in its
79;attribute. Unlike the /A switch, /M will cause the archive bit in the source
80;file to be turned off. This allows XCOPY to be used in making a final backup.
81;The archive bit is one when a file has be created or Revised since the last
82;time the bit was turned off. XCOPY /M or BACKUP /M will turn this bit off.
83;The ATTRIB command can also be used to change the setting of the archive bit.
84;
85;The /P switch will prompt the operator before copying each file. In this
86;situation, each file is copied onto the target before reading in the next
87;file. The multi-file copy into a large memory buffer is not done. The prompt
88;displays the complete filespec it proposes to copy and asks for (Y/N)
89;response, which is then read in from the standard input device.
90;
91;The /S switch will not only copy the files in the current source directory but
92;also those in all the subdirectories below the current one, with XCOPY
93;following the Tree of the subdirectories to access these files. /S does not
94;create an empty subdirectory on the target (unless /E is also specified).
95;If the /S switch is not specified, XCOPY works only within the specified (or
96;current) subdirectory of the source.
97;
98;The /V switch will cause DOS to verify that the sectors written on the target
99;are recorded properly. This option has been provided so you can verify that
100;critical data has been correctly recorded. This option will cause XCOPY to
101;run more slowly, due to the additional overhead of verification.
102;
103;The /W switch will instruct XCOPY to pause before actually starting the
104;movement of data, thus permit the copying of diskettes that do not actually
105;have XCOPY available on them. The diskette containing XCOPY can be mounted
106;first, the XCOPY command given with the /W option, then when the prompt
107;requesting permission to continue is given, that diskette can then be removed
108;and the source diskette mounted in its place, then the operator can press any
109;key to continue after the pause. This feature is especially useful in a
110;non-hardfile system.
111;
112; EXIT-NORMAL: ERRORLEVEL_0 - This is the normal completion code.
113; ERRORLEVEL_2 - This is due to termination via Control-Break.
114; ERRORLEVEL_4 - This is used to indicate an error condition.
115;
116; There are many types of problems that are detected and result in this
117; return code, such as:
118;
119; write failure due to hard disk error
120; disk full
121; conflict between name of new subdirectory and existing filename
122; access denied
123; too many open files
124; sharing violation
125; lock violation
126; general failure
127; file not found
128; path not found
129; directory full
130; invalid parms
131; reserved file name as source
132; insufficient memory
133; incorrect DOS version
134;
135;
136; INTERNAL REFERENCES:
137;
138; ROUTINES:
139;
140;
141; DATA AREAS:
142;
143;
144; EXTERNAL REFERENCES:
145;
146; ROUTINES:
147;
148;
149; DATA AREAS:
150;
151;
152; NOTES: This module should be processed with the SALUT pre-processor
153; with the re-alignment not requested, as:
154;
155; SALUT XCOPY,NUL,;
156;
157; To assemble these modules, the sequential
158; ordering of segments may be used.
159;
160; For LINK instructions:
161; link profile ..\lib
162;
163; REVISION HISTORY: A000 Version 4.00: add PARSER, System Message Handler,
164; Remove the BELL char.,turn off APPEND during TREE
165; search,Extended Attribute processing, Uppercasing
166; and "Out Of Space" during write to standard out.
167; A001 PTM0011 XCOPY not handling path >63 characters.
168; CHK_MAX_LENGTH proc(XCPYINIT) is Revised to err if
169; >63 chrs.
170; A002 PTM0012 XCOPY unnecessarily accessing current drive.
171; ORG_S_T_DEF is Revised to ignore CHDIR if drive
172; is not TARGET or SOURCE.
173; A003 PTM0088 XCOPY (\) missing in 'FILE SHARING ERROR'.
174; This problem is fixed with incorporation of the
175; new message services.
176; A005 DCR0201 10/9/87 Incorperate new format for EXTENDED
177; ATTRIBUTES.
178;
179;
180; Label: "DOS XCOPY Utility"
181; "Version 4.00 (C) Copyright 1988 Microsoft"
182; "Licensed Material - Program Property of Microsoft"
183;
184;****************** END OF SPECIFICATIONS *****************************
185
186CLEAR_SCREEN2 MACRO;AN000;
187 MOV CX,0 ;;AN000;
188 MOV DX,184Fh ;;AN000; scroll screen from (0,0) tO (24,79)
189 MOV AX,0600h ;;AN000; AH = 6, Scroll Function
190 ;; AL = 0, Clear scroll area
191 MOV BH,7 ;;AN000; video I/O interrupt
192 INT 10H ;;AN000;
193 MOV DX,0 ;;AN000; RKJ-set cursor posn to top right hand corner
194 MOV BH,0 ;;AN000; RKJ
195 MOV AH,2 ;;AN000; RKJ
196 INT 10H ;;AN000; RKJ
197 ENDM ;;AN000;
198;--------------------------------
199; Include Files
200;--------------------------------
201INCLUDE STRUC.INC ;AN000; SAR
202INCLUDE XMAINMSG.EQU ;AN000;message file
203INCLUDE DOS.EQU ;AN000;
204INCLUDE XCOPY.EQU ;AN000;
205INCLUDE PAN-LIST.INC ;AN111;JW
206INCLUDE PANEL.MAC ;AN111;JW
207INCLUDE CASEXTRN.INC ;AN111;JW
208
209
210EXTRN FK_ENT:BYTE ;AN111;JW
211EXTRN FK_ENT_LEN:ABS ;AN111;JW
212EXTRN E_RETURN:ABS ;AN111;JW
213EXTRN S_DOS_SHEL_DISK:WORD ;AN111;JW
214EXTRN S_DOS_SEL_360:WORD ;AN111;JW
215EXTRN E_FILE_ATTR:ABS ;AN111;JW
216
217EXTRN FIND_FILE_ROUTINE:FAR ;AN111;JW
218EXTRN EXIT_SELECT:near ;AN111;JW
219
220;-------------------------------
221; Structures
222;-------------------------------
223;HEADER - informations needed about the file, subdirectory ...
224;Continue_Info -> 0 - a whole single file in this header segment, or dir.
225; 1 - Continuation of a small file.
226; 2 - Continuation of a Big file
227; 3 - EOF of continuation
228;Next_Ptr -> points to the next header segment
229;Before_Ptr -> points to the old header segment
230
231HEADER STRUC ;AN000;
232 CONTINUE_INFO DB 0 ;AN000;set for filesize bigger then 0FFD0h
233 NEXT_PTR DW ? ;AN000;next buffer ptr in para
234 BEFORE_PTR DW ? ;AN000;before ptr in para
235 DIR_DEPTH DB ? ;AN000;same as S_DEPTH
236 CX_BYTES DW 0 ;AN000;actual # of bytes in this buffer seg.
237 ATTR_FOUND DB ? ;AN000;attribute found
238 FILE_TIME_FOUND DW ?;AN000;
239 FILE_DATE_FOUND DW ?;AN000;
240 LOW_SIZE_FOUND DW ?;AN000;
241 HIGH_SIZE_FOUND DW ?;AN000;
242 TARGET_DRV_LET DB " :" ;AN000;used for writing
243 FILENAME_FOUND DB 13 DUP (0) ;AN000; FILENAME
244 ATTRIB_LIST DB ? ;AC005;EXTENDED ATTRIBUTE BUFFER
245;-------------------------------------------------------------------
246; extended attribute list used by extended open & get extended
247;-------------------------------------------------------------------
248; ATTRIB_LIST LABEL BYTE extended attribute buffer
249;
250;EA STRUC ; EXTENDED ATTRIBUTE
251;EA_TYPE DB ? ; TYPE
252;EAISUNDEF EQU 0 ; UNDEFINED TYPE (ATTRIB SKIPS)
253; ; (OR TYPE NOT APPLICABLE)
254; ; LENGTH: 0 TO 64K-1 BYTES
255;EAISLOGICAL EQU 1 ; LOGICAL (0 OR 1) (ATTRIB DISPLAYS) ; LENGTH: 1 BYTE
256;EAISBINARY EQU 2 ; BINARY INTEGER (ATTRIB DISPLAYS)
257; ; LENGTH: 1, 2, 4 BYTES
258;EAISASCII EQU 3 ; ASCII TYPE (ATTRIB DISPLAYS)
259; ; LENGTH: 0 TO 128 BYTES
260;EAISDATE EQU 4 ; DOS FILE DATE FORMAT (ATTRIB DISPLAYS)
261; ; LENGTH: 2 BYTES
262;EAISTIME EQU 5 ; DOS FILE TIME FORMAT (ATTRIB DISPLAYS)
263; ; LENGTH: 2 BYTES
264; ; OTHER VALUES RESERVED
265;EA_FLAGS DW ? ; FLAGS
266;EASYSTEM EQU 8000H ; EA IS SYSTEM DEFINED
267; ; (BUILTIN, NOT APPLICATION DEFINED)
268;EAREADONLY EQU 4000H ; EA IS READ ONLY (CANT BE CHANGED)
269;EAHIDDEN EQU 2000H ; EA IS HIDDEN FROM ATTRIB
270;EACREATEONLY EQU 1000H ; EA IS SETABLE ONLY AT CREATE TIME
271; ; OTHER BITS RESERVED
272;EA_RC DB ? ; FAILURE REASON CODE (SET BY DOS)
273;EARCNOTFOUND EQU 1 ; NAME NOT FOUND
274;EARCNOSPACE EQU 2 ; NO SPACE TO HOLD NAME OR VALUE
275;EARCNOTNOW EQU 3 ; NAME CAN'T BE SET ON THIS FUNCTION
276;EARCNOTEVER EQU 4 ; NAME CAN'T BE SET
277;EARCUNDEF EQU 5 ; NAME KNOWN TO THIS FS BUT NOT SUPPORTED
278;EARCDEFBAD EQU 6 ; EA DEFINTION BAD (TYPE, LENGTH, ETC)
279;EARCACCESS EQU 7 ; EA ACCESS DENIED
280;EARCUNKNOWN EQU -1 ; UNDETERMINED CAUSE
281;EA_NAMELEN DB ? ; LENGTH OF NAME
282;EA_VALLEN DW ? ; LENGTH OF VALUE
283;EA_NAME DB ? ; FIRST BYTE OF NAME
284;
285;EA_VALUE DB ? ; FIRST BYTE OF VALUE
286;
287HEADER ENDS ;AN000;
288
289;;;;SUB_LIST STRUC ; SAR
290;;;; DB 11 ; SAR ;AN000;
291;;;; DB 0 ; SAR ;AN000;
292;;;;DATA_OFF DW 0 ; SAR ;AN000; offset of data to be inserted
293;;;;DATA_SEG DW 0 ; SAR ;AN000; offset of data to be inserted
294;;;;MSG_ID DB 0 ; SAR ;AN000; n of %n
295;;;;FLAGS DB 0 ; SAR ;AN000; Flags
296;;;;MAX_WIDTH DB 0 ; SAR ;AN000; Maximum field width
297;;;;MIN_WIDTH DB 0 ; SAR ;AN000; Minimum field width
298;;;;PAD_CHAR DB 0 ; SAR ;AN000; character for pad field
299;;;; ; SAR
300;;;;SUB_LIST ENDS ; SAR
301;******************************************************************************
302DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; DATA Segment
303
304INCLUDE DOSFILES.INC ;AN000; SAR
305
306;; ERRORLEVEL DB 0 ; SAR ;errorlevel
307;; INPUT_DATE DW 0 ; SAR
308;; INPUT_TIME DW 0 ; SAR
309PSP_SEG DW ? ;AN000;
310SAV_DEFAULT_DRV DB ? ;AN000;1 = A, 2 = B etc. saved default
311SAV_DEF_DIR_ROOT DB '\';AN000;
312SAV_DEFAULT_DIR DB 64 DUP (0);AN000;
313SAV_S_DRV DB 'A:\' ;AN000;
314SAV_S_CURDIR DB 64 DUP (0);AN000;
315SAV_T_DRV DB 'B:\' ;AN000;
316SAV_T_CURDIR DB 64 DUP (0);AN000;
317
318 PUBLIC SOURCE_PANEL, DEST_PANEL, CHECK_FILE ;AN111;JW
319SOURCE_PANEL DW ? ;AN111;JW
320DEST_PANEL DW ? ;AN111;JW
321CHECK_FILE DW ? ;AN111;JW
322
323SOURCE_IN DB ? ;AN111;JW
324YES EQU 0 ;AN111;JW
325NO EQU 1 ;AN111;JW
326
327OLD_DTA_SEG DW ? ;AN111;JW
328OLD_DTA_OFF DW ? ;AN111;JW
329
330;
331
332;; DISP_S_PATH DB 67 DUP (0) ; SAR ;mirror image of source path. used for display message when copying
333;; DISP_S_FILE DB 13 DUP (0) ; SAR
334;; DISP_T_PATH DB 67 DUP (0) ; SAR ;mirror image of target path
335;; DISP_T_FILE DB 13 DUP (0) ; SAR
336;
337;;B_SLASH DB '\',0 ; SAR
338
339
340FILE_COUNT LABEL WORD ;AN000;
341FILE_CNT_LOW DW 0 ;AN000;copied file count
342FILE_CNT_HIGH DW 0 ;AN000;
343;
344
345;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
346;; APPENDFLAG DW 0 ; SAR ;append /X status save area
347FOUND_FILE_FLAG DB 0 ;AN000;used for showing the message "File not found"
348;
349S_DRV_NUMBER DB 0 ;AN000;source, target drv #
350T_DRV_NUMBER DB 0 ;AN000;
351;
352S_DRV_PATH LABEL BYTE ;AN000;source drv, path used for single_drv_copy
353S_DRV DB 'A:\' ;AN000;
354S_PATH DB 80 DUP (0) ;AN000;Initialized by calling GET CUR DIR
355S_DEPTH DB 0 ;AN000;
356S_DRV_1 DB 'A:' ;AN000;
357S_FILE DB '????????.???',0 ;AN000;default filename to find file
358;; S_DIR DB '????????.???',0 ; SAR ;to find any subdirectory name
359
360;; S_PARENT DB '..',0 ; SAR ;source parent used for non single_drv_copy
361S_HANDLE DW 0 ;AN000;file handle opened
362
363;; S_ARC_DRV_PATH LABEL BYTE ; SAR ;informations used to change source file's
364;; S_ARC_DRV DB 'A:\' ; SAR ;archieve bits.
365;; S_ARC_PATH DB 64 DUP (0) ; SAR
366;; S_ARC_DEPTH DB 0 ; SAR
367
368T_DRV_PATH LABEL BYTE ;AN000;target drv, path used all the time
369T_DRV DB 'B:\' ;AN000;
370T_PATH DB 64 DUP (0) ;AN000;initialized by calling GET CUR DIR in INIT
371T_DEPTH DB 0 ;AN000;
372
373;; T_FILE LABEL BYTE ; SAR ;target filename for file creation
374;; T_DRV_1 DB 'B:' ; SAR ;target drv letter
375;; T_FILENAME DB 13 DUP (0) ; SAR ;target filename
376;; T_TEMPLATE DB 11 DUP (0) ; SAR ;if global chr entered, this will be used instead of filename.
377
378;; T_PARENT LABEL BYTE ; SAR
379;; T_DRV_2 DB 'B:' ; SAR
380;; T_PARENT_1 DB '..',0 ; SAR
381T_HANDLE DW 0 ;AN000;target handle created
382;; T_MKDIR_LVL DB 0 ; SAR ;# of target starting directories created.
383;
384;------------------------------------------
385; PRINT_STDOUT input parameter save area
386;------------------------------------------
387;; SUBST_COUNT DW 0 ; SAR ;AN000; message substitution count
388;; MSG_CLASS DB 0 ; SAR ;AN000; message class
389;; INPUT_FLAG DB 0 ; SAR ;AN000; Type of INT 21 used for KBD input
390;; MSG_NUM DW 0 ; SAR ;AN000; message number
391
392;----------------------------------------------
393; Parameter list used by extended open DOS call
394;----------------------------------------------
395PARAM_LIST LABEL WORD;AN000;
396E_A_LST DD 0 ;AN005; E A LIST POINTER
397 DW 1 ;AN005; number of additional parameters
398 DB 6 ;AN005; ID for IO mode = WORD VALUE
399 DW 1 ;AN005; IO mode = PURE SEQUENTIAL
400
401
402;; INPUT_BUFF db 20 dup(0) ; SAR ;AN000; keyboard input buffer used
403 ;for user response (Y/N)
404
405;--------------------------------------------------------------
406; Following three sublists are used by the Message Retriever
407;--------------------------------------------------------------
408;;SUBLIST1 LABEL DWORD ; SAR ;AN000;SUBSTITUTE LIST 1
409;; DB 11 ; SAR ;AN000;sublist size
410;; DB 0 ; SAR ;AN000;reserved
411;; DD 0 ; SAR ;AN000;substition data Offset
412;; DB 1 ; SAR ;AN000;n of %n
413;; DB 0 ; SAR ;AN000;data type
414;; DB 0 ; SAR ;AN000;maximum field width
415;; DB 0 ; SAR ;AN000;minimum field width
416;; DB 0 ; SAR ;AN000;characters for Pad field
417;; ; SAR
418;; ; SAR
419;;SUBLIST2 LABEL DWORD ; SAR ;AN000;SUBSTITUTE LIST 2
420;; DB 11 ; SAR ;AN000;sublist size
421;; DB 0 ; SAR ;AN000;reserved
422;; DD 0 ; SAR ;AN000;substition data Offset
423;; DB 2 ; SAR ;AN000;n of %n
424;; DB 0 ; SAR ;AN000;data type
425;; DB 0 ; SAR ;AN000;maximum field width
426;; DB 0 ; SAR ;AN000;minimum field width
427;; DB 0 ; SAR ;AN000;characters for Pad field
428;; ; SAR
429;; ; SAR
430;;SUBLIST3 LABEL DWORD ; SAR ;AN000;SUBSTITUTE LIST 3
431;; DB 11 ; SAR ;AN000;sublist size
432;; DB 0 ; SAR ;AN000;reserved
433;; DD 0 ; SAR ;AN000;substition data Offset
434;; DB 3 ; SAR ;AN000;n of %n
435;; DB 0 ; SAR ;AN000;data type
436;; DB 0 ; SAR ;AN000;maximum field width
437;; DB 0 ; SAR ;AN000;minimum field width
438;; DB 0 ; SAR ;AN000;characters for Pad field
439;;
440
441
442FILE_SEARCH_ATTR DW NORM_ATTR;AN000;
443;; DIR_SEARCH_ATTR DW INCL_H_S_DIR_ATTR ; SAR
444;
445OPEN_MODE DB Read_Only_Deny_Write ;AN000;READ_ONLY_DENY_WRITE ;access, sharing mode
446;
447;Equates are defined in XCOPY.EQU
448
449MY_FLAG DB 0 ;AN000;informations for a tree walk
450; find_first_flag equ 01h ;set MY_FLAG by "OR"
451; findfile_flag equ 02h
452; no_more_file equ 04h
453; single_copy_flag equ 08h ;single copy instead of multi copy
454; visit_parent_flag equ 10h ;visit parent node
455; found_flag equ 20h ;found flag - for find subdir
456; missing_link_flag equ 40h ;insuffiecient info. for not creating empty dir
457; is_source_flag equ 80h ;if set, dealing with source
458; reset_find_first equ 0FEh ;reset by AND
459; reset_findfile equ 0FDh
460; reset_no_more equ 0FBh
461; reset_visit_parent equ 0EFh
462; reset_found equ 0DFh
463; reset_missing_link equ 0BFh
464; reset_is_source equ 07Fh
465
466FILE_FLAG DB 0 ;AN000;
467; cont_flag equ 01h
468; eof_flag equ 02h
469; big_file_flag equ 04h
470; file_bigger_flag equ 08h
471; created_flag equ 10h
472; reset_cont equ 0FEh
473; reset_eof equ 0FDh
474; reset_big_file equ 0FBh
475; reset_file_bigger equ 0F7h
476; reset_created equ 0EFh
477; reset_readfile equ 0F0h ;reset FILE_FLAG for read a file
478;
479COPY_STATUS DB 0;AN000;
480; open_error_flag equ 01h
481; read_error_flag equ 02h
482; create_error_flag equ 04h
483; write_error_flag equ 08h
484; mkdir_error_flag equ 10h
485; chdir_error_flag equ 20h
486; maybe_itself_flag equ 40h
487; disk_full_flag equ 80h
488; reset_open_error equ 0FEh
489; reset_read_error equ 0FDh
490; reset_create_error equ 0FBh
491; reset_write_error equ 0F7h
492; reset_close_error equ 0EFh
493; reset_chdir_error equ 0DFh
494;
495ACTION_FLAG DB 0;AN000;
496; reading_flag equ 01h ;display "Reading source files..."
497; reset_reading equ 0FEh ;do not display.
498;
499SYS_FLAG DB 0 ;AN000;system information
500; one_disk_copy_flag equ 01h ;xcopy with only one logical drive.
501; default_drv_set_flag equ 02h ;default drive has been changed by this program
502; default_s_dir_flag equ 04h ;source current directory saved.
503; default_t_dir_flag equ 08h ;target current directory saved.
504; removalble_drv_flag equ 10h
505; sharing_source_flag equ 20h ;source shared
506; sharing_target_flag equ 40h
507; turn_verify_off_flag equ 80h ;turn the verify off when exit to dos
508; reset_default_s_dir equ 0FBh ;reset default_s_dir_flag
509;
510OPTION_FLAG DB 0;AN000;
511; slash_a equ 01h ;soft archieve ?
512; slash_d equ 02h ;date?
513; slash_e equ 04h ;create empty dir?
514; slash_m equ 08h ;hard archieve ? (turn off source archieve bit)
515; slash_p equ 10h ;prompt?
516; slash_s equ 20h ;walk the tree?
517; slash_v equ 40h ;verify on?
518; slash_w equ 80h ;show "Press any key to begin copying" msg)
519; reset_slash_a equ 0FEh ;turn off soft archieve
520; reset_slash_m equ 0F7h ;turn off hard archieve
521
522MAX_CX DW 0 ;AN000;less than 0FFD0h
523ACT_BYTES DW 0 ;AN000;actual bytes read.
524HIGH_FILE_SIZE DW 0;AN000;
525LOW_FILE_SIZE DW 0;AN000;
526;
527TOP_OF_MEMORY DW 0 ;AN000;para
528BUFFER_BASE DW 0 ;AN000;para
529MAX_BUFFER_SIZE DW 0 ;AN000;para. BUFFER_LEFT at INIT time.
530BUFFER_LEFT DW 0 ;AN000;para
531BUFFER_PTR DW 0 ;AN000;para. If buffer_left=0 then invalid value
532DATA_PTR DW 0 ;AN000;buffer_ptr + 2 (32 bytes)
533OLD_BUFFER_PTR DW 0 ;AN000;last buffer_ptr
534SIZ_OF_BUFF DW ? ;AN005;para. EXTENDED ATTRIB BUFF SIZE
535BYTS_OF_HDR DW ? ;AN005;bytes TOTAL HEADER SIZE
536PARA_OF_HDR DW ? ;AN005;para. TOTAL HEADER SIZE
537OPEN_FILE_COUNT DW ? ;AN005;TRACKING OF OPEN FLS FOR BUFFER
538; ;SIZE CALCULATION.
539;
540;structured data storage allocation
541FILE_DTA Find_DTA <> ;AN000;DTA for find file
542DTAS Find_DTA 32 dup (<>) ;AN000;DTA STACK for find dir
543;** Througout the program BP will be used for referencing fieldsname in DTAS.
544;For example, DS:[BP].dta_filename.
545DATA ENDS ;AN000;
546
547;******************************************************************************
548
549SELECT SEGMENT PARA PUBLIC 'SELECT';AN000;
550 ASSUME CS:SELECT, DS:DATA ;AN000;
551
552;--- START OF A PROGRAM ---
553
554PUBLIC MOD_XCOPY ;AN000;
555MOD_XCOPY PROC NEAR ;AN000; SAR
556
557
558 PUSH ES ;AN000; SAR
559 PUSH BP ;AN000; SAR
560 ; SAR
561 PUSH DS ;AN000; SAR
562 POP ES ;AN000; SAR
563 MOV SP_SAVE, SP ;AN000; SAR
564 ; SAR
565 MOV SOURCE_IN,YES ;AN111;JW
566 .IF < AL eq 1 > ;AN000;
567 MOV AL,2 ;AN000;
568 .ELSEIF < AL eq 2 > ;AN000;
569 MOV AL,1 ;AN000;
570 .ENDIF ;AN000;
571 MOV DEST,AL ;AN000; SAR
572 MOV TABLE_OFFSET, BX ;AN000; SAR
573 MOV NUMBER_OF_FILES, CX ;AN000; SAR
574 MOV PATH_OFFSET, SI ;AN000; SAR
575 CALL SAVE_DTA ;AN000;
576
577 MOV AH, 62H ;AN000; SAR
578 INT 21H ;AN000; SAR
579 MOV PSP_SEG, BX ;AN000; SAR
580
581 CALL ALLOCATE ;AN000; SAR
582 .IF < C > ;AN000; SAR
583 JMP JUST_EXIT ;AN000; SAR
584 .ENDIF ;AN000; SAR
585
586XCOPY_INIT: ;AN000;
587 CALL INIT ;AN000;initialization
588 JC MAIN_EXIT ;AN000;error. (Already message has been displayed)
589
590 MOV BP, OFFSET DTAS ;AN000;initialize BP
591 OR ACTION_FLAG, READING_FLAG ;AN000;set reading flag for copy message
592
593 CALL TREE_COPY ;AN000;
594
595 CALL ORG_S_DEF ;AN000;restore the original source default dir
596
597 CALL WRITE_FROM_BUFFER ;AN000;write from buffer if we missed it.
598
599 CALL SWITCH_DTAS ;AN111;JW
600
601 CLC ;AN000; SAR
602 JMP RESTORE_DIRS ;AN000; SAR
603
604MAIN_EXIT: ;AN000;
605;;;;; MOV BX, DATA ; SAR
606;;;;; MOV DS, BX ; SAR re initialize ds, es
607;;;;; MOV ES, BX ; SAR exit here if the status of source, target or default drv has been changed.
608;;;;; CALL CHK_FILE_NOT_FOUND ; SAR if no files has been found, show the message.
609
610MAIN_EXIT_A: ;AN000;
611 STC ;AN000; SAR
612
613RESTORE_DIRS:;AN000;
614 MOV BX, DATA ;AN000; SAR
615 MOV DS, BX ;AN000;re initialize ds, es
616 MOV ES, BX ;AN000;exit here if the status of source, target or default drv has been changed.
617;;;;; CALL CHK_MKDIR_LVL ; SAR starting target directory has been created?
618 PUSHF ;AN000; SAR
619 CALL ORG_S_T_DEF ;AN000;restore original target, source, default drv, and verify status
620 POPF ;AN000; SAR
621 JMP DO_DEALLOCATE ;AN000; SAR
622JUST_EXIT: ;AN000;unconditional immediate exit
623 MOV AX, DATA ;AN000; SAR
624 MOV DS, AX ;AN000; SAR
625 STC ;AN000; SAR
626
627DO_DEALLOCATE: ;AN000; SAR
628; Restore the original status of APPEND if active.
629 CALL DEALLOCATE ;AN000; SAR
630 .IF < NC > ;AN000; SAR
631 .IF < NOT_FOUND_FLAG EQ 1 > ;AN000; SAR
632 STC ;AN000; SAR
633 .ELSE ;AN000; SAR
634 CLC ;AN000; SAR
635 .ENDIF ;AN000; SAR
636 .ENDIF ;AN000; SAR
637 MOV SP, SP_SAVE ;AN000; SAR
638 POP BP ;AN000; SAR
639 POP ES ;AN000; SAR
640 RET ;AN000; SAR
641
642; MOV AH, 4Ch ;return to dos
643; MOV AL, ERRORLEVEL ;set return code whatever
644; INT 21H
645
646MOD_XCOPY ENDP;AN000;
647;
648
649
650;----------------- SUBROUTINES ---------------------------------------------
651
652ALLOCATE PROC NEAR ;AN000; SAR
653 ; SAR
654 MOV BX, 0FFFFH ;AN000; SAR Attempt to allocate as much as possible
655 MOV AH, 48H ;AN000; SAR
656 INT 21H ;AN000; SAR
657 MOV AH, 48H ;AN000; SAR BX contains the amount of memory available
658 INT 21H ;AN000; SAR
659 MOV ALLOCATE_START, AX ;AN000; SAR
660 ; SAR
661 RET ;AN000; SAR
662 ; SAR
663ALLOCATE ENDP ;AN000; SAR
664 ; SAR
665DEALLOCATE PROC NEAR ;AN000; SAR
666 ; SAR
667 PUSHF ;AN000; SAR
668 PUSH ES ;AN000; SAR
669 MOV AX, ALLOCATE_START ;AN000; SAR
670 MOV ES, AX ;AN000; SAR
671 MOV AH, 49H ;AN000; SAR
672 INT 21H ;AN000; SAR
673 POP ES ;AN000; SAR
674 POPF ;AN000; SAR
675 ; SAR
676 RET ;AN000; SAR
677 ; SAR
678DEALLOCATE ENDP ;AN000; SAR
679
680
681
682
683TREE_COPY PROC NEAR ;AN000;
684
685;Walk the source tree to read files and subdirectories
686
687 .IF < DEST EQ 1 > ;AN000; SAR Copying to drive b?
688 MOV SI, OFFSET B_TARGET ;AN000; SAR Yes! Copy the drive information
689 MOV CX, LENGTH_B_TARGET ;AN000; SAR
690 .ELSEIF < DEST EQ 3 > ;AN111;JW ; SAR Copying to drive A?
691 MOV SI, OFFSET A_TARGET ;AN111;JW ; SAR Yes! Copy the drive information
692 MOV CX, LENGTH_A_TARGET ;AN111;JW ; SAR
693 .ELSE ;AN000; SAR
694 MOV SI, PATH_OFFSET ;AN000; SAR No! Copy to this directory.
695 MOV CX, WORD PTR [SI] ;AN000; SAR
696 ADD SI, 2 ;AN000; SAR Adjust for the length word
697 .ENDIF ;AN000; SAR
698 MOV DI,OFFSET T_DRV_PATH ;AN000; SAR
699 CLD ;AN000; SAR
700 REP MOVSB ;AN000; SAR
701
702
703
704 OR MY_FLAG, FINDFILE_FLAG ;AN000;deals with files
705 OR MY_FLAG, FIND_FIRST_FLAG ;AN000;find first
706
707 MOV NOT_FOUND_FLAG, 0 ;AN000; SAR
708 ; SAR
709NEXT_PASS: ;AN000; SAR
710 ; SAR
711 MOV SI, TABLE_OFFSET ;AN000; SAR
712 MOV DOS_FILE_PTR,SI ;AN000; SAR
713 MOV FILE_NUM,1 ;AN000; SAR
714
715 CALL SET_MY_DTA ;AN000;set DTA to FILE_DTA
716; $DO
717$$DO1: ;AN000;
718 AND MY_FLAG, RESET_NO_MORE ;AN000; SAR
719 CALL LOAD_DOS_FILENAME ;AN000; SAR
720 TEST MY_FLAG, NO_MORE_FILE ;AN000; SAR
721; $LEAVE NZ ; SAR
722 JNZ $$EN1 ;AN000;
723
724 .IF < SOURCE_IN EQ NO > AND ;AN000;
725 .IF < DEST EQ 3 > ;AN000;
726 CALL GET_SOURCE ;AN000;
727 .ENDIF ;AN000;
728
729 CALL FIND_FILE ;AN000;find first (next) ; SAR
730 .IF < BIT MY_FLAG NAND NO_MORE_FILE > ;AN000; SAR
731 CALL READ_INTO_BUFFER ;AN000; SAR
732 .ELSE ;AN000; SAR
733 MOV NOT_FOUND_FLAG, 1 ;AN000; SAR
734 .ENDIF ;AN000; SAR
735; $ENDDO ; SAR
736 JMP SHORT $$DO1 ;AN000;
737$$EN1: ;AN000;
738 CLC ;AN000; SAR
739
740;  SAR 
741;;;;;; TEST OPTION_FLAG, SLASH_S ;walk the tree?
742; $IF NZ,LONG
743;
744; AND MY_FLAG, RESET_FINDFILE ;now, deals with directory
745; OR MY_FLAG, FIND_FIRST_FLAG ;find first
746; $DO
747; CALL SET_MY_DTA ;set DTA to DTAS according to BP
748; CALL FIND_DIR ;find first (next)
749; TEST MY_FLAG, NO_MORE_FILE ;no more subdirectory?
750; $LEAVE NZ ;then leave this loop to return to caller
751; LEA DI, S_DRV_PATH
752; LEA SI, [BP].DTA_FILENAME
753; CMP S_PATH, 0 ;root directory?
754; $IF E
755; MOV AL, 0FFh ;then '\' is already provided. Just concat.
756; $ELSE
757; MOV AL, PATH_DELIM ;put delimiter
758; $ENDIF
759; CALL CONCAT_ASCIIZ ;make new path
760; test option_flag, slash_p ;prompt mode?
761; $IF NZ
762; call p_concat_display_path
763; $ENDIF
764; INC S_DEPTH ;increase depth
765; CALL MAKE_HEADER ;make header in the buffer
766; OR MY_FLAG, IS_SOURCE_FLAG ;dealing with source
767; AND MY_FLAG, RESET_VISIT_PARENT ;going to visit child node
768; CALL CHANGE_S_DIR ;change source dir
769; ADD BP, type FIND_DTA ;increase DTAS stack pointer
770; CALL TREE_COPY ;tree copy the sub directory
771; $ENDDO
772;
773; CMP S_DEPTH, 0 ;starting directory? then exit
774; $IF NE ;else
775; DEC S_DEPTH ;dec depth
776; TEST OPTION_FLAG, SLASH_E ;copy subdirectories even if empty?
777; $IF Z
778; CALL DEL_EMPTY ;then check the old_buffer_ptr and
779; ;if it is a directory, then restore
780; ;buffer_ptr to old.
781; $ENDIF
782; LEA DI, S_DRV_PATH
783; CALL LAST_DIR_OUT ;change environments
784; test option_flag, slash_p ;prompt mode?
785; $IF NZ
786; call p_cut_display_path
787; $ENDIF
788; LEA DX, S_DRV_PATH ;before returning to the caller
789; OR MY_FLAG, IS_SOURCE_FLAG
790; OR MY_FLAG, VISIT_PARENT_FLAG
791; CALL CHANGE_S_DIR
792; SUB BP, type FIND_DTA
793; $ENDIF
794;;;;;;; $ENDIF ;walk the tree
795 RET ;AN000;
796TREE_COPY ENDP;AN000;
797
798
799GET_SOURCE PROC NEAR;AN000;
800
801 CALL SWITCH_DTAS;AN000;
802
803 .REPEAT ;AN000;
804
805 INIT_PQUEUE PAN_INST_PROMPT ;AN000; initialize queue
806 PREPARE_PANEL SOURCE_PANEL ;AN000; remove select from A: & insert DOS
807 PREPARE_PANEL PAN_HBAR ;AN000;
808 PREPARE_CHILDREN ;AN000; prepare child panels
809 DISPLAY_PANEL ;AN000;
810 ;
811 GET_FUNCTION FK_ENT ;AN000;
812
813 .IF < SOURCE_PANEL eq SUB_REM_DOS_A > ;AN000;
814 LEA DI, S_DOS_SEL_360 ;AN000;
815 .ELSE ;AN000;
816 LEA DI, S_DOS_SHEL_DISK ;AN000;
817 .ENDIF ;AN000;
818 MOV CX, E_FILE_ATTR ;AN000;
819 CALL FIND_FILE_ROUTINE ;AN000;
820 .LEAVE < nc > ;AN000;
821 ;
822 HANDLE_ERROR ERR_DOS_DISK, E_RETURN ;AN000;
823 ;
824 .UNTIL ;AN000;
825
826 ;;;copying files from diskette 1 screen ;
827 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
828 PREPARE_PANEL SUB_COPYING ;AN000; prepare copying from diskette 1 message
829 DISPLAY_PANEL ;AN000;
830
831 MOV SOURCE_IN,YES ;AN000;
832
833 CALL SWITCH_DTAS ;AN000;
834
835 RET ;AN000;
836GET_SOURCE ENDP ;AN000;
837
838GET_DEST PROC NEAR ;AN000;
839
840
841 INIT_PQUEUE PAN_INST_PROMPT ;AN000; initialize queue
842 PREPARE_PANEL DEST_PANEL ;AN000; remove select from A: & insert DOS
843 PREPARE_PANEL PAN_HBAR ;AN000;
844 PREPARE_CHILDREN ;AN000; prepare child panels
845 DISPLAY_PANEL ;AN000;
846 ;
847 GET_FUNCTION FK_ENT ;AN000;
848 ;
849
850 ;;;copying files from diskette 1 screen ;
851 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
852 PREPARE_PANEL SUB_COPYING ;AN000; prepare copying from diskette 1 message
853 DISPLAY_PANEL ;AN000;
854
855 MOV SOURCE_IN,NO ;AN000;
856; SUB DOS_FILE_PTR,12
857; DEC FILE_NUM
858
859 RET ;AN000;
860GET_DEST ENDP ;AN000;
861;
862;******************************************************************************
863; Subroutine: LOAD_DOS_FILENAME - Load the next filename into S_FILE.
864; INPUT:
865; SI - Points to the start of the filename
866;
867; OUTPUT:
868; The S_FILE field in the data segment is updated.
869;Registers Affected:
870; SI - At the end, SI points to the end of the filename. It therefore
871; also points to the beginning of the next filename.
872;
873;******************************************************************************
874LOAD_DOS_FILENAME PROC NEAR;AN000;
875
876 PUSH DI ;AN000;
877 PUSH ES ;AN000;
878
879 OR MY_FLAG, FIND_FIRST_FLAG ;AN000; Find first in the directory
880
881 MOV SI,DOS_FILE_PTR ;AN000;
882
883LDF_SEE_IF_DONE: ;AN000;
884 ;
885 ; See if we are finished this pass of the files
886 ;
887 OR MY_FLAG, NO_MORE_FILE ;AN000; For now, assume there are not files found
888 MOV DX, NUMBER_OF_FILES ;AN000; Get the number of files in the table
889 .IF < FILE_NUM BE DX > ;AN000; Search while there are still more files
890 AND MY_FLAG, RESET_NO_MORE ;AN000; Indicate that there are more files
891 LEA DI,S_FILE ;AN000; Where to put the name
892 MOV CX,12 ;AN000; Number of bytes
893 CLD ;AN000;
894 REP MOVSB ;AN000;
895 INC FILE_NUM ;AN000;
896 .ENDIF ;AN000;
897
898 MOV DOS_FILE_PTR,SI ;AN000; Save the pointer to the files
899 POP ES ;AN000;
900 POP DI ;AN000;
901 RET ;AN000;
902
903LOAD_DOS_FILENAME ENDP ;AN000;
904;
905READ_INTO_BUFFER PROC NEAR ;AN000;
906;Read *** a *** file into buffer
907
908;  SAR 
909; TEST MY_FLAG, SINGLE_COPY_FLAG ;single copy?
910; $IF Z,AND ;no, multi copy
911; TEST ACTION_FLAG, READING_FLAG ;show message?
912; $IF NZ ;yes.
913; MOV AX,MSG_READING_SOURCE ;AN000; message number
914; MOV MSG_NUM,AX ;AN000; set message number
915; MOV SUBST_COUNT,0 ;AN000; no message substitution
916; MOV MSG_CLASS,-1 ;AN000; message class
917; MOV INPUT_FLAG,0 ;AN000; no input
918; MOV AX,MSG_READING_SOURCE
919; CALL PRINT_STDOUT ;show message "Reading source files"
920;
921; AND ACTION_FLAG, RESET_READING ;reset it
922;;;;;;; $ENDIF
923
924 AND FILE_FLAG, RESET_READFILE ;AN000;reset file_flag to read a file
925 MOV AX,FILE_DTA.DTA_FILE_SIZE_HIGH;AN000;
926 MOV HIGH_FILE_SIZE, AX ;AN000;
927 MOV AX,FILE_DTA.DTA_FILE_SIZE_LOW;AN000;
928 MOV LOW_FILE_SIZE, AX ;AN000;
929
930 MOV AX, PARA_OF_HDR ;AN005;GET THE HEADER SIZE (para.)
931 CMP MAX_BUFFER_SIZE,AX ;AN005;IS EA BUFFER TOO LARGE?
932 JB RIB_ERROR ;AN005;CLOSE THE FILE AND GET THE NEXT
933
934 CALL CMP_FILESIZE_TO_BUFFER_LEFT ;AN000;compare sizes
935 TEST FILE_FLAG, FILE_BIGGER_FLAG ;AN000;filesize > buffer_left - header?
936 JZ RIB_SMALL ;AN000;if not, then small file
937 MOV BX, S_HANDLE ;AN005;
938 CALL CLOSE_A_FILE ;AN005;ONLY OPENED TO GET BUFFER SIZE
939 CALL WRITE_FROM_BUFFER;AN000;
940
941 .IF < SOURCE_IN EQ NO > AND ;AN111;JW
942 .IF < DEST EQ 3 > ;AN111;JW
943 CALL GET_SOURCE ;AN111;JW put source diskette in A:
944 .ENDIF ;AN111;JW
945
946; JC RIB_ERROR ;any problem with writing?
947 CALL CMP_FILESIZE_TO_BUFFER_LEFT ;AN000;compare again
948 TEST FILE_FLAG, FILE_BIGGER_FLAG ;AN000;still bigger?
949 JNZ RIB_BIG ;AN000;yes. Big file
950RIB_SMALL: ;AN000;
951 CALL SMALL_FILE;AN000;
952 JC RIB_ERROR ;AN000;
953 JMP RIB_EXIT ;AN000;
954RIB_BIG: ;AN000;
955 MOV BX, S_HANDLE ;AN005;
956 CALL CLOSE_A_FILE ;AN005;ONLY OPENED TO GET BUFFER SIZE
957 CALL BIG_FILE ;AN000;
958 JNC RIB_EXIT ;AN000;
959RIB_ERROR: ;AN000;
960 TEST COPY_STATUS, OPEN_ERROR_FLAG ;AN000;open error?
961 JNZ RIB_EXIT ;AN000;just exit. find next file
962 MOV BX, S_HANDLE ;AN000;else write error
963 CALL CLOSE_A_FILE ;AN000;close the troubled file
964 ;and find next file
965RIB_EXIT: ;AN000;
966 TEST MY_FLAG, SINGLE_COPY_FLAG ;AN000;single copy?
967; $IF NZ
968 JZ $$IF4 ;AN000;
969 CALL WRITE_FROM_BUFFER ;AN000;then write a file
970; $ENDIF
971$$IF4: ;AN000;
972 RET ;AN000;
973READ_INTO_BUFFER ENDP ;AN000;
974;
975
976SMALL_FILE PROC NEAR ;AN000;
977;handles a file smaller than max_buffer_size or buffer_left, i.e. fit in memory.
978;This routine will call MAKE_HEADER, SET_BUFFER_PTR< READ_A_FILE, OPEN_A_FIEL
979;CALC_FILE_SIZE, CMP_FILE_FFD0h, CLOSE_A_FILE.
980
981 TEST FILE_FLAG, BIG_FILE_FLAG ;AN000;called from BIG_FILE?
982 JNZ SMF_CONT ;AN000;then need not open a file again
983 CALL OPEN_A_FILE ;AN000;open a file using FILE_DTA
984 JC SMF_ERROR ;AN000;open error?
985SMF_CONT: ;AN000;
986 CALL CMP_FILE_FFD0h ;AN000;filesize > 0FFD0h ?
987 TEST FILE_FLAG, FILE_BIGGER_FLAG;AN000;
988 JZ SMF_EOF ;AN000;filesize <= 0FFD0h
989 OR FILE_FLAG, CONT_FLAG ;AN000;filesize > 0FFD0h. set cont_flag
990 MOV CX, 0FFD0h ;AN000;# of bytes to read
991 CALL READ_A_FILE;AN000;
992 JC SMF_ERROR ;AN000;unsuccessful read?
993 CALL MAKE_HEADER ;AN000;else make header and ready for next
994 CALL CALC_FILE_SIZE ;AN000;filesize = filesize - bytes read
995 JMP SMF_CONT ;AN000;loop. compare again with the rest
996
997SMF_EOF: ;AN000;
998 MOV CX, LOW_FILE_SIZE ;AN000;rest of the bytes to read
999 OR FILE_FLAG, EOF_FLAG ;AN000;set EOF
1000 CALL READ_A_FILE ;AN000;
1001 JC SMF_ERROR ;AN000;
1002 CALL MAKE_HEADER ;AN000;
1003 MOV BX, S_HANDLE ;AN000;
1004 CALL CLOSE_A_FILE ;AN000;
1005 JMP SMF_EXIT ;AN000;
1006SMF_ERROR: ;AN000;
1007 ;
1008SMF_EXIT: ;AN000;
1009 RET ;AN000;
1010SMALL_FILE ENDP ;AN000;
1011;
1012
1013BIG_FILE PROC NEAR ;AN000;
1014;handles a file which is bigger than max_buffer_size
1015;Needs 2 file handles open concurrently for read and write
1016
1017 OR FILE_FLAG, BIG_FILE_FLAG;AN000;
1018 OR FILE_FLAG, CONT_FLAG;AN000;
1019 CALL OPEN_A_FILE ;AN000;
1020 JC BIF_ERROR ;AN000;error in open?
1021 CMP MAX_BUFFER_SIZE, 0FFFh ;AN000;max buffer size > 0FFFh in para ?
1022 JA BIF_BIG ;AN000;yes. large buffer system
1023 ;else small buffer
1024 MOV CX, MAX_CX ;AN000;CX = max_buffer_size * 16 - 32
1025BIF_SM: ;AN000;
1026 CALL READ_A_FILE;AN000;
1027 JC BIF_ERROR ;AN000;read error?
1028 CALL MAKE_HEADER;AN000;
1029 CALL WRITE_FROM_BUFFER;AN000;
1030 JC BIF_ERROR ;AN000;write error?
1031 TEST FILE_FLAG, EOF_FLAG ;AN000;end of file set by READ_A_FILE?
1032 JZ BIF_SM ;AN000;if not, read again
1033 MOV BX, S_HANDLE;AN000;
1034 CALL CLOSE_A_FILE;AN000;
1035 JMP BIF_EXIT ;AN000;finished.
1036BIF_BIG: ;AN000;
1037 MOV CX, 0FFD0h ;AN000;max # of data bytes this program supports
1038BIF_BIG1: ;AN000;
1039 CALL READ_A_FILE;AN000;
1040 JC BIF_ERROR ;AN000;
1041 CALL MAKE_HEADER;AN000;
1042 CALL CALC_FILE_SIZE ;AN000;modify file size
1043BIF_BIG2: ;AN000;
1044 CALL CMP_FILESIZE_TO_BUFFER_LEFT ;AN000;filesize > buffer_left?
1045 TEST FILE_FLAG, FILE_BIGGER_FLAG ;AN000;yes.
1046 JZ BIF_END ;AN000;if it is not, call small_file
1047 CMP BUFFER_LEFT, 0FFFh ;AN000;BUFFER_LEFT >= 0FFF0h in bytes?
1048 JAE BIF_BIG ;AN000;then loop again.
1049 CMP BUFFER_LEFT, 140H ;AN000;else BUFFER_LEFT >= 5 K in bytes? ;minimum buffer size this program supports.
1050 JL BIF_BIG3 ;AN000;then flush buffer and try again. **IF system buffer left < 5 K then infinit loop can happen.
1051 MOV AX,BUFFER_LEFT;AN000;
1052 SUB AX,PARA_OF_HDR ;AC005;FOR HEADER SIZE para.
1053 MOV CX,BYTS_OF_HDR ;AN005;FOR HEADER SIZE bytes.
1054 JMP BIF_BIG1 ;AN000;read again
1055BIF_BIG3: ;AN000;
1056 CALL WRITE_FROM_BUFFER;AN000;
1057 JC BIF_ERROR ;AN000;
1058 JMP BIF_BIG2 ;AN000;flush buffer and compare again.
1059BIF_END: ;AN000;
1060 CALL SMALL_FILE ;AN000;when filesize <= buffer_left then SMALL_FILE will finish it.
1061 JC BIF_ERROR ;AN000;something wrong?
1062 CALL WRITE_FROM_BUFFER ;AN000;else finish copying this file
1063 JNC BIF_EXIT ;AN000;
1064BIF_ERROR: ;AN000;
1065 ;what happened?
1066BIF_EXIT: ;AN000;
1067 RET ;AN000;
1068BIG_FILE ENDP ;AN000;
1069;
1070MAKE_HEADER PROC NEAR ;AN000;
1071;When called by READ_A_FILE after the data had been read into the buffer, this
1072;routine will put the header which is just below the data area where the
1073;current BUFFER_PTR points. The header is 32 (2 para) byte long. And this
1074;routine will also call SET_BUFFER_PTR to set the BUFFER_PTR, BUFFER_LEFT
1075;for the next process.
1076;If called by TREE_COPY for a SUBDIRECTORY handle, this routine should
1077;check the BUFFER_LEFT (when called by READ_A_FILE, the caller is assumed
1078;to check the size of buffer_left before calling.) In this case, this
1079;routine will set the next BUFFER_PTR, BUFFER_LEFT, OLD_BUFFER_PTR
1080;instead of SET_BUFFER_PTR routine.
1081;Informations are obtained from the DTA area (for file - FILE_DTA.xxx
1082;dir - DS:[BP].xxx ) and stored into the header by referencing ES:field;s name.
1083;DS - Program Data area
1084;ES - will be used for a header segment in the buffer.
1085;
1086 PUSH ES ;AN000;save ES
1087 PUSH AX ;AN000;
1088
1089MH_AGAIN: ;AN000;
1090 MOV AX,BUFFER_PTR ;AN000;buffer_ptr is a segment
1091 MOV ES, AX ;AN000;now, ES is a header seg.
1092;
1093 MOV AX, PARA_OF_HDR ;AN005;GET THE HEADER SIZE (para.)
1094 CMP BUFFER_LEFT,AX ;AC005;buffer_left=less than NEEDED?
1095 JAE MH_START ;AN000;
1096 CALL WRITE_FROM_BUFFER ;AN000;if so, flush buffer
1097 JC MH_ERROR_BRIDGE ;AN000;write error?
1098 JMP SHORT MH_AGAIN ;AN000;reinitialize ES to new buffer ptr
1099MH_START: ;AN000;
1100 TEST MY_FLAG, FINDFILE_FLAG ;AN000;identify caller.
1101 JNZ MH_FILE ;AN000;if a file, jmp to MH_FILE
1102 ;else deals with directory.
1103 MOV ES:CONTINUE_INFO, 0 ;AN000;not a continuation.
1104 MOV AX,OLD_BUFFER_PTR ;AN000;
1105 MOV ES:BEFORE_PTR, AX ;AN000;set before_ptr in header
1106 MOV AX,BUFFER_PTR ;AN000;
1107 MOV OLD_BUFFER_PTR, AX ;AN000;set variable OLD_BUFFER_PTR
1108 ADD AX,PARA_OF_HDR ;AC005;AX = BUFFER_PTR+HEADER(para)
1109 MOV BUFFER_PTR, AX ;AN000;set new BUFFER_PTR
1110 MOV ES:NEXT_PTR, AX ;AN000;set NEXT_PTR in the header
1111 MOV AX, PARA_OF_HDR ;AN005;GET THE HEADER SIZE (para.)
1112 SUB BUFFER_LEFT,AX ;AC005;adjust BUFFER_LEFT
1113 CMP BUFFER_LEFT,AX ;AC005;less than HEADER SIZE (para) ?
1114; $IF B
1115 JNB $$IF6 ;AN000;
1116 MOV BUFFER_LEFT, 0 ;AN000;indicate buffer_full
1117; $ENDIF
1118$$IF6: ;AN000;
1119 MOV AL, S_DEPTH ;AN000;
1120 MOV ES:DIR_DEPTH, AL ;AN000;now save other info's
1121 MOV AL, DS:[BP].DTA_ATTRIBUTE;AN000;
1122 MOV ES:ATTR_FOUND, AL ;AN000;in this case, DIR
1123 MOV AL, BYTE PTR T_DRV;AN000;
1124 MOV ES:TARGET_DRV_LET, AL ;AN000;mov target drive letter
1125 MOV ES:TARGET_DRV_LET+1, DRV_delim ;AN000; ':'
1126 MOV CX, 13 ;AN000;
1127 LEA SI, [BP].DTA_FILENAME ;AN000;DS:SI
1128 MOV DI, OFFSET ES:FILENAME_FOUND ;AN000;ES:DI
1129 REP MOVSB ;AN000;mov sting until cx = 0
1130 JMP MH_EXIT ;AN000;
1131MH_ERROR_BRIDGE: JMP MH_ERROR;AN000;
1132MH_FILE: ;AN000;handles a file header hereafter.
1133 TEST FILE_FLAG, CONT_FLAG ;AN000;continuation?
1134 JZ MH_WHOLE_FILE ;AN000;no, just a whole file
1135 TEST FILE_FLAG, EOF_FLAG ;AN000;Eof flag set?
1136 JNZ MH_CONT_END ;AN000;yes, must be end of continuation
1137 TEST FILE_FLAG, BIG_FILE_FLAG ;AN000;Is this a big file?
1138 JNZ MH_BIG ;AN000;yes
1139 MOV ES:CONTINUE_INFO, 1 ;AN000;else small file continuation.
1140 JMP MH_A_FILE ;AN000;
1141MH_WHOLE_FILE: ;AN000;
1142 MOV ES:CONTINUE_INFO, 0 ;AN000;
1143 JMP MH_A_FILE ;AN000;
1144MH_CONT_END: ;AN000;
1145 MOV ES:CONTINUE_INFO, 3 ;AN000;
1146 JMP MH_A_FILE ;AN000;
1147MH_BIG: ;AN000;
1148 MOV ES:CONTINUE_INFO, 2 ;AN000;
1149MH_A_FILE: ;AN000;
1150 MOV AX,FILE_DTA.DTA_FILE_TIME;AN000;
1151 MOV ES:FILE_TIME_FOUND, AX;AN000;
1152 MOV AX, FILE_DTA.DTA_FILE_DATE;AN000;
1153 MOV ES:FILE_DATE_FOUND, AX;AN000;
1154 MOV AX, FILE_DTA.DTA_FILE_SIZE_LOW;AN000;
1155 MOV ES:LOW_SIZE_FOUND, AX;AN000;
1156 MOV AX, FILE_DTA.DTA_FILE_SIZE_HIGH;AN000;
1157 MOV ES:HIGH_SIZE_FOUND, AX;AN000;
1158 MOV AL, BYTE PTR T_DRV ;AN000;
1159 MOV ES:TARGET_DRV_LET, AL;AN000;
1160 MOV ES:TARGET_DRV_LET+1, DRV_DELIM;AN000;
1161 MOV CX, 13 ;AN000;
1162 MOV SI, OFFSET FILE_DTA.DTA_FILENAME;AN000;
1163 MOV DI, OFFSET ES:FILENAME_FOUND;AN000;
1164 REP MOVSB ;AN000;
1165
1166; Get Extended Attribute list of the opened file and save in attribute buff.
1167
1168; old method
1169; MOV AX,INT_ORDINAL ;AN000; SET THE ORDINAL TO 0
1170; MOV ES:QUERY_LIST,AX ;AN000; PUT IT IN THE BUFFER
1171; MOV AX,SIZ_OF_BUFF ;AN000; SET THE SIZE TO 510 BYTES
1172; MOV ES:BUFR_SIZ,AX ;AN000; PUT IT IN THE BUFFER
1173;
1174; MOV BX,S_HANDLE ;AN000; BX = handle
1175; MOV AX, QUY_ATTRIB ;AN000; extended attribute code 5703H
1176; MOV DI, OFFSET QUERY_LIST ;AN000; ES:DI-->QUERY list
1177; INT 21H ;AN000; get extended attribute list
1178;
1179 MOV BX,S_HANDLE ;AN005; BX = handle
1180 MOV SI,ALL_ATTR ;AN005; SELECT ALL ATTRIBUTES SIZE
1181 MOV CL, PARAGRAPH ;AN005; PARAGRAPH = 4 FOR DIV BY 16
1182 MOV AX,SIZ_OF_BUFF ;AN005; GET THE SIZE EXPRESSED IN para.
1183 SHL AX, CL ;AN005; GET # OF BYTES FROM para.
1184 MOV CX, AX ;AN005; NEEDS TO BE IN CX
1185 MOV DI, OFFSET ES:ATTRIB_LIST ;AN005; ES:DI = E A LIST IN BUFFER
1186 MOV AX, GET_ATTRIB ;AN005; extended attribute code 5702H
1187 INT 21H ;AN005; get extended attribute list
1188
1189; JC MH_ERROR ;AN000; jump if error
1190
1191 MOV AX, OLD_BUFFER_PTR;AN000;
1192 MOV ES:BEFORE_PTR, AX;AN000;
1193 MOV AX, ACT_BYTES;AN000;
1194 MOV ES:CX_BYTES, AX;AN000;
1195 CALL SET_BUFFER_PTR ;AN000;set buffer_ptr for next. AX is already set.
1196 MOV AX, BUFFER_PTR ;AN000;
1197 MOV ES:NEXT_PTR, AX ;AN000;next buffer_ptr is next_ptr
1198 MOV AL, S_DEPTH ;AN000;
1199 MOV ES:DIR_DEPTH, AL ;AN000;same as source depth
1200 MOV AL, FILE_DTA.DTA_ATTRIBUTE;AN000;
1201 MOV ES:ATTR_FOUND, AL ;AN000;attribute found
1202 JMP MH_EXIT ;AN000;
1203MH_ERROR: ;AN000;
1204 OR COPY_STATUS, OPEN_ERROR_FLAG ;AN000;
1205 CALL EXTENDED_ERROR_HANDLER ;AN000;
1206MH_EXIT: ;AN000;
1207 POP AX ;AN000;
1208 POP ES ;AN000;
1209 RET ;AN000;
1210MAKE_HEADER ENDP ;AN000;
1211;
1212
1213OPEN_A_FILE PROC NEAR ;AN000;
1214
1215;-------------------------------------------------------------------------
1216; Use extended open DOS call to open source file,
1217; if successfully open, then save filehand to S_HANDLE.
1218;-------------------------------------------------------------------------
1219; Set drive letter and file name pointer in parameter list
1220 LEA SI,FILE_DTA.DTA_FILENAME ;AN005; DS:SI-->NAME TO OPEN
1221 MOV DX,OPN_FLAG ;AN000; flag = 0101H
1222 MOV CX,OPN_ATTR ;AN000; attribute = 0
1223 MOV BX,OPN_MODE ;AN000; open mode = 0002H
1224 MOV DI, NUL_LIST ;AN005; ES:DI = -1
1225 MOV AX, Ext_Open ;AN000; = 6Ch
1226 INT 21H ;AN000; OPEN SOURCE FILE
1227
1228 JC OF_ERROR;AN000;
1229 MOV S_HANDLE, AX ;AN000;save filehandle
1230 INC OPEN_FILE_COUNT ;AN005;UPDATE THE OPEN FILE COUNTER
1231
1232
1233 JMP OF_EXIT ;AN000; exit
1234
1235OF_ERROR: ;AN000;
1236 OR COPY_STATUS, OPEN_ERROR_FLAG;AN000;
1237 CALL EXTENDED_ERROR_HANDLER;AN000;
1238OF_EXIT: ;AN000;
1239 RET ;AN000;
1240OPEN_A_FILE ENDP;AN000;
1241;
1242
1243
1244CMP_FILE_FFD0h PROC NEAR;AN000;
1245;check whether the filesize in HIGH_FILE_SIZE, LOW_FILE_SIZE is bigger than
1246;0FFD0h. If it is, then set FILE_BIGGER_FLAG, else reset it.
1247 CMP HIGH_FILE_SIZE, 0;AN000;
1248; $IF E,AND
1249 JNE $$IF8 ;AN000;
1250 CMP LOW_FILE_SIZE, 0FFD0h;AN000;
1251; $IF BE
1252 JNBE $$IF8 ;AN000;
1253 AND FILE_FLAG, RESET_FILE_BIGGER ;AN000;filesize <= 0FFD0h
1254; $ELSE
1255 JMP SHORT $$EN8 ;AN000;
1256$$IF8: ;AN000;
1257 OR FILE_FLAG, FILE_BIGGER_FLAG ;AN000;
1258; $ENDIF
1259$$EN8: ;AN000;
1260 RET ;AN000;
1261CMP_FILE_FFD0h ENDP ;AN000;
1262;
1263
1264CALC_FILE_SIZE PROC NEAR ;AN000;
1265;subtract the bytes read (ACT_BYTES) from the filesize in HIGH_FILE_SIZE,
1266;LOW_FILE_SIZE.
1267 MOV AX, ACT_BYTES ;AN000;
1268 SUB LOW_FILE_SIZE, AX ;AN000;
1269 SBB HIGH_FILE_SIZE, 0 ;AN000;
1270 RET ;AN000;
1271CALC_FILE_SIZE ENDP ;AN000;
1272;
1273
1274READ_A_FILE PROC NEAR ;AN000;
1275;read a file.
1276;if after reading, AX < CX or AX = 0 the set EOF_FLAG.
1277;INPUT:CX - # of bytes to read
1278; BUFFER_PTR
1279; S_HANDLE
1280;OUTPUT: ACT_BYTES
1281
1282; .IF < SOURCE_IN EQ NO > AND
1283; .IF < DEST EQ 3 >
1284; CALL GET_SOURCE
1285; .ENDIF
1286
1287 PUSH DS ;AN000;save program data seg
1288 MOV AH, Read;AN000;
1289 MOV BX, S_HANDLE;AN000;
1290 MOV DX, BUFFER_PTR ;AN000;current buffer header seg
1291 ADD DX, PARA_OF_HDR ;AC005;skip the header part
1292 MOV DS, DX ;AN000;now DS = buffer_ptr + 2, data area
1293 XOR DX, DX ;AN000;offset DX = 0
1294 INT 21H ;AN000;
1295 POP DS ;AN000;restore program data area
1296 JC RF_ERROR ;AN000;read error?
1297 CMP AX, CX ;AN000;
1298 JE RF_OK ;AN000;
1299 OR FILE_FLAG, EOF_FLAG ;AN000;EOF reached. AX = 0 or AX < CX
1300RF_OK: ;AN000;
1301 CLC ;AN000;clear carry caused from CMP
1302 MOV ACT_BYTES, AX ;AN000;save actual bytes read
1303 JMP RF_EXIT ;AN000;
1304RF_ERROR: ;AN000;
1305 OR COPY_STATUS, READ_ERROR_FLAG;AN000;
1306 CALL EXTENDED_ERROR_HANDLER;AN000;
1307RF_EXIT: ;AN000;
1308 RET ;AN000;
1309READ_A_FILE ENDP ;AN000;
1310;
1311
1312FIND_IT PROC NEAR ;AN000;
1313;set first or next depending on FIND_FIRST_FLAG.
1314;once called, reset FIND_FIRST_FLAG.
1315 TEST MY_FLAG, FIND_FIRST_FLAG;AN000;
1316; $IF NZ ;yes
1317 JZ $$IF11 ;AN000;
1318 MOV AH, Find_First;AN000;
1319; $ELSE
1320 JMP SHORT $$EN11 ;AN000;
1321$$IF11: ;AN000;
1322 MOV AH, Find_Next;AN000;
1323; $ENDIF
1324$$EN11: ;AN000;
1325 AND MY_FLAG, RESET_FIND_FIRST ;AN000;reset FIND_FIRST_FLAG
1326 INT 21H ;AN000;
1327 RET ;AN000;
1328FIND_IT ENDP ;AN000;
1329;
1330FIND_FILE PROC NEAR ;AN000;
1331;find a file
1332;set NO_MORE_FILE if carry.
1333; $SEARCH
1334
1335; PUSH DS
1336; MOV DX,DATA
1337; MOV DS,DX
1338; .IF < SOURCE_IN EQ NO > AND
1339; .IF < DEST EQ 3 >
1340; CALL GET_SOURCE
1341; .ENDIF
1342; POP DS
1343
1344$$DO14: ;AN000;
1345 TEST MY_FLAG, FIND_FIRST_FLAG ;AN000;find first ?
1346; $IF NZ
1347 JZ $$IF15 ;AN000;
1348 MOV DX, OFFSET S_FILE ;AN000;
1349 MOV CX, File_Search_Attr ;AN000;normal = 0
1350; $ELSE
1351 JMP SHORT $$EN15 ;AN000;
1352$$IF15: ;AN000;
1353 MOV DX, OFFSET FILE_DTA ;AN000;
1354; $ENDIF
1355$$EN15: ;AN000;
1356 CALL FIND_IT ;AN000;
1357; $EXITIF C
1358 JNC $$IF14 ;AN000;
1359 OR MY_FLAG, NO_MORE_FILE ;AN000;no more file in this directory
1360; $ORELSE
1361 JMP SHORT $$SR14 ;AN000;
1362$$IF14: ;AN000;
1363 MOV FOUND_FILE_FLAG, 1 ;AN000;set the flag for "File not found" msg.
1364 OR MY_FLAG, FOUND_FLAG ;AN000; SAR
1365;;;;;;; CALL FILTER_FILES ;found. filter it with options
1366 TEST MY_FLAG, FOUND_FLAG ;AN000;
1367; $ENDLOOP NZ ;if found, leave this loop else start again
1368 JZ $$DO14 ;AN000;
1369 AND MY_FLAG, RESET_NO_MORE;AN000;
1370; $ENDSRCH
1371$$SR14: ;AN000;
1372 RET ;AN000;
1373FIND_FILE ENDP ;AN000;
1374;
1375SET_MY_DTA PROC NEAR ;AN000;
1376;set DS:DX for find_first(next). If MY_FLAG is set to FINDFILE_FLAG then
1377;set it to the offset FILE_DTA, otherwise to BP.
1378;DS should be set to the area whre FILE_DTA, DTAS are.
1379 PUSH DX ;AN000;save current DX
1380 TEST MY_FLAG, FINDFILE_FLAG ;AN000;handling file?
1381; $IF NZ
1382 JZ $$IF22 ;AN000;
1383 MOV DX, OFFSET FILE_DTA;AN000;
1384; $ELSE
1385 JMP SHORT $$EN22 ;AN000;
1386$$IF22: ;AN000;
1387 MOV DX, BP ;AN000;
1388; $ENDIF
1389$$EN22: ;AN000;
1390 MOV AH, Set_DTA ;AN000;
1391 INT 21H ;AN000;
1392 POP DX ;AN000;
1393 RET ;AN000;
1394SET_MY_DTA ENDP ;AN000;
1395;
1396;
1397SAVE_DTA PROC NEAR ;AN000;
1398; Save old DTA address
1399 PUSH ES ;AN000;
1400 PUSH BX ;AN000;
1401 MOV AH, Get_DTA ;AN000;
1402 INT 21H ;AN000;
1403 MOV OLD_DTA_SEG,ES ;AN000;
1404 MOV OLD_DTA_OFF,BX ;AN000;
1405 POP BX ;AN000;
1406 POP ES ;AN000;
1407 RET ;AN000;
1408SAVE_DTA ENDP ;AN000;
1409;
1410;
1411SWITCH_DTAS PROC NEAR ;AN000;
1412; SWITCH DTA ADDRESSES
1413 PUSH DS ;AN000;
1414 PUSH DX ;AN000;
1415 PUSH OLD_DTA_SEG ;AN000;
1416 PUSH OLD_DTA_OFF ;AN000;
1417 CALL SAVE_DTA ;AN000;
1418 POP DX ;AN000;
1419 POP DS ;AN000;
1420 MOV AH, Set_DTA ;AN000;
1421 INT 21H ;AN000;
1422 POP DX ;AN000;
1423 POP DS ;AN000;
1424SWITCH_DTAS ENDP ;AN000;
1425;
1426;
1427CHANGE_T_DIR PROC NEAR ;AN000;
1428;change target dir according to t_drv_path.
1429;Since this routine is called by WRITE_FROM_BUFFER and DS now points
1430;to buffer area while ES points to the program data area, we set DS
1431;to data seg again here for the function call Chdir.
1432 PUSH DS ;AN000;save current buffer seg
1433 PUSH ES ;AN000;currentpy es is a data seg
1434 POP DS ;AN000;restore DS value as program data seg
1435
1436 CMP T_DRV[2], 0 ;AN000;LAST_DIR_OUT took '\' out?
1437; $IF E
1438 JNE $$IF25 ;AN000;
1439 MOV T_DRV[2], '\' ;AN000;then put it back for root dir
1440 MOV T_DRV[3], 0 ;AN000;
1441; $ENDIF
1442$$IF25: ;AN000;
1443
1444 MOV DX, OFFSET T_DRV_PATH ;AN000;
1445 MOV AH, CHDIR ;AN000;
1446 INT 21H ;AN000;
1447
1448 POP DS ;AN000;restore caller's DS value
1449 RET ;AN000;
1450CHANGE_T_DIR ENDP;AN000;
1451;
1452
1453CMP_FILESIZE_TO_BUFFER_LEFT PROC NEAR;AN000;
1454;Compare buffer_left (paragraph) with filesize (high_file_size, low_file_size.)
1455;if filesize is bigger than buffer_left, then set FILE_BIGGER_FLAG
1456;indicating filesize > buffer_left.
1457 PUSH DX ;AN000;
1458 PUSH AX ;AN000;
1459
1460 CMP OPEN_FILE_COUNT,NUL ;AN005;ARE THERE ANY OPEN FILES
1461; $IF Z ;AN005;NO, THEN GO AHEAD AND OPEN
1462 JNZ $$IF28A ;AN000;
1463 CALL OPEN_A_FILE ;AN005;OPEN A FILE USING FILE_DTA
1464
1465; Get extended Attribute list size.
1466
1467 MOV BX,S_HANDLE ;AN005; BX = handle
1468 MOV AX, GET_ATTRIB ;AN005; extended attribute code 5702H
1469 MOV SI,ALL_ATTR ;AN005; SELECT ALL ATTRIBUTES SIZE
1470 XOR CX,CX ;AN005; JUST QUERY SIZE NEEDED
1471 MOV DI, OFFSET NUL_LIST ;AN005; DI = LIST FOR NO DATA RETURNED
1472 INT 21H ;AN005; get extended attribute SIZE
1473 ADD CX,PARA_BOUND ;AN005; TO FIGURE THE NEXT PARAGRAPH
1474 MOV AX,CX ;AN005;
1475 MOV CL,PARAGRAPH ;AN005; GET PARAGRAPHS (DIV BY 16)
1476 SHR AX,CL ;AN005;
1477 MOV SIZ_OF_BUFF,AX ;AN005;SAVE BUFF SIZE FOR THE HEADER
1478 ADD AX,FIXD_HD_SIZ ;AN005;GET THE TOTAL HEADER SIZE
1479 MOV PARA_OF_HDR,AX ;AN005;SAVE FOR LATER
1480 SHL AX, CL ;AN005;CONVERT BACK TO TOTAL BYTES
1481 MOV BYTS_OF_HDR,AX ;AN005;SAVE FOR LATER
1482 MOV BX,S_HANDLE ;AN005;
1483 CALL CLOSE_A_FILE ;AN005;CLOSE THE FILE OPENED
1484; $ENDIF
1485$$IF28A: ;AN000;
1486
1487 AND FILE_FLAG, RESET_FILE_BIGGER;AN000;
1488 MOV AX,PARA_OF_HDR ;AN005;GET THE HEADER SIZE (para.)
1489 CMP BUFFER_LEFT,AX ;AC005;buffer_left >= HEADER SIZE
1490; $IF AE
1491 JNAE $$IF27 ;AN000;
1492 MOV AX, BUFFER_LEFT ;AN000;buffer_left in para
1493 SUB AX,PARA_OF_HDR ;AC005;consider header size in advance
1494 MOV CX, 16 ;AN000;
1495 MUL CX ;AN000;* 16. result in DX;AX
1496 CMP HIGH_FILE_SIZE, DX;AN000;
1497; $IF A ;if high_filesize > dx
1498 JNA $$IF28 ;AN000;
1499 OR FILE_FLAG, FILE_BIGGER_FLAG;AN000;
1500; $ELSE
1501 JMP SHORT $$EN28;AN000;
1502$$IF28: ;AN000;
1503; $IF E
1504 JNE $$IF30 ;AN000;
1505 CMP LOW_FILE_SIZE, AX;AN000;
1506; $IF A
1507 JNA $$IF31 ;AN000;
1508 OR FILE_FLAG, FILE_BIGGER_FLAG;AN000;
1509; $ENDIF
1510$$IF31: ;AN000;
1511; $ENDIF
1512$$IF30: ;AN000;
1513; $ENDIF
1514$$EN28: ;AN000;
1515; $ELSE
1516 JMP SHORT $$EN27 ;AN000;
1517$$IF27: ;AN000;
1518 OR FILE_FLAG, FILE_BIGGER_FLAG ;AN000;buffer_left < 2
1519; $ENDIF
1520$$EN27: ;AN000;
1521 POP AX ;AN000;
1522 POP DX ;AN000;
1523 RET ;AN000;
1524CMP_FILESIZE_TO_BUFFER_LEFT ENDP ;AN000;
1525;
1526
1527SET_BUFFER_PTR PROC NEAR ;AN000;
1528;set BUFFER_PTR, BUFFER_LEFT, OLD_BUFFER_PTR in paragraph boundary
1529;to be used when reading a file into buffer.
1530;this routine uses current BUFFER_PTR to figure out the next BUFFER_PTR.
1531;So, at initialization time set BUFFER_PTR to CS, and set AX to the offset
1532;of INIT, then thr resultant BUFFER_PTR indicates the BUFFER_BASE and
1533;OLD_BUFFER_PTR indicates CS.(This means if old_buffer_ptr = cs, then
1534;it is the start of buffer)
1535;To get the next BUFFER_PTR during multi-copy, just set the AX to the
1536;number of bytes read. This routine will add 32 bytes for header size and
1537;will set the next BUFFER_PTR.
1538;input: AX - offset of buffer
1539; Top_of_memory in segment
1540; current BUFFER_PTR
1541; current OLD_BUFFER_PTR
1542; current BUFFER_LEFT
1543;output: BUFFER_PTR for next reading
1544; OLD_BUFFER_PTR
1545; BUFFER_LEFT (Top_of_memory - Buffer_Ptr. If it is 0, then indicates
1546; the BUFFER is FULL. In this case, the BUFFER_PTR is
1547; invalid, but OLD_BUFFER_PTR keep the former buffer_ptr
1548; value which says that it is the last header in the buffer)
1549;** Currently this program support maxium top of memory in seg 0FFFF - resident
1550; area. This routine will check the overflow case to gaurd the next buffer_ptr
1551; not to exceed FFFF.
1552
1553 PUSH CX ;AN000;
1554 MOV CX, BUFFER_PTR ;AN000;
1555 MOV OLD_BUFFER_PTR, CX ;AN000;set old_buffer_ptr
1556 MOV CL, 4 ;AN000;
1557 SHR AX, CL ;AN000;get paragraphs
1558 INC AX ;AN000;get next paragraph
1559 ADD AX,PARA_OF_HDR ;AC005;consider header size
1560 ADD BUFFER_PTR, AX ;AN000;add this to the current buffer_ptr
1561
1562; $IF NC,AND ;not exceed 16 bit.
1563 JC $$IF37 ;AN000;
1564 MOV AX, Top_of_memory;AN000;
1565 SUB AX, BUFFER_PTR ;AN000;AX = Top_of_memory - Buffer_ptr
1566; $IF A ;if buffer_left > 0
1567 JNA $$IF37 ;AN000;
1568 MOV BUFFER_LEFT, AX;AN000;
1569; $ELSE
1570 JMP SHORT $$EN37 ;AN000;
1571$$IF37: ;AN000;
1572 MOV BUFFER_LEFT, 0 ;AN000;indication of buffer full
1573; $ENDIF
1574$$EN37: ;AN000;
1575 POP CX ;AN000;
1576 RET ;AN000;
1577SET_BUFFER_PTR ENDP ;AN000;
1578;
1579
1580WRITE_FROM_BUFFER PROC NEAR ;AN000;
1581;Write from the first header starting at buffer_base until finishes
1582;the last header which, actually, happens to be the old_buffer_ptr
1583;at the time of the call. After the writing, reset the buffer_ptr
1584;to buffer_base again for the next read_into_buffer.
1585;If continue_info is 1 or 2 (Continue of small, bigfile) then after
1586;the creation of a target file, it will set the CREATED_FLAG.
1587;This flag will be reset when it found the continue_info to be 3
1588;(End of contine).
1589;For convenience of use of function call, ES will be used for
1590;the program data seg while DS will be used for the BUFFER seg.
1591;
1592 PUSH DS ;AN000;
1593 PUSH ES ;AN000;save ds, es
1594
1595 PUSH DS ;AN000;
1596 POP ES ;AN000;set ES to program data seg
1597
1598 OR ACTION_FLAG, READING_FLAG ;AN000;show reading message next time
1599; AND ES:MY_FLAG, RESET_IS_SOURCE ;now, deals with target
1600 ;set this for change_dir
1601 MOV AX, ES:BUFFER_BASE ;AN000;
1602 MOV DS, AX ;AN000;
1603 PUSH CS ;AN000;
1604 POP AX ;AN000;
1605 CMP ES:OLD_BUFFER_PTR, AX ;AN000;if old_buffer_ptr = CS then
1606 ;buffer is empty. Just exit
1607 JE WFB_EXIT_BRIDGE ;AN000;
1608
1609 PUSH DS ;AN000;
1610 MOV DX,DATA ;AN000;
1611 MOV DS,DX ;AN000;
1612 .IF < DEST eq 3 > ;AN000;
1613 CALL GET_DEST ;AN000;
1614 .ENDIF ;AN000;
1615 POP DS ;AN000;
1616
1617WFB_CD: ;AN000;
1618 CALL CHANGE_T_DIR ;AN000;
1619 JC WFB_ERROR_BRIDGE ;AN000;error?
1620WFB_CHATT: ;AN000;
1621 CMP DS:ATTR_FOUND, Is_subdirectory ;AN000;a subdirectory? = 10H
1622 JNE WFB_FILE ;AN000;no. a file
1623
1624WFB_CMP_DEPTH: ;AN000;
1625;  SAR 
1626;;;;;;;
1627; MOV AH, ES:T_DEPTH ;yes. a subdir.
1628; CMP DS:DIR_DEPTH, AH ;DIR_DEPTH > T_DEPTH ?
1629; JBE WFB_DEC_DEPTH ;if not, go to parent node
1630; LEA DI, ES:T_DRV_PATH ;else goto child node
1631; LEA SI, DS:FILENAME_FOUND
1632; CMP ES:T_PATH, 0 ;root directory?
1633; $IF E
1634; MOV AL, 0FFh ;then don't need to put delim since it is already there
1635; $ELSE
1636; MOV AL, Path_delim ;path_delim '\'
1637; $ENDIF
1638; CALL CONCAT_ASCIIZ
1639; call concat_display_path ;modify the path for display
1640; INC ES:T_DEPTH
1641; CALL MAKE_DIR ;try to make a new sub directory
1642; JC WFB_EXIT_A_BRIDGE ;there exists a file with same name.
1643; MOV AX, DS ;current buffer seg = old_buffer_ptr?
1644; CMP ES:OLD_BUFFER_PTR, AX
1645; JNE WFB_NEXT ;not finished yet. jmp to next
1646; OR ES:MY_FLAG, MISSING_LINK_FLAG ;Finished. Missing link condition occurred regarding empty sub dir
1647; JMP WFB_EXIT_A ;check archieve options.
1648WFB_NEXT: ;AN000;
1649; MOV DS, DS:NEXT_PTR ;let's handles next header.
1650; JMP WFB_CD ;change directory first.
1651WFB_EXIT_BRIDGE: JMP WFB_EXIT;AN000;
1652WFB_ERROR_BRIDGE: JMP WFB_ERROR;AN000;
1653WFB_EXIT_A_BRIDGE: JMP WFB_EXIT_A;AN000;
1654WFB_DEC_DEPTH: ;AN000;
1655; LEA DI, ES:T_DRV_PATH
1656; CALL RM_EMPTY_DIR ;check flags and remove empty dir
1657; CALL LAST_DIR_OUT ;take off the last dir from path
1658; call cut_display_path ;modify path for display purpose
1659;;;;;; DEC ES:T_DEPTH ;and decrease depth
1660 JMP WFB_CD ;AN000;CHANGE DIR AND compare the depth again.
1661
1662
1663WFB_FILE: ;AN000;Handling a file
1664 AND ES:MY_FLAG, RESET_MISSING_LINK ;AN000;if found a file, then current dir is not empty.
1665 TEST ES:FILE_FLAG, CREATED_FLAG ;AN000; A file handle is created ?
1666 JNZ WFB_WRITE ;AN000;yes, skip create again.
1667 CALL CREATE_A_FILE ;AN000;create a file in the cur dir
1668 JC WFB_ERROR ;AN000;file creation error?
1669WFB_WRITE: ;AN000;
1670 CALL WRITE_A_FILE;AN000;
1671 JC WFB_EXIT_A ;AN000;target file has been already deleted.
1672 CMP DS:CONTINUE_INFO, 0;AN000;
1673; $IF E,OR ;if continue_info = 0 or 3
1674 JE $$LL40 ;AN000;
1675 CMP DS:CONTINUE_INFO, 3;AN000;
1676; $IF E
1677 JNE $$IF40 ;AN000;
1678$$LL40: ;AN000;
1679 MOV BX, ES:T_HANDLE;AN000;
1680 CALL SET_FILE_DATE_TIME ;AN000;then set file's date, time
1681 PUSH DS ;AN005;SAVE THE BUFFER PTR
1682 PUSH ES ;AN005;WE NEED THE DATA PTR
1683 POP DS ;AN005;DS = THE DATA PTR
1684 CALL CLOSE_A_FILE ;AN000;and close the handle
1685 POP DS ;AN005;DS = THE BUFFER PTR AGAIN
1686;;;;;;; CALL RESTORE_FILENAME_FOUND ; SAR if filename_found has been changed, restore it for reset_s_archieve.
1687 AND ES:FILE_FLAG, RESET_CREATED ;AN000;and reset created_flag
1688 CALL INC_FILE_COUNT ;AN000;increase file count
1689; $ENDIF
1690$$IF40: ;AN000;
1691 MOV AX, DS ;AN000;
1692 CMP ES:OLD_BUFFER_PTR, AX ;AN000;current header is the last one?
1693 JE WFB_EXIT_A ;AN000;then exit
1694 MOV DS, DS:NEXT_PTR ;AN000;else set ds to the next ptr
1695 JMP WFB_CHATT ;AN000;handle the next header
1696WFB_ERROR: ;AN000;
1697 jmp main_exit ;AN000;meaningful when MKDIR failed because
1698 ;of there already exist same named file,
1699 ;or disk_full case.
1700WFB_EXIT_A: ;AN000;
1701 test ES:option_flag, slash_m ;AN000;hard archieve ? - turn off source archieve bit.
1702 jz wfb_exit_B ;AN000;no, chk error flag and exit
1703;;;; call reset_s_archieve ; SAR reset source file(s) archieve bit using header info(s).
1704WFB_EXIT_B: ;AN000;
1705 test ES:copy_status, mkdir_error_flag ;AN000;mkdir error happened?
1706 JNZ WFB_ERROR ;AN000;yes, exit
1707 test ES:copy_status, disk_full_flag ;AN000;disk full happened?
1708 JNZ WFB_ERROR ;AN000;yes, exit
1709WFB_EXIT: ;AN000;
1710 MOV ES:OLD_BUFFER_PTR, CS ;AN000;set old_buffer_ptr to CS
1711 MOV AX, ES:BUFFER_BASE ;AN000;
1712 MOV ES:BUFFER_PTR, AX ;AN000;set buffer_ptr to base
1713 MOV AX, ES:MAX_BUFFER_SIZE;AN000;
1714 MOV ES:BUFFER_LEFT, AX ;AN000;set buffer_left
1715 POP ES ;AN000;
1716 POP DS ;AN000;
1717;;;; TEST SYS_FLAG, ONE_DISK_COPY_FLAG ; SAR one drive letter copy?
1718; ; $IF NZ ; SAR yes
1719; ; CALL CHANGE_S_DIR ; SAR then change current dir to s dir
1720;;;; $ENDIF
1721 RET ;AN000;
1722WRITE_FROM_BUFFER ENDP ;AN000;
1723;
1724INC_FILE_COUNT PROC NEAR;AN000;
1725;increase the file count by one.
1726;increase file_cnt_low, file_cnt_high.
1727;input: DS - buffer
1728; ES - data seg
1729 INC ES:FILE_CNT_LOW ;AN000;
1730 JNZ IFC_EXIT ;AN000;
1731 INC ES:FILE_CNT_HIGH ;AN000;if carry over, then inc file_cnt_high
1732IFC_EXIT: ;AN000;
1733 RET ;AN000;
1734INC_FILE_COUNT ENDP ;AN000;
1735;
1736CREATE_A_FILE PROC NEAR;AN000;
1737;create a file in the header and return the file handle in T_HANDLE.
1738;Set CREATED_FLAG. This will be reset by WRITE_FROM_BUFFER when it
1739;close the handle.
1740;this routine will check the T_FILENAME and T_TEMPLATE if any target
1741;filename has been entered. If T_FILENAME is there, then DX will
1742;points to this (This is the case when the user has specified non_global
1743;chr filename and any source filename be changed to this name.)
1744;If T_TEMPLATE is present, then modify the filename found in the
1745;header part.
1746;Also, this routine show copy messages just before a file creation using
1747;FILENAME_FOUND.
1748;ES - data seg
1749;DS - buffer seg
1750
1751 PUSH DS ;AN000;
1752 PUSH ES ;AN000;
1753
1754;  SAR  ;save the original filename from the header
1755;;;;; MOV CX, 13 ;max 13 chr
1756; LEA SI, DS:FILENAME_FOUND ;original source file name
1757; LEA DI, ES:DISP_S_FILE ;filename to be displayed
1758; REP MOVSB ;filename_found => disp_s_file
1759;;;;; test es:option_flag, slash_p ; SAR
1760;;;;; $IF Z ; SAR
1761;;;;; CALL SHOW_COPY_MESSAGE ; SAR he source path, file
1762;;;;; $ENDIF ; SAR
1763;
1764; CMP ES:T_FILENAME, 0
1765; $IF NE ;non_global target filename entered.
1766; TEST ES:COPY_STATUS, MAYBE_ITSELF_FLAG
1767; $IF NZ
1768; LEA SI, DS:FILENAME_FOUND
1769; LEA DI, ES:T_FILENAME
1770; CALL COMP_FILENAME ;compare it. if same then show
1771; ;file cannot be copied onto itself and
1772; ;abort
1773; $ENDIF
1774;
1775; CALL SWITCH_DS_ES ;now ds - data, es - buffer
1776; MOV CX, 13
1777; LEA SI, DS:T_FILENAME
1778; LEA DI, ES:FILENAME_FOUND
1779; REP MOVSB ; t_filename => filename_found
1780; CALL SWITCH_DS_ES ;now ds - buffer, es - data seg
1781;
1782; $ELSE
1783; CMP ES:T_TEMPLATE, 0 ;global chr target filename entered?
1784; $IF NE ;yes, entered. modify the filename found
1785;;;;; CALL MODIFY_FILENAME ; SAR
1786; TEST ES:COPY_STATUS, MAYBE_ITSELF_FLAG
1787; $IF NZ
1788; LEA SI, DS:FILENAME_FOUND ;compare the Revised filename
1789; LEA DI, ES:DISP_S_FILE ;with original name
1790; CALL COMP_FILENAME ;if same, then issue error message and exit
1791; $ENDIF
1792; $ELSE
1793; TEST ES:COPY_STATUS, MAYBE_ITSELF_FLAG ;*.* CASE
1794; $IF NZ
1795; PUSH ES
1796; POP DS ;ds - data seg
1797;
1798; ; Set message parameters
1799;;;;; MOV AX,MSG_COPY_ITSELF ; SAR
1800; MOV MSG_NUM,AX ; SAR ;AN000; set message number
1801; MOV SUBST_COUNT,0 ; SAR AN000; no message subst.
1802; MOV MSG_CLASS,-1 ; SAR AN000; message class
1803; MOV INPUT_FLAG,0 ; SAR AN000; no user input
1804; CALL PRINT_STDERR ; SAR AN000; display error
1805; JMP MAIN_EXIT
1806; $ENDIF
1807; $ENDIF
1808;;;;;; $ENDIF
1809
1810;-------------------------------------------------------------------------
1811; Use extended open DOS call to create the target file, use attribute list
1812; obtained from the previous Get Extended attribute DOS call
1813;-------------------------------------------------------------------------
1814
1815; SET ATTRIBUTE LIST POINTER IN PARAMETER LIST
1816 MOV DX, OFFSET DS:ATTRIB_LIST ;AN005;E A BUFFER IN HEADER
1817 MOV WORD PTR ES:E_A_LST,DX ;AN005; set offset
1818 MOV WORD PTR ES:E_A_LST+WORD,DS ;AN005; set segment
1819
1820 MOV AX, Ext_Open ;AN000; = 6Ch
1821 MOV DX,CREATE_FLAG ;AN000; flag = 0111H
1822 MOV BX,CREATE_MODE ;AN000;CREATE MODE = 0011H
1823 MOV CX,CREATE_ATTR ;AN000; attribute = 0
1824 MOV SI,OFFSET TARGET_DRV_LET ;AN005; DS:SI-->NAME TO CREATE
1825 LEA DI,ES:PARAM_LIST ;AN005;PARAMETER LIST (ES:DI)
1826 INT 21H ;AN000; create file
1827
1828 JC CAF_ERROR ;AN000;
1829 MOV ES:T_HANDLE, AX ;AN000;save handle
1830
1831;;;;; CALL CHK_T_RES_DEVICE ; SAR check target handle is a reserved dev
1832
1833 OR ES:FILE_FLAG, CREATED_FLAG ;AN000;set created_flag
1834 JMP CAF_EXIT ;AN000;
1835CAF_ERROR: ;AN000;
1836 PUSH DS ;AN000;
1837 PUSH ES ;AN000;
1838 POP DS ;AN000;
1839 OR COPY_STATUS, CREATE_ERROR_FLAG;AN000;
1840 CALL EXTENDED_ERROR_HANDLER ;AN000;
1841 POP DS ;AN000;
1842CAF_EXIT: ;AN000;
1843 POP ES ;AN000;
1844 POP DS ;AN000;
1845 RET ;AN000;
1846CREATE_A_FILE ENDP ;AN000;
1847;
1848;COMP_FILENAME PROC NEAR
1849;;this routine is called when MAYBE_COPY_ITSELF flag in on.
1850;;SI, DI asciiz string will be compared and if they are identical
1851;;the show "Cannot copy onto itself" msg and jmp to main_exit.
1852;;INPUT: DS - buffer
1853;; ES - data seg
1854;
1855; CLD
1856; MOV AL, 0
1857; PUSH DI ;save DI
1858; CALL STRING_LENGTH ;CX get the length of string
1859; MOV BX, CX ;now, BX got the length of the target filename entered.
1860; PUSH BX ;save BX
1861; PUSH ES ;save ES
1862;
1863; PUSH DS
1864; POP ES ;now ES set to DS
1865; PUSH SI
1866; POP DI ;now DI points to the source filename found.
1867;
1868; MOV AL, 0
1869; CALL STRING_LENGTH ;CX got the length of the string
1870;
1871; POP ES ;restore ES
1872; POP BX ;restore BX
1873; POP DI ;restore DI
1874; ;;
1875; CMP BX, CX ;COMPARE LENGTH
1876; JNE CF_EXIT ;IF THEY ARE DIFFERENT, EXIT
1877;
1878; REPE CMPSB ;compare SI, DI until not equal,
1879; CMP CX, 0 ;finish at cx = 0?
1880; JE CF_SAME
1881; JMP SHORT CF_EXIT
1882;CF_SAME:
1883; PUSH ES
1884; POP DS ;ds = data seg
1885;
1886;; Set message parameters
1887;;;;;; MOV AX,MSG_COPY_ITSELF ; SAR ;AN000; message number
1888;; MOV MSG_NUM,AX ; SAR AN000; set message number
1889;; MOV SUBST_COUNT,0 ; SAR AN000; no message substitution
1890;; MOV MSG_CLASS,-1 ; SAR AN000; message class
1891;;; MOV INPUT_FLAG,0 ; SAR AN000; no input
1892;; CALL PRINT_STDERR ; SAR AN000; display error message
1893; JMP MAIN_EXIT
1894;CF_EXIT:
1895; RET
1896;COMP_FILENAME ENDP
1897;;
1898WRITE_A_FILE PROC NEAR ;AN000;
1899;write a file from the data area in the buffer.
1900;Remember the caller is WRITE_FROM_BUFFER which use ES for
1901;the program data area and DS for the header in the buffer.
1902 MOV AH, Write ;AN000; = 40h
1903 MOV BX, ES:T_HANDLE ;AN000;handle saved in the program data area
1904 MOV DX, ES:BYTS_OF_HDR ;AC005;skip header
1905 MOV CX, DS:CX_BYTES ;AN000;get the # from the header
1906 INT 21h ;AN000;
1907 JC WAF_ERROR ;AN000;write error
1908 CMP AX, DS:CX_BYTES;AN000;
1909 JNE WAF_DISKFULL;AN000;
1910 JMP WAF_EXIT ;AN000;
1911WAF_ERROR: ;AN000;
1912 CALL CLOSE_DELETE_FILE ;AN000;close delete troubled file
1913 OR COPY_STATUS, WRITE_ERROR_FLAG;AN000;
1914 CALL SWITCH_DS_ES ;AN000;DS = DATA SEG, ES = BUFFER
1915 CALL EXTENDED_ERROR_HANDLER;AN000;
1916 CALL SWITCH_DS_ES ;AN000;ES = DATA SEG, DS = BUFFER
1917WAF_DISKFULL: ;AN000;
1918; MOV ERRORLEVEL, 4 ; SAR ;set errorlevel
1919
1920; Set message parameters
1921; Target disk full, critical error
1922
1923 PUSH DS ;AN000;DS = BUFFER
1924 PUSH ES ;AN000;ES = DATA SEG
1925 POP DS ;AN000;ES => DS = DATA SEG
1926;;;;; MOV AX,MSG_DISK_FULL ; SAR ;AN000; message number
1927; MOV MSG_NUM,AX ; SAR AN000; set message number
1928; MOV SUBST_COUNT,0 ; SAR AN000; no message substitution
1929; MOV MSG_CLASS,UTILITY_MSG_CLASS ; SAR AN000; message class
1930; MOV INPUT_FLAG,0 ; SAR AN000; no input
1931; CALL PRINT_STDERR ; SAR AN000; display error message
1932 OR COPY_STATUS, DISK_FULL_FLAG ;AN000;set disk_full_flag
1933 POP DS ;AN000;RESTORE DS = BUFFER
1934 CALL CLOSE_DELETE_FILE;AN000;
1935 STC ;AN000;set carry and return to caller
1936WAF_EXIT:;AN000;
1937 RET ;AN000;
1938WRITE_A_FILE ENDP;AN000;
1939;
1940SET_FILE_DATE_TIME PROC NEAR;AN000;
1941;input: BX - target file handle
1942;
1943 MOV AH, File_date_time ;AN000; = 57h
1944 MOV AL, Set_file_time ;AN000; = 1
1945 MOV CX, DS:FILE_TIME_FOUND;AN000;
1946 MOV DX, DS:FILE_DATE_FOUND;AN000;
1947 INT 21h ;AN000;
1948 RET ;AN000;
1949SET_FILE_DATE_TIME ENDP;AN000;
1950;
1951CLOSE_A_FILE PROC NEAR ;AN000;
1952;INPUT: BX - file handle to be closed
1953 CMP OPEN_FILE_COUNT,NUL ;AN005;ARE THERE ANY OPEN FILES?
1954; $IF A ;AN005;
1955 JNA $$IF42A ;AN000;
1956 DEC OPEN_FILE_COUNT ;AN005;IF SO, REDUCE THE COUNT BY 1.
1957; $ENDIF ;AN005;
1958$$IF42A: ;AN000;
1959 MOV AH, Close ;AN000; = 3Eh
1960 INT 21H ;AN000;
1961 RET ;AN000;
1962CLOSE_A_FILE ENDP ;AN000;
1963;
1964DELETE_A_FILE PROC NEAR;AN000;
1965;input: DS:DX - points to ASCIIZ string
1966
1967 MOV AH, 41h ;AN000; = 41h
1968 INT 21H ;AN000;
1969 RET ;AN000;
1970DELETE_A_FILE ENDP;AN000;
1971;
1972;
1973;CHK_DISK_FULL PROC NEAR
1974;check target disk space, and if no more clusters then set carry, disk_full_flag.
1975;this routine is called by MAKE_DIR routine.
1976;INPUT: DS - buffer
1977; ES - data seg
1978; PUSH AX
1979; PUSH BX
1980; PUSH CX
1981; PUSH DX
1982; MOV AH, 36h ;GET DISK FREE SPACE
1983; MOV DL, ES:T_DRV_NUMBER ;OF TARGET
1984; INT 21h
1985; CMP BX, 0 ;NO MORE CLUSTER?
1986; JE CDF_FULL
1987; CLC
1988; JMP SHORT CDF_EXIT
1989;CDF_FULL:
1990; OR ES:COPY_STATUS, DISK_FULL_FLAG ;SET DISK FULL FLAG
1991; STC ;SET CARRY
1992;CDF_EXIT:
1993; POP DX
1994; POP CX
1995; POP BX
1996; POP AX
1997; RET
1998;
1999;CHK_DISK_FULL ENDP
2000;;
2001;;subttl string_length
2002;page
2003;******************************************************************************
2004;PURPOSE: Get the length of a string pointed by ES:DI until it encounters
2005; the same character given by the user in AL.
2006; The length will be an output in CX. The number includes the
2007; charater found.
2008; For example, if you want to determine the length of an ASCIIZ string,
2009; set ES:DI to that string and set AL to 0. The output CX is the
2010; total length of the ASCIIZ string including 0.
2011; So, if the first character pointed by DI is the same as that of AL,
2012; then the length will be 1.
2013; !!! It is the user's responsibility to make it sure that the string
2014; contains the character given in AL. If not, unpredictable
2015; results will occur.!!!
2016;
2017; DATA INPUT
2018; REGISTERS: AL - ASCII CHARACTER
2019; ES:DI - POINTER TO THE STRING.
2020; DATA OUTPUT
2021; REGISTERS: AX,DX,SI etc - PRESERVED.
2022; BX - DISTROYED
2023; CX - STRING LENGTH UNTIL FOUND THE GIVEN CHARACTER.
2024; DI - POINTS TO THE NEXT CHARACTER AFTER THE STRING.
2025; DIRECTION FLAG - CLEARED
2026; ZERO FLAG - RESET
2027;******************************************************************************
2028;
2029;STRING_LENGTH PROC NEAR
2030;PUBLIC STRING_LENGTH
2031; CLD ;CLEAR DIRECTION
2032; MOV BX,DI ;SAVE ORIGINAL DI VALUE
2033; MOV CX,80H ;TRY MAX 128 BYTES
2034; REPNE SCASB ;SCAN THE STRING UNTIL FOUND
2035; PUSH DI ;SAVE CURRENT DI VALUE WHICH POINTS TO NEXT CHR AFTER STRING
2036; SUB DI,BX ;GET THE LENGTH
2037; MOV CX,DI ;MOV THE LENGTH TO CX
2038; POP DI
2039; RET
2040;STRING_LENGTH ENDP
2041;
2042;subttl concat_asciiz
2043;page
2044;******************************************************************************
2045;PURPOSE: Concatenate two ASCIIZ string into one ASCIIZ string.
2046; The ASCIIZ string pointed by DS:SI will be concatenated to
2047; the one pointed by ES:DI. The result string will be pointed by
2048; ES:DI.
2049; AL is used to put the delimeter character in between the strings.
2050; If you *DON'T* like to put the delimeter ***make AL to 0FFh***.
2051; For example, assume sting1 "ABCDE",0 pointed by DI and string2
2052; "FGHI",0 pointed by SI.
2053; If you want a delimeter "\" between two string, set AL to "\"
2054; before calling. The result will "ABCDE\FGHI",0 pointed by DI.
2055; If you set AL to "0FFh", then it becomes "ABCDEFGHI",0.
2056; This feature is useful for handling PATH if you set AL to "\"
2057; and, for any general string processes if you set AL to "0FFh".
2058; This routine will call subroutine STRING_LENGTH.
2059;DATA INPUT
2060; REGISTERS: AL - DELIMETER OR 0FFh
2061; ES:DI - POINTER TO THE DESTINATION STRING.
2062; DS:SI - POINTER TO THE SOURCE TO BE CONCATENATED.
2063;DATA OUTPUT
2064; REGISTERS: AL, DX - preserved
2065; DI - preserved. POINTER TO THE RESULT STRING
2066; SI - DISTROYED
2067; CX - RESULT ASCIIZ STRING LENGTH INCLUDE 0
2068; DIRECTION FLAG - CLEARED
2069;******************************************************************************
2070;CONCAT_ASCIIZ PROC NEAR
2071;
2072;PUBLIC CONCAT_ASCIIZ
2073; PUSH DI ;SAVE POINTER VALUE WHICH WILL BE RETRUNED TO CALLER.
2074; PUSH AX ;SAVE VALUE IN AL.
2075; MOV AL, 0 ;DEALING WITH ASCIIZ STRING
2076; CALL STRING_LENGTH ;LET DI POINTS TO THE NEXT CHR AFTER THIS STRING
2077; ;DIRECTION WILL BE CLEARED.
2078; DEC DI ;MAKE DI POINT TO THE LAST CHARACTER 0
2079; POP AX ;RESTORE AL.
2080; CMP AL, 0FFh
2081;; $IF NE ;IF THE USER WANTS TO PUT DIMIMETER,
2082; JE $$IF42
2083; STOSB ; REPLACE 0 WITH IT.
2084;; $ELSE
2085; JMP SHORT $$EN42
2086;$$IF42:
2087; DEC CX ;ELSE DECREASE LENGTH BY 1
2088;; $ENDIF
2089;$$EN42:
2090;; $DO
2091;$$DO45:
2092; LODSB ;MOV [SI] TO AL
2093; STOSB ;STORE AL TO [DI]
2094; INC CX ;INCREASE LENGTH
2095; CMP AL, 0 ;WAS IT A LAST CHARACTER?
2096;; $ENDDO E ;THEN EXIT THIS LOOP
2097; JNE $$DO45
2098; POP DI
2099; RET
2100;CONCAT_ASCIIZ ENDP
2101;;
2102;
2103;subttl last_dir_out
2104;page
2105;******************************************************************************
2106;PURPOSE: Take off the last directory name from the path pointed by DI.
2107; This routine assumes the pattern of a path to be an ASCIIZ string
2108; in the form of "[d:][\]dir1\dir2". Notice that this path does not
2109; have entailing "\". This routine will simply travel the string
2110; until it found last "\" which will, then, be replaced with 0.
2111; If no "\" found, then carry will be set.
2112; *** This should be not be used for the path in the form of
2113; *** "d:\", 0 for the root directory, since in this case the returned
2114; *** string will be "d:",0 and AX value returned be meaningless (Just
2115; *** points to 0.)
2116;DATA INPUT
2117; REGISTERS: DI - points to an ASCIIZ path string.
2118; ES - assumed default segment for DI
2119;DATA OUTPUT
2120; REGISTERS: DI - points to the resultant path string.
2121; AX - offset value of the last subdirectory name taken out, in case
2122; of the user's need.
2123; Other register will be unchanged.
2124; CARRY FLAG WILL SET IF NOT FOUND.
2125;******************************************************************************
2126;
2127;LAST_DIR_OUT PROC NEAR
2128;PUBLIC LAST_DIR_OUT
2129;
2130; PUSH DI
2131; PUSH SI ;save current DI, SI
2132; CLD ;clear direction
2133; MOV SI, 0FFFFh ;used as a not_found flag if unchanged.
2134;; $DO
2135;$$DO47:
2136; MOV AL, 0
2137; SCASB
2138;; $LEAVE Z ;if [DI] = 0, then end of string. Ends this loop.
2139; JZ $$EN47
2140; DEC DI ;if [DI] <> 0, then go back and scan char again
2141; MOV AL, "\" ;to see it was a back slash.
2142; SCASB
2143;; $IF Z ;if it was, then save the addr to SI.
2144; JNZ $$IF49
2145; PUSH DI
2146; POP SI
2147;
2148; DEC SI
2149;; $ENDIF ;else do loop again.
2150;$$IF49:
2151;; $ENDDO
2152; JMP SHORT $$DO47
2153;$$EN47:
2154; CLC ;clear carry flag.
2155; CMP SI, 0FFFFh ;Had SI been changed?
2156;; $IF E
2157; JNE $$IF52
2158; STC ;No, set the carry. Not found.
2159;; $ELSE
2160; JMP SHORT $$EN52
2161;$$IF52:
2162; MOV BYTE PTR ES:[SI], 0 ;Yes, replace "\" with 0. Seg override to get default DI seg.
2163; MOV AX, SI
2164; INC AX ;let AX have the last dir offset value.
2165; CLC ;clear carry
2166;; $ENDIF
2167;$$EN52:
2168; POP SI ;restore original value
2169; POP DI ;original string offset
2170; RET
2171;LAST_DIR_OUT ENDP
2172;;
2173;
2174SET_DEFAULT_DRV PROC NEAR;AN000;
2175;change source drv as a default drv for conveniece of find, read operation
2176;of source. (handling target should be more specific as for as drive letter
2177;goes.)
2178;input: DL - drive # (0 = A, 1 = B ...)
2179
2180 MOV AH, Select_Disk ;AN000; = 0Eh
2181 INT 21H ;AN000;
2182 OR SYS_FLAG, DEFAULT_DRV_SET_FLAG ;AN000;indicates default drv has been changed
2183 ;Used for exit the program to restore default drv
2184 RET ;AN000;
2185SET_DEFAULT_DRV ENDP ;AN000;
2186;
2187ORG_S_DEF PROC NEAR ;AN000;
2188;restore the original source directory.
2189 PUSH ES ;AN000;
2190 PUSH DS ;AN000;
2191
2192 PUSH DS ;AN000;
2193 POP ES ;AN000;DS=ES=data seg
2194
2195 TEST SYS_FLAG, DEFAULT_S_DIR_FLAG ;AN000;source default direcotry saved?
2196; $IF NZ
2197 JZ $$IF55 ;AN000;
2198 MOV DX, OFFSET SAV_S_DRV ;AN000;saved source drive letter & directory
2199 MOV AH, 3Bh ;AN000;
2200 INT 21h ;AN000;restore source
2201 AND SYS_FLAG, RESET_DEFAULT_S_DIR ;AN000;reset the flag
2202; $ENDIF
2203$$IF55: ;AN000;
2204
2205 POP DS ;AN000;
2206 POP ES ;AN000;
2207
2208 RET ;AN000;
2209ORG_S_DEF ENDP ;AN000;
2210;
2211ORG_S_T_DEF PROC NEAR ;AN000;
2212;retore original target, source and default drv and directory
2213;check default_s(t)_dir_flag, default_drv_set_flag to restore source,
2214;or target directory and default drive.
2215
2216 TEST SYS_FLAG, TURN_VERIFY_OFF_FLAG ;AN000;turn off verify?
2217; $IF NZ ;yes
2218 JZ $$IF57 ;AN000;
2219 MOV AX, 2E00h ;AN000;turn it off
2220 INT 21H ;AN000;
2221; $ENDIF
2222$$IF57: ;AN000;
2223
2224 TEST SYS_FLAG, DEFAULT_DRV_SET_FLAG ;AN000;default drive has been changed?
2225; $IF NZ ;yes
2226 JZ $$IF59 ;AN000;
2227 MOV DL, SAV_DEFAULT_DRV ;AN000;
2228 DEC DL ;AN000;
2229 CALL SET_DEFAULT_DRV ;AN000;restore default drv.
2230
2231; Following is a fix for PTR 0000012 . The fix is to skip changing default
2232; drive directory if source drive is not the default drive.
2233
2234 MOV AL, S_DRV_NUMBER ;AN002; get source drive number
2235 CMP AL, SAV_DEFAULT_DRV ;AN002; src drive is the default drv ?
2236 JNE SKIP_CH_DIR ;AN002; no, dont change directory
2237
2238 MOV DX, OFFSET SAV_DEF_DIR_ROOT;AN000;
2239 MOV AH, Chdir ;AN000;
2240 INT 21H ;AN000;restore current dir of default dir
2241SKIP_CH_DIR: ;AN000;
2242; $ENDIF
2243$$IF59: ;AN000;
2244
2245 TEST SYS_FLAG, DEFAULT_S_DIR_FLAG ;AN000;source default direcotry saved?
2246; $IF NZ
2247 JZ $$IF61 ;AN000;
2248 MOV DX, OFFSET SAV_S_DRV ;AN000;saved source drive letter & directory
2249 MOV AH, 3Bh ;AN000;
2250 INT 21h ;AN000;restore source. This is for the case of ERROR exit.
2251; $ENDIF
2252$$IF61: ;AN000;
2253
2254 TEST SYS_FLAG, DEFAULT_T_DIR_FLAG ;AN000;target default directory saved?
2255; $IF NZ ;then assume both source, target default saved
2256 JZ $$IF63 ;AN000;
2257 MOV DX, OFFSET SAV_T_DRV ;AN000;saved target drive letter & directory
2258 MOV AH, 3Bh ;AN000;
2259 INT 21h ;AN000;restore target
2260; $ENDIF
2261$$IF63: ;AN000;
2262
2263 RET ;AN000;
2264ORG_S_T_DEF ENDP ;AN000;
2265;
2266EXTENDED_ERROR_HANDLER PROC NEAR;AN000;
2267;This routine calls fun 59(Get extended error) and
2268;check the actions returned. If it is Immediate exit, then jmp to JUST_EXIT
2269;If it is abort, then jmp to MAIN_EXIT.
2270;Or else, it check the COPY_STATUS flag. If is not open, read, create or
2271;write, then it is considered as a critical error and jmp to MAIN_EXIT.
2272;If access denied
2273; too many open files
2274; sharing violation
2275; lock violation
2276; general failure
2277;then show the message and jmp to the MAIN_EXIT.
2278; *** Currently, this routine directly jump to the main_exit instead of
2279; *** returing to the caller. The reason is we regard the above error conditions
2280; *** as being not suitable to continue copying and, hence, to simplify
2281; *** the error process.
2282;INPUT:
2283; DS - DATA SEG
2284;OUTPUT:
2285; ALL THE REG PRESERVED
2286
2287GOTO_MAIN_EXIT: ;AN000;
2288 JMP MAIN_EXIT ;AN000;restore conditions
2289 ;and exit
2290QUICK_EXIT: ;AN000;
2291 JMP JUST_EXIT ;AN000;immediate exit
2292
2293 RET ;AN000;
2294
2295EXTENDED_ERROR_HANDLER ENDP;AN000;
2296;
2297CLOSE_DELETE_FILE PROC NEAR;AN000;
2298;when writing error occurs, then this routine is called to
2299;clean up the troubled target file.
2300;INPUT: DS - buffer seg
2301; ES - data seg
2302
2303 MOV BX, ES:T_HANDLE ;AN000;close target file
2304 PUSH DS ;AN005;SAVE THE BUFFER PTR
2305 PUSH ES ;AN005;WE NEED THE DATA PTR
2306 POP DS ;AN005;DS = THE DATA PTR
2307 CALL CLOSE_A_FILE;AN000;
2308 POP DS ;AN005;DS = THE BUFFER PTR AGAIN
2309 LEA DX, DS:target_drv_let ;AN000;target drv, filename
2310 CALL DELETE_A_FILE ;AN000;delete it
2311 RET ;AN000;
2312CLOSE_DELETE_FILE ENDP;AN000;
2313;
2314;
2315
2316SWITCH_DS_ES PROC NEAR;AN000;
2317; switch DS, ES
2318 PUSH DS ;AN000;
2319 PUSH ES ;AN000;
2320 POP DS ;AN000;
2321 POP ES ;AN000;
2322 RET ;AN000;
2323SWITCH_DS_ES ENDP ;AN000;
2324;
2325;
2326INIT PROC NEAR ;AN000;
2327
2328 CALL GET_CUR_DRV ;AN000;save current default drv
2329 MOV DL, SAV_DEFAULT_DRV;AN000;
2330 LEA SI, SAV_DEFAULT_DIR;AN000;
2331
2332 CALL GET_CUR_DIR ;AN000;save current default dir
2333 CALL GET_DRIVES ;AN000; SAR
2334 CALL TOP_OF_MEM ;AN000;set top_of_memory
2335 CALL INIT_BUFFER ;AN000;init buffer information
2336
2337 MOV DL, T_DRV_NUMBER ;AN000; SAR
2338 .IF < DL AE 3 > ;AN000; SAR
2339 LEA SI, SAV_T_CURDIR ;AN000; SAR
2340 CALL GET_CUR_DIR ;AN000; SAR
2341 OR SYS_FLAG, DEFAULT_T_DIR_FLAG ;AN000; SAR
2342 .ELSE ;AN000; SAR
2343 AND SYS_FLAG, NOT DEFAULT_T_DIR_FLAG ;AN000; SAR
2344 .ENDIF ;AN000; SAR
2345
2346
2347 MOV DL, S_DRV_NUMBER;AN000;
2348 DEC DL ;AN000;
2349 CALL SET_DEFAULT_DRV ;AN000;set source as a default drv
2350 CLC ;AN000;
2351 RET ;AN000;
2352INIT ENDP ;AN000;
2353;
2354GET_DRIVES PROC NEAR ;AN000;
2355;get source and target phisical drive letter from parser area.
2356;set ONE_DISK_COPY_FLAG, if the user XCOPY using the same drive letter.
2357
2358;;;;; MOV AL, SO_DRIVE ;AN000;source drive letter
2359; CMP AL,SPACE ;AN000;IS DRIVE LETTER BLANK?
2360; $IF E ;AN000;YES, GET THE DEFAULT
2361; MOV AL, SAV_DEFAULT_DRV ;(1=A, 2=B,...)
2362; $ELSE ;AN000;NO, CHANGE FROM CHAR TO #
2363; SUB AL,BASE_OF_ALPHA_DRV ;AN000;NEED THE DRV # HERE
2364; $ENDIF
2365
2366 MOV AL, 1 ;AN000; SAR A is the source drive
2367 MOV S_DRV_NUMBER, AL ;AN000;SAVE DRV #
2368 ADD AL, BASE_OF_ALPHA_DRV;AN000;
2369
2370 MOV S_DRV, AL ;AN000;save source drive letter
2371 MOV S_DRV_1, AL;AN000;
2372;; MOV S_ARC_DRV, AL ; SAR
2373 MOV SAV_S_DRV, AL;AN000;
2374
2375 .IF < DEST eq 3 > ;AN111;JW
2376 MOV AL,0 ;AN111;JW
2377 .ELSE ;AN111;JW
2378 MOV AL, DEST ;AN000; SAR target drive letter
2379 .ENDIF ;AN111;JW
2380 INC AL ;AN000; SAR
2381;;;;; CMP AL,SPACE ;AN000;IS DRIVE LETTER BLANK?
2382; ; $IF E ;AN000;YES, GET THE DEFAULT
2383; ; MOV AL, SAV_DEFAULT_DRV ;(1=A, 2=B,...)
2384; ; $ELSE ;AN000;NO, CHANGE FROM CHAR TO #
2385; ; SUB AL,BASE_OF_ALPHA_DRV ;AN000;NEED THE DRV # HERE
2386;;;;; $ENDIF
2387 MOV T_DRV_NUMBER, AL ;AN000;save target drv #
2388
2389;;;;; CMP S_DRV_NUMBER, AL ;s_drv_number = t_drv_number?
2390; ; $IF E
2391; ; OR SYS_FLAG, ONE_DISK_COPY_FLAG ;same logical drv copy
2392;;;;; $ENDIF
2393
2394 ADD AL, BASE_OF_ALPHA_DRV ;AN000;make target drv # to drive letter
2395 MOV T_DRV, AL ;AN000;target drive letter
2396;; MOV T_DRV_1, AL ; SAR
2397;; MOV T_DRV_2, AL ; SAR
2398 MOV SAV_T_DRV, AL;AN000;
2399 RET ;AN000;
2400GET_DRIVES ENDP ;AN000;
2401;
2402GET_CUR_DRV PROC NEAR;AN000;
2403;get the current default drive number (0 = A, 1 = B ..),
2404;change it to BIOS drive number and save it.
2405 MOV AH, Current_Disk ;AN000; = 19h
2406 INT 21h ;AN000;
2407 INC AL ;AN000;(1 = A, 2 = B ..)
2408 MOV SAV_DEFAULT_DRV, AL ;AN000;save it
2409 RET ;AN000;
2410GET_CUR_DRV ENDP ;AN000;
2411;
2412GET_CUR_DIR PROC NEAR ;AN000;
2413;get current directory and save it
2414;input: DL - drive # (0 = default, 1 = A etc)
2415; DS:SI - pointer to 64 byte user memory
2416
2417 MOV AH, Get_Current_Directory;AN000;
2418 INT 21H ;AN000;
2419 RET ;AN000;
2420GET_CUR_DIR ENDP ;AN000;
2421;
2422TOP_OF_MEM PROC NEAR ;AN000;
2423;set Top_of_memory
2424 PUSH ES ;AN000;
2425 MOV BX, PSP_SEG ;AN000;
2426 MOV ES, BX ;AN000;
2427 MOV AX, ES:2 ;AN000;PSP top of memory location
2428 SUB AX, 100H ;AN000;subtract dos transient area (4k)
2429 MOV TOP_OF_MEMORY, AX ;AN000;save it for buffer top
2430 POP ES ;AN000;
2431 RET ;AN000;
2432TOP_OF_MEM ENDP ;AN000;
2433
2434INIT_BUFFER PROC NEAR ;AN000;
2435;initialize buffer information
2436;set buffer_base, max_buffer_size
2437; call set_block ;SET BLOCK FOR BUFFR (for new 3.2 linker)
2438 MOV AX, 0 ;AN000; SAR
2439;;;; PUSH CS ; SAR cs segment is the highest segment in this program
2440;;;; POP DX ; SAR
2441 MOV DX, ALLOCATE_START ;AN000; SAR
2442 MOV BUFFER_PTR, DX ;AN000;
2443 CALL SET_BUFFER_PTR ;AN000;
2444 MOV AX, BUFFER_PTR ;AN000;
2445 MOV BUFFER_BASE, AX ;AN000;set buffer_base
2446 MOV AX, BUFFER_LEFT ;AN000;
2447 CMP AX, 140h ;AN000;BUFFER_LEFT < 5K which is the minimum size this program supports?
2448 JAE IB_CONT ;AN000;
2449;;;;;; PUSH AX ; SAR ;AN000;
2450; MOV AX, MSG_INSUF_MEMORY ; SAR ;AC000;GET THE MESSAGE ID
2451; MOV MSG_NUM,AX ; SAR ;AN000;NEED MESSAGE ID FOR PRINT
2452; MOV SUBST_COUNT,NUL ; SAR ;AN000;NO SUBSTITUTION TEXT
2453; MOV INPUT_FLAG,NUL ; SAR ;AN000;NO INPUT = 0
2454; MOV MSG_CLASS,UTILITY_MSG_CLASS ; SAR ;AN000;MESSAGE CLASS = -1
2455; CALL PRINT_STDERR ; SAR ;print error. AX points to message ID
2456; POP AX ; SAR ;AN000;
2457; MOV ERRORLEVEL, 4 ; SAR ;abnormal termination
2458 JMP MAIN_EXIT_A ;AN000;terminate this program
2459IB_CONT: ;AN000;
2460 MOV MAX_BUFFER_SIZE, AX ;AN000;set max buffer size in para
2461 CMP AX, 0FFFh ;AN000;max_buffer_size > 64 K in para ?
2462; $IF B
2463 JNB $$IF65 ;AN000;
2464 MOV CX, 16;AN000;
2465 MUL CX ;AN000;AX = AX * 16 (DX part will be 0)
2466 SUB AX, 544 ;AN000;AN000;subtrack header size
2467 MOV MAX_CX, AX ;AN000;this will be max_cx
2468; $ELSE
2469 JMP SHORT $$EN65 ;AN000;
2470$$IF65: ;AN000;
2471 MOV MAX_CX, 0FFD0h ;AN000;else max_cx = fff0 - 32 bytes
2472 ;which is the max # this program can support.
2473; $ENDIF ;(min # this program support for buffer is 5 k
2474$$EN65: ;AN000;
2475 ; which has been decided by BIG_FILE )
2476 RET ;AN000;
2477INIT_BUFFER ENDP ;AN000;
2478
2479
2480
2481SELECT ENDS ;AN000;
2482
2483 END ;AN000;
2484
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 @@
1.ALPHA ;AN000;
2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3;
4; DUMMY DATA SEGMENT
5;
6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
8DATA ENDS ;AN000;DATA
9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
10;
11; PARSER INFORMATION
12;
13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
14.XLIST ;AN000;
15FARSW EQU 1 ;AN000;
16DATESW EQU 0 ;AN000;
17TIMESW EQU 0 ;AN000;
18FILESW EQU 0 ;AN000;
19CAPSW EQU 0 ;AN000;
20CMPXSW EQU 0 ;AN000;
21DRVSW EQU 0 ;AN000;
22QUSSW EQU 0 ;AN000;
23KEYSW EQU 1 ;AN000;
24SWSW EQU 0 ;AN000;
25VAL1SW EQU 1 ;AN000;
26VAL2SW EQU 1 ;AN000;
27VAL3SW EQU 1 ;AN000;
28.LIST ;AN000;
29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
30PARSER SEGMENT PARA PUBLIC 'PARSER' ;AN000;
31 ASSUME CS:PARSER,DS:DATA,ES:DATA;AN000;
32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
33 PUBLIC SYSPARSE ;AN000;
34PAGE ;AN000;
35 INCLUDE PARSE.ASM ;AN000;
36
37PARSER ENDS ;AN000;
38 END ;AN000;
39 \ 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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3; PAN-LIST.INC
4;
5;
6;
7; OASIS PANEL ASSOCATION TABLE
8;
9;
10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
11PAN_WELCOME EQU 1 ;AN000; Welcome screen
12PAN_INTRO EQU 2 ;AN000; Introduction screen
13PAN_CONFIRM EQU 3 ;AN000; Confirmation screen
14PAN_WORKSPACE EQU 4 ;AN000; User memory needs screen
15PAN_CTY_KYB EQU 5 ;AN000; Country/Keyboard support screen
16PAN_COUNTRY EQU 6 ;AN000; Country Code Choice screen
17PAN_KEYBOARD EQU 7 ;AN000; Keyboard Code Choice screen
18PAN_KYBD_ALT EQU 8 ;AN000; Alternate keyboard screen
19PAN_DEST_DRIVE EQU 9 ;AN000; Destination Drive screen
20PAN_DOS_LOC EQU 10 ;AN000; DOS Location screen
21PAN_PRINTER EQU 11 ;AN000; Printer Selection Screen
22PAN_PRT_TYPE EQU 12 ;AN000; Printer type screen
23PAN_PARALLEL EQU 13 ;AN000; Parallel printer port selection screen
24PAN_SERIAL EQU 14 ;AN000; Serial printer port selection screen
25PAN_REVIEW EQU 15 ;AN000; Review Selections Screen
26PAN_FUNC_DISK EQU 16 ;AN000; Review selections made by SELECT - drive C:
27PAN_FUNC_DISKET EQU 16 ;AN000; Review selections made by SELECT - drive B:
28ERR_PRT_NO_HDWR EQU 17 ;AN000;
29PAN_DOS_PARAM EQU 18 ;AN000; PC/DOS parameters screen
30PAN_SHELL EQU 19 ;AN000; SHELL parameters screen
31ERR_EXIT EQU 20 ;AN000; Unrecoverable error - exit
32PAN_FASTOPEN EQU 21 ;AN000; FASTOPEN support screen
33PAN_SHARE EQU 22 ;AN000; SHARE support screen
34PAN_GRAPHICS EQU 23 ;AN000; GRAPHICS support screen
35PAN_EXP_MEMORY EQU 24 ;AN000; Expanded Memory support screen
36PAN_VDISK EQU 25 ;AN000; Virtual Disk support screen
37PAN_CONFIG_PARS EQU 26 ;AN000; CONFIG.SYS parameter screen
38PAN_FIXED_FIRST EQU 27 ;AN000; Partitions support for first disk only
39PAN_FIXED_BOTH EQU 28 ;AN000; Partitions support for both disks
40PAN_REBOOT EQU 29 ;AN000; Reboot screen
41PAN_DATE_TIME EQU 30 ;AN000; Install Date/Time support screen
42PAN_FORMAT EQU 31 ;AN000; Format Fixed Disk partition screen
43PAN_INST_PROMPT EQU 32 ;AN000; Installing PC DOS prompt screen
44PAN_INSTALL_DOS EQU 32 ;AN000; Installing PC DOS screen
45ERR_KEYB EQU 33 ;AN000; Error in running the KEYB command
46PAN_COMPLETE1 EQU 34 ;AN000; Installing complete screen - disk
47PAN_COMPLETE2 EQU 34 ;AN000; Installing complete screen - diskette 720KB
48PAN_COMPLETE3 EQU 34 ;AN000; Installing complete screen - diskette 360KB
49SUB_COMP_KYS_1C EQU 35 ;AN000; message for reboot; diskette COMBINED (1.44MB)
50PAN_HPAN EQU 36 ;AN000; contextual help panel
51PAN_HBAR EQU 37 ;AN000; HORIZONTAL BAR
52SUB_CONT_OPTION EQU 38 ;AN000; Enter to continue or Esc to cancel
53SUB_PRINTER_1 EQU 39 ;AN000; printer no 1
54
55CHILD_F3EXIT EQU 40 ;AN000; f3 exit child panel
56SUB_FIXED_1 EQU 41 ;AN000; fixed disk 1
57SUB_LOG_DRIVE EQU 42 ;AN000; logical drive JW
58SUB_REBOOT_KEYS EQU 43 ;AN000; ctrl+alt+del to reboot line
59SUB_INSTALL_1 EQU 44 ;AN000; copying from diskette 1
60SUB_INSTALL_2 EQU 45 ;AN000; copying from diskette 2
61SUB_COMP_VER EQU 46 ;AN000; install of DOS 4.00 complete
62SUB_COMP_KYS_1 EQU 47 ;AN000; message before reboot - disk
63SUB_COMP_KYS_2 EQU 48 ;AN000; message before reboot - diskette
64 ;
65CHILD_F1HELP EQU 49 ;AN000; help child panel
66CHILD_F9KEYS EQU 50 ;AN000; keys child panel
67CHILD_QUIT EQU 51 ;AN000; escape child panel
68CHILD_ENTER EQU 52 ;AN000; enter child panel
69SUB_COMP_REP EQU 53 ;AN000; Replacement of DOS 4.00 complete
70 ;
71PAN_WRITE_PROT EQU 54 ;AN000;
72PAN_DRIVE_ERROR EQU 55 ;AN000;
73PAN_BAD_DISKET EQU 56 ;AN000;
74ERR_COPY_DISK EQU 57 ;AN000;
75 ;
76SUB_INS_START_B EQU 58 ;AN000;
77SUB_REM_SEL_A EQU 59 ;AN000;
78SUB_REM_START_B EQU 60 ;AN000;
79SUB_REM_DOS_A EQU 61 ;AN000;
80 ;
81ERR_BAD_PATH EQU 62 ;AN000;
82ERR_BAD_PFILE EQU 63 ;AN000;
83ERR_BAD_PPRO EQU 64 ;AN000;
84FORMAT_DISK EQU 65 ;AN000;
85FORMAT_DISKET EQU 66 ;AN000;
86ERR_BORDER EQU 67 ;AN000;
87ERR_DOS_DISK EQU 68 ;AN000;
88ERR_GENERAL EQU 69 ;AN000;
89PAN_DISKCOPY EQU 70 ;AN000;
90PAN_DSKCPY_SRC EQU 71 ;AN000;
91PAN_DSKCPY_TAR EQU 72 ;AN000;
92PAN_DSKCPY_CPY EQU 73 ;AN000;
93PAN_PARTIAL EQU 74 ;AC010;
94
95FORMAT_SHELL EQU 75 ;AN000;DT One drive format of SHELL diskette
96FORMAT_STARTUP EQU 76 ;AN000;DT One drive format of STARTUP diskette
97SUB_REM_SHELL_360 EQU 77 ;AN001;GHG D65 360KB
98SUB_REM_SELECT_360 EQU 78 ;AN001;GHG D65 360KB
99SUB_REM_UTIL1_360 EQU 79 ;AN001;GHG D65 360KB
100SUB_COPYING EQU 80 ;AN001;GHG D65 360KB
101
102SUB_INS_WORK1_360 EQU 81 ;AN000;DT 2 drive 360 installation
103SUB_INS_WORK2_360 EQU 82 ;AN000;DT "
104SUB_INS_WORK3_360 EQU 83 ;AN000;DT "
105SUB_INS_START_360 EQU 84 ;AN000;DT "
106SUB_INS_INSTALL_360 EQU 85 ;AN000;DT "
107 ;
108SUB_INS_WORK1_S360 EQU 86 ;AN000;DT 1 drive 360 installation
109SUB_INS_WORK2_S360 EQU 87 ;AN000;DT "
110SUB_INS_SHELL_S360 EQU 88 ;AN000;DT "
111SUB_INS_STARTT_S360 EQU 89 ;AN000;DT "
112
113PAN_START360 EQU 90 ;AN000;DT "
114SUB_COMP_KYS_3 EQU 91 ;AN000;DT message before reboot - diskette
115
116SUB_INSTALL_COPY EQU 92 ;AN000;DT insert INSTALL copy
117SUB_INS_OPER2 EQU 93 ;AN000;DT
118PAN_EXP_MEMORY2 EQU 94 ;AN000;JW Expanded Memory support screen
119PAN_START720 EQU 95 ;AN000;DT Diskette introduction 720KB
120PAN_START1440 EQU 96 ;AN000;DT Diskette introduction 1440KB
121ERR_INS_INSTALL EQU 97 ;AN060;JW Insert the install diskette
122PAN_CHOOSE_SHELL EQU 98 ; MS-DOS Shell option
123SUB_INS_WORKING_A EQU 99 ; Insert the WORKING disk in drive A
124SUB_INS_MSSHELL_A EQU 100 ; Insert the MS-SHELL disk in drive A
125SUB_INS_SHELL_DISKS EQU 101 ; Ins. MS-SHELL in A; SHELL in B
126SUB_INS_OP_WORK EQU 102 ; Ins. OPERATING in A; WORKING in B
127SUB_INS_WORK3_A EQU 103 ; Ins. WORKING3 in drive A
128
129SCR_DOS_SUPPORT EQU 1 ;AN000; memory workspace list
130SCR_CTY_KYB EQU 2 ;AN000; type of country/keyboard list
131SCR_CTY_1 EQU 3 ;AN000; list of countries - code 001 to 046
132SCR_CTY_2 EQU 4 ;AN000; list of countries - code 047 to 972
133SCR_KYB_1 EQU 5 ;AN000; list of keyboards - code BE to NO
134SCR_KYB_2 EQU 6 ;AN000; list of keyboards - code PO to none
135SCR_FR_KYB EQU 7 ;AN000; list of alternate French keyboards
136SCR_IT_KYB EQU 8 ;AN000; list of alternate Italian keyboards
137SCR_UK_KYB EQU 9 ;AN000; list of alternate UK keyboards
138SCR_DEST_B_C EQU 10 ;AN111; install drive list JW
139SCR_PRT_TYPE EQU 11 ;AN000; list of printers supported
140SCR_PARALLEL EQU 12 ;AN000; list of parallel printer ports
141SCR_SERIAL EQU 13 ;AN000; list of serial printer ports
142SCR_PRT_REDIR EQU 14 ;AN000; list of redirected parallel printer ports
143SCR_REVIEW EQU 15 ;AN000; accept/view SELECT generated options
144SCR_FUNC_DISK EQU 16 ;AN000; list of functions supported - disk
145SCR_FUNC_DISKET EQU 17 ;AN000; list of functions supported - diskette
146SCR_FIXED_FIRST EQU 18 ;AN000; first fixed disk unused - partition support list
147SCR_FIXED_BOTH EQU 19 ;AN000; first fixed disk used - partition support list
148SCR_FORMAT EQU 20 ;AN000; fixed disk partition format
149SCR_CONTEXT_HLP EQU 21 ;AN000;
150SCR_INDEX_HLP EQU 21 ;AN000;
151SCR_TITLE_HLP EQU 22 ;AN000;
152SCR_ACC_CTY EQU 23 ;AN000;
153SCR_ACC_KYB EQU 24 ;AN000;
154SCR_ACC_PRT EQU 25 ;AN000;
155SCR_COPY_DEST EQU 26 ;AN000;JW DOS location choices
156SCR_DEST_A_C EQU 27 ;AN111; install drive list JW
157SCR_CHOOSE_SHELL EQU 28 ; MS-DOS Shell option
158 ;
159STR_DOS_LOC EQU 1 ;AN000; DOS location field
160STR_EXT_PARMS EQU 2 ;AN000; external diskette parameters
161STR_DOS_PATH EQU 3 ;AN000; DOS path
162STR_DOS_APPEND EQU 4 ;AN000; APPEND path
163STR_DOS_PROMPT EQU 5 ;AN000; PROMPT path
164STR_SHELL EQU 6 ;AN000; SHELL parameters
165STR_KSAM EQU 7 ;AN000; KSAM parameters
166STR_FASTOPEN EQU 8 ;AN000; FASTOPEN parameters
167STR_SHARE EQU 9 ;AN000; SHARE parameters
168STR_GRAPHICS EQU 10 ;AN000; GRAPHICS parameters
169STR_XMAEM EQU 11 ;AN000; XMAEM expanded memory parameter
170STR_XMA2EMS EQU 12 ;AN000; XMA2EMS expanded memory parameter
171STR_VDISK EQU 13 ;AN000; VDISK parameter
172STR_BREAK EQU 14 ;AN000; BREAK parameter
173STR_BUFFERS EQU 15 ;AN000; BUFFERS parameter
174STR_DOS_APPEND_P EQU 16 ;AN000; APPEND parameter JW
175STR_FCBS EQU 17 ;AN000; FCBS parameter
176STR_FILES EQU 18 ;AN000; FILES parameter
177STR_LASTDRIVE EQU 19 ;AN000; LASTDRIVE parameter
178STR_STACKS EQU 20 ;AN000; STACKS parameter
179STR_VERIFY EQU 21 ;AN000; VERIFY parameter
180
181NUM_PRINTER EQU 22 ;AN000; no of printers
182NUM_EXT_DISK EQU 23 ;AN000; no of external diskettes
183NUM_YEAR EQU 24 ;AN000; YEAR
184NUM_MONTH EQU 25 ;AN000; MONTH
185NUM_DAY EQU 26 ;AN000; DAY
186NUM_HOUR EQU 27 ;AN000; HOUR
187NUM_MINUTE EQU 28 ;AN000; MINUTE
188NUM_SECOND EQU 29 ;AN000; SECOND
189STR_DEF_CP EQU 30 ;AN000; Default CodePage for the SELECT.DAT file
190STR_SWISS_KEYB EQU 31 ;AN000; Default SWISS Keyboard
191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3; PANEL.MAC
4;
5; This file contains the MACROS defined for the
6; screen management and a number of other macros
7; identified with CAS services.
8;
9; This file is included with the control flow files
10; for the creation of SELECT.EXE!
11;
12; DATE: July 3, 1987
13;
14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15 ;
16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
17;
18; MACRO: PREPARE_CHILDREN
19;
20; This routine takes the Child panels associated with the
21; QM_ACTIVEPAN and adds them to the display queue - pushed
22; on as Children.
23;
24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
25PREPARE_CHILDREN MACRO ;;AN000;
26 CALL HANDLE_CHILDREN ;;AN000;
27 ENDM ;;AN000;
28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29;
30; MACRO: INIT_PQUEUE
31;
32; This flushes both the Parent/Child queues, clears the
33; refresh field table, initializes the refresh field to
34; the new Parent panel (with 0 entries), and sets the break
35; ON for the parent panel. Also it pushes the parent onto
36; the display queue.
37;
38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
39INIT_PQUEUE MACRO panel ;;AN000;
40 MOV AX,panel ;;AN000;
41 CALL INIT_PQUEUE_CALL ;;AN000;
42 ENDM ;;AN000;
43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
44;
45; MACRO: PREPARE_PANEL
46;
47; This will put the specified panel into the Parent queue
48; for display. The QM_OPT2 is already set to break OFF.
49;
50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
51PREPARE_PANEL MACRO panel ;;AN000;
52 MOV AX,panel ;;AN000;
53 CALL PREPARE_PANEL_CALL ;;AN000;
54 ENDM ;;AN000;
55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
56;
57; MACRO: DISPLAY_PANEL
58;
59; Display panel causes the Parent/Children on the display
60; queues to be displayed on the screen. If there are any
61; entries in the entry field table, then the break ON is set
62; to automatically display these panels.
63;
64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
65DISPLAY_PANEL MACRO ;;AN000;
66 CALL DISPLAY_PANEL_CALL ;;AN000;
67 ENDM ;;AN000;
68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
69;
70; MACRO: DEALLOCATE_MEMORY
71;
72;
73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
74DEALLOCATE_MEMORY MACRO ;;AN000;
75 CALL DEALLOCATE_MEMORY_CALL ;;AN000;
76 ENDM ;;AN000;
77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
78;
79; MACRO: ALLOCATE_MEMORY
80;
81;
82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
83ALLOCATE_MEMORY MACRO ;;AN000;
84 CALL ALLOCATE_MEMORY_CALL ;;AN000;allocate segment
85 ENDM ;;AN000;
86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
87;
88; MACRO: GET_SCROLL
89;
90; The scroll field becomes the active field assuming a default
91; colour index, and the cursor keys become active. The only
92; keys valid for return are specified in the 'fkeys' list.
93;
94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
95GET_SCROLL MACRO input,index,f_keys ;;AN000;
96 MOV AX,input ;;AN000;
97 MOV BX,index ;;AN000;
98 MOV CX,f_keys&_LEN ;;AN000;
99 LEA DX,f_keys ;;AN000;
100 CALL EXEC_SCROLL_CALL ;;AN000;
101 ENDM ;;AN000;
102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
103;
104; MACRO: INIT_SCROLL
105;
106; Sets up the scroll field with the specified index onto the
107; refresh field table. The colour index table is set to a
108; different colour to indicate that it is not the active field.
109;
110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
111INIT_SCROLL MACRO input,index ;;AN000;
112 MOV AX,input ;;AN000;
113 MOV BX,index ;;AN000;
114 CALL INIT_SCROLL_CALL ;;AN000;
115 ENDM ;;AN000;
116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
117;
118; MACRO: INIT_SCROLL_W_LIST
119;
120; Sets up the scroll field with the specified index onto the
121; refresh field table. The colour index table is set to a
122; different colour to indicate that it is not the active field.
123;
124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
125INIT_SCROLL_W_LIST MACRO input,list_seg,list_off,num_ele,max_width,max_title,index ;;AN000;
126 MOV AX,input ;;AN000;
127 MOV BX,max_title ;;AN000;
128 MOV CX,num_ele ;;AN000;
129 MOV DX,max_width ;;AN000;
130 MOV SI,list_seg ;;AN000;
131 MOV DI,list_off ;;AN000;
132 CALL INIT_SCROLL_W_LIST_CALL ;;AN000;
133 MOV AX,input ;;AN000;
134 MOV BX,index ;;AN000;
135 CALL INIT_SCROLL_CALL ;;AN000;
136 ENDM ;;AN000;
137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
138;
139; MACRO: INIT_SCROLL_W_NUM
140;
141; Sets up the scroll field with the specified index onto the
142; refresh field table. The colour index table is set to a
143; different colour to indicate that it is not the active field.
144;
145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
146INIT_SCROLL_W_NUM MACRO input,num_ele,index ;;AN000;
147 MOV AX,input ;;AN000;
148 MOV CX,num_ele ;;AN000;
149 CALL INIT_SCROLL_W_NUM_CALL ;;AN000;
150 MOV AX,input ;;AN000;
151 MOV BX,index ;;AN000;
152 CALL INIT_SCROLL_CALL ;;AN000;
153 ENDM ;;AN000;
154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
155;
156; MACRO: INIT_SCROLL_COLOUR
157;
158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
159INIT_SCROLL_COLOUR MACRO input,colour ;;AN000;
160 MOV BX,input ;;AN000;get PCSLCTP field
161 MOV AX,colour ;;AN000;
162 CALL SET_SCROLL_COLOUR ;;AN000;
163 ENDM ;;AN000;
164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
165;
166; MACRO: SET_SCROLL
167;
168; The SET_SCROLL will set a scroll field specified to the required
169; index in a different colour index to indicate it is NOT the
170; active field.
171;
172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
173SET_SCROLL MACRO input,index ;;AN000;
174 MOV AX,input ;;AN000;
175 MOV BX,index ;;AN000;
176 CALL SET_SCROLL_CALL ;;AN000;
177 ENDM ;;AN000;
178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
179;
180; MACRO: GET_FUNCTION
181;
182; This routine is used to process screens with NO scroll fields
183; or input fields. The valid keys are specified in the 'fkeys'
184; list.
185;
186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
187GET_FUNCTION MACRO fkeys ;;AN000;
188 MOV CX,fkeys&_LEN ;;AN000;
189 LEA DX,fkeys ;;AN000;
190 CALL GET_FUNCTION_CALL ;;AN000;
191 ENDM ;;AN000;
192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
193;
194; MACRO: INIT_STRING
195;
196; INIT_STRING is used to add the input entry field onto the
197; refresh field table. Unlike the scroll fields, the colour
198; index is maintained for the input field.
199;
200;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
201INIT_STRING MACRO input,string,max_string ;;AN000;
202 MOV AX,input ;;AN000;
203 LEA BX,string ;;AN000;
204 MOV SI,max_string ;;AN000;
205 CALL INIT_STRING_CALL ;;AN000;
206 ENDM ;;AN000;
207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
208;
209; MACRO: SET_STRING
210;
211; This set an input field (already contained in the refresh
212; field table) on the logical buffer to the defined string.
213;
214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
215SET_STRING MACRO input,string,max_string ;;AN000;
216 MOV AX,input ;;AN000;
217 LEA BX,string ;;AN000;
218 MOV SI,max_string ;;AN000;
219 CALL SET_STRING_CALL ;;AN000;
220 ENDM ;;AN000;
221;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
222;
223; MACRO: GET_STRING
224;
225; Causes the input field specified to become the active input
226; field. The keys that will exit this input field are defined
227; in the 'fkeys' list. The other characters valid for this
228; input field are contained in the ICB.
229;
230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
231GET_STRING MACRO input,string,max_string,fkeys ;;AN000;
232 MOV AX,input ;;AN000;
233 LEA BX,string ;;AN000;
234 MOV CX,fkeys&_LEN ;;AN000;
235 LEA DX,fkeys ;;AN000;
236 MOV SI,max_string ;;AN000;
237 CALL GET_STRING_CALL ;;AN000;
238 ENDM ;;AN000;
239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
240;
241; MACRO: GET_NUMERIC
242;
243;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
244GET_NUMERIC MACRO input,value,minimum,maximum,fkeys,string ;;AN000;
245 LOCAL GN_0 ;;AN000;
246 LOCAL GN_1 ;;AN000;
247 MOV AX,maximum ;;AN000;
248 LEA BX,P_USER_STRING ;;AN000;
249 CALL CONVERT_ASCII ;;AN000;
250 MOV SI,AX ;;AN000;
251 ;;
252 MOV AX,value ;;AN000;
253GN_0: LEA BX,string+2 ;;AN000;
254 CALL CONVERT_ASCII ;;AN000;
255 MOV string,AX ;;AN000;
256 ;;
257 LEA BX,string ;;AN000;
258 MOV AX,input ;;AN000;
259 MOV CX,fkeys&_LEN ;;AN000;
260 LEA DX,fkeys ;;AN000;
261 CALL GET_STRING_CALL ;;AN000;
262 ;;
263 LEA BX,P_USER_STRING ;;AN000;
264 MOV CX,S_USER_STRING ;;AN000;
265 CALL CONVERT_NUMERIC ;;AN000;
266 ;;
267 CMP N_USER_FUNC,ESCAPE ;;AN000;
268 JE GN_1 ;;AN000;
269 ;;
270 MOV BX,minimum ;;AN000;
271 MOV CX,maximum ;;AN000;
272 CALL CHECK_MIN_MAX ;;AN000;
273 JC GN_0 ;;AN000;
274 ;;
275GN_1: MOV N_USER_NUMERIC,AX ;;AN000;
276 ENDM ;;AN000;
277;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
278;
279; MACRO: INIT_NUMERIC
280;
281;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
282INIT_NUMERIC MACRO input,value,maximum,string ;;AN000;
283 MOV AX,maximum ;;AN000;
284 LEA BX,P_USER_STRING ;;AN000;
285 CALL CONVERT_ASCII ;;AN000;
286 MOV SI,AX ;;AN000;
287 ;;
288 MOV AX,value ;;AN000;
289 LEA BX,string+2 ;;AN000;
290 CALL CONVERT_ASCII ;;AN000;
291 MOV string,AX ;;AN000;
292 ;;
293 LEA BX,string ;;AN000;
294 MOV AX,input ;;AN000;
295 CALL INIT_STRING_CALL ;;AN000;
296 ENDM ;;AN000;
297;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
298;
299; MACRO: SET_NUMERIC
300;
301;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
302SET_NUMERIC MACRO input,value,maximum,string ;;AN000;
303 MOV AX,maximum ;;AN000;
304 LEA BX,P_USER_STRING ;;AN000;
305 CALL CONVERT_ASCII ;;AN000;
306 MOV SI,AX ;;AN000;
307 ;;
308 MOV AX,value ;;AN000;
309 LEA BX,string ;;AN000;
310 CALL CONVERT_ASCII ;;AN000;
311 MOV string,AX ;;AN000;
312 ;;
313 LEA BX,string ;;AN000;
314 MOV AX,input ;;AN000;
315 CALL SET_STRING_CALL ;;AN000;
316 ENDM ;;AN000;
317;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
318;
319; MACRO: GET_SUPPORT
320;
321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
322INIT_SCROLL_STATUS MACRO input,status_id ;;AN000;
323 MOV AX,input ;;AN000;
324 LEA SI,status_id ;;AN000;
325 CALL INIT_SCROLL_STATUS_CALL ;;AN000;
326 ENDM ;;AN000;
327;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
328;
329; MACRO: INIT_SUPPORT
330;
331;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
332INIT_SUPPORT MACRO table,index,status ;;AN000;
333 PUSH SI ;;AN000;
334 LEA SI,table ;;AN000;
335 MOV BX,index ;;AN000;
336 DEC BX ;;AN000;
337 SHL BX,1 ;;AN000;
338 MOV AX,status ;;AN000;
339 MOV [SI+BX],AX ;;AN000;
340 POP SI ;;AN000;
341 ENDM ;;AN000;
342;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
343;
344; MACRO: RET_SUPPORT
345;
346;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
347RET_SUPPORT MACRO table,index,status ;;AN000;
348 PUSH SI ;;AN000;
349 LEA SI,table ;;AN000;
350 MOV BX,index ;;AN000;
351 DEC BX ;;AN000;
352 SHL BX,1 ;;AN000;
353 MOV AX,[SI+BX] ;;AN000;
354 MOV status,AX ;;AN000;
355 POP SI ;;AN000;
356 ENDM ;;AN000;
357;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
358;
359; MACRO: TOGGLE_SUPPORT
360;
361;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
362TOGGLE_SUPPORT MACRO table,index ;;AN000;
363 MOV BX,index ;;AN000;
364 LEA DX,table ;;AN000;
365 CALL TOGGLE_SUPPORT_CALL ;;AN000;
366 ENDM ;;AN000;
367;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
368;
369; MACROS: INITIALIZE_BCHAR
370;
371; One needs to initialize the background panel colour index
372; to match the colour attributes of the Parent panels. The
373; index is based on panel #1 (which is assumed to be a good
374; sample of the remaining panel colours.
375;
376;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
377INITIALIZE_BCHAR MACRO character ;;AN000;
378 MOV AL,character ;;AN000;Background character
379 MOV PM_BASECHAR,AL ;;AN000;
380 PUSH DI ;;AN000;
381 PUSH DX ;;AN000;
382 PUSH ES ;;AN000;
383 MOV BX,1 ;;AN000;get ES:DI pointer to panel #1
384 CALL GET_PCB ;;AN000;
385 PUSH ES:[DI]+PCB_CCBID ;;AN000;get panel's color index
386 POP AX ;;AN000;
387 DEC AX ;;AN000;normalize index
388 POP ES ;;AN000;
389 PUSH ES ;;AN000;
390 MOV DI,CRD_CCBVECOFF ;;AN000;
391 PUSH CRD_CCBVECSEG ;;AN000;
392 POP ES ;;AN000;
393 MOV DX,12 ;;AN000;12 entries per colour index
394 MUL DX ;;AN000;
395 ADD DI,AX ;;AN000;
396 MOV AL,ES:[DI] ;;AN000;
397 POP ES ;;AN000;
398 POP DX ;;AN000;
399 POP DI ;;AN000;
400 MOV PM_BASEATTR,AL ;;AN000;set color attribute of background characters
401 ENDM ;;AN000;
402;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
403;
404; MACRO: RETURN_STRING
405;
406;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
407RETURN_STRING MACRO input,string,maximum ;;AN000;
408 MOV AX,input ;;AN000;
409 MOV DX,maximum ;;AN000;
410 LEA SI,string ;;AN000;
411 CALL RETURN_STRING_CALL ;;AN000;
412 ENDM ;;AN000;
413;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
414;
415; MACRO: HANDLE_ERROR
416;
417;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
418HANDLE_ERROR MACRO input,action ;;AN000;
419 LOCAL CONTINUE ;;AN000;
420 MOV BX,input ;;AN000;
421 MOV CX,action ;;AN000;
422 CALL HANDLE_ERROR_CALL ;;AN000;
423 JNC CONTINUE ;;AN000;
424 CLEAR_SCREEN2 ;;AC027;SEH ;AN000;
425 JMP EXIT_SELECT ;;AN000;
426CONTINUE: ;;AN000;
427 ENDM ;;AN000;
428;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
429;
430; MACRO: INIT_CHAR ;;AN000;JW
431;
432;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
433INIT_CHAR MACRO character,row,column,panid ;;AN000;JW
434 MOV AX,row ;;AN000;JW
435 MOV CX,column ;;AN000;JW
436 MOV DL,character ;;AN000;JW
437 MOV BX,panid ;;AN000;JW
438 CALL INIT_CHAR_CALL ;;AN000;JW
439 ENDM ;;AN000;JW
440;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3;
4;
5; PANELS.ASM
6;
7;
8;
9;
10;
11;
12; CODE Segment
13;
14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15
16 .alpha ; arrange segments alphabetically
17
18 INCLUDE SEL-PAN.INC ;AN024;
19 INCLUDE PAN-LIST.INC ;AN024;
20 ;
21 PUBLIC PCB_VECTOR ;AN024;
22 PUBLIC NUM_PCB ;AN024;
23 ;
24PANEL EQU 1 ;AN024;
25SCROLL EQU 0 ;AN024;
26 ;
27CODE SEGMENT PARA PUBLIC 'CODE' ;AN024;
28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29;
30; Panel Control Block Vector
31;
32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
33PCB_VECTOR LABEL WORD ;AC024;
34 DW 0,OFFSET PCB1 ;AC024;PCB1 segment, offset
35 DW 0,OFFSET PCB2 ;AC024;PCB2 segment, offset
36 DW 0,OFFSET PCB3 ;AC024;PCB3 segment, offset
37 DW 0,OFFSET PCB4 ;AC024;PCB4 segment, offset
38 DW 0,OFFSET PCB5 ;AC024;PCB5 segment, offset
39 DW 0,OFFSET PCB6 ;AC024;PCB6 segment, offset
40 DW 0,OFFSET PCB7 ;AC024;PCB7 segment, offset
41 DW 0,OFFSET PCB8 ;AC024;PCB8 segment, offset
42 DW 0,OFFSET PCB9 ;AC024;PCB9 segment, offset
43 DW 0,OFFSET PCB10 ;AC024;PCB10 segment, offset
44 DW 0,OFFSET PCB11 ;AC024;PCB11 segment, offset
45 DW 0,OFFSET PCB12 ;AC024;PCB12 segment, offset
46 DW 0,OFFSET PCB13 ;AC024;PCB13 segment, offset
47 DW 0,OFFSET PCB14 ;AC024;PCB14 segment, offset
48 DW 0,OFFSET PCB15 ;AC024;PCB15 segment, offset
49 DW 0,OFFSET PCB16 ;AC024;PCB16 segment, offset
50 DW 0,OFFSET PCB17 ;AC024;PCB17 segment, offset
51 DW 0,OFFSET PCB18 ;AC024;PCB18 segment, offset
52 DW 0,OFFSET PCB19 ;AC024;PCB19 segment, offset
53 DW 0,OFFSET PCB20 ;AC024;PCB20 segment, offset
54 DW 0,OFFSET PCB21 ;AC024;PCB21 segment, offset
55 DW 0,OFFSET PCB22 ;AC024;PCB22 segment, offset
56 DW 0,OFFSET PCB23 ;AC024;PCB23 segment, offset
57 DW 0,OFFSET PCB24 ;AC024;PCB24 segment, offset
58 DW 0,OFFSET PCB25 ;AC024;PCB25 segment, offset
59 DW 0,OFFSET PCB26 ;AC024;PCB26 segment, offset
60 DW 0,OFFSET PCB27 ;AC024;PCB27 segment, offset
61 DW 0,OFFSET PCB28 ;AC024;PCB28 segment, offset
62 DW 0,OFFSET PCB29 ;AC024;PCB29 segment, offset
63 DW 0,OFFSET PCB30 ;AC024;PCB30 segment, offset
64 DW 0,OFFSET PCB31 ;AC024;PCB31 segment, offset
65 DW 0,OFFSET PCB32 ;AC024;PCB32 segment, offset
66 DW 0,OFFSET PCB33 ;AC024;PCB33 segment, offset
67 DW 0,OFFSET PCB34 ;AC024;PCB34 segment, offset
68 DW 0,OFFSET PCB35 ;AC024;PCB35 segment, offset
69 DW 0,OFFSET PCB36 ;AC024;PCB36 segment, offset
70 DW 0,OFFSET PCB37 ;AC024;PCB37 segment, offset
71 DW 0,OFFSET PCB38 ;AC024;PCB38 segment, offset
72 DW 0,OFFSET PCB39 ;AC024;PCB39 segment, offset
73 DW 0,OFFSET PCB40 ;AC024;PCB40 segment, offset
74 DW 0,OFFSET PCB41 ;AC024;PCB41 segment, offset
75 DW 0,OFFSET PCB42 ;AC024;PCB42 segment, offset
76 DW 0,OFFSET PCB43 ;AC024;PCB43 segment, offset
77 DW 0,OFFSET PCB44 ;AC024;PCB44 segment, offset
78 DW 0,OFFSET PCB45 ;AC024;PCB45 segment, offset
79 DW 0,OFFSET PCB46 ;AC024;PCB46 segment, offset
80 DW 0,OFFSET PCB47 ;AC024;PCB47 segment, offset
81 DW 0,OFFSET PCB48 ;AC024;PCB48 segment, offset
82 DW 0,OFFSET PCB49 ;AC024;PCB49 segment, offset
83 DW 0,OFFSET PCB50 ;AC024;PCB50 segment, offset
84 DW 0,OFFSET PCB51 ;AC024;PCB51 segment, offset
85 DW 0,OFFSET PCB52 ;AC024;PCB52 segment, offset
86 DW 0,OFFSET PCB53 ;AC024;PCB53 segment, offset
87 DW 0,OFFSET PCB54 ;AC024;PCB54 segment, offset
88 DW 0,OFFSET PCB55 ;AC024;PCB55 segment, offset
89 DW 0,OFFSET PCB56 ;AC024;PCB56 segment, offset
90 DW 0,OFFSET PCB57 ;AC024;PCB57 segment, offset
91 DW 0,OFFSET PCB58 ;AC024;PCB58 segment, offset
92 DW 0,OFFSET PCB59 ;AC024;PCB59 segment, offset
93 DW 0,OFFSET PCB60 ;AC024;PCB60 segment, offset
94 DW 0,OFFSET PCB61 ;AC024;PCB61 segment, offset
95 DW 0,OFFSET PCB62 ;AC024;PCB62 segment, offset
96 DW 0,OFFSET PCB63 ;AC024;PCB63 segment, offset
97 DW 0,OFFSET PCB64 ;AC024;PCB64 segment, offset
98 DW 0,OFFSET PCB65 ;AC024;PCB65 segment, offset
99 DW 0,OFFSET PCB66 ;AC024;PCB66 segment, offset
100 DW 0,OFFSET PCB67 ;AC024;PCB67 segment, offset
101 DW 0,OFFSET PCB68 ;AC024;PCB68 segment, offset
102 DW 0,OFFSET PCB69 ;AC024;PCB69 segment, offset
103 DW 0,OFFSET PCB70 ;AC024;PCB70 segment, offset
104 DW 0,OFFSET PCB71 ;AC024;PCB71 segment, offset
105 DW 0,OFFSET PCB72 ;AC024;PCB72 segment, offset
106 DW 0,OFFSET PCB73 ;AC024;PCB73 segment, offset
107 DW 0,OFFSET PCB74 ;AC024;PCB74 segment, offset
108 DW 0,OFFSET PCB75 ;AC024;PCB75 segment, offset
109 DW 0,OFFSET PCB76 ;AC024;PCB76 segment, offset
110 DW 0,OFFSET PCB77 ;AC024;PCB77 segment, offset
111 DW 0,OFFSET PCB78 ;AC024;PCB78 segment, offset
112 DW 0,OFFSET PCB79 ;AC024;PCB79 segment, offset
113 DW 0,OFFSET PCB80 ;AC024;PCB80 segment, offset
114 DW 0,OFFSET PCB81 ;AC024;PCB81 segment, offset
115 DW 0,OFFSET PCB82 ;AC024;PCB82 segment, offset
116 DW 0,OFFSET PCB83 ;AC024;PCB82 segment, offset
117 DW 0,OFFSET PCB84 ;AC024;PCB84 segment, offset
118 DW 0,OFFSET PCB85 ;AC024;PCB85 segment, offset
119 DW 0,OFFSET PCB86 ;AC024;PCB86 segment, offset
120 DW 0,OFFSET PCB87 ;AC024;PCB87 segment, offset
121 DW 0,OFFSET PCB88 ;AC024;PCB88 segment, offset
122 DW 0,OFFSET PCB89 ;AC024;PCB89 segment, offset
123 DW 0,OFFSET PCB90 ;AC024;PCB90 segment, offset
124 DW 0,OFFSET PCB91 ;AC024;PCB91 segment, offset
125 DW 0,OFFSET PCB92 ;AC024;PCB92 segment, offset
126 DW 0,OFFSET PCB93 ;AC024;PCB93 segment, offset
127 DW 0,OFFSET PCB94 ;AC024;PCB94 segment, offset
128 DW 0,OFFSET PCB95 ;AC024;PCB95 segment, offset
129 DW 0,OFFSET PCB96 ;AC024;PCB96 segment, offset
130 DW 0,OFFSET PCB97 ;AC024;PCB97 segment, offset
131 DW 0,OFFSET PCB98 ;AC024;PCB98 segment, offset
132 DW 0,OFFSET PCB99 ;AC024;PCB99 segment, offset
133 DW 0,OFFSET PCB100 ;AC024;PCB100 segment, offset
134 DW 0,OFFSET PCB101 ;AC024;PCB101 segment, offset
135 DW 0,OFFSET PCB102 ;AC024;PCB102 segment, offset
136 DW 0,OFFSET PCB103 ;AC024;PCB102 segment, offset
137NUM_PCB EQU ($-PCB_VECTOR)/4;AN024;
138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
139;
140; PAN_WELCOME EQU 1 ; Welcome Screen
141;
142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
143PCB1 LABEL WORD ;AN000;
144 DW PCB_EXP ;AN000;option word
145 DB 0 ;AN000;GHG new adds
146 DB 0 ;AN000;GHG new adds
147 DB 0 ;AN000;GHG new adds
148 DW 1 ;AN000;row location of panel
149 DW (80-PANEL1_W)/2 ;AN000;column location of panel
150 DW PANEL1_W ;AN000;text char width of panel
151 DW 0 ;AN000;Max poss panel sizing in text
152 DW WHITE_BLUE ;AN000;Index number of log color
153 DB '�Ŀ�����' ;AN000;8 log border characters
154 DW 0 ;AN000;Length compress panel in mem
155 DW 0 ;AN000;Off addr compressed panel
156 DW 0 ;AN000;Seg addr compressed panel
157 DW PANEL1_W*PANEL1_L;AN000;Length expanded panel in mem
158 DW OFFSET PANEL1 ;AN000;Off addr of expanded panel in
159 DW 0 ;AN000;Seg addr of expanded panel in
160 DW 0 ;AN000;Len of the mixed panel in mem
161 DW 0 ;AN000;Off addr of mixed panel in mem
162 DW 0 ;AN000;Seg addr of mixed panel in mem
163 DW 0 ;AN000;Len of the panel label
164 DW 0 ;AN000;Off addr of the panel label
165 DW 0 ;AN000;Seg addr of the panel label
166 DW 0 ;AN000;Beg relative row of panel label
167 DW 0 ;AN000;Beg relative col of panel label
168 DW 0 ;AN000;Len of the panel stored in file
169 DW 0 ;AN000;Off address of full filespec
170 DW 0 ;AN000;Seg address of full filespec
171 DW 0 ;AN000;Lower off word of the beg off
172 DW 0 ;AN000;High off word of the beg off
173 DW 9 DUP(0) ;AN000;Reserved for scroll and size
174 DW 2 ;AN000;Number of child panel entries
175 DW OFFSET CHILD2 ;AN000;Off address of child panel table
176 DW 0 ;AN000;Seg address of child panel table
177 DW 10 DUP(0) ;AN000;
178
179CHILD2 LABEL WORD ;AN000;
180 DW CHILD_ENTER ;AN000;child PCB element number
181 DW 25 ;AN000;row override
182 DW 1 ;AN000;column override
183 DW BLACK_WHITE ;AN000;color index pointer override
184 DW 9 ;AN000;function key attribute
185 DB 0,0; ENTER,0 ;AN000;keystroke associated with child
186 DW CHD_ABS ;AN000;option word
187
188 DW CHILD_QUIT ;AN000;child PCB element number
189 DW 25 ;AN000;row override
190 DW PANEL52_W+3 ;AN000;column override
191 DW BLACK_WHITE ;AN000;color index pointer override
192 DW 9 ;AN000;function key attribute
193 DB 0,0; ESCAPE,0 ;AN000;keystroke associated with child
194 DW CHD_ABS ;AN000;option word
195
196 DW CHILD_F1HELP ;AN000;child PCB element number
197 DW 25 ;AN000;row override
198 DW PANEL52_W+3+PANEL51_W+2 ;AC028;column override
199 DW BLACK_WHITE ;AN000;color index pointer override
200 DW 9 ;AN000;function key attribute
201 DB 0,0; 0,F1 ;AN000;keystroke associated with child
202 DW CHD_ABS ;AN000;option word
203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
204;
205; PAN_INTRO EQU 2 ; Introduction Screen
206;
207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
208PCB2 LABEL WORD ;AN000;
209 DW PCB_EXP ;AN000;option word
210 DB 0 ;AN000;GHG new adds
211 DB 0 ;AN000;GHG new adds
212 DB 0 ;AN000;GHG new adds
213 DW 1 ;AN000;row location of panel
214 DW LEFT_COL ;AN000;column location of panel
215 DW PANEL2_W ;AN000;text char width of panel
216 DW 0 ;AN000;Max poss panel sizing in text
217 DW WHITE_BLUE ;AN000;Index number of log color
218 DB '�Ŀ�����' ;AN000;8 log border characters
219 DW 0 ;AN000;Length compress panel in mem
220 DW 0 ;AN000;Off addr compressed panel
221 DW 0 ;AN000;Seg addr compressed panel
222 DW PANEL2_W*PANEL2_L;AN000;Length expanded panel in mem
223 DW OFFSET PANEL2 ;AN000;Off addr of expanded panel in
224 DW 0 ;AN000;Seg addr of expanded panel in
225 DW 0 ;AN000;Len of the mixed panel in mem
226 DW 0 ;AN000;Off addr of mixed panel in mem
227 DW 0 ;AN000;Seg addr of mixed panel in mem
228 DW 0 ;AN000;Len of the panel label
229 DW 0 ;AN000;Off addr of the panel label
230 DW 0 ;AN000;Seg addr of the panel label
231 DW 0 ;AN000;Beg relative row of panel label
232 DW 0 ;AN000;Beg relative col of panel label
233 DW 0 ;AN000;Len of the panel stored in file
234 DW 0 ;AN000;Off address of full filespec
235 DW 0 ;AN000;Seg address of full filespec
236 DW 0 ;AN000;Lower off word of the beg off
237 DW 0 ;AN000;High off word of the beg off
238 DW 9 DUP(0) ;AN000;Reserved for scroll and size
239 DW 2 ;AN000;Number of child panel entries
240 DW OFFSET CHILD2 ;AN000;Off address of child panel table
241 DW 0 ;AN000;Seg address of child panel table
242 DW 10 DUP(0) ;AN000;GHG new adds
243;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
244;
245; PAN_CONFIRM EQU 3 ; Confirmation Screen
246;
247;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
248PCB3 LABEL WORD ;AN000;
249 DW PCB_EXP ;AN000;option word
250 DB 0 ;AN000;GHG new adds
251 DB 0 ;AN000;GHG new adds
252 DB 0 ;AN000;GHG new adds
253 DW 1 ;AN000;row location of panel
254 DW (80-PANEL3_W)/2 ;AN000;column location of panel
255 DW PANEL3_W ;AN000;text char width of panel
256 DW 0 ;AN000;Max poss panel sizing in text
257 DW WHITE_BLUE ;AN000;Index number of log color
258 DB '�Ŀ�����' ;AN000;8 log border characters
259 DW 0 ;AN000;Length compress panel in mem
260 DW 0 ;AN000;Off addr compressed panel
261 DW 0 ;AN000;Seg addr compressed panel
262 DW PANEL3_W*PANEL3_L;AN000;Length expanded panel in mem
263 DW OFFSET PANEL3 ;AN000;Off addr of expanded panel in
264 DW 0 ;AN000;Seg addr of expanded panel in
265 DW 0 ;AN000;Len of the mixed panel in mem
266 DW 0 ;AN000;Off addr of mixed panel in mem
267 DW 0 ;AN000;Seg addr of mixed panel in mem
268 DW 0 ;AN000;Len of the panel label
269 DW 0 ;AN000;Off addr of the panel label
270 DW 0 ;AN000;Seg addr of the panel label
271 DW 0 ;AN000;Beg relative row of panel label
272 DW 0 ;AN000;Beg relative col of panel label
273 DW 0 ;AN000;Len of the panel stored in file
274 DW 0 ;AN000;Off address of full filespec
275 DW 0 ;AN000;Seg address of full filespec
276 DW 0 ;AN000;Lower off word of the beg off
277 DW 0 ;AN000;High off word of the beg off
278 DW 9 DUP(0) ;AN000;Reserved for scroll and size
279 DW 2 ;AN000;Number of child panel entries
280 DW OFFSET CHILD4 ;AN000;Off address of child panel table
281 DW 0 ;AN000;Seg address of child panel table
282 DW 10 DUP(0) ;AN000;GHG new adds
283
284CHILD4 LABEL WORD ;AN000;
285 DW CHILD_F3EXIT ;AN000;child PCB element number
286 DW 25 ;AN000;row override
287 DW 1 ;AN000;column override
288 DW WHITE_RED ;AN000;color index pointer override
289 DW 9 ;AN000;function key attribute
290 DB 0,0; 0,F3 ;AN000;keystroke associated with child
291 DW CHD_ABS ;AN000;option word
292
293 DW CHILD_ENTER ;AN000;child PCB element number
294 DW 25 ;AN000;row override
295 DW PANEL40_W+3 ;AN000;column override
296 DW WHITE_RED ;AN000;color index pointer override
297 DW 9 ;AN000;function key attribute
298 DB 0,0; 13,0 ;AN000;keystroke associated with child
299 DW CHD_ABS ;AN000;option word
300;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
301;
302; PAN_WORKSPACE EQU 4 ; User memory needs screen
303;
304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
305PCB4 LABEL WORD ;AN000;
306 DW PCB_EXP ;AN000;option word
307 DB 0 ;AN000;GHG new adds
308 DB 0 ;AN000;GHG new adds
309 DB 0 ;AN000;GHG new adds
310 DW 1 ;AN000;row location of panel
311 DW LEFT_COL ;AN000;column location of panel
312 DW PANEL4_W ;AN000;text char width of panel
313 DW 0 ;AN000;Max poss panel sizing in text
314 DW WHITE_BLUE ;AN000;Index number of log color
315 DB '�Ŀ�����' ;AN000;8 log border characters
316 DW 0 ;AN000;Length compress panel in mem
317 DW 0 ;AN000;Off addr compressed panel
318 DW 0 ;AN000;Seg addr compressed panel
319 DW PANEL4_W*PANEL4_L;AN000;Length expanded panel in mem
320 DW OFFSET PANEL4 ;AN000;Off addr of expanded panel in
321 DW 0 ;AN000;Seg addr of expanded panel in
322 DW 0 ;AN000;Len of the mixed panel in mem
323 DW 0 ;AN000;Off addr of mixed panel in mem
324 DW 0 ;AN000;Seg addr of mixed panel in mem
325 DW 0 ;AN000;Len of the panel label
326 DW 0 ;AN000;Off addr of the panel label
327 DW 0 ;AN000;Seg addr of the panel label
328 DW 0 ;AN000;Beg relative row of panel label
329 DW 0 ;AN000;Beg relative col of panel label
330 DW 0 ;AN000;Len of the panel stored in file
331 DW 0 ;AN000;Off address of full filespec
332 DW 0 ;AN000;Seg address of full filespec
333 DW 0 ;AN000;Lower off word of the beg off
334 DW 0 ;AN000;High off word of the beg off
335 DW 9 DUP(0) ;AN000;Reserved for scroll and size
336 DW 3 ;AN000;Number of child panel entries
337 DW OFFSET CHILD2 ;AN000;Off address of child panel table
338 DW 0 ;AN000;Seg address of child panel table
339 DW 10 DUP(0) ;AN000;GHG new adds
340;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
341;
342; PAN_CTY_KYB EQU 5 ;
343;
344;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
345PCB5 LABEL WORD ;AN000;
346 DW PCB_EXP ;AN000;option word
347 DB 0 ;AN000;GHG new adds
348 DB 0 ;AN000;GHG new adds
349 DB 0 ;AN000;GHG new adds
350 DW 1 ;AN000;row location of panel
351 DW LEFT_COL ;AN000;column location of panel
352 DW PANEL5_W ;AN000;text char width of panel
353 DW 0 ;AN000;Max poss panel sizing in text
354 DW WHITE_BLUE ;AN000;Index number of log color
355 DB '�Ŀ�����' ;AN000;8 log border characters
356 DW 0 ;AN000;Length compress panel in mem
357 DW 0 ;AN000;Off addr compressed panel
358 DW 0 ;AN000;Seg addr compressed panel
359 DW PANEL5_W*PANEL5_L;AN000;Length expanded panel in mem
360 DW OFFSET PANEL5 ;AN000;Off addr of expanded panel in
361 DW 0 ;AN000;Seg addr of expanded panel in
362 DW 0 ;AN000;Len of the mixed panel in mem
363 DW 0 ;AN000;Off addr of mixed panel in mem
364 DW 0 ;AN000;Seg addr of mixed panel in mem
365 DW 0 ;AN000;Len of the panel label
366 DW 0 ;AN000;Off addr of the panel label
367 DW 0 ;AN000;Seg addr of the panel label
368 DW 0 ;AN000;Beg relative row of panel label
369 DW 0 ;AN000;Beg relative col of panel label
370 DW 0 ;AN000;Len of the panel stored in file
371 DW 0 ;AN000;Off address of full filespec
372 DW 0 ;AN000;Seg address of full filespec
373 DW 0 ;AN000;Lower off word of the beg off
374 DW 0 ;AN000;High off word of the beg off
375 DW 9 DUP(0) ;AN000;Reserved for scroll and size
376 DW 3 ;AN000;Number of child panel entries
377 DW OFFSET CHILD2 ;AN000;Off address of child panel table
378 DW 0 ;AN000;Seg address of child panel table
379 DW 10 DUP(0) ;AN000;GHG new adds
380;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
381;
382; PAN_COUNTRY EQU 6 ;
383;
384;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
385PCB6 LABEL WORD ;AN000;
386 DW PCB_EXP ;AN000;option word
387 DB 0 ;AN000;GHG new adds
388 DB 0 ;AN000;GHG new adds
389 DB 0 ;AN000;GHG new adds
390 DW 1 ;AN000;row location of panel
391 DW LEFT_COL ;AN000;column location of panel
392 DW PANEL6_W ;AN000;text char width of panel
393 DW 0 ;AN000;Max poss panel sizing in text
394 DW WHITE_BLUE ;AN000;Index number of log color
395 DB '�Ŀ�����' ;AN000;8 log border characters
396 DW 0 ;AN000;Length compress panel in mem
397 DW 0 ;AN000;Off addr compressed panel
398 DW 0 ;AN000;Seg addr compressed panel
399 DW PANEL6_W*PANEL6_L;AN000;Length expanded panel in mem
400 DW OFFSET PANEL6 ;AN000;Off addr of expanded panel in
401 DW 0 ;AN000;Seg addr of expanded panel in
402 DW 0 ;AN000;Len of the mixed panel in mem
403 DW 0 ;AN000;Off addr of mixed panel in mem
404 DW 0 ;AN000;Seg addr of mixed panel in mem
405 DW 0 ;AN000;Len of the panel label
406 DW 0 ;AN000;Off addr of the panel label
407 DW 0 ;AN000;Seg addr of the panel label
408 DW 0 ;AN000;Beg relative row of panel label
409 DW 0 ;AN000;Beg relative col of panel label
410 DW 0 ;AN000;Len of the panel stored in file
411 DW 0 ;AN000;Off address of full filespec
412 DW 0 ;AN000;Seg address of full filespec
413 DW 0 ;AN000;Lower off word of the beg off
414 DW 0 ;AN000;High off word of the beg off
415 DW 9 DUP(0) ;AN000;Reserved for scroll and size
416 DW 3 ;AN000;Number of child panel entries
417 DW OFFSET CHILD2 ;AN000;Off address of child panel table
418 DW 0 ;AN000;Seg address of child panel table
419 DW 10 DUP(0) ;AN000;GHG new adds
420;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
421;
422; PAN_KEYBOARD EQU 7 ;
423;
424;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
425PCB7 LABEL WORD ;AN000;
426 DW PCB_EXP ;AN000;option word
427 DB 0 ;AN000;GHG new adds
428 DB 0 ;AN000;GHG new adds
429 DB 0 ;AN000;GHG new adds
430 DW 1 ;AN000;row location of panel
431 DW LEFT_COL ;AN000;column location of panel
432 DW PANEL7_W ;AN000;text char width of panel
433 DW 0 ;AN000;Max poss panel sizing in text
434 DW WHITE_BLUE ;AN000;Index number of log color
435 DB '�Ŀ�����' ;AN000;8 log border characters
436 DW 0 ;AN000;Length compress panel in mem
437 DW 0 ;AN000;Off addr compressed panel
438 DW 0 ;AN000;Seg addr compressed panel
439 DW PANEL7_W*PANEL7_L;AN000;Length expanded panel in mem
440 DW OFFSET PANEL7 ;AN000;Off addr of expanded panel in
441 DW 0 ;AN000;Seg addr of expanded panel in
442 DW 0 ;AN000;Len of the mixed panel in mem
443 DW 0 ;AN000;Off addr of mixed panel in mem
444 DW 0 ;AN000;Seg addr of mixed panel in mem
445 DW 0 ;AN000;Len of the panel label
446 DW 0 ;AN000;Off addr of the panel label
447 DW 0 ;AN000;Seg addr of the panel label
448 DW 0 ;AN000;Beg relative row of panel label
449 DW 0 ;AN000;Beg relative col of panel label
450 DW 0 ;AN000;Len of the panel stored in file
451 DW 0 ;AN000;Off address of full filespec
452 DW 0 ;AN000;Seg address of full filespec
453 DW 0 ;AN000;Lower off word of the beg off
454 DW 0 ;AN000;High off word of the beg off
455 DW 9 DUP(0) ;AN000;Reserved for scroll and size
456 DW 3 ;AN000;Number of child panel entries
457 DW OFFSET CHILD2 ;AN000;Off address of child panel table
458 DW 0 ;AN000;Seg address of child panel table
459 DW 10 DUP(0) ;AN000;GHG new adds
460;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
461;
462; PAN_KYBD_ALT EQU 8 ;
463;
464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
465PCB8 LABEL WORD ;AN000;
466 DW PCB_EXP ;AN000;option word
467 DB 0 ;AN000;GHG new adds
468 DB 0 ;AN000;GHG new adds
469 DB 0 ;AN000;GHG new adds
470 DW 1 ;AN000;row location of panel
471 DW LEFT_COL ;AN000;column location of panel
472 DW PANEL8_W ;AN000;text char width of panel
473 DW 0 ;AN000;Max poss panel sizing in text
474 DW WHITE_BLUE ;AN000;Index number of log color
475 DB '�Ŀ�����' ;AN000;8 log border characters
476 DW 0 ;AN000;Length compress panel in mem
477 DW 0 ;AN000;Off addr compressed panel
478 DW 0 ;AN000;Seg addr compressed panel
479 DW PANEL8_W*PANEL8_L;AN000;Length expanded panel in mem
480 DW OFFSET PANEL8 ;AN000;Off addr of expanded panel in
481 DW 0 ;AN000;Seg addr of expanded panel in
482 DW 0 ;AN000;Len of the mixed panel in mem
483 DW 0 ;AN000;Off addr of mixed panel in mem
484 DW 0 ;AN000;Seg addr of mixed panel in mem
485 DW 0 ;AN000;Len of the panel label
486 DW 0 ;AN000;Off addr of the panel label
487 DW 0 ;AN000;Seg addr of the panel label
488 DW 0 ;AN000;Beg relative row of panel label
489 DW 0 ;AN000;Beg relative col of panel label
490 DW 0 ;AN000;Len of the panel stored in file
491 DW 0 ;AN000;Off address of full filespec
492 DW 0 ;AN000;Seg address of full filespec
493 DW 0 ;AN000;Lower off word of the beg off
494 DW 0 ;AN000;High off word of the beg off
495 DW 9 DUP(0) ;AN000;Reserved for scroll and size
496 DW 3 ;AN000;Number of child panel entries
497 DW OFFSET CHILD2 ;AN000;Off address of child panel table
498 DW 0 ;AN000;Seg address of child panel table
499 DW 10 DUP(0) ;AN000;GHG new adds
500;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
501;
502; PAN_DEST_DRIVE EQU 9 ;
503;
504;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
505PCB9 LABEL WORD ;AN000;
506 DW PCB_EXP ;AN000;option word
507 DB 0 ;AN000;GHG new adds
508 DB 0 ;AN000;GHG new adds
509 DB 0 ;AN000;GHG new adds
510 DW 1 ;AN000;row location of panel
511 DW LEFT_COL ;AN000;column location of panel
512 DW PANEL9_W ;AN000;text char width of panel
513 DW 0 ;AN000;Max poss panel sizing in text
514 DW WHITE_BLUE ;AN000;Index number of log color
515 DB '�Ŀ�����' ;AN000;8 log border characters
516 DW 0 ;AN000;Length compress panel in mem
517 DW 0 ;AN000;Off addr compressed panel
518 DW 0 ;AN000;Seg addr compressed panel
519 DW PANEL9_W*PANEL9_L ;AN000;Length expanded panel in mem
520 DW OFFSET PANEL9 ;AN000;Off addr of expanded panel in
521 DW 0 ;AN000;Seg addr of expanded panel in
522 DW 0 ;AN000;Len of the mixed panel in mem
523 DW 0 ;AN000;Off addr of mixed panel in mem
524 DW 0 ;AN000;Seg addr of mixed panel in mem
525 DW 0 ;AN000;Len of the panel label
526 DW 0 ;AN000;Off addr of the panel label
527 DW 0 ;AN000;Seg addr of the panel label
528 DW 0 ;AN000;Beg relative row of panel label
529 DW 0 ;AN000;Beg relative col of panel label
530 DW 0 ;AN000;Len of the panel stored in file
531 DW 0 ;AN000;Off address of full filespec
532 DW 0 ;AN000;Seg address of full filespec
533 DW 0 ;AN000;Lower off word of the beg off
534 DW 0 ;AN000;High off word of the beg off
535 DW 9 DUP(0) ;AN000;Reserved for scroll and size
536 DW 3 ;AN000;Number of child panel entries
537 DW OFFSET CHILD2 ;AN000;Off address of child panel table
538 DW 0 ;AN000;Seg address of child panel table
539 DW 10 DUP(0) ;AN000;GHG new adds
540;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
541;
542; PAN_DOS_LOC EQU 10 ;
543;
544;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
545PCB10 LABEL WORD ;AN000;
546 DW PCB_EXP ;AN000;option word
547 DB 0 ;AN000;GHG new adds
548 DB 0 ;AN000;GHG new adds
549 DB 0 ;AN000;GHG new adds
550 DW 1 ;AN000;row location of panel
551 DW LEFT_COL ;AN000;column location of panel
552 DW PANEL10_W ;AN000;text char width of panel
553 DW 0 ;AN000;Max poss panel sizing in text
554 DW WHITE_BLUE ;AN000;Index number of log color
555 DB '�Ŀ�����' ;AN000;8 log border characters
556 DW 0 ;AN000;Length compress panel in mem
557 DW 0 ;AN000;Off addr compressed panel
558 DW 0 ;AN000;Seg addr compressed panel
559 DW PANEL10_W*PANEL10_L;AN000;Length expanded panel in mem
560 DW OFFSET PANEL10 ;AN000;Off addr of expanded panel in
561 DW 0 ;AN000;Seg addr of expanded panel in
562 DW 0 ;AN000;Len of the mixed panel in mem
563 DW 0 ;AN000;Off addr of mixed panel in mem
564 DW 0 ;AN000;Seg addr of mixed panel in mem
565 DW 0 ;AN000;Len of the panel label
566 DW 0 ;AN000;Off addr of the panel label
567 DW 0 ;AN000;Seg addr of the panel label
568 DW 0 ;AN000;Beg relative row of panel label
569 DW 0 ;AN000;Beg relative col of panel label
570 DW 0 ;AN000;Len of the panel stored in file
571 DW 0 ;AN000;Off address of full filespec
572 DW 0 ;AN000;Seg address of full filespec
573 DW 0 ;AN000;Lower off word of the beg off
574 DW 0 ;AN000;High off word of the beg off
575 DW 9 DUP(0) ;AN000;Reserved for scroll and size
576 DW 3 ;AN000;Number of child panel entries
577 DW OFFSET CHILD2 ;AN000;Off address of child panel table
578 DW 0 ;AN000;Seg address of child panel table
579 DW 10 DUP(0) ;AN000;GHG new adds
580;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
581;
582; PAN_PRINTER EQU 11 ;
583;
584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
585PCB11 LABEL WORD ;AN000;
586 DW PCB_EXP ;AN000;option word
587 DB 0 ;AN000;GHG new adds
588 DB 0 ;AN000;GHG new adds
589 DB 0 ;AN000;GHG new adds
590 DW 1 ;AN000;row location of panel
591 DW LEFT_COL ;AN000;column location of panel
592 DW PANEL11_W ;AN000;text char width of panel
593 DW 0 ;AN000;Max poss panel sizing in text
594 DW WHITE_BLUE ;AN000;Index number of log color
595 DB '�Ŀ�����' ;AN000;8 log border characters
596 DW 0 ;AN000;Length compress panel in mem
597 DW 0 ;AN000;Off addr compressed panel
598 DW 0 ;AN000;Seg addr compressed panel
599 DW PANEL11_W*PANEL11_L;AN000;Length expanded panel in mem
600 DW OFFSET PANEL11 ;AN000;Off addr of expanded panel in
601 DW 0 ;AN000;Seg addr of expanded panel in
602 DW 0 ;AN000;Len of the mixed panel in mem
603 DW 0 ;AN000;Off addr of mixed panel in mem
604 DW 0 ;AN000;Seg addr of mixed panel in mem
605 DW 0 ;AN000;Len of the panel label
606 DW 0 ;AN000;Off addr of the panel label
607 DW 0 ;AN000;Seg addr of the panel label
608 DW 0 ;AN000;Beg relative row of panel label
609 DW 0 ;AN000;Beg relative col of panel label
610 DW 0 ;AN000;Len of the panel stored in file
611 DW 0 ;AN000;Off address of full filespec
612 DW 0 ;AN000;Seg address of full filespec
613 DW 0 ;AN000;Lower off word of the beg off
614 DW 0 ;AN000;High off word of the beg off
615 DW 9 DUP(0) ;AN000;Reserved for scroll and size
616 DW 3 ;AN000;Number of child panel entries
617 DW OFFSET CHILD2 ;AN000;Off address of child panel table
618 DW 0 ;AN000;Seg address of child panel table
619 DW 10 DUP(0) ;AN000;GHG new adds
620;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
621;
622; PAN_PRT_TYPE EQU 12 ;
623;
624;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
625PCB12 LABEL WORD ;AN000;
626 DW PCB_EXP ;AN000;option word
627 DB 0 ;AN000;GHG new adds
628 DB 0 ;AN000;GHG new adds
629 DB 0 ;AN000;GHG new adds
630 DW 1 ;AN000;row location of panel
631 DW LEFT_COL ;AN000;column location of panel
632 DW PANEL12_W ;AN000;text char width of panel
633 DW 0 ;AN000;Max poss panel sizing in text
634 DW WHITE_BLUE ;AN000;Index number of log color
635 DB '�Ŀ�����' ;AN000;8 log border characters
636 DW 0 ;AN000;Length compress panel in mem
637 DW 0 ;AN000;Off addr compressed panel
638 DW 0 ;AN000;Seg addr compressed panel
639 DW PANEL12_W*PANEL12_L;AN000;Length expanded panel in mem
640 DW OFFSET PANEL12 ;AN000;Off addr of expanded panel in
641 DW 0 ;AN000;Seg addr of expanded panel in
642 DW 0 ;AN000;Len of the mixed panel in mem
643 DW 0 ;AN000;Off addr of mixed panel in mem
644 DW 0 ;AN000;Seg addr of mixed panel in mem
645 DW 0 ;AN000;Len of the panel label
646 DW 0 ;AN000;Off addr of the panel label
647 DW 0 ;AN000;Seg addr of the panel label
648 DW 0 ;AN000;Beg relative row of panel label
649 DW 0 ;AN000;Beg relative col of panel label
650 DW 0 ;AN000;Len of the panel stored in file
651 DW 0 ;AN000;Off address of full filespec
652 DW 0 ;AN000;Seg address of full filespec
653 DW 0 ;AN000;Lower off word of the beg off
654 DW 0 ;AN000;High off word of the beg off
655 DW 9 DUP(0) ;AN000;Reserved for scroll and size
656 DW 3 ;AN000;Number of child panel entries
657 DW OFFSET CHILD2 ;AN000;Off address of child panel table
658 DW 0 ;AN000;Seg address of child panel table
659 DW 10 DUP(0) ;AN000;GHG new adds
660;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
661;
662; PAN_PARALLEL EQU 13 ;
663;
664;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
665PCB13 LABEL WORD ;AN000;
666 DW PCB_EXP ;AN000;option word
667 DB 0 ;AN000;GHG new adds
668 DB 0 ;AN000;GHG new adds
669 DB 0 ;AN000;GHG new adds
670 DW 1 ;AN000;row location of panel
671 DW LEFT_COL ;AN000;column location of panel
672 DW PANEL13_W ;AN000;text char width of panel
673 DW 0 ;AN000;Max poss panel sizing in text
674 DW WHITE_BLUE ;AN000;Index number of log color
675 DB '�Ŀ�����' ;AN000;8 log border characters
676 DW 0 ;AN000;Length compress panel in mem
677 DW 0 ;AN000;Off addr compressed panel
678 DW 0 ;AN000;Seg addr compressed panel
679 DW PANEL13_W*PANEL13_L;AN000;Length expanded panel in mem
680 DW OFFSET PANEL13 ;AN000;Off addr of expanded panel in
681 DW 0 ;AN000;Seg addr of expanded panel in
682 DW 0 ;AN000;Len of the mixed panel in mem
683 DW 0 ;AN000;Off addr of mixed panel in mem
684 DW 0 ;AN000;Seg addr of mixed panel in mem
685 DW 0 ;AN000;Len of the panel label
686 DW 0 ;AN000;Off addr of the panel label
687 DW 0 ;AN000;Seg addr of the panel label
688 DW 0 ;AN000;Beg relative row of panel label
689 DW 0 ;AN000;Beg relative col of panel label
690 DW 0 ;AN000;Len of the panel stored in file
691 DW 0 ;AN000;Off address of full filespec
692 DW 0 ;AN000;Seg address of full filespec
693 DW 0 ;AN000;Lower off word of the beg off
694 DW 0 ;AN000;High off word of the beg off
695 DW 9 DUP(0) ;AN000;Reserved for scroll and size
696 DW 3 ;AN000;Number of child panel entries
697 DW OFFSET CHILD2 ;AN000;Off address of child panel table
698 DW 0 ;AN000;Seg address of child panel table
699 DW 10 DUP(0) ;AN000;GHG new adds
700;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
701;
702; PAN_SERIAL EQU 14 ;
703;
704;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
705PCB14 LABEL WORD ;AN000;
706 DW PCB_EXP ;AN000;option word
707 DB 0 ;AN000;GHG new adds
708 DB 0 ;AN000;GHG new adds
709 DB 0 ;AN000;GHG new adds
710 DW 1 ;AN000;row location of panel
711 DW LEFT_COL ;AN000;column location of panel
712 DW PANEL14_W ;AN000;text char width of panel
713 DW 0 ;AN000;Max poss panel sizing in text
714 DW WHITE_BLUE ;AN000;Index number of log color
715 DB '�Ŀ�����' ;AN000;8 log border characters
716 DW 0 ;AN000;Length compress panel in mem
717 DW 0 ;AN000;Off addr compressed panel
718 DW 0 ;AN000;Seg addr compressed panel
719 DW PANEL14_W*PANEL14_L;AN000;Length expanded panel in mem
720 DW OFFSET PANEL14 ;AN000;Off addr of expanded panel in
721 DW 0 ;AN000;Seg addr of expanded panel in
722 DW 0 ;AN000;Len of the mixed panel in mem
723 DW 0 ;AN000;Off addr of mixed panel in mem
724 DW 0 ;AN000;Seg addr of mixed panel in mem
725 DW 0 ;AN000;Len of the panel label
726 DW 0 ;AN000;Off addr of the panel label
727 DW 0 ;AN000;Seg addr of the panel label
728 DW 0 ;AN000;Beg relative row of panel label
729 DW 0 ;AN000;Beg relative col of panel label
730 DW 0 ;AN000;Len of the panel stored in file
731 DW 0 ;AN000;Off address of full filespec
732 DW 0 ;AN000;Seg address of full filespec
733 DW 0 ;AN000;Lower off word of the beg off
734 DW 0 ;AN000;High off word of the beg off
735 DW 9 DUP(0) ;AN000;Reserved for scroll and size
736 DW 3 ;AN000;Number of child panel entries
737 DW OFFSET CHILD2 ;AN000;Off address of child panel table
738 DW 0 ;AN000;Seg address of child panel table
739 DW 10 DUP(0) ;AN000;GHG new adds
740;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
741;
742; PAN_REVIEW EQU 15 ;
743;
744;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
745PCB15 LABEL WORD ;AN000;
746 DW PCB_EXP ;AN000;option word
747 DB 0 ;AN000;GHG new adds
748 DB 0 ;AN000;GHG new adds
749 DB 0 ;AN000;GHG new adds
750 DW 1 ;AN000;row location of panel
751 DW LEFT_COL ;AN000;column location of panel
752 DW PANEL15_W ;AN000;text char width of panel
753 DW 0 ;AN000;Max poss panel sizing in text
754 DW WHITE_BLUE ;AN000;Index number of log color
755 DB '�Ŀ�����' ;AN000;8 log border characters
756 DW 0 ;AN000;Length compress panel in mem
757 DW 0 ;AN000;Off addr compressed panel
758 DW 0 ;AN000;Seg addr compressed panel
759 DW PANEL15_W*PANEL15_L;AN000;Length expanded panel in mem
760 DW OFFSET PANEL15 ;AN000;Off addr of expanded panel in
761 DW 0 ;AN000;Seg addr of expanded panel in
762 DW 0 ;AN000;Len of the mixed panel in mem
763 DW 0 ;AN000;Off addr of mixed panel in mem
764 DW 0 ;AN000;Seg addr of mixed panel in mem
765 DW 0 ;AN000;Len of the panel label
766 DW 0 ;AN000;Off addr of the panel label
767 DW 0 ;AN000;Seg addr of the panel label
768 DW 0 ;AN000;Beg relative row of panel label
769 DW 0 ;AN000;Beg relative col of panel label
770 DW 0 ;AN000;Len of the panel stored in file
771 DW 0 ;AN000;Off address of full filespec
772 DW 0 ;AN000;Seg address of full filespec
773 DW 0 ;AN000;Lower off word of the beg off
774 DW 0 ;AN000;High off word of the beg off
775 DW 9 DUP(0) ;AN000;Reserved for scroll and size
776 DW 3 ;AN000;Number of child panel entries
777 DW OFFSET CHILD2 ;AN000;Off address of child panel table
778 DW 0 ;AN000;Seg address of child panel table
779 DW 10 DUP(0) ;AN000;GHG new adds
780;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
781;
782; PAN_FUNC_DISK EQU 16 ;
783;
784;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
785PCB16 LABEL WORD ;AN000;
786 DW PCB_EXP ;AN000;option word
787 DB 0 ;AN000;GHG new adds
788 DB 0 ;AN000;GHG new adds
789 DB 0 ;AN000;GHG new adds
790 DW 1 ;AN000;row location of panel
791 DW LEFT_COL ;AN000;column location of panel
792 DW PANEL16_W ;AN000;text char width of panel
793 DW 0 ;AN000;Max poss panel sizing in text
794 DW WHITE_BLUE ;AN000;Index number of log color
795 DB '�Ŀ�����' ;AN000;8 log border characters
796 DW 0 ;AN000;Length compress panel in mem
797 DW 0 ;AN000;Off addr compressed panel
798 DW 0 ;AN000;Seg addr compressed panel
799 DW PANEL16_W*PANEL16_L;AN000;Length expanded panel in mem
800 DW OFFSET PANEL16 ;AN000;Off addr of expanded panel in
801 DW 0 ;AN000;Seg addr of expanded panel in
802 DW 0 ;AN000;Len of the mixed panel in mem
803 DW 0 ;AN000;Off addr of mixed panel in mem
804 DW 0 ;AN000;Seg addr of mixed panel in mem
805 DW 0 ;AN000;Len of the panel label
806 DW 0 ;AN000;Off addr of the panel label
807 DW 0 ;AN000;Seg addr of the panel label
808 DW 0 ;AN000;Beg relative row of panel label
809 DW 0 ;AN000;Beg relative col of panel label
810 DW 0 ;AN000;Len of the panel stored in file
811 DW 0 ;AN000;Off address of full filespec
812 DW 0 ;AN000;Seg address of full filespec
813 DW 0 ;AN000;Lower off word of the beg off
814 DW 0 ;AN000;High off word of the beg off
815 DW 9 DUP(0) ;AN000;Reserved for scroll and size
816 DW 3 ;AN000;Number of child panel entries
817 DW OFFSET CHILD2 ;AN000;Off address of child panel table
818 DW 0 ;AN000;Seg address of child panel table
819 DW 10 DUP(0) ;AN000;GHG new adds
820;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
821;
822; err_prt_no_hdwr EQU 17 ;
823;
824;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
825PCB17 LABEL WORD ;AN000;
826 DW PCB_EXP ;AN000;option word
827 DB 0 ;AN000;GHG new adds
828 DB 0 ;AN000;GHG new adds
829 DB 0 ;AN000;GHG new adds
830 DW 11 ;AN000;row location of panel
831 DW LEFT_COL+1 ;AN000;column location of panel
832 DW PANEL17_W ;AN000;text char width of panel
833 DW 0 ;AN000;Max poss panel sizing in text
834 DW WHITE_RED ;AN000;Index number of log color
835 DB '�Ŀ�����' ;AN000;8 log border characters
836 DW 0 ;AN000;Length compress panel in mem
837 DW 0 ;AN000;Off addr compressed panel
838 DW 0 ;AN000;Seg addr compressed panel
839 DW PANEL17_W*PANEL17_L;AN000;Length expanded panel in mem
840 DW OFFSET PANEL17 ;AN000;Off addr of expanded panel in
841 DW 0 ;AN000;Seg addr of expanded panel in
842 DW 0 ;AN000;Len of the mixed panel in mem
843 DW 0 ;AN000;Off addr of mixed panel in mem
844 DW 0 ;AN000;Seg addr of mixed panel in mem
845 DW 0 ;AN000;Len of the panel label
846 DW 0 ;AN000;Off addr of the panel label
847 DW 0 ;AN000;Seg addr of the panel label
848 DW 0 ;AN000;Beg relative row of panel label
849 DW 0 ;AN000;Beg relative col of panel label
850 DW 0 ;AN000;Len of the panel stored in file
851 DW 0 ;AN000;Off address of full filespec
852 DW 0 ;AN000;Seg address of full filespec
853 DW 0 ;AN000;Lower off word of the beg off
854 DW 0 ;AN000;High off word of the beg off
855 DW 9 DUP(0) ;AN000;Reserved for scroll and size
856 DW 0 ;AN000;Number of child panel entries
857 DW 0 ;AN000;Off address of child panel table
858 DW 0 ;AN000;Seg address of child panel table
859 DW 10 DUP(0) ;AN000;GHG new adds
860;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
861;
862; PAN_DOS_PARAM EQU 18 ;
863;
864;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
865PCB18 LABEL WORD ;AN000;
866 DW PCB_EXP ;AN000;option word
867 DB 0 ;AN000;GHG new adds
868 DB 0 ;AN000;GHG new adds
869 DB 0 ;AN000;GHG new adds
870 DW 1 ;AN000;row location of panel
871 DW LEFT_COL ;AN000;column location of panel
872 DW PANEL18_W ;AN000;text char width of panel
873 DW 0 ;AN000;Max poss panel sizing in text
874 DW WHITE_BLUE ;AN000;Index number of log color
875 DB '�Ŀ�����' ;AN000;8 log border characters
876 DW 0 ;AN000;Length compress panel in mem
877 DW 0 ;AN000;Off addr compressed panel
878 DW 0 ;AN000;Seg addr compressed panel
879 DW PANEL18_W*PANEL18_L;AN000;Length expanded panel in mem
880 DW OFFSET PANEL18 ;AN000;Off addr of expanded panel in
881 DW 0 ;AN000;Seg addr of expanded panel in
882 DW 0 ;AN000;Len of the mixed panel in mem
883 DW 0 ;AN000;Off addr of mixed panel in mem
884 DW 0 ;AN000;Seg addr of mixed panel in mem
885 DW 0 ;AN000;Len of the panel label
886 DW 0 ;AN000;Off addr of the panel label
887 DW 0 ;AN000;Seg addr of the panel label
888 DW 0 ;AN000;Beg relative row of panel label
889 DW 0 ;AN000;Beg relative col of panel label
890 DW 0 ;AN000;Len of the panel stored in file
891 DW 0 ;AN000;Off address of full filespec
892 DW 0 ;AN000;Seg address of full filespec
893 DW 0 ;AN000;Lower off word of the beg off
894 DW 0 ;AN000;High off word of the beg off
895 DW 9 DUP(0) ;AN000;Reserved for scroll and size
896 DW 3 ;AN000;Number of child panel entries
897 DW OFFSET CHILD2 ;AN000;Off address of child panel table
898 DW 0 ;AN000;Seg address of child panel table
899 DW 10 DUP(0) ;AN000;GHG new adds
900;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
901;
902; PAN_SHELL EQU 19 ;
903;
904;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
905PCB19 LABEL WORD ;AN000;
906 DW PCB_EXP ;AN000;option word
907 DB 0 ;AN000;GHG new adds
908 DB 0 ;AN000;GHG new adds
909 DB 0 ;AN000;GHG new adds
910 DW 1 ;AN000;row location of panel
911 DW LEFT_COL ;AN000;column location of panel
912 DW PANEL19_W ;AN000;text char width of panel
913 DW 0 ;AN000;Max poss panel sizing in text
914 DW WHITE_BLUE ;AN000;Index number of log color
915 DB '�Ŀ�����' ;AN000;8 log border characters
916 DW 0 ;AN000;Length compress panel in mem
917 DW 0 ;AN000;Off addr compressed panel
918 DW 0 ;AN000;Seg addr compressed panel
919 DW PANEL19_W*PANEL19_L;AN000;Length expanded panel in mem
920 DW OFFSET PANEL19 ;AN000;Off addr of expanded panel in
921 DW 0 ;AN000;Seg addr of expanded panel in
922 DW 0 ;AN000;Len of the mixed panel in mem
923 DW 0 ;AN000;Off addr of mixed panel in mem
924 DW 0 ;AN000;Seg addr of mixed panel in mem
925 DW 0 ;AN000;Len of the panel label
926 DW 0 ;AN000;Off addr of the panel label
927 DW 0 ;AN000;Seg addr of the panel label
928 DW 0 ;AN000;Beg relative row of panel label
929 DW 0 ;AN000;Beg relative col of panel label
930 DW 0 ;AN000;Len of the panel stored in file
931 DW 0 ;AN000;Off address of full filespec
932 DW 0 ;AN000;Seg address of full filespec
933 DW 0 ;AN000;Lower off word of the beg off
934 DW 0 ;AN000;High off word of the beg off
935 DW 9 DUP(0) ;AN000;Reserved for scroll and size
936 DW 3 ;AN000;Number of child panel entries
937 DW OFFSET CHILD2 ;AN000;Off address of child panel table
938 DW 0 ;AN000;Seg address of child panel table
939 DW 10 DUP(0) ;AN000;GHG new adds
940;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
941;
942; ERR_EXIT
943;
944;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
945PCB20 LABEL WORD ;AN000;
946 DW PCB_EXP ;AN000;option word
947 DB 0 ;AN000;GHG new adds
948 DB 0 ;AN000;GHG new adds
949 DB 0 ;AN000;GHG new adds
950 DW 11 ;AN000;row location of panel
951 DW LEFT_COL+1 ;AN000;column location of panel
952 DW PANEL20_W ;AN000;text char width of panel
953 DW 0 ;AN000;Max poss panel sizing in text
954 DW WHITE_RED ;AN000;Index number of log color
955 DB '�Ŀ�����' ;AN000;8 log border characters
956 DW 0 ;AN000;Length compress panel in mem
957 DW 0 ;AN000;Off addr compressed panel
958 DW 0 ;AN000;Seg addr compressed panel
959 DW PANEL20_W*PANEL20_L;AN000;Length expanded panel in mem
960 DW OFFSET PANEL20 ;AN000;Off addr of expanded panel in
961 DW 0 ;AN000;Seg addr of expanded panel in
962 DW 0 ;AN000;Len of the mixed panel in mem
963 DW 0 ;AN000;Off addr of mixed panel in mem
964 DW 0 ;AN000;Seg addr of mixed panel in mem
965 DW 0 ;AN000;Len of the panel label
966 DW 0 ;AN000;Off addr of the panel label
967 DW 0 ;AN000;Seg addr of the panel label
968 DW 0 ;AN000;Beg relative row of panel label
969 DW 0 ;AN000;Beg relative col of panel label
970 DW 0 ;AN000;Len of the panel stored in file
971 DW 0 ;AN000;Off address of full filespec
972 DW 0 ;AN000;Seg address of full filespec
973 DW 0 ;AN000;Lower off word of the beg off
974 DW 0 ;AN000;High off word of the beg off
975 DW 9 DUP(0) ;AN000;Reserved for scroll and size
976 DW 0 ;AN000;Number of child panel entries
977 DW 0 ;AN000;Off address of child panel table
978 DW 0 ;AN000;Seg address of child panel table
979 DW 10 DUP(0) ;AN000;GHG new adds
980;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
981;
982; PAN_FASTOPEN EQU 21 ;
983;
984;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
985PCB21 LABEL WORD ;AN000;
986 DW PCB_EXP ;AN000;option word
987 DB 0 ;AN000;GHG new adds
988 DB 0 ;AN000;GHG new adds
989 DB 0 ;AN000;GHG new adds
990 DW 1 ;AN000;row location of panel
991 DW LEFT_COL ;AN000;column location of panel
992 DW PANEL21_W ;AN000;text char width of panel
993 DW 0 ;AN000;Max poss panel sizing in text
994 DW WHITE_BLUE ;AN000;Index number of log color
995 DB '�Ŀ�����' ;AN000;8 log border characters
996 DW 0 ;AN000;Length compress panel in mem
997 DW 0 ;AN000;Off addr compressed panel
998 DW 0 ;AN000;Seg addr compressed panel
999 DW PANEL21_W*PANEL21_L;AN000;Length expanded panel in mem
1000 DW OFFSET PANEL21 ;AN000;Off addr of expanded panel in
1001 DW 0 ;AN000;Seg addr of expanded panel in
1002 DW 0 ;AN000;Len of the mixed panel in mem
1003 DW 0 ;AN000;Off addr of mixed panel in mem
1004 DW 0 ;AN000;Seg addr of mixed panel in mem
1005 DW 0 ;AN000;Len of the panel label
1006 DW 0 ;AN000;Off addr of the panel label
1007 DW 0 ;AN000;Seg addr of the panel label
1008 DW 0 ;AN000;Beg relative row of panel label
1009 DW 0 ;AN000;Beg relative col of panel label
1010 DW 0 ;AN000;Len of the panel stored in file
1011 DW 0 ;AN000;Off address of full filespec
1012 DW 0 ;AN000;Seg address of full filespec
1013 DW 0 ;AN000;Lower off word of the beg off
1014 DW 0 ;AN000;High off word of the beg off
1015 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1016 DW 3 ;AN000;Number of child panel entries
1017 DW OFFSET CHILD2 ;AN000;Off address of child panel table
1018 DW 0 ;AN000;Seg address of child panel table
1019 DW 10 DUP(0) ;AN000;GHG new adds
1020;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1021;
1022; PAN_SHARE EQU 22 ;
1023;
1024;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1025PCB22 LABEL WORD ;AN000;
1026 DW PCB_EXP ;AN000;option word
1027 DB 0 ;AN000;GHG new adds
1028 DB 0 ;AN000;GHG new adds
1029 DB 0 ;AN000;GHG new adds
1030 DW 1 ;AN000;row location of panel
1031 DW LEFT_COL ;AN000;column location of panel
1032 DW PANEL22_W ;AN000;text char width of panel
1033 DW 0 ;AN000;Max poss panel sizing in text
1034 DW WHITE_BLUE ;AN000;Index number of log color
1035 DB '�Ŀ�����' ;AN000;8 log border characters
1036 DW 0 ;AN000;Length compress panel in mem
1037 DW 0 ;AN000;Off addr compressed panel
1038 DW 0 ;AN000;Seg addr compressed panel
1039 DW PANEL22_W*PANEL22_L;AN000;Length expanded panel in mem
1040 DW OFFSET PANEL22 ;AN000;Off addr of expanded panel in
1041 DW 0 ;AN000;Seg addr of expanded panel in
1042 DW 0 ;AN000;Len of the mixed panel in mem
1043 DW 0 ;AN000;Off addr of mixed panel in mem
1044 DW 0 ;AN000;Seg addr of mixed panel in mem
1045 DW 0 ;AN000;Len of the panel label
1046 DW 0 ;AN000;Off addr of the panel label
1047 DW 0 ;AN000;Seg addr of the panel label
1048 DW 0 ;AN000;Beg relative row of panel label
1049 DW 0 ;AN000;Beg relative col of panel label
1050 DW 0 ;AN000;Len of the panel stored in file
1051 DW 0 ;AN000;Off address of full filespec
1052 DW 0 ;AN000;Seg address of full filespec
1053 DW 0 ;AN000;Lower off word of the beg off
1054 DW 0 ;AN000;High off word of the beg off
1055 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1056 DW 3 ;AN000;Number of child panel entries
1057 DW OFFSET CHILD2 ;AN000;Off address of child panel table
1058 DW 0 ;AN000;Seg address of child panel table
1059 DW 10 DUP(0) ;AN000;GHG new adds
1060;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1061;
1062; PAN_GRAPHICS EQU 23 ;
1063;
1064;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1065PCB23 LABEL WORD ;AN000;
1066 DW PCB_EXP ;AN000;option word
1067 DB 0 ;AN000;GHG new adds
1068 DB 0 ;AN000;GHG new adds
1069 DB 0 ;AN000;GHG new adds
1070 DW 1 ;AN000;row location of panel
1071 DW LEFT_COL ;AN000;column location of panel
1072 DW PANEL23_W ;AN000;text char width of panel
1073 DW 0 ;AN000;Max poss panel sizing in text
1074 DW WHITE_BLUE ;AN000;Index number of log color
1075 DB '�Ŀ�����' ;AN000;8 log border characters
1076 DW 0 ;AN000;Length compress panel in mem
1077 DW 0 ;AN000;Off addr compressed panel
1078 DW 0 ;AN000;Seg addr compressed panel
1079 DW PANEL23_W*PANEL23_L;AN000;Length expanded panel in mem
1080 DW OFFSET PANEL23 ;AN000;Off addr of expanded panel in
1081 DW 0 ;AN000;Seg addr of expanded panel in
1082 DW 0 ;AN000;Len of the mixed panel in mem
1083 DW 0 ;AN000;Off addr of mixed panel in mem
1084 DW 0 ;AN000;Seg addr of mixed panel in mem
1085 DW 0 ;AN000;Len of the panel label
1086 DW 0 ;AN000;Off addr of the panel label
1087 DW 0 ;AN000;Seg addr of the panel label
1088 DW 0 ;AN000;Beg relative row of panel label
1089 DW 0 ;AN000;Beg relative col of panel label
1090 DW 0 ;AN000;Len of the panel stored in file
1091 DW 0 ;AN000;Off address of full filespec
1092 DW 0 ;AN000;Seg address of full filespec
1093 DW 0 ;AN000;Lower off word of the beg off
1094 DW 0 ;AN000;High off word of the beg off
1095 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1096 DW 3 ;AN000;Number of child panel entries
1097 DW OFFSET CHILD2 ;AN000;Off address of child panel table
1098 DW 0 ;AN000;Seg address of child panel table
1099 DW 10 DUP(0) ;AN000;GHG new adds
1100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1101;
1102; PAN_EXP_MEMORY EQU 24 ;
1103;
1104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1105PCB24 LABEL WORD ;AN000;
1106 DW PCB_EXP ;AN000;option word
1107 DB 0 ;AN000;GHG new adds
1108 DB 0 ;AN000;GHG new adds
1109 DB 0 ;AN000;GHG new adds
1110 DW 1 ;AN000;row location of panel
1111 DW LEFT_COL ;AN000;column location of panel
1112 DW PANEL24_W ;AN000;text char width of panel
1113 DW 0 ;AN000;Max poss panel sizing in text
1114 DW WHITE_BLUE ;AN000;Index number of log color
1115 DB '�Ŀ�����' ;AN000;8 log border characters
1116 DW 0 ;AN000;Length compress panel in mem
1117 DW 0 ;AN000;Off addr compressed panel
1118 DW 0 ;AN000;Seg addr compressed panel
1119 DW PANEL24_W*PANEL24_L;AN000;Length expanded panel in mem
1120 DW OFFSET PANEL24 ;AN000;Off addr of expanded panel in
1121 DW 0 ;AN000;Seg addr of expanded panel in
1122 DW 0 ;AN000;Len of the mixed panel in mem
1123 DW 0 ;AN000;Off addr of mixed panel in mem
1124 DW 0 ;AN000;Seg addr of mixed panel in mem
1125 DW 0 ;AN000;Len of the panel label
1126 DW 0 ;AN000;Off addr of the panel label
1127 DW 0 ;AN000;Seg addr of the panel label
1128 DW 0 ;AN000;Beg relative row of panel label
1129 DW 0 ;AN000;Beg relative col of panel label
1130 DW 0 ;AN000;Len of the panel stored in file
1131 DW 0 ;AN000;Off address of full filespec
1132 DW 0 ;AN000;Seg address of full filespec
1133 DW 0 ;AN000;Lower off word of the beg off
1134 DW 0 ;AN000;High off word of the beg off
1135 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1136 DW 3 ;AN000;Number of child panel entries
1137 DW OFFSET CHILD2 ;AN000;Off address of child panel table
1138 DW 0 ;AN000;Seg address of child panel table
1139 DW 10 DUP(0) ;AN000;GHG new adds
1140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1141;
1142; PAN_VDISK EQU 25 ;
1143;
1144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1145PCB25 LABEL WORD ;AN000;
1146 DW PCB_EXP ;AN000;option word
1147 DB 0 ;AN000;GHG new adds
1148 DB 0 ;AN000;GHG new adds
1149 DB 0 ;AN000;GHG new adds
1150 DW 1 ;AN000;row location of panel
1151 DW LEFT_COL ;AN000;column location of panel
1152 DW PANEL25_W ;AN000;text char width of panel
1153 DW 0 ;AN000;Max poss panel sizing in text
1154 DW WHITE_BLUE ;AN000;Index number of log color
1155 DB '�Ŀ�����' ;AN000;8 log border characters
1156 DW 0 ;AN000;Length compress panel in mem
1157 DW 0 ;AN000;Off addr compressed panel
1158 DW 0 ;AN000;Seg addr compressed panel
1159 DW PANEL25_W*PANEL25_L;AN000;Length expanded panel in mem
1160 DW OFFSET PANEL25 ;AN000;Off addr of expanded panel in
1161 DW 0 ;AN000;Seg addr of expanded panel in
1162 DW 0 ;AN000;Len of the mixed panel in mem
1163 DW 0 ;AN000;Off addr of mixed panel in mem
1164 DW 0 ;AN000;Seg addr of mixed panel in mem
1165 DW 0 ;AN000;Len of the panel label
1166 DW 0 ;AN000;Off addr of the panel label
1167 DW 0 ;AN000;Seg addr of the panel label
1168 DW 0 ;AN000;Beg relative row of panel label
1169 DW 0 ;AN000;Beg relative col of panel label
1170 DW 0 ;AN000;Len of the panel stored in file
1171 DW 0 ;AN000;Off address of full filespec
1172 DW 0 ;AN000;Seg address of full filespec
1173 DW 0 ;AN000;Lower off word of the beg off
1174 DW 0 ;AN000;High off word of the beg off
1175 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1176 DW 3 ;AN000;Number of child panel entries
1177 DW OFFSET CHILD2 ;AN000;Off address of child panel table
1178 DW 0 ;AN000;Seg address of child panel table
1179 DW 10 DUP(0) ;AN000;GHG new adds
1180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1181;
1182; PAN_CONFIG_PARS EQU 26 ;
1183;
1184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1185PCB26 LABEL WORD ;AN000;
1186 DW PCB_EXP ;AN000;option word
1187 DB 0 ;AN000;GHG new adds
1188 DB 0 ;AN000;GHG new adds
1189 DB 0 ;AN000;GHG new adds
1190 DW 1 ;AN000;row location of panel
1191 DW LEFT_COL ;AN000;column location of panel
1192 DW PANEL26_W ;AN000;text char width of panel
1193 DW 0 ;AN000;Max poss panel sizing in text
1194 DW WHITE_BLUE ;AN000;Index number of log color
1195 DB '�Ŀ�����' ;AN000;8 log border characters
1196 DW 0 ;AN000;Length compress panel in mem
1197 DW 0 ;AN000;Off addr compressed panel
1198 DW 0 ;AN000;Seg addr compressed panel
1199 DW PANEL26_W*PANEL26_L;AN000;Length expanded panel in mem
1200 DW OFFSET PANEL26 ;AN000;Off addr of expanded panel in
1201 DW 0 ;AN000;Seg addr of expanded panel in
1202 DW 0 ;AN000;Len of the mixed panel in mem
1203 DW 0 ;AN000;Off addr of mixed panel in mem
1204 DW 0 ;AN000;Seg addr of mixed panel in mem
1205 DW 0 ;AN000;Len of the panel label
1206 DW 0 ;AN000;Off addr of the panel label
1207 DW 0 ;AN000;Seg addr of the panel label
1208 DW 0 ;AN000;Beg relative row of panel label
1209 DW 0 ;AN000;Beg relative col of panel label
1210 DW 0 ;AN000;Len of the panel stored in file
1211 DW 0 ;AN000;Off address of full filespec
1212 DW 0 ;AN000;Seg address of full filespec
1213 DW 0 ;AN000;Lower off word of the beg off
1214 DW 0 ;AN000;High off word of the beg off
1215 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1216 DW 3 ;AN000;Number of child panel entries
1217 DW OFFSET CHILD2 ;AN000;Off address of child panel table
1218 DW 0 ;AN000;Seg address of child panel table
1219 DW 10 DUP(0) ;AN000;GHG new adds
1220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1221;
1222; PAN_FIXED_FIRST EQU 27 ;
1223;
1224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1225PCB27 LABEL WORD ;AN000;
1226 DW PCB_EXP ;AN000;option word
1227 DB 0 ;AN000;GHG new adds
1228 DB 0 ;AN000;GHG new adds
1229 DB 0 ;AN000;GHG new adds
1230 DW 1 ;AN000;row location of panel
1231 DW LEFT_COL ;AN000;column location of panel
1232 DW PANEL27_W ;AN000;text char width of panel
1233 DW 0 ;AN000;Max poss panel sizing in text
1234 DW WHITE_BLUE ;AN000;Index number of log color
1235 DB '�Ŀ�����' ;AN000;8 log border characters
1236 DW 0 ;AN000;Length compress panel in mem
1237 DW 0 ;AN000;Off addr compressed panel
1238 DW 0 ;AN000;Seg addr compressed panel
1239 DW PANEL27_W*PANEL27_L;AN000;Length expanded panel in mem
1240 DW OFFSET PANEL27 ;AN000;Off addr of expanded panel in
1241 DW 0 ;AN000;Seg addr of expanded panel in
1242 DW 0 ;AN000;Len of the mixed panel in mem
1243 DW 0 ;AN000;Off addr of mixed panel in mem
1244 DW 0 ;AN000;Seg addr of mixed panel in mem
1245 DW 0 ;AN000;Len of the panel label
1246 DW 0 ;AN000;Off addr of the panel label
1247 DW 0 ;AN000;Seg addr of the panel label
1248 DW 0 ;AN000;Beg relative row of panel label
1249 DW 0 ;AN000;Beg relative col of panel label
1250 DW 0 ;AN000;Len of the panel stored in file
1251 DW 0 ;AN000;Off address of full filespec
1252 DW 0 ;AN000;Seg address of full filespec
1253 DW 0 ;AN000;Lower off word of the beg off
1254 DW 0 ;AN000;High off word of the beg off
1255 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1256 DW 3 ;AN000;Number of child panel entries
1257 DW OFFSET CHILD2 ;AN000;Off address of child panel table
1258 DW 0 ;AN000;Seg address of child panel table
1259 DW 10 DUP(0) ;AN000;GHG new adds
1260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1261;
1262; PAN_FIXED_BOTH EQU 28 ;
1263;
1264;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1265PCB28 LABEL WORD ;AN000;
1266 DW PCB_EXP ;AN000;option word
1267 DB 0 ;AN000;GHG new adds
1268 DB 0 ;AN000;GHG new adds
1269 DB 0 ;AN000;GHG new adds
1270 DW 1 ;AN000;row location of panel
1271 DW LEFT_COL ;AN000;column location of panel
1272 DW PANEL28_W ;AN000;text char width of panel
1273 DW 0 ;AN000;Max poss panel sizing in text
1274 DW WHITE_BLUE ;AN000;Index number of log color
1275 DB '�Ŀ�����' ;AN000;8 log border characters
1276 DW 0 ;AN000;Length compress panel in mem
1277 DW 0 ;AN000;Off addr compressed panel
1278 DW 0 ;AN000;Seg addr compressed panel
1279 DW PANEL28_W*PANEL28_L;AN000;Length expanded panel in mem
1280 DW OFFSET PANEL28 ;AN000;Off addr of expanded panel in
1281 DW 0 ;AN000;Seg addr of expanded panel in
1282 DW 0 ;AN000;Len of the mixed panel in mem
1283 DW 0 ;AN000;Off addr of mixed panel in mem
1284 DW 0 ;AN000;Seg addr of mixed panel in mem
1285 DW 0 ;AN000;Len of the panel label
1286 DW 0 ;AN000;Off addr of the panel label
1287 DW 0 ;AN000;Seg addr of the panel label
1288 DW 0 ;AN000;Beg relative row of panel label
1289 DW 0 ;AN000;Beg relative col of panel label
1290 DW 0 ;AN000;Len of the panel stored in file
1291 DW 0 ;AN000;Off address of full filespec
1292 DW 0 ;AN000;Seg address of full filespec
1293 DW 0 ;AN000;Lower off word of the beg off
1294 DW 0 ;AN000;High off word of the beg off
1295 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1296 DW 3 ;AN000;Number of child panel entries
1297 DW OFFSET CHILD2 ;AN000;Off address of child panel table
1298 DW 0 ;AN000;Seg address of child panel table
1299 DW 10 DUP(0) ;AN000;GHG new adds
1300;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1301;
1302; PAN_REBOOT EQU 29 ;
1303;
1304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1305PCB29 LABEL WORD ;AN000;
1306 DW PCB_EXP ;AN000;option word
1307 DB 0 ;AN000;GHG new adds
1308 DB 0 ;AN000;GHG new adds
1309 DB 0 ;AN000;GHG new adds
1310 DW 4 ;AN000;row location of panel
1311 DW LEFT_COL ;AN000;column location of panel
1312 DW PANEL29_W ;AN000;text char width of panel
1313 DW 0 ;AN000;Max poss panel sizing in text
1314 DW WHITE_BLUE ;AN000;Index number of log color
1315 DB '�Ŀ�����' ;AN000;8 log border characters
1316 DW 0 ;AN000;Length compress panel in mem
1317 DW 0 ;AN000;Off addr compressed panel
1318 DW 0 ;AN000;Seg addr compressed panel
1319 DW PANEL29_W*PANEL29_L;AN000;Length expanded panel in mem
1320 DW OFFSET PANEL29 ;AN000;Off addr of expanded panel in
1321 DW 0 ;AN000;Seg addr of expanded panel in
1322 DW 0 ;AN000;Len of the mixed panel in mem
1323 DW 0 ;AN000;Off addr of mixed panel in mem
1324 DW 0 ;AN000;Seg addr of mixed panel in mem
1325 DW 0 ;AN000;Len of the panel label
1326 DW 0 ;AN000;Off addr of the panel label
1327 DW 0 ;AN000;Seg addr of the panel label
1328 DW 0 ;AN000;Beg relative row of panel label
1329 DW 0 ;AN000;Beg relative col of panel label
1330 DW 0 ;AN000;Len of the panel stored in file
1331 DW 0 ;AN000;Off address of full filespec
1332 DW 0 ;AN000;Seg address of full filespec
1333 DW 0 ;AN000;Lower off word of the beg off
1334 DW 0 ;AN000;High off word of the beg off
1335 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1336 DW 3 ;AN000;Number of child panel entries
1337 DW OFFSET CHILD2 ;AN000;Off address of child panel table
1338 DW 0 ;AN000;Seg address of child panel table
1339 DW 10 DUP(0) ;AN000;GHG new adds
1340;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1341;
1342; PAN_date_time EQU 30 ;
1343;
1344;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1345PCB30 LABEL WORD ;AN000;
1346 DW PCB_EXP ;AN000;option word
1347 DB 0 ;AN000;GHG new adds
1348 DB 0 ;AN000;GHG new adds
1349 DB 0 ;AN000;GHG new adds
1350 DW 1 ;AN000;row location of panel
1351 DW LEFT_COL ;AN000;column location of panel
1352 DW PANEL30_W ;AN000;text char width of panel
1353 DW 0 ;AN000;Max poss panel sizing in text
1354 DW WHITE_BLUE ;AN000;Index number of log color
1355 DB '�Ŀ�����' ;AN000;8 log border characters
1356 DW 0 ;AN000;Length compress panel in mem
1357 DW 0 ;AN000;Off addr compressed panel
1358 DW 0 ;AN000;Seg addr compressed panel
1359 DW PANEL30_W*PANEL30_L;AN000;Length expanded panel in mem
1360 DW OFFSET PANEL30 ;AN000;Off addr of expanded panel in
1361 DW 0 ;AN000;Seg addr of expanded panel in
1362 DW 0 ;AN000;Len of the mixed panel in mem
1363 DW 0 ;AN000;Off addr of mixed panel in mem
1364 DW 0 ;AN000;Seg addr of mixed panel in mem
1365 DW 0 ;AN000;Len of the panel label
1366 DW 0 ;AN000;Off addr of the panel label
1367 DW 0 ;AN000;Seg addr of the panel label
1368 DW 0 ;AN000;Beg relative row of panel label
1369 DW 0 ;AN000;Beg relative col of panel label
1370 DW 0 ;AN000;Len of the panel stored in file
1371 DW 0 ;AN000;Off address of full filespec
1372 DW 0 ;AN000;Seg address of full filespec
1373 DW 0 ;AN000;Lower off word of the beg off
1374 DW 0 ;AN000;High off word of the beg off
1375 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1376 DW 2 ;AN000;Number of child panel entries
1377 DW OFFSET CHILD31 ;AN000;Off address of child panel table
1378 DW 0 ;AN000;Seg address of child panel table
1379 DW 10 DUP(0) ;AN000;GHG new adds
1380
1381CHILD31 LABEL WORD ;AN000;
1382 DW CHILD_ENTER ;AN000;child PCB element number
1383 DW 25 ;AN000;row override
1384 DW 1 ;AN000;column override
1385 DW BLACK_WHITE ;AN000;color index pointer override
1386 DW 9 ;AN000;function key attribute
1387 DB 0,0; ENTER,0 ;AN000;keystroke associated with child
1388 DW CHD_ABS ;AN000;option word
1389
1390 DW CHILD_F1HELP ;AN000;child PCB element number
1391 DW 25 ;AN000;row override
1392 DW 17 ;AC087;SEH increased for translation space ;AN000;column override
1393 DW BLACK_WHITE ;AN000;color index pointer override
1394 DW 9 ;AN000;function key attribute
1395 DB 0,0; 0,F1 ;AN000;keystroke associated with child
1396 DW CHD_ABS ;AN000;option word
1397
1398;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1399;
1400; PAN_FORMAT EQU 31 ;
1401;
1402;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1403PCB31 LABEL WORD ;AN000;
1404 DW PCB_EXP ;AN000;option word
1405 DB 0 ;AN000;GHG new adds
1406 DB 0 ;AN000;GHG new adds
1407 DB 0 ;AN000;GHG new adds
1408 DW 1 ;AN000;row location of panel
1409 DW LEFT_COL ;AN000;column location of panel
1410 DW PANEL31_W ;AN000;text char width of panel
1411 DW 0 ;AN000;Max poss panel sizing in text
1412 DW WHITE_BLUE ;AN000;Index number of log color
1413 DB '�Ŀ�����' ;AN000;8 log border characters
1414 DW 0 ;AN000;Length compress panel in mem
1415 DW 0 ;AN000;Off addr compressed panel
1416 DW 0 ;AN000;Seg addr compressed panel
1417 DW PANEL31_W*PANEL31_L;AN000;Length expanded panel in mem
1418 DW OFFSET PANEL31 ;AN000;Off addr of expanded panel in
1419 DW 0 ;AN000;Seg addr of expanded panel in
1420 DW 0 ;AN000;Len of the mixed panel in mem
1421 DW 0 ;AN000;Off addr of mixed panel in mem
1422 DW 0 ;AN000;Seg addr of mixed panel in mem
1423 DW 0 ;AN000;Len of the panel label
1424 DW 0 ;AN000;Off addr of the panel label
1425 DW 0 ;AN000;Seg addr of the panel label
1426 DW 0 ;AN000;Beg relative row of panel label
1427 DW 0 ;AN000;Beg relative col of panel label
1428 DW 0 ;AN000;Len of the panel stored in file
1429 DW 0 ;AN000;Off address of full filespec
1430 DW 0 ;AN000;Seg address of full filespec
1431 DW 0 ;AN000;Lower off word of the beg off
1432 DW 0 ;AN000;High off word of the beg off
1433 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1434 DW 2 ;AN000;Number of child panel entries
1435 DW OFFSET CHILD31 ;AN000;Off address of child panel table
1436 DW 0 ;AN000;Seg address of child panel table
1437 DW 10 DUP(0) ;AN000;GHG new adds
1438;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1439;
1440; PAN_INST_PROMPT EQU 32 ;
1441;
1442;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1443PCB32 LABEL WORD ;AN000;
1444 DW PCB_EXP ;AN000;option word
1445 DB 0 ;AN000;GHG new adds
1446 DB 0 ;AN000;GHG new adds
1447 DB 0 ;AN000;GHG new adds
1448 DW 1 ;AN000;row location of panel
1449 DW LEFT_COL+12 ;AN000;column location of panel
1450 DW PANEL32_W ;AN000;text char width of panel
1451 DW 0 ;AN000;Max poss panel sizing in text
1452 DW WHITE_BLUE ;AN000;Index number of log color
1453 DB '�Ŀ�����' ;AN000;8 log border characters
1454 DW 0 ;AN000;Length compress panel in mem
1455 DW 0 ;AN000;Off addr compressed panel
1456 DW 0 ;AN000;Seg addr compressed panel
1457 DW PANEL32_W*PANEL32_L;AN000;Length expanded panel in mem
1458 DW OFFSET PANEL32 ;AN000;Off addr of expanded panel in
1459 DW 0 ;AN000;Seg addr of expanded panel in
1460 DW 0 ;AN000;Len of the mixed panel in mem
1461 DW 0 ;AN000;Off addr of mixed panel in mem
1462 DW 0 ;AN000;Seg addr of mixed panel in mem
1463 DW 0 ;AN000;Len of the panel label
1464 DW 0 ;AN000;Off addr of the panel label
1465 DW 0 ;AN000;Seg addr of the panel label
1466 DW 0 ;AN000;Beg relative row of panel label
1467 DW 0 ;AN000;Beg relative col of panel label
1468 DW 0 ;AN000;Len of the panel stored in file
1469 DW 0 ;AN000;Off address of full filespec
1470 DW 0 ;AN000;Seg address of full filespec
1471 DW 0 ;AN000;Lower off word of the beg off
1472 DW 0 ;AN000;High off word of the beg off
1473 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1474 DW 1 ;AN000;Number of child panel entries
1475 DW OFFSET CHILD2 ;AN000;Off address of child panel table
1476 DW 0 ;AN000;Seg address of child panel table
1477 DW 10 DUP(0) ;AN000;GHG new adds
1478 ;
1479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1480;
1481; err_keyb EQU 33 ;
1482;
1483;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1484PCB33 LABEL WORD ;AN000;
1485 DW PCB_EXP ;AN000;option word
1486 DB 0 ;AN000;GHG new adds
1487 DB 0 ;AN000;GHG new adds
1488 DB 0 ;AN000;GHG new adds
1489 DW 11 ;AN000;row location of panel
1490 DW LEFT_COL+3 ;AN000;column location of panel
1491 DW PANEL33_W ;AN000;text char width of panel
1492 DW 0 ;AN000;Max poss panel sizing in text
1493 DW WHITE_RED ;AN000;Index number of log color
1494 DB '�Ŀ�����' ;AN000;8 log border characters
1495 DW 0 ;AN000;Length compress panel in mem
1496 DW 0 ;AN000;Off addr compressed panel
1497 DW 0 ;AN000;Seg addr compressed panel
1498 DW PANEL33_W*PANEL33_L;AN000;Length expanded panel in mem
1499 DW OFFSET PANEL33 ;AN000;Off addr of expanded panel in
1500 DW 0 ;AN000;Seg addr of expanded panel in
1501 DW 0 ;AN000;Len of the mixed panel in mem
1502 DW 0 ;AN000;Off addr of mixed panel in mem
1503 DW 0 ;AN000;Seg addr of mixed panel in mem
1504 DW 0 ;AN000;Len of the panel label
1505 DW 0 ;AN000;Off addr of the panel label
1506 DW 0 ;AN000;Seg addr of the panel label
1507 DW 0 ;AN000;Beg relative row of panel label
1508 DW 0 ;AN000;Beg relative col of panel label
1509 DW 0 ;AN000;Len of the panel stored in file
1510 DW 0 ;AN000;Off address of full filespec
1511 DW 0 ;AN000;Seg address of full filespec
1512 DW 0 ;AN000;Lower off word of the beg off
1513 DW 0 ;AN000;High off word of the beg off
1514 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1515 DW 0 ;AN000;Number of child panel entries
1516 DW 0 ;AN000;Off address of child panel table
1517 DW 0 ;AN000;Seg address of child panel table
1518 DW 10 DUP(0) ;AN000;GHG new adds
1519 ;
1520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1521;
1522; PAN_COMPLETE_1 EQU 34 ;
1523;
1524;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1525PCB34 LABEL WORD ;AN000;
1526 DW PCB_EXP ;AN000;option word
1527 DB 0 ;AN000;GHG new adds
1528 DB 0 ;AN000;GHG new adds
1529 DB 0 ;AN000;GHG new adds
1530 DW 1 ;AN000;row location of panel
1531 DW LEFT_COL+12 ;AC028;column location of panel
1532 DW PANEL34_W ;AN000;text char width of panel
1533 DW 0 ;AN000;Max poss panel sizing in text
1534 DW WHITE_BLUE ;AN000;Index number of log color
1535 DB '�Ŀ�����' ;AN000;8 log border characters
1536 DW 0 ;AN000;Length compress panel in mem
1537 DW 0 ;AN000;Off addr compressed panel
1538 DW 0 ;AN000;Seg addr compressed panel
1539 DW PANEL34_W*PANEL34_L;AN000;Length expanded panel in mem
1540 DW OFFSET PANEL34 ;AN000;Off addr of expanded panel in
1541 DW 0 ;AN000;Seg addr of expanded panel in
1542 DW 0 ;AN000;Len of the mixed panel in mem
1543 DW 0 ;AN000;Off addr of mixed panel in mem
1544 DW 0 ;AN000;Seg addr of mixed panel in mem
1545 DW 0 ;AN000;Len of the panel label
1546 DW 0 ;AN000;Off addr of the panel label
1547 DW 0 ;AN000;Seg addr of the panel label
1548 DW 0 ;AN000;Beg relative row of panel label
1549 DW 0 ;AN000;Beg relative col of panel label
1550 DW 0 ;AN000;Len of the panel stored in file
1551 DW 0 ;AN000;Off address of full filespec
1552 DW 0 ;AN000;Seg address of full filespec
1553 DW 0 ;AN000;Lower off word of the beg off
1554 DW 0 ;AN000;High off word of the beg off
1555 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1556 DW 1 ;AN000;Number of child panel entries
1557 DW OFFSET CHILD2 ;AN000;Off address of child panel table
1558 DW 0 ;AN000;Seg address of child panel table
1559 DW 10 DUP(0) ;AN000;GHG new adds
1560 ;
1561;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1562;
1563; SUB_COMP_KYS_1C EQU 35 ;
1564;
1565;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1566PCB35 LABEL WORD ;AN000;
1567 DW PCB_EXP ;AN000;option word
1568 DB 0 ;AN000;GHG new adds
1569 DB 0 ;AN000;GHG new adds
1570 DB 0 ;AN000;GHG new adds
1571 DW 8 ;AN000;row location of panel
1572 DW left_col+7 ;AC028;column location of panel
1573 DW PANEL35_W ;AN000;text char width of panel
1574 DW 0 ;AN000;Max poss panel sizing in text
1575 DW WHITE_BLUE ;AN000;Index number of log color
1576 DB '�Ŀ�����' ;AN000;8 log border characters
1577 DW 0 ;AN000;Length compress panel in mem
1578 DW 0 ;AN000;Off addr compressed panel
1579 DW 0 ;AN000;Seg addr compressed panel
1580 DW PANEL35_W*PANEL35_L;AN000;Length expanded panel in mem
1581 DW OFFSET PANEL35 ;AN000;Off addr of expanded panel in
1582 DW 0 ;AN000;Seg addr of expanded panel in
1583 DW 0 ;AN000;Len of the mixed panel in mem
1584 DW 0 ;AN000;Off addr of mixed panel in mem
1585 DW 0 ;AN000;Seg addr of mixed panel in mem
1586 DW 0 ;AN000;Len of the panel label
1587 DW 0 ;AN000;Off addr of the panel label
1588 DW 0 ;AN000;Seg addr of the panel label
1589 DW 0 ;AN000;Beg relative row of panel label
1590 DW 0 ;AN000;Beg relative col of panel label
1591 DW 0 ;AN000;Len of the panel stored in file
1592 DW 0 ;AN000;Off address of full filespec
1593 DW 0 ;AN000;Seg address of full filespec
1594 DW 0 ;AN000;Lower off word of the beg off
1595 DW 0 ;AN000;High off word of the beg off
1596 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1597 DW 0 ;AN000;Number of child panel entries
1598 DW 0 ;AN000;Off address of child panel table
1599 DW 0 ;AN000;Seg address of child panel table
1600 DW 10 DUP(0) ;AN000;GHG new adds
1601 ;
1602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1603;
1604; contextual help
1605;
1606;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1607PCB36 LABEL WORD ;AN000;
1608 DW PCB_EXP ;AN000;option word
1609 DB 0 ;AN000;GHG new adds
1610 DB 0 ;AN000;GHG new adds
1611 DB 0 ;AN000;GHG new adds
1612 DW 1 ;AN000;row location of panel
1613 DW LEFT_COL ;AN000;column location of panel
1614 DW PANEL36_W ;AN000;text char width of panel
1615 DW 0 ;AN000;Max poss panel sizing in text
1616 DW BLACK_WHITE ;AN000;Index number of log color
1617 DB '�Ŀ�����' ;AN000;8 log border characters
1618 DW 0 ;AN000;Length compress panel in mem
1619 DW 0 ;AN000;Off addr compressed panel
1620 DW 0 ;AN000;Seg addr compressed panel
1621 DW PANEL36_W*PANEL36_L;AN000;Length expanded panel in mem
1622 DW OFFSET PANEL36 ;AN000;Off addr of expanded panel in
1623 DW 0 ;AN000;Seg addr of expanded panel in
1624 DW 0 ;AN000;Len of the mixed panel in mem
1625 DW 0 ;AN000;Off addr of mixed panel in mem
1626 DW 0 ;AN000;Seg addr of mixed panel in mem
1627 DW 0 ;AN000;Len of the panel label
1628 DW 0 ;AN000;Off addr of the panel label
1629 DW 0 ;AN000;Seg addr of the panel label
1630 DW 0 ;AN000;Beg relative row of panel label
1631 DW 0 ;AN000;Beg relative col of panel label
1632 DW 0 ;AN000;Len of the panel stored in file
1633 DW 0 ;AN000;Off address of full filespec
1634 DW 0 ;AN000;Seg address of full filespec
1635 DW 0 ;AN000;Lower off word of the beg off
1636 DW 0 ;AN000;High off word of the beg off
1637 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1638 DW 3 ;AN000;Number of child panel entries
1639 DW OFFSET CHILD37 ;AN000;Off address of child panel table
1640 DW 0 ;AN000;Seg address of child panel table
1641 DW 10 DUP(0) ;AN000;GHG new adds
1642 ;
1643
1644CHILD37 LABEL WORD ;AN000;
1645 DW CHILD_QUIT ;AN000;child PCB element number
1646 DW PANEL36_L-1 ;AN000;row override
1647 DW 2 ;AN000;column override
1648 DW BLACK_WHITE ;AN000;color index pointer override
1649 DW 9 ;AN000;function key attribute
1650 DB 27,0 ;AN000;keystroke associated with child
1651 DW 0 ;CHD_ABS ;AN000;option word
1652
1653 DW CHILD_F1HELP ;AN000;child PCB element number
1654 DW PANEL36_L-1 ;AN000;row override
1655 DW 16 ;AC081;SEH ;AN000;column override
1656 DW BLACK_WHITE ;AN000;color index pointer override
1657 DW 9 ;AN000;function key attribute
1658 DB 0,F1 ;AN000;keystroke associated with child
1659 DW 0 ;CHD_ABS ;AN000;option word
1660
1661 DW CHILD_F9KEYS ;AN000;child PCB element number
1662 DW PANEL36_L-1 ;AN000;row override
1663 DW 30 ;AC081;SEH ;AN000;column override
1664 DW BLACK_WHITE ;AN000;color index pointer override
1665 DW 9 ;AN000;function key attribute
1666 DB 0,F9 ;AN000;keystroke associated with child
1667 DW 0 ;CHD_ABS ;AN000;option word
1668;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1669;
1670; HORIZONTAL BAR
1671;
1672;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1673PCB37 LABEL WORD ;AN000;
1674 DW PCB_EXP ;AN000;option word
1675 DB 0 ;AN000;GHG new adds
1676 DB 0 ;AN000;GHG new adds
1677 DB 0 ;AN000;GHG new adds
1678 DW 24 ;AN000;row location of panel
1679 DW 1 ;AN000;column location of panel
1680 DW PANEL37_W ;AN000;text char width of panel
1681 DW 0 ;AN000;Max poss panel sizing in text
1682 DW WHITE_BLUE ;AN000;Index number of log color
1683 DB '�Ŀ�����' ;AN000;8 log border characters
1684 DW 0 ;AN000;Length compress panel in mem
1685 DW 0 ;AN000;Off addr compressed panel
1686 DW 0 ;AN000;Seg addr compressed panel
1687 DW PANEL37_W*PANEL37_L;AN000;Length expanded panel in mem
1688 DW OFFSET PANEL37 ;AN000;Off addr of expanded panel in
1689 DW 0 ;AN000;Seg addr of expanded panel in
1690 DW 0 ;AN000;Len of the mixed panel in mem
1691 DW 0 ;AN000;Off addr of mixed panel in mem
1692 DW 0 ;AN000;Seg addr of mixed panel in mem
1693 DW 0 ;AN000;Len of the panel label
1694 DW 0 ;AN000;Off addr of the panel label
1695 DW 0 ;AN000;Seg addr of the panel label
1696 DW 0 ;AN000;Beg relative row of panel label
1697 DW 0 ;AN000;Beg relative col of panel label
1698 DW 0 ;AN000;Len of the panel stored in file
1699 DW 0 ;AN000;Off address of full filespec
1700 DW 0 ;AN000;Seg address of full filespec
1701 DW 0 ;AN000;Lower off word of the beg off
1702 DW 0 ;AN000;High off word of the beg off
1703 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1704 DW 0 ;AN000;Number of child panel entries
1705 DW 0 ;AN000;Off address of child panel table
1706 DW 0 ;AN000;Seg address of child panel table
1707 DW 10 DUP(0) ;AN000;GHG new adds
1708 ;
1709;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1710;
1711; SUB_CONT_OPTION EQU 38
1712;
1713;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1714PCB38 LABEL WORD ;AN000;
1715 DW PCB_EXP ;AN000;option word
1716 DB 0 ;AN000;GHG new adds
1717 DB 0 ;AN000;GHG new adds
1718 DB 0 ;AN000;GHG new adds
1719 DW 22 ;AN000;row location of panel
1720 DW (80-PANEL38_W)/2 ;AN000;column location of panel
1721 DW PANEL38_W ;AN000;text char width of panel
1722 DW 0 ;AN000;Max poss panel sizing in text
1723 DW WHITE_BLUE ;AN000;Index number of log color
1724 DB '�Ŀ�����' ;AN000;8 log border characters
1725 DW 0 ;AN000;Length compress panel in mem
1726 DW 0 ;AN000;Off addr compressed panel
1727 DW 0 ;AN000;Seg addr compressed panel
1728 DW PANEL38_W*PANEL38_L;AN000;Length expanded panel in mem
1729 DW OFFSET PANEL38 ;AN000;Off addr of expanded panel in
1730 DW 0 ;AN000;Seg addr of expanded panel in
1731 DW 0 ;AN000;Len of the mixed panel in mem
1732 DW 0 ;AN000;Off addr of mixed panel in mem
1733 DW 0 ;AN000;Seg addr of mixed panel in mem
1734 DW 0 ;AN000;Len of the panel label
1735 DW 0 ;AN000;Off addr of the panel label
1736 DW 0 ;AN000;Seg addr of the panel label
1737 DW 0 ;AN000;Beg relative row of panel label
1738 DW 0 ;AN000;Beg relative col of panel label
1739 DW 0 ;AN000;Len of the panel stored in file
1740 DW 0 ;AN000;Off address of full filespec
1741 DW 0 ;AN000;Seg address of full filespec
1742 DW 0 ;AN000;Lower off word of the beg off
1743 DW 0 ;AN000;High off word of the beg off
1744 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1745 DW 0 ;AN000;Number of child panel entries
1746 DW 0 ;AN000;Off address of child panel table
1747 DW 0 ;AN000;Seg address of child panel table
1748 DW 10 DUP(0) ;AN000;GHG new adds
1749 ;
1750;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1751;
1752; SUB_PRINTER_1
1753;
1754;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1755PCB39 LABEL WORD ;AN000;
1756 DW PCB_EXP ;AN000;option word
1757 DB 0 ;AN000;GHG new adds
1758 DB 0 ;AN000;GHG new adds
1759 DB 0 ;AN000;GHG new adds
1760 DW 4 ;AN000;row location of panel
1761 DW left_col ;AN000;column location of panel
1762 DW PANEL39_W ;AN000;text char width of panel
1763 DW 0 ;AN000;Max poss panel sizing in text
1764 DW WHITE_BLUE ;AN000;Index number of log color
1765 DB '�Ŀ�����' ;AN000;8 log border characters
1766 DW 0 ;AN000;Length compress panel in mem
1767 DW 0 ;AN000;Off addr compressed panel
1768 DW 0 ;AN000;Seg addr compressed panel
1769 DW PANEL39_W*PANEL39_L;AN000;Length expanded panel in mem
1770 DW OFFSET PANEL39 ;AN000;Off addr of expanded panel in
1771 DW 0 ;AN000;Seg addr of expanded panel in
1772 DW 0 ;AN000;Len of the mixed panel in mem
1773 DW 0 ;AN000;Off addr of mixed panel in mem
1774 DW 0 ;AN000;Seg addr of mixed panel in mem
1775 DW 0 ;AN000;Len of the panel label
1776 DW 0 ;AN000;Off addr of the panel label
1777 DW 0 ;AN000;Seg addr of the panel label
1778 DW 0 ;AN000;Beg relative row of panel label
1779 DW 0 ;AN000;Beg relative col of panel label
1780 DW 0 ;AN000;Len of the panel stored in file
1781 DW 0 ;AN000;Off address of full filespec
1782 DW 0 ;AN000;Seg address of full filespec
1783 DW 0 ;AN000;Lower off word of the beg off
1784 DW 0 ;AN000;High off word of the beg off
1785 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1786 DW 0 ;AN000;Number of child panel entries
1787 DW 0 ;AN000;Off address of child panel table
1788 DW 0 ;AN000;Seg address of child panel table
1789 DW 10 DUP(0) ;AN000;GHG new adds
1790 ;
1791;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1792;
1793; CHILD F3=Exit
1794;
1795;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1796PCB40 LABEL WORD ;AN000;
1797 DW PCB_EXP ;AN000;option word
1798 DB 0 ;AN000;GHG new adds
1799 DB 0 ;AN000;GHG new adds
1800 DB 0 ;AN000;GHG new adds
1801 DW 1 ;AN000;row location of panel
1802 DW LEFT_COL ;AN000;column location of panel
1803 DW PANEL40_W ;AN000;text char width of panel
1804 DW 0 ;AN000;Max poss panel sizing in text
1805 DW WHITE_BLUE ;AN000;Index number of log color
1806 DB '�Ŀ�����' ;AN000;8 log border characters
1807 DW 0 ;AN000;Length compress panel in mem
1808 DW 0 ;AN000;Off addr compressed panel
1809 DW 0 ;AN000;Seg addr compressed panel
1810 DW PANEL40_W*PANEL40_L;AN000;Length expanded panel in mem
1811 DW OFFSET PANEL40 ;AN000;Off addr of expanded panel in
1812 DW 0 ;AN000;Seg addr of expanded panel in
1813 DW 0 ;AN000;Len of the mixed panel in mem
1814 DW 0 ;AN000;Off addr of mixed panel in mem
1815 DW 0 ;AN000;Seg addr of mixed panel in mem
1816 DW 0 ;AN000;Len of the panel label
1817 DW 0 ;AN000;Off addr of the panel label
1818 DW 0 ;AN000;Seg addr of the panel label
1819 DW 0 ;AN000;Beg relative row of panel label
1820 DW 0 ;AN000;Beg relative col of panel label
1821 DW 0 ;AN000;Len of the panel stored in file
1822 DW 0 ;AN000;Off address of full filespec
1823 DW 0 ;AN000;Seg address of full filespec
1824 DW 0 ;AN000;Lower off word of the beg off
1825 DW 0 ;AN000;High off word of the beg off
1826 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1827 DW 0 ;AN000;Number of child panel entries
1828 DW 0 ;AN000;Off address of child panel table
1829 DW 0 ;AN000;Seg address of child panel table
1830 DW 10 DUP(0) ;AN000;GHG new adds
1831;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1832;
1833; SUB_FIXED_1
1834;
1835;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1836PCB41 LABEL WORD ;AN000;
1837 DW PCB_EXP ;AN000;option word
1838 DB 0 ;AN000;GHG new adds
1839 DB 0 ;AN000;GHG new adds
1840 DB 0 ;AN000;GHG new adds
1841 DW 4 ;AN000;row location of panel
1842 DW left_col ;AN000;column location of panel
1843 DW PANEL41_W ;AN000;text char width of panel
1844 DW 0 ;AN000;Max poss panel sizing in text
1845 DW WHITE_BLUE ;AN000;Index number of log color
1846 DB '�Ŀ�����' ;AN000;8 log border characters
1847 DW 0 ;AN000;Length compress panel in mem
1848 DW 0 ;AN000;Off addr compressed panel
1849 DW 0 ;AN000;Seg addr compressed panel
1850 DW PANEL41_W*PANEL41_L;AN000;Length expanded panel in mem
1851 DW OFFSET PANEL41 ;AN000;Off addr of expanded panel in
1852 DW 0 ;AN000;Seg addr of expanded panel in
1853 DW 0 ;AN000;Len of the mixed panel in mem
1854 DW 0 ;AN000;Off addr of mixed panel in mem
1855 DW 0 ;AN000;Seg addr of mixed panel in mem
1856 DW 0 ;AN000;Len of the panel label
1857 DW 0 ;AN000;Off addr of the panel label
1858 DW 0 ;AN000;Seg addr of the panel label
1859 DW 0 ;AN000;Beg relative row of panel label
1860 DW 0 ;AN000;Beg relative col of panel label
1861 DW 0 ;AN000;Len of the panel stored in file
1862 DW 0 ;AN000;Off address of full filespec
1863 DW 0 ;AN000;Seg address of full filespec
1864 DW 0 ;AN000;Lower off word of the beg off
1865 DW 0 ;AN000;High off word of the beg off
1866 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1867 DW 0 ;AN000;Number of child panel entries
1868 DW 0 ;AN000;Off address of child panel table
1869 DW 0 ;AN000;Seg address of child panel table
1870 DW 10 DUP(0) ;AN000;GHG new adds
1871;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1872;
1873; SUB_LOG_DRIVE EQU 42 ;AN000;JW
1874;
1875;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1876PCB42 LABEL WORD ;AN000;
1877 DW PCB_EXP ;AN000;option word
1878 DB 0 ;AN000;GHG new adds
1879 DB 0 ;AN000;GHG new adds
1880 DB 0 ;AN000;GHG new adds
1881 DW 5 ;AC000;row location of panel JW
1882 DW left_col ;AN000;column location of panel
1883 DW PANEL42_W ;AN000;text char width of panel
1884 DW 0 ;AN000;Max poss panel sizing in text
1885 DW WHITE_BLUE ;AN000;Index number of log color
1886 DB '�Ŀ�����' ;AN000;8 log border characters
1887 DW 0 ;AN000;Length compress panel in mem
1888 DW 0 ;AN000;Off addr compressed panel
1889 DW 0 ;AN000;Seg addr compressed panel
1890 DW PANEL42_W*PANEL42_L;AN000;Length expanded panel in mem
1891 DW OFFSET PANEL42 ;AN000;Off addr of expanded panel in
1892 DW 0 ;AN000;Seg addr of expanded panel in
1893 DW 0 ;AN000;Len of the mixed panel in mem
1894 DW 0 ;AN000;Off addr of mixed panel in mem
1895 DW 0 ;AN000;Seg addr of mixed panel in mem
1896 DW 0 ;AN000;Len of the panel label
1897 DW 0 ;AN000;Off addr of the panel label
1898 DW 0 ;AN000;Seg addr of the panel label
1899 DW 0 ;AN000;Beg relative row of panel label
1900 DW 0 ;AN000;Beg relative col of panel label
1901 DW 0 ;AN000;Len of the panel stored in file
1902 DW 0 ;AN000;Off address of full filespec
1903 DW 0 ;AN000;Seg address of full filespec
1904 DW 0 ;AN000;Lower off word of the beg off
1905 DW 0 ;AN000;High off word of the beg off
1906 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1907 DW 0 ;AN000;Number of child panel entries
1908 DW 0 ;AN000;Off address of child panel table
1909 DW 0 ;AN000;Seg address of child panel table
1910 DW 10 DUP(0) ;AN000;GHG new adds
1911;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1912;
1913; SUB_REBOOT_KEYS
1914;
1915;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1916PCB43 LABEL WORD ;AN000;
1917 DW PCB_EXP ;AN000;option word
1918 DB 0 ;AN000;GHG new adds
1919 DB 0 ;AN000;GHG new adds
1920 DB 0 ;AN000;GHG new adds
1921 DW 21 ;AN000;row location of panel
1922 DW left_col ;AN000;column location of panel
1923 DW PANEL43_W ;AN000;text char width of panel
1924 DW 0 ;AN000;Max poss panel sizing in text
1925 DW WHITE_BLUE ;AN000;Index number of log color
1926 DB '�Ŀ�����' ;AN000;8 log border characters
1927 DW 0 ;AN000;Length compress panel in mem
1928 DW 0 ;AN000;Off addr compressed panel
1929 DW 0 ;AN000;Seg addr compressed panel
1930 DW PANEL43_W*PANEL43_L;AN000;Length expanded panel in mem
1931 DW OFFSET PANEL43 ;AN000;Off addr of expanded panel in
1932 DW 0 ;AN000;Seg addr of expanded panel in
1933 DW 0 ;AN000;Len of the mixed panel in mem
1934 DW 0 ;AN000;Off addr of mixed panel in mem
1935 DW 0 ;AN000;Seg addr of mixed panel in mem
1936 DW 0 ;AN000;Len of the panel label
1937 DW 0 ;AN000;Off addr of the panel label
1938 DW 0 ;AN000;Seg addr of the panel label
1939 DW 0 ;AN000;Beg relative row of panel label
1940 DW 0 ;AN000;Beg relative col of panel label
1941 DW 0 ;AN000;Len of the panel stored in file
1942 DW 0 ;AN000;Off address of full filespec
1943 DW 0 ;AN000;Seg address of full filespec
1944 DW 0 ;AN000;Lower off word of the beg off
1945 DW 0 ;AN000;High off word of the beg off
1946 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1947 DW 0 ;AN000;Number of child panel entries
1948 DW 0 ;AN000;Off address of child panel table
1949 DW 0 ;AN000;Seg address of child panel table
1950 DW 10 DUP(0) ;AN000;GHG new adds
1951;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1952;
1953; SUB_INSTALL_1
1954;
1955;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1956PCB44 LABEL WORD ;AN000;
1957 DW PCB_EXP ;AN000;option word
1958 DB 0 ;AN000;GHG new adds
1959 DB 0 ;AN000;GHG new adds
1960 DB 0 ;AN000;GHG new adds
1961 DW 8 ;AN000;row location of panel
1962 DW left_col ;AN000;column location of panel
1963 DW PANEL44_W ;AN000;text char width of panel
1964 DW 0 ;AN000;Max poss panel sizing in text
1965 DW WHITE_BLUE ;AN000;Index number of log color
1966 DB '�Ŀ�����' ;AN000;8 log border characters
1967 DW 0 ;AN000;Length compress panel in mem
1968 DW 0 ;AN000;Off addr compressed panel
1969 DW 0 ;AN000;Seg addr compressed panel
1970 DW PANEL44_W*PANEL44_L;AN000;Length expanded panel in mem
1971 DW OFFSET PANEL44 ;AN000;Off addr of expanded panel in
1972 DW 0 ;AN000;Seg addr of expanded panel in
1973 DW 0 ;AN000;Len of the mixed panel in mem
1974 DW 0 ;AN000;Off addr of mixed panel in mem
1975 DW 0 ;AN000;Seg addr of mixed panel in mem
1976 DW 0 ;AN000;Len of the panel label
1977 DW 0 ;AN000;Off addr of the panel label
1978 DW 0 ;AN000;Seg addr of the panel label
1979 DW 0 ;AN000;Beg relative row of panel label
1980 DW 0 ;AN000;Beg relative col of panel label
1981 DW 0 ;AN000;Len of the panel stored in file
1982 DW 0 ;AN000;Off address of full filespec
1983 DW 0 ;AN000;Seg address of full filespec
1984 DW 0 ;AN000;Lower off word of the beg off
1985 DW 0 ;AN000;High off word of the beg off
1986 DW 9 DUP(0) ;AN000;Reserved for scroll and size
1987 DW 0 ;AN000;Number of child panel entries
1988 DW 0 ;AN000;Off address of child panel table
1989 DW 0 ;AN000;Seg address of child panel table
1990 DW 10 DUP(0) ;AN000;GHG new adds
1991;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1992;
1993; SUB_INSTALL_2
1994;
1995;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1996PCB45 LABEL WORD ;AN000;
1997 DW PCB_EXP ;AN000;option word
1998 DB 0 ;AN000;GHG new adds
1999 DB 0 ;AN000;GHG new adds
2000 DB 0 ;AN000;GHG new adds
2001 DW 8 ;AN000;row location of panel
2002 DW left_col ;AN000;column location of panel
2003 DW PANEL45_W ;AN000;text char width of panel
2004 DW 0 ;AN000;Max poss panel sizing in text
2005 DW WHITE_BLUE ;AN000;Index number of log color
2006 DB '�Ŀ�����' ;AN000;8 log border characters
2007 DW 0 ;AN000;Length compress panel in mem
2008 DW 0 ;AN000;Off addr compressed panel
2009 DW 0 ;AN000;Seg addr compressed panel
2010 DW PANEL45_W*PANEL45_L;AN000;Length expanded panel in mem
2011 DW OFFSET PANEL45 ;AN000;Off addr of expanded panel in
2012 DW 0 ;AN000;Seg addr of expanded panel in
2013 DW 0 ;AN000;Len of the mixed panel in mem
2014 DW 0 ;AN000;Off addr of mixed panel in mem
2015 DW 0 ;AN000;Seg addr of mixed panel in mem
2016 DW 0 ;AN000;Len of the panel label
2017 DW 0 ;AN000;Off addr of the panel label
2018 DW 0 ;AN000;Seg addr of the panel label
2019 DW 0 ;AN000;Beg relative row of panel label
2020 DW 0 ;AN000;Beg relative col of panel label
2021 DW 0 ;AN000;Len of the panel stored in file
2022 DW 0 ;AN000;Off address of full filespec
2023 DW 0 ;AN000;Seg address of full filespec
2024 DW 0 ;AN000;Lower off word of the beg off
2025 DW 0 ;AN000;High off word of the beg off
2026 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2027 DW 0 ;AN000;Number of child panel entries
2028 DW 0 ;AN000;Off address of child panel table
2029 DW 0 ;AN000;Seg address of child panel table
2030 DW 10 DUP(0) ;AN000;GHG new adds
2031;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2032;
2033; SUB_COMP_VER
2034;
2035;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2036PCB46 LABEL WORD ;AN000;
2037 DW PCB_EXP ;AN000;option word
2038 DB 0 ;AN000;GHG new adds
2039 DB 0 ;AN000;GHG new adds
2040 DB 0 ;AN000;GHG new adds
2041 DW 8 ;AN000;row location of panel
2042 DW left_col+7 ;AC028;column location of panel
2043 DW PANEL46_W ;AN000;text char width of panel
2044 DW 0 ;AN000;Max poss panel sizing in text
2045 DW WHITE_BLUE ;AN000;Index number of log color
2046 DB '�Ŀ�����' ;AN000;8 log border characters
2047 DW 0 ;AN000;Length compress panel in mem
2048 DW 0 ;AN000;Off addr compressed panel
2049 DW 0 ;AN000;Seg addr compressed panel
2050 DW PANEL46_W*PANEL46_L;AN000;Length expanded panel in mem
2051 DW OFFSET PANEL46 ;AN000;Off addr of expanded panel in
2052 DW 0 ;AN000;Seg addr of expanded panel in
2053 DW 0 ;AN000;Len of the mixed panel in mem
2054 DW 0 ;AN000;Off addr of mixed panel in mem
2055 DW 0 ;AN000;Seg addr of mixed panel in mem
2056 DW 0 ;AN000;Len of the panel label
2057 DW 0 ;AN000;Off addr of the panel label
2058 DW 0 ;AN000;Seg addr of the panel label
2059 DW 0 ;AN000;Beg relative row of panel label
2060 DW 0 ;AN000;Beg relative col of panel label
2061 DW 0 ;AN000;Len of the panel stored in file
2062 DW 0 ;AN000;Off address of full filespec
2063 DW 0 ;AN000;Seg address of full filespec
2064 DW 0 ;AN000;Lower off word of the beg off
2065 DW 0 ;AN000;High off word of the beg off
2066 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2067 DW 0 ;AN000;Number of child panel entries
2068 DW 0 ;AN000;Off address of child panel table
2069 DW 0 ;AN000;Seg address of child panel table
2070 DW 10 DUP(0) ;AN000;GHG new adds
2071;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2072;
2073; SUB_KEYS_1
2074;
2075;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2076PCB47 LABEL WORD ;AN000;
2077 DW PCB_EXP ;AN000;option word
2078 DB 0 ;AN000;GHG new adds
2079 DB 0 ;AN000;GHG new adds
2080 DB 0 ;AN000;GHG new adds
2081 DW 21 ;AN000;row location of panel
2082 DW left_col+5 ;AN028;column location of panel
2083 DW PANEL47_W ;AN000;text char width of panel
2084 DW 0 ;AN000;Max poss panel sizing in text
2085 DW WHITE_BLUE ;AN000;Index number of log color
2086 DB '�Ŀ�����' ;AN000;8 log border characters
2087 DW 0 ;AN000;Length compress panel in mem
2088 DW 0 ;AN000;Off addr compressed panel
2089 DW 0 ;AN000;Seg addr compressed panel
2090 DW PANEL47_W*PANEL47_L;AN000;Length expanded panel in mem
2091 DW OFFSET PANEL47 ;AN000;Off addr of expanded panel in
2092 DW 0 ;AN000;Seg addr of expanded panel in
2093 DW 0 ;AN000;Len of the mixed panel in mem
2094 DW 0 ;AN000;Off addr of mixed panel in mem
2095 DW 0 ;AN000;Seg addr of mixed panel in mem
2096 DW 0 ;AN000;Len of the panel label
2097 DW 0 ;AN000;Off addr of the panel label
2098 DW 0 ;AN000;Seg addr of the panel label
2099 DW 0 ;AN000;Beg relative row of panel label
2100 DW 0 ;AN000;Beg relative col of panel label
2101 DW 0 ;AN000;Len of the panel stored in file
2102 DW 0 ;AN000;Off address of full filespec
2103 DW 0 ;AN000;Seg address of full filespec
2104 DW 0 ;AN000;Lower off word of the beg off
2105 DW 0 ;AN000;High off word of the beg off
2106 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2107 DW 0 ;AN000;Number of child panel entries
2108 DW 0 ;AN000;Off address of child panel table
2109 DW 0 ;AN000;Seg address of child panel table
2110 DW 10 DUP(0) ;AN000;GHG new adds
2111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2112;
2113; SUB_KEYS_2
2114;
2115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2116PCB48 LABEL WORD ;AN000;
2117 DW PCB_EXP ;AN000;option word
2118 DB 0 ;AN000;GHG new adds
2119 DB 0 ;AN000;GHG new adds
2120 DB 0 ;AN000;GHG new adds
2121 DW 8 ;AN000;row location of panel
2122 DW left_col+7 ;AC028;column location of panel
2123 DW PANEL48_W ;AN000;text char width of panel
2124 DW 0 ;AN000;Max poss panel sizing in text
2125 DW WHITE_BLUE ;AN000;Index number of log color
2126 DB '�Ŀ�����' ;AN000;8 log border characters
2127 DW 0 ;AN000;Length compress panel in mem
2128 DW 0 ;AN000;Off addr compressed panel
2129 DW 0 ;AN000;Seg addr compressed panel
2130 DW PANEL48_W*PANEL48_L;AN000;Length expanded panel in mem
2131 DW OFFSET PANEL48 ;AN000;Off addr of expanded panel in
2132 DW 0 ;AN000;Seg addr of expanded panel in
2133 DW 0 ;AN000;Len of the mixed panel in mem
2134 DW 0 ;AN000;Off addr of mixed panel in mem
2135 DW 0 ;AN000;Seg addr of mixed panel in mem
2136 DW 0 ;AN000;Len of the panel label
2137 DW 0 ;AN000;Off addr of the panel label
2138 DW 0 ;AN000;Seg addr of the panel label
2139 DW 0 ;AN000;Beg relative row of panel label
2140 DW 0 ;AN000;Beg relative col of panel label
2141 DW 0 ;AN000;Len of the panel stored in file
2142 DW 0 ;AN000;Off address of full filespec
2143 DW 0 ;AN000;Seg address of full filespec
2144 DW 0 ;AN000;Lower off word of the beg off
2145 DW 0 ;AN000;High off word of the beg off
2146 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2147 DW 0 ;AN000;Number of child panel entries
2148 DW 0 ;AN000;Off address of child panel table
2149 DW 0 ;AN000;Seg address of child panel table
2150 DW 10 DUP(0) ;AN000;GHG new adds
2151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2152;
2153; CHILD F1=HELP
2154;
2155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2156PCB49 LABEL WORD ;AN000;
2157 DW PCB_EXP ;AN000;option word
2158 DB 0 ;AN000;GHG new adds
2159 DB 0 ;AN000;GHG new adds
2160 DB 0 ;AN000;GHG new adds
2161 DW 1 ;AN000;row location of panel
2162 DW LEFT_COL ;AN000;column location of panel
2163 DW PANEL49_W ;AN000;text char width of panel
2164 DW 0 ;AN000;Max poss panel sizing in text
2165 DW WHITE_BLUE ;AN000;Index number of log color
2166 DB '�Ŀ�����' ;AN000;8 log border characters
2167 DW 0 ;AN000;Length compress panel in mem
2168 DW 0 ;AN000;Off addr compressed panel
2169 DW 0 ;AN000;Seg addr compressed panel
2170 DW PANEL49_W*PANEL49_L;AN000;Length expanded panel in mem
2171 DW OFFSET PANEL49 ;AN000;Off addr of expanded panel in
2172 DW 0 ;AN000;Seg addr of expanded panel in
2173 DW 0 ;AN000;Len of the mixed panel in mem
2174 DW 0 ;AN000;Off addr of mixed panel in mem
2175 DW 0 ;AN000;Seg addr of mixed panel in mem
2176 DW 0 ;AN000;Len of the panel label
2177 DW 0 ;AN000;Off addr of the panel label
2178 DW 0 ;AN000;Seg addr of the panel label
2179 DW 0 ;AN000;Beg relative row of panel label
2180 DW 0 ;AN000;Beg relative col of panel label
2181 DW 0 ;AN000;Len of the panel stored in file
2182 DW 0 ;AN000;Off address of full filespec
2183 DW 0 ;AN000;Seg address of full filespec
2184 DW 0 ;AN000;Lower off word of the beg off
2185 DW 0 ;AN000;High off word of the beg off
2186 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2187 DW 0 ;AN000;Number of child panel entries
2188 DW 0 ;AN000;Off address of child panel table
2189 DW 0 ;AN000;Seg address of child panel table
2190 DW 10 DUP(0) ;AN000;GHG new adds
2191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2192;
2193; CHILD F9=keys
2194;
2195;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2196PCB50 LABEL WORD ;AN000;
2197 DW PCB_EXP ;AN000;option word
2198 DB 0 ;AN000;GHG new adds
2199 DB 0 ;AN000;GHG new adds
2200 DB 0 ;AN000;GHG new adds
2201 DW 1 ;AN000;row location of panel
2202 DW LEFT_COL ;AN000;column location of panel
2203 DW PANEL50_W ;AN000;text char width of panel
2204 DW 0 ;AN000;Max poss panel sizing in text
2205 DW WHITE_BLUE ;AN000;Index number of log color
2206 DB '�Ŀ�����' ;AN000;8 log border characters
2207 DW 0 ;AN000;Length compress panel in mem
2208 DW 0 ;AN000;Off addr compressed panel
2209 DW 0 ;AN000;Seg addr compressed panel
2210 DW PANEL50_W*PANEL50_L;AN000;Length expanded panel in mem
2211 DW OFFSET PANEL50 ;AN000;Off addr of expanded panel in
2212 DW 0 ;AN000;Seg addr of expanded panel in
2213 DW 0 ;AN000;Len of the mixed panel in mem
2214 DW 0 ;AN000;Off addr of mixed panel in mem
2215 DW 0 ;AN000;Seg addr of mixed panel in mem
2216 DW 0 ;AN000;Len of the panel label
2217 DW 0 ;AN000;Off addr of the panel label
2218 DW 0 ;AN000;Seg addr of the panel label
2219 DW 0 ;AN000;Beg relative row of panel label
2220 DW 0 ;AN000;Beg relative col of panel label
2221 DW 0 ;AN000;Len of the panel stored in file
2222 DW 0 ;AN000;Off address of full filespec
2223 DW 0 ;AN000;Seg address of full filespec
2224 DW 0 ;AN000;Lower off word of the beg off
2225 DW 0 ;AN000;High off word of the beg off
2226 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2227 DW 0 ;AN000;Number of child panel entries
2228 DW 0 ;AN000;Off address of child panel table
2229 DW 0 ;AN000;Seg address of child panel table
2230 DW 10 DUP(0) ;AN000;GHG new adds
2231;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2232;
2233; CHILD esc
2234;
2235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2236PCB51 LABEL WORD ;AN000;
2237 DW PCB_EXP ;AN000;option word
2238 DB 0 ;AN000;GHG new adds
2239 DB 0 ;AN000;GHG new adds
2240 DB 0 ;AN000;GHG new adds
2241 DW 1 ;AN000;row location of panel
2242 DW LEFT_COL ;AN000;column location of panel
2243 DW PANEL51_W ;AN000;text char width of panel
2244 DW 0 ;AN000;Max poss panel sizing in text
2245 DW WHITE_BLUE ;AN000;Index number of log color
2246 DB '�Ŀ�����' ;AN000;8 log border characters
2247 DW 0 ;AN000;Length compress panel in mem
2248 DW 0 ;AN000;Off addr compressed panel
2249 DW 0 ;AN000;Seg addr compressed panel
2250 DW PANEL51_W*PANEL51_L;AN000;Length expanded panel in mem
2251 DW OFFSET PANEL51 ;AN000;Off addr of expanded panel in
2252 DW 0 ;AN000;Seg addr of expanded panel in
2253 DW 0 ;AN000;Len of the mixed panel in mem
2254 DW 0 ;AN000;Off addr of mixed panel in mem
2255 DW 0 ;AN000;Seg addr of mixed panel in mem
2256 DW 0 ;AN000;Len of the panel label
2257 DW 0 ;AN000;Off addr of the panel label
2258 DW 0 ;AN000;Seg addr of the panel label
2259 DW 0 ;AN000;Beg relative row of panel label
2260 DW 0 ;AN000;Beg relative col of panel label
2261 DW 0 ;AN000;Len of the panel stored in file
2262 DW 0 ;AN000;Off address of full filespec
2263 DW 0 ;AN000;Seg address of full filespec
2264 DW 0 ;AN000;Lower off word of the beg off
2265 DW 0 ;AN000;High off word of the beg off
2266 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2267 DW 0 ;AN000;Number of child panel entries
2268 DW 0 ;AN000;Off address of child panel table
2269 DW 0 ;AN000;Seg address of child panel table
2270 DW 10 DUP(0) ;AN000;GHG new adds
2271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2272;
2273; CHILD ENTER
2274;
2275;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2276PCB52 LABEL WORD ;AN000;
2277 DW PCB_EXP ;AN000;option word
2278 DB 0 ;AN000;GHG new adds
2279 DB 0 ;AN000;GHG new adds
2280 DB 0 ;AN000;GHG new adds
2281 DW 1 ;AN000;row location of panel
2282 DW LEFT_COL ;AN000;column location of panel
2283 DW PANEL52_W ;AN000;text char width of panel
2284 DW 0 ;AN000;Max poss panel sizing in text
2285 DW WHITE_BLUE ;AN000;Index number of log color
2286 DB '�Ŀ�����' ;AN000;8 log border characters
2287 DW 0 ;AN000;Length compress panel in mem
2288 DW 0 ;AN000;Off addr compressed panel
2289 DW 0 ;AN000;Seg addr compressed panel
2290 DW PANEL52_W*PANEL52_L;AN000;Length expanded panel in mem
2291 DW OFFSET PANEL52 ;AN000;Off addr of expanded panel in
2292 DW 0 ;AN000;Seg addr of expanded panel in
2293 DW 0 ;AN000;Len of the mixed panel in mem
2294 DW 0 ;AN000;Off addr of mixed panel in mem
2295 DW 0 ;AN000;Seg addr of mixed panel in mem
2296 DW 0 ;AN000;Len of the panel label
2297 DW 0 ;AN000;Off addr of the panel label
2298 DW 0 ;AN000;Seg addr of the panel label
2299 DW 0 ;AN000;Beg relative row of panel label
2300 DW 0 ;AN000;Beg relative col of panel label
2301 DW 0 ;AN000;Len of the panel stored in file
2302 DW 0 ;AN000;Off address of full filespec
2303 DW 0 ;AN000;Seg address of full filespec
2304 DW 0 ;AN000;Lower off word of the beg off
2305 DW 0 ;AN000;High off word of the beg off
2306 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2307 DW 0 ;AN000;Number of child panel entries
2308 DW 0 ;AN000;Off address of child panel table
2309 DW 0 ;AN000;Seg address of child panel table
2310 DW 10 DUP(0) ;AN000;GHG new adds
2311;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2312;
2313; SUB_COMP_REP
2314;
2315;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2316PCB53 LABEL WORD ;AN000;
2317 DW PCB_EXP ;AN000;option word
2318 DB 0 ;AN000;GHG new adds
2319 DB 0 ;AN000;GHG new adds
2320 DB 0 ;AN000;GHG new adds
2321 DW 8 ;AN000;row location of panel
2322 DW left_col+7 ;AC028;column location of panel
2323 DW PANEL53_W ;AN000;text char width of panel
2324 DW 0 ;AN000;Max poss panel sizing in text
2325 DW WHITE_BLUE ;AN000;Index number of log color
2326 DB '�Ŀ�����' ;AN000;8 log border characters
2327 DW 0 ;AN000;Length compress panel in mem
2328 DW 0 ;AN000;Off addr compressed panel
2329 DW 0 ;AN000;Seg addr compressed panel
2330 DW PANEL53_W*PANEL53_L;AN000;Length expanded panel in mem
2331 DW OFFSET PANEL53 ;AN000;Off addr of expanded panel in
2332 DW 0 ;AN000;Seg addr of expanded panel in
2333 DW 0 ;AN000;Len of the mixed panel in mem
2334 DW 0 ;AN000;Off addr of mixed panel in mem
2335 DW 0 ;AN000;Seg addr of mixed panel in mem
2336 DW 0 ;AN000;Len of the panel label
2337 DW 0 ;AN000;Off addr of the panel label
2338 DW 0 ;AN000;Seg addr of the panel label
2339 DW 0 ;AN000;Beg relative row of panel label
2340 DW 0 ;AN000;Beg relative col of panel label
2341 DW 0 ;AN000;Len of the panel stored in file
2342 DW 0 ;AN000;Off address of full filespec
2343 DW 0 ;AN000;Seg address of full filespec
2344 DW 0 ;AN000;Lower off word of the beg off
2345 DW 0 ;AN000;High off word of the beg off
2346 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2347 DW 0 ;AN000;Number of child panel entries
2348 DW 0 ;AN000;Off address of child panel table
2349 DW 0 ;AN000;Seg address of child panel table
2350 DW 10 DUP(0) ;AN000;GHG new adds
2351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2352;
2353; ERROR PANEL 1
2354;
2355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2356PCB54 LABEL WORD ;AN000;
2357 DW PCB_EXP ;AN000;option word
2358 DB 0 ;AN000;GHG new adds
2359 DB 0 ;AN000;GHG new adds
2360 DB 0 ;AN000;GHG new adds
2361 DW 11 ;AN000;row location of panel
2362 DW LEFT_COL+3 ;AN000;column location of panel
2363 DW PANEL54_W ;AN000;text char width of panel
2364 DW 0 ;AN000;Max poss panel sizing in text
2365 DW WHITE_RED ;AN000;Index number of log color
2366 DB '�Ŀ�����' ;AN000;8 log border characters
2367 DW 0 ;AN000;Length compress panel in mem
2368 DW 0 ;AN000;Off addr compressed panel
2369 DW 0 ;AN000;Seg addr compressed panel
2370 DW PANEL54_W*PANEL54_L;AN000;Length expanded panel in mem
2371 DW OFFSET PANEL54 ;AN000;Off addr of expanded panel in
2372 DW 0 ;AN000;Seg addr of expanded panel in
2373 DW 0 ;AN000;Len of the mixed panel in mem
2374 DW 0 ;AN000;Off addr of mixed panel in mem
2375 DW 0 ;AN000;Seg addr of mixed panel in mem
2376 DW 0 ;AN000;Len of the panel label
2377 DW 0 ;AN000;Off addr of the panel label
2378 DW 0 ;AN000;Seg addr of the panel label
2379 DW 0 ;AN000;Beg relative row of panel label
2380 DW 0 ;AN000;Beg relative col of panel label
2381 DW 0 ;AN000;Len of the panel stored in file
2382 DW 0 ;AN000;Off address of full filespec
2383 DW 0 ;AN000;Seg address of full filespec
2384 DW 0 ;AN000;Lower off word of the beg off
2385 DW 0 ;AN000;High off word of the beg off
2386 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2387 DW 0 ;AN000;Number of child panel entries
2388 DW 0 ;AN000;Off address of child panel table
2389 DW 0 ;AN000;Seg address of child panel table
2390 DW 10 DUP(0) ;AN000;GHG new adds
2391;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2392;
2393; ERROR PANEL 2
2394;
2395;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2396PCB55 LABEL WORD ;AN000;
2397 DW PCB_EXP ;AN000;option word
2398 DB 0 ;AN000;GHG new adds
2399 DB 0 ;AN000;GHG new adds
2400 DB 0 ;AN000;GHG new adds
2401 DW 11 ;AN000;row location of panel
2402 DW LEFT_COL+3 ;AN000;column location of panel
2403 DW PANEL55_W ;AN000;text char width of panel
2404 DW 0 ;AN000;Max poss panel sizing in text
2405 DW WHITE_RED ;AN000;Index number of log color
2406 DB '�Ŀ�����' ;AN000;8 log border characters
2407 DW 0 ;AN000;Length compress panel in mem
2408 DW 0 ;AN000;Off addr compressed panel
2409 DW 0 ;AN000;Seg addr compressed panel
2410 DW PANEL55_W*PANEL55_L;AN000;Length expanded panel in mem
2411 DW OFFSET PANEL55 ;AN000;Off addr of expanded panel in
2412 DW 0 ;AN000;Seg addr of expanded panel in
2413 DW 0 ;AN000;Len of the mixed panel in mem
2414 DW 0 ;AN000;Off addr of mixed panel in mem
2415 DW 0 ;AN000;Seg addr of mixed panel in mem
2416 DW 0 ;AN000;Len of the panel label
2417 DW 0 ;AN000;Off addr of the panel label
2418 DW 0 ;AN000;Seg addr of the panel label
2419 DW 0 ;AN000;Beg relative row of panel label
2420 DW 0 ;AN000;Beg relative col of panel label
2421 DW 0 ;AN000;Len of the panel stored in file
2422 DW 0 ;AN000;Off address of full filespec
2423 DW 0 ;AN000;Seg address of full filespec
2424 DW 0 ;AN000;Lower off word of the beg off
2425 DW 0 ;AN000;High off word of the beg off
2426 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2427 DW 0 ;AN000;Number of child panel entries
2428 DW 0 ;AN000;Off address of child panel table
2429 DW 0 ;AN000;Seg address of child panel table
2430 DW 10 DUP(0) ;AN000;GHG new adds
2431;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2432;
2433; ERROR PANEL 3
2434;
2435;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2436PCB56 LABEL WORD ;AN000;
2437 DW PCB_EXP ;AN000;option word
2438 DB 0 ;AN000;GHG new adds
2439 DB 0 ;AN000;GHG new adds
2440 DB 0 ;AN000;GHG new adds
2441 DW 11 ;AN000;row location of panel
2442 DW LEFT_COL+3 ;AN000;column location of panel
2443 DW PANEL56_W ;AN000;text char width of panel
2444 DW 0 ;AN000;Max poss panel sizing in text
2445 DW WHITE_RED ;AN000;Index number of log color
2446 DB '�Ŀ�����' ;AN000;8 log border characters
2447 DW 0 ;AN000;Length compress panel in mem
2448 DW 0 ;AN000;Off addr compressed panel
2449 DW 0 ;AN000;Seg addr compressed panel
2450 DW PANEL56_W*PANEL56_L;AN000;Length expanded panel in mem
2451 DW OFFSET PANEL56 ;AN000;Off addr of expanded panel in
2452 DW 0 ;AN000;Seg addr of expanded panel in
2453 DW 0 ;AN000;Len of the mixed panel in mem
2454 DW 0 ;AN000;Off addr of mixed panel in mem
2455 DW 0 ;AN000;Seg addr of mixed panel in mem
2456 DW 0 ;AN000;Len of the panel label
2457 DW 0 ;AN000;Off addr of the panel label
2458 DW 0 ;AN000;Seg addr of the panel label
2459 DW 0 ;AN000;Beg relative row of panel label
2460 DW 0 ;AN000;Beg relative col of panel label
2461 DW 0 ;AN000;Len of the panel stored in file
2462 DW 0 ;AN000;Off address of full filespec
2463 DW 0 ;AN000;Seg address of full filespec
2464 DW 0 ;AN000;Lower off word of the beg off
2465 DW 0 ;AN000;High off word of the beg off
2466 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2467 DW 0 ;AN000;Number of child panel entries
2468 DW 0 ;AN000;Off address of child panel table
2469 DW 0 ;AN000;Seg address of child panel table
2470 DW 10 DUP(0) ;AN000;GHG new adds
2471;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2472;
2473; ERROR PANEL 4
2474;
2475;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2476PCB57 LABEL WORD ;AN000;
2477 DW PCB_EXP ;AN000;option word
2478 DB 0 ;AN000;GHG new adds
2479 DB 0 ;AN000;GHG new adds
2480 DB 0 ;AN000;GHG new adds
2481 DW 11 ;AN000;row location of panel
2482 DW LEFT_COL+3 ;AN000;column location of panel
2483 DW PANEL57_W ;AN000;text char width of panel
2484 DW 0 ;AN000;Max poss panel sizing in text
2485 DW WHITE_RED ;AN000;Index number of log color
2486 DB '�Ŀ�����' ;AN000;8 log border characters
2487 DW 0 ;AN000;Length compress panel in mem
2488 DW 0 ;AN000;Off addr compressed panel
2489 DW 0 ;AN000;Seg addr compressed panel
2490 DW PANEL57_W*PANEL57_L;AN000;Length expanded panel in mem
2491 DW OFFSET PANEL57 ;AN000;Off addr of expanded panel in
2492 DW 0 ;AN000;Seg addr of expanded panel in
2493 DW 0 ;AN000;Len of the mixed panel in mem
2494 DW 0 ;AN000;Off addr of mixed panel in mem
2495 DW 0 ;AN000;Seg addr of mixed panel in mem
2496 DW 0 ;AN000;Len of the panel label
2497 DW 0 ;AN000;Off addr of the panel label
2498 DW 0 ;AN000;Seg addr of the panel label
2499 DW 0 ;AN000;Beg relative row of panel label
2500 DW 0 ;AN000;Beg relative col of panel label
2501 DW 0 ;AN000;Len of the panel stored in file
2502 DW 0 ;AN000;Off address of full filespec
2503 DW 0 ;AN000;Seg address of full filespec
2504 DW 0 ;AN000;Lower off word of the beg off
2505 DW 0 ;AN000;High off word of the beg off
2506 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2507 DW 0 ;AN000;Number of child panel entries
2508 DW 0 ;AN000;Off address of child panel table
2509 DW 0 ;AN000;Seg address of child panel table
2510 DW 10 DUP(0) ;AN000;GHG new adds
2511;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2512;
2513; SUB_INS_START_B
2514;
2515;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2516PCB58 LABEL WORD ;AN000;
2517 DW PCB_EXP ;AN000;option word
2518 DB 0 ;AN000;GHG new adds
2519 DB 0 ;AN000;GHG new adds
2520 DB 0 ;AN000;GHG new adds
2521 DW 8 ;AN000;row location of panel
2522 DW LEFT_COL ;AN000;column location of panel
2523 DW PANEL58_W ;AN000;text char width of panel
2524 DW 0 ;AN000;Max poss panel sizing in text
2525 DW WHITE_BLUE ;AN000;Index number of log color
2526 DB '�Ŀ�����' ;AN000;8 log border characters
2527 DW 0 ;AN000;Length compress panel in mem
2528 DW 0 ;AN000;Off addr compressed panel
2529 DW 0 ;AN000;Seg addr compressed panel
2530 DW PANEL58_W*PANEL58_L;AN000;Length expanded panel in mem
2531 DW OFFSET PANEL58 ;AN000;Off addr of expanded panel in
2532 DW 0 ;AN000;Seg addr of expanded panel in
2533 DW 0 ;AN000;Len of the mixed panel in mem
2534 DW 0 ;AN000;Off addr of mixed panel in mem
2535 DW 0 ;AN000;Seg addr of mixed panel in mem
2536 DW 0 ;AN000;Len of the panel label
2537 DW 0 ;AN000;Off addr of the panel label
2538 DW 0 ;AN000;Seg addr of the panel label
2539 DW 0 ;AN000;Beg relative row of panel label
2540 DW 0 ;AN000;Beg relative col of panel label
2541 DW 0 ;AN000;Len of the panel stored in file
2542 DW 0 ;AN000;Off address of full filespec
2543 DW 0 ;AN000;Seg address of full filespec
2544 DW 0 ;AN000;Lower off word of the beg off
2545 DW 0 ;AN000;High off word of the beg off
2546 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2547 DW 0 ;AN000;Number of child panel entries
2548 DW 0 ;AN000;Off address of child panel table
2549 DW 0 ;AN000;Seg address of child panel table
2550 DW 10 DUP(0) ;AN000;GHG new adds
2551;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2552;
2553; SUB_REM_SEL_A
2554;
2555;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2556PCB59 LABEL WORD ;AN000;
2557 DW PCB_EXP ;AN000;option word
2558 DB 0 ;AN000;GHG new adds
2559 DB 0 ;AN000;GHG new adds
2560 DB 0 ;AN000;GHG new adds
2561 DW 8 ;AN000;row location of panel
2562 DW LEFT_COL ;AN000;column location of panel
2563 DW PANEL59_W ;AN000;text char width of panel
2564 DW 0 ;AN000;Max poss panel sizing in text
2565 DW WHITE_BLUE ;AN000;Index number of log color
2566 DB '�Ŀ�����' ;AN000;8 log border characters
2567 DW 0 ;AN000;Length compress panel in mem
2568 DW 0 ;AN000;Off addr compressed panel
2569 DW 0 ;AN000;Seg addr compressed panel
2570 DW PANEL59_W*PANEL59_L;AN000;Length expanded panel in mem
2571 DW OFFSET PANEL59 ;AN000;Off addr of expanded panel in
2572 DW 0 ;AN000;Seg addr of expanded panel in
2573 DW 0 ;AN000;Len of the mixed panel in mem
2574 DW 0 ;AN000;Off addr of mixed panel in mem
2575 DW 0 ;AN000;Seg addr of mixed panel in mem
2576 DW 0 ;AN000;Len of the panel label
2577 DW 0 ;AN000;Off addr of the panel label
2578 DW 0 ;AN000;Seg addr of the panel label
2579 DW 0 ;AN000;Beg relative row of panel label
2580 DW 0 ;AN000;Beg relative col of panel label
2581 DW 0 ;AN000;Len of the panel stored in file
2582 DW 0 ;AN000;Off address of full filespec
2583 DW 0 ;AN000;Seg address of full filespec
2584 DW 0 ;AN000;Lower off word of the beg off
2585 DW 0 ;AN000;High off word of the beg off
2586 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2587 DW 0 ;AN000;Number of child panel entries
2588 DW 0 ;AN000;Off address of child panel table
2589 DW 0 ;AN000;Seg address of child panel table
2590 DW 10 DUP(0) ;AN000;GHG new adds
2591;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2592;
2593; SUB_REM_START_B
2594;
2595;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2596PCB60 LABEL WORD ;AN000;
2597 DW PCB_EXP ;AN000;option word
2598 DB 0 ;AN000;GHG new adds
2599 DB 0 ;AN000;GHG new adds
2600 DB 0 ;AN000;GHG new adds
2601 DW 8 ;AN000;row location of panel
2602 DW LEFT_COL ;AN000;column location of panel
2603 DW PANEL60_W ;AN000;text char width of panel
2604 DW 0 ;AN000;Max poss panel sizing in text
2605 DW WHITE_BLUE ;AN000;Index number of log color
2606 DB '�Ŀ�����' ;AN000;8 log border characters
2607 DW 0 ;AN000;Length compress panel in mem
2608 DW 0 ;AN000;Off addr compressed panel
2609 DW 0 ;AN000;Seg addr compressed panel
2610 DW PANEL60_W*PANEL60_L;AN000;Length expanded panel in mem
2611 DW OFFSET PANEL60 ;AN000;Off addr of expanded panel in
2612 DW 0 ;AN000;Seg addr of expanded panel in
2613 DW 0 ;AN000;Len of the mixed panel in mem
2614 DW 0 ;AN000;Off addr of mixed panel in mem
2615 DW 0 ;AN000;Seg addr of mixed panel in mem
2616 DW 0 ;AN000;Len of the panel label
2617 DW 0 ;AN000;Off addr of the panel label
2618 DW 0 ;AN000;Seg addr of the panel label
2619 DW 0 ;AN000;Beg relative row of panel label
2620 DW 0 ;AN000;Beg relative col of panel label
2621 DW 0 ;AN000;Len of the panel stored in file
2622 DW 0 ;AN000;Off address of full filespec
2623 DW 0 ;AN000;Seg address of full filespec
2624 DW 0 ;AN000;Lower off word of the beg off
2625 DW 0 ;AN000;High off word of the beg off
2626 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2627 DW 0 ;AN000;Number of child panel entries
2628 DW 0 ;AN000;Off address of child panel table
2629 DW 0 ;AN000;Seg address of child panel table
2630 DW 10 DUP(0) ;AN000;GHG new adds
2631;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2632;
2633; SUB_REM_DOS_A
2634;
2635;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2636PCB61 LABEL WORD ;AN000;
2637 DW PCB_EXP ;AN000;option word
2638 DB 0 ;AN000;GHG new adds
2639 DB 0 ;AN000;GHG new adds
2640 DB 0 ;AN000;GHG new adds
2641 DW 8 ;AN000;row location of panel
2642 DW LEFT_COL ;AN000;column location of panel
2643 DW PANEL61_W ;AN000;text char width of panel
2644 DW 0 ;AN000;Max poss panel sizing in text
2645 DW WHITE_BLUE ;AN000;Index number of log color
2646 DB '�Ŀ�����' ;AN000;8 log border characters
2647 DW 0 ;AN000;Length compress panel in mem
2648 DW 0 ;AN000;Off addr compressed panel
2649 DW 0 ;AN000;Seg addr compressed panel
2650 DW PANEL61_W*PANEL61_L;AN000;Length expanded panel in mem
2651 DW OFFSET PANEL61 ;AN000;Off addr of expanded panel in
2652 DW 0 ;AN000;Seg addr of expanded panel in
2653 DW 0 ;AN000;Len of the mixed panel in mem
2654 DW 0 ;AN000;Off addr of mixed panel in mem
2655 DW 0 ;AN000;Seg addr of mixed panel in mem
2656 DW 0 ;AN000;Len of the panel label
2657 DW 0 ;AN000;Off addr of the panel label
2658 DW 0 ;AN000;Seg addr of the panel label
2659 DW 0 ;AN000;Beg relative row of panel label
2660 DW 0 ;AN000;Beg relative col of panel label
2661 DW 0 ;AN000;Len of the panel stored in file
2662 DW 0 ;AN000;Off address of full filespec
2663 DW 0 ;AN000;Seg address of full filespec
2664 DW 0 ;AN000;Lower off word of the beg off
2665 DW 0 ;AN000;High off word of the beg off
2666 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2667 DW 0 ;AN000;Number of child panel entries
2668 DW 0 ;AN000;Off address of child panel table
2669 DW 0 ;AN000;Seg address of child panel table
2670 DW 10 DUP(0) ;AN000;GHG new adds
2671;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2672;
2673; ERR_BAD_PATH
2674;
2675;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2676PCB62 LABEL WORD ;AN000;
2677 DW PCB_EXP ;AN000;option word
2678 DB 0 ;AN000;GHG new adds
2679 DB 0 ;AN000;GHG new adds
2680 DB 0 ;AN000;GHG new adds
2681 DW 11 ;AN000;row location of panel
2682 DW LEFT_COL+1 ;AN000;column location of panel
2683 DW PANEL62_W ;AN000;text char width of panel
2684 DW 0 ;AN000;Max poss panel sizing in text
2685 DW WHITE_RED ;AN000;Index number of log color
2686 DB '�Ŀ�����' ;AN000;8 log border characters
2687 DW 0 ;AN000;Length compress panel in mem
2688 DW 0 ;AN000;Off addr compressed panel
2689 DW 0 ;AN000;Seg addr compressed panel
2690 DW PANEL62_W*PANEL62_L;AN000;Length expanded panel in mem
2691 DW OFFSET PANEL62 ;AN000;Off addr of expanded panel in
2692 DW 0 ;AN000;Seg addr of expanded panel in
2693 DW 0 ;AN000;Len of the mixed panel in mem
2694 DW 0 ;AN000;Off addr of mixed panel in mem
2695 DW 0 ;AN000;Seg addr of mixed panel in mem
2696 DW 0 ;AN000;Len of the panel label
2697 DW 0 ;AN000;Off addr of the panel label
2698 DW 0 ;AN000;Seg addr of the panel label
2699 DW 0 ;AN000;Beg relative row of panel label
2700 DW 0 ;AN000;Beg relative col of panel label
2701 DW 0 ;AN000;Len of the panel stored in file
2702 DW 0 ;AN000;Off address of full filespec
2703 DW 0 ;AN000;Seg address of full filespec
2704 DW 0 ;AN000;Lower off word of the beg off
2705 DW 0 ;AN000;High off word of the beg off
2706 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2707 DW 0 ;AN000;Number of child panel entries
2708 DW 0 ;AN000;Off address of child panel table
2709 DW 0 ;AN000;Seg address of child panel table
2710 DW 10 DUP(0) ;AN000;GHG new adds
2711;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2712;
2713; ERR_BAD_PRT_FILE
2714;
2715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2716PCB63 LABEL WORD ;AN000;
2717 DW PCB_EXP ;AN000;option word
2718 DB 0 ;AN000;GHG new adds
2719 DB 0 ;AN000;GHG new adds
2720 DB 0 ;AN000;GHG new adds
2721 DW 11 ;AN000;row location of panel
2722 DW LEFT_COL+1 ;AN000;column location of panel
2723 DW PANEL63_W ;AN000;text char width of panel
2724 DW 0 ;AN000;Max poss panel sizing in text
2725 DW WHITE_RED ;AN000;Index number of log color
2726 DB '�Ŀ�����' ;AN000;8 log border characters
2727 DW 0 ;AN000;Length compress panel in mem
2728 DW 0 ;AN000;Off addr compressed panel
2729 DW 0 ;AN000;Seg addr compressed panel
2730 DW PANEL63_W*PANEL63_L;AN000;Length expanded panel in mem
2731 DW OFFSET PANEL63 ;AN000;Off addr of expanded panel in
2732 DW 0 ;AN000;Seg addr of expanded panel in
2733 DW 0 ;AN000;Len of the mixed panel in mem
2734 DW 0 ;AN000;Off addr of mixed panel in mem
2735 DW 0 ;AN000;Seg addr of mixed panel in mem
2736 DW 0 ;AN000;Len of the panel label
2737 DW 0 ;AN000;Off addr of the panel label
2738 DW 0 ;AN000;Seg addr of the panel label
2739 DW 0 ;AN000;Beg relative row of panel label
2740 DW 0 ;AN000;Beg relative col of panel label
2741 DW 0 ;AN000;Len of the panel stored in file
2742 DW 0 ;AN000;Off address of full filespec
2743 DW 0 ;AN000;Seg address of full filespec
2744 DW 0 ;AN000;Lower off word of the beg off
2745 DW 0 ;AN000;High off word of the beg off
2746 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2747 DW 0 ;AN000;Number of child panel entries
2748 DW 0 ;AN000;Off address of child panel table
2749 DW 0 ;AN000;Seg address of child panel table
2750 DW 10 DUP(0) ;AN000;GHG new adds
2751;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2752;
2753; ERR_BAD_PRT_PROFILE
2754;
2755;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2756PCB64 LABEL WORD ;AN000;
2757 DW PCB_EXP ;AN000;option word
2758 DB 0 ;AN000;GHG new adds
2759 DB 0 ;AN000;GHG new adds
2760 DB 0 ;AN000;GHG new adds
2761 DW 11 ;AN000;row location of panel
2762 DW LEFT_COL+1 ;AN000;column location of panel
2763 DW PANEL64_W ;AN000;text char width of panel
2764 DW 0 ;AN000;Max poss panel sizing in text
2765 DW WHITE_RED ;AN000;Index number of log color
2766 DB '�Ŀ�����' ;AN000;8 log border characters
2767 DW 0 ;AN000;Length compress panel in mem
2768 DW 0 ;AN000;Off addr compressed panel
2769 DW 0 ;AN000;Seg addr compressed panel
2770 DW PANEL64_W*PANEL64_L;AN000;Length expanded panel in mem
2771 DW OFFSET PANEL64 ;AN000;Off addr of expanded panel in
2772 DW 0 ;AN000;Seg addr of expanded panel in
2773 DW 0 ;AN000;Len of the mixed panel in mem
2774 DW 0 ;AN000;Off addr of mixed panel in mem
2775 DW 0 ;AN000;Seg addr of mixed panel in mem
2776 DW 0 ;AN000;Len of the panel label
2777 DW 0 ;AN000;Off addr of the panel label
2778 DW 0 ;AN000;Seg addr of the panel label
2779 DW 0 ;AN000;Beg relative row of panel label
2780 DW 0 ;AN000;Beg relative col of panel label
2781 DW 0 ;AN000;Len of the panel stored in file
2782 DW 0 ;AN000;Off address of full filespec
2783 DW 0 ;AN000;Seg address of full filespec
2784 DW 0 ;AN000;Lower off word of the beg off
2785 DW 0 ;AN000;High off word of the beg off
2786 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2787 DW 0 ;AN000;Number of child panel entries
2788 DW 0 ;AN000;Off address of child panel table
2789 DW 0 ;AN000;Seg address of child panel table
2790 DW 10 DUP(0) ;AN000;GHG new adds
2791;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2792;
2793; FORMAT_DISK
2794;
2795;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2796PCB65 LABEL WORD ;AN000;
2797 DW PCB_EXP ;AN000;option word
2798 DB 0 ;AN000;GHG new adds
2799 DB 0 ;AN000;GHG new adds
2800 DB 0 ;AN000;GHG new adds
2801 DW 8 ;AN000;row location of panel
2802 DW LEFT_COL ;AN000;column location of panel
2803 DW PANEL65_W ;AN000;text char width of panel
2804 DW 0 ;AN000;Max poss panel sizing in text
2805 DW WHITE_BLUE ;AN000;Index number of log color
2806 DB '�Ŀ�����' ;AN000;8 log border characters
2807 DW 0 ;AN000;Length compress panel in mem
2808 DW 0 ;AN000;Off addr compressed panel
2809 DW 0 ;AN000;Seg addr compressed panel
2810 DW PANEL65_W*PANEL65_L;AN000;Length expanded panel in mem
2811 DW OFFSET PANEL65 ;AN000;Off addr of expanded panel in
2812 DW 0 ;AN000;Seg addr of expanded panel in
2813 DW 0 ;AN000;Len of the mixed panel in mem
2814 DW 0 ;AN000;Off addr of mixed panel in mem
2815 DW 0 ;AN000;Seg addr of mixed panel in mem
2816 DW 0 ;AN000;Len of the panel label
2817 DW 0 ;AN000;Off addr of the panel label
2818 DW 0 ;AN000;Seg addr of the panel label
2819 DW 0 ;AN000;Beg relative row of panel label
2820 DW 0 ;AN000;Beg relative col of panel label
2821 DW 0 ;AN000;Len of the panel stored in file
2822 DW 0 ;AN000;Off address of full filespec
2823 DW 0 ;AN000;Seg address of full filespec
2824 DW 0 ;AN000;Lower off word of the beg off
2825 DW 0 ;AN000;High off word of the beg off
2826 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2827 DW 0 ;AN000;Number of child panel entries
2828 DW 0 ;AN000;Off address of child panel table
2829 DW 0 ;AN000;Seg address of child panel table
2830 DW 10 DUP(0) ;AN000;GHG new adds
2831;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2832;
2833; FORMAT_DISKETTE
2834;
2835;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2836PCB66 LABEL WORD ;AN000;
2837 DW PCB_EXP ;AN000;option word
2838 DB 0 ;AN000;GHG new adds
2839 DB 0 ;AN000;GHG new adds
2840 DB 0 ;AN000;GHG new adds
2841 DW 8 ;AN000;row location of panel
2842 DW LEFT_COL ;AN000;column location of panel
2843 DW PANEL66_W ;AN000;text char width of panel
2844 DW 0 ;AN000;Max poss panel sizing in text
2845 DW WHITE_BLUE ;AN000;Index number of log color
2846 DB '�Ŀ�����' ;AN000;8 log border characters
2847 DW 0 ;AN000;Length compress panel in mem
2848 DW 0 ;AN000;Off addr compressed panel
2849 DW 0 ;AN000;Seg addr compressed panel
2850 DW PANEL66_W*PANEL66_L;AN000;Length expanded panel in mem
2851 DW OFFSET PANEL66 ;AN000;Off addr of expanded panel in
2852 DW 0 ;AN000;Seg addr of expanded panel in
2853 DW 0 ;AN000;Len of the mixed panel in mem
2854 DW 0 ;AN000;Off addr of mixed panel in mem
2855 DW 0 ;AN000;Seg addr of mixed panel in mem
2856 DW 0 ;AN000;Len of the panel label
2857 DW 0 ;AN000;Off addr of the panel label
2858 DW 0 ;AN000;Seg addr of the panel label
2859 DW 0 ;AN000;Beg relative row of panel label
2860 DW 0 ;AN000;Beg relative col of panel label
2861 DW 0 ;AN000;Len of the panel stored in file
2862 DW 0 ;AN000;Off address of full filespec
2863 DW 0 ;AN000;Seg address of full filespec
2864 DW 0 ;AN000;Lower off word of the beg off
2865 DW 0 ;AN000;High off word of the beg off
2866 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2867 DW 0 ;AN000;Number of child panel entries
2868 DW 0 ;AN000;Off address of child panel table
2869 DW 0 ;AN000;Seg address of child panel table
2870 DW 10 DUP(0) ;AN000;GHG new adds
2871;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2872;
2873; ERR_border
2874;
2875;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2876PCB67 LABEL WORD ;AN000;
2877 DW PCB_EXP ;AN000;option word
2878 DB 0 ;AN000;GHG new adds
2879 DB 0 ;AN000;GHG new adds
2880 DB 0 ;AN000;GHG new adds
2881 DW 10 ;AN000;row location of panel
2882 DW LEFT_COL ;AN000;column location of panel
2883 DW PANEL67_W ;AN000;text char width of panel
2884 DW 0 ;AN000;Max poss panel sizing in text
2885 DW WHITE_RED ;AN000;Index number of log color
2886 DB '�Ŀ�����' ;AN000;8 log border characters
2887 DW 0 ;AN000;Length compress panel in mem
2888 DW 0 ;AN000;Off addr compressed panel
2889 DW 0 ;AN000;Seg addr compressed panel
2890 DW PANEL67_W*PANEL67_L;AN000;Length expanded panel in mem
2891 DW OFFSET PANEL67 ;AN000;Off addr of expanded panel in
2892 DW 0 ;AN000;Seg addr of expanded panel in
2893 DW 0 ;AN000;Len of the mixed panel in mem
2894 DW 0 ;AN000;Off addr of mixed panel in mem
2895 DW 0 ;AN000;Seg addr of mixed panel in mem
2896 DW 0 ;AN000;Len of the panel label
2897 DW 0 ;AN000;Off addr of the panel label
2898 DW 0 ;AN000;Seg addr of the panel label
2899 DW 0 ;AN000;Beg relative row of panel label
2900 DW 0 ;AN000;Beg relative col of panel label
2901 DW 0 ;AN000;Len of the panel stored in file
2902 DW 0 ;AN000;Off address of full filespec
2903 DW 0 ;AN000;Seg address of full filespec
2904 DW 0 ;AN000;Lower off word of the beg off
2905 DW 0 ;AN000;High off word of the beg off
2906 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2907 DW 2 ;AN000;Number of child panel entries
2908 DW OFFSET CHILD68 ;AN000;Off address of child panel table
2909 DW 0 ;AN000;Seg address of child panel table
2910 DW 10 DUP(0) ;AN000;GHG new adds
2911
2912CHILD68 LABEL WORD ;AN000;
2913 DW CHILD_F3EXIT ;AN000;child PCB element number
2914 DW PANEL67_L-1 ;AN000;row override
2915 DW 2 ;AN000;column override
2916 DW WHITE_RED ;AN000;color index pointer override
2917 DW 9 ;AN000;function key attribute
2918 DB 0,F3 ;AN000;keystroke associated with child
2919 DW 0 ;CHD_ABS ;AN000;option word
2920
2921 DW CHILD_ENTER ;AN000;child PCB element number
2922 DW PANEL67_L-1 ;AN000;row override
2923 DW 16 ;AN000;column override
2924 DW WHITE_RED ;AN000;color index pointer override
2925 DW 9 ;AN000;function key attribute
2926 DB 13,0 ;AN000;keystroke associated with child
2927 DW 0 ;CHD_ABS ;AN000;option word
2928;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2929;
2930; ERR_DOS_DISK
2931;
2932;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2933PCB68 LABEL WORD ;AN000;
2934 DW PCB_EXP ;AN000;option word
2935 DB 0 ;AN000;GHG new adds
2936 DB 0 ;AN000;GHG new adds
2937 DB 0 ;AN000;GHG new adds
2938 DW 11 ;AN000;row location of panel
2939 DW LEFT_COL+1 ;AN000;column location of panel
2940 DW PANEL68_W ;AN000;text char width of panel
2941 DW 0 ;AN000;Max poss panel sizing in text
2942 DW WHITE_RED ;AN000;Index number of log color
2943 DB '�Ŀ�����' ;AN000;8 log border characters
2944 DW 0 ;AN000;Length compress panel in mem
2945 DW 0 ;AN000;Off addr compressed panel
2946 DW 0 ;AN000;Seg addr compressed panel
2947 DW PANEL68_W*PANEL68_L;AN000;Length expanded panel in mem
2948 DW OFFSET PANEL68 ;AN000;Off addr of expanded panel in
2949 DW 0 ;AN000;Seg addr of expanded panel in
2950 DW 0 ;AN000;Len of the mixed panel in mem
2951 DW 0 ;AN000;Off addr of mixed panel in mem
2952 DW 0 ;AN000;Seg addr of mixed panel in mem
2953 DW 0 ;AN000;Len of the panel label
2954 DW 0 ;AN000;Off addr of the panel label
2955 DW 0 ;AN000;Seg addr of the panel label
2956 DW 0 ;AN000;Beg relative row of panel label
2957 DW 0 ;AN000;Beg relative col of panel label
2958 DW 0 ;AN000;Len of the panel stored in file
2959 DW 0 ;AN000;Off address of full filespec
2960 DW 0 ;AN000;Seg address of full filespec
2961 DW 0 ;AN000;Lower off word of the beg off
2962 DW 0 ;AN000;High off word of the beg off
2963 DW 9 DUP(0) ;AN000;Reserved for scroll and size
2964 DW 0 ;AN000;Number of child panel entries
2965 DW 0 ;AN000;Off address of child panel table
2966 DW 0 ;AN000;Seg address of child panel table
2967 DW 10 DUP(0) ;AN000;GHG new adds
2968;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2969;
2970; ERR_INSTALL
2971;
2972;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2973PCB69 LABEL WORD ;AN000;
2974 DW PCB_EXP ;AN000;option word
2975 DB 0 ;AN000;GHG new adds
2976 DB 0 ;AN000;GHG new adds
2977 DB 0 ;AN000;GHG new adds
2978 DW 11 ;AN000;row location of panel
2979 DW LEFT_COL+1 ;AN000;column location of panel
2980 DW PANEL69_W ;AN000;text char width of panel
2981 DW 0 ;AN000;Max poss panel sizing in text
2982 DW WHITE_RED ;AN000;Index number of log color
2983 DB '�Ŀ�����' ;AN000;8 log border characters
2984 DW 0 ;AN000;Length compress panel in mem
2985 DW 0 ;AN000;Off addr compressed panel
2986 DW 0 ;AN000;Seg addr compressed panel
2987 DW PANEL69_W*PANEL69_L;AN000;Length expanded panel in mem
2988 DW OFFSET PANEL69 ;AN000;Off addr of expanded panel in
2989 DW 0 ;AN000;Seg addr of expanded panel in
2990 DW 0 ;AN000;Len of the mixed panel in mem
2991 DW 0 ;AN000;Off addr of mixed panel in mem
2992 DW 0 ;AN000;Seg addr of mixed panel in mem
2993 DW 0 ;AN000;Len of the panel label
2994 DW 0 ;AN000;Off addr of the panel label
2995 DW 0 ;AN000;Seg addr of the panel label
2996 DW 0 ;AN000;Beg relative row of panel label
2997 DW 0 ;AN000;Beg relative col of panel label
2998 DW 0 ;AN000;Len of the panel stored in file
2999 DW 0 ;AN000;Off address of full filespec
3000 DW 0 ;AN000;Seg address of full filespec
3001 DW 0 ;AN000;Lower off word of the beg off
3002 DW 0 ;AN000;High off word of the beg off
3003 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3004 DW 0 ;AN000;Number of child panel entries
3005 DW 0 ;AN000;Off address of child panel table
3006 DW 0 ;AN000;Seg address of child panel table
3007 DW 10 DUP(0) ;AN000;GHG new adds
3008;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3009;
3010; PAN_DISKCOPY
3011;
3012;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3013PCB70 LABEL WORD ;AN000;
3014 DW PCB_EXP ;AN000;option word
3015 DB 0 ;AN000;GHG new adds
3016 DB 0 ;AN000;GHG new adds
3017 DB 0 ;AN000;GHG new adds
3018 DW 4 ;AN000;row location of panel
3019 DW LEFT_COL ;AN000;column location of panel
3020 DW PANEL70_W ;AN000;text char width of panel
3021 DW 0 ;AN000;Max poss panel sizing in text
3022 DW WHITE_BLUE ;AN000;Index number of log color
3023 DB '�Ŀ�����' ;AN000;8 log border characters
3024 DW 0 ;AN000;Length compress panel in mem
3025 DW 0 ;AN000;Off addr compressed panel
3026 DW 0 ;AN000;Seg addr compressed panel
3027 DW PANEL70_W*PANEL70_L;AN000;Length expanded panel in mem
3028 DW OFFSET PANEL70 ;AN000;Off addr of expanded panel in
3029 DW 0 ;AN000;Seg addr of expanded panel in
3030 DW 0 ;AN000;Len of the mixed panel in mem
3031 DW 0 ;AN000;Off addr of mixed panel in mem
3032 DW 0 ;AN000;Seg addr of mixed panel in mem
3033 DW 0 ;AN000;Len of the panel label
3034 DW 0 ;AN000;Off addr of the panel label
3035 DW 0 ;AN000;Seg addr of the panel label
3036 DW 0 ;AN000;Beg relative row of panel label
3037 DW 0 ;AN000;Beg relative col of panel label
3038 DW 0 ;AN000;Len of the panel stored in file
3039 DW 0 ;AN000;Off address of full filespec
3040 DW 0 ;AN000;Seg address of full filespec
3041 DW 0 ;AN000;Lower off word of the beg off
3042 DW 0 ;AN000;High off word of the beg off
3043 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3044 DW 2 ;AN000;Number of child panel entries
3045 DW OFFSET CHILD2 ;AN000;Off address of child panel table
3046 DW 0 ;AN000;Seg address of child panel table
3047 DW 10 DUP(0) ;AN000;GHG new adds
3048;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3049;
3050; PAN_DSKCPY_SRC
3051;
3052;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3053PCB71 LABEL WORD ;AN000;
3054 DW PCB_EXP ;AN000;option word
3055 DB 0 ;AN000;GHG new adds
3056 DB 0 ;AN000;GHG new adds
3057 DB 0 ;AN000;GHG new adds
3058 DW 8 ;AN000;row location of panel
3059 DW LEFT_COL ;AN000;column location of panel
3060 DW PANEL71_W ;AN000;text char width of panel
3061 DW 0 ;AN000;Max poss panel sizing in text
3062 DW WHITE_BLUE ;AN000;Index number of log color
3063 DB '�Ŀ�����' ;AN000;8 log border characters
3064 DW 0 ;AN000;Length compress panel in mem
3065 DW 0 ;AN000;Off addr compressed panel
3066 DW 0 ;AN000;Seg addr compressed panel
3067 DW PANEL71_W*PANEL71_L;AN000;Length expanded panel in mem
3068 DW OFFSET PANEL71 ;AN000;Off addr of expanded panel in
3069 DW 0 ;AN000;Seg addr of expanded panel in
3070 DW 0 ;AN000;Len of the mixed panel in mem
3071 DW 0 ;AN000;Off addr of mixed panel in mem
3072 DW 0 ;AN000;Seg addr of mixed panel in mem
3073 DW 0 ;AN000;Len of the panel label
3074 DW 0 ;AN000;Off addr of the panel label
3075 DW 0 ;AN000;Seg addr of the panel label
3076 DW 0 ;AN000;Beg relative row of panel label
3077 DW 0 ;AN000;Beg relative col of panel label
3078 DW 0 ;AN000;Len of the panel stored in file
3079 DW 0 ;AN000;Off address of full filespec
3080 DW 0 ;AN000;Seg address of full filespec
3081 DW 0 ;AN000;Lower off word of the beg off
3082 DW 0 ;AN000;High off word of the beg off
3083 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3084 DW 1 ;AN000;Number of child panel entries
3085 DW OFFSET CHILD2 ;AN000;Off address of child panel table
3086 DW 0 ;AN000;Seg address of child panel table
3087 DW 10 DUP(0) ;AN000;GHG new adds
3088;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3089;
3090; PAN_DSKCPY_TAR
3091;
3092;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3093PCB72 LABEL WORD ;AN000;
3094 DW PCB_EXP ;AN000;option word
3095 DB 0 ;AN000;GHG new adds
3096 DB 0 ;AN000;GHG new adds
3097 DB 0 ;AN000;GHG new adds
3098 DW 8 ;AN000;row location of panel
3099 DW LEFT_COL ;AN000;column location of panel
3100 DW PANEL72_W ;AN000;text char width of panel
3101 DW 0 ;AN000;Max poss panel sizing in text
3102 DW WHITE_BLUE ;AN000;Index number of log color
3103 DB '�Ŀ�����' ;AN000;8 log border characters
3104 DW 0 ;AN000;Length compress panel in mem
3105 DW 0 ;AN000;Off addr compressed panel
3106 DW 0 ;AN000;Seg addr compressed panel
3107 DW PANEL72_W*PANEL72_L;AN000;Length expanded panel in mem
3108 DW OFFSET PANEL72 ;AN000;Off addr of expanded panel in
3109 DW 0 ;AN000;Seg addr of expanded panel in
3110 DW 0 ;AN000;Len of the mixed panel in mem
3111 DW 0 ;AN000;Off addr of mixed panel in mem
3112 DW 0 ;AN000;Seg addr of mixed panel in mem
3113 DW 0 ;AN000;Len of the panel label
3114 DW 0 ;AN000;Off addr of the panel label
3115 DW 0 ;AN000;Seg addr of the panel label
3116 DW 0 ;AN000;Beg relative row of panel label
3117 DW 0 ;AN000;Beg relative col of panel label
3118 DW 0 ;AN000;Len of the panel stored in file
3119 DW 0 ;AN000;Off address of full filespec
3120 DW 0 ;AN000;Seg address of full filespec
3121 DW 0 ;AN000;Lower off word of the beg off
3122 DW 0 ;AN000;High off word of the beg off
3123 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3124 DW 1 ;AN000;Number of child panel entries
3125 DW OFFSET CHILD2 ;AN000;Off address of child panel table
3126 DW 0 ;AN000;Seg address of child panel table
3127 DW 10 DUP(0) ;AN000;GHG new adds
3128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3129;
3130; PAN_DSKCPY_CPY
3131;
3132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3133PCB73 LABEL WORD ;AN000;
3134 DW PCB_EXP ;AN000;option word
3135 DB 0 ;AN000;GHG new adds
3136 DB 0 ;AN000;GHG new adds
3137 DB 0 ;AN000;GHG new adds
3138 DW 8 ;AN000;row location of panel
3139 DW LEFT_COL ;AN000;column location of panel
3140 DW PANEL73_W ;AN000;text char width of panel
3141 DW 0 ;AN000;Max poss panel sizing in text
3142 DW WHITE_BLUE ;AN000;Index number of log color
3143 DB '�Ŀ�����' ;AN000;8 log border characters
3144 DW 0 ;AN000;Length compress panel in mem
3145 DW 0 ;AN000;Off addr compressed panel
3146 DW 0 ;AN000;Seg addr compressed panel
3147 DW PANEL73_W*PANEL73_L;AN000;Length expanded panel in mem
3148 DW OFFSET PANEL73 ;AN000;Off addr of expanded panel in
3149 DW 0 ;AN000;Seg addr of expanded panel in
3150 DW 0 ;AN000;Len of the mixed panel in mem
3151 DW 0 ;AN000;Off addr of mixed panel in mem
3152 DW 0 ;AN000;Seg addr of mixed panel in mem
3153 DW 0 ;AN000;Len of the panel label
3154 DW 0 ;AN000;Off addr of the panel label
3155 DW 0 ;AN000;Seg addr of the panel label
3156 DW 0 ;AN000;Beg relative row of panel label
3157 DW 0 ;AN000;Beg relative col of panel label
3158 DW 0 ;AN000;Len of the panel stored in file
3159 DW 0 ;AN000;Off address of full filespec
3160 DW 0 ;AN000;Seg address of full filespec
3161 DW 0 ;AN000;Lower off word of the beg off
3162 DW 0 ;AN000;High off word of the beg off
3163 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3164 DW 0 ;AN000;Number of child panel entries
3165 DW 0 ;AN000;Off address of child panel table
3166 DW 0 ;AN000;Seg address of child panel table
3167 DW 10 DUP(0) ;AN000;GHG new adds
3168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3169;
3170; PAN_PARTIAL
3171;
3172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3173PCB74 LABEL WORD ;AN000;
3174 DW PCB_EXP ;AN000;option word
3175 DB 0 ;AN000;GHG new adds
3176 DB 0 ;AN000;GHG new adds
3177 DB 0 ;AN000;GHG new adds
3178 DW 6 ;AN000;row location of panel
3179 DW left_col+7 ;AC028;column location of panel
3180 DW PANEL74_W ;AN000;text char width of panel
3181 DW 0 ;AN000;Max poss panel sizing in text
3182 DW WHITE_BLUE ;AN000;Index number of log color
3183 DB '�Ŀ�����' ;AN000;8 log border characters
3184 DW 0 ;AN000;Length compress panel in mem
3185 DW 0 ;AN000;Off addr compressed panel
3186 DW 0 ;AN000;Seg addr compressed panel
3187 DW PANEL74_W*PANEL74_L;AN000;Length expanded panel in mem
3188 DW OFFSET PANEL74 ;AN000;Off addr of expanded panel in
3189 DW 0 ;AN000;Seg addr of expanded panel in
3190 DW 0 ;AN000;Len of the mixed panel in mem
3191 DW 0 ;AN000;Off addr of mixed panel in mem
3192 DW 0 ;AN000;Seg addr of mixed panel in mem
3193 DW 0 ;AN000;Len of the panel label
3194 DW 0 ;AN000;Off addr of the panel label
3195 DW 0 ;AN000;Seg addr of the panel label
3196 DW 0 ;AN000;Beg relative row of panel label
3197 DW 0 ;AN000;Beg relative col of panel label
3198 DW 0 ;AN000;Len of the panel stored in file
3199 DW 0 ;AN000;Off address of full filespec
3200 DW 0 ;AN000;Seg address of full filespec
3201 DW 0 ;AN000;Lower off word of the beg off
3202 DW 0 ;AN000;High off word of the beg off
3203 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3204 DW 0 ;AN000;Number of child panel entries
3205 DW 0 ;AN000;Off address of child panel table
3206 DW 0 ;AN000;Seg address of child panel table
3207 DW 10 DUP(0) ;AN000;GHG new adds
3208;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3209;
3210; FORMAT_DISKETTE (SINGLE DRIVE - SHELL)
3211;
3212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3213PCB75 LABEL WORD ;AN000;
3214 DW PCB_EXP ;AN000;option word
3215 DB 0 ;AN000;GHG new adds
3216 DB 0 ;AN000;GHG new adds
3217 DB 0 ;AN000;GHG new adds
3218 DW 8 ;AN000;row location of panel
3219 DW LEFT_COL ;AN000;column location of panel
3220 DW PANEL75_W ;AN000;text char width of panel
3221 DW 0 ;AN000;Max poss panel sizing in text
3222 DW WHITE_BLUE ;AN000;Index number of log color
3223 DB '�Ŀ�����' ;AN000;8 log border characters
3224 DW 0 ;AN000;Length compress panel in mem
3225 DW 0 ;AN000;Off addr compressed panel
3226 DW 0 ;AN000;Seg addr compressed panel
3227 DW PANEL75_W*PANEL75_L;AN000;Length expanded panel in mem
3228 DW OFFSET PANEL75 ;AN000;Off addr of expanded panel in
3229 DW 0 ;AN000;Seg addr of expanded panel in
3230 DW 0 ;AN000;Len of the mixed panel in mem
3231 DW 0 ;AN000;Off addr of mixed panel in mem
3232 DW 0 ;AN000;Seg addr of mixed panel in mem
3233 DW 0 ;AN000;Len of the panel label
3234 DW 0 ;AN000;Off addr of the panel label
3235 DW 0 ;AN000;Seg addr of the panel label
3236 DW 0 ;AN000;Beg relative row of panel label
3237 DW 0 ;AN000;Beg relative col of panel label
3238 DW 0 ;AN000;Len of the panel stored in file
3239 DW 0 ;AN000;Off address of full filespec
3240 DW 0 ;AN000;Seg address of full filespec
3241 DW 0 ;AN000;Lower off word of the beg off
3242 DW 0 ;AN000;High off word of the beg off
3243 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3244 DW 0 ;AN000;Number of child panel entries
3245 DW 0 ;AN000;Off address of child panel table
3246 DW 0 ;AN000;Seg address of child panel table
3247 DW 10 DUP(0) ;AN000;GHG new adds
3248;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3249;
3250; FORMAT_DISKETTE (SINGLE DRIVE - STARTUP)
3251;
3252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3253PCB76 LABEL WORD ;AN000;
3254 DW PCB_EXP ;AN000;option word
3255 DB 0 ;AN000;GHG new adds
3256 DB 0 ;AN000;GHG new adds
3257 DB 0 ;AN000;GHG new adds
3258 DW 8 ;AN000;row location of panel
3259 DW LEFT_COL ;AN000;column location of panel
3260 DW PANEL76_W ;AN000;text char width of panel
3261 DW 0 ;AN000;Max poss panel sizing in text
3262 DW WHITE_BLUE ;AN000;Index number of log color
3263 DB '�Ŀ�����' ;AN000;8 log border characters
3264 DW 0 ;AN000;Length compress panel in mem
3265 DW 0 ;AN000;Off addr compressed panel
3266 DW 0 ;AN000;Seg addr compressed panel
3267 DW PANEL76_W*PANEL76_L;AN000;Length expanded panel in mem
3268 DW OFFSET PANEL76 ;AN000;Off addr of expanded panel in
3269 DW 0 ;AN000;Seg addr of expanded panel in
3270 DW 0 ;AN000;Len of the mixed panel in mem
3271 DW 0 ;AN000;Off addr of mixed panel in mem
3272 DW 0 ;AN000;Seg addr of mixed panel in mem
3273 DW 0 ;AN000;Len of the panel label
3274 DW 0 ;AN000;Off addr of the panel label
3275 DW 0 ;AN000;Seg addr of the panel label
3276 DW 0 ;AN000;Beg relative row of panel label
3277 DW 0 ;AN000;Beg relative col of panel label
3278 DW 0 ;AN000;Len of the panel stored in file
3279 DW 0 ;AN000;Off address of full filespec
3280 DW 0 ;AN000;Seg address of full filespec
3281 DW 0 ;AN000;Lower off word of the beg off
3282 DW 0 ;AN000;High off word of the beg off
3283 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3284 DW 0 ;AN000;Number of child panel entries
3285 DW 0 ;AN000;Off address of child panel table
3286 DW 0 ;AN000;Seg address of child panel table
3287 DW 10 DUP(0) ;AN000;GHG new adds
3288;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3289;
3290; SUB_REM_SHELL_360
3291;
3292;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3293PCB77 LABEL WORD ;AN000;
3294 DW PCB_EXP ;AN000;option word
3295 DB 0 ;AN000;GHG new adds
3296 DB 0 ;AN000;GHG new adds
3297 DB 0 ;AN000;GHG new adds
3298 DW 8 ;AN000;row location of panel
3299 DW LEFT_COL ;AN000;column location of panel
3300 DW PANEL77_W ;AN000;text char width of panel
3301 DW 0 ;AN000;Max poss panel sizing in text
3302 DW WHITE_BLUE ;AN000;Index number of log color
3303 DB '�Ŀ�����' ;AN000;8 log border characters
3304 DW 0 ;AN000;Length compress panel in mem
3305 DW 0 ;AN000;Off addr compressed panel
3306 DW 0 ;AN000;Seg addr compressed panel
3307 DW PANEL77_W*PANEL77_L;AN000;Length expanded panel in mem
3308 DW OFFSET PANEL77 ;AN000;Off addr of expanded panel in
3309 DW 0 ;AN000;Seg addr of expanded panel in
3310 DW 0 ;AN000;Len of the mixed panel in mem
3311 DW 0 ;AN000;Off addr of mixed panel in mem
3312 DW 0 ;AN000;Seg addr of mixed panel in mem
3313 DW 0 ;AN000;Len of the panel label
3314 DW 0 ;AN000;Off addr of the panel label
3315 DW 0 ;AN000;Seg addr of the panel label
3316 DW 0 ;AN000;Beg relative row of panel label
3317 DW 0 ;AN000;Beg relative col of panel label
3318 DW 0 ;AN000;Len of the panel stored in file
3319 DW 0 ;AN000;Off address of full filespec
3320 DW 0 ;AN000;Seg address of full filespec
3321 DW 0 ;AN000;Lower off word of the beg off
3322 DW 0 ;AN000;High off word of the beg off
3323 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3324 DW 0 ;AN000;Number of child panel entries
3325 DW 0 ;AN000;Off address of child panel table
3326 DW 0 ;AN000;Seg address of child panel table
3327 DW 10 DUP(0) ;AN000;GHG new adds
3328;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3329;
3330; SUB_REM_SELECT_360
3331;
3332;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3333PCB78 LABEL WORD ;AN000;
3334 DW PCB_EXP ;AN000;option word
3335 DB 0 ;AN000;GHG new adds
3336 DB 0 ;AN000;GHG new adds
3337 DB 0 ;AN000;GHG new adds
3338 DW 8 ;AN000;row location of panel
3339 DW LEFT_COL ;AN000;column location of panel
3340 DW PANEL78_W ;AN000;text char width of panel
3341 DW 0 ;AN000;Max poss panel sizing in text
3342 DW WHITE_BLUE ;AN000;Index number of log color
3343 DB '�Ŀ�����' ;AN000;8 log border characters
3344 DW 0 ;AN000;Length compress panel in mem
3345 DW 0 ;AN000;Off addr compressed panel
3346 DW 0 ;AN000;Seg addr compressed panel
3347 DW PANEL78_W*PANEL78_L;AN000;Length expanded panel in mem
3348 DW OFFSET PANEL78 ;AN000;Off addr of expanded panel in
3349 DW 0 ;AN000;Seg addr of expanded panel in
3350 DW 0 ;AN000;Len of the mixed panel in mem
3351 DW 0 ;AN000;Off addr of mixed panel in mem
3352 DW 0 ;AN000;Seg addr of mixed panel in mem
3353 DW 0 ;AN000;Len of the panel label
3354 DW 0 ;AN000;Off addr of the panel label
3355 DW 0 ;AN000;Seg addr of the panel label
3356 DW 0 ;AN000;Beg relative row of panel label
3357 DW 0 ;AN000;Beg relative col of panel label
3358 DW 0 ;AN000;Len of the panel stored in file
3359 DW 0 ;AN000;Off address of full filespec
3360 DW 0 ;AN000;Seg address of full filespec
3361 DW 0 ;AN000;Lower off word of the beg off
3362 DW 0 ;AN000;High off word of the beg off
3363 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3364 DW 0 ;AN000;Number of child panel entries
3365 DW 0 ;AN000;Off address of child panel table
3366 DW 0 ;AN000;Seg address of child panel table
3367 DW 10 DUP(0) ;AN000;GHG new adds
3368;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3369;
3370; SUB_REM_UTIL1_360
3371;
3372;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3373PCB79 LABEL WORD ;AN000;
3374 DW PCB_EXP ;AN000;option word
3375 DB 0 ;AN000;GHG new adds
3376 DB 0 ;AN000;GHG new adds
3377 DB 0 ;AN000;GHG new adds
3378 DW 8 ;AN000;row location of panel
3379 DW LEFT_COL ;AN000;column location of panel
3380 DW PANEL79_W ;AN000;text char width of panel
3381 DW 0 ;AN000;Max poss panel sizing in text
3382 DW WHITE_BLUE ;AN000;Index number of log color
3383 DB '�Ŀ�����' ;AN000;8 log border characters
3384 DW 0 ;AN000;Length compress panel in mem
3385 DW 0 ;AN000;Off addr compressed panel
3386 DW 0 ;AN000;Seg addr compressed panel
3387 DW PANEL79_W*PANEL79_L;AN000;Length expanded panel in mem
3388 DW OFFSET PANEL79 ;AN000;Off addr of expanded panel in
3389 DW 0 ;AN000;Seg addr of expanded panel in
3390 DW 0 ;AN000;Len of the mixed panel in mem
3391 DW 0 ;AN000;Off addr of mixed panel in mem
3392 DW 0 ;AN000;Seg addr of mixed panel in mem
3393 DW 0 ;AN000;Len of the panel label
3394 DW 0 ;AN000;Off addr of the panel label
3395 DW 0 ;AN000;Seg addr of the panel label
3396 DW 0 ;AN000;Beg relative row of panel label
3397 DW 0 ;AN000;Beg relative col of panel label
3398 DW 0 ;AN000;Len of the panel stored in file
3399 DW 0 ;AN000;Off address of full filespec
3400 DW 0 ;AN000;Seg address of full filespec
3401 DW 0 ;AN000;Lower off word of the beg off
3402 DW 0 ;AN000;High off word of the beg off
3403 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3404 DW 0 ;AN000;Number of child panel entries
3405 DW 0 ;AN000;Off address of child panel table
3406 DW 0 ;AN000;Seg address of child panel table
3407 DW 10 DUP(0) ;AN000;GHG new adds
3408;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3409;
3410; SUB_COPYING
3411;
3412;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3413PCB80 LABEL WORD ;AN000;
3414 DW PCB_EXP ;AN000;option word
3415 DB 0 ;AN000;GHG new adds
3416 DB 0 ;AN000;GHG new adds
3417 DB 0 ;AN000;GHG new adds
3418 DW 8 ;AN000;row location of panel
3419 DW LEFT_COL ;AN000;column location of panel
3420 DW PANEL80_W ;AN000;text char width of panel
3421 DW 0 ;AN000;Max poss panel sizing in text
3422 DW WHITE_BLUE ;AN000;Index number of log color
3423 DB '�Ŀ�����' ;AN000;8 log border characters
3424 DW 0 ;AN000;Length compress panel in mem
3425 DW 0 ;AN000;Off addr compressed panel
3426 DW 0 ;AN000;Seg addr compressed panel
3427 DW PANEL80_W*PANEL80_L;AN000;Length expanded panel in mem
3428 DW OFFSET PANEL80 ;AN000;Off addr of expanded panel in
3429 DW 0 ;AN000;Seg addr of expanded panel in
3430 DW 0 ;AN000;Len of the mixed panel in mem
3431 DW 0 ;AN000;Off addr of mixed panel in mem
3432 DW 0 ;AN000;Seg addr of mixed panel in mem
3433 DW 0 ;AN000;Len of the panel label
3434 DW 0 ;AN000;Off addr of the panel label
3435 DW 0 ;AN000;Seg addr of the panel label
3436 DW 0 ;AN000;Beg relative row of panel label
3437 DW 0 ;AN000;Beg relative col of panel label
3438 DW 0 ;AN000;Len of the panel stored in file
3439 DW 0 ;AN000;Off address of full filespec
3440 DW 0 ;AN000;Seg address of full filespec
3441 DW 0 ;AN000;Lower off word of the beg off
3442 DW 0 ;AN000;High off word of the beg off
3443 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3444 DW 0 ;AN000;Number of child panel entries
3445 DW 0 ;AN000;Off address of child panel table
3446 DW 0 ;AN000;Seg address of child panel table
3447 DW 10 DUP(0) ;AN000;GHG new adds
3448;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3449;
3450; SUB_INS_WORK1_360
3451;
3452;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3453PCB81 LABEL WORD ;AN000;
3454 DW PCB_EXP ;AN000;option word
3455 DB 0 ;AN000;GHG new adds
3456 DB 0 ;AN000;GHG new adds
3457 DB 0 ;AN000;GHG new adds
3458 DW 8 ;AN000;row location of panel
3459 DW LEFT_COL ;AN000;column location of panel
3460 DW PANEL81_W ;AN000;text char width of panel
3461 DW 0 ;AN000;Max poss panel sizing in text
3462 DW WHITE_BLUE ;AN000;Index number of log color
3463 DB '�Ŀ�����' ;AN000;8 log border characters
3464 DW 0 ;AN000;Length compress panel in mem
3465 DW 0 ;AN000;Off addr compressed panel
3466 DW 0 ;AN000;Seg addr compressed panel
3467 DW PANEL81_W*PANEL81_L;AN000;Length expanded panel in mem
3468 DW OFFSET PANEL81 ;AN000;Off addr of expanded panel in
3469 DW 0 ;AN000;Seg addr of expanded panel in
3470 DW 0 ;AN000;Len of the mixed panel in mem
3471 DW 0 ;AN000;Off addr of mixed panel in mem
3472 DW 0 ;AN000;Seg addr of mixed panel in mem
3473 DW 0 ;AN000;Len of the panel label
3474 DW 0 ;AN000;Off addr of the panel label
3475 DW 0 ;AN000;Seg addr of the panel label
3476 DW 0 ;AN000;Beg relative row of panel label
3477 DW 0 ;AN000;Beg relative col of panel label
3478 DW 0 ;AN000;Len of the panel stored in file
3479 DW 0 ;AN000;Off address of full filespec
3480 DW 0 ;AN000;Seg address of full filespec
3481 DW 0 ;AN000;Lower off word of the beg off
3482 DW 0 ;AN000;High off word of the beg off
3483 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3484 DW 1 ;AN000;Number of child panel entries
3485 DW OFFSET CHILD2 ;AN000;Off address of child panel table
3486 DW 0 ;AN000;Seg address of child panel table
3487 DW 10 DUP(0) ;AN000;GHG new adds
3488;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3489;
3490; SUB_INS_WORK2_360
3491;
3492;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3493PCB82 LABEL WORD ;AN000;
3494 DW PCB_EXP ;AN000;option word
3495 DB 0 ;AN000;GHG new adds
3496 DB 0 ;AN000;GHG new adds
3497 DB 0 ;AN000;GHG new adds
3498 DW 8 ;AN000;row location of panel
3499 DW LEFT_COL ;AN000;column location of panel
3500 DW PANEL82_W ;AN000;text char width of panel
3501 DW 0 ;AN000;Max poss panel sizing in text
3502 DW WHITE_BLUE ;AN000;Index number of log color
3503 DB '�Ŀ�����' ;AN000;8 log border characters
3504 DW 0 ;AN000;Length compress panel in mem
3505 DW 0 ;AN000;Off addr compressed panel
3506 DW 0 ;AN000;Seg addr compressed panel
3507 DW PANEL82_W*PANEL82_L;AN000;Length expanded panel in mem
3508 DW OFFSET PANEL82 ;AN000;Off addr of expanded panel in
3509 DW 0 ;AN000;Seg addr of expanded panel in
3510 DW 0 ;AN000;Len of the mixed panel in mem
3511 DW 0 ;AN000;Off addr of mixed panel in mem
3512 DW 0 ;AN000;Seg addr of mixed panel in mem
3513 DW 0 ;AN000;Len of the panel label
3514 DW 0 ;AN000;Off addr of the panel label
3515 DW 0 ;AN000;Seg addr of the panel label
3516 DW 0 ;AN000;Beg relative row of panel label
3517 DW 0 ;AN000;Beg relative col of panel label
3518 DW 0 ;AN000;Len of the panel stored in file
3519 DW 0 ;AN000;Off address of full filespec
3520 DW 0 ;AN000;Seg address of full filespec
3521 DW 0 ;AN000;Lower off word of the beg off
3522 DW 0 ;AN000;High off word of the beg off
3523 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3524 DW 1 ;AN000;Number of child panel entries
3525 DW OFFSET CHILD2 ;AN000;Off address of child panel table
3526 DW 0 ;AN000;Seg address of child panel table
3527 DW 10 DUP(0) ;AN000;GHG new adds
3528;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3529;
3530; SUB_INS_SHELL_360
3531;
3532;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3533PCB83 LABEL WORD ;AN000;
3534 DW PCB_EXP ;AN000;option word
3535 DB 0 ;AN000;GHG new adds
3536 DB 0 ;AN000;GHG new adds
3537 DB 0 ;AN000;GHG new adds
3538 DW 8 ;AN000;row location of panel
3539 DW LEFT_COL ;AN000;column location of panel
3540 DW PANEL83_W ;AN000;text char width of panel
3541 DW 0 ;AN000;Max poss panel sizing in text
3542 DW WHITE_BLUE ;AN000;Index number of log color
3543 DB '�Ŀ�����' ;AN000;8 log border characters
3544 DW 0 ;AN000;Length compress panel in mem
3545 DW 0 ;AN000;Off addr compressed panel
3546 DW 0 ;AN000;Seg addr compressed panel
3547 DW PANEL83_W*PANEL83_L;AN000;Length expanded panel in mem
3548 DW OFFSET PANEL83 ;AN000;Off addr of expanded panel in
3549 DW 0 ;AN000;Seg addr of expanded panel in
3550 DW 0 ;AN000;Len of the mixed panel in mem
3551 DW 0 ;AN000;Off addr of mixed panel in mem
3552 DW 0 ;AN000;Seg addr of mixed panel in mem
3553 DW 0 ;AN000;Len of the panel label
3554 DW 0 ;AN000;Off addr of the panel label
3555 DW 0 ;AN000;Seg addr of the panel label
3556 DW 0 ;AN000;Beg relative row of panel label
3557 DW 0 ;AN000;Beg relative col of panel label
3558 DW 0 ;AN000;Len of the panel stored in file
3559 DW 0 ;AN000;Off address of full filespec
3560 DW 0 ;AN000;Seg address of full filespec
3561 DW 0 ;AN000;Lower off word of the beg off
3562 DW 0 ;AN000;High off word of the beg off
3563 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3564 DW 1 ;AN000;Number of child panel entries
3565 DW OFFSET CHILD2 ;AN000;Off address of child panel table
3566 DW 0 ;AN000;Seg address of child panel table
3567 DW 10 DUP(0) ;AN000;GHG new adds
3568;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3569;
3570; SUB_INS_START_360
3571;
3572;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3573PCB84 LABEL WORD ;AN000;
3574 DW PCB_EXP ;AN000;option word
3575 DB 0 ;AN000;GHG new adds
3576 DB 0 ;AN000;GHG new adds
3577 DB 0 ;AN000;GHG new adds
3578 DW 8 ;AN000;row location of panel
3579 DW LEFT_COL ;AN000;column location of panel
3580 DW PANEL84_W ;AN000;text char width of panel
3581 DW 0 ;AN000;Max poss panel sizing in text
3582 DW WHITE_BLUE ;AN000;Index number of log color
3583 DB '�Ŀ�����' ;AN000;8 log border characters
3584 DW 0 ;AN000;Length compress panel in mem
3585 DW 0 ;AN000;Off addr compressed panel
3586 DW 0 ;AN000;Seg addr compressed panel
3587 DW PANEL84_W*PANEL84_L;AN000;Length expanded panel in mem
3588 DW OFFSET PANEL84 ;AN000;Off addr of expanded panel in
3589 DW 0 ;AN000;Seg addr of expanded panel in
3590 DW 0 ;AN000;Len of the mixed panel in mem
3591 DW 0 ;AN000;Off addr of mixed panel in mem
3592 DW 0 ;AN000;Seg addr of mixed panel in mem
3593 DW 0 ;AN000;Len of the panel label
3594 DW 0 ;AN000;Off addr of the panel label
3595 DW 0 ;AN000;Seg addr of the panel label
3596 DW 0 ;AN000;Beg relative row of panel label
3597 DW 0 ;AN000;Beg relative col of panel label
3598 DW 0 ;AN000;Len of the panel stored in file
3599 DW 0 ;AN000;Off address of full filespec
3600 DW 0 ;AN000;Seg address of full filespec
3601 DW 0 ;AN000;Lower off word of the beg off
3602 DW 0 ;AN000;High off word of the beg off
3603 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3604 DW 1 ;AN000;Number of child panel entries
3605 DW OFFSET CHILD2 ;AN000;Off address of child panel table
3606 DW 0 ;AN000;Seg address of child panel table
3607 DW 10 DUP(0) ;AN000;GHG new adds
3608;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3609;
3610; SUB_INS_INSTALL_360
3611;
3612;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3613PCB85 LABEL WORD ;AN000;
3614 DW PCB_EXP ;AN000;option word
3615 DB 0 ;AN000;GHG new adds
3616 DB 0 ;AN000;GHG new adds
3617 DB 0 ;AN000;GHG new adds
3618 DW 8 ;AN000;row location of panel
3619 DW LEFT_COL ;AN000;column location of panel
3620 DW PANEL85_W ;AN000;text char width of panel
3621 DW 0 ;AN000;Max poss panel sizing in text
3622 DW WHITE_BLUE ;AN000;Index number of log color
3623 DB '�Ŀ�����' ;AN000;8 log border characters
3624 DW 0 ;AN000;Length compress panel in mem
3625 DW 0 ;AN000;Off addr compressed panel
3626 DW 0 ;AN000;Seg addr compressed panel
3627 DW PANEL85_W*PANEL85_L;AN000;Length expanded panel in mem
3628 DW OFFSET PANEL85 ;AN000;Off addr of expanded panel in
3629 DW 0 ;AN000;Seg addr of expanded panel in
3630 DW 0 ;AN000;Len of the mixed panel in mem
3631 DW 0 ;AN000;Off addr of mixed panel in mem
3632 DW 0 ;AN000;Seg addr of mixed panel in mem
3633 DW 0 ;AN000;Len of the panel label
3634 DW 0 ;AN000;Off addr of the panel label
3635 DW 0 ;AN000;Seg addr of the panel label
3636 DW 0 ;AN000;Beg relative row of panel label
3637 DW 0 ;AN000;Beg relative col of panel label
3638 DW 0 ;AN000;Len of the panel stored in file
3639 DW 0 ;AN000;Off address of full filespec
3640 DW 0 ;AN000;Seg address of full filespec
3641 DW 0 ;AN000;Lower off word of the beg off
3642 DW 0 ;AN000;High off word of the beg off
3643 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3644 DW 1 ;AN000;Number of child panel entries
3645 DW OFFSET CHILD2 ;AN000;Off address of child panel table
3646 DW 0 ;AN000;Seg address of child panel table
3647 DW 10 DUP(0) ;AN000;GHG new adds
3648;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3649;
3650; SUB_INS_WORK1_S360 EQU 86 ;AN000;DT 1 drive 360 installation
3651;
3652;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3653PCB86 LABEL WORD ;AN000;
3654 DW PCB_EXP ;AN000;option word
3655 DB 0 ;AN000;GHG new adds
3656 DB 0 ;AN000;GHG new adds
3657 DB 0 ;AN000;GHG new adds
3658 DW 8 ;AN000;row location of panel
3659 DW LEFT_COL ;AN000;column location of panel
3660 DW PANEL86_W ;AN000;text char width of panel
3661 DW 0 ;AN000;Max poss panel sizing in text
3662 DW WHITE_BLUE ;AN000;Index number of log color
3663 DB '�Ŀ�����' ;AN000;8 log border characters
3664 DW 0 ;AN000;Length compress panel in mem
3665 DW 0 ;AN000;Off addr compressed panel
3666 DW 0 ;AN000;Seg addr compressed panel
3667 DW PANEL86_W*PANEL86_L;AN000;Length expanded panel in mem
3668 DW OFFSET PANEL86 ;AN000;Off addr of expanded panel in
3669 DW 0 ;AN000;Seg addr of expanded panel in
3670 DW 0 ;AN000;Len of the mixed panel in mem
3671 DW 0 ;AN000;Off addr of mixed panel in mem
3672 DW 0 ;AN000;Seg addr of mixed panel in mem
3673 DW 0 ;AN000;Len of the panel label
3674 DW 0 ;AN000;Off addr of the panel label
3675 DW 0 ;AN000;Seg addr of the panel label
3676 DW 0 ;AN000;Beg relative row of panel label
3677 DW 0 ;AN000;Beg relative col of panel label
3678 DW 0 ;AN000;Len of the panel stored in file
3679 DW 0 ;AN000;Off address of full filespec
3680 DW 0 ;AN000;Seg address of full filespec
3681 DW 0 ;AN000;Lower off word of the beg off
3682 DW 0 ;AN000;High off word of the beg off
3683 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3684 DW 1 ;AN000;Number of child panel entries
3685 DW OFFSET CHILD2 ;AN000;Off address of child panel table
3686 DW 0 ;AN000;Seg address of child panel table
3687 DW 10 DUP(0) ;AN000;GHG new adds
3688;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3689;
3690; SUB_INS_WORK2_S360 EQU 87 ;AN000;DT
3691;
3692;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3693PCB87 LABEL WORD ;AN000;
3694 DW PCB_EXP ;AN000;option word
3695 DB 0 ;AN000;GHG new adds
3696 DB 0 ;AN000;GHG new adds
3697 DB 0 ;AN000;GHG new adds
3698 DW 8 ;AN000;row location of panel
3699 DW LEFT_COL ;AN000;column location of panel
3700 DW PANEL87_W ;AN000;text char width of panel
3701 DW 0 ;AN000;Max poss panel sizing in text
3702 DW WHITE_BLUE ;AN000;Index number of log color
3703 DB '�Ŀ�����' ;AN000;8 log border characters
3704 DW 0 ;AN000;Length compress panel in mem
3705 DW 0 ;AN000;Off addr compressed panel
3706 DW 0 ;AN000;Seg addr compressed panel
3707 DW PANEL87_W*PANEL87_L;AN000;Length expanded panel in mem
3708 DW OFFSET PANEL87 ;AN000;Off addr of expanded panel in
3709 DW 0 ;AN000;Seg addr of expanded panel in
3710 DW 0 ;AN000;Len of the mixed panel in mem
3711 DW 0 ;AN000;Off addr of mixed panel in mem
3712 DW 0 ;AN000;Seg addr of mixed panel in mem
3713 DW 0 ;AN000;Len of the panel label
3714 DW 0 ;AN000;Off addr of the panel label
3715 DW 0 ;AN000;Seg addr of the panel label
3716 DW 0 ;AN000;Beg relative row of panel label
3717 DW 0 ;AN000;Beg relative col of panel label
3718 DW 0 ;AN000;Len of the panel stored in file
3719 DW 0 ;AN000;Off address of full filespec
3720 DW 0 ;AN000;Seg address of full filespec
3721 DW 0 ;AN000;Lower off word of the beg off
3722 DW 0 ;AN000;High off word of the beg off
3723 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3724 DW 1 ;AN000;Number of child panel entries
3725 DW OFFSET CHILD2 ;AN000;Off address of child panel table
3726 DW 0 ;AN000;Seg address of child panel table
3727 DW 10 DUP(0) ;AN000;GHG new adds
3728;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3729;
3730; SUB_INS_SHELL_S360 EQU 88 ;AN000;DT "
3731;
3732;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3733PCB88 LABEL WORD ;AN000;
3734 DW PCB_EXP ;AN000;option word
3735 DB 0 ;AN000;GHG new adds
3736 DB 0 ;AN000;GHG new adds
3737 DB 0 ;AN000;GHG new adds
3738 DW 8 ;AN000;row location of panel
3739 DW LEFT_COL ;AN000;column location of panel
3740 DW PANEL88_W ;AN000;text char width of panel
3741 DW 0 ;AN000;Max poss panel sizing in text
3742 DW WHITE_BLUE ;AN000;Index number of log color
3743 DB '�Ŀ�����' ;AN000;8 log border characters
3744 DW 0 ;AN000;Length compress panel in mem
3745 DW 0 ;AN000;Off addr compressed panel
3746 DW 0 ;AN000;Seg addr compressed panel
3747 DW PANEL88_W*PANEL88_L ;AN000;Length expanded panel in mem
3748 DW OFFSET PANEL88 ;AN000;Off addr of expanded panel in
3749 DW 0 ;AN000;Seg addr of expanded panel in
3750 DW 0 ;AN000;Len of the mixed panel in mem
3751 DW 0 ;AN000;Off addr of mixed panel in mem
3752 DW 0 ;AN000;Seg addr of mixed panel in mem
3753 DW 0 ;AN000;Len of the panel label
3754 DW 0 ;AN000;Off addr of the panel label
3755 DW 0 ;AN000;Seg addr of the panel label
3756 DW 0 ;AN000;Beg relative row of panel label
3757 DW 0 ;AN000;Beg relative col of panel label
3758 DW 0 ;AN000;Len of the panel stored in file
3759 DW 0 ;AN000;Off address of full filespec
3760 DW 0 ;AN000;Seg address of full filespec
3761 DW 0 ;AN000;Lower off word of the beg off
3762 DW 0 ;AN000;High off word of the beg off
3763 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3764 DW 1 ;AN000;Number of child panel entries
3765 DW OFFSET CHILD2 ;AN000;Off address of child panel table
3766 DW 0 ;AN000;Seg address of child panel table
3767 DW 10 DUP(0) ;AN000;GHG new adds
3768;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3769;
3770; SUB_INS_STARTT_S360 EQU 89 ;AN000;DT "
3771;
3772;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3773PCB89 LABEL WORD ;AN000;
3774 DW PCB_EXP ;AN000;option word
3775 DB 0 ;AN000;GHG new adds
3776 DB 0 ;AN000;GHG new adds
3777 DB 0 ;AN000;GHG new adds
3778 DW 8 ;AN000;row location of panel
3779 DW LEFT_COL ;AN000;column location of panel
3780 DW PANEL89_W ;AN000;text char width of panel
3781 DW 0 ;AN000;Max poss panel sizing in text
3782 DW WHITE_BLUE ;AN000;Index number of log color
3783 DB '�Ŀ�����' ;AN000;8 log border characters
3784 DW 0 ;AN000;Length compress panel in mem
3785 DW 0 ;AN000;Off addr compressed panel
3786 DW 0 ;AN000;Seg addr compressed panel
3787 DW PANEL89_W*PANEL89_L ;AN000;Length expanded panel in mem
3788 DW OFFSET PANEL89 ;AN000;Off addr of expanded panel in
3789 DW 0 ;AN000;Seg addr of expanded panel in
3790 DW 0 ;AN000;Len of the mixed panel in mem
3791 DW 0 ;AN000;Off addr of mixed panel in mem
3792 DW 0 ;AN000;Seg addr of mixed panel in mem
3793 DW 0 ;AN000;Len of the panel label
3794 DW 0 ;AN000;Off addr of the panel label
3795 DW 0 ;AN000;Seg addr of the panel label
3796 DW 0 ;AN000;Beg relative row of panel label
3797 DW 0 ;AN000;Beg relative col of panel label
3798 DW 0 ;AN000;Len of the panel stored in file
3799 DW 0 ;AN000;Off address of full filespec
3800 DW 0 ;AN000;Seg address of full filespec
3801 DW 0 ;AN000;Lower off word of the beg off
3802 DW 0 ;AN000;High off word of the beg off
3803 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3804 DW 1 ;AN000;Number of child panel entries
3805 DW OFFSET CHILD2 ;AN000;Off address of child panel table
3806 DW 0 ;AN000;Seg address of child panel table
3807 DW 10 DUP(0) ;AN000;GHG new adds
3808;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3809;
3810; PAN_START360
3811;
3812;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3813PCB90 LABEL WORD ;AN000;
3814 DW PCB_EXP ;AN000;option word
3815 DB 0 ;AN000;GHG new adds
3816 DB 0 ;AN000;GHG new adds
3817 DB 0 ;AN000;GHG new adds
3818 DW 8 ;AN000;row location of panel
3819 DW LEFT_COL ;AN000;column location of panel
3820 DW PANEL90_W ;AN000;text char width of panel
3821 DW 0 ;AN000;Max poss panel sizing in text
3822 DW WHITE_BLUE ;AN000;Index number of log color
3823 DB '�Ŀ�����' ;AN000;8 log border characters
3824 DW 0 ;AN000;Length compress panel in mem
3825 DW 0 ;AN000;Off addr compressed panel
3826 DW 0 ;AN000;Seg addr compressed panel
3827 DW PANEL90_W*PANEL90_L ;AN000;Length expanded panel in mem
3828 DW OFFSET PANEL90 ;AN000;Off addr of expanded panel in
3829 DW 0 ;AN000;Seg addr of expanded panel in
3830 DW 0 ;AN000;Len of the mixed panel in mem
3831 DW 0 ;AN000;Off addr of mixed panel in mem
3832 DW 0 ;AN000;Seg addr of mixed panel in mem
3833 DW 0 ;AN000;Len of the panel label
3834 DW 0 ;AN000;Off addr of the panel label
3835 DW 0 ;AN000;Seg addr of the panel label
3836 DW 0 ;AN000;Beg relative row of panel label
3837 DW 0 ;AN000;Beg relative col of panel label
3838 DW 0 ;AN000;Len of the panel stored in file
3839 DW 0 ;AN000;Off address of full filespec
3840 DW 0 ;AN000;Seg address of full filespec
3841 DW 0 ;AN000;Lower off word of the beg off
3842 DW 0 ;AN000;High off word of the beg off
3843 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3844 DW 1 ;AN000;Number of child panel entries
3845 DW OFFSET CHILD2 ;AN000;Off address of child panel table
3846 DW 0 ;AN000;Seg address of child panel table
3847 DW 10 DUP(0) ;AN000;GHG new adds
3848;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3849;
3850; PAN_COMPLETE3
3851;
3852;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3853PCB91 LABEL WORD ;AN000;
3854 DW PCB_EXP ;AN000;option word
3855 DB 0 ;AN000;GHG new adds
3856 DB 0 ;AN000;GHG new adds
3857 DB 0 ;AN000;GHG new adds
3858 DW 8 ;AN000;row location of panel
3859 DW left_col+7 ;AC028;column location of panel
3860 DW PANEL91_W ;AN000;text char width of panel
3861 DW 0 ;AN000;Max poss panel sizing in text
3862 DW WHITE_BLUE ;AN000;Index number of log color
3863 DB '�Ŀ�����' ;AN000;8 log border characters
3864 DW 0 ;AN000;Length compress panel in mem
3865 DW 0 ;AN000;Off addr compressed panel
3866 DW 0 ;AN000;Seg addr compressed panel
3867 DW PANEL91_W*PANEL91_L ;AN000;Length expanded panel in mem
3868 DW OFFSET PANEL91 ;AN000;Off addr of expanded panel in
3869 DW 0 ;AN000;Seg addr of expanded panel in
3870 DW 0 ;AN000;Len of the mixed panel in mem
3871 DW 0 ;AN000;Off addr of mixed panel in mem
3872 DW 0 ;AN000;Seg addr of mixed panel in mem
3873 DW 0 ;AN000;Len of the panel label
3874 DW 0 ;AN000;Off addr of the panel label
3875 DW 0 ;AN000;Seg addr of the panel label
3876 DW 0 ;AN000;Beg relative row of panel label
3877 DW 0 ;AN000;Beg relative col of panel label
3878 DW 0 ;AN000;Len of the panel stored in file
3879 DW 0 ;AN000;Off address of full filespec
3880 DW 0 ;AN000;Seg address of full filespec
3881 DW 0 ;AN000;Lower off word of the beg off
3882 DW 0 ;AN000;High off word of the beg off
3883 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3884 DW 0 ;AN000;Number of child panel entries
3885 DW 0 ;AN000;Off address of child panel table
3886 DW 0 ;AN000;Seg address of child panel table
3887 DW 10 DUP(0) ;AN000;GHG new adds
3888;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3889;
3890; SUB_INSTALL_COPY
3891;
3892;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3893PCB92 LABEL WORD ;AN000;
3894 DW PCB_EXP ;AN000;option word
3895 DB 0 ;AN000;GHG new adds
3896 DB 0 ;AN000;GHG new adds
3897 DB 0 ;AN000;GHG new adds
3898 DW 8 ;AN000;row location of panel
3899 DW LEFT_COL ;AN000;column location of panel
3900 DW PANEL92_W ;AN000;text char width of panel
3901 DW 0 ;AN000;Max poss panel sizing in text
3902 DW WHITE_BLUE ;AN000;Index number of log color
3903 DB '�Ŀ�����' ;AN000;8 log border characters
3904 DW 0 ;AN000;Length compress panel in mem
3905 DW 0 ;AN000;Off addr compressed panel
3906 DW 0 ;AN000;Seg addr compressed panel
3907 DW PANEL92_W*PANEL92_L ;AN000;Length expanded panel in mem
3908 DW OFFSET PANEL92 ;AN000;Off addr of expanded panel in
3909 DW 0 ;AN000;Seg addr of expanded panel in
3910 DW 0 ;AN000;Len of the mixed panel in mem
3911 DW 0 ;AN000;Off addr of mixed panel in mem
3912 DW 0 ;AN000;Seg addr of mixed panel in mem
3913 DW 0 ;AN000;Len of the panel label
3914 DW 0 ;AN000;Off addr of the panel label
3915 DW 0 ;AN000;Seg addr of the panel label
3916 DW 0 ;AN000;Beg relative row of panel label
3917 DW 0 ;AN000;Beg relative col of panel label
3918 DW 0 ;AN000;Len of the panel stored in file
3919 DW 0 ;AN000;Off address of full filespec
3920 DW 0 ;AN000;Seg address of full filespec
3921 DW 0 ;AN000;Lower off word of the beg off
3922 DW 0 ;AN000;High off word of the beg off
3923 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3924 DW 0 ;AN000;Number of child panel entries
3925 DW 0 ;AN000;Off address of child panel table
3926 DW 0 ;AN000;Seg address of child panel table
3927 DW 10 DUP(0) ;AN000;GHG new adds
3928;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3929;
3930; SUB_SHELL_HD
3931;
3932;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3933PCB93 LABEL WORD ;AN000;
3934 DW PCB_EXP ;AN000;option word
3935 DB 0 ;AN000;GHG new adds
3936 DB 0 ;AN000;GHG new adds
3937 DB 0 ;AN000;GHG new adds
3938 DW 8 ;AN000;row location of panel
3939 DW LEFT_COL ;AN000;column location of panel
3940 DW PANEL93_W ;AN000;text char width of panel
3941 DW 0 ;AN000;Max poss panel sizing in text
3942 DW WHITE_BLUE ;AN000;Index number of log color
3943 DB '�Ŀ�����' ;AN000;8 log border characters
3944 DW 0 ;AN000;Length compress panel in mem
3945 DW 0 ;AN000;Off addr compressed panel
3946 DW 0 ;AN000;Seg addr compressed panel
3947 DW PANEL93_W*PANEL93_L;AN000;Length expanded panel in mem
3948 DW OFFSET PANEL93 ;AN000;Off addr of expanded panel in
3949 DW 0 ;AN000;Seg addr of expanded panel in
3950 DW 0 ;AN000;Len of the mixed panel in mem
3951 DW 0 ;AN000;Off addr of mixed panel in mem
3952 DW 0 ;AN000;Seg addr of mixed panel in mem
3953 DW 0 ;AN000;Len of the panel label
3954 DW 0 ;AN000;Off addr of the panel label
3955 DW 0 ;AN000;Seg addr of the panel label
3956 DW 0 ;AN000;Beg relative row of panel label
3957 DW 0 ;AN000;Beg relative col of panel label
3958 DW 0 ;AN000;Len of the panel stored in file
3959 DW 0 ;AN000;Off address of full filespec
3960 DW 0 ;AN000;Seg address of full filespec
3961 DW 0 ;AN000;Lower off word of the beg off
3962 DW 0 ;AN000;High off word of the beg off
3963 DW 9 DUP(0) ;AN000;Reserved for scroll and size
3964 DW 0 ;AN000;Number of child panel entries
3965 DW 0 ;AN000;Off address of child panel table
3966 DW 0 ;AN000;Seg address of child panel table
3967 DW 10 DUP(0) ;AN000;GHG new adds
3968;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3969;
3970; PAN_EXP_MEMORY2 EQU 94 ;AN000;JW
3971;
3972;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3973PCB94 LABEL WORD ;AN000;
3974 DW PCB_EXP ;AN000;option word
3975 DB 0 ;AN000;GHG new adds
3976 DB 0 ;AN000;GHG new adds
3977 DB 0 ;AN000;GHG new adds
3978 DW 1 ;AN000;row location of panel
3979 DW LEFT_COL ;AN000;column location of panel
3980 DW PANEL94_W ;AN000;text char width of panel
3981 DW 0 ;AN000;Max poss panel sizing in text
3982 DW WHITE_BLUE ;AN000;Index number of log color
3983 DB '�Ŀ�����' ;AN000;8 log border characters
3984 DW 0 ;AN000;Length compress panel in mem
3985 DW 0 ;AN000;Off addr compressed panel
3986 DW 0 ;AN000;Seg addr compressed panel
3987 DW PANEL94_W*PANEL94_L;AN000;Length expanded panel in mem
3988 DW OFFSET PANEL94 ;AN000;Off addr of expanded panel in
3989 DW 0 ;AN000;Seg addr of expanded panel in
3990 DW 0 ;AN000;Len of the mixed panel in mem
3991 DW 0 ;AN000;Off addr of mixed panel in mem
3992 DW 0 ;AN000;Seg addr of mixed panel in mem
3993 DW 0 ;AN000;Len of the panel label
3994 DW 0 ;AN000;Off addr of the panel label
3995 DW 0 ;AN000;Seg addr of the panel label
3996 DW 0 ;AN000;Beg relative row of panel label
3997 DW 0 ;AN000;Beg relative col of panel label
3998 DW 0 ;AN000;Len of the panel stored in file
3999 DW 0 ;AN000;Off address of full filespec
4000 DW 0 ;AN000;Seg address of full filespec
4001 DW 0 ;AN000;Lower off word of the beg off
4002 DW 0 ;AN000;High off word of the beg off
4003 DW 9 DUP(0) ;AN000;Reserved for scroll and size
4004 DW 3 ;AN000;Number of child panel entries
4005 DW OFFSET CHILD2 ;AN000;Off address of child panel table
4006 DW 0 ;AN000;Seg address of child panel table
4007 DW 10 DUP(0) ;AN000;GHG new adds
4008;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4009;
4010; PAN_START720
4011;
4012;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4013PCB95 LABEL WORD ;AN000;
4014 DW PCB_EXP ;AN000;option word
4015 DB 0 ;AN000;GHG new adds
4016 DB 0 ;AN000;GHG new adds
4017 DB 0 ;AN000;GHG new adds
4018 DW 8 ;AN000;row location of panel
4019 DW LEFT_COL ;AN000;column location of panel
4020 DW PANEL95_W ;AN000;text char width of panel
4021 DW 0 ;AN000;Max poss panel sizing in text
4022 DW WHITE_BLUE ;AN000;Index number of log color
4023 DB '�Ŀ�����' ;AN000;8 log border characters
4024 DW 0 ;AN000;Length compress panel in mem
4025 DW 0 ;AN000;Off addr compressed panel
4026 DW 0 ;AN000;Seg addr compressed panel
4027 DW PANEL95_W*PANEL95_L ;AN000;Length expanded panel in mem
4028 DW OFFSET PANEL95 ;AN000;Off addr of expanded panel in
4029 DW 0 ;AN000;Seg addr of expanded panel in
4030 DW 0 ;AN000;Len of the mixed panel in mem
4031 DW 0 ;AN000;Off addr of mixed panel in mem
4032 DW 0 ;AN000;Seg addr of mixed panel in mem
4033 DW 0 ;AN000;Len of the panel label
4034 DW 0 ;AN000;Off addr of the panel label
4035 DW 0 ;AN000;Seg addr of the panel label
4036 DW 0 ;AN000;Beg relative row of panel label
4037 DW 0 ;AN000;Beg relative col of panel label
4038 DW 0 ;AN000;Len of the panel stored in file
4039 DW 0 ;AN000;Off address of full filespec
4040 DW 0 ;AN000;Seg address of full filespec
4041 DW 0 ;AN000;Lower off word of the beg off
4042 DW 0 ;AN000;High off word of the beg off
4043 DW 9 DUP(0) ;AN000;Reserved for scroll and size
4044 DW 1 ;AN000;Number of child panel entries
4045 DW OFFSET CHILD2 ;AN000;Off address of child panel table
4046 DW 0 ;AN000;Seg address of child panel table
4047 DW 10 DUP(0) ;AN000;GHG new adds
4048;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4049;
4050; PAN_START1440
4051;
4052;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4053PCB96 LABEL WORD ;AN000;
4054 DW PCB_EXP ;AN000;option word
4055 DB 0 ;AN000;GHG new adds
4056 DB 0 ;AN000;GHG new adds
4057 DB 0 ;AN000;GHG new adds
4058 DW 8 ;AN000;row location of panel
4059 DW LEFT_COL ;AN000;column location of panel
4060 DW PANEL96_W ;AN000;text char width of panel
4061 DW 0 ;AN000;Max poss panel sizing in text
4062 DW WHITE_BLUE ;AN000;Index number of log color
4063 DB '�Ŀ�����' ;AN000;8 log border characters
4064 DW 0 ;AN000;Length compress panel in mem
4065 DW 0 ;AN000;Off addr compressed panel
4066 DW 0 ;AN000;Seg addr compressed panel
4067 DW PANEL96_W*PANEL96_L ;AN000;Length expanded panel in mem
4068 DW OFFSET PANEL96 ;AN000;Off addr of expanded panel in
4069 DW 0 ;AN000;Seg addr of expanded panel in
4070 DW 0 ;AN000;Len of the mixed panel in mem
4071 DW 0 ;AN000;Off addr of mixed panel in mem
4072 DW 0 ;AN000;Seg addr of mixed panel in mem
4073 DW 0 ;AN000;Len of the panel label
4074 DW 0 ;AN000;Off addr of the panel label
4075 DW 0 ;AN000;Seg addr of the panel label
4076 DW 0 ;AN000;Beg relative row of panel label
4077 DW 0 ;AN000;Beg relative col of panel label
4078 DW 0 ;AN000;Len of the panel stored in file
4079 DW 0 ;AN000;Off address of full filespec
4080 DW 0 ;AN000;Seg address of full filespec
4081 DW 0 ;AN000;Lower off word of the beg off
4082 DW 0 ;AN000;High off word of the beg off
4083 DW 9 DUP(0) ;AN000;Reserved for scroll and size
4084 DW 1 ;AN000;Number of child panel entries
4085 DW OFFSET CHILD2 ;AN000;Off address of child panel table
4086 DW 0 ;AN000;Seg address of child panel table
4087 DW 10 DUP(0) ;AN000;GHG new adds
4088;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4089;
4090; ERR_INS_INSTALL
4091;
4092;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4093PCB97 LABEL WORD ;AN000;
4094 DW PCB_EXP ;AN000;option word
4095 DB 0 ;AN000;GHG new adds
4096 DB 0 ;AN000;GHG new adds
4097 DB 0 ;AN000;GHG new adds
4098 DW 11 ;AN000;row location of panel
4099 DW LEFT_COL+1 ;AN000;column location of panel
4100 DW PANEL97_W ;AN000;text char width of panel
4101 DW 0 ;AN000;Max poss panel sizing in text
4102 DW WHITE_RED ;AN000;Index number of log color
4103 DB '�Ŀ�����' ;AN000;8 log border characters
4104 DW 0 ;AN000;Length compress panel in mem
4105 DW 0 ;AN000;Off addr compressed panel
4106 DW 0 ;AN000;Seg addr compressed panel
4107 DW PANEL97_W*PANEL97_L;AN000;Length expanded panel in mem
4108 DW OFFSET PANEL97 ;AN000;Off addr of expanded panel in
4109 DW 0 ;AN000;Seg addr of expanded panel in
4110 DW 0 ;AN000;Len of the mixed panel in mem
4111 DW 0 ;AN000;Off addr of mixed panel in mem
4112 DW 0 ;AN000;Seg addr of mixed panel in mem
4113 DW 0 ;AN000;Len of the panel label
4114 DW 0 ;AN000;Off addr of the panel label
4115 DW 0 ;AN000;Seg addr of the panel label
4116 DW 0 ;AN000;Beg relative row of panel label
4117 DW 0 ;AN000;Beg relative col of panel label
4118 DW 0 ;AN000;Len of the panel stored in file
4119 DW 0 ;AN000;Off address of full filespec
4120 DW 0 ;AN000;Seg address of full filespec
4121 DW 0 ;AN000;Lower off word of the beg off
4122 DW 0 ;AN000;High off word of the beg off
4123 DW 9 DUP(0) ;AN000;Reserved for scroll and size
4124 DW 0 ;AN000;Number of child panel entries
4125 DW 0 ;AN000;Off address of child panel table
4126 DW 0 ;AN000;Seg address of child panel table
4127 DW 10 DUP(0) ;AN000;GHG new adds
4128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4129;
4130; PAN_CHOOSE_SHELL EQU 98 ;
4131;
4132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4133PCB98 LABEL WORD ;AN000;
4134 DW PCB_EXP ;AN000;option word
4135 DB 0 ;AN000;GHG new adds
4136 DB 0 ;AN000;GHG new adds
4137 DB 0 ;AN000;GHG new adds
4138 DW 1 ;AN000;row location of panel
4139 DW LEFT_COL ;AN000;column location of panel
4140 DW PANEL98_W ;AN000;text char width of panel
4141 DW 0 ;AN000;Max poss panel sizing in text
4142 DW WHITE_BLUE ;AN000;Index number of log color
4143 DB '�Ŀ�����' ;AN000;8 log border characters
4144 DW 0 ;AN000;Length compress panel in mem
4145 DW 0 ;AN000;Off addr compressed panel
4146 DW 0 ;AN000;Seg addr compressed panel
4147 DW PANEL98_W*PANEL98_L;AN000;Length expanded panel in mem
4148 DW OFFSET PANEL98 ;AN000;Off addr of expanded panel in
4149 DW 0 ;AN000;Seg addr of expanded panel in
4150 DW 0 ;AN000;Len of the mixed panel in mem
4151 DW 0 ;AN000;Off addr of mixed panel in mem
4152 DW 0 ;AN000;Seg addr of mixed panel in mem
4153 DW 0 ;AN000;Len of the panel label
4154 DW 0 ;AN000;Off addr of the panel label
4155 DW 0 ;AN000;Seg addr of the panel label
4156 DW 0 ;AN000;Beg relative row of panel label
4157 DW 0 ;AN000;Beg relative col of panel label
4158 DW 0 ;AN000;Len of the panel stored in file
4159 DW 0 ;AN000;Off address of full filespec
4160 DW 0 ;AN000;Seg address of full filespec
4161 DW 0 ;AN000;Lower off word of the beg off
4162 DW 0 ;AN000;High off word of the beg off
4163 DW 9 DUP(0) ;AN000;Reserved for scroll and size
4164 DW 3 ;AN000;Number of child panel entries
4165 DW OFFSET CHILD2 ;AN000;Off address of child panel table
4166 DW 0 ;AN000;Seg address of child panel table
4167 DW 10 DUP(0) ;AN000;GHG new adds
4168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4169;
4170; SUB_INS_WORKING_A equ 99
4171;
4172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4173PCB99 LABEL WORD ;AN000;
4174 DW PCB_EXP ;AN000;option word
4175 DB 0 ;AN000;GHG new adds
4176 DB 0 ;AN000;GHG new adds
4177 DB 0 ;AN000;GHG new adds
4178 DW 8 ;AN000;row location of panel
4179 DW LEFT_COL ;AN000;column location of panel
4180 DW PANEL99_W ;AN000;text char width of panel
4181 DW 0 ;AN000;Max poss panel sizing in text
4182 DW WHITE_BLUE ;AN000;Index number of log color
4183 DB '�Ŀ�����' ;AN000;8 log border characters
4184 DW 0 ;AN000;Length compress panel in mem
4185 DW 0 ;AN000;Off addr compressed panel
4186 DW 0 ;AN000;Seg addr compressed panel
4187 DW PANEL99_W*PANEL99_L;AN000;Length expanded panel in mem
4188 DW OFFSET PANEL99 ;AN000;Off addr of expanded panel in
4189 DW 0 ;AN000;Seg addr of expanded panel in
4190 DW 0 ;AN000;Len of the mixed panel in mem
4191 DW 0 ;AN000;Off addr of mixed panel in mem
4192 DW 0 ;AN000;Seg addr of mixed panel in mem
4193 DW 0 ;AN000;Len of the panel label
4194 DW 0 ;AN000;Off addr of the panel label
4195 DW 0 ;AN000;Seg addr of the panel label
4196 DW 0 ;AN000;Beg relative row of panel label
4197 DW 0 ;AN000;Beg relative col of panel label
4198 DW 0 ;AN000;Len of the panel stored in file
4199 DW 0 ;AN000;Off address of full filespec
4200 DW 0 ;AN000;Seg address of full filespec
4201 DW 0 ;AN000;Lower off word of the beg off
4202 DW 0 ;AN000;High off word of the beg off
4203 DW 9 DUP(0) ;AN000;Reserved for scroll and size
4204 DW 1 ;AN000;Number of child panel entries
4205 DW OFFSET CHILD2 ;AN000;Off address of child panel table
4206 DW 0 ;AN000;Seg address of child panel table
4207 DW 10 DUP(0) ;AN000;GHG new adds
4208;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4209;
4210; SUB_INS_MSSHELL_A equ 100
4211;
4212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4213PCB100 LABEL WORD ;AN000;
4214 DW PCB_EXP ;AN000;option word
4215 DB 0 ;AN000;GHG new adds
4216 DB 0 ;AN000;GHG new adds
4217 DB 0 ;AN000;GHG new adds
4218 DW 8 ;AN000;row location of panel
4219 DW LEFT_COL ;AN000;column location of panel
4220 DW PANEL100_W ;AN000;text char width of panel
4221 DW 0 ;AN000;Max poss panel sizing in text
4222 DW WHITE_BLUE ;AN000;Index number of log color
4223 DB '�Ŀ�����' ;AN000;8 log border characters
4224 DW 0 ;AN000;Length compress panel in mem
4225 DW 0 ;AN000;Off addr compressed panel
4226 DW 0 ;AN000;Seg addr compressed panel
4227 DW PANEL100_W*PANEL100_L;AN000;Length expanded panel in mem
4228 DW OFFSET PANEL100 ;AN000;Off addr of expanded panel in
4229 DW 0 ;AN000;Seg addr of expanded panel in
4230 DW 0 ;AN000;Len of the mixed panel in mem
4231 DW 0 ;AN000;Off addr of mixed panel in mem
4232 DW 0 ;AN000;Seg addr of mixed panel in mem
4233 DW 0 ;AN000;Len of the panel label
4234 DW 0 ;AN000;Off addr of the panel label
4235 DW 0 ;AN000;Seg addr of the panel label
4236 DW 0 ;AN000;Beg relative row of panel label
4237 DW 0 ;AN000;Beg relative col of panel label
4238 DW 0 ;AN000;Len of the panel stored in file
4239 DW 0 ;AN000;Off address of full filespec
4240 DW 0 ;AN000;Seg address of full filespec
4241 DW 0 ;AN000;Lower off word of the beg off
4242 DW 0 ;AN000;High off word of the beg off
4243 DW 9 DUP(0) ;AN000;Reserved for scroll and size
4244 DW 1 ;AN000;Number of child panel entries
4245 DW OFFSET CHILD2 ;AN000;Off address of child panel table
4246 DW 0 ;AN000;Seg address of child panel table
4247 DW 10 DUP(0) ;AN000;GHG new adds
4248;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4249;
4250; SUB_INS_SHELL_DISKS equ 101
4251;
4252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4253PCB101 LABEL WORD ;AN000;
4254 DW PCB_EXP ;AN000;option word
4255 DB 0 ;AN000;GHG new adds
4256 DB 0 ;AN000;GHG new adds
4257 DB 0 ;AN000;GHG new adds
4258 DW 8 ;AN000;row location of panel
4259 DW LEFT_COL ;AN000;column location of panel
4260 DW PANEL101_W ;AN000;text char width of panel
4261 DW 0 ;AN000;Max poss panel sizing in text
4262 DW WHITE_BLUE ;AN000;Index number of log color
4263 DB '�Ŀ�����' ;AN000;8 log border characters
4264 DW 0 ;AN000;Length compress panel in mem
4265 DW 0 ;AN000;Off addr compressed panel
4266 DW 0 ;AN000;Seg addr compressed panel
4267 DW PANEL101_W*PANEL101_L;AN000;Length expanded panel in mem
4268 DW OFFSET PANEL101 ;AN000;Off addr of expanded panel in
4269 DW 0 ;AN000;Seg addr of expanded panel in
4270 DW 0 ;AN000;Len of the mixed panel in mem
4271 DW 0 ;AN000;Off addr of mixed panel in mem
4272 DW 0 ;AN000;Seg addr of mixed panel in mem
4273 DW 0 ;AN000;Len of the panel label
4274 DW 0 ;AN000;Off addr of the panel label
4275 DW 0 ;AN000;Seg addr of the panel label
4276 DW 0 ;AN000;Beg relative row of panel label
4277 DW 0 ;AN000;Beg relative col of panel label
4278 DW 0 ;AN000;Len of the panel stored in file
4279 DW 0 ;AN000;Off address of full filespec
4280 DW 0 ;AN000;Seg address of full filespec
4281 DW 0 ;AN000;Lower off word of the beg off
4282 DW 0 ;AN000;High off word of the beg off
4283 DW 9 DUP(0) ;AN000;Reserved for scroll and size
4284 DW 1 ;AN000;Number of child panel entries
4285 DW OFFSET CHILD2 ;AN000;Off address of child panel table
4286 DW 0 ;AN000;Seg address of child panel table
4287 DW 10 DUP(0) ;AN000;GHG new adds
4288;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4289;
4290; SUB_INS_OP_WORK = 102
4291;
4292;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4293PCB102 LABEL WORD ;AN000;
4294 DW PCB_EXP ;AN000;option word
4295 DB 0 ;AN000;GHG new adds
4296 DB 0 ;AN000;GHG new adds
4297 DB 0 ;AN000;GHG new adds
4298 DW 8 ;AN000;row location of panel
4299 DW LEFT_COL ;AN000;column location of panel
4300 DW PANEL102_W ;AN000;text char width of panel
4301 DW 0 ;AN000;Max poss panel sizing in text
4302 DW WHITE_BLUE ;AN000;Index number of log color
4303 DB '�Ŀ�����' ;AN000;8 log border characters
4304 DW 0 ;AN000;Length compress panel in mem
4305 DW 0 ;AN000;Off addr compressed panel
4306 DW 0 ;AN000;Seg addr compressed panel
4307 DW PANEL102_W*PANEL102_L;AN000;Length expanded panel in mem
4308 DW OFFSET PANEL102 ;AN000;Off addr of expanded panel in
4309 DW 0 ;AN000;Seg addr of expanded panel in
4310 DW 0 ;AN000;Len of the mixed panel in mem
4311 DW 0 ;AN000;Off addr of mixed panel in mem
4312 DW 0 ;AN000;Seg addr of mixed panel in mem
4313 DW 0 ;AN000;Len of the panel label
4314 DW 0 ;AN000;Off addr of the panel label
4315 DW 0 ;AN000;Seg addr of the panel label
4316 DW 0 ;AN000;Beg relative row of panel label
4317 DW 0 ;AN000;Beg relative col of panel label
4318 DW 0 ;AN000;Len of the panel stored in file
4319 DW 0 ;AN000;Off address of full filespec
4320 DW 0 ;AN000;Seg address of full filespec
4321 DW 0 ;AN000;Lower off word of the beg off
4322 DW 0 ;AN000;High off word of the beg off
4323 DW 9 DUP(0) ;AN000;Reserved for scroll and size
4324 DW 1 ;AN000;Number of child panel entries
4325 DW OFFSET CHILD2 ;AN000;Off address of child panel table
4326 DW 0 ;AN000;Seg address of child panel table
4327 DW 10 DUP(0) ;AN000;GHG new adds
4328;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4329;
4330; SUB_INS_WORK3_A equ 103
4331;
4332;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4333PCB103 LABEL WORD ;AN000;
4334 DW PCB_EXP ;AN000;option word
4335 DB 0 ;AN000;GHG new adds
4336 DB 0 ;AN000;GHG new adds
4337 DB 0 ;AN000;GHG new adds
4338 DW 8 ;AN000;row location of panel
4339 DW LEFT_COL ;AN000;column location of panel
4340 DW PANEL103_W ;AN000;text char width of panel
4341 DW 0 ;AN000;Max poss panel sizing in text
4342 DW WHITE_BLUE ;AN000;Index number of log color
4343 DB '�Ŀ�����' ;AN000;8 log border characters
4344 DW 0 ;AN000;Length compress panel in mem
4345 DW 0 ;AN000;Off addr compressed panel
4346 DW 0 ;AN000;Seg addr compressed panel
4347 DW PANEL103_W*PANEL103_L;AN000;Length expanded panel in mem
4348 DW OFFSET PANEL103 ;AN000;Off addr of expanded panel in
4349 DW 0 ;AN000;Seg addr of expanded panel in
4350 DW 0 ;AN000;Len of the mixed panel in mem
4351 DW 0 ;AN000;Off addr of mixed panel in mem
4352 DW 0 ;AN000;Seg addr of mixed panel in mem
4353 DW 0 ;AN000;Len of the panel label
4354 DW 0 ;AN000;Off addr of the panel label
4355 DW 0 ;AN000;Seg addr of the panel label
4356 DW 0 ;AN000;Beg relative row of panel label
4357 DW 0 ;AN000;Beg relative col of panel label
4358 DW 0 ;AN000;Len of the panel stored in file
4359 DW 0 ;AN000;Off address of full filespec
4360 DW 0 ;AN000;Seg address of full filespec
4361 DW 0 ;AN000;Lower off word of the beg off
4362 DW 0 ;AN000;High off word of the beg off
4363 DW 9 DUP(0) ;AN000;Reserved for scroll and size
4364 DW 1 ;AN000;Number of child panel entries
4365 DW OFFSET CHILD2 ;AN000;Off address of child panel table
4366 DW 0 ;AN000;Seg address of child panel table
4367 DW 10 DUP(0) ;AN000;GHG new adds
4368
4369
4370 INCLUDE PANEL.INF ;AN000;
4371
4372CODE ENDS ;AN000;
4373 END ;AN000;
4374 \ 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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3; PCSCRRD option bit equates (SRD_OPT1)
4;
5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6SRD_INITIAL EQU 0000000000000001B ;AN000;initialize SCB and filespec buff
7SRD_READONE EQU 0000000000000010B ;AN000;read field specified by SRD_ID
8SRD_APPEND EQU 0000000000000100B ;AN000;match field ID are issued new ID
9SRD_READALL EQU 0000000000001000B ;AN000;read all FLDS in specified file
10SRD_ALLOCRES EQU 0000000000010000B ;AN000;allocate reserved PCSLCTP space
11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
12;
13; PCSCRRD error bit equates (SRD_ERROR)
14;
15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
16SRD_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small
17SRD_NOFIELDS EQU 0000000000000010B ;AN000;file does not contain fields
18SRD_NOTCASFILE EQU 0000000000000100B ;AN000;file object list does not exist
19SRD_FIELDSFULL EQU 0000000000001000B ;AN000;max num FLDS read into SCB vect
20SRD_NOINITIAL EQU 0000000000010000B ;AN000;make initialize call first
21SRD_NOFIELDID EQU 0000000000100000B ;AN000;specified field ID not found
22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
23;
24; PCHLPRD option bit equates (HRD_OPT1)
25;
26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
27HRD_TOPIC EQU 0000000000000001B ;AN000;process help TOPIC(S) index
28HRD_TEXT EQU 0000000000000010B ;AN000;process HELP or ERROR text
29HRD_DISPID EQU 0000000000000100B ;AN000;display unique id on topic list
30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
31;
32; PCHLPRD error bit equates (HRD_ERROR)
33;
34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
35HRD_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small
36HRD_NOHLPOBJ EQU 0000000000000010B ;AN000;file does not contain helps
37HRD_NOOBJLST EQU 0000000000000100B ;AN000;file object list does not exist
38HRD_NOHELPID EQU 0000000000001000B ;AN000;requested id was not found
39HRD_NOTCASFILE EQU 0000000000010000B ;AN000;not a valid cas file
40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
41;
42; PCSTRST equates
43;
44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
45SSC_TBSL EQU 0000000000000001B ;AN000;use two byte string length
46SSC_PTSB EQU 0000000000000010B ;AN000;pointer points to string buffer
47SSC_VTSAO EQU 0000000000000100B ;AN000;vector table is string addr only
48SSC_VTASO EQU 0000000000001000B ;AN000;vector table addr is seg:offset
49SSC_SLSB EQU 0000000000010000B ;AN000;string length is in string buffer
50SSC_SBTC EQU 0000000000100000B ;AN000;string buffer has term. character
51SSC_VTE EQU 1 ;AN000;error in vector table
52SSC_SBE EQU 2 ;AN000;error in string buffer
53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
54;
55; PCSLCTP Option word one (SCB_OPT1)
56;
57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
58SCB_UC EQU 0000000000000001B ;AN000;upper case option
59SCB_WRAP EQU 0000000000000010B ;AN000;wrap option
60SCB_FRBF EQU 0000000000000100B ;AN000;force return before first option
61SCB_FRAL EQU 0000000000001000B ;AN000;force return after last option
62SCB_LL EQU 0000000000010000B ;AN000;lock line
63SCB_UKS EQU 0000000000100000B ;AN000;use keystroke
64SCB_RD EQU 0000000001000000B ;AN000;return after display option
65SCB_RUK EQU 0000000010000000B ;AN000;return unused keys option
66SCB_UI EQU 0000000100000000B ;AN000;use index option
67SCB_TRN EQU 0000001000000000B ;AN000;translate character
68SCB_MON EQU 0000010000000000B ;AN000;convert to upper case monocasing
69SCB_DBCS EQU 0000100000000000B ;AN000;check for double byte chars
70SCB_TBL EQU 0001000000000000B ;AN000;use given DBCS range table
71SCB_DCHECK EQU 0010000000000000B ;AN000;display check mark characters
72SCB_DACTIVE EQU 0100000000000000B ;AN000;display active string indicators
73SCB_DPOINT EQU 1000000000000000B ;AN000;display selection pointer string
74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
75;
76; PCSLCTP Option word two (SCB_OPT2)
77;
78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
79SCB_CS EQU 0000000000000001B ;AN000;clear screen on entry option
80SCB_ROTN EQU 0000000000000010B ;AN000;reset option to normal on return
81SCB_UET EQU 0000000000000100B ;AN000;use existing text option
82SCB_CFO EQU 0000000000001000B ;AN000;cursor follows option
83SCB_LCOX EQU 0000000000010000B ;AN000;leave cursor on exit
84SCB_IPAGE EQU 0000000000100000B ;AN000;instant paging
85SCB_PM1 EQU 0000000001000000B ;AN000;paging is minus one line
86SCB_UIND EQU 0000000010000000B ;AN000;display up, dn, lf, rg indicators
87SCB_UNCA EQU 0000000100000000B ;AN000;use normal color array
88SCB_DYN EQU 0000001000000000B ;AN000;option array is dynamicly created
89SCB_LANDR EQU 0000010000000000B ;AN000;left and right scrolling active
90SCB_CPHY EQU 0000100000000000B ;AN000;color array is physical attributs
91SCB_NUML EQU 0001000000000000B ;AN000;generate num list in opt strings
92SCB_SKIP EQU 0010000000000000B ;AN000;skip inactive option strings
93SCB_SHIGH EQU 0100000000000000B ;AN000;highlight the selected opt strgs
94SCB_AHIGH EQU 1000000000000000B ;AN000;highlight the active option strgs
95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
96;
97; PCSLCTP Option word three (SCB_OPT3)
98;
99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
100SCB_SELACT EQU 0000000000000001B ;AN000;allow selection of inactive elem
101SCB_SELEXC EQU 0000000000000010B ;AN000;exclusive selection of one elemet
102SCB_EXCSING EQU 0000000000000100B ;AN000;one element is always selected
103SCB_NUMUIND EQU 0000000000001000B ;AN000;display line number count
104SCB_CHIGH EQU 0000000000010000B ;AN000;hilight cursored and selected stg
105SCB_NUMS EQU 0000000000100000B ;AN000;auto 0-9 number selection
106SCB_FINDE EQU 0000000001000000B ;AN000;auto character search
107SCB_RELUIND EQU 0000000010000000B ;AN000;rel row/col used w/dirct indicato
108SCB_RELSCR EQU 0000000100000000B ;AN000;rel row/col used w/scroll field
109SCB_LVBOVR EQU 0000001000000000B ;AN000;use video buffer seg:off override
110SCB_FM EQU 0000010000000000B ;AN000;make call to dynamic format rout
111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
112;
113; PCSLCTP Select Array Option (SCB_SELSEG:SCB_SELOFF)
114;
115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
116SCB_SELECTON EQU 0000000000000001B ;AN000;element selected
117SCB_ACTIVEON EQU 0000000000000010B ;AN000;element active
118SCB_SKIPON EQU 0000000000000100B ;AN000;element should be skipped
119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
120;
121; PCINCHA option equates (INC_OPT)
122;
123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
124INC_KWAIT EQU 0000000000000001B ;keystroke
125INC_UTRAN EQU 0000000000000010B ;translate keys using user table
126INC_UDBCS EQU 0000000000000100B ;DBCS processed using user table
127INC_DDBCS EQU 0000000000001000B ;DBCS processed using DOS table
128INC_UMONO EQU 0000000000010000B ;monocase keys using user table
129INC_AMONO EQU 0000000000100000B ;monocase keys using USA algorithm
130INC_RSCAN EQU 0000000001000000B ;return scan codes for norm chars
131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
132;
133; PCINCHA option equates (INC_STAT)
134;
135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
136INC_KFND EQU 0000000000000001B ;AN000;character found in buffer
137INC_DBCS EQU 0000000000000010B ;AN000;character found is double byte
138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
139;
140; PCCLRRD error bit equates (CRD_ERROR)
141;
142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
143CRD_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small
144CRD_NOCOLORS EQU 0000000000000010B ;AN000;file does not contain colors
145CRD_NOTCASFILE EQU 0000000000000100B ;AN000;file object list does not exist
146CRD_IDNOTFOUND EQU 0000000000001000B ;AN000;color index ID not found
147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
148;
149; PCPANRD option bit equates (PRD_OPT1)
150;
151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
152PRD_INITIAL EQU 0000000000000001B ;AN000;initialize PCB and filespec buff
153PRD_READONE EQU 0000000000000010B ;AN000;read pan specified by PRD_ID
154PRD_APPEND EQU 0000000000000100B ;AN000;match pans ID are issued new ID
155PRD_READALL EQU 0000000000001000B ;AN000;read all pans in specified file
156PRD_SIZEMALL EQU 0000000000010000B ;AN000;reserve space for panel sizing
157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
158;
159; PCPANRD error bit equates (PRD_ERROR)
160;
161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
162PRD_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small
163PRD_NOPANELS EQU 0000000000000010B ;AN000;file does not contain panels
164PRD_NOTCASFILE EQU 0000000000000100B ;AN000;file object list does not exist
165PRD_PANELSFULL EQU 0000000000001000B ;AN000;max num pans read into PCB vect
166PRD_NOINITIAL EQU 0000000000010000B ;AN000;make initialize call first
167PRD_NOPANELID EQU 0000000000100000B ;AN000;specified panel ID not found
168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
169;
170; PCDISPQ option equates (QM_OPT1)
171;
172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
173QM_INIT EQU 0000000000000001B ;AN000;Initialize working buffer
174QM_PUSHCHD EQU 0000000000000010B ;AN000;Add child number
175QM_RVMCHD EQU 0000000000000100B ;AN000;Remove specific child number
176QM_POPCHD EQU 0000000000001000B ;AN000;Pop (n) number of child cur queue
177QM_PUSHPAN EQU 0000000000010000B ;AN000;Add panel number
178QM_RVMPAN EQU 0000000000100000B ;AN000;Remove specific panel number
179QM_POPPAN EQU 0000000001000000B ;AN000;Pop (n) number of panls cur queue
180QM_PUSHCQU EQU 0000000010000000B ;AN000;Push current child queue
181QM_POPCQU EQU 0000000100000000B ;AN000;Pop last child queue
182QM_PUSHPQU EQU 0000001000000000B ;AN000;Push current panel queue
183QM_POPPQU EQU 0000010000000000B ;AN000;Pop last panel queue pushed
184QM_CLSCHD EQU 0000100000000000B ;AN000;Clear current child queue.
185QM_CLSPAN EQU 0001000000000000B ;AN000;Clear current panel queue.
186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
187; PCDISPQ option equates (QM_OPT2)
188;
189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
190QM_BREAKON EQU 0000000000000001B ;AN000;break option is on
191QM_BREAKOFF EQU 0000000000000010B ;AN000;break option is off
192QM_SRFON EQU 0000000000000100B ;AN000;selected refresh option is on
193QM_SRFOFF EQU 0000000000001000B ;AN000;selected refresh option is off
194;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
195;
196; PCDISPQ error equates (QM_ERROR)
197;
198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
199QM_ERRMP EQU 0000000000000001B ;AN000;max number of panels added
200QM_ERRMC EQU 0000000000000010B ;AN000;max number of childs added
201QM_ERRMPQ EQU 0000000000000100B ;AN000;max number of panel queues pushed
202QM_ERRMCQ EQU 0000000000001000B ;AN000;max number of child queues pushed
203QM_ERROP EQU 0000000000010000B ;AN000;max number of panel queues popped
204QM_ERROC EQU 0000000000100000B ;AN000;max number of child queues popped
205QM_ERRBU EQU 0000000001000000B ;AN000;inadequate buffer size avail
206QM_ERRPN EQU 0000000010000000B ;AN000;specified panel not found
207QM_ERRCN EQU 0000000100000000B ;AN000;specified child not found
208;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
209;
210; PCPANEL option bit equates (PM_OPT1)
211;
212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
213PM_RF EQU 0000000000000001B ;AN000;do not refresh display
214PM_SRF EQU 0000000000000010B ;AN000;selective PVB refresh from LVB
215PM_BK EQU 0000000000000100B ;AN000;panel break function active
216PM_CL EQU 0000000000001000B ;AN000;initialize LVB to base char/attr
217PM_DOA EQU 0000000000010000B ;AN000;display childs in active parent
218PM_DOV EQU 0000000000100000B ;AN000;use child row, col, color overrid
219PM_DOQ EQU 0000000001000000B ;AN000;disp all child in parent chd tabl
220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
221;
222; PCPANEL error equates for (PM_ERROR)
223;
224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
225PM_PANPDQ EQU 0000000000000001B ;AN000;invalid parent PDQ or start num
226PM_PCBVEC EQU 0000000000000010B ;AN000;invalid PCB vector entry found
227PM_UNKNPANS EQU 0000000000000100B ;AN000;unknown panel source found
228PM_CHDTAB EQU 0000000000001000B ;AN000;set error with child table
229PM_COLORX EQU 0000000000010000B ;AN000;panel's color index out of range
230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
231;
232; PCPANEL Parent and Child Display Queue option bit equates (PT_OPT)
233;
234;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
235PT_BK EQU 0000000000000001B ;AN000;panel break on
236PT_SRF EQU 0000000000000010B ;AN000;selective refresh of panel to PVB
237;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
238;
239; PCPANEL Panel Control Block option equates for individual panels (PCB_OPT1)
240;
241;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
242PCB_CRE EQU 0000000000000001B ;AN000;Create panel from scratch
243PCB_CMP EQU 0000000000000010B ;AN000;Use compress text form in memory
244PCB_EXP EQU 0000000000000100B ;AN000;Use expanded text form in memory
245PCB_MXP EQU 0000000000001000B ;AN000;Use mixed text/attr form in memoy
246PCB_LB EQU 0000000000010000B ;AN000;Use logical border
247PCB_ASZ EQU 0000000000100000B ;AN000;Allow sizing of panel
248PCB_ASC EQU 0000000001000000B ;AN000;Allow scrolling of panel
249PCB_LAB EQU 0000000010000000B ;AN000;Use the defined panel label
250PCB_DTB EQU 0000000100000000B ;AN000;Draw top border (graphics only)
251PCB_DBB EQU 0000001000000000B ;AN000;Draw bottom border (graphic only)
252PCB_DLB EQU 0000010000000000B ;AN000;Draw left border (graphics only)
253PCB_DRB EQU 0000100000000000B ;AN000;Draw right border (graphics only)
254PCB_DSHADOW EQU 0001000000000000B ;AN000;Draw shadow (graphics only)
255PCB_PELCOORD EQU 0010000000000000B ;AN000;row/col in pel coordinates (grap)
256;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
257;
258; PCINSTR option bit equates (INS_OPT)
259;
260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
261INS_FKS EQU 0000000000000001B ;AN000;find keystroke
262;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
263;
264; PCGVIDO Status equates (GV_STAT1)
265;
266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
267GV_TV EQU 0000000000000001B ;AN000;TopView is present
268GV_CGA EQU 0000000000000010B ;AN000;CGA is present
269GV_EGA EQU 0000000000000100B ;AN000;EGA is present
270GV_PGA EQU 0000000000001000B ;AN000;PGA is present
271GV_MGA EQU 0000000000010000B ;AN000;MGA is present
272GV_EGAA EQU 0000000000100000B ;AN000;EGA is active card
273GV_CGAA EQU 0000000001000000B ;AN000;CGA is active card
274GV_EGACM EQU 0000000010000000B ;AN000;EGA is set to monochrome
275GV_PGAEM EQU 0000000100000000B ;AN000;PGA is in color emulation mode
276GV_HS EQU 0000001000000000B ;AN000;display requires sync check 1=Y
277GV_64K EQU 0000010000000000B ;AN000; 64K memory on EGA card
278GV_128K EQU 0000100000000000B ;AN000;128K memory on EGA card
279GV_192K EQU 0001000000000000B ;AN000;192K memory on EGA card
280GV_256K EQU 0010000000000000B ;AN000;256K memory on EGA card
281GV_UM EQU 0100000000000000B ;AN000;error unknown moniter or config
282;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
283;
284; PCGVIDO Status equates (GV_STAT2)
285;
286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
287GV_TVW EQU 0000000000000001B ;AN000;App is 'well behaved' under TV
288GV_P5140 EQU 0000000000000010B ;AN000;P12 with LCD
289GV_P5153 EQU 0000000000000100B ;AN000;P12 with color
290GV_P5151 EQU 0000000000001000B ;AN000;P12 with monochrome
291GV_COLOR EQU 0000000000010000B ;AN000;color mode
292GV_TEXTGRAPH EQU 0000000000100000B ;AN000;graphics mode
293GV_MONOP EQU 0000000001000000B ;AN000;monochrome adapter is primary
294GV_CGAP EQU 0000000010000000B ;AN000;CGA adapter is primary card
295GV_EGAP EQU 0000000100000000B ;AN000;EGA adapter is primary card
296GV_TURBOP EQU 0000001000000000B ;AN000;Turbo graphics adapter is primary
297;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
298;
299; PCINPUT option equates.
300;
301;
302; PCINPUT Option equates (IN_OPT)
303;
304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
305IN_UTRAN EQU 0000000000000001B ;AN000;translate keys using user table
306IN_ADBCS EQU 0000000000000010B ;AN000;DBCS option active
307IN_UDBCS EQU 0000000000000100B ;AN000;DBCS processed using user table
308IN_DDBCS EQU 0000000000001000B ;AN000;DBCS processed using DOS table
309IN_UMONO EQU 0000000000010000B ;AN000;monocase keys using user table
310IN_AMONO EQU 0000000000100000B ;AN000;monocase keys using USA algorithm
311IN_LICBX EQU 0000000001000000B ;AN000;load ICB off:seg and exit
312IN_LVBOV EQU 0000000010000000B ;AN000;use video buffer seg:off override
313 ;
314IN_RANG EQU 0000000000000001B ;AN000;ICB ID out of vector range
315;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
316;
317; Input Field Control Block Equates
318;
319; ICB_OPT1 Option word one equates
320;
321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
322ICB_ECL EQU 0000000000000001B ;AN000;set specified color on entry
323ICB_XCL EQU 0000000000000010B ;AN000;set specified color on exit
324ICB_USC EQU 0000000000000100B ;AN000;use color attribute string
325ICB_BEN EQU 0000000000001000B ;AN000;display entry delimiters
326ICB_BEX EQU 0000000000010000B ;AN000;display exit delimiters
327ICB_BOX EQU 0000000000100000B ;AN000;display border delimiters
328ICB_MUS EQU 0000000001000000B ;AN000;plus and minus display active
329ICB_SMU EQU 0000000010000000B ;AN000;starting default is negative
330ICB_OUT EQU 0000000100000000B ;AN000;display default and accept input
331ICB_CLR EQU 0000001000000000B ;AN000;clear default on first entry
332ICB_PSW EQU 0000010000000000B ;AN000;password
333ICB_RJU EQU 0000100000000000B ;AN000;right justification is activated
334ICB_SWK EQU 0001000000000000B ;AN000;switch entry dir key active
335ICB_RTA EQU 0010000000000000B ;AN000;right arrow editing
336ICB_LFA EQU 0100000000000000B ;AN000;left arrow editing
337ICB_BKS EQU 1000000000000000B ;AN000;backspace editing
338;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
339;
340; ICB_OPT2 Option word two equates
341;
342;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
343ICB_INS EQU 0000000000000001B ;AN000;insert key editing
344ICB_DEL EQU 0000000000000010B ;AN000;delete key editing
345ICB_HOM EQU 0000000000000100B ;AN000;home key editing
346ICB_CTE EQU 0000000000001000B ;AN000;control + end key editing
347ICB_END EQU 0000000000010000B ;AN000;end key editing
348ICB_AXC EQU 0000000000100000B ;AN000;auto enter on cursor
349ICB_AXD EQU 0000000001000000B ;AN000;auto enter on data
350ICB_CSW EQU 0000000010000000B ;AN000;wrap the cursor end to end
351ICB_UPC EQU 0000000100000000B ;AN000;lower case to upper conversion
352ICB_UFK EQU 0000001000000000B ;AN000;use supplied keystroke as 1 key
353ICB_UDO EQU 0000010000000000B ;AN000;undo key replaces default
354ICB_TSD EQU 0000100000000000B ;AN000;thousands separators during inpu
355ICB_TSA EQU 0001000000000000B ;AN000;thousands separators after entry
356ICB_TSR EQU 0010000000000000B ;AN000;return thousand separators
357ICB_PAD EQU 0100000000000000B ;AN000;pad zeros to precision
358ICB_WRP EQU 1000000000000000B ;AN000;word wrap in windowed field
359;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
360;
361; ICB_OPT3 Option word three equates
362;
363;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
364ICB_WIN EQU 0000000000000001B ;AN000;windowing wrap of field
365ICB_WAE EQU 0000000000000010B ;AN000;up and down arrow editing
366ICB_TBX EQU 0000000000000100B ;AN000;exit if arrows reach top/bottom
367ICB_HOR EQU 0000000000001000B ;AN000;horizontial windowing
368ICB_WHM EQU 0000000000010000B ;AN000;full window Home key
369ICB_WEN EQU 0000000000100000B ;AN000;full window End key
370ICB_WCE EQU 0000000001000000B ;AN000;full window Ctrl-End key
371ICB_WDL EQU 0000000010000000B ;AN000;full window Delete key
372ICB_WAR EQU 0000000100000000B ;AN000;full window arrow keys
373ICB_WBS EQU 0000001000000000B ;AN000;full window backspace key
374ICB_FGS EQU 0000010000000000B ;AN000;use the ICB_STATUS status values
375ICB_SCR EQU 0000100000000000B ;AN000;display of scroll flag active
376ICB_NUM EQU 0001000000000000B ;AN000;display of numlock flag active
377ICB_CAP EQU 0010000000000000B ;AN000;display of caps flag active
378ICB_FIN EQU 0100000000000000B ;AN000;display of insert flag active
379;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
380;
381; ICB_STATUS status word equates
382;
383;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
384ICB_SDEF EQU 0000000000000001B ;AN000;default value changed
385ICB_SMUS EQU 0000000000000010B ;AN000;minus sign active
386ICB_SPUS EQU 0000000000000100B ;AN000;plus sign active
387ICB_STRU EQU 0000000000001000B ;AN000;default value was truncated
388ICB_SSCR EQU 0000000000010000B ;AN000;scroll lock flag on at exit/entry
389ICB_SNUM EQU 0000000000100000B ;AN000;num lock flag on at exit/entry
390ICB_SCAP EQU 0000000001000000B ;AN000;caps lock flag on at exit/entry
391ICB_SINS EQU 0000000010000000B ;AN000;insert flag on at exit/entry
392;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
393;
394; PCWWRAP option bit equates (WWP_OPT1)
395;
396;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
397WWP_LEFTJUST EQU 0000000000000001B ;AN000;process with left straight edge
398WWP_RIGHTJUST EQU 0000000000000010B ;AN000;process with right straight edge
399WWP_LEFTNRIGHT EQU 0000000000000100B ;AN000;process with left and right edge
400WWP_HYPHEN EQU 0000000000001000B ;AN000;hyphenate word(s)
401WWP_DESTBUFFER EQU 0000000000010000B ;AN000;Use specified destination buffer
402WWP_SRCBUFFER EQU 0000000000100000B ;AN000;Use the same buf as the text
403;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
404;
405; PCWWRAP error bit equates (WWP_ERROR)
406;
407;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
408WWP_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small
409WWP_DUPSYMBOL EQU 0000000000000010B ;AN000;WWP_HYSMBOL and WWP_SRCHYSMB
410 ; are set to same character
411WWP_LONGWORD EQU 0000000000000100B ;AN000;word is longer than WWP_WIDTH
412WWP_NOBUFFER EQU 0000000000001000B ;AN000;no address to src or dest buf
413WWP_NOJUSTOPT EQU 0000000000010000B ;AN000;no justification option was set
414;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
415;
416; Help options (WR_HLPOPT, WR_HLPPAN, WR_HLPDIS)
417;
418;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
419HLP_CONT EQU 0000000000000001B ;AN000;contextual help
420HLP_KEYS EQU 0000000000000010B ;AN000;keys help
421HLP_HELP EQU 0000000000000100B ;AN000;help-on-help
422HLP_INDX EQU 0000000000001000B ;AN000;help index
423HLP_OVER EQU 0000000000010000B ;AN000;help row and column overrides
424;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
425;
426; Internal equates
427;
428;
429; Internal keystroke equates
430;
431;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
432UPARROW EQU 72*256 ;AN000;up arrow
433DNARROW EQU 80*256 ;AN000;down arrow
434LFARROW EQU 75*256 ;AN000;left arrow
435RTARROW EQU 77*256 ;AN000;right arrow
436PGUP EQU 73 ;AN000;
437PGDN EQU 81 ;AN000;
438ESCAPE EQU 27 ;AN000;
439ENTER EQU 13 ;AN000;
440SPACE EQU 32 ;AN000;
441TAB EQU 9 ;AN000;
442F1 EQU 59 ;AN000;
443F2 EQU 60 ;AN000;
444F3 EQU 61 ;AN000;
445F4 EQU 62 ;AN000;
446F5 EQU 63 ;AN000;
447F6 EQU 64 ;AN000;
448F7 EQU 65 ;AN000;
449F8 EQU 66 ;AN000;
450F9 EQU 67 ;AN000;
451F10 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 @@
1;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" =B
2; VIDEO REGISTER PORT ADDRESS EQUATES =B
3;
4;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" =B
5seq_addr EQU 0C4H ;AN000;Sequencer Address =B
6seq_data EQU 0C5H ;AN000;Sequencer Data =B
7crtc_addr EQU 0D4H ;AN000;CRT Controller Address (Color) =B
8crtc_addr_b EQU 0B4H ;AN000;CRT Controller Address (Mono) =B
9crtc_data EQU 0D5H ;AN000;CRT Controller Data =B
10graph_1_pos EQU 0CCH ;AN000;Graphics 1 Position =B
11graph_2_pos EQU 0CAH ;AN000;Graphics 2 Position =B
12graph_addr EQU 0CEH ;AN000;Graphics 1 & 2 Address =B
13graph_data EQU 0CFH ;AN000;Graphics 1 & 2 Data =B
14misc_output EQU 0C2H ;AN000;Miscellaneous Output =B
15misc_read EQU 0CCH ;AN000;Miscellaneous Output Read Port Address =B
16in_stat_0 EQU 0C2H ;AN000;Input Status Register 0 =B
17input_status_b EQU 0BAH ;AN000;Feature Control (Mono) =B
18input_status EQU 0DAH ;AN000;Feature Control (Color) =B
19attr_read EQU 0C1H ;AN000;Attribute Controller Read Address =B
20attr_write EQU 0C0H ;AN000;Attribute Controller Write Address =B
21fctrl_read EQU 0CAH ;AN000;Feature Control Regiester Read Address =B
22
23;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
24; SEQUENCER ADDRESS REGISTER EQUATES
25;
26;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
27s_reset EQU 00H ;AN000;Reset =B
28s_clock EQU 01H ;AN000;Clocking Mode =B
29s_map EQU 02H ;AN000;Map Mask =B
30s_cgen EQU 03H ;AN000;Character Map Select =B
31s_mem EQU 04H ;AN000;Memory Mode =B
32
33
34;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
35; GRAPHICS ADDRESS REGISTER EQUATES
36;
37;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
38g_set_reset EQU 00H ;AN000;set/reset =B
39g_enbl_set EQU 01H ;AN000;enable set/reset =B
40g_clr_comp EQU 02H ;AN000;color compare =B
41g_data_rot EQU 03H ;AN000;data rotate =B
42g_read_map EQU 04H ;AN000;read map select =B
43g_mode EQU 05H ;AN000;mode =B
44g_misc EQU 06H ;AN000;miscellaneous =B
45g_color EQU 07H ;AN000;color don't care =B
46g_bit_mask EQU 08H ;AN000;bit mask =B
47
48;---------------------------------------------------------------------+
49; |
50; Miscellaneous Equates |
51; |
52;---------------------------------------------------------------------+
53
54LINELEN EQU 80 ;AN000; Length of a Graphics Buffer Line
55COLPELS EQU 8 ;AN000; Number of pels per text column
56DEFROFFU EQU 0 ;AN000; Default Pointer Icon Row Center Offset
57DEFROFFD EQU 14 ;AN000; Default Pointer Icon Row Center Offset
58DEFCOFFR EQU 11 ;AN000; Default Pointer Icon Column Center Offst
59DEFCOFFL EQU 4 ;AN000; Default Pointer Icon Column Center Offst
60ICONROWS EQU 16 ;AN000; Number of Rows in Pointer Icon
61ICONCOLS EQU 16 ;AN000; Number of Columns in Pointer Icon
62SHFTMSK EQU 07H ;AN000; Column Shift Count Bit Mask (Hi-Res)
63M_BLACK EQU 0 ;AN000;default background color (icon)
64M_WHITE EQU 15 ;AN000;default foreground color (icon)
65M_DAXIS EQU 11 ;AN000;default axis mouse pointer
66VSICONR EQU 28 ;AN000;# pel rows
67VSICONC EQU 2*8 ;AN000;# pel columns
68MVSICONR EQU 16 ;AN000;minimun pel rows in sb icon
69MHSICONC EQU 3*8 ;AN000;minimum pel cols in sb icon
70
71;;
72;; Long Conditional Jump Macros
73;;
74lja macro Farlabel ;;AN000;
75 local Nearlabel ;;AN000;
76 jna Nearlabel ;;AN000;
77 jmp Farlabel ;;AN000;
78Nearlabel: ;;AN000;
79 endm ;;AN000;
80ljae macro Farlabel ;;AN000;
81 local Nearlabel ;;AN000;
82 jnae Nearlabel ;;AN000;
83 jmp Farlabel ;;AN000;
84Nearlabel: ;;AN000;
85 endm ;;AN000;
86ljb macro Farlabel ;;AN000;
87 local Nearlabel ;;AN000;
88 jnb Nearlabel ;;AN000;
89 jmp Farlabel ;;AN000;
90Nearlabel: ;;AN000;
91 endm ;;AN000;
92ljc macro Farlabel ;;AN000;
93 local Nearlabel ;;AN000;
94 jnc Nearlabel ;;AN000;
95 jmp Farlabel ;;AN000;
96Nearlabel: ;;AN000;
97 endm ;;AN000;
98ljbe macro Farlabel ;;AN000;
99 local Nearlabel ;;AN000;
100 jnbe Nearlabel ;;AN000;
101 jmp Farlabel ;;AN000;
102Nearlabel: ;;AN000;
103 endm ;;AN000;
104lje macro Farlabel ;;AN000;
105 local Nearlabel ;;AN000;
106 jne Nearlabel ;;AN000;
107 jmp Farlabel ;;AN000;
108Nearlabel: ;;AN000;
109 endm ;;AN000;
110ljz macro Farlabel ;;AN000;
111 local Nearlabel ;;AN000;
112 jnz Nearlabel ;;AN000;
113 jmp Farlabel ;;AN000;
114Nearlabel: ;;AN000;
115 endm ;;AN000;
116ljg macro Farlabel ;;AN000;
117 local Nearlabel ;;AN000;
118 jng Nearlabel ;;AN000;
119 jmp Farlabel ;;AN000;
120Nearlabel: ;;AN000;
121 endm ;;AN000;
122ljge macro Farlabel ;;AN000;
123 local Nearlabel ;;AN000;
124 jnge Nearlabel ;;AN000;
125 jmp Farlabel ;;AN000;
126Nearlabel: ;;AN000;
127 endm ;;AN000;
128ljl macro Farlabel ;;AN000;
129 local Nearlabel ;;AN000;
130 jnl Nearlabel ;;AN000;
131 jmp Farlabel ;;AN000;
132Nearlabel: ;;AN000;
133 endm ;;AN000;
134ljle macro Farlabel ;;AN000;
135 local Nearlabel ;;AN000;
136 jnle Nearlabel ;;AN000;
137 jmp Farlabel ;;AN000;
138Nearlabel: ;;AN000;
139 endm ;;AN000;
140ljnc macro Farlabel ;;AN000;
141 local Nearlabel ;;AN000;
142 jc Nearlabel ;;AN000;
143 jmp Farlabel ;;AN000;
144Nearlabel: ;;AN000;
145 endm ;;AN000;
146ljne macro Farlabel ;;AN000;
147 local Nearlabel ;;AN000;
148 je Nearlabel ;;AN000;
149 jmp Farlabel ;;AN000;
150Nearlabel: ;;AN000;
151 endm ;;AN000;
152ljnz macro Farlabel ;;AN000;
153 local Nearlabel ;;AN000;
154 jz Nearlabel ;;AN000;
155 jmp Farlabel ;;AN000;
156Nearlabel: ;;AN000;
157 endm ;;AN000;
158ljno macro Farlabel ;;AN000;
159 local Nearlabel ;;AN000;
160 jo Nearlabel ;;AN000;
161 jmp Farlabel ;;AN000;
162Nearlabel: ;;AN000;
163 endm ;;AN000;
164ljo macro Farlabel ;;AN000;
165 local Nearlabel ;;AN000;
166 jno Nearlabel ;;AN000;
167 jmp Farlabel ;;AN000;
168Nearlabel: ;;AN000;
169 endm ;;AN000;
170 \ 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 @@
1;********************************************************************************
2; File: PRN_DEF.ASM
3;
4; Subroutines to read the printer profile file, extract the printer names,
5; build a scroll list for the cas services and retrieve addition information
6; from the file on a specific printer.
7; Also contains a subroutine to change the parameters for the SELECT command
8; in the autoexec.bat file.
9;
10;********************************************************************************
11PAGE , 132 ;AN000;
12.ALPHA ;AN000;
13.XLIST ;AN000;
14INCLUDE MACROS.INC ;AN000;
15INCLUDE STRUC.INC ;AN000;
16.LIST ;AN000;
17
18;***************************************************************************
19; Define the public subroutines in this module
20;***************************************************************************
21PUBLIC GET_PRINTER_TITLES_ROUTINE ;AN000;
22PUBLIC GET_PRINTER_INFO_ROUTINE ;AN000;
23PUBLIC RELEASE_PRINTER_INFO_ROUTINE ;AN000;
24PUBLIC CHANGE_AUTOEXEC_ROUTINE ;AN000;
25;***************************************************************************
26; Define the public values in this module
27;***************************************************************************
28PUBLIC SEG_LOC ;AN000; The segment where the printer data is stored
29PUBLIC NAMES_OFF ;AN000; The offset in the segment of the names table
30PUBLIC N_PRN_NAMES ;AN000; The number of printer definitions read from the profile
31PUBLIC MAX_NAME ;AN000; The longest name in the list
32PUBLIC SIZE_NAMES ;AN000; The number of bytes between each printer name (abs)
33PUBLIC SEL_FLG ;AN000; AN000; SELECT runtime flag
34
35EXTRN SYSPARSE: FAR;AN000;
36EXTRN POS_ZERO: FAR;AN000;
37EXTRN COPY_ROUTINE: FAR;AN000;
38EXTRN I_PRINTER: WORD;AN000;
39EXTRN N_PRINTER_TYPE: BYTE;AN000;
40EXTRN S_MODE_PARM: WORD;AN000;
41EXTRN S_CP_DRIVER: WORD;AN000;
42EXTRN S_CP_PREPARE: WORD;AN000;
43EXTRN S_GRAPH_PARM: WORD;AN000;
44EXTRN HOOK_INT_24:FAR;AN000;
45EXTRN RESTORE_INT_24:FAR;AN000;
46EXTRN INT_24_ERROR:WORD;AN000;
47
48
49EXTRN BIN_TO_CHAR_ROUTINE:FAR;AN000;
50
51DATA SEGMENT BYTE PUBLIC 'DATA';AN000;
52
53
54SEL_FLG DB 0 ;AN000; Select flag byte
55;INSTALLRW EQU 80H ;AN000; INSTALL diskette is R/W
56
57SEG_LOC DW 0 ;AN000; Location of the segment where the data is
58NAMES_OFF DW 0 ;AN000; The offset of the names table in the segment
59SEGMENT_SIZE DW 0 ;AN000; Amount of memory available
60BUFFER_START DW 0 ;AN000; Starting offset of the file data buffer
61BUFFER_SIZE DW 0 ;AN000; Number of bytes in the file data buffer
62FILE_PTR_AT_START DD 0 ;AN000; The file pointer for the data which is at
63 ; the beginning of the file data buffer
64AMOUNT_OF_DATA DW 0 ;AN000; The number of bytes in the file data buffer
65CURRENT_PARSE_LOC DW 0 ;AN000; The location to start the next parse.
66END_CUR_LINE DW 0 ;AN000; The address of the end of the line currently being parsed
67CX_ORDINAL_VALUE DW 0 ;AN000; The value returned by the parse for next call
68NUM_PRINTER_DEFS DB 0 ;AN000; The number of printer definitions in the file
69N_PRN_NAMES DW 0 ;AN000; The next free index into the names table
70FILE_HANDLE DW 0 ;AN000; Handle for the printer definition file.
71MAX_NAME DW 0 ;AN000; The length of the longest printer name found in the file
72START_NEXT_LINE DW 0 ;AN000; The starting offset of the next line to parse
73APPEND_POINTER DW 0 ;AN000; Offset of the ASCII-N string to append to the SELECT line
74FILENAME DW 0 ;AN000; Offset of the ASCII-N string containing the filename
75CDP_FOUND DB 0 ;AN000;
76CPP_FOUND DB 0 ;AN000;
77
78
79W_VALUE DW 0 ;AN000;
80STRING_N DB 10 DUP(0);AN000;
81
82
83;AD000;JW BLANK_MODE DW END_BLANK_MODE - $ - 3 ; The blank line for inserting mode parameters
84;AD000;JW DB ' , , , , ',?
85;AD000;JW END_BLANK_MODE EQU $
86
87BLANK_STRING DW 0 ;AN000; Blank values for the other printer profile parameters
88
89E_SIZE_CR_LF EQU 2 ;AN000; The number of bytes in W_CR_LF
90W_CR_LF DB 13,10 ;AN000; Carrage return and line feed to append to the select line
91
92READ_FLAG DB 0 ;AN000; Flag for use when reading data
93 AT_EOF EQU 1B ;AN000; Indicates when the end of file has been reached
94 LAST_LINE EQU 10B ;AN000; Indicates if this is the last line in the buffer
95
96 RESET_EOF EQU 11111110B ;AN000; Masks for resetting the flags
97 RESET_LST_LINE EQU 11111101B ;AN000;
98
99PARSE_FLAG DB 0 ;AN000; Flag for use when parsing the data
100 FIRST_PARSE EQU 1B ;AN000; Indicates if this is the first line being parsed
101 LINE_DONE EQU 10B ;AN000; Indicates if the current line has already been parsed
102 FIRST_NAME EQU 100B ;AN000; Indicates if a printer names has already been found
103
104 RESET_FIRST_PARSE EQU 11111110B ;AN000; Masks for resetting the flags
105 RESET_LINE_DONE EQU 11111101B ;AN000;
106 RESET_FIRST_NAME EQU 11111011B ;AN000;
107
108;***************************************************************************
109; Error codes returned.
110;***************************************************************************
111ERR_NOT_ENOUGH_MEM EQU 1 ;AN000; There was not enough memory to build the names table
112ERR_OPENING_FILE EQU 2 ;AN000; Error opening a file
113ERR_READING_FILE EQU 3 ;AN000; Error reading from a file
114ERR_FINDING_VALUE EQU 4 ;AN000; Error finding the number of prn defs at the beginning of the file
115ERR_LINE_TOO_LONG EQU 5 ;AN000; There was a line too long for the buffer
116ERR_FINDING_NAME EQU 6 ;AN000; There was an error locating a printer name after a P or S
117ERR_ACCESSING_FILE EQU 7 ;AN000; There was an error updating the file pointer
118ERR_TOO_MANY_DEFS EQU 8 ;AN000; There are too many defintion in the file
119ERR_NUMBER_MATCH EQU 9 ;AN000; The number of actual definition do not match the number expected
120ERR_ALLOCATING_MEM EQU 10 ;AN000; There was an error allocating memory
121ERR_CDP_CPP EQU 11 ;AN000; A prn defn had either a CDP or CPP but not both
122ERR_PRN_DEFN EQU 12 ;AN000;
123
124TRUE EQU 1 ;AN000;
125FALSE EQU 0 ;AN000;
126
127
128E_CR EQU 13 ;AN000;
129E_LF EQU 10 ;AN000;
130E_FILE_TERM EQU 1AH ;AN000;
131
132E_MAX_PRN_NAME_LEN EQU 40 ;AN000; The maximum printer name length
133LENGTH_FILE_PTR EQU 4 ;AN000; The number of bytes in the file pointer
134MAX_NUM_PRINTER_DEFS EQU 31 ;AC089;SEH ;AC073; The maximum number of printer definitions
135MIN_SIZE_FILE_BUFFER EQU 0400H ;AN000; The minimum amount of memory needed for the file data buffer
136LENGTH_PRT_TYPE_IND EQU 1 ;AN000; The length of the printer type indicator
137SIZE_NAMES EQU E_MAX_PRN_NAME_LEN+LENGTH_FILE_PTR+LENGTH_PRT_TYPE_IND ;AN000; The size of one entry in the names table
138NAMES_TABLE_SIZE EQU SIZE_NAMES * MAX_NUM_PRINTER_DEFS ;AN000; The size of the names table
139MINIMUM_MEMORY EQU NAMES_TABLE_SIZE + MIN_SIZE_FILE_BUFFER ;AN000; The minimum amount of memory required
140
141RANGE_ONLY EQU 1 ;AN000; The parser is only to look for ranges of values
142RANGE_AND_STRING EQU 3 ;AN000; The parser is to look for ranges and strings
143
144NUMERIC_VALUE EQU 08000H ;AN000; Parser constant for searching for numeric values
145SIMPLE_STRING EQU 02000H ;AN000; Parser constant for searching for strings
146
147
148; Control blocks for the parser.
149; The PARMS INPUT BLOCK
150PARMS LABEL BYTE ;AN000;
151 PAR_EXTEN DW OFFSET PARMSX ;AN000; Offset of the PARMS EXTENSION BLOCK
152 PAR_NUM DB 2 ;AN000; The number of further definitions
153 DB 0 ;AN000;
154 DB 1 ;AN000;
155 DB 1AH ;AN000;
156
157; The PARMS EXTENSION BLOCK
158PARMSX LABEL BYTE;AN000;
159 PAX_MINP DB 0 ;AN000;
160 PAX_MAXP DB 1 ;AN000;
161 DW CONTROL_P1 ;AN000;
162 PAX_MAX_SW DB 0;AN000;
163 PAX_MAX_K1 DB 0;AN000;
164
165; The control blocks for the definition of positional parameters, switch and
166; keywords.
167CONTROL_P1 EQU $ ;AN000;
168CTL_FUNC_FL DW 2000H;AN000;
169 DW 0002H ;AN000;
170 DW RESULT_P1 ;AN000;
171 DW VALUE_LIST_P1 ;AN000;
172 DB 0 ;AN000;
173
174VALUE_LIST_P1 EQU $;AN000;
175VAL_NUM DB 1 ;AN000; Number of value definitions
176 DB 1 ;AN000; Number of range definitions
177 DB 8 ;AN000; Return value if parameter is in this range
178 DD 0 ;AN000;
179 DD 255 ;AN000;
180 DB 0 ;AN000; Number of actual value definitions
181NUM_STRINGS DB 2 ;AN000; Number of string definitions
182 DB 1 ;AN000; Value to be returned if this string is matched
183 DW OFFSET KEYWORD_PARALLEL;AN000;
184 DB 2 ;AN000; Value to be returned if this string is matched
185 DW OFFSET KEYWORD_SERIAL;AN000;
186
187 DB 3 ;AN000; Value to be returned if this string is matched
188 DW OFFSET KEYWORD_MODE;AN000;
189 DB 4 ;AN000; Value to be returned if this string is matched
190 DW OFFSET KEYWORD_CODE_DRIVER;AN000;
191 DB 5 ;AN000; Value to be returned if this string is matched
192 DW OFFSET KEYWORD_CODE_PREPARE;AN000;
193 DB 6 ;AN000; Value to be returned if this string is matched
194 DW OFFSET KEYWORD_GRAPHICS;AN000;
195
196KEYWORD_PARALLEL DB 'P',0;AN000;
197KEYWORD_SERIAL DB 'S',0;AN000;
198KEYWORD_MODE DB 'SP',0;AN000;
199KEYWORD_CODE_DRIVER DB 'CDP',0;AN000;
200KEYWORD_CODE_PREPARE DB 'CPP',0;AN000;
201KEYWORD_GRAPHICS DB 'GP',0;AN000;
202
203RESULT_P1 LABEL BYTE;AN000;
204 DB 0 ;AN000; Type of operand returned
205MATCHED_TAG DB 0 ;AN000; Matched item tag
206SYNONYM_PTR DW 0 ;AN000; Offset of synonym returned
207RESULT_FIELD DB 0,0,0,0 ;AN000; Unsure what this is...
208
209
210;AD000;JW ;***************************************************************************
211;AD000;JW ; Parser control blocks for parsing the mode parameters
212;AD000;JW ;***************************************************************************
213;AD000;JW MODE_PARMS LABEL BYTE
214;AD000;JW DW MODE_PARMSX
215;AD000;JW DB 0
216;AD000;JW
217;AD000;JW MODE_PARMSX LABEL BYTE
218;AD000;JW DB 0,0
219;AD000;JW DB 0
220;AD000;JW DB 1
221;AD000;JW DW OFFSET CNTL_BAUD
222;AD000;JW
223;AD000;JW CNTL_BAUD LABEL BYTE
224;AD000;JW DW SIMPLE_STRING
225;AD000;JW DW 2
226;AD000;JW DW RESULT_P1
227;AD000;JW DW MODE_VALUES
228;AD000;JW DB 5
229;AD000;JW SYN_BAUD DB 'BAUD',0
230;AD000;JW SYN_PARITY DB 'PARITY',0
231;AD000;JW SYN_DATA DB 'DATA',0
232;AD000;JW SYN_STOP DB 'STOP',0
233;AD000;JW SYN_RETRY DB 'RETRY',0
234;AD000;JW
235;AD000;JW MODE_VALUES LABEL BYTE
236;AD000;JW DB 0
237
238
239;***************************************************************************
240; Parser control blocks for parsing the AUTOEXEC.BAT file for 'SELECT'
241;***************************************************************************
242SELECT_PARMX LABEL BYTE ;AN000;
243 DB 1,1 ;AN000;
244 DW SELECT_CONTROL ;AN000;
245 DB 0 ;AN000;
246 DB 0 ;AN000;
247
248SELECT_CONTROL LABEL BYTE;AN000;
249 DW 2000H ;AN000;
250 DW 2 ;AN000;
251 DW RESULT_P1 ;AN000;
252 DW SELECT_VALUE ;AN000;
253 DB 0 ;AN000;
254
255SELECT_VALUE LABEL BYTE ;AN000;
256 DB 3 ;AN000;
257 DB 0 ;AN000;
258 DB 0 ;AN000;
259 DB 1 ;AN000;
260 DB 1 ;AN000;
261 DW OFFSET SELECT_STR;AN000;
262
263SELECT_STR DB 'SELECT',0;AN000;
264ALLOC_FLAG DB 0
265ALLOCATED EQU 80H
266
267
268DATA ENDS ;AN000;
269
270CODE_FAR SEGMENT BYTE PUBLIC 'CODE';AN000;
271
272 ASSUME CS:CODE_FAR, DS:DATA, ES:DATA;AN000;
273
274;***************************************************************************
275; Routines for extracting the printer names from the file data and storing
276; them in a table located in high memory. In addition to the name, the
277; type of printer, whether Parallel or Serial and the location in the file
278; of this printer name is also saved in the table.
279;***************************************************************************
280
281;******************************************************************************
282;
283; Routine: GET_PRINTER_TITLES_ROUTINE - Reads the names of all the printers
284; and their location in the file into a data
285; buffer in high memory.
286;
287; Input:
288; DI - The offset of name of the file which contains the printer definitions
289; in ASCII-N format.
290;
291; Output:
292; If CY = 1: Indicates that an error has occured.
293; BX - The error code for the error which this subroutine detected.
294; AX - The error code which was returned if the error was as a result
295; of a DOS call.
296; If CY = 0: No error has occured.
297; AX, BX - Undefined.
298;
299;******************************************************************************
300GET_PRINTER_TITLES_ROUTINE PROC FAR ;AN000;
301 ;
302 CALL HOOK_INT_24 ;AN000;
303;; int 3
304;; nop
305
306 PUSH ES ;AN000;
307 ;**********************************************************************
308 ; Allocate the necessary memory for the buffer. A maximum of 64K is
309 ; allocated.
310 ;**********************************************************************
311 CALL ALLOCATE_MEMORY ;AN000; Allocate the memory for the printer data
312 .IF < C > ;AN000; Was there an error?
313 JMP EXIT_WITH_ERROR ;AN000; If so, exit the subroutine
314 .ENDIF ;AN000;
315 ;**********************************************************************
316 ; See if there is enough memory to continue.
317 ;**********************************************************************
318 .IF < SEGMENT_SIZE B MINIMUM_MEMORY> ;AN000; Is there enough memory?
319 MOV BX, ERR_NOT_ENOUGH_MEM ;AN000; No! Return error code.
320 JMP EXIT_WITH_ERROR ;AN000; Exit the subroutine
321 .ENDIF ;AN000;
322 ;**********************************************************************
323 ; Set the pointer for the file data buffer and save the size of this buffer.
324 ;**********************************************************************
325 MOV BUFFER_START, NAMES_TABLE_SIZE ;AN000; Starting address of the file data buffer
326 MOV BX, SEGMENT_SIZE ;AN000; Total amount of memory available
327 SUB BX, NAMES_TABLE_SIZE ;AN000; Calculate the size of the file data buffer
328 MOV BUFFER_SIZE, BX ;AN000; Save this size.
329 MOV NAMES_OFF, 0 ;AN000; Offset of the printer names table
330 ;**********************************************************************
331 ; Open the printer definition file.
332 ;**********************************************************************
333 MOV INT_24_ERROR, 0 ;AN000;
334 CALL POS_ZERO ;AN000; Turn the ASCII-N string into an ASCII-Z string
335 MOV DX, DI ;AN000; Get address of the ASCII-N string
336 ADD DX, 2 ;AN000; Address of the filename
337 MOV AX, 3D00H ;AN000; Open file for reading.
338 DOSCALL ;AN000;
339 .IF < C > ;AN000; Was there an error opening the file?
340 MOV BX, ERR_OPENING_FILE ;AN000; Yes! Return this error code
341 JMP EXIT_WITH_ERROR ;AN000;
342 .ENDIF ;AN000;
343 MOV FILE_HANDLE, AX ;AN000; Save the handle for the file
344 ;**********************************************************************
345 ; Initialize the variable which holds the file pointer at the beginning
346 ; of the buffer.
347 ;**********************************************************************
348 MOV WORD PTR FILE_PTR_AT_START, 0 ;AN000; Zero the low word
349 MOV WORD PTR FILE_PTR_AT_START+2, 0 ;AN000; Zero the high word
350 AND READ_FLAG, RESET_EOF ;AN000; Indicate we are not at EOF
351 ;**********************************************************************
352 ; Read data into the file buffer.
353 ;**********************************************************************
354 MOV DI, BUFFER_START ;AN000; Start reading at this offset
355 SUB DI, NAMES_TABLE_SIZE ;AN000; Make into an offset in the buffer instead of the segment
356 CALL READ_FROM_HERE ;AN000; Read in the data.
357 .IF < C > ;AN000; Was there an error reading from the file?
358 MOV BX, ERR_READING_FILE ;AN000; Return this error code
359 JMP EXIT_WITH_ERROR ;AN000; Return from this subroutine
360 .ENDIF ;AN000;
361 ;**********************************************************************
362 ; Initialize the variables needed for the parsing.
363 ;**********************************************************************
364 MOV CURRENT_PARSE_LOC, NAMES_TABLE_SIZE ;AN000; Start parsing from the beginning.
365 MOV CX_ORDINAL_VALUE, 0 ;AN000; The first parse, CX must be zero.
366 MOV N_PRN_NAMES, 0 ;AN000; There are not names in the table now
367 AND PARSE_FLAG, RESET_LINE_DONE ;AN000; The current line has NOT been parsed
368 OR PARSE_FLAG, FIRST_PARSE ;AN000; Indicate that this is the first parse
369 ;**********************************************************************
370 ; Setup the control blocks for the parser
371 ;**********************************************************************
372 MOV PAR_EXTEN, OFFSET PARMSX ;AN000; Load the address of the parse extention block
373 ;**********************************************************************
374 ; Parse the data. If this is the first parse, then look for the number
375 ; of printer definitions. If it is not, then look for the parameters
376 ; P and S which preface the printer names.
377 ;**********************************************************************
378 MOV VAL_NUM, RANGE_ONLY ;AN000; Parse for a range of values only
379 MOV CTL_FUNC_FL, NUMERIC_VALUE ;AN000; Indicate we are looking for numbers
380 MOV NUM_STRINGS, 2 ;AN000; The number of parameters to look for
381 ;**********************************************************************
382 ; See if there is a complete line in the remainder of the buffer. If there
383 ; is not, then read more data into the buffer starting with the start of
384 ; the current line.
385 ;**********************************************************************
386PARSE_NEXT_LINE: ;AN000;
387 CALL SEARCH_LINE ;AN000; Search for the first parameter on the line
388 .IF < C > ;AN000; Was there an error?
389 JMP EXIT_WITH_ERROR ;AN000; Yes! Exit the routine
390 .ENDIF ;AN000;
391 .IF < BIT PARSE_FLAG AND FIRST_PARSE > ;AN000; Looking for a value or a string?
392 .IF < AX NE 0 > ;AN000; Was there an error?
393 MOV BX, ERR_FINDING_VALUE ;AN000; Yes! Return with this error code
394 JMP EXIT_WITH_ERROR ;AN000;
395 .ENDIF ;AN000;
396 MOV AL, RESULT_FIELD ;AN000; Get the low order byte of the value
397 MOV NUM_PRINTER_DEFS, AL ;AN000; Store the number of definitions
398 AND PARSE_FLAG, RESET_FIRST_PARSE ;AN000; Indicate the first parse is finished
399 MOV VAL_NUM, RANGE_AND_STRING ;AN000; Specify strings and ranges
400 MOV CTL_FUNC_FL, SIMPLE_STRING ;AN000; Look for specific strings only.
401 .ENDIF ;AN000;
402 ;**********************************************************************
403 ; See if we found a printer name
404 ;**********************************************************************
405 .IF < AX EQ 0 > ;AN000; Was an error found parsing the buffer
406 .IF < N_PRN_NAMES AE MAX_NUM_PRINTER_DEFS > ;AN000; Are there more the 255 printer defs?
407 MOV BX, ERR_TOO_MANY_DEFS ;AN000; If so, return this error.
408 JMP EXIT_WITH_ERROR ;AN000; Terminate the subroutine.
409 .ENDIF ;AN000;
410 ; DX contains the address of the result block
411 CALL COPY_PRINTER_NAME ;AN000; Copy the name to the table
412 .IF < C > ;AN000; Was there an error?
413 MOV BX, ERR_FINDING_NAME ;AN000; Yes! Return this error code
414 JMP EXIT_WITH_ERROR ;AN000;
415 .ENDIF ;AN000;
416 .ENDIF ;AN000;
417 ;**********************************************************************
418 ; Start scanning the next line.
419 ;**********************************************************************
420 MOV DI, START_NEXT_LINE ;AN000; Get the address of the next line to parse
421 MOV CURRENT_PARSE_LOC, DI ;AN000; Save it
422 .IF < CURRENT_PARSE_LOC EQ 0 > ;AN000; Is there more data?
423 JMP EXIT_WITHOUT_ERROR ;AN000; No! Exit the routine
424 .ENDIF ;AN000;
425 JMP PARSE_NEXT_LINE ;AN000; Start processing this line
426 ;
427EXIT_WITH_ERROR: ;AN000;
428 STC ;AN000; Set the carry flag, indicating error.
429 JMP EXIT_ROUTINE ;AN000;
430EXIT_WITHOUT_ERROR: ;AN000;
431 MOV CX, N_PRN_NAMES ;AN000; The number of entries in the table
432 .IF < CL NE NUM_PRINTER_DEFS > ;AN000; Did the number of definitions agree with the expected number?
433 MOV BX, ERR_NUMBER_MATCH ;AN000; Return this error message
434 JMP EXIT_WITH_ERROR ;AN000; Return, setting the carry flag.
435 .ENDIF ;AN000;
436 CLC ;AN000; Clear the carry flag - No error.
437EXIT_ROUTINE: ;AN000;
438 CALL DEALLOCATE_MEMORY
439 POP ES ;AN000;
440 CALL RESTORE_INT_24;AN000;
441 RET ;AN000;
442 ;
443GET_PRINTER_TITLES_ROUTINE ENDP ;AN000;
444;********************************************************************************
445;
446;SEARCH_LINE: Search for the first parameter on a line.
447;
448;INPUT:
449; None.
450;
451;OUTPUT:
452; AX - Contains the return codes from the parser
453; If CY = 1: There was an error - BX contains an error code
454; if CY = 0: There were NO errors.
455; All the registers are set from the parser return.
456;
457;OPERATION:
458;
459;********************************************************************************
460SEARCH_LINE PROC NEAR ;AN000;
461
462 MOV DI, CURRENT_PARSE_LOC ;AN000; Get the current location in the buffer
463 CALL SCAN_FOR_EOLN ;AN000; Search for the end of the line
464 MOV START_NEXT_LINE, DI ;AN000; Save the start address of the next line
465 .IF < C > ;AN000; Was the END OF LINE found?
466 .IF <BIT READ_FLAG AND AT_EOF> ;AN000; Are we at the end of the file?
467 MOV START_NEXT_LINE, 0 ;AN000; Yes! Indicate that this is the last line
468 .ELSE ;AN000; We are not the the end of the file
469 MOV DI, CURRENT_PARSE_LOC ;AN000; The location to read from in the file
470 SUB DI, NAMES_TABLE_SIZE ;AN000; Make into an offset in the buffer instead of the segment
471 CALL READ_FROM_HERE ;AN000; Read in more data
472 .IF < C > ;AN000; Was there an error reading from the file?
473 MOV BX, ERR_READING_FILE ;AN000; Return this error code
474 JMP EXIT_SEARCH_ERROR ;AN000; Return from this subroutine
475 .ENDIF ;AN000;
476 MOV CURRENT_PARSE_LOC, NAMES_TABLE_SIZE ;AN000; Start back at the beginning of the buffer
477 MOV DI, CURRENT_PARSE_LOC ;AN000; Get the current parse location again.
478 CALL SCAN_FOR_EOLN ;AN000; Once again look for the end of the line
479 MOV START_NEXT_LINE, DI ;AN000; Save the start address of the nest line
480 .IF < C > ;AN000; Was it found?
481 MOV BX, ERR_LINE_TOO_LONG ;AN000; No! Indicate an error.
482 JMP EXIT_SEARCH_ERROR ;AN000; Return with this error
483 .ENDIF ;AN000;
484 .ENDIF ;AN000;
485 .ENDIF ;AN000;
486 ;**********************************************************************
487 ; Set up the input parameters for the parse subroutine
488 ;**********************************************************************
489 MOV DI, OFFSET PARMS ;AN000; Offset into ES of the PARMS control block
490 MOV SI, CURRENT_PARSE_LOC ;AN000; Where to start parsing
491 MOV DX, 0 ;AN000;
492 MOV CX, CX_ORDINAL_VALUE ;AN000; The value returned by the parse last time.
493 PUSH DS ;AN000; Save the current data segment
494 PUSH ES ;AN000; Save the file data segment
495 MOV AX, DATA ;AN000; Get the current data segment
496 MOV ES, AX ;AN000; This is the parser control blocks.
497 MOV AX, SEG_LOC ;AN000; Where the data to parse is located
498 MOV DS, AX ;AN000;
499 CALL SYSPARSE ;AN000; Do the parsing
500 POP ES ;AN000; Restore the file data segment
501 POP DS ;AN000; Restore the data segment
502 CLC ;AN000; Indicate there were no errors
503 RET ;AN000;
504EXIT_SEARCH_ERROR: ;AN000; Here if there were errors
505 STC ;AN000; Indicate so to the calling program
506 RET ;AN000;
507
508SEARCH_LINE ENDP;AN000;
509;********************************************************************************
510; ALLOCATE_MEMORY: Allocate a maximum of 64K of memory.
511;
512; INPUT:
513; None.
514;
515; OUTPUT:
516; SEGMENT_SIZE = The size of the segment allocated.
517; SEG_LOC = The location of the segment allocated.
518; If CY = 1: There was an error - BX contains an error code
519; If CY = 0: There was NO errors.
520;
521; Operation:
522;
523;********************************************************************************
524ALLOCATE_MEMORY PROC NEAR;AN000;
525
526 AND ALLOC_FLAG,NOT ALLOCATED
527 MOV BX, 0FFFH ;AN000; Try to allocate this amount of memory
528 MOV SEGMENT_SIZE, BX ;AN000; Save the amount of memory asked for
529 MOV AH, 48H ;AN000; DOS Fn. for allocating memory
530 DOSCALL ;AN000; Allocate the memory
531 .IF < C > ;AN000; Was there an error?
532 MOV SEGMENT_SIZE, BX ;AN000; Save the size asked for in this request
533 MOV AH, 48H ;AN000; DOS Fn. for allocating memory
534 DOSCALL ;AN000; Allocate the memory
535 .ENDIF ;AN000;
536 .IF < C > ;AN000; Was there an error allocating the memory?
537 MOV BX, ERR_ALLOCATING_MEM ;AN000; Yes! Return an error code
538 STC ;AN000; Indicate that there was an error
539 .ELSE ;AN000; Otherwise...
540 MOV SEG_LOC, AX ;AN000; Save the location of the memory block allocated
541 MOV ES, AX ;AN000; Save in the extra segment
542 MOV CL, 4 ;AN000; Multiply the number of paragraphs by 16
543 SHL SEGMENT_SIZE, CL ;AN000; to get the number of bytes.
544 OR ALLOC_FLAG,ALLOCATED
545 CLC ;AN000; Indicate there was no error
546 .ENDIF ;AN000;
547 RET ;AN000;
548
549ALLOCATE_MEMORY ENDP;AN000;
550
551
552;********************************************************************************
553; DEALLOCATE_MEMORY: deallocate memory.
554;
555; INPUT:
556; SEG_LOC previously allocated segment
557;
558; OUTPUT:
559; None.
560;
561;********************************************************************************
562DEALLOCATE_MEMORY PROC NEAR
563
564 TEST ALLOC_FLAG,ALLOCATED
565 JZ DEM10
566
567 PUSH ES
568 MOV AX,SEG_LOC
569 MOV ES,AX
570 MOV AH,49H
571 INT 21H
572 POP ES
573DEM10:
574 RET
575DEALLOCATE_MEMORY ENDP
576
577;*******************************************************************************
578;
579; Routine: SCAN_FOR_EOLN - Scan the given string, for CR and LF.
580;
581; Input:
582; DI - Address of the string to scan for the eoln.
583;
584; Output:
585; If CY = 0: The end of the line was found.
586; DI - Contains the address of the start of the next line in the buffer.
587; - If DI = 0, the data ends just after either the CR, LF or the
588; CR and LF. Therefore, more data must be read before the next line
589; can be parsed.
590;
591; If CY = 1: The end of the line was not found.
592;
593;*******************************************************************************
594SCAN_FOR_EOLN PROC NEAR;AN000;
595
596 MOV CX, BUFFER_START ;AN000; The offset in the segment of the buffer
597 ADD CX, AMOUNT_OF_DATA ;AN000; Get the offset of the end of the data
598 SUB CX, DI ;AN000; Subtract the file data pointer
599 ; CX - Contains the amount of data after pointer
600 MOV AL, 0 ;AN000; Flag to indicate CR-LF has not been found yet
601 .WHILE < CX A 0 > ;AN000; Search until the end of the data
602 .IF < <BYTE PTR ES:[DI]> EQ E_FILE_TERM >;AN000;
603 .IF < ZERO AL > ;AN000;
604 MOV END_CUR_LINE, DI ;AN000; Save this location in the string
605 DEC END_CUR_LINE ;AN000; Point to the real end of the line
606 .ENDIF ;AN000;
607 STC ;AN000;
608 MOV DI, 0 ;AN000;
609 JMP EXIT_SCAN ;AN000;
610 .ENDIF ;AN000;
611 .IF < <BYTE PTR ES:[DI]> EQ E_LF > OR ;AN000; Is this character a CR or a LF?
612 .IF < <BYTE PTR ES:[DI]> EQ E_CR > ;AN000;
613 .IF < ZERO AL > ;AN000; Has a CR or a LF already been found?
614 MOV END_CUR_LINE, DI ;AN000; Save this location in the string
615 DEC END_CUR_LINE ;AN000; Point to the real end of the line
616 .ENDIF ;AN000;
617 INC AL ;AN000; Indicate that a CR or a LF has been found
618 .ELSEIF < NONZERO AL > ;AN000; If we have passed the CR-LF,
619 CLC ;AN000; Indicate we have found EOLN
620 JMP EXIT_SCAN ;AN000; Leave the subroutine
621 .ENDIF ;AN000;
622 DEC CX ;AN000; One less character to the end
623 INC DI ;AN000; Point to the next character
624 .ENDWHILE ;AN000;
625
626 .IF < AL AE 2 > ;AN000; Does the data run out right after the CR-LF?
627 MOV DI, 0 ;AN000; Return 0 indicating so.
628 .ENDIF ;AN000;
629 STC ;AN000; Indicate that the whole line is not there
630
631EXIT_SCAN: ;AN000;
632 RET ;AN000;
633
634SCAN_FOR_EOLN ENDP;AN000;
635;*******************************************************************************
636;
637; Routine: COPY_PRINTER_NAME - Copy the name of the printer from the file
638; into the buffer holding all the names.
639;
640; Input:
641; SI - Contains the address of the start of the printer name.
642; DX - Contains the address of the parse result block
643;
644; Output:
645; CY = 1: An error has occured. The name of the printer has not been found.
646; CY = 0: No error.
647;
648; Operation: The name from the file buffer is copied to the printer name
649; table. Starting from the address passed in DI, the file buffer is
650; scanned until a valid character is found. Starting from this point
651; up to forty characters are transferred to the name table. If no
652; name is found, the carry flag is set, and nothing is recorded in the
653; name table.
654; After the name is copied, the remainder of the field in the table
655; is cleared.
656;
657;*******************************************************************************
658COPY_PRINTER_NAME PROC NEAR;AN000;
659
660 PUSH DS ;AN000;
661 PUSH ES ;AN000;
662 PUSH DX ;AN000; Save the address of the result block
663 ;**********************************************************************
664 ; Calculate the offset into the file data table for this entry
665 ;**********************************************************************
666 MOV AX, N_PRN_NAMES ;AN000; The next free index into the names table
667 MOV BX, SIZE_NAMES ;AN000; Get the number of bytes per entry
668 MUL BX ;AN000; Multiply by the index into the table
669 MOV DI, AX ;AN000; Move the offset into an index register
670 ;**********************************************************************
671 ; Copy the type of printer first
672 ;**********************************************************************
673 POP BX ;AN000; Get the result block address
674 MOV AL, DS:[BX+1] ;AN000; Get the matched item tag
675 .IF < AL EQ 1 > ;AN000; Was the parameter a P?
676 MOV AL, 'P' ;AN000; Yes!
677 .ELSE ;AN000;
678 MOV AL, 'S' ;AN000; No! It was an S
679 .ENDIF ;AN000;
680 MOV ES:[DI+40], AL ;AN000; Store in the table
681 ;**********************************************************************
682 ; Skip the spaces between the printer type indicator and the printer name
683 ;**********************************************************************
684 MOV AL, 32 ;AN000; Character to skip - space
685 XCHG SI, DI ;AN000; Point DI to the line being scanned
686 MOV CX, END_CUR_LINE ;AN000; Get address of the last char in line
687 SUB CX, DI ;AN000; Subtract start
688 INC CX ;AN000; Get the length of the line
689 CLD ;AN000; Scan forward
690 REPZ SCASB ;AN000; Repeat search until character found
691 JZ NAME_NOT_FOUND ;AN000; If all spaces, then it is an error
692 INC CX ;AN000; Increment character count
693 DEC DI ;AN000; Decrement pointer to character
694 ;***********************************************************************
695 ; Move the printer name to the names list
696 ;***********************************************************************
697 XCHG SI, DI ;AN000; Exchange the pointers again
698 MOV CX, END_CUR_LINE ;AN000; Get the address of the last char
699 SUB CX, SI ;AN000; Subtract start
700 INC CX ;AN000; Get the length of the line
701 .IF < CX A E_MAX_PRN_NAME_LEN > ;AN000; Is the length of the line too long?
702 MOV CX, E_MAX_PRN_NAME_LEN ;AN000; Yes! Make the line length the maximum size
703 .ENDIF ;AN000;
704 MOV DX, CX ;AN000; Save the line length for later use
705 .WHILE < NONZERO CX > ;AN000; Do while there are more characters in the string
706 MOV AL, BYTE PTR ES:[SI] ;AN000; Get a character from the file data
707 .IF < AL NE 32 > ;AN000; Is this character a space?
708 MOV BX, DX ;AN000; Get the line length
709 SUB BX, CX ;AN000; Get the length of the line copied so far
710 INC BX ;AN000;
711 .IF < MAX_NAME B BX > ;AN000; Is this name longer than the longest so far?
712 MOV MAX_NAME, BX ;AN000; Yes! This is the new maximum
713 .ENDIF ;AN000;
714 .ENDIF ;AN000;
715 MOV BYTE PTR ES:[DI], AL ;AN000; Put the character in the names table
716 INC SI ;AN000; Increment string pointers
717 INC DI ;AN000;
718 DEC CX ;AN000; Decrement the number of characters left
719 .ENDWHILE ;AN000;
720 ;***********************************************************************
721 ; Fill in the rest of the name area with spaces
722 ;***********************************************************************
723 MOV CX, E_MAX_PRN_NAME_LEN ;AN000; The maximum line length
724 ; DX contains the line length from last section
725 SUB CX, DX ;AN000; Calculate the space left in the line
726 MOV AL, 32 ;AN000; Character to store
727 REP STOSB ;AN000; Store the blank characters
728 ;***********************************************************************
729 ; Store the file pointer to this printer name in the name list
730 ;***********************************************************************
731 INC DI ;AN000; Point DI passed the printer type indicator
732 MOV SI, CURRENT_PARSE_LOC ;AN000; Get the start of the current line
733 SUB SI, NAMES_TABLE_SIZE ;AN000; Subtract offset of the start of the buffer
734 MOV CX, WORD PTR FILE_PTR_AT_START ;AN000; Get the low order word of the pointer
735 MOV DX, WORD PTR FILE_PTR_AT_START[2] ;AN000; Get the high order word
736 ADD CX, SI ;AN000; Add the offset of the start of this line
737 ADC DX, 0 ;AN000; Add the high word
738 MOV WORD PTR ES:[DI], CX ;AN000; Store the low order word in the list
739 MOV WORD PTR ES:[DI+2], DX ;AN000; Store the high order word
740 INC N_PRN_NAMES ;AN000; Point to the next free area in the list
741 CLC ;AN000;
742 JMP EXIT_COPY ;AN000;
743NAME_NOT_FOUND: ;AN000;
744 STC ;AN000;
745EXIT_COPY: ;AN000;
746 POP ES ;AN000;
747 POP DS ;AN000;
748 RET ;AN000;
749
750COPY_PRINTER_NAME ENDP ;AN000;
751
752;*******************************************************************************
753; Routine: READ_FROM_HERE - Read from the file into the buffer starting from
754; the file position pointed to by CURRENT_PARSE_LOC.
755;
756; Input:
757; DI - Contains the current parsing location in the buffer.
758;
759; Output:
760; FILE_PTR_AT_START - Updated for the new data read.
761;
762; Operation:
763;
764;*******************************************************************************
765READ_FROM_HERE PROC NEAR;AN000;
766 ;
767 ;**********************************************************************
768 ; Update the R/W pointer in the file.
769 ;**********************************************************************
770 MOV DX, WORD PTR FILE_PTR_AT_START ;AN000; Get the low order word of the pointer
771 MOV CX, WORD PTR FILE_PTR_AT_START[2] ;AN000; Get the high order word of the pointer
772 ADD DX, DI ;AN000; Add the offset of where to start reading
773 ADC CX, 0 ;AN000; Take care of the carry condition
774 MOV WORD PTR FILE_PTR_AT_START, DX ;AN000; Store the new starting position
775 MOV WORD PTR FILE_PTR_AT_START[2], CX ;AN000; Store the high word of pointer
776 MOV INT_24_ERROR, 0 ;AN000;
777 MOV AX, 4200H ;AN000; DOS Function for moving the file pointer
778 MOV BX, FILE_HANDLE ;AN000; Load the file handle
779 DOSCALL ;AN000; Move the file pointer
780 .IF < C > ;AN000; Was an error encountered?
781 JMP RETURN_WITH_ERROR ;AN000; Yes! Exit the subroutine.
782 .ENDIF ;AN000;
783 ;**********************************************************************
784 ; Read from the file into the data buffer
785 ;**********************************************************************
786 MOV CX, BUFFER_SIZE ;AN000; Number of bytes to read. As many as will fit.
787 MOV BX, FILE_HANDLE ;AN000; Load the DOS file handle for this file
788 MOV AH, 03FH ;AN000; The DOS function to perform
789 MOV DX, BUFFER_START ;AN000; The offset of the file data buffer
790 MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet
791 PUSH DS ;AN000; Save the current data segment
792 PUSH ES ;AN000; Push the file data buffer
793 POP DS ;AN000; DS now points to the file data buffer
794 DOSCALL ;AN000; Read from the file.
795 POP DS ;AN000; Restore the original data segment
796 ;**********************************************************************
797 ; See if the buffer was filled.
798 ;**********************************************************************
799 MOV AMOUNT_OF_DATA, AX ;AN000; Save the amount of data that was read.
800 .IF < AX B BUFFER_SIZE > ;AN000; Were less bytes read then we asked for?
801 OR READ_FLAG, AT_EOF ;AN000; Yes! Indicate that we are at EOF
802; MOV DI, AX ; Move number of characters into an index pointer
803; MOV BYTE PTR ES:[DI+NAMES_TABLE_SIZE], 00 ; Place a terminator at the end
804 .ENDIF ;AN000;
805 CLC ;AN000;
806 RET ;AN000;
807
808RETURN_WITH_ERROR: ;AN000;
809 STC ;AN000;
810 RET ;AN000;
811
812READ_FROM_HERE ENDP ;AN000;
813
814;********************************************************************************
815; Routines for extracting all the information supplied in the profile for a
816; specific printer. Given the printer number, the location of its definition
817; is looked up in the names table. The file is them parsed for the information.
818;********************************************************************************
819
820;******************************************************************************
821; GET_PRINTER_INFO_ROUTINE - Get all the information contained in the printer
822; profile file for the specified printer.
823;
824; INPUT:
825; AX - The number of the printer to return the information on. The number
826; is the index into the names table for this printer.
827;
828; OUTPUT:
829; If CY = 0, there were no errors.
830; The following variable are updated with the information found in
831; the file:
832; I_PRINTER
833; N_PRINTER_TYPE
834; S_MODE_PARM
835; S_CP_DRIVER
836; S_CP_PREPARE
837; S_GRAPH_PARM
838;
839; If CY = 1, There were errors encountered.
840; BX = An error code indicating the type of error that occured.
841;
842; = 3 There was an error reading the file
843; = 7 There was a error accessing the file
844; = 11 A printer definition has either a CDP or a CPP
845; Prefix, but BOTH were not present.
846; = 12 There was an error in the printer definition.
847; - A line was found with an invalid prefix
848;
849; If the error was a result of a DOS function, then
850; on return, AX will contain the DOS error code.
851;
852; Operation:
853;
854; Note:
855; The first printer name has an index of 1.
856;
857;******************************************************************************
858GET_PRINTER_INFO_ROUTINE PROC FAR;AN000;
859
860
861
862 CALL HOOK_INT_24 ;AN000;
863
864
865
866 PUSH ES ;AN000; Save the extra segment register
867 ;**********************************************************************
868 ; Calculate the address of the specifed printer
869 ;**********************************************************************
870 MOV I_PRINTER, AX ;AN000; Save the printer index
871 DEC AX ;AN000; Make the first index a 0
872 MOV BX, SIZE_NAMES ;AN000; Number of bytes in each table entry
873 MUL BX ;AN000; Address is returned in AX
874 MOV DI, AX ;AN000; Move the address to an index register
875 ;**********************************************************************
876 ; Get the file location for this printer name
877 ;**********************************************************************
878 MOV AX, SEG_LOC ;AN000; Get the segment where the data is
879 MOV ES, AX ;AN000; Save in a segment register
880 MOV CX, WORD PTR ES:[DI+41] ;AN000; Get the low order word of the file location
881 MOV DX, WORD PTR ES:[DI+43] ;AN000; Get the high order word of the file location
882 ;**********************************************************************
883 ; Determine if the information is already in the buffer or do we have
884 ; to read more information from the printer profile.
885 ;**********************************************************************
886 .IF < DX B <WORD PTR FILE_PTR_AT_START+2>> ;AN000; Compare the high order words
887 JMP READ_MORE_INFORMATION ;AN000; Info in buffer is passed where we want.
888 .ELSE ;AN000;
889 .IF < DX EQ < WORD PTR FILE_PTR_AT_START+2>> AND ;AN000; High words equal so
890 .IF < CX B <WORD PTR FILE_PTR_AT_START>> ;AN000; compare the low order words
891 JMP READ_MORE_INFORMATION ;AN000; Info in buffer is passed where we want.
892 .ENDIF ;AN000;
893 .ENDIF ;AN000;
894 MOV BX, WORD PTR FILE_PTR_AT_START+2 ;AN000; File location at beginning of buffer
895 MOV SI, WORD PTR FILE_PTR_AT_START ;AN000; Low order word
896 ADD SI, AMOUNT_OF_DATA ;AN000; Get the file pointer of the end of the buffer
897 ADC BX, 0 ;AN000; Add in the high word
898 .IF < DX A BX > ;AN000; If data we want is further in the file,
899 JMP READ_MORE_INFORMATION ;AN000; Read in more data
900 .ELSE ;AN000;
901 .IF < DX EQ BX > AND ;AN000; If the high words are equal do the
902 .IF < CX A SI > ;AN000; comparison on the low order words
903 JMP READ_MORE_INFORMATION ;AN000; Still not there, so read more info
904 .ENDIF ;AN000;
905 .ENDIF ;AN000;
906 MOV AX, I_PRINTER ;AN000; Get the index of this printer name
907 .IF < AL EQ NUM_PRINTER_DEFS > ;AN000; Is this the last one in the list?
908 .IF < BIT READ_FLAG AND AT_EOF > ;AN000; If it is, and all the data has been read, process it
909 JMP PARSE_HERE ;AN000;
910 .ELSE ;AN000;
911 JMP READ_MORE_INFORMATION ;AN000; Not EOF, so read in more data just for safety
912 .ENDIF ;AN000;
913 .ENDIF ;AN000;
914 MOV CX, WORD PTR ES:[DI+SIZE_NAMES+41] ;AN000; Get the pointer to the NEXT printer name
915 MOV DX, WORD PTR ES:[DI+SIZE_NAMES+43] ;AN000; Get the high order word
916 .IF < DX A BX > ;AN000; See if the next printer name is in the buffer
917 JMP READ_MORE_INFORMATION ;AN000; If not, get more information
918 .ELSE ;AN000;
919 .IF < DX EQ BX > AND ;AN000; If the high order words are equal,
920 .IF < CX A SI > ;AN000; Compare the low order. Is the name there?
921 JMP READ_MORE_INFORMATION ;AN000; If not, read more.
922 .ENDIF ;AN000;
923 .ENDIF ;AN000;
924 JMP PARSE_HERE ;AN000; The necessary info is there, so parse it.
925 ;**********************************************************************
926 ; The specified printer information is not currently in the buffer. It
927 ; is necessary to read it from the printer profile file.
928 ;**********************************************************************
929READ_MORE_INFORMATION: ;AN000;
930 MOV CX, WORD PTR ES:[DI+43] ;AN000; Get the file pointer of this printer name
931 MOV DX, WORD PTR ES:[DI+41] ;AN000; Get the low order word of pointer
932 MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet
933 MOV AX, 4200H ;AN000; DOS Fn. for positioning file pointer
934 MOV BX, FILE_HANDLE ;AN000; Get the handle of the file
935 DOSCALL ;AN000; Position the pointer
936 .IF < C > ;AN000; If CY = 1, there was an error
937 MOV BX, ERR_ACCESSING_FILE ;AN000; Return this error code
938 JMP ERROR_EXIT ;AN000; Jump to exit routine
939 .ENDIF ;AN000;
940 MOV WORD PTR FILE_PTR_AT_START, AX ;AN000; Set the new pointer at the beginning of the buffer
941 MOV WORD PTR FILE_PTR_AT_START+2, DX ;AN000; Set the high order word
942 MOV AH, 3FH ;AN000; DOS Fn. for reading from a file
943 MOV DX, BUFFER_START ;AN000; Offset of the start of the data buffer
944 MOV BX, FILE_HANDLE ;AN000; Get the file handle
945 MOV CX, BUFFER_SIZE ;AN000; Read as many bytes as the buffer will hold
946 MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet
947 PUSH DS ;AN000; Save the current data segment
948 PUSH ES ;AN000; Push the segment of the data buffer
949 POP DS ;AN000; Load DS with the segment where to store the data
950 DOSCALL ;AN000; Read in the data
951 POP DS ;AN000; Restore the data segment
952 .IF < C > ;AN000;
953 MOV BX, ERR_READING_FILE;AN000;
954 JMP ERROR_EXIT;AN000;
955 .ENDIF ;AN000;
956 .IF < AX NE BUFFER_SIZE > ;AN000; Were less bytes read then asked for?
957 OR READ_FLAG, AT_EOF ;AN000; If so, then we are at the end of file
958 .ELSE ;AN000; Otherwise...
959 AND READ_FLAG, RESET_EOF ;AN000; We are not at end of file
960 .ENDIF ;AN000;
961 MOV AMOUNT_OF_DATA, AX ;AN000; Save the amount of data actually read
962 ;**********************************************************************
963 ; The printer data is in the data buffer. Begin to parse the data.
964 ;**********************************************************************
965PARSE_HERE: ;AN000;
966 MOV CDP_FOUND, FALSE ;AN000;
967 MOV CPP_FOUND, FALSE ;AN000;
968 PUSH DI ;AN000; Save the pointer into the names table
969 ;**********************************************************************
970 ; Load the printer profile fields with defaults.
971 ;**********************************************************************
972 COPY_STRING S_MODE_PARM, 40, BLANK_STRING ;AC000;JW
973 COPY_STRING S_CP_DRIVER, 22, BLANK_STRING ;AN000;
974 COPY_STRING S_CP_PREPARE, 12, BLANK_STRING ;AN000;
975 COPY_STRING S_GRAPH_PARM, 20, BLANK_STRING ;AN000;
976 POP DI ;AN000; Restore the pointer into the names table
977 ;**********************************************************************
978 ; Get the type of printer.
979 ;**********************************************************************
980 MOV AL, ES:[DI+40] ;AN000; Get the printer type - Parallel or Serial from the table
981 MOV N_PRINTER_TYPE, AL ;AN000; Save in the appropriate variable
982 ;**********************************************************************
983 ; Get the offset of the start of this printer definition
984 ;**********************************************************************
985 MOV CX, ES:[DI+41] ;AN000; Get the low order word of the file pointer
986 MOV DX, ES:[DI+43] ;AN000; Get the high order word
987 SUB DX, WORD PTR FILE_PTR_AT_START[2] ;AN000; Subtract the high order words
988 SBB CX, WORD PTR FILE_PTR_AT_START ;AN000; Subtract the low order words
989 ADD CX, BUFFER_START ;AN000; Get the offset of the start of the definition
990 MOV CURRENT_PARSE_LOC, CX ;AN000; Save as the scan position
991 OR PARSE_FLAG, FIRST_NAME ;AN000;
992PARSE_NEXT_PARM: ;AN000;
993 MOV DI, CURRENT_PARSE_LOC ;AN000; Get the current scan position
994 CALL SCAN_FOR_EOLN ;AN000; Search for the end of this line
995 MOV START_NEXT_LINE, DI ;AN000; Save the position of the start of the next line
996 MOV SI, CURRENT_PARSE_LOC ;AN000; The position in the buffer to scan
997 MOV NUM_STRINGS, 6 ;AN000; Number of parameters to parse for
998 MOV DI, OFFSET PARMS ;AN000; Offset of the parameter blocks
999 MOV DX, 0 ;AN000; The parser wants DX = 0.
1000 MOV CX, 0 ;AN000; Tell the parser this is the first scan of this line
1001 PUSH DS ;AN000; Save the current data segment
1002 PUSH ES ;AN000; Save the file data segment
1003 MOV AX, DATA ;AN000; Get the current data segment
1004 MOV ES, AX ;AN000; This is the parser control blocks.
1005 MOV AX, SEG_LOC ;AN000; Where the data to parse is located
1006 MOV DS, AX ;AN000;
1007 CALL SYSPARSE ;AN000; Do the parsing
1008 POP ES ;AN000; Restore the file data segment
1009 POP DS ;AN000; Restore the data segment
1010 .IF < AX EQ 0FFFFH > ;AN000; Was the end of the line found?
1011 JMP UPDATE_PARSE_PTR ;AN000; If so, start the next one
1012 .ELSEIF < NONZERO AX > ;AN000; Was an error encountered parsing the line?
1013 MOV BX, ERR_PRN_DEFN ;AN000;
1014 JMP ERROR_EXIT ;AN000; If so, exit the subroutine
1015 .ENDIF ;AN000;
1016 MOV AL, MATCHED_TAG ;AN000; Get which string was matched
1017 .IF < AL EQ 1 > OR ;AN000; Was this a printer name and type?
1018 .IF < AL EQ 2 > ;AN000;
1019 .IF < BIT PARSE_FLAG AND FIRST_NAME > ;AN000; Is this the first name encountered?
1020 AND PARSE_FLAG, RESET_FIRST_NAME ;AN000; Indicate that the a name has been found
1021 .ELSE ;AN000; Otherwise...
1022 JMP PARSING_DONE ;AN000; This is the second name. We are finished.
1023 .ENDIF ;AN000;
1024 .ELSEIF < AL EQ 3 > ;AN000; AL = 3 ==> Mode parameters
1025 CALL HANDLE_MODE ;AN000; Process
1026 .ELSEIF < AL EQ 4 > ;AN000; AL = 4 ==> Code page driver parameters
1027 MOV CDP_FOUND, TRUE ;AN000;
1028 CALL HANDLE_CODE_DRIVER ;AN000; Process
1029 .ELSEIF < AL EQ 5 > ;AN000; AL = 5 ==> Code page preparation parameters
1030 MOV CPP_FOUND, TRUE ;AN000;
1031 CALL HANDLE_CODE_PREPARE ;AN000; Process
1032 .ELSEIF < AL EQ 6 > ;AN000; AL = 6 ==> Graphics parameters
1033 CALL HANDLE_GRAPHICS ;AN000; Process
1034 .ENDIF ;AN000;
1035 ;**********************************************************************
1036 ; The current line has been parsed. Point to the next line.
1037 ;**********************************************************************
1038UPDATE_PARSE_PTR: ;AN000;
1039 MOV AX, START_NEXT_LINE ;AN000; Get the address of the start of the next line
1040 MOV CURRENT_PARSE_LOC, AX ;AN000; Save this as the start of the current line
1041 .IF < CURRENT_PARSE_LOC EQ 0 > ;AN000; Is there any more data?
1042 JMP PARSING_DONE ;AN000; No. Exit the routine
1043 .ENDIF ;AN000;
1044 JMP PARSE_NEXT_PARM ;AN000; Start the parsing again
1045 ;**********************************************************************
1046 ; The subroutine is finished.
1047 ;**********************************************************************
1048PARSING_DONE: ;AN000;
1049 MOV AL, CDP_FOUND ;AN000;
1050 XOR AL, CPP_FOUND ;AN000;
1051 .IF < NZ > ;AN000;
1052 MOV BX, ERR_CDP_CPP ;AN000;
1053 JMP ERROR_EXIT ;AN000;
1054 .ENDIF ;AN000;
1055 CLC ;AN000; Clear the carry - No errors
1056 JMP EXIT_INFO ;AN000; Exit the subroutine
1057ERROR_EXIT: ;AN000;
1058 STC ;AN000; Set the carry - There were errors
1059EXIT_INFO: ;AN000;
1060 POP ES ;AN000; Restore the extra segment
1061 CALL RESTORE_INT_24;AN000;
1062 RET ;AN000; return
1063
1064GET_PRINTER_INFO_ROUTINE ENDP;AN000;
1065;********************************************************************************
1066; HANDLE_MODE - Subroutine to process the mode parameter line in the printer
1067; profile.
1068;
1069; INPUT:
1070; SI - Points to the beginning of the line to process
1071;
1072; OUTPUT:
1073; S_MODE_PARM - Filled with the information from the line. The line will be
1074; in a format for use as the parameters for the MODE command.
1075;
1076;********************************************************************************
1077HANDLE_MODE PROC NEAR;AN000;
1078
1079;AD000;JW PUSH SI
1080;AD000;JW COPY_STRING S_MODE_PARM, 13, BLANK_MODE
1081;AD000;JW POP SI
1082;AD000;JW
1083;AD000;JW NEXT_MODE_SCAN: ; Scan for the next keyword.
1084;AD000;JW MOV DI, OFFSET MODE_PARMS ; Offset of the control blocks for parsing the mode parameters
1085;AD000;JW MOV CX, 0 ; Always tell the parser this is the first parse
1086;AD000;JW MOV DX, 0 ; The parse wants DX = 0
1087;AD000;JW PUSH ES ; Save the segment registers
1088;AD000;JW PUSH DS
1089;AD000;JW MOV AX, DATA ; Get the location of the data segment
1090;AD000;JW MOV ES, AX ; Load in the extra segment register - The segment of the control blocks
1091;AD000;JW MOV AX, SEG_LOC ; Get the location of the printer data
1092;AD000;JW MOV DS, AX ; Load into the data segment - The segment of the data to parse
1093;AD000;JW CALL SYSPARSE ; Parse the line.
1094;AD000;JW POP DS ; Restore the segment registers
1095;AD000;JW POP ES
1096;AD000;JW
1097;AD000;JW ; PUSHH <AX,BX,CX,DX,SI,DI>
1098;AD000;JW ; MOV W_VALUE, AX
1099;AD000;JW ; WORD_TO_CHAR W_VALUE, STRING_N
1100;AD000;JW ; PRINTN STRING_N
1101;AD000;JW ; CR_LF
1102;AD000;JW ; POPP <DI,SI,DX,CX,BX,AX>
1103;AD000;JW
1104;AD000;JW .IF < NONZERO AX > ; If errors or the end of the line, end the routine
1105;AD000;JW JMP EXIT_MODE_SCAN
1106;AD000;JW .ENDIF
1107;AD000;JW MOV BX, DX ; Move result pointer into an index register
1108;AD000;JW .IF <<WORD PTR [BX+2]> EQ <OFFSET SYN_BAUD>> ; Was this the BAUD keyword?
1109;AD000;JW MOV AX, 5 ; Maximum number of character to copy
1110;AD000;JW MOV DI, OFFSET S_MODE_PARM+2 ; Where to put the baud parameters
1111;AD000;JW .ELSEIF <<WORD PTR [BX+2]> EQ <OFFSET SYN_PARITY>> ; Was this the PARITY keyword?
1112;AD000;JW MOV AX, 1 ; Maximum number of character to copy
1113;AD000;JW MOV DI, OFFSET S_MODE_PARM+8 ; Where to put the parity parameters
1114;AD000;JW .ELSEIF <<WORD PTR [BX+2]> EQ <OFFSET SYN_DATA>> ; Was this the DATA keyword?
1115;AD000;JW MOV AX, 1 ; Maximum number of character to copy
1116;AD000;JW MOV DI, OFFSET S_MODE_PARM+10 ; Where to put the data parameters
1117;AD000;JW .ELSEIF <<WORD PTR [BX+2]> EQ <OFFSET SYN_STOP>> ; Was this the STOP keyword?
1118;AD000;JW MOV AX, 1 ; Maximum number of character to copy
1119;AD000;JW MOV DI, OFFSET S_MODE_PARM+12 ; Where to put the stop parameters
1120;AD000;JW .ELSEIF <<WORD PTR [BX+2]> EQ <OFFSET SYN_RETRY>> ; Was this the RETRY keyword?
1121;AD000;JW MOV AX, 1 ; Maximum number of character to copy
1122;AD000;JW MOV DI, OFFSET S_MODE_PARM+14 ; Where to put the retry parameters
1123;AD000;JW .ENDIF
1124;AD000;JW CALL COPY_RESULT ; Copy the string
1125;AD000;JW JMP NEXT_MODE_SCAN ; Scan for the next keyword
1126;AD000;JW EXIT_MODE_SCAN:
1127;AD000;JW CALL REMOVE_BLANKS ; Remove the blanks from the mode line
1128;AD000;JW
1129
1130 MOV DI, OFFSET S_MODE_PARM ;AN000; Offset of the variable to load JW
1131 MOV CX, 40 ;AN000; Maximum width of the field JW
1132 CALL COPY_LINE ;AN000; Copy the information from the file data JW
1133 RET ;AN000; Return JW
1134
1135HANDLE_MODE ENDP;AN000;
1136;AD000;JW ;********************************************************************************
1137;AD000;JW ; REMOVE_BLANKS: Remove the blanks from the S_MODE_PARM string. Any trailing
1138;AD000;JW ; commas are also removed.
1139;AD000;JW ;
1140;AD000;JW ; INPUT:
1141;AD000;JW ; None.
1142;AD000;JW ;
1143;AD000;JW ; OUTPUT:
1144;AD000;JW ; None.
1145;AD000;JW ;
1146;AD000;JW ; OPERATION:
1147;AD000;JW ;
1148;AD000;JW ;
1149;AD000;JW ;********************************************************************************
1150;AD000;JW REMOVE_BLANKS PROC NEAR
1151;AD000;JW
1152;AD000;JW MOV CX, WORD PTR S_MODE_PARM
1153;AD000;JW LEA SI, S_MODE_PARM
1154;AD000;JW INC SI
1155;AD000;JW ADD SI, CX
1156;AD000;JW MOV BX, CX
1157;AD000;JW .WHILE < CX AE 0 >
1158;AD000;JW .IF < <BYTE PTR [SI]> EQ <' '> > OR
1159;AD000;JW .IF < <BYTE PTR [SI]> EQ <','> >
1160;AD000;JW DEC BX
1161;AD000;JW .ELSE
1162;AD000;JW .LEAVE
1163;AD000;JW .ENDIF
1164;AD000;JW DEC SI
1165;AD000;JW DEC CX
1166;AD000;JW .ENDWHILE
1167;AD000;JW MOV WORD PTR S_MODE_PARM, BX
1168;AD000;JW
1169;AD000;JW MOV CX, BX
1170;AD000;JW LEA SI, S_MODE_PARM
1171;AD000;JW ADD SI, 2
1172;AD000;JW MOV DI, SI
1173;AD000;JW .WHILE < CX A 0 >
1174;AD000;JW .IF < <BYTE PTR [SI]> NE <' '>>
1175;AD000;JW .IF < SI NE DI >
1176;AD000;JW MOV AL, [SI]
1177;AD000;JW MOV [DI], AL
1178;AD000;JW .ENDIF
1179;AD000;JW INC DI
1180;AD000;JW .ELSE
1181;AD000;JW DEC BX
1182;AD000;JW .ENDIF
1183;AD000;JW INC SI
1184;AD000;JW DEC CX
1185;AD000;JW .ENDWHILE
1186;AD000;JW MOV WORD PTR S_MODE_PARM, BX
1187;AD000;JW RET
1188;AD000;JW
1189;AD000;JW REMOVE_BLANKS ENDP
1190;********************************************************************************
1191; HANDLE_CODE_DRIVER - Subroutine to process the code page driver parameter
1192; line in the printer profile.
1193;
1194; INPUT:
1195; SI - Points to the beginning of the line to process
1196;
1197; OUTPUT:
1198; S_CP_DRIVER - Filled with the information from the line.
1199;
1200; OPERATION: The line from the file is copied to the S_CP_DRIVER variable.
1201; This variable is assumed to be a maximum of 22 characters wide.
1202;
1203;********************************************************************************
1204HANDLE_CODE_DRIVER PROC NEAR;AN000;
1205
1206 MOV DI, OFFSET S_CP_DRIVER ;AN000; Offset of the variable to load
1207 MOV CX, 22 ;AN000; Maximum width of the field
1208 CALL COPY_LINE ;AN000; Copy the information from the file data
1209 RET ;AN000;
1210
1211HANDLE_CODE_DRIVER ENDP;AN000;
1212
1213;********************************************************************************
1214; HANDLE_CODE_PREPARE - Subroutine to process the code prepare parameter line
1215; in the printer profile.
1216;
1217; INPUT:
1218; SI - Points to the beginning of the line to process
1219;
1220; OUTPUT:
1221; S_CP_PREPARE - Filled with the information from the line.
1222;
1223; OPERATION: The line from the file is copied to the variable S_CP_PREPARE.
1224; The variable is assumed to be a maximum of 12 characters long.
1225;
1226;********************************************************************************
1227HANDLE_CODE_PREPARE PROC NEAR;AN000;
1228
1229 MOV DI, OFFSET S_CP_PREPARE ;AN000; Offset of the variable to load
1230 MOV CX, 12 ;AN000; Maximum length of the variable
1231 CALL COPY_LINE ;AN000; Copy the information from the file data
1232 RET ;AN000;
1233
1234HANDLE_CODE_PREPARE ENDP;AN000;
1235
1236;********************************************************************************
1237; HANDLE_GRAPHICS - Subroutine to process the graphics parameter line in the
1238; printer profile.
1239;
1240; INPUT:
1241; SI - Points to the beginning of the line to process
1242;
1243; OUTPUT:
1244; S_GRAPH_PARM - Filled with the information from the line.
1245;
1246; OPERATION: The line from the file is copied to the S_GRAPH_PARM variable.
1247; The variable is assumed to be a maximum of 20 characters long.
1248;
1249;********************************************************************************
1250HANDLE_GRAPHICS PROC NEAR;AN000;
1251
1252 MOV DI, OFFSET S_GRAPH_PARM ;AN000; Offset of the variable to load
1253 MOV CX, 20 ;AN000; Maximum width of the variable
1254 CALL COPY_LINE ;AN000; Load the variable with the data from the file
1255 RET ;AN000;
1256
1257HANDLE_GRAPHICS ENDP;AN000;
1258
1259;********************************************************************************
1260; COPY_RESULT: Copy the string pointed to in the result block to the specified
1261; destination.
1262;
1263; INPUT:
1264; AX - The maximum length of the string to copy.
1265; DX - The offset in DS of the result block.
1266; DI - The offset of where the string is to be stored
1267;
1268;
1269; OUTPUT:
1270; CX - The length of the string copied.
1271;
1272; Operation: The string is copied from the result block to the area pointed to
1273; by DS:DI. The string is copied until a null character is encountered.
1274;
1275;********************************************************************************
1276COPY_RESULT PROC NEAR;AN000;
1277
1278 PUSH ES ;AN000;
1279 PUSH SI ;AN000;
1280 MOV BX, DX ;AN000; Put address into an index register
1281 LES SI, [BX+4] ;AN000; Get the address of the string to copy
1282 MOV CX, 0 ;AN000; Zero the string length indicator
1283 .WHILE < CX B AX > ;AN000; Copy up to the number of character in AX
1284 MOV DL, BYTE PTR ES:[SI] ;AN000; Get the first byte
1285 .LEAVE < ZERO DL > ;AN000; Terminate loop if this is a null char
1286 MOV BYTE PTR [DI], DL ;AN000; Save character in the destination string
1287 INC SI ;AN000; Increment source pointer
1288 INC DI ;AN000; Increment destination pointer
1289 INC CX ;AN000; Increment number of characters moved
1290 .ENDWHILE ;AN000;
1291 POP SI ;AN000;
1292 POP ES ;AN000;
1293 RET ;AN000;
1294
1295COPY_RESULT ENDP;AN000;
1296
1297;********************************************************************************
1298; COPY_LINE - Copy a line from the printer profile data to a specified area.
1299;
1300; INPUT:
1301; DI - Points to the location the data is to be copied to.
1302; CX - Contains the maximum number of bytes copied.
1303;
1304; OUTPUT:
1305; None.
1306;
1307; OPERATION: The current line being parsed is copied to the specified area.
1308; The length of the line is calculated with the use of the variable
1309; CUR_END_LINE. If the lenght of the line is longer then the number passed
1310; in CX, then only a portion of the line will be copied.
1311;
1312;********************************************************************************
1313COPY_LINE PROC NEAR;AN000;
1314
1315
1316 PUSH SI ;AN000; Save the index regiter used by the parser
1317 PUSH DI ;AN000; Save the pointer to the variable to load
1318 ADD DI, 2 ;AN000; Push pointer passed the lenght word
1319 MOV AX, END_CUR_LINE ;AN000; Get the pointer to the end of this line
1320 SUB AX, SI ;AN000; Get the distance to the end
1321 INC AX ;AN000; Add to get the length of the line
1322 .IF < AX B CX > ;AN000; If length is greater then the maximum allowed,
1323 MOV CX, AX ;AN000; use the shorter length
1324 .ENDIF ;AN000;
1325 PUSH CX ;AN000; Save the length used.
1326 PUSH ES ;AN000; Swap the values in the segment registers
1327 PUSH DS ;AN000;
1328 POP ES ;AN000;
1329 POP DS ;AN000;
1330 CLD ;AN000; Move in the forward direction
1331 REP MOVSB ;AN000; Move the data
1332 POP CX ;AN000; Restore the line length
1333 POP DI ;AN000; Restore the pointer to the variable
1334 MOV WORD PTR ES:[DI], CX ;AN000; Save the length of the string
1335 POP SI ;AN000; Restore the parser pointer
1336 PUSH DS ;AN000; Swap the segment registers again
1337 PUSH ES ;AN000;
1338 POP DS ;AN000;
1339 POP ES ;AN000;
1340 RET ;AN000;
1341
1342COPY_LINE ENDP;AN000;
1343
1344;********************************************************************************
1345; Routine to deallocate the memory used for the storage of the printer profile
1346; data and the table of printer names. These routines also close the profile
1347; file.
1348;********************************************************************************
1349
1350;********************************************************************************
1351; RELEASE_PRINTER_INFO_ROUTINE - Close the printer profile file and free the
1352; allocated memory.
1353;
1354; INPUT:
1355; None.
1356;
1357; OUTPUT:
1358; If CY = 0, There were no error encountered.
1359; If CY = 1, There was an error.
1360; AX = The DOS error code for the deallocate memory function
1361;
1362; OPERATION: Closes the printer file and deallocated the memory.
1363;
1364;********************************************************************************
1365RELEASE_PRINTER_INFO_ROUTINE PROC FAR;AN000;
1366
1367
1368
1369
1370 CALL HOOK_INT_24 ;AN000;
1371
1372
1373 PUSH ES ;AN000;
1374 ;**********************************************************************
1375 ; Close the printer definition file
1376 ;**********************************************************************
1377 MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet
1378 MOV BX, FILE_HANDLE ;AN000; File handle of the profile file
1379 MOV AH, 3EH ;AN000; DOS Fn. for closing a file
1380 DOSCALL ;AN000; Close the file
1381 ;**********************************************************************
1382 ; Deallocate the memory used for the data buffer
1383 ;**********************************************************************
1384 MOV AX, SEG_LOC ;AN000; Location of the data buffer
1385 MOV ES, AX ;AN000;
1386 MOV AH, 49H ;AN000; DOS Fn. for freeing allocated memory
1387 DOSCALL ;AN000; Free the memory
1388 POP ES ;AN000;
1389 CALL RESTORE_INT_24;AN000;
1390 RET ;AN000;
1391
1392RELEASE_PRINTER_INFO_ROUTINE ENDP;AN000;
1393
1394;*******************************************************************************
1395; Routines for changing the SELECT command line in the AUTOEXEC.BAT.
1396;*******************************************************************************
1397
1398;********************************************************************************
1399; CHANGE_AUTOEXEC_ROUTINE: Search a file for a line beginning with SELECT, and
1400; change its parameters.
1401;
1402; INPUT:
1403; DI - The offset of an ASCII-N string containing the file to search.
1404; SI - The offset of an ASCII-N string containing the data to append as
1405; parameters.
1406;
1407; OUTPUT:
1408; None.
1409;
1410; Operation:
1411;
1412;********************************************************************************
1413CHANGE_AUTOEXEC_ROUTINE PROC FAR;AN000;
1414
1415
1416
1417 TEST SEL_FLG,INSTALLRW ;AN000; Is the install
1418 ;AN000; diskette read/write
1419 ;AN000; (has DISKCOPY occurred?)
1420 JNZ AUTO_OK ;AN000;
1421 CLC ;AN000; no error
1422 JMP AUTO_EXIT_RO ;AN000; If not, exit
1423
1424AUTO_OK: ;AN000;
1425 CALL HOOK_INT_24 ;AN000;
1426 PUSH ES ;AN000;
1427 MOV APPEND_POINTER, SI ;AN000; Save the address of the string to be appended
1428 MOV FILENAME, DI ;AN000; Save the address of the string containing the filename
1429 ;**********************************************************************
1430 ; Allocate the memory needed for reading the autoexec file. A maximum
1431 ; of 64K is allocated for use.
1432 ;**********************************************************************
1433 CALL ALLOCATE_MEMORY ;AN000; Allocate the memory needed
1434 .IF < C > ;AN000; Was there an error?
1435 JMP AUTO_EXIT_ERROR ;AN000; Yes! Exit the subroutine
1436 .ENDIF ;AN000;
1437 MOV BUFFER_START, 0 ;AN000; Save the offset of the start of the buffer
1438 COPY_WORD BUFFER_SIZE, SEGMENT_SIZE ;AN000; Save the size of the buffer
1439 ;**********************************************************************
1440 ; Open the input file
1441 ;**********************************************************************
1442 MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet
1443 ; DI contains the address of the filename
1444 CALL POS_ZERO ;AN000; Make the string into an ASCII-Z string
1445 MOV DX, DI ;AN000; Load string offset
1446 ADD DX, 2 ;AN000; Adjust for length word
1447 MOV AX, 3D02H ;AN000; DOS Fn. for opening a file for reading and writing
1448 DOSCALL ;AN000; Open the file
1449 .IF < C > ;AN000; Was there an error?
1450 JMP AUTO_EXIT_ERROR ;AN000; Exit the subroutine
1451 .ENDIF ;AN000;
1452 MOV FILE_HANDLE, AX ;AN000; Save the file handle
1453 ;**********************************************************************
1454 ; Set the file pointer
1455 ;**********************************************************************
1456 MOV WORD PTR FILE_PTR_AT_START[0], 0 ;AN000; Set the file pointer of the data in the buffer
1457 MOV WORD PTR FILE_PTR_AT_START[2], 0 ;AN000; Set the high word
1458 MOV CURRENT_PARSE_LOC, 0 ;AN000; Set the current parsing location
1459 AND READ_FLAG, RESET_EOF ;AN000; Indicate that the end of file has not been reached
1460 ;**********************************************************************
1461 ; Read data into the buffer
1462 ;**********************************************************************
1463 MOV DI, CURRENT_PARSE_LOC ;AN000; Get the current parsing location
1464 CALL READ_FROM_HERE ;AN000; Read data starting from this position
1465 .IF < C > ;AN000; Was there an error?
1466 JMP AUTO_EXIT_ERROR ;AN000; Yes! Exit the subroutine
1467 .ENDIF ;AN000;
1468 ;**********************************************************************
1469 ; Setup the control blocks for the parser
1470 ;**********************************************************************
1471 MOV PAR_EXTEN, OFFSET SELECT_PARMX ;AN000; Address of the parameters extension block
1472 ;**********************************************************************
1473 ; Parse the file for 'SELECT'
1474 ;**********************************************************************
1475PARSE_FOR_SELECT: ;AN000; Here to parse the line
1476 CALL SEARCH_LINE ;AN000; Parse the line.
1477 .IF < C > ;AN000; Was there an error?
1478 JMP AUTO_EXIT_ERROR ;AN000; Yes! Exit the subroutine
1479 .ENDIF ;AN000;
1480 .IF < AX EQ 0 > ;AN000; Did the parser file 'SELECT'?
1481 MOV CURRENT_PARSE_LOC, SI ;AN000; Yes! Save the position after select as parse location
1482 MOV DX, WORD PTR FILE_PTR_AT_START[0];AN000;
1483 MOV CX, WORD PTR FILE_PTR_AT_START[2];AN000;
1484 ADD DX, CURRENT_PARSE_LOC ;AN000;
1485 ADC CX, 0 ;AN000;
1486 MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet
1487 MOV BX, FILE_HANDLE ;AN000;
1488 MOV AX, 4200H ;AN000;
1489 DOSCALL ;AN000;
1490 .IF < C > ;AN000; Was there an error writing the data?
1491 JMP AUTO_EXIT_ERROR ;AN000; Yes! Exit the subroutine
1492 .ENDIF ;AN000;
1493 ;*****************************************************************
1494 ; Write the select parameters to the file
1495 ;*****************************************************************
1496 MOV SI, APPEND_POINTER ;AN000; Address of the string to add to the select line
1497 MOV CX, [SI] ;AN000; Size of the string
1498 MOV DX, SI ;AN000; Get the address again
1499 ADD DX, 2 ;AN000; Adjust pointer past length word
1500 MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet
1501 MOV BX, FILE_HANDLE ;AN000; Get the handle for this file
1502 MOV AH, 40H ;AN000; DOS Fn. number for writing data
1503 DOSCALL ;AN000; Write the data
1504 ;*****************************************************************
1505 ; Write a carrage return and a line feed to the file
1506 ;*****************************************************************
1507 MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet
1508 MOV DX, OFFSET W_CR_LF ;AN000; Address of string to write
1509 MOV CX, E_SIZE_CR_LF ;AN000; Size of the string
1510 MOV BX, FILE_HANDLE ;AN000; Get the file handle
1511 MOV AH, 40H ;AN000; DOS Fn. for writing data
1512 DOSCALL ;AN000; Write the data
1513 ;*****************************************************************
1514 ; Truncate the file at the current file position
1515 ;*****************************************************************
1516 MOV INT_24_ERROR, 0 ;AN000; Indicate that no critical errors have occured yet
1517 MOV CX, 0 ;AN000;
1518 MOV BX, FILE_HANDLE ;AN000;
1519 MOV AH, 40H ;AN000;
1520 DOSCALL ;AN000;
1521 ;*****************************************************************
1522 ; Close the file.
1523 ;*****************************************************************
1524 CALL RELEASE_PRINTER_INFO_ROUTINE ;AN000; Close the original autoexec file
1525 .ELSE ;AN000;
1526 ;*****************************************************************
1527 ; Parse the next line.
1528 ;*****************************************************************
1529 MOV DI, START_NEXT_LINE ;AN000; Get the address of the next line
1530 MOV CURRENT_PARSE_LOC, DI ;AN000; Save this as the current parse location
1531 .IF < CURRENT_PARSE_LOC EQ 0 > ;AN000; If this is zero, then there is no more data
1532 JMP AUTO_EXIT_CLEAR ;AN000; Exit the subroutine - No errors
1533 .ENDIF ;AN000;
1534 JMP PARSE_FOR_SELECT ;AN000; Parse the next line
1535 .ENDIF ;AN000;
1536 JMP AUTO_EXIT_CLEAR ;AN000; Exit the subroutine - No errors
1537
1538AUTO_EXIT_ERROR: ;AN000; Here if there was an error
1539 CALL RELEASE_PRINTER_INFO_ROUTINE ;AN000; Close the original file
1540 STC ;AN000; Indicate that there was an error
1541 JMP AUTO_EXIT ;AN000; Exit the subroutine
1542
1543AUTO_EXIT_CLEAR: ;AN000; Exit here if NO errors.
1544 CLC ;AN000; Indicate there were no errors
1545AUTO_EXIT: ;AN000; Here to exit
1546 CALL DEALLOCATE_MEMORY
1547 POP ES ;AN000; Restore the extra segment
1548 CALL RESTORE_INT_24;AN000;
1549AUTO_EXIT_RO: ;AN000;
1550 RET ;AN000;
1551
1552CHANGE_AUTOEXEC_ROUTINE ENDP;AN000;
1553
1554CODE_FAR ENDS;AN000;
1555
1556END ;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 @@
1;***************************************************************************
2; Subroutines which are called by the macros in MACROS.INC.
3; File: ROUTINE2.ASM
4; Latest Change Date: August 04, 1987
5;
6; This is a stand alone module and is meant to be linked with the calling
7; program.
8;
9;***************************************************************************
10.ALPHA ;AN000;
11;**********************************************************************
12DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
13
14PATH_STRING DW 0 ;AN000;
15STRING_SIZE DW 0 ;AN000;
16PATH_PTR DW 0 ;AN000;
17PATH_SIZE DW 0 ;AN000;
18MAX_CHAR DW 0 ;AN000;
19CHAR_COUNT DW 0 ;AN000;
20
21
22SEARCH_FLAG DB 0 ;AN000;
23
24 PERIOD EQU 00000001B ;AN000;
25 SLASH_FOUND EQU 00000010B ;AN000;
26
27
28 RESET_PERIOD EQU 11111110B ;AN000;
29 RESET_SLASH_FOUND EQU 11111101B ;AN000;
30
31INVALID_STRING DB '"/\[]:|<>+=;, ' ;AN000;
32 END_INVALID_STRING EQU $ ;AN000;
33SIZE_INVALID_STR EQU END_INVALID_STRING - INVALID_STRING ;AN000;
34
35ZEROED_CHAR DB 0 ;AN000;
36 DB 0 ;AN000;
37
38SEP_POSITION DW 0 ;AN000;
39NUM_PATHS DW 0 ;AN000;
40
41
42ERR_INVALID_DRV EQU 1 ;AN000;
43ERR_NO_DRIVE EQU 2 ;AN000;
44ERR_DRIVE EQU 3 ;AN000;
45ERR_LEADING_SLASH EQU 4 ;AN000;
46ERR_NO_SLASH EQU 5 ;AN000;
47ERR_LAST_SLASH EQU 6 ;AN000;
48ERR_INVALID_CHAR EQU 7 ;AN000;
49
50OLD_ATTRIB DW 0 ;AN000;
51NEW_ATTRIB DW 0 ;AN000;
52WAY DW 0 ;AN000;
53
54
55
56PUBLIC CHK_W_PROTECT_FLAG ;AN000;
57PUBLIC W_PROTECT_FLAG ;AN000;
58
59W_P_FILENAME_A DB 'A:\',12 DUP(0), 0 ;AC000;JW
60W_P_FILENAME_B DB 'B:\',12 DUP(0), 0 ;AN000;JW
61CHK_W_PROTECT_FLAG DB 0 ;AN000;
62W_PROTECT_FLAG DB 0 ;AN000;
63DRIVE_FLAG DB ? ;AN000;JW
64
65
66NUM_FILES DW 0 ;AN000;
67LIST_TYPE DW 0 ;AN000;
68STR_PTR DW 0 ;AN000;
69FILE_PTR DW 0 ;AN000;
70
71
72
73DATA ENDS ;AN000; DATA
74;**********************************************************************
75 ;
76 .XLIST ;AN000;
77 INCLUDE STRUC.INC ;AN000;
78 INCLUDE MACROS.INC ;AN000;
79 INCLUDE VARSTRUC.INC ;AN000;
80 INCLUDE EXT.INC ;AN000;
81 INCLUDE MAC_EQU.INC ;AN000;
82 EXTRN EXIT_DOS:FAR ;AN000;
83 EXTRN POS_ZERO:FAR ;AN000;
84 EXTRN HOOK_INT_24:FAR ;AN000;
85 EXTRN RESTORE_INT_24:FAR ;AN000;
86 EXTRN GGET_STATUS:FAR ;AN000;
87 .LIST ;AN000;
88 ;
89 ;
90;**********************************************************************
91CODE_FAR SEGMENT PARA PUBLIC 'CODE' ;AN000; Segment for far routine
92 ASSUME CS:CODE_FAR,DS:DATA ;AN000;
93 ;
94;********************************************************************************
95; CHECK_DOS_PATH_ROUTINE: Check to see if the sepecified path for the DOS
96; SET PATH command is valid.
97;
98; INPUT:
99; SI = Points to an ASCII-N string containing the path to check. There sould
100; be an extra byte following the string to facilitate changing the string
101; into an ASCII-Z string.
102;
103; OUTPUT:
104; If CY = 0, the path is valid.
105; If CY = 1, The path is NOT valid:
106;
107;********************************************************************************
108PUBLIC CHECK_DOS_PATH_ROUTINE ;AN000;
109CHECK_DOS_PATH_ROUTINE PROC FAR ;AN000;
110 ;
111 MOV PATH_PTR, SI ;AN000; Get the pointer from the path
112 MOV AX, [SI] ;AN000; Get the lenth of the path string
113 .IF < AX EQ 0 > ;AN000; If the length is zero then return that
114 JMP NO_ERROR_DOS_PATH ;AN000; the path is valid.
115 .ENDIF ;AN000;
116 MOV PATH_SIZE, AX ;AN000; Save the size of the string
117 ADD SI, 2 ;AN000; Adjust path pointer for length word
118 ;
119 .REPEAT ;AN000; Check all the path names in the string
120 MOV AL, ';' ;AN000; separator between filenames
121 MOV CX, PATH_PTR ;AN000; Get the pointer to the path
122 ADD CX, 2 ;AN000; Point to the start of the string
123 ADD CX, PATH_SIZE ;AN000; Add the size of the path
124 SUB CX, SI ;AN000; Subtract current pointer - Get length of string remaining
125 CALL ISOLATE_NEXT_PATH ;AN000; Make the next path name into an ASCII-Z string
126 PUSH SEP_POSITION ;AN000; Save the position of the path seperator
127 PUSH WORD PTR ZEROED_CHAR ;AN000; Save the character that was made into a zero
128 MOV CX, SEP_POSITION ;AN000;
129 SUB CX, SI ;AN000; Get the length of the string
130 MOV AX, 0101H ;AN000;
131 CALL FAR PTR CHECK_VALID_PATH ;AN000; Check if it is a valid filename
132 POP WORD PTR ZEROED_CHAR ;AN000;
133 POP SEP_POSITION ;AN000;
134 CALL RESTORE_SEPARATOR ;AN000; Restore the character between the path names
135 .IF < C > ;AN000; Was the file name not valid?
136 JMP ERROR_DOS_PATH ;AN000; Exit the subroutine
137 .ENDIF ;AN000;
138 MOV SI, DI ;AN000; Get the pointer to the next path name
139 .UNTIL < ZERO SI > ;AN000; If zero, all path names have been examined.
140NO_ERROR_DOS_PATH: ;AN000;
141 CLC ;AN000;
142 JMP EXIT_DOS_PATH ;AN000;
143ERROR_DOS_PATH: ;AN000;
144 STC ;AN000;
145EXIT_DOS_PATH: ;AN000;
146 RET ;AN000;
147 ;
148CHECK_DOS_PATH_ROUTINE ENDP ;AN000;
149 ;
150 ;
151PUBLIC CHECK_VALID_PATH ;AN000;
152;********************************************************************************
153; CHECK_VALID_PATH: Check to see if the sepecified path is valid.
154;
155; INPUT:
156; SI = Points to an ASCII-Z string containing the path to check. There sould
157; be an extra byte following the string to facilitate changing the string
158; into an ASCII-Z string.
159;
160; CX = The size of the string containing the path. The zero byte at the end
161; of the string is NOT included in the length.
162;
163; AL = 0: Drive letter cannot be specified.
164; = 1: Drive letter is optional and can be specified.
165; = 2: Drive letter must be specified.
166;
167; AH = 0: First non-drive character cannot be a backslash ('\')
168; = 1: First non-drive character may be a backslash ('\')
169; = 2: First non-drive character must be a backslash ('\')
170;
171; OUTPUT:
172; If CY = 0, the path is valid.
173; If CY = 1, The path is NOT valid:
174; AX = 1, The drive specified is invalid.
175; = 2, There was no drive specified.
176; = 3, There was a drive specified.
177; = 4, There was a leading backslash
178; = 5, The leading backslash was NOT present.
179; = 6, There was a trailing backslash.
180;
181;********************************************************************************
182CHECK_VALID_PATH PROC FAR ;AN000;
183 ;
184 PUSH DI ;AN000;
185 MOV STRING_SIZE, CX ;AN000; Save the size of the string
186 MOV PATH_STRING, SI ;AN000; Save the pointer to the string
187 CALL CHECK_VALID_DRIVE ;AN000; See if there is a valid drive
188 .IF < C > ;AN000; Is the drive specified invalid?
189 MOV AX, ERR_INVALID_DRV ;AN000; Return this error code
190 JMP EXIT_CHK_DRV ;AN000; Exit the subroutine
191 .ENDIF ;AN000;
192 .IF < BX EQ 0 > ;AN000; No drive sepecified?
193 .IF < AL EQ 2 > ;AN000; Must the drive be specified?
194 MOV AX, ERR_NO_DRIVE ;AN000; Return this error code
195 JMP EXIT_CHK_DRV ;AN000; Exit the subroutine
196 .ENDIF ;AN000;
197 .ELSE ;AN000; Otherwise, the drive WAS specified.
198 .IF < AL EQ 0 > ;AN000; The drive cannot be specified
199 MOV AX, ERR_DRIVE ;AN000; Return this error code
200 JMP EXIT_CHK_DRV ;AN000; Exit the subroutine
201 .ENDIF ;AN000;
202 ADD SI, 2 ;AN000; Push pointer past the drive
203 .ENDIF ;AN000;
204 .IF < <BYTE PTR [SI]> EQ '\' > ;AN000; Is the next byte a backslash?
205 .IF < AH EQ 0 > ;AN000; Is one permitted?
206 MOV AX, ERR_LEADING_SLASH ;AN000; No! Return this error code
207 JMP EXIT_CHK_DRV ;AN000; Exit the subroutine
208 .ELSE ;AN000; Otherwise, one allowed.
209 INC SI ;AN000; Push pointer past \
210 .ENDIF ;AN000;
211 .ELSE ;AN000; Otherwise, byte not a backslash
212 .IF < AH EQ 2 > ;AN000; Was one required?
213 MOV AX, ERR_NO_SLASH ;AN000; If so, return this error code
214 JMP EXIT_CHK_DRV ;AN000; Exit from this subroutine
215 .ENDIF ;AN000;
216 .ENDIF ;AN000;
217 ;
218 MOV NUM_PATHS, 0 ;AN000;
219 .REPEAT ;AN000; Check all the path names in the string
220 MOV AL, '\' ;AN000; Separator between filenames
221 MOV CX, PATH_STRING ;AN000;
222 ADD CX, STRING_SIZE ;AN000;
223 SUB CX, SI ;AN000;
224 .IF < NUM_PATHS EQ 0 > AND ;AN000; If this is the first path checked...and
225 .IF < CX EQ 0 > ;AN000; If the length of the path is zero...
226 JMP EXIT_NO_ERROR ;AN000; Exit with no error
227 .ENDIF ;AN000;
228 CALL ISOLATE_NEXT_PATH ;AN000; Make the next path name into an ASCII-Z string
229 CALL CHECK_VALID_FILENAME ;AN000; Check if it is a valid filename
230 CALL RESTORE_SEPARATOR ;AN000; Restore the character between the path names
231 .IF < C > ;AN000; Was the file name not valid?
232 .IF < NUM_PATHS EQ 0 > ;AN000;
233 .LEAVE ;AN000;
234 .ELSE ;AN000;
235 MOV AX, ERR_INVALID_CHAR ;AN000; If not, return this error code
236 JMP EXIT_CHK_DRV ;AN000; Exit the subroutine
237 .ENDIF ;AN000;
238 .ENDIF ;AN000;
239 MOV SI, DI ;AN000; Get the pointer to the next path name
240 .UNTIL < ZERO SI > ;AN000; If zero, all path names have been examined.
241 ;
242 MOV SI, PATH_STRING ;AN000; Get the pointer to the whole string
243 ADD SI, STRING_SIZE ;AN000; Add the string length
244 DEC SI ;AN000; Point to the last character in the string
245 .IF < <BYTE PTR [SI]> EQ '\'> ;AN000; Is the last character a \ ?
246 MOV AX, ERR_LAST_SLASH ;AN000; If so, return this error code
247 JMP EXIT_CHK_DRV ;AN000; Exit from the subroutine
248 .ENDIF ;AN000;
249EXIT_NO_ERROR: ;AN000;
250 CLC ;AN000; Indicate there were no errors
251 JMP EXIT_CHECK_PATH ;AN000;
252 ;
253EXIT_CHK_DRV: ;AN000;
254 STC ;AN000; Indicate that there were errors
255EXIT_CHECK_PATH: ;AN000;
256 POP DI ;AN000;
257 RET ;AN000;
258 ;
259 ;
260CHECK_VALID_PATH ENDP ;AN000;
261;********************************************************************************
262; CHECK_VALID_DRIVE: Check to see if there is a drive specified on the path and
263; if there is, is it valid.
264;
265; INPUT:
266; SI - Points to a string containing the path to search.
267;
268; OUTPUT:
269; If CY = 1, the drive is specified and is invalid
270; If CY = 0, The drive might be specified and is valid
271; BX = 0: The drive is NOT specified.
272; = 1: The drive IS specified.
273;
274;
275;********************************************************************************
276CHECK_VALID_DRIVE PROC NEAR ;AN000;
277 ;
278 PUSH AX ;AN000; Push all registers used
279 .IF < <BYTE PTR [SI+1]> EQ ':' > ;AN000; Is the second character in the string a ':'
280 MOV AL, [SI] ;AN000; If so, get the first character
281 .IF < AL AE 'A' > AND ;AN000; Is it a capital letter?
282 .IF < AL BE 'Z' > ;AN000;
283 CLC ;AN000; If so, drive valid.
284 MOV BX, 1 ;AN000; Indicate the drive exists
285 .ELSEIF < AL AE 'a' > AND ;AN000; Else, is the drive a lowercase letter?
286 .IF < AL BE 'z' > ;AN000;
287 CLC ;AN000; If so, the drive is valid
288 MOV BX, 1 ;AN000; Indicate that the drive exists
289 .ELSE ;AN000; Otherwise...
290 STC ;AN000; The drive is not valid
291 .ENDIF ;AN000;
292 .ELSE ;AN000;
293 CLC ;AN000; Indicate there were no errors
294 MOV BX, 0 ;AN000; The drive does not exist
295 .ENDIF ;AN000;
296 POP AX ;AN000;
297 ;
298 RET ;AN000;
299 ;
300CHECK_VALID_DRIVE ENDP ;AN000;
301;********************************************************************************
302; CHECK_VALID_FILENAME: Check to see if a filename is valid.
303;
304; INPUT:
305; SI - Points to an ASCII-Z string containing the filename to examine.
306;
307; OUTPUT:
308; If CY = 1, The filename is NOT valid.
309; If CY = 0, the filename IS valid.
310;
311;
312;********************************************************************************
313CHECK_VALID_FILENAME PROC NEAR ;AN000;
314 ;
315 INC NUM_PATHS ;AN000;
316 AND SEARCH_FLAG, RESET_PERIOD ;AN000; Indicate no periods have been found yet
317 MOV MAX_CHAR, 8 ;AN000; Up to 8 characters can be specified
318 MOV CHAR_COUNT, 0 ;AN000; Number of character so far
319 MOV AL, [SI] ;AN000; Get the first character in the string
320 .WHILE < AL NE 0 > ;AN000; Repeat untill we reach the string's end
321 INC CHAR_COUNT ;AN000; Increment number of characters in path
322 MOV BX, CHAR_COUNT ;AN000;
323 .IF < BX A MAX_CHAR > AND ;AN000;
324 .IF < AL NE '.' > ;AN000;
325 JMP INVALID_CHAR ;AN000;
326 .ENDIF ;AN000;
327 .IF < AL B 20 > ;AN000; Is the character's code less than 20?
328 JMP INVALID_CHAR ;AN000; If so, it's invalid
329 .ELSE ;AN000; Otherwise...
330 CALL VALID_CHAR ;AN000; See if it's invalid
331 .IF < C > ;AN000; If so,
332 JMP INVALID_CHAR ;AN000; Exit the subroutine
333 .ENDIF ;AN000;
334 .ENDIF ;AN000;
335 .IF < AL EQ '.' > ;AN000; Is the character a period?
336 .IF < BIT SEARCH_FLAG AND PERIOD > ;AN000; Is this the first one?
337 JMP INVALID_CHAR ;AN000; If not, filename is invalid.
338 .ELSE ;AN000; Otherwise...
339 OR SEARCH_FLAG, PERIOD ;AN000; Indicate that ONE has been found
340 .IF < CHAR_COUNT EQ 1 > ;AN000; Were there any characters before the period
341 JMP INVALID_CHAR ;AN000; If not, this is an invalid path
342 .ENDIF ;AN000;
343 MOV MAX_CHAR, 3 ;AN000; Allow three characters after the period
344 MOV CHAR_COUNT, 0 ;AN000; No characters yet
345 .ENDIF ;AN000;
346 .ENDIF ;AN000;
347 INC SI ;AN000; Point to next character
348 MOV AL, [SI] ;AN000; Get that character
349 .ENDWHILE ;AN000;
350 .IF < CHAR_COUNT EQ 0 > AND ;AN000;
351 .IF < MAX_CHAR EQ 8 > ;AN000;
352 DEC NUM_PATHS ;AN000;
353 JMP INVALID_CHAR ;AN000;
354 .ENDIF ;AN000;
355 CLC ;AN000; Indicate the name is valid
356 JMP CK_V_FILENAME ;AN000; Exit.
357 ;
358INVALID_CHAR: ;AN000; Indicate that the name is not valid
359 STC ;AN000;
360CK_V_FILENAME: ;AN000;
361 RET ;AN000;
362 ;
363CHECK_VALID_FILENAME ENDP ;AN000;
364;********************************************************************************
365; VALID_CHAR: Determine if a character is valid for a filename.
366;
367; INPUT:
368; AL = The character to check.
369;
370; OUTPUT:
371; If CY = 1, the character is not valid.
372; If CY = 0, the character IS valid.
373;
374;********************************************************************************
375VALID_CHAR PROC NEAR ;AN000;
376 ;
377 PUSH CX ;AN000; Save the registers used.
378 PUSH DI ;AN000;
379 PUSH ES ;AN000;
380 ;
381 MOV DI, OFFSET INVALID_STRING ;AN000; Get the address of string containing invalid characters
382 PUSH DS ;AN000; Save the data segment
383 POP ES ;AN000; Make ES=DS
384 MOV CX, SIZE_INVALID_STR ;AN000; Get the size of the string
385 CLD ;AN000; Scan forward
386 REPNZ SCASB ;AN000; See if this character is in the invalid string
387 .IF < Z > ;AN000; If so,
388 STC ;AN000; Indicate the character is invalid
389 .ELSE ;AN000; Otherwise...
390 CLC ;AN000; Indicate the character is valid
391 .ENDIF ;AN000;
392 POP CX ;AN000; Restore the registers
393 POP DI ;AN000;
394 POP ES ;AN000;
395 RET ;AN000;
396 ;
397VALID_CHAR ENDP ;AN000;
398;********************************************************************************
399; ISOLATE_NEXT_PATH: Search the filename for a '\'. If found, it is replaced
400; by a zero making the string into an ASCII-Z string.
401;
402; INPUT:
403; SI - Points to the first character in the path string
404; AL - Contains the character to search for
405; CX - Contains the length of the string
406;
407; OUTPUT:
408; DI - Points to the character following the next '\'
409; If this character is the last path element, DI = 0.
410;
411; ZEROED_CHAR is loaded with the character which is made into a zero.
412;
413;********************************************************************************
414ISOLATE_NEXT_PATH PROC NEAR ;AN000;
415 ;
416 PUSH AX ;AN000; Save registers used.
417 PUSH BX ;AN000;
418 PUSH CX ;AN000;
419 PUSH SI ;AN000;
420 ;
421 PUSH ES ;AN000; Make ES = DS
422 PUSH DS ;AN000;
423 POP ES ;AN000;
424 MOV DI, SI ;AN000; Copy the string pointer
425 ; CX holds the length of string after the pointer DI
426 ; AL holds the character to search for
427 CLD ;AN000; Search in the forward direction
428 REPNZ SCASB ;AN000; Search...
429 JNZ END_FOUND ;AN000; If NZ, we reached the string's end
430 MOV ZEROED_CHAR, AL ;AN000; Character overwritten with zero
431 MOV SEP_POSITION, DI ;AN000; Save the position of overwritten char
432 DEC SEP_POSITION ;AN000;
433 MOV BYTE PTR [DI-1], 0 ;AN000; Make the character a zero
434 CMP CX,0 ;AN031; SEH User may have entered semicolon as last char, so check
435 JE END_FOUND2 ;AN031; SEH if it is last char instead of just a separator
436 JMP EXIT_ISOLATE ;AN000; Exit the subroutine
437END_FOUND: ;AN000;
438 MOV AL, [DI] ;AN000; Get the last character
439 MOV ZEROED_CHAR, AL ;AN000; Save it.
440 MOV SEP_POSITION, DI ;AN000; Save its position
441 MOV BYTE PTR [DI], 0 ;AN000; Make into a zero
442END_FOUND2: ;AN031; SEH Handle case of semicolon as last character in path
443 MOV DI, 0 ;AN000; Indicate the string is finished
444EXIT_ISOLATE: ;AN000;
445 POP ES ;AN000; Restore the registers.
446 POP SI ;AN000;
447 POP CX ;AN000;
448 POP BX ;AN000;
449 POP AX ;AN000;
450 ;
451 RET ;AN000;
452 ;
453ISOLATE_NEXT_PATH ENDP ;AN000;
454;********************************************************************************
455; RESTORE_SEPARATOR: Restore the character which separates the characters in
456; a path.
457;
458; INPUT:
459; SEP_POSITION - Contain the address of the location to restore the separator.
460; ZEROED_CHAR - Contains the character to be restored.
461;
462; OUTPUT:
463; None.
464;
465;********************************************************************************
466RESTORE_SEPARATOR PROC NEAR ;AN000;
467 ;
468 PUSH AX ;AN000; Save registers used
469 PUSH SI ;AN000;
470 MOV SI, SEP_POSITION ;AN000; Get the position of the character
471 MOV AL, ZEROED_CHAR ;AN000; Get the character
472 MOV [SI], AL ;AN000; Save character in this position
473 POP SI ;AN000; Restore the registers
474 POP AX ;AN000;
475 RET ;AN000;
476 ;
477RESTORE_SEPARATOR ENDP ;AN000;
478;********************************************************************************
479; CHANGE_ATTRIBUTE_ROUTINE: Change the attributes on a group of files.
480;
481; INPUT:
482; SI = The address of a list of files to change the attributes of.
483; AX = 0: Attach a new attribute to the file.
484; AX = 1: Restore the original attribute to the files.
485; BX = The number of files in the list.
486;
487; OUTPUT:
488; If CY = 1, there were error encountered.
489; If CY = 0, there were no errors.
490;
491;********************************************************************************
492PUBLIC CHANGE_ATTRIBUTE_ROUTINE ;AN000;
493CHANGE_ATTRIBUTE_ROUTINE PROC FAR ;AN000;
494 ;
495 CALL HOOK_INT_24 ;AN000;
496 ;
497 MOV WAY, AX ;AN000; Save flag indicating whether we are setting or restoring the attrb.
498 MOV NEW_ATTRIB, 02h ;AN000; Set new attribute to hidden.
499 MOV DI, 0 ;AN000; Count of files processed
500 .WHILE < DI B BX > ;AN000;
501 .IF < WAY EQ 0 > ;AN000; Setting the attribute?
502 MOV WORD PTR [SI+12],0 ;AN000; Make filename into a ASCII-Z string
503 MOV DX, SI ;AN000; Load address of filename into DX
504 MOV AX, 4300H ;AN000; Get the file's current attribute
505 DOSCALL ;AN000;
506 .IF < C > ;AN000; Was there an error?
507 JMP CHMOD_ERROR ;AN000; If so, exit the subroutine
508 .ENDIF ;AN000;
509 MOV OLD_ATTRIB, CX ;AN000; Save the attribute
510 MOV CX, NEW_ATTRIB ;AN000; Get the new attribute
511 .ELSE ;AN000; Otherwise, we are restoring the attribute
512 MOV CX, [SI+12] ;AN000; Get the old attribute
513 MOV OLD_ATTRIB, CX ;AN000; Save.
514 MOV WORD PTR [SI+12], 0 ;AN000; Make filename into an ASCII-Z string
515 .ENDIF ;AN000;
516 MOV DX, SI ;AN000; Pointer to the filename
517 MOV AX, 4301H ;AN000; DOS function for setting the attribute
518 DOSCALL ;AN000; Set it.
519 .IF < C > ;AN000; Was there an error?
520 JMP CHMOD_ERROR ;AN000; If so, exit the subroutine
521 .ENDIF ;AN000;
522 MOV CX, OLD_ATTRIB ;AN000; Get the old attribute
523 MOV [SI+12], CX ;AN000; Save in the table
524 ADD SI, 14 ;AN000; Point to the next filename
525 INC DI ;AN000; Increment count of files processed
526 .ENDWHILE ;AN000;
527 CLC ;AN000; Indicate there were no errors
528 RET ;AN000;
529 ;
530CHMOD_ERROR: ;AN000;
531 STC ;AN000; Indicate there were errors
532 ;
533 CALL RESTORE_INT_24 ;AN000;
534 ;
535 RET ;AN000;
536 ;
537CHANGE_ATTRIBUTE_ROUTINE ENDP ;AN000;
538;****************************************************************************
539;
540; COMPARE_ROUTINE: Compare two strings.
541;
542; INPUT:
543; SI = The address of the first string. (ASCII-N string)
544; DI = The address of the second string. (ASCII-N string)
545;
546; OUTPUT:
547; If CY = 1, the strings do no compare.
548; If CY = 0, the strings are the same.
549;
550; OPERATION:
551;
552;****************************************************************************
553PUBLIC COMPARE_ROUTINE ;AN000;
554COMPARE_ROUTINE PROC FAR ;AN000;
555 ;
556 PUSH ES ;AN000; Make ES = DS
557 PUSH DS ;AN000;
558 POP ES ;AN000;
559 ;
560 MOV CX, [SI] ;AN000; Get the length of the first string
561 .IF < [DI] NE CX > ;AN000; Are the lengths of the strings the same?
562 JMP DO_NOT_COMPARE ;AN000; If not, the strings are not the same
563 .ENDIF ;AN000;
564 ADD SI, 2 ;AN000; Move points past the length words
565 ADD DI, 2 ;AN000;
566 CLD ;AN000; Compare in the forward direction
567 REPZ CMPSB ;AN000; Compare the strings
568 JNZ DO_NOT_COMPARE ;AN000; If the zero flag cleared, strings are not the same
569 CLC ;AN000; Indicate the strings do compare
570 JMP EXIT_COMPARE ;AN000;
571DO_NOT_COMPARE: ;AN000;
572 STC ;AN000; Indicate the strings do no compare
573EXIT_COMPARE: ;AN000;
574 POP ES ;AN000;
575 RET ;AN000;
576 ;
577COMPARE_ROUTINE ENDP ;AN000;
578;****************************************************************************
579;
580; REMOVE_END_BLANKS: Removes the trailing blanks from a string.
581;
582; INPUT:
583; ES:DI Points to the last character in the string.
584;
585; OUTPUT:
586; ES:DI Points to the new end of the string after the blanks have been
587; removed.
588;
589; OPERATION:
590;
591;****************************************************************************
592PUBLIC REMOVE_END_BLANKS ;AN000;
593REMOVE_END_BLANKS PROC FAR ;AN000;
594 ;
595 MOV CX, 0FFFFH ;AN000;
596 MOV AL, ' ' ;AN000;
597 STD ;AN000;
598 REPZ SCASB ;AN000;
599 .IF < NZ > ;AN000;
600 INC DI ;AN000;
601 .ENDIF ;AN000;
602 RET ;AN000;
603 ;
604REMOVE_END_BLANKS ENDP ;AN000;
605 ;
606;****************************************************************************
607;
608; CHECK_WRITE_ROUTINE Determine if the diskette in drive A is write
609; protected.
610;
611; INPUT:
612; CX = 0 - drive A ;AN000;JW
613; = 1 - drive B ;AN000;JW
614;
615; OUTPUT:
616; If CY = 1, The disk IS write protected.
617; If CY = 0, The disk is NOT write protected.
618;
619; OPERATION:
620;
621;****************************************************************************
622PUBLIC CHECK_WRITE_ROUTINE ;AN000;
623CHECK_WRITE_ROUTINE PROC FAR ;AN000;
624 ;
625 MOV DRIVE_FLAG,CL ;AN000;
626 ;
627 CALL HOOK_INT_24 ;AN000;
628 ;
629 MOV CHK_W_PROTECT_FLAG, TRUE ;AN000; Indicate to INT 24H handler we are looking for error
630 MOV W_PROTECT_FLAG, FALSE ;AN000; Error has not occured yet.
631 ;
632 MOV W_P_FILENAME_A+3, 0 ;AN000; Make drive string into ASCII-Z string
633 MOV W_P_FILENAME_B+3, 0 ;AN000; Make drive string into ASCII-Z string JW
634 .IF < DRIVE_FLAG eq DRIVE_A > ;AN000;JW
635 MOV DX, OFFSET W_P_FILENAME_A ;AN000; Get address of the string
636 .ELSE ;AN000;JW
637 MOV DX, OFFSET W_P_FILENAME_B ;AN000; Get address of the string JW
638 .ENDIF ;AN000;JW
639 MOV CX, 0 ;AN000; Attribute to give the file
640 MOV INT_24_ERROR, FALSE ;AN000;
641 MOV AH, 5AH ;AN000; DOS Fn. call to create a unique file
642 DOSCALL ;AN000; Create the file
643 .IF < C > ;AN000; Was there an error?
644 .IF < W_PROTECT_FLAG EQ TRUE > ;AN000; If the INT 24H handler was call...
645 JMP WRITE_PROTECTED ;AN000; The disk is write protected.
646 .ELSE ;AN000; Otherwise...
647 JMP CHECK_ERROR ;AN000; There was some other disk error
648 .ENDIF ;AN000;
649 .ELSE ;AN000;
650 .IF < W_PROTECT_FLAG EQ TRUE > ;AN000; If the INT 24H handler was call...
651 JMP WRITE_PROTECTED ;AN000; The disk is write protected.
652 .ENDIF ;AN000;
653 .ENDIF ;AN000; There were no errors...
654 CLOSE_FILE AX ;AN000; Close the created file
655 .IF < DRIVE_FLAG eq DRIVE_A > ;AN000;JW
656 MOV DX, OFFSET W_P_FILENAME_A ;AN000; Get address of the string
657 .ELSE ;AN000;JW
658 MOV DX, OFFSET W_P_FILENAME_B ;AN000; Get address of the string JW
659 .ENDIF ;AN000;JW
660 MOV AH, 41H ;AN000; DOS Fn. for erasing a file
661 DOSCALL ;AN000; Erase the file
662 MOV AX, 0 ;AN000; Indicate the file is NOT write protected
663 CLC ;AN000; Indicate there were no errors
664 JMP CHECK_EXIT ;AN000; Exit the routine
665
666WRITE_PROTECTED: ;AN000;
667 MOV AX, 1 ;AN000; Indicate the file IS write protected
668 CLC ;AN000; Indicate there were no errors
669 JMP CHECK_EXIT ;AN000;
670
671CHECK_ERROR: ;AN000;
672 MOV AX, 0 ;AN000; Indicate the file is NOT write protected
673 STC ;AN000; Indicate that there WERE errors
674
675CHECK_EXIT: ;AN000;
676 CALL RESTORE_INT_24 ;AN000; Restore the original INT 24H handler
677 MOV CHK_W_PROTECT_FLAG, FALSE ;AN000; We are no longer expecting a write protect error
678 RET ;AN000;
679
680CHECK_WRITE_ROUTINE ENDP ;AN000;
681;****************************************************************************
682;
683; MATCH_FILES_ROUTINE Determine is a list of file exist on a drive.
684;
685; INPUT:
686; DI = Address of the ASCII-N string containing the drive and path to
687; search for the files.
688; SI = The address of the list of file. If AX = 2, the first two bytes
689; in the list are ignored.
690; AX = The type of list to use.
691; = 1: Use a list with only 12 bytes between the filenames.
692; = 2: Use a list with only 14 bytes between the filenames.
693; CX = The number of files in the list.
694;
695; OUTPUT:
696; If CY = 1, There was an error access the disk.
697; If CY = 0, There were no errors.
698; AX = 1: All the files are on the disk.
699; AX = 0: All the files are NOT on the disk.
700;
701; OPERATION:
702;
703;****************************************************************************
704PUBLIC MATCH_FILES_ROUTINE ;AN000;
705MATCH_FILES_ROUTINE PROC FAR ;AN000;
706 ;
707 ;
708 PUSH ES ;AN000; Make ES = DS
709 PUSH DS ;AN000;
710 POP ES ;AN000;
711 ;
712 MOV NUM_FILES, CX ;AN000; Save the number of files
713 MOV LIST_TYPE, AX ;AN000; Save the type of the list
714 ;
715 MOV CX, [DI] ;AN000; Get the length of the string
716 ADD DI, 2 ;AN000; Point SI to the start of the string
717 MOV DX, DI ;AN000; Copy the address of the string
718 ADD DI, CX ;AN000; Point to the end of the string
719 .IF < LIST_TYPE EQ 2 > ;AN000; If this list is a 14 byte list...
720 ADD SI, 2 ;AN000; Bypass the first two bytes in the list
721 .ENDIF ;AN000;
722 MOV STR_PTR, DI ;AN000; Save the pointer to the path string
723 MOV FILE_PTR, SI ;AN000; Save the pointer to the file list
724 MOV BX, 0 ;AN000; Initialize the count of files checked
725 ;
726 .WHILE < BX B NUM_FILES > ;AN000; Perform NUM_FILES interations
727 CLD ;AN000;
728 MOV CX, 12 ;AN000; Move 12 bytes for the filename
729 REP MOVSB ;AN000; Move the filename after the path string
730 MOV BYTE PTR [DI], 0 ;AN000; Make string into an ASCII-Z string
731 MOV AH, 4EH ;AN000; DOS Fn. for find a file
732 MOV CX, 0 ;AN000; Attribute used for search
733 DOSCALL ;AN000; Get the matching filename
734 .IF < C > ;AN000; Was there an error?
735 .IF < AX EQ 18 > ;AN000; If error no = 18, then file not found
736 JMP FILE_NOT_FOUND ;AN000; Return to the user
737 .ELSE ;AN000; Otherwise
738 JMP MATCH_ERROR ;AN000; There was some other type of disk error
739 .ENDIF ;AN000; Exit the subroutine
740 .ENDIF ;AN000;
741 MOV DI, STR_PTR ;AN000; Get the pointer to the string
742 MOV SI, FILE_PTR ;AN000; Get the pointer to the file list
743 .IF < LIST_TYPE EQ 1 > ;AN000; Check list type for incrementing the file pointer
744 ADD SI, 12 ;AN000; 12 bytes between files for list type 1
745 .ELSE ;AN000;
746 ADD SI, 14 ;AN000; 14 bytes between files for list type 2
747 .ENDIF ;AN000;
748 MOV FILE_PTR, SI ;AN000; Save the new file name pointer
749 INC BX ;AN000; Increment the count of files searched for
750 .ENDWHILE ;AN000;
751 CLC ;AN000; Indicate there were no errors
752 MOV AX, 1 ;AN000; Indicate that all the files were found
753 JMP EXIT_MATCH ;AN000;
754FILE_NOT_FOUND: ;AN000;
755 CLC ;AN000; Indicate that there were no errors
756 MOV AX, 0 ;AN000; But, all the files were not found
757 JMP EXIT_MATCH ;AN000;
758MATCH_ERROR: ;AN000;
759 STC ;AN000; Indicate that there were errors
760EXIT_MATCH: ;AN000;
761 POP ES ;AN000;
762 RET ;AN000;
763 ;
764MATCH_FILES_ROUTINE ENDP ;AN000;
765;************************************************************************
766;
767; CLOSE_FILE_ROUTINE: Close File
768;
769; INPUT:
770; BX = The file handle of the file to close.
771;
772; OUTPUT:
773; CY = 0, AX = undefined, successful
774; CY = 1, AX = error code
775;
776; OPERATION:
777;
778; THIS MACROS CLOSES THE FILE WITH THE GIVEN FILE HANDLE.
779; IT MAKES USE OF INT 21 (AH=3EH).
780; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
781; IS RETURNED IN AX.
782;
783;**************************************************************************
784PUBLIC CLOSE_FILE_ROUTINE ;AN000;
785CLOSE_FILE_ROUTINE PROC FAR ;AN000;
786 ;
787 ;
788 CALL HOOK_INT_24 ;AN000; Hook in the critical error handler
789 MOV INT_24_ERROR, FALSE ;AN000; Indicate no critical error have occured yet
790 MOV AH, 3EH ;AN000; DOS Fn. for closing a file
791 DOSCALL ;AN000; Close the file
792 CALL RESTORE_INT_24 ;AN000; Restore the old critical error handler
793 RET ;AN000;
794 ;
795CLOSE_FILE_ROUTINE ENDP ;AN000;
796;**************************************************************
797;
798; CREATE_FILE: Create new File
799;
800; INPUT:
801; DI = The address of the filename in ASCII-N format
802; CX = The attribute to give the file
803;
804; OUTPUT:
805; If CY = 0: There were no errors.
806; AX - The file handle of the created file.
807; If CY = 1: There were file errors. AX contains the error code.
808;
809; OPERATION:
810;
811; CREATE_FILE CREATES A FILE WITH THE GIVEN NAME USING INT 21H (AH=5BH)
812; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
813; IS RETURNED IN AX.
814;
815;**************************************************************************
816PUBLIC CREATE_FILE_ROUTINE ;AN000;
817CREATE_FILE_ROUTINE PROC FAR ;AN000;
818 ;
819 CALL HOOK_INT_24 ;AN000;
820 CALL POS_ZERO ;AN000;
821 MOV DX, DI ;AN000;
822 ADD DX, 2 ;AN000;
823 MOV INT_24_ERROR, FALSE ;AN000;
824 MOV AH,5BH ;AN000;
825 DOSCALL ;AN000;
826 CALL RESTORE_INT_24 ;AN000;
827 RET ;AN000;
828 ;
829CREATE_FILE_ROUTINE ENDP ;AN000;
830;****************************************************************************
831;
832; ERASE_FILE_ROUTINE: Routine to erase a file.
833;
834; INPUT:
835; DI - The address of an ASCII-N string containing the name of the file
836; to erase.
837;
838; OUTPUT:
839; If CY = 0, there were no error encountered.
840; If CY = 1, there were errors. AX contains the DOS error code.
841;
842; OPERATION:
843;
844; ERASE_FILE ERASES THE FILE USING INT 21H (AH=41H).
845; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
846; IS RETURNED IN AX.
847;
848;****************************************************************************
849PUBLIC ERASE_FILE_ROUTINE ;AN000;
850ERASE_FILE_ROUTINE PROC FAR ;AN000;
851
852 CALL HOOK_INT_24 ;AN000;
853 CALL POS_ZERO ;AN000;
854 MOV INT_24_ERROR, FALSE ;AN000;
855 MOV DX, DI ;AN000;
856 ADD DX, 2 ;AN000;
857 MOV AH,41H ;AN000;
858 DOSCALL ;AN000;
859 CALL RESTORE_INT_24 ;AN000;
860 RET ;AN000;
861
862ERASE_FILE_ROUTINE ENDP ;AN000;
863;****************************************************************************
864;
865; CHMOD_FILE_ROUTINE: Change file attributes to read/write
866;
867; SYNTAX: CHMOD_FILE_ROUTINE
868;
869; INPUT: DI = POINTER TO ASCII-N STRING - FILE NAME
870;
871; OUTPUT: None.
872;
873; OPERATION:
874; The CHMOD dos call is executed (43H) to change the file's attributes
875; to read/write.
876;
877;****************************************************************************
878PUBLIC CHMOD_FILE_ROUTINE ;AN000;
879CHMOD_FILE_ROUTINE PROC FAR ;AN000;
880
881 CALL HOOK_INT_24 ;AN000;
882 CALL POS_ZERO ;AN000;
883 MOV INT_24_ERROR, FALSE ;AN000;
884 MOV DX, DI ;AN000;
885 ADD DX, 2 ;AN000;
886 MOV AH,043H ;AN000;
887 MOV AL,01 ;AN000;
888 XOR CX,CX ;AN000;
889 DOSCALL ;AN000;
890 CALL RESTORE_INT_24 ;AN000;
891 RET ;AN000;
892
893CHMOD_FILE_ROUTINE ENDP ;AN000;
894;************************************************************************
895; FIND_FILE: Find File
896;
897; INPUT:
898; DI - The address of an ASCII-N string contian the name of the file
899; to find.
900; CX - The attribute to be used in the search.
901;
902; OUTPUT:
903; If CY = 1, there were errors encountered. AX contians the DOS error
904; code.
905; If CY = 0, there were no errors.
906;
907; OPERATION:
908;
909; FINDFILE FINDS THE FIRST FILENAME SPECIFIED USING INT 21 (AH=4EH).
910; AND LOADS INFORMATION INTO THE CURRENT DTA.
911; NOTE : THE DEFAULT DTA IS AT 80H IN THE PSP.
912; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
913; IS RETURNED IN AX.
914;
915;************************************************************************
916PUBLIC FIND_FILE_ROUTINE ;AN000;
917FIND_FILE_ROUTINE PROC FAR ;AN000;
918 ;
919 CALL HOOK_INT_24 ;AN000;
920 CALL POS_ZERO ;AN000;
921 MOV DX, DI ;AN000;
922 ADD DX, 2 ;AN000;
923 MOV INT_24_ERROR, FALSE ;AN000;
924 ; CX Contains the attribute to be used in the search
925 MOV AH,4EH ;AN000;
926 DOSCALL ;AN000;
927 CALL RESTORE_INT_24 ;AN000;
928 RET ;AN000;
929
930FIND_FILE_ROUTINE ENDP ;AN000;
931;**************************************************************************
932;
933; OPEN_FILE_ROUTINE - Open File
934;
935; INPUT:
936; DI - The address of an ASCII-N string containing the name of the
937; file to open.
938; AL - The mode to open the file with ( 0 = read, 1 = write,
939; 2 = read/write)
940;
941; OUTPUT:
942; If CY = 1, there were errors encountered. AX contains the DOS error
943; code.
944; If CY = 0, there were no errors. AX contains the file handle.
945;
946; OPERATION:
947;
948; THIS MACRO OPENS A FILE FOR READ/WRITE OPERATIONS.
949; IT MAKES USE OF INT 21 (AH=3DH).
950; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
951; IS RETURNED IN AX.
952;
953;**************************************************************************
954PUBLIC OPEN_FILE_ROUTINE ;AN000;
955OPEN_FILE_ROUTINE PROC FAR ;AN000;
956 ;
957 CALL HOOK_INT_24 ;AN000;
958 CALL POS_ZERO ;AN000;
959 MOV INT_24_ERROR, FALSE ;AN000;
960 MOV DX, DI ;AN000;
961 ADD DX, 2 ;AN000;
962 ; AL contains the mode for opening the file.
963 MOV AH,3DH ;AN000;
964 DOSCALL ;AN000;
965 CALL RESTORE_INT_24 ;AN000;
966 RET ;AN000;
967
968OPEN_FILE_ROUTINE ENDP ;AN000;
969;**************************************************************************
970;
971; RENAME_FILE_ROUTINE - Rename File
972;
973; INPUT:
974; SI - The address of an ASCII-N string containing the file to rename
975; current file name.
976; DI - The address of an ASCII-N string containing the new name for the
977; file.
978;
979; OUTPUT:
980; If CY = 1, there were errors encountered. AX contains the DOS error
981; error code.
982; If CY = 0, there were no errors.
983;
984;
985; OPERATION:
986;
987; THIS MACRO RENAMES A FILE GIVEN 2 NAMES.
988; IT MAKES USE OF INT 21 (AH=56H).
989; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
990; IS RETURNED IN AX.
991;
992;**************************************************************************
993PUBLIC RENAME_FILE_ROUTINE ;AN000;
994RENAME_FILE_ROUTINE PROC FAR ;AN000;
995
996 CALL HOOK_INT_24 ;AN000;
997 PUSH ES ;AN000;
998 PUSH DS ;AN000;
999 POP ES ;AN000;
1000 PUSH DI ;AN000;
1001 ; SI Contains the address of the string containing the old filename.
1002 MOV DI, SI ;AN000;
1003 CALL POS_ZERO ;AN000;
1004 MOV DX, DI ;AN000;
1005 ADD DX, 2 ;AN000;
1006
1007 POP DI ;AN000;
1008 ; DI contains the address of the string containing the new filename.
1009 CALL POS_ZERO ;AN000;
1010 ADD DI, 2 ;AN000;
1011
1012 MOV INT_24_ERROR, FALSE ;AN000;
1013 MOV AH,56H ;AN000;
1014 DOSCALL ;AN000;
1015 POP ES ;AN000;
1016 CALL RESTORE_INT_24 ;AN000;
1017 RET ;AN000;
1018
1019RENAME_FILE_ROUTINE ENDP ;AN000;
1020;**************************************************************************
1021;
1022; READ_FILE_ROUTINE: Transfer the specified number of bytes from a file into a
1023; buffer location.
1024;
1025; INPUT:
1026; BX - The handle of the file to read.
1027; DX - The address of where to store the data
1028; CX - The number of characters to read
1029;
1030; OUTPUT:
1031; CY = 0, Read success. AX - number of bytes read
1032; CY = 1, Read error. AX contains the error code.
1033;
1034; OPERATION:
1035;
1036; THIS MACRO READS TO AN ALREADY OPENED FILE.
1037; IT MAKES USE OF INT 21 (AH=3FH).
1038; AX WILL RETURN THE NUMBER BYTES ACTUALLY WRITTEN.
1039;
1040;************************************************************************
1041PUBLIC READ_FILE_ROUTINE ;AN000;
1042READ_FILE_ROUTINE PROC FAR ;AN000;
1043 ;
1044 CALL HOOK_INT_24 ;AN000;
1045 MOV INT_24_ERROR, FALSE ;AN000;
1046 ; BX - The file handle
1047 ; CX - The number of bytes to read
1048 ; DX - The address of the buffer to store the data
1049 MOV AH,3FH ;AN000;
1050 DOSCALL ;AN000;
1051 CALL RESTORE_INT_24 ;AN000;
1052 RET ;AN000;
1053
1054READ_FILE_ROUTINE ENDP ;AN000;
1055;**************************************************************************
1056;
1057; WRITE_FILE_ROUTINE: Transfer the specified number of bytes from a buffer into a
1058; specified file.
1059;
1060; INPUT:
1061; BX - The handle of the file to write to.
1062; DX - The address of where the data is stored.
1063; CX - The number of characters to write.
1064;
1065; OUTPUT:
1066; CY = 0, Write success. AX - number of bytes written.
1067; CY = 1, Write error. AX contains the error code.
1068;
1069; OPERATION:
1070;
1071; THIS MACRO WRITES TO AN ALREADY OPENED FILE.
1072; IT MAKES USE OF INT 21 (AH=3DH).
1073; AX WILL RETURN THE NUMBER BYTES ACTUALLY WRITTEN.
1074;
1075;************************************************************************
1076PUBLIC WRITE_FILE_ROUTINE ;AN000;
1077WRITE_FILE_ROUTINE PROC FAR ;AN000;
1078 ;
1079 CALL HOOK_INT_24 ;AN000;
1080 MOV INT_24_ERROR, FALSE ;AN000;
1081 ; BX - The file handle
1082 ; CX - The number of bytes to read
1083 ; DX - The address of the buffer to store the data
1084 MOV AH,40H ;AN000;
1085 DOSCALL ;AN000;
1086 CALL RESTORE_INT_24 ;AN000;
1087 RET ;AN000;
1088
1089WRITE_FILE_ROUTINE ENDP ;AN000;
1090;***************************************************************************
1091;
1092; CHECK_DISK: Check is the specified fixed disk is present. If disk is
1093; present, return disk partition status.
1094;
1095; INPUT:
1096; AX = 1: First fixed disk.
1097; = 2: Second fixed disk.
1098;
1099; OUTPUT:
1100; CX = 0: Disk not present.
1101; = 1: Disk present - No DOS or EDOS partitions
1102; = 2: Disk present - DOS or EDOS partitions exist
1103; BX = 01H: Primary DOS partition exists
1104; = 02H: Extended DOS partitions exists
1105; = 04H: Logical drives exist
1106; = 08H: Free space exists in EDOS partition
1107; = 10H: Free space exists on disk
1108; More than one status bit can be set
1109; DX = 0: There is no free space in EDOS partition and the
1110; disk.
1111; = 1: There is free space in the EDOS partition.
1112; = 2: There is no EDOS partition, but there is free
1113; disk space.
1114; DI = Buffer for fixed disk status information.
1115;
1116; OPERATION: A call is performed to the FDISK utility (GET_DISK_STATUS)
1117; to get the status of the specified fixed disk drive. The returned
1118; status information is checked and the memory variables are set as
1119; specified above.
1120;
1121;***************************************************************************
1122PUBLIC CHECK_DISK_ROUTINE ;AN000;
1123CHECK_DISK_ROUTINE PROC FAR ;AN000;
1124 ;
1125 PUSH ES ;AN000; Make ES = DS
1126 PUSH DS ;AN000;
1127 POP ES ;AN000;
1128 PUSH DI ;AN000;
1129 ADD DI, 2 ;AN000;
1130 CALL GGET_STATUS ;AN000;
1131 POP DI ;AN000;
1132 MOV [DI+1], CL ;AN000; Store the number of table entries
1133 .IF < ZERO AX > ;AN000;
1134 .IF < BIT BX AND M_DOS_EDOS_PART > ;AN000;
1135 MOV CX, PRESENT_WITH_PART ;AN000;
1136 .ELSE ;AN000;
1137 MOV CX, PRESENT_WITHOUT_PART ;AN000;
1138 .ENDIF ;AN000;
1139 .ELSE ;AN000;
1140 MOV CX, NOT_PRESENT ;AN000;
1141 .ENDIF ;AN000;
1142 MOV DX, NO_EDOS_SPACE ;AN000; Initialize
1143 .IF < BIT BX AND M_EDOS_EXISTS > ;AN000; Does the extended DOS partition exist?
1144 .IF < BIT BX AND M_EDOS_SPACE > ;AN000; Yes! Is there free space in it?
1145 MOV DX, FREE_EDOS_SPACE ;AN000; Indicate that there is free space
1146 .ELSEIF < BIT BX NAND M_FREE_SPACE > ;AN000; Is there no free space on the disk?
1147 MOV DX, NO_EDOS_SPACE ;AN000; Indicate there is no free space in EDOS or on the disk.
1148 .ENDIF ;AN000;
1149 .ELSEIF < BIT BX AND M_FREE_SPACE > ;AN000; No! There is no EDOS partition
1150 MOV DX, NO_EDOS_BUT_SPACE ;AN000; But there is free space on the disk
1151 .ENDIF ;AN000;
1152 POP ES ;AN000;
1153 RET ;AN000;
1154 ;
1155CHECK_DISK_ROUTINE ENDP ;AN000;
1156;************************************************************************;;
1157;
1158; CHECK_VALID_MEDIA: Check if the diskettes attached will support
1159; installation of SELECT. Also, check if install destination will
1160; be selected by user or determined by SELECT.
1161;
1162; SYNTAX: CHECK_VALID_MEDIA var_disk_a, var_disk_b, var_tot, var_disk,
1163; var_def, var_index, var_option
1164;
1165; INPUT:
1166; var_disk_a = diskette A presence and type
1167; var_disk_b = diskette B presence and type
1168; var_tot = total number of dikettes
1169; var_disk = 0: first fixed disk is not present
1170; > 0: first fixed disk is present
1171;
1172; OUTPUT:
1173; CY = 0: Success variables are returned as defined below.
1174; CY = 1: Error - invalid media
1175; var_def = 0 use default destination drive
1176; = 1 default destination drive not applicable
1177; var_index = 1 default destination is drive C
1178; = 2 default destination is drive B
1179; var_option = 1 possible drive B or C
1180; = 2 possible drive A or C
1181; = 3 possible drive A or B or C
1182; = 4 possible drive A or B
1183;
1184; OPERATION: The diskette drive types are checked for valid media type.
1185; If the diskette media types are valid, a check is made to determine if
1186; install destination will be user selected or will be determined by
1187; SELECT. The following checks are made.
1188;
1189; - if one diskette, return valid media and default destination is A
1190;
1191; - If two diskettes only, return valid and:
1192; if A = B, default = B
1193; if A <> B, default = A
1194; if A and B are mixed 720 and 1.44, destination option is A or B
1195;
1196; - If one diskette and a fixed disk only, return valid media and
1197; destination option is drive A or C.
1198;
1199; - If two diskettes and a fixed disk, return valid media and:
1200; if A = B, destination option is B or C
1201; if A <> B, destination option is A or C
1202; if A and B are mixed 720 and 1.44, destination option is
1203; A or B or C
1204;
1205;************************************************************************;;
1206PUBLIC CHECK_VALID_MEDIA_ROUTINE ;AN111;JW
1207CHECK_VALID_MEDIA_ROUTINE PROC FAR ;AN111;JW
1208
1209
1210 VAR_DISK_A EQU AL ;AN111;JW
1211 VAR_DISK_B EQU BL ;AN111;JW
1212 VAR_DEF EQU CL ;AN111;JW
1213 VAR_INDEX EQU DX ;AN111;JW
1214 VAR_DISK EQU SI ;AN111;JW
1215 VAR_OPTION EQU DI ;AN111;JW
1216
1217 .IF < VAR_DISK_A NE E_DISKETTE_INV > ;AN111; Is disk A present
1218 .IF <VAR_DISK_B NE E_DISKETTE_INV> ;AN111; Is disk B present
1219 .IF < VAR_DISK GT 0 > ;AN111; Hard disk is present?
1220 MOV VAR_DEF, DO_NOT_USE_DEFAULT ;AN111; Yes! Destination drive is undefined
1221 MOV VAR_OPTION,E_OPTION_B_C ;AN111; options will be B or C
1222 MOV VAR_INDEX,DEF_DEST_C ;AN073; SEH highlight option C
1223 CLC ;AN111; Indicate valid media
1224 .ELSE ;AN111;
1225 MOV VAR_DEF, USE_DEFAULT ;AN111; Yes! Use the default destination = B
1226 MOV VAR_INDEX, DEF_DEST_B ;AN111; Drive B is that default
1227 CLC ;AN111; Indicate valid media
1228 .ENDIF ;AN111;
1229 .ELSE ;AN111;
1230 .IF < VAR_DISK GT 0 > ;AN111; Hard disk is present?
1231 MOV VAR_DEF, DO_NOT_USE_DEFAULT ;AN111; Yes! Destination drive is undefined
1232 MOV VAR_OPTION, E_OPTION_A_C ;AN111; options are A or C
1233 MOV VAR_INDEX,DEF_DEST_C ;AN073; SEH highlight option C
1234 CLC ;AN111; Indicate valid media
1235 .ELSE ;AN111;
1236 MOV VAR_DEF, USE_DEFAULT ;AN111; no, Use the default destination
1237 MOV VAR_INDEX, DEF_DEST_A ;AN111; Drive A is that default
1238 CLC ;AN111; Indicate valid media
1239 .ENDIF ;AN111;
1240 .ENDIF ;AN111;
1241 .ELSE ;AN111;
1242 STC ;AN111; Indicate invalid media
1243 .ENDIF ;AN111;
1244 RET ;AN111;
1245
1246CHECK_VALID_MEDIA_ROUTINE ENDP ;AN111;JW
1247;************************************************************************;;
1248;
1249; SCAN_DISK_TABLE: Scan the specified disk status table from the
1250; specified index item for specified field and return status information.
1251;
1252; INPUT:
1253; CX = 1: First fixed disk
1254; = 2: Second fixed disk
1255; AX = Index of the information to return
1256;
1257; OUTPUT:
1258; AX = 0: Success - Index into table is valid
1259; = 1: Error - Index invalid or end of table
1260; N_NAME_PART = Partition name.
1261; N_SIZE_PART = Partition size.
1262; N_STATUS_PART = Partition status
1263; P_DRIVE_PART = Drive letter assigned.
1264; P_LEVEL1_PART = Version number (1st part). For DOS 4.00 1st part = blank
1265; P_LEVEL2_PART = Version number (2nd part). For DOS 4.00 2nd part = 4
1266; P_LEVEL3_PART = Version number (3rd part). For DOS 4.00 3rd part = .
1267; P_LEVEL4_PART = Version number (4th part). For DOS 4.00 4th part = 0
1268;
1269; OPERATION:
1270; Starts scanning the disk table from the point indicated by var_index
1271; for either the name, status or type. The table is scanned until either
1272; the desired entry is found, or the end of the table is reached. If
1273; the end of the table is reached before a matching entry is found, then
1274; var_ret returns 1, else if an entry is found, it returns 0.
1275; If found, var_index will also return the index of the entry.
1276;
1277; Note: The index of the first entry in the table is 1.
1278;
1279;************************************************************************;;
1280PUBLIC SCAN_DISK_TABLE_ROUTINE ;AN000;
1281SCAN_DISK_TABLE_ROUTINE PROC FAR ;AN000;
1282
1283 MOV BX, 0 ;AN000;
1284 .IF < CX EQ TABLE_ONE > ;AN000;
1285 MOV SI, OFFSET DISK_1_START ;AN000; Get the address of the first table
1286 MOV BL, DISK_1_VAL_ITEM ;AN000; Number of entries in the first table
1287 .ELSE ;AN000;
1288 MOV SI, OFFSET DISK_2_START ;AN000; Get the address of the second table
1289 MOV BL, DISK_2_VAL_ITEM ;AN000; Number of entries in the second table
1290 .ENDIF ;AN000;
1291 .IF < AX BE BX > ;AN000;
1292 ; AX contains the index
1293 DEC AX ;AN000; Make the first index a 0
1294 MOV DX, TYPE DISK_STATUS ;AN000; Number of bytes in the structure
1295 MUL DX ;AN000; Calculate the offset into the table
1296 ADD SI, AX ;AN000; Add to the address of the table
1297 COPY_BYTE N_NAME_PART, [SI].N_PART_NAME ;AN000; Copy the table entries
1298 COPY_WORD N_SIZE_PART, [SI].N_PART_SIZE ;AN000;
1299 COPY_BYTE N_STATUS_PART, [SI].N_PART_STATUS ;AN000;
1300 COPY_BYTE P_DRIVE_PART, [SI].P_PART_DRIVE ;AN000;
1301 COPY_BYTE N_TYPE_PART, [SI].N_PART_TYPE ;AN000;
1302 COPY_BYTE N_LEVEL1_PART, [SI].N_PART_LEVEL1 ;AN065;SEH 1st part of version number For DOS 4.00 1st part = blank
1303 COPY_BYTE N_LEVEL2_PART, [SI].N_PART_LEVEL2 ;AN065;SEH 2nd part of version number For DOS 4.00 2nd part = 4
1304 COPY_BYTE N_LEVEL3_PART, [SI].N_PART_LEVEL3 ;AN065;SEH 2nd part of version number For DOS 4.00 3rd part = .
1305 COPY_BYTE N_LEVEL4_PART, [SI].N_PART_LEVEL4 ;AN065;SEH 2nd part of version number For DOS 4.00 4th part = 0
1306 MOV AX, DATA_VALID ;AN000;
1307 .ELSE ;AN000;
1308 MOV AX, DATA_INVALID ;AN000;
1309 .ENDIF ;AN000;
1310 RET ;AN000;
1311
1312SCAN_DISK_TABLE_ROUTINE ENDP ;AN000;
1313;************************************************************************;;
1314;
1315; UPDATE_DISK_TABLE: Update the specifed disk status table for the
1316; specified index item.
1317;
1318; INPUT:
1319; CX = 1: First fixed disk
1320; = 2: Second fixed disk
1321; AX = Index into table
1322;
1323; OUTPUT:
1324; AX = 0: Success - Index into table is valid
1325; = 1: Error - Index into table is not valid
1326; partition name = N_NAME_PART
1327; partition size = N_SIZE_PART
1328; partition status = N_STATUS_PART
1329; partition type = N_TYPE_PART
1330; drive letter = P_DRIVE_PART
1331;
1332; OPERATION: If the index into the disk table is valid, the disk table
1333; is updated for the specifed index. Disk status information is obtained
1334; from pre-defined locations as specified above.
1335;
1336;************************************************************************;;
1337PUBLIC UPDATE_DISK_TABLE_ROUTINE ;AN000;
1338UPDATE_DISK_TABLE_ROUTINE PROC FAR ;AN000;
1339
1340 MOV BH, 0 ;AN000;
1341 .IF < CX EQ TABLE_ONE > ;AN000;
1342 MOV SI, OFFSET DISK_1_START ;AN000; Get the address of the first table
1343 MOV BL, DISK_1_VAL_ITEM ;AN000; Number of entries in the first table
1344 .ELSE ;AN000;
1345 MOV SI, OFFSET DISK_2_START ;AN000; Get the address of the second table
1346 MOV BL, DISK_2_VAL_ITEM ;AN000; Number of entries in the second table
1347 .ENDIF ;AN000;
1348 ; AX contains the index.
1349 DEC AX ;AN000; Make the first index a 0
1350 MOV DX, TYPE DISK_STATUS ;AN000; Number of bytes in the structure
1351 MUL DX ;AN000; Calculate the offset into the table
1352 ADD SI, AX ;AN000; Add to the address of the table
1353 .IF < VAR_INDEX BE BX > ;AN000;
1354 COPY_BYTE [SI].N_PART_NAME, N_NAME_PART ;AN000;
1355 COPY_WORD [SI].N_PART_SIZE, N_SIZE_PART ;AN000;
1356 COPY_BYTE [SI].N_PART_STATUS, N_STATUS_PART ;AN000;
1357 COPY_BYTE [SI].P_PART_DRIVE, P_DRIVE_PART ;AN000;
1358 COPY_BYTE [SI].N_PART_TYPE, N_TYPE_PART ;AN000;
1359 MOV AX, DATA_VALID ;AN000; No error.
1360 .ELSE ;AN000;
1361 MOV AX, DATA_INVALID ;AN000; Indicate an error
1362 .ENDIF ;AN000;
1363 RET ;AN000;
1364 ;
1365UPDATE_DISK_TABLE_ROUTINE ENDP ;AN000;
1366 ;
1367CODE_FAR ENDS ;AN000;
1368 ;
1369END ;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 @@
1;***************************************************************************
2; Subroutines which are called by the macros in MACROS.INC.
3; File: ROUTINES.ASM
4;
5; This is a stand alone module and is meant to be linked with the calling
6; program.
7;
8;***************************************************************************
9.ALPHA ;AN000;
10INCLUDE MAC_EQU.INC ;AN000;
11INCLUDE PAN-LIST.INC ;AN000;
12INCLUDE PANEL.MAC ;AN000;
13
14;**********************************************************************
15DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
16
17
18NULl_DEVICE DB 'nul',0 ;AN000;
19CON_DEVICE DB 'con',0 ;AN000;
20
21SUB_PROGRAM DB 0 ;AN000;
22 PUBLIC EXEC_ERR ;AN000;
23EXEC_ERR DB 0 ;AN000;
24FIRST_TRY DB 0 ;AN000;DT
25INT24_STATUS DB 0 ;AN000;
26UNHOOKED EQU 0 ;AN000;
27HOOKED EQU 1 ;AN000;
28 PUBLIC EXEC_DEALLOC,EXEC_FDISK ;AN000;
29EXEC_DEALLOC DB 0 ;AN000;DT
30EXEC_FDISK DB 0 ;AN000;DT
31EXEC_DEHELP DB 0 ;AN000;DT
32
33DATA ENDS ;AN000; DATA
34;**********************************************************************
35
36.XLIST ;AN000;
37 INCLUDE STRUC.INC ;AN000;
38 INCLUDE MACROS.INC ;AN000;
39 INCLUDE VARSTRUC.INC ;AN000;
40 INCLUDE EXT.INC ;AN000;
41 EXTRN EXIT_DOS:FAR ;AN000;
42 EXTRN SYSDISPMSG:FAR ;AN000;
43 EXTRN HANDLE_ERROR_CALL:FAR ;AN000;
44 EXTRN ALLOCATE_MEMORY_CALL:FAR ;AN000;
45 EXTRN DEALLOCATE_MEMORY_CALL:FAR ;AN000;
46
47 EXTRN INT_23_VECTOR:NEAR ;AN074;SEH ctrl-break
48 EXTRN INT_24_VECTOR:NEAR ;AN000;
49 EXTRN INT_2F_VECTOR:NEAR ;AN000;
50 EXTRN INT_2F_256KB:NEAR ;AN000;
51 EXTRN INT_2F_FORMAT:NEAR ;AN111;JW
52 EXTRN ALLOCATE_HELP:FAR ;AN000;
53 EXTRN DEALLOCATE_HELP:FAR ;AN000;
54.LIST ;AN000;
55
56;**********************************************************************
57CODE_FAR SEGMENT PARA PUBLIC 'CODE' ;AN000; Segment for far routine
58 ASSUME CS:CODE_FAR,DS:DATA ;AN000;
59 ;
60;************************************************************************
61;
62; APPEND_STRING: Append an ASCII-N string to the specified string.
63;
64; INPUT:
65; SI - OFFSET NAME_SRC
66; CX - IMMED_MAX
67; DI - OFFSET NAME_DEST
68;
69; OUTPUT:
70; None.
71;
72; OPERATION:
73;
74;
75;****************************************************************************
76PUBLIC APPEND_STRING_ROUTINE ;AN000;
77APPEND_STRING_ROUTINE PROC FAR ;AN000;
78
79 PUSH ES ;AN000;
80 PUSH DS ;AN000;
81 POP ES ;AN000; ES and DS point to the data segment
82
83 .IF < CX LT <WORD PTR [DI]> > ;AN000;
84 MOV [DI], CX ;AN000;
85 .ELSE ;AN000;
86 SUB CX, [DI] ;AN000; Calculate space for the other string
87 .IF < CX GE <WORD PTR [SI]>> ;AN000;
88 MOV CX, [SI] ;AN000; Move the entire string
89 .ENDIF ;AN000;
90 MOV AX, [DI] ;AN000; Current size of destination string
91 ADD [DI], CX ;AN000; Add in the length of the new string
92 ADD DI, AX ;AN000; Add length of string to pointer
93 ADD DI, 2 ;AN000; Increment to pass first word and last byte
94 ADD SI, 2 ;AN000; Point source to start of the string
95 CLD ;AN000;
96 REP MOVSB ;AN000;
97 .ENDIF ;AN000;
98
99 POP ES ;AN000;
100
101 RET ;AN000;
102
103APPEND_STRING_ROUTINE ENDP ;AN000;
104;************************************************************************
105;
106; COPY_ROUTINE - Subroutine to perform the copy string operation.
107;
108; INPUT:
109; SI - OFFSET NAME_SRC
110; AX - IMMED_MAX
111; DI - OFFSET NAME_DEST
112;
113; OUTPUT:
114; None.
115;
116; OPERATION: Copies NAME_SRC1 to NAME_DEST. If NAME_SRC1 is longer then
117; IMMED_MAX, then only IMMED_MAX bytes are copied.
118;
119;****************************************************************************
120PUBLIC COPY_ROUTINE ;AN000;
121COPY_ROUTINE PROC FAR ;AN000;
122
123 PUSH ES ;AN000;
124 PUSH DS ;AN000;
125 POP ES ;AN000; ES and DS point to the data segment
126
127 PUSH DI ;AN000; Save OFFSET NAME_DEST
128 MOV DX, AX ;AN000; Save IMMED_MAX
129 CLD ;AN000; Move strings in the forward direction
130 MOV CX,WORD PTR [SI] ;AN000; Get length of source string
131 ADD SI,2 ;AN000; Point SI to start of string
132 ADD DI,2 ;AN000; Point DI to start of destination.
133 .IF < CX GT AX > ;AN000;
134 MOV CX,AX ;AN000; Will not fit so adjust length
135 .ENDIF ;AN000;
136 SUB AX,CX ;AN000; Amount of room left.
137REP MOVSB ;AN000; Move the string
138 SUB DX,AX ;AN000; Subtract the amount left over
139 POP SI ;AN000;
140 MOV WORD PTR [SI],DX ;AN000; Store the length of the string
141
142 POP ES ;AN000;
143 RET ;AN000;
144
145COPY_ROUTINE ENDP ;AN000;
146;******************************************************************************
147;
148; PUSH_ROUTINE: Routine to do the actual pushing of the screen label
149;
150; INPUT:
151; AX - Contains the address of the code for this screen
152;
153; OUTPUT:
154; None.
155;
156; OPERATION: The screen label address is pushed onto the SELECT stack
157; provided the numher of entries on the stack will not exceed the
158; maximum. Error will NOT be generated if the function was not
159; successful.
160;
161;******************************************************************************
162PUBLIC PUSH_ROUTINE ;AN000;
163PUSH_ROUTINE PROC FAR ;AN000;
164
165 .IF < STACK_INDEX B STACK_SIZE > ;AN000; Is there any room?
166 MOV BL,STACK_INDEX ;AN000; Get the index
167 MOV BH, 0 ;AN000;
168 MOV SELECT_STACK[BX],AX ;AN000; Store the label
169 ADD STACK_INDEX,2 ;AN000; Point to next free space
170 .ENDIF ;AN000;
171 RET ;AN000;
172PUSH_ROUTINE ENDP ;AN000;
173;******************************************************************************
174;
175; POP_ROUTINE: Routine to do the actual poping of the screen label
176;
177; INPUT:
178; None.
179;
180; OUTPUT:
181; SI contains the address of the screen code.
182;
183; OPERATION: The screen label address is poped from the SELECT stack
184; provided there are entries on the stack. If there are no values
185; on the stack then the address of the EXIT_DOS screen will be
186; returned.
187;
188;******************************************************************************
189PUBLIC POP_ROUTINE ;AN000;
190POP_ROUTINE PROC FAR ;AN000;
191
192 .IF < STACK_INDEX A 0 > ;AN000; Is there anything on the stack?
193 SUB STACK_INDEX,2 ;AN000; Point to last item on the stack
194 MOV BL,STACK_INDEX ;AN000; Get the index
195 MOV BH, 0 ;AN000;
196 MOV SI,SELECT_STACK[BX] ;AN000; Get the label
197 .ELSE ;AN000;
198 MOV SI,OFFSET EXIT_DOS ;AN000; EXIT_DOS screen
199 .ENDIF ;AN000;
200 RET ;AN000;
201
202POP_ROUTINE ENDP ;AN000;
203;************************************************************************
204;
205; MAKE_DIR_PATHS_ROUTINE: Create the specified directory including all
206; the specified sub-directories if they do not exist.
207;
208; INPUT:
209; BX - Points to an ASCII-N string containing the path to create
210;
211; OUTPUT:
212; CY = 0 Success
213; CY = 1 Error - AX will contain an error code.
214;
215; OPERATION: The directory pathname is created.
216; If the drive letter and colon are not followed by a '\', then the
217; macro will start creating the directories from the default directory.
218; If they are followed by a '\', then the macro will start at the root.
219; If an error occures, then sub-directories which have been created will
220; be removed.
221;
222;
223;****************************************************************************
224PUBLIC MAKE_DIR_PATHS_ROUTINE ;AN000;
225MAKE_DIR_PATHS_ROUTINE PROC FAR ;AN000;
226
227 PUSH ES ;AN000;
228 PUSH DS ;AN000;
229 POP ES ;AN000;
230
231
232 MOV AH, 1 ;AN000; Flag indicating adding or deleting dirs
233 MOV SI, 0 ;AN000; End of the first path created
234 MOV DI, BX ;AN000; Offset of the ASCII-N string
235 ADD DI, 5 ;AN000; Point to the beginning of the path
236 MOV DX, WORD PTR [BX] ;AN000; Get the length of the string
237 MOV CX, DX ;AN000; Store in another variable as well
238 SUB CX, 3 ;AN000; Skip the first 3 characters 'C:\'
239 MOV AL, '\' ;AN000; Delimiter to search for
240 CLD ;AN000; Start searching in the forward direction
241
242
243PROCESS_NEXT_DIR: ;AN000;
244 CMP AH, 1 ;AN000; Adding or deleting directories?
245 JNE DELETING_DIR_1 ;AN000; If adding, then jump
246 CMP CX,0 ;AN000; Is the string length zero?
247 JNE LENGTH_NOT_ZERO ;AN000;
248 JMP NORMAL_EXIT ;AN000;
249DELETING_DIR_1: ;AN000;
250 CMP SI, DI ;AN000; Was this the first DIR created?
251 JNE LENGTH_NOT_ZERO ;AN000;
252 JMP ERROR_EXIT ;AN000;
253
254LENGTH_NOT_ZERO: ;AN000;
255REPNZ SCASB ;AN000;
256 JNZ STRING_END ;AN000; If not zero, we reached the string end
257
258 INC CX ;AN000; By adjusting DI, more bytes to the strings end
259 CMP AH,1 ;AN000; Adding or deleting
260 JNE DELETING_DIR_2 ;AN000;
261 DEC DI ;AN000; Back DI up to point to the '\'
262STRING_END: ;AN000;
263 MOV WORD PTR [BX], DX ;AN000; Length of entire string
264 SUB WORD PTR [BX], CX ;AN000; Subtract the amount left in string
265 JMP ADJUST_DONE ;AN000;
266DELETING_DIR_2: ;AN000;
267 INC DI ;AN000; Adjust DI to point to the '\'
268 MOV WORD PTR [BX], CX ;AN000; Length left in string
269ADJUST_DONE: ;AN000;
270
271 CMP AH, 1 ;AN000; Adding or deleting directories
272 JNE DELETING_DIR_3 ;AN000;
273 CMP SI, 0 ;AN000; Created a DIR yet?
274 JNE MAKE_START ;AN000;
275 PUSH AX ;AN000;
276;**********************************************************************
277 PUSHH <DX,DI> ;AN000;
278
279 MOV DI,BX ;AN000; Get the offset of the string
280 CALL FAR PTR POS_ZERO ;AN000; Make into an ASCII-Z string
281 MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors
282 MOV DX,BX ;AN000; Get the start of the string
283 ADD DX, 2 ;AN000;
284 MOV AH,3BH ;AN000; DOS function call number
285 DOSCALL ;AN000;
286
287 POPP <DI,DX> ;AN000;
288;**********************************************************************
289 POP AX ;AN000;
290 JNC DIR_DONE ;AN000;
291 MOV SI, DI ;AN000;
292MAKE_START: ;AN000;
293 PUSH AX ;AN000;
294;**********************************************************************
295 PUSHH <DX,DI> ;AN000;
296 MOV DI,BX ;AN000;
297 CALL FAR PTR POS_ZERO ;AN000; position the '0' at the end of the path
298 MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors
299 MOV DX,BX ;AN000; advance pointer to beginning of path
300 ADD DX, 2 ;AN000;
301 MOV AH,39H ;AN000; make directory interrupt
302 DOSCALL ;AN000; call to DOS interrupt 21
303 POPP <DI,DX> ;AN000;
304;**********************************************************************
305 JC CANNOT_MAKE ;AN000;
306 POP AX ;AN000;
307 JMP DIR_DONE ;AN000;
308CANNOT_MAKE: ;AN000;
309 POP CX ;AN000; Pop the previously saved AX value
310 PUSH AX ;AN000; Push the make dir error message
311 MOV AX, '\' ;AN000;
312 STD ;AN000; Now search in the backward direction
313 MOV CX, WORD PTR [BX] ;AN000;
314 JMP DIR_DONE ;AN000;
315DELETING_DIR_3: ;AN000;
316 PUSH AX ;AN000;
317;**********************************************************************
318 PUSHH <DX,DI> ;AN000;
319 MOV DI,BX ;AN000;
320 CALL FAR PTR POS_ZERO ;AN000; position the '0' at the end of the path
321 MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors
322 MOV DX,BX ;AN000; advance pointer to beginning of path
323 ADD DX, 2 ;AN000;
324 MOV AH,3AH ;AN000; remove the specified directory
325 DOSCALL ;AN000; call to DOS interrupt 21
326 POPP <DI,DX> ;AN000;
327;**********************************************************************
328 JC ERROR_POP_EXIT ;AN000;
329 POP AX ;AN000;
330DIR_DONE: ;AN000;
331 MOV BYTE PTR [DI], '\' ;AN000; Put the delimiter back
332 CMP CX,0 ;AN000;
333 JE NORMAL_EXIT ;AN000; If CX = 0, string ends
334 DEC CX ;AN000;
335 CMP AH,1 ;AN000;
336 JNE DELETING_DIR_4 ;AN000;
337 INC DI ;AN000;
338 JMP PROCESS_NEXT_DIR ;AN000;
339DELETING_DIR_4: ;AN000;
340 DEC DI ;AN000;
341 JMP PROCESS_NEXT_DIR ;AN000;
342
343ERROR_POP_EXIT: ;AN000;
344 POP CX ;AN000; Pop the extra value off the stack.
345ERROR_EXIT: ;AN000;
346 POP AX ;AN000; Pop the error message number
347 STC ;AN000;
348 JMP PATHS_DONE ;AN000;
349NORMAL_EXIT: ;AN000;
350 CLC ;AN000;
351
352PATHS_DONE: ;AN000;
353 MOV WORD PTR [BX], DX ;AN000; Restore the original path length
354
355 POP ES ;AN000;
356
357 RET ;AN000;
358
359MAKE_DIR_PATHS_ROUTINE ENDP ;AN000;
360;************************************************************************
361;
362; POS_ZERO - Position a zero at the end of an ASCII-N string, making it
363; into an ASCII-Z string.
364;
365; INPUT:
366; DI - Points to the string to covert.
367;
368; OUTPUT:
369; None.
370;
371; OPERATION: An ASCII-N string is converted to an ASCII-Z string.
372;
373;****************************************************************************
374PUBLIC POS_ZERO ;AN000;
375POS_ZERO PROC FAR ;AN000;
376
377 PUSH AX ;AN000;
378 PUSH DI ;AN000;
379
380 MOV AX,[DI] ;AN000; Get the length of the string
381 ADD DI,AX ;AN000; Add the length to the offset
382 ADD DI,2 ;AN000; Adjust for the length word
383 MOV BYTE PTR [DI],0 ;AN000; Position the zero after the end.
384
385 POP DI ;AN000;
386 POP AX ;AN000;
387
388 RET ;AN000;
389
390POS_ZERO ENDP ;AN000;
391;************************************************************************
392;
393; BEEP_ROUTINE - Cause the speaker to create a tone of a given frequency
394; and duration.
395;
396; INPUT:
397; DI - The frequency of the tone to create.
398; BX - The duration of the tone.
399;
400; OUTPUT:
401; None.
402;
403; OPERATION: Causes the speaker to produce a tone.
404;
405;****************************************************************************
406PUBLIC BEEP_ROUTINE ;AN000;
407BEEP_ROUTINE PROC FAR ;AN000;
408
409 MOV AL,0B6H ;AN000; write timer mode register
410 OUT 43H,AL ;AN000;
411 MOV DX,14H ;AN000; timer divisor=
412 MOV AX,4F38H ;AN000; 1331000/frequency
413 DIV DI ;AN000;
414 OUT 42H,AL ;AN000; write timer 2 count low byte
415 MOV AL,AH ;AN000;
416 OUT 42H,AL ;AN000; write timer 2 count high byte
417 IN AL,61H ;AN000; get current PORT B setting
418 MOV AH,AL ;AN000; and save it in AH
419 OR AL,3 ;AN000; turn on speaker
420 OUT 61H,AL ;AN000;
421B_WAIT: MOV CX,2801 ;AN000; wait 10 milliseconds
422SPKR_ON:LOOP SPKR_ON ;AN000;
423 DEC BX ;AN000;
424 JNZ B_WAIT ;AN000; beep until finished
425 MOV AL,AH ;AN000; recover value of port
426 OUT 61H,AL ;AN000;
427 RET ;AN000;
428
429BEEP_ROUTINE ENDP ;AN000;
430;************************************************************************
431;
432; BIN_TO_CHAR_ROUTINE: Convert a binary number to ASCII format.
433;
434; INPUT:
435; AX - The binary number to convert.
436; DI - Pointer to the ASCII-N string to store the result.
437;
438; OUTPUT:
439; None.
440;
441; OPERATION: The specified 16 bit numeric variable contents are
442; converted to ASCII and stored in ASCII-N format. Leading zeros
443; will not be stored.
444;
445;****************************************************************************
446PUBLIC BIN_TO_CHAR_ROUTINE ;AN000;
447BIN_TO_CHAR_ROUTINE PROC FAR ;AN000;
448
449 MOV SI, DI ;AN000; Copy the string pointer
450 ADD SI, 6 ;AN000; Point to the string END
451 MOV CX, 10 ;AN000; Number to divide AX by
452
453 .WHILE < NONZERO AX> ;AN000;
454 MOV DX, 0 ;AN000; Zero the high order word
455 DIV CX ;AN000; Divide the binary number
456 ADD DL, 48 ;AN000; Convert to ASCII
457 MOV [SI], DL ;AN000; Store in the string.
458 DEC SI ;AN000; Point to the next free string space
459 .ENDWHILE ;AN000;
460 SUB SI, DI ;AN000; Get the difference in the pointers
461 DEC SI ;AN000; Adjust for the lenght word
462 MOV WORD PTR [DI], 5 ;AN000; Store the number of characters
463 SUB WORD PTR [DI], SI ;AN000; Subtract the number of extra digits
464 MOV CX, WORD PTR [DI] ;AN000;
465 MOV BX, DI ;AN000;
466 ADD BX, 2 ;AN000;
467 .WHILE < NONZERO CX > ;AN000;
468 COPY_BYTE [BX],[BX+SI] ;AN000;
469 DEC CX ;AN000;
470 INC BX ;AN000;
471 .ENDWHILE ;AN000;
472 RET ;AN000;
473
474BIN_TO_CHAR_ROUTINE ENDP ;AN000;
475;**************************************************************************
476;
477; PREPARE_FILE_ROUTINE: Prepare a file and a buffer for the construction
478; of that file line by line.
479;
480; INPUT:
481; BX = The address of an ASCII-N string containing the name of the file
482; to create.
483;
484; OUTPUT: CY = 0: No error was encountered.
485; CY = 1: There was an error encountered.
486;
487; OPERATION: A attempt is made to create the file. If it fails because
488; the file already exists, then the file is opened for writing.
489; The user will then write to the file be calling WRITE_LINE macro. The
490; data will be temperarily stored in a buffer to limit the actual number
491; of writes to the file.
492;
493;**************************************************************************
494PUBLIC PREPARE_FILE_ROUTINE ;AN000;
495PREPARE_FILE_ROUTINE PROC FAR ;AN000;
496 ;
497 ;**********************************************************************
498 ; Try to create the file
499 ;**********************************************************************
500 MOV DI, BX ;AN000; Get the address of the file name string
501 CALL POS_ZERO ;AN000; Make the ASCII-N string into an ASCII-Z
502 MOV DX, DI ;AN000; Get the address again
503 ADD DX, 2 ;AN000; Pass the length word and point to string
504 MOV N_WRITE_ERR_CODE, 0 ;AN000; Indicate there have been no errors yet
505 MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors
506 MOV CX, 0 ;AN000; Attributes to give the file
507 MOV AH, 3CH ;AN000; Function for creating a file
508 DOSCALL ;AN000; Create the file
509 ;**********************************************************************
510 ; See if an error has occured.
511 ;**********************************************************************
512 .IF < C > ;AN000; Did the DOS fn. return an error?
513 .IF < AX EQ 5 > ;AN000; Was the error ACCESS DENIED?
514 MOV DX, BX ;AN000; Get the address of the string
515 MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors
516 MOV AX, 3D01H ;AN000; DOS Fn. for opening a file
517 DOSCALL ;AN000;
518 .IF < C > ;AN000; Was there an error?
519 MOV N_WRITE_ERR_CODE, AX ;AN000; Save this error code
520 .ENDIF ;AN000;
521 .ELSE ;AN000;
522 MOV N_WRITE_ERR_CODE, AX ;AN000;
523 .ENDIF ;AN000;
524 .ENDIF ;AN000;
525 ;
526 .IF < N_WRITE_ERR_CODE NE 0 > ;AN000;
527 STC ;AN000;
528 .ELSE ;AN000;
529 MOV N_WRITE_HANDLE, AX ;AN000;
530 CLC ;AN000;
531 .ENDIF ;AN000;
532 ;
533END_PREPARE_FILE: ;AN000;
534 ;
535 RET ;AN000;
536 ;
537PREPARE_FILE_ROUTINE ENDP ;AN000;
538;**************************************************************************
539;
540; WRITE_LINE_ROUTINE: Write a line to the file being constructed.
541;
542; INPUT:
543; BX = The address of an ASCII-N string containing the line to write
544; to the file.
545;
546; OUTPUT: CY = 0: No error was encountered.
547; CY = 1: An error was encountered.
548;
549; OPERATION: The line that is passed, has a CR and a LF appended to the
550; end of the line. The data is then stored in a buffer. When the
551; buffer is full, the data is written to the disk.
552;
553;**************************************************************************
554PUBLIC WRITE_LINE_ROUTINE ;AN000;
555WRITE_LINE_ROUTINE PROC FAR ;AN000;
556
557
558 ; See if there has been an error so far ;
559 .IF < N_WRITE_ERR_CODE EQ 0 > ;AN000; Has there been an error?
560 MOV SI, BX ;AN000; No! Get the string address
561 ADD SI, WORD PTR [BX] ;AN000; Get the end of string address
562 ADD SI, 2 ;AN000; Adjust for the length word
563 MOV BYTE PTR [SI], E_CR ;AN000; Append a carrage return to the string
564 MOV BYTE PTR [SI+1], E_LF ;AN000; Append a line feed to the string
565 MOV CX, WORD PTR [BX] ;AN000; Get the length of the string
566 ADD CX, 2 ;AN000; Increase the string length by two
567 MOV DX, BX ;AN000; Get the address of the string
568 ADD DX, 2 ;AN000; Adjust pointer for length word
569 MOV BX, N_WRITE_HANDLE ;AN000; Handle for the already opened file
570 MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors
571 MOV AH, 40H ;AN000; Function call for writing to a file
572 DOSCALL ;AN000; Write the line
573 .IF < C > ;AN000; Was there an error?
574 MOV N_WRITE_ERR_CODE, AX ;AN000; Yes! Save the error code
575 .ENDIF ;AN000;
576 .ENDIF ;AN000;
577 RET ;AN000;
578 ;
579WRITE_LINE_ROUTINE ENDP ;AN000;
580;**************************************************************************
581;
582; SAVE_FILE_ROUTINE: Empty the data in the buffer being used to create
583; the file and then close the file.
584;
585; INPUT:
586; BX - The address of the string containing the file name.
587;
588; OUTPUT: CY = 0: No error was encountered.
589; CY = 1: An error was encountered.
590; AX will contain the code of the error which occured.
591;
592; OPERATION: The routine will check to see if there is any data left in
593; the buffer. If there is, the data is written to the file being
594; created. The file is then closed. If errors were encountered at
595; anytime during the create process, then the carry flag will be set
596; and the error code will be returned in AX.
597;
598;**************************************************************************
599PUBLIC SAVE_FILE_ROUTINE ;AN000;
600SAVE_FILE_ROUTINE PROC FAR ;AN000;
601 ;
602 .IF < N_WRITE_ERR_CODE NE 0 > ;AN000; Has an error been encountered?
603 MOV DI, BX ;AN000; Yes! Erase the file.
604 CALL POS_ZERO ;AN000; Make string into an ASCII-Z string
605 MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors
606 MOV DX, DI ;AN000; Get the address of the string
607 ADD DX, 2 ;AN000; Advance pointer past length word
608 MOV AH, 41H ;AN000; DOS function for erasing a file
609 DOSCALL ;AN000; Erase the file
610 .ELSE ;AN000; Otherwise, if no error.
611 MOV BX, N_WRITE_HANDLE ;AN000; Get the file handle
612 MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors
613 MOV AH, 3EH ;AN000; DOS function for closing a file
614 DOSCALL ;AN000; Close the file
615 .IF < C > ;AN000; Error closing the file?
616 MOV N_WRITE_ERR_CODE, AX ;AN000; Yes! Save the error code
617 .ENDIF ;AN000;
618 .ENDIF ;AN000;
619 ;
620 MOV AX, N_WRITE_ERR_CODE ;AN000; Return the error code
621 .IF < N_WRITE_ERR_CODE NE 0 > ;AN000; Have errors been encountered?
622 STC ;AN000; Yes! Set the carry flag
623 .ELSE ;AN000; No!
624 CLC ;AN000; Clear the carry flag
625 .ENDIF ;AN000;
626 ;
627 RET ;AN000;
628 ;
629SAVE_FILE_ROUTINE ENDP ;AN000;
630;****************************************************************************
631;
632; EXEC_PROGRAM_ROUTINE: Loads another program into memory and begins
633; execution.
634;
635; INPUT: child = Name of the program to execute (ASCII-N format)
636; name_com = The command line to be passed to parm_block
637; parm_block = Parameter block for child program.
638; re_dir = Flag indicating whether to redirect the output or not.
639; = 1: Redirect the output.
640; = 0: Don't redirect the output.
641;
642; OUTPUT: CY = 0: Successful
643; CY = 1: Error - AX has the error code.
644;
645; OPERATION: The command line to be passed to the parameter block is
646; copied to the command buffer specified for the parameter block and
647; a carrage return is appended to the end of the buffer. (The
648; command line length can be zero.
649;
650; The segment offsets in the parameter block are defined and DOS
651; function call 29H is performed to set up the default FCB's.
652;
653; DOS function call 4Bh is performed to load and execute the
654; specified child program. The contents of SS and SP are destroyed
655; during the call, so they must be save and restored later. When the
656; parent program (SELECT) gets control, all available memory is
657; allocated to it. It is assumed that memory has been freed (Function
658; call 4Ah - FREE_MEM) before invoking this function.
659;
660;************************************************************************
661
662PUBLIC EXEC_PROGRAM_ROUTINE ;AN000;
663EXEC_PROGRAM_ROUTINE PROC FAR ;AN000;
664 ;
665 ;
666 EX_CHILD EQU [BP]+12 ;AN000; Equates for temporary variables
667 EX_NAME_COM EQU [BP]+10 ;AN000;
668 EX_PARM_BLOCK EQU [BP]+8 ;AN000;
669 EX_RE_DIR EQU [BP]+6 ;AN000;
670 ;
671 MOV SUB_PROGRAM, TRUE ;AN000;
672 ;
673 PUSH BP ;AN000; Save base pointer
674 MOV BP, SP ;AN000; Set up pointer for temp. variables
675 ;
676 PUSH DS ;AN000; Save the segment registers
677 PUSH ES ;AN000;
678 ;
679 MOV AH,2FH ;AC000;JW
680 DOSCALL ;AC000;JW get DTA address
681 PUSH ES ;AC000;JW save DTA seg
682 PUSH BX ;AC000;JW save DTA off
683 ;
684 PUSH DS ;AN000;
685 POP ES ;AN000; Point ES to the current data segment
686 ;
687 .IF < <WORD PTR EX_RE_DIR> EQ EXEC_DIR > ;AN000;
688 MOV AH, 3EH ;AN000; Close Stdout
689 MOV BX, STDOUT ;AN000;
690 DOSCALL ;AN000;
691 MOV DX, OFFSET NULL_DEVICE ;AN000; Open the NULL device
692 MOV AX, 3D01H ;AN000;
693 DOSCALL ;AN000;
694 MOV AH, 3EH ;AN000; Close Stderr
695 MOV BX, STDERR ;AN000;
696 DOSCALL ;AN000;
697 MOV DX, OFFSET NULL_DEVICE ;AN000; Open the NULL device
698 MOV AX, 3D01H ;AN000;
699 DOSCALL ;AN000;
700 .ENDIF ;AN000;
701 ;
702 ;
703 MOV SI, EX_NAME_COM ;AN000; Get the address of the command line
704 MOV CX, WORD PTR [SI] ;AN000; Get the length of the command line
705 MOV BYTE PTR CMD_BUFF, CL ;AN000; Store the lenth of the string
706 MOV DI, OFFSET CMD_BUFF+1 ;AN000; Location to place the string
707 ADD SI, 2 ;AN000; Adjust pointer for length word
708 CLD ;AN000; Move in the forward direction
709 REP MOVSB ;AN000; Copy the string
710 MOV BYTE PTR [DI], 0DH ;AN000; Place a carriage return at the end.
711 ;
712 MOV DI, EX_CHILD ;AN000; Get the address of the program name string
713 CALL POS_ZERO ;AN000; Turn into an ASCII-Z string
714 MOV SI,EX_PARM_BLOCK ;AN000; Address of the parameters
715 MOV AH,62H ;AN000; DOS Function number for getting the PSP segment
716 DOSCALL ;AN000; Get the current PSP segment
717 ;
718 MOV [SI]+8, BX ;AN000; Store PSP segment in the parm block
719 MOV [SI]+12, BX ;AN000; These are the FCB segments
720 MOV AX, DATA ;AN000; Get the address of the data segment
721 MOV [SI]+4, AX ;AN000; Segment of the command line
722 ;
723 MOV ES, BX ;AN000; ES:DI points to the FCB to load
724 MOV DI, 5CH ;AN000; First FCB to load
725 MOV BX, SI ;AN000; Move the address of the parm block
726 MOV SI, [BX]+2 ;AN000; Get the address of the command line
727 INC SI ;AN000; Skip the length byte
728 MOV AX, 2900H ;AN000; DOS Function for parsing a command line
729 DOSCALL ;AN000; Parse the command line
730 MOV AX, 2900H ;AN000;
731 MOV DI, 6CH ;AN000; ES:DI points to the second FCB
732 DOSCALL ;AN000; Parse the second filename
733 ;
734;INT 4BH DESTROYS SS,SP ;
735 MOV WORD PTR SAVE_AREA, SP ;AN000; Save the stack segment and pointer
736 MOV WORD PTR SAVE_AREA[2], SS ;AN000;
737 ;
738 MOV FIRST_TRY,TRUE ;AN000;DT initialize variables
739 MOV EXEC_DEALLOC,FALSE ;AN000;DT
740 MOV EXEC_DEHELP,FALSE ;AN000;DT
741 ;
742 MOV INT_24_ERROR, 0 ;AN000; Zero the number of critical errors
743 PUSH DS ;AN000; Save the current data segment
744 POP ES ;AN000; Point ES to the current data segment
745 MOV DX, EX_CHILD ;AN000; Get the string with the name of the sub-program
746 ADD DX, 2 ;AN000; Adjust pointer passed length word
747 MOV AX,4B00H ;AN000; DOS Function number of executing a sub-program
748 PUSH BX ;AN000;DT
749 DOSCALL ;AN000; Fork to the sub-process
750 POP BX ;AN000;DT
751 .IF < c > ;AN000;DT
752 MOV EXEC_ERR,TRUE ;AN000;DT
753 .ELSE ;AN000;DT
754 MOV EXEC_ERR,FALSE ;AN000;DT
755 .ENDIF ;AN000;DT
756;RESTORE REGISTERS ;
757 MOV AX,DATA ;AN000; Restore the data register first
758 MOV DS,AX ;AN000; Load the data segment register
759 MOV ES,AX ;AN000;
760 CLI ;AN000; Turn off interrupts while setting SS
761 MOV SS,WORD PTR SAVE_AREA[2] ;AN000; Restore the stack segment and pointer
762 MOV SP,WORD PTR SAVE_AREA ;AN000;
763 STI ;AN000; Turn interrupts on again.
764 CALL FAR PTR HOOK_INT_24 ;AN000;
765 ;
766 .IF < <WORD PTR EX_RE_DIR> EQ EXEC_DIR > ;AN000; Redirect Stdout?
767 MOV AH, 3EH ;AN000; Close Stdout.
768 MOV BX, 1 ;AN000;
769 DOSCALL ;AN000;
770 MOV DX, OFFSET CON_DEVICE ;AN000; Open CON as stdout.
771 MOV AX, 3D01H ;AN000;
772 DOSCALL ;AN000;
773 MOV AH, 3EH ;AN000; Close Stderr.
774 MOV BX, 2 ;AN000;
775 DOSCALL ;AN000;
776 MOV DX, OFFSET CON_DEVICE ;AN000; Open CON as stdout.
777 MOV AX, 3D01H ;AN000;
778 DOSCALL ;AN000;
779 .ENDIF ;AN000;
780 ;
781 MOV AH,1AH ;AN000;JW
782 POP DX ;AN000;JW get old DTA off
783 POP DS ;AN000;JW get old DTA seg
784 DOSCALL ;AN000;JW restore the DTA address
785 ;
786 POP ES ;AN000; Restore all the registers.
787 POP DS ;AN000;
788 POP BP ;AN000; Restore the base pointer
789 ;
790 MOV AH, 4DH ;AN000; Get the return code from the sub-process
791 DOSCALL ;AN000;
792 .IF < AX NE 0 > or ;AN000; SAR;If not zero...
793 .IF < EXEC_ERR eq TRUE > ;AN000; SAR
794 .THEN ;AN000; SAR
795 MOV SUB_ERROR,AL ;AN000;
796 STC ;AN000; Indicate there was an error
797 .ELSE ;AN000; Otherwise...
798 MOV SUB_ERROR,0 ;AN000;
799 CLC ;AN000; No error.
800 .ENDIF ;AN000;
801 MOV SUB_PROGRAM, FALSE ;AN000;
802 MOV EXEC_FDISK, FALSE ;AN000;DT reset FDISK flag
803 ;
804 RET 8 ;AN000; Return, popping the parameters.
805EXEC_PROGRAM_ROUTINE ENDP ;AN000;
806;************************************************************************
807;
808; GET_CNTY_DEF_ROUTINE: Get country, keyboard and codepage for the
809; specified entry from the CTY_TABLE.
810;
811; INPUT:
812; BX = 1: Use CTY_TAB_A
813; = 2: Use CTY_TAB_B
814; AX = index into country list table
815;
816; OUTPUT:
817; N_COUNTRY = Country code
818; N_KYBD_VAL = 0: Keyboard code is not valid
819; = 1: Keyboard code is valid
820; S_KEYBOARD = Keyboard code (ASCII-N format)
821; N_CP_PRI = Primary code page
822; N_CP_SEC = Secondary code page
823; N_DESIGNATES = Number of disignates
824; N_CPSW = Cpsw status
825; N_CTY_RES = Reserved
826;
827;
828; OPERATION: The country code, keyboard, primary codepage and the
829; seondary codepage from the CTY_TABLE for the specified index is
830; returned as spedified above.
831;
832; Note: Index of the first item is the table is 1.
833;
834;****************************************************************************
835PUBLIC GET_CNTY_DEF_ROUTINE ;AN000;
836GET_CNTY_DEF_ROUTINE PROC FAR ;AN000;
837 ; AX contains the search's start index
838 SUB AX, 1 ;AN000; Make the first index 0
839 MOV DX, TYPE CTY_DEF ;AN000; There are 9 bytes per entry
840 MUL DX ;AN000; Calculate the starting offset
841 MOV SI, AX ;AN000; Move the address into an index reg
842 ;
843 .IF < BX EQ 1 > ;AN000; BX contains which table to search
844 ADD SI, OFFSET CTY_TAB_A_1 ;AN000; Use the first table
845 .ELSE ;AN000;
846 ADD SI, OFFSET CTY_TAB_B_1 ;AN000; Use the second table
847 .ENDIF ;AN000;
848 ;
849 COPY_WORD N_COUNTRY, [SI+0] ;AN000; Get the counrty code
850 COPY_BYTE N_KYBD_VAL, [SI+2] ;AN000; See if the keyboard is valid
851 MOV S_KEYBOARD, 2 ;AN000; Length of the keyboard code string
852 COPY_WORD S_KEYBOARD[2], [SI+3] ;AN000; Get the keyboard code string
853 COPY_WORD N_CP_PRI, [SI+5] ;AN000; Get the primary code page
854 COPY_WORD N_CP_SEC, [SI+7] ;AN000; Get the secondary code page
855 COPY_WORD N_DESIGNATES, [SI+9] ;AN000; Get the number of designates
856 COPY_WORD N_CPSW, [SI+11] ;AN000; Get the code page switching status
857 COPY_BYTE ALT_KYB_ID, [SI+13] ;AN000; Get default alternate keyboard
858 COPY_BYTE N_CTY_RES, [SI+14] ;AN000; A reserved byte
859
860 COPY_WORD I_KYBD_ALT,2 ;AC090;JW
861 RET ;AN000;
862
863GET_CNTY_DEF_ROUTINE ENDP ;AN000;
864;****************************************************************************
865;
866; GET_CNTY_INDEX_ROUTINE: Scan CTY_TABLE for the specified country code and
867; return index of country code into the table.
868;
869; INPUT:
870; CX = The country code
871;
872; OUTPUT:
873; DX = 1: Country code is in table CTY_TAB_A
874; = 2: Country code is in table CTY_TAB_B
875; BX = The index into the country list.
876;
877; OPERATION: The CTY_TABLE is scanned for the specified country code and
878; the index into the table is returned.
879;
880; Note: The index of the first item in the table is 1.
881;
882;************************************************************************
883PUBLIC GET_CNTY_INDEX_ROUTINE ;AN000;
884GET_CNTY_INDEX_ROUTINE PROC FAR ;AN000;
885 ;
886 MOV DX, 1 ;AN000; Which table to search
887 MOV AH, 0 ;AN000; Clear the high byte
888 .WHILE < DX LE 2 > ;AN000; Search the TWO tables
889 .IF < DX EQ 1 > ;AN000; Are we searching the first table?
890 MOV SI, OFFSET CTY_TAB_A_1 ;AN000; Yes! Get the offset of the table
891 MOV AL, CTY_TAB_A ;AN000; Get the number of entries
892 .ELSE ;AN000; Otherwise...
893 MOV SI, OFFSET CTY_TAB_B_1 ;AN000; Get the offset of the second table
894 MOV AL, CTY_TAB_B ;AN000; Get the number of entries in this table
895 .ENDIF ;AN000;
896 MOV BX, 1 ;AN000; Index currently being scaned
897 ;
898 ; CX contains the country code.
899 .WHILE < <WORD PTR [SI]> NE CX> AND ;AN000; Search until this code is found
900 .WHILE < BX LE AX > ;AN000; And while there are still table entries
901 INC BX ;AN000; Increment the index into the table
902 ADD SI, TYPE CTY_DEF ;AN000; Point to the next table record
903 .ENDWHILE ;AN000;
904 ;
905 .IF < BX GT AX > ;AN000; Index is finished for this table
906 INC DX ;AN000; Examine the next table
907 .ELSE ;AN000;
908 .LEAVE ;AN000; Exit the while loop
909 .ENDIF ;AN000;
910 ;
911 .ENDWHILE ;AN000;
912 RET ;AN000;
913GET_CNTY_INDEX_ROUTINE ENDP ;AN000;
914;****************************************************************************
915;
916; GET_KYBD_INDEX_ROUTINE: Scan KYBD_TABLE for the specified keyboard code and
917; return index of keyboard code in the table and the
918; alternate keyboard indicator.
919;
920; INPUT:
921; DI = The offset of an ASCII-N string containing the keyboard code.
922;
923; OUTPUT:
924; DX = 1: Keyboard is in table KYBD_TAB_A
925; = 2: Keyboard is in table KYBD_TAB_B
926; BX = The index into keyboard table.
927; AL = 0: No alternate keyboard
928; = 1: Alternate keyboard present
929;
930; OPERATION: The KYBD_TABLE is scanned for the specifies keyboard code and
931; the index into the table is returned.
932;
933; Note: The index of the first item in the table is 1.
934;
935;************************************************************************
936PUBLIC GET_KYBD_INDEX_ROUTINE ;AN000;
937GET_KYBD_INDEX_ROUTINE PROC FAR ;AN000;
938 ;
939 MOV BX, 0 ;AN000; Zero the table index
940 MOV DX, 1 ;AN000; Which table to search
941 MOV AH, 0 ;AN000; Clear high byte to use 16-bit value
942 .WHILE < DX LE 2 > ;AN000;
943 .IF < DX EQ 1 > ;AN000;
944 MOV SI, OFFSET KYBD_TAB_A_1 ;AN000; Get the offset of the table
945 MOV AL, KYBD_TAB_A ;AN000; Get the number of entries
946 .ELSE ;AN000;
947 MOV SI, OFFSET KYBD_TAB_B_1 ;AN000; Get the offset of the second table
948 MOV AL, KYBD_TAB_B ;AN000; Get the number of entries in this table
949 .ENDIF ;AN000;
950 MOV BX, 1 ;AN000; Index currently being scaned
951 ;
952 MOV CX, WORD PTR [DI+2] ;AN000; Get the keyboard code
953 .WHILE < <WORD PTR [SI]> NE CX> AND ;AN000;
954 .WHILE < BX LE AX > ;AN000;
955 INC BX ;AN000;
956 ADD SI, TYPE KYB_DEF ;AN000;
957 .ENDWHILE ;AN000;
958 ;
959 .IF < BX GT AX > ;AN000; Index is finished for this table
960 INC DX ;AN000; Examine the next table
961 .ELSE ;AN000;
962 MOV AL, BYTE PTR [SI+2] ;AN000; Get the alternate keyboard flag
963 .LEAVE ;AN000; Exit the while loop
964 .ENDIF ;AN000;
965 ;
966 .ENDWHILE ;AN000;
967 RET ;AN000;
968 ;
969GET_KYBD_INDEX_ROUTINE ENDP ;AN000;
970;************************************************************************;
971;
972; GET_KYBD_ROUTINE: Get the keyboard code and the alternate keyboard
973; indicator from the KYBD_TABLE for the item specified by the index
974; into the keyboard table.
975;
976; INPUT:
977; CX = 1: Keyboard code is in table KYBD_TAB_A
978; = 2: Keyboard code is is table KYBD_TAB_B
979; AX = index into the keyboard table.
980; DI = Address of the keyboard code. (ASCII-N format)
981;
982; OUTPUT:
983; AL = 0: No alternate keyboard
984; = 1: Alternate keyboard present
985;
986; OPERATION: The keyboard code from the KYBD_TABLE for the specified
987; index item is returned. Also, the alternate keyboard present
988; variable is updated.
989;
990; Note: Index of the first item in the table is 1.
991;
992;****************************************************************************
993PUBLIC GET_KYBD_ROUTINE ;AN000;
994GET_KYBD_ROUTINE PROC FAR ;AN000;
995 ; AX contins the search's start index
996 SUB AX, 1 ;AN000; Make the first index 0
997 MOV DX, TYPE KYB_DEF ;AN000; There are 3 bytes per entry
998 MUL DX ;AN000; Calculate the offset into the table
999 MOV SI, AX ;AN000; Move the address into an index reg
1000 .IF < CX EQ 1> ;AN000; CX Contains which table to search
1001 ADD SI, OFFSET KYBD_TAB_A_1 ;AN000;
1002 .ELSE ;AN000;
1003 ADD SI, OFFSET KYBD_TAB_B_1 ;AN000;
1004 .ENDIF ;AN000;
1005 ;
1006 MOV WORD PTR [DI], 2 ;AN000; Length of the string
1007 COPY_WORD [DI+2], [SI] ;AN000; Get the keyboard name
1008 MOV AL, [SI+2] ;AN000; See if there is an alternate keyboard
1009 RET ;AN000;
1010 ;
1011GET_KYBD_ROUTINE ENDP ;AN000;
1012;;************************************************************************
1013;;
1014;; CHK_EX_MEM_ROUTINE: Check if the system supports expanded memory.
1015;;
1016;; INPUT:
1017;; None.
1018;;
1019;; OUTPUT:
1020;; SI = 0: Expanded memory is NOT supported.
1021;; = 1: Expanded memory is supported.
1022;; BX = 0: XMA card
1023;; = 1: MODEL 80
1024;;
1025;; OPERATION: A call to the system services (INT 15H, AH = C0H) is performed
1026;; to get the system configuration parameters. (model byte).
1027;;
1028;; The Personal System/2 Model 80 (model byte = 0F8h) always support
1029;; expanded memory.
1030;;
1031;; The Personal System/2 Models 50 and 60 (model byte = 0FCh) support
1032;; expanded memory if the CATSKILL 2 is present. The CATSKILL 2 card has
1033;; the identity number of F7FEh. F7H is read through the port address
1034;; 101h and FEH is read through port 100H
1035;;
1036;; The PS2 50/60 also support expanded memory if the HOLSTER card is
1037;; is present (id = FEFEh).
1038;;
1039;; AT's (and some XT's ?) support expanded memory if the CATSKILL 1
1040;; (XMA) card is present.
1041;;
1042;; All other models do not support expanded memory.
1043;;
1044;;************************************************************************
1045SLOT_SETUP EQU 08h ;AN000;Mask to put the desired adapter @RH2
1046CARD_ID_LO EQU 100H ;AN000;PS/2 Adapter card id low and @RH2
1047CARD_ID_HI EQU 101H ;AN000; high bytes - read only @RH2
1048 ;Card IDs read from port 100,101 @RH2
1049XMAA_CARD_ID EQU 0FEF7h ;AN000; XMA/A Card ID @RH2
1050HLST_CARD_ID EQU 0FEFEh ;AN000; HOLSTER card id JW
1051MODE_REG EQU 31A7H ;AN000; Mode register
1052TTPOINTER EQU 31A0H ;AN000; Translate Table Pointer (word)
1053 ;
1054NUM_OF_SLOTS EQU 8 ;AN000;
1055 ;
1056PUBLIC CHK_EX_MEM_ROUTINE ;AN000;
1057CHK_EX_MEM_ROUTINE PROC FAR ;AN000;
1058 ;
1059 PUSH ES ;AN000;
1060 MOV AH, 0C0H ;AN000; Function number to get the model byte
1061 INT 15H ;AN000;
1062 .IF < AH eq 80H > ;AN000;IF AH = 80H
1063 MOV SI, 0 ;AN000;then this is a PC or PCjr. No Expanded memory
1064 MOV BX, 0 ;AN000;JW not a model 80
1065 .ELSE near ;AN000;
1066 .IF < AH ne 086H > ;AN000;If not an old XT or AT
1067 MOV AH, BYTE PTR ES:[BX]+2 ;AN000; Get the model byte
1068 MOV AL, BYTE PTR ES:[BX]+3 ;AN000; Get the sub-model byte
1069 .ENDIF ;AN000;
1070 .IF < AH eq 0F8H> ;AN000; Is this a model 80?
1071 MOV SI, 1 ;AN000; Yes! Expanded memory supported
1072 MOV BX, 1 ;AN000;JW
1073 .ELSEIF < AH eq 0FCH > and ;AN000; Is this a model 50 or 60?
1074 .IF < AL eq 04 > or ;AN000;
1075 .IF < AL eq 05 > ;AN000;
1076 ;-------------------------------------
1077 ; Search for XMA/A cards �
1078 ;-------------------------------------
1079 XOR CX,CX ;AN000;Check all slots starting at 0 @RH2
1080 MOV BX,0 ;AN000;JW say not a model 80
1081 .REPEAT ;AN000;
1082 ;
1083 MOV AL,CL ;AN000;Enable the specific slot by ORing @RH2
1084 OR AL,SLOT_SETUP ;AN000; the slot (bits 0-2) with the @RH2
1085 OUT 96H,AL ;AN000; setup flag (bit 3). @RH2
1086 ;
1087 MOV DX,CARD_ID_LO ;AN000;Read the signature ID of the card @RH2
1088 IN AL,DX ;AN000; @RH2
1089 XCHG AL,AH ;AN000; @RH2
1090 MOV DX,CARD_ID_HI ;AN000; @RH2
1091 IN AL,DX ;AN000; @RH2
1092 ;
1093 .IF < AX eq XMAA_CARD_ID > or ;AN000;
1094 .IF < AX eq HLST_CARD_ID > ;AN000;JW
1095 MOV SI, 1 ;AN000; Yes! Expanded memory supported
1096 .LEAVE ;AN000;
1097 .ENDIF ;AN000;
1098 ;
1099 .IF < CL eq NUM_OF_SLOTS > ;AN000;
1100 MOV SI, 0 ;AN000; No! Expanded memoory isn't supported
1101 .LEAVE ;AN000;
1102 .ENDIF ;AN000;
1103 ;
1104 INC CL ;AN000;Check next adapter slot @RH2
1105 ;
1106 .UNTIL ;AN000;
1107 XOR AX,AX ;AN000;JW
1108 OUT 96H,AL ;AN000;JW Reset port to neutral state
1109 ;
1110 .ELSE ;AN000; AT or XT
1111 ;-------------------------------------
1112 ; Search for XMA cards �
1113 ;-------------------------------------
1114 MOV DX,MODE_REG ;AN000;SAVE CONTENTS OF MODE REG
1115 IN AL,DX ;AN000;
1116 PUSH AX ;AN000;
1117 ;
1118 MOV AX,0AA55H ;AN000;DATA PATTERN (IN REAL MODE)
1119 ;BE CERTAIN MODE REG GETS
1120 ;REAL MODE
1121 MOV DX,MODE_REG ;AN000;I/O TO MODE REG
1122 OUT DX,AL ;AN000;WRITE PATTERN
1123 MOV DX,TTPOINTER + 1 ;AN000;I/O TO TT POINTER (ODD ADDR)
1124 XCHG AL,AH ;AN000;CHRG BUS WITH INVERSE PATTERN
1125 OUT DX,AL ;AN000;WRITE IT
1126 MOV DX,MODE_REG ;AN000;
1127 IN AL,DX ;AN000;READ BACK MODE REG
1128 XOR AL,AH ;AN000;
1129 AND AL,0FH ;AN000;MASK OFF UNUSED BITS
1130 ;ZERO FLAG = 0 IF ERROR
1131 POP AX ;AN000;
1132 PUSHF ;AN000;SAVE FLAGS
1133 MOV DX,MODE_REG ;AN000;
1134 OUT DX,AL ;AN000;RESTORE MODE REG TO INITIAL STATE
1135 POPF ;AN000;RESTORE FLAGS
1136 .IF < z > ;AN000;
1137 MOV SI,1 ;AN000;XMA card present
1138 .ELSE ;AN000;
1139 MOV SI,0 ;AN000;no XMA card present
1140 .ENDIF ;AN000;
1141 MOV BX,0 ;AN000;not a model 80
1142 .ENDIF ;AN000;
1143 .ENDIF ;AN000;
1144 POP ES ;AN000;
1145 RET ;AN000;
1146CHK_EX_MEM_ROUTINE ENDP ;AN000;
1147;****************************************************************************
1148;
1149; GET_PRINTER_PARAMS_ROUTINE: Get parameters for specified printer.
1150;
1151; INPUT:
1152; AX = The printer number.
1153; BX = The number of the port to retrieve the information on.
1154; If var_port = 0, the information that is returned is
1155; that which corresponds to var_prt.
1156; BX = 0 : Get the information on printer number VAR_PRT
1157; = 1 : Get the information for the printer attached to LPT1
1158; = 2 : Get the information for the printer attached to LPT2
1159; = 3 : Get the information for the printer attached to LPT3
1160; = 4 : Get the information for the printer attached to COM1
1161; = 5 : Get the information for the printer attached to COM2
1162; = 6 : Get the information for the printer attached to COM3
1163; = 7 : Get the information for the printer attached to COM4
1164;
1165; OUTPUT:
1166; AX = 1: Printer information is valid
1167; = 0: Printer not valid: default values returned
1168;
1169; OPERATION: Printer information for the specified printer is returned.
1170; If the specified printer is not defined, default values will be
1171; returned.
1172; I_PRINTER = Index into printer list (16 bit variable) : default 1
1173; N_PRINTER_TYPE = P: Parallel printer
1174; = S: Serial printer
1175; I_PORT = Port number (16 bit variable) : default 1
1176; I_REDIRECT = Redirection port number (16 bit variable) : default 1
1177; S_MODE_PARM = Mode parameters - ASCII-N format
1178; S_CP_DRIVER = Code page driver parameters - ASCII-N format
1179; S_CP_PREPARE = Code prepare parameters - ASCII-N format
1180; S_GRAPH_PARM = Graphics parameters - ASCII-N format
1181;
1182; The structures of printer information are searched for the one with
1183; the same number as specified by AX. If found, the information
1184; in that structure is returned in the variables listed above.
1185;
1186;****************************************************************************
1187PUBLIC GET_PRINTER_PARAMS_ROUTINE ;AN000;
1188GET_PRINTER_PARAMS_ROUTINE PROC FAR ;AN000;
1189
1190 .IF < BX NE 0 > ;AN000;
1191 DEC BX ;AN000;
1192 MOV AX, TYPE PRINTER_DEF ;AN000;
1193 MUL BX ;AN000;
1194 MOV SI, AX ;AN000;
1195 .IF < PRINTER_TABLES[SI].PRINTER_DATA_VALID EQ 1 > ;AN000;
1196 JMP COPY_INFO ;AN000;
1197 .ELSE ;AN000;
1198 JMP RETURN_DEFAULTS ;AN000;
1199 .ENDIF ;AN000;
1200 .ELSE ;AN000;
1201 MOV SI, 0 ;AN000; Index into the printer table
1202 MOV BX, 1 ;AN000; Which structure is being searched
1203 .WHILE < BX BE 7 > ;AN000; Search the seven structures
1204 .IF < PRINTER_TABLES[SI].PRINTER_TAB_NUM EQ AX > AND ;AN000; Does the printer number match?
1205 .IF < PRINTER_TABLES[SI].PRINTER_DATA_VALID EQ 1 > ;AN000; And is this data valid?
1206 JMP COPY_INFO ;AN000;
1207 .ENDIF ;AN000;
1208 ADD SI, TYPE PRINTER_DEF ;AN000; Search the next structure
1209 INC BX ;AN000;
1210 .ENDWHILE ;AN000;
1211RETURN_DEFAULTS: ;AN000;
1212 MOV I_PRINTER, 1 ;AN000; Yes! Return the default information
1213 MOV I_PORT, 1 ;AN000;
1214 MOV I_REDIRECT, 1 ;AN000;
1215 MOV S_MODE_PARM, 0 ;AN000;
1216 MOV S_CP_DRIVER, 0 ;AN000;
1217 MOV S_CP_PREPARE, 0 ;AN000;
1218 MOV S_GRAPH_PARM, 0 ;AN000;
1219 MOV AX, 0 ;AN000; Indicate that the default values are being returned
1220 JMP EXIT_GET_PARAMS ;AN000;
1221 .ENDIF ;AN000;
1222
1223COPY_INFO: ;AN000;
1224 COPY_WORD I_PRINTER, PRINTER_TABLES[SI].PRINTER_INDEX ;AN000; Copy the data out of the structure
1225 COPY_BYTE N_PRINTER_TYPE, PRINTER_TABLES[SI].PRINTER_TYPE ;AN000;
1226 COPY_WORD I_PORT, PRINTER_TABLES[SI].PORT_NUMBER ;AN000;
1227 COPY_WORD I_REDIRECT, PRINTER_TABLES[SI].REDIRECTION_PORT ;AN000;
1228 PUSH SI ;AN000;
1229 COPY_STRING S_MODE_PARM, 40, PRINTER_TABLES[SI].MODE_PARMS ;AN000;
1230 POP SI ;AN000;
1231 PUSH SI ;AN000;
1232 COPY_STRING S_CP_DRIVER, 22, PRINTER_TABLES[SI].CODE_DRIVER ;AN000;
1233 POP SI ;AN000;
1234 PUSH SI ;AN000;
1235 COPY_STRING S_CP_PREPARE, 12, PRINTER_TABLES[SI].CODE_PREPARE ;AN000;
1236 POP SI ;AN000;
1237 PUSH SI ;AN000;
1238 COPY_STRING S_GRAPH_PARM, 20, PRINTER_TABLES[SI].GRAPHICS_PARMS ;AN000;
1239 POP SI ;AN000;
1240 MOV AX, 1 ;AN000; Return that the data is valid
1241
1242EXIT_GET_PARAMS: ;AN000;
1243 RET ;AN000;
1244 ;
1245GET_PRINTER_PARAMS_ROUTINE ENDP ;AN000;
1246;****************************************************************************
1247;
1248; SAVE_PRINTER_PARAMS_ROUTINE: Save the printer information in the printer
1249; structures.
1250;
1251; INPUT:
1252; AX = The printer number.
1253;
1254; OUTPUT:
1255; None.
1256;
1257; OPERATION: Printer information for the specified printer is stored.
1258; I_PRINTER = Index into printer list (16 bit variable) : default 1
1259; N_PRINTER_TYPE = P: Parallel printer
1260; = S: Serial printer
1261; I_PORT = Port number (16 bit variable) : default 1
1262; I_REDIRECT = Redirection port number (16 bit variable) : default 1
1263; S_MODE_PARM = Mode parameters - ASCII-N format
1264; S_CP_DRIVER = Code page driver parameters - ASCII-N format
1265; S_CP_PREPARE = Code prepare parameters - ASCII-N format
1266; S_GRAPH_PARM = Graphics parameters - ASCII-N format
1267;
1268; The information is stored in the structures according to the type
1269; and port number of this printer. The first three structures are for
1270; LPT1 - LPT3, while the next four are for COM1 - COM2.
1271;
1272;****************************************************************************
1273PUBLIC SAVE_PRINTER_PARAMS_ROUTINE ;AN000;
1274SAVE_PRINTER_PARAMS_ROUTINE PROC FAR ;AN000;
1275
1276 PUSH AX ;AN000; Save the printer number
1277 MOV AX, TYPE PRINTER_DEF ;AN000; Get the size of each structure
1278 MOV SI, I_PORT ;AN000; Get the port number
1279 .IF < N_PRINTER_TYPE EQ 'S'> ;AN000; Is this a serial port?
1280 ADD SI, 3 ;AN000; Yes! Store in the later 4 structures
1281 .ENDIF ;AN000;
1282 DEC SI ;AN000; Make the first index a 0
1283 MUL SI ;AN000; Calculate the address of the structure
1284 MOV BX, AX ;AN000; Put address into an index register
1285 COPY_WORD PRINTER_TABLES[BX].PRINTER_INDEX, I_PRINTER ;AN000; Copy the data into the structure
1286 COPY_BYTE PRINTER_TABLES[BX].PRINTER_TYPE, N_PRINTER_TYPE;AN000;
1287 COPY_WORD PRINTER_TABLES[BX].PORT_NUMBER, I_PORT ;AN000;
1288 COPY_WORD PRINTER_TABLES[BX].REDIRECTION_PORT, I_REDIRECT ;AN000;
1289 COPY_STRING PRINTER_TABLES[BX].MODE_PARMS, 40, S_MODE_PARM ;AC000;JW
1290 COPY_STRING PRINTER_TABLES[BX].CODE_DRIVER, 22, S_CP_DRIVER ;AN000;
1291 COPY_STRING PRINTER_TABLES[BX].CODE_PREPARE, 12, S_CP_PREPARE ;AN000;
1292 COPY_STRING PRINTER_TABLES[BX].GRAPHICS_PARMS, 20, S_GRAPH_PARM ;AN000;
1293 .IF <I_PORT EQ 1 > ;AN029;
1294 COPY_STRING S_GRAPHICS,M_GRAPHICS,S_GRAPH_PARM ;AN029;
1295 .ENDIF ;AN029;
1296 POP AX ;AN000; Restore the printer number
1297 MOV PRINTER_TABLES[BX].PRINTER_TAB_NUM, AX ;AN000; Save the number
1298 MOV PRINTER_TABLES[BX].PRINTER_DATA_VALID, 1 ;AN000; Indicate that the data is valid
1299
1300 MOV SI, 0 ;AN000;
1301 MOV CX, 1 ;AN000;
1302 .WHILE < CX BE 7 > ;AN000;
1303 .IF < PRINTER_TABLES[SI].PRINTER_TAB_NUM EQ AX > AND ;AN000;
1304 .IF < SI NE BX > ;AN000;
1305 MOV PRINTER_TABLES[SI].PRINTER_DATA_VALID, 0 ;AN000;
1306 .ENDIF ;AN000;
1307 ADD SI, TYPE PRINTER_DEF ;AN000;
1308 INC CX ;AN000;
1309 .ENDWHILE ;AN000;
1310
1311 RET ;AN000;
1312
1313SAVE_PRINTER_PARAMS_ROUTINE ENDP ;AN000;
1314;****************************************************************************
1315;
1316; DISPLAY_MESSAGE_ROUTINE: Call the message retriever to display a message.
1317;
1318; INPUT:
1319; AX = The number of the message to be displayed. (16 bit value)
1320;
1321; OUTPUT:
1322; If CY = 1, there was an error displaying the message.
1323; If CY = 0, there were no errors.
1324;
1325; OPERATION:
1326;
1327;****************************************************************************
1328PUBLIC DISPLAY_MESSAGE_ROUTINE ;AN000;
1329DISPLAY_MESSAGE_ROUTINE PROC FAR ;AN000; AX already contains the message number
1330 MOV BX, -1 ;AN000; HANDLE -1 ==> USE ONLY DOS FUNCTION 1-12
1331 MOV SI, 0 ;AN000; SUBSTITUTION LIST
1332 MOV CX, 0 ;AN000; SUBSTITUTION COUNT
1333 MOV DL, 00 ;AN000; DOS INT21H FUNCTION FOR INPUT 0==> NO INPUT
1334 MOV DI, 0 ;AN000; INPUT BUFFER IF DL = 0AH
1335 MOV DH, -1 ;AN000; MESSAGE CALL -1==> UTILITY MESSAGE
1336 CALL SYSDISPMSG ;AN000;
1337 RET ;AN000;
1338DISPLAY_MESSAGE_ROUTINE ENDP ;AN000;
1339
1340;****************************************************************************
1341; Procedure for hooking the INT_23_VECTOR into vector table
1342; INPUT:
1343; None.
1344; OUTPUT:
1345; None.
1346;****************************************************************************
1347PUBLIC HOOK_INT_23 ;AN074;SEH
1348HOOK_INT_23 PROC FAR ;AN074;SEH
1349
1350 PUSH AX ;AN074;SEH
1351 PUSH BX ;AN074;SEH
1352 PUSH DX ;AN074;SEH
1353 PUSH ES ;AN074;SEH Save the segment registers.
1354 PUSH DS ;AN074;SEH
1355 PUSHF ;AN074;SEH
1356 ;
1357 MOV AL, 23H ;AN074;SEH Interrupt number to get the vector of
1358 MOV AH, 35H ;AN074;SEH DOS Function number for getting a vector
1359 DOSCALL ;AN074;SEH Get the interrupt vector
1360 MOV WORD PTR OLD_INT_23, BX ;AN074;SEH Save the old vactor offset
1361 MOV AX, ES ;AN074;SEH Get the old vector segment
1362 MOV WORD PTR OLD_INT_23[2], AX ;AN074;SEH Save the old vector segment
1363 PUSH DS ;AN074;SEH Save DS
1364 PUSH CS ;AN074;SEH Point DS to the current code segment
1365 POP DS ;AN074;SEH
1366 MOV DX, OFFSET INT_23_VECTOR ;AN074;SEH Load offset of the new vector
1367 MOV AL, 23H ;AN074;SEH Interrupt number to set
1368 MOV AH, 25H ;AN074;SEH DOS Fn. number for setting a vector
1369 DOSCALL ;AN074;SEH Set the vector
1370 POP DS ;AN074;SEH Restore data segment
1371 ;
1372 POPF ;AN074;SEH
1373 POP DS ;AN074;SEH Restore the registers
1374 POP ES ;AN074;SEH
1375 POP DX ;AN074;SEH
1376 POP BX ;AN074;SEH
1377 POP AX ;AN074;SEH
1378 ;
1379 RET ;AN074;SEH
1380HOOK_INT_23 ENDP ;AN074;SEH
1381
1382;****************************************************************************
1383; Procedure for restoring the old interrupt 23h vector.
1384; INPUT:
1385; None.
1386; OUTPUT:
1387; None.
1388;****************************************************************************
1389PUBLIC RESTORE_INT_23 ;AN074;SEH
1390RESTORE_INT_23 PROC FAR ;AN074;SEH
1391 ;
1392 PUSHF ;AN074;SEH
1393 PUSH AX ;AN074;SEH
1394 PUSH DX ;AN074;SEH
1395 PUSH DS ;AN074;SEH Save the data segment
1396 ;
1397 PUSH DS ;AN074;SEH Save DS
1398 LDS DX, OLD_INT_23 ;AN074;SEH Load the address of the old vector
1399 MOV AH, 25H ;AN074;SEH DOS Fn. number for setting an interrupt vector
1400 MOV AL, 23H ;AN074;SEH Interrupt vector to set
1401 DOSCALL ;AN074;SEH Set the vector
1402 POP DS ;AN074;SEH Restore data segment
1403 ;
1404 POP DS ;AN074;SEH Restore the data segment
1405 POP DX ;AN074;SEH
1406 POP AX ;AN074;SEH
1407 POPF ;AN074;SEH
1408 ;
1409 RET ;AN074;SEH
1410RESTORE_INT_23 ENDP ;AN074;SEH
1411;****************************************************************************
1412; Procedure for hooking the INT_24_VECTOR into vector table
1413; INPUT:
1414; None.
1415; OUTPUT:
1416; None.
1417;****************************************************************************
1418PUBLIC HOOK_INT_24 ;AN000;
1419HOOK_INT_24 PROC FAR ;AN000;
1420
1421 PUSH AX ;AN000;
1422 PUSH BX ;AN000;
1423 PUSH DX ;AN000;
1424 PUSH ES ;AN000; Save the segment registers.
1425 PUSH DS ;AN000;
1426 PUSHF ;AN000;
1427
1428 .IF < INT24_STATUS eq UNHOOKED > ;AN000;
1429
1430 MOV AL, 24H ;AN000; Interrupt number to get the vector of
1431 MOV AH, 35H ;AN000; DOS Function number for getting a vector
1432 DOSCALL ;AN000; Get the interrupt vector
1433 MOV WORD PTR OLD_INT_24, BX ;AN000; Save the old vactor offset
1434 MOV AX, ES ;AN000; Get the old vector segment
1435 MOV WORD PTR OLD_INT_24[2], AX ;AN000; Save the old vector segment
1436 PUSH DS ;AN000; Save DS
1437 PUSH CS ;AN000; Point DS to the current code segment
1438 POP DS ;AN000;
1439 MOV DX, OFFSET INT_24_VECTOR ;AN000; Load offset of the new vector
1440 MOV AL, 24H ;AN000; Interrupt number to set
1441 MOV AH, 25H ;AN000; DOS Fn. number for setting a vector
1442 DOSCALL ;AN000; Set the vector
1443 POP DS ;AN000; Restore data segment
1444 MOV INT24_STATUS,HOOKED ;AN000;
1445
1446 .ENDIF ;AN000;
1447
1448 POPF ;AN000;
1449 POP DS ;AN000; Restore the registers
1450 POP ES ;AN000;
1451 POP DX ;AN000;
1452 POP BX ;AN000;
1453 POP AX ;AN000;
1454
1455 RET ;AN000;
1456HOOK_INT_24 ENDP ;AN000;
1457
1458;****************************************************************************
1459; Procedure for restoring the old interrupt 24h vector.
1460; INPUT:
1461; None.
1462; OUTPUT:
1463; None.
1464;****************************************************************************
1465PUBLIC RESTORE_INT_24 ;AN000;
1466RESTORE_INT_24 PROC FAR ;AN000;
1467
1468 PUSHF ;AN000;
1469 PUSH AX ;AN000;
1470 PUSH DX ;AN000;
1471 PUSH DS ;AN000; Save the data segment
1472
1473 .IF < INT24_STATUS eq HOOKED > ;AN000;
1474
1475 PUSH DS ;AN000; Save DS
1476 LDS DX, OLD_INT_24 ;AN000; Load the address of the old vector
1477 MOV AH, 25H ;AN000; DOS Fn. number for setting an interrupt vector
1478 MOV AL, 24H ;AN000; Interrupt vector to set
1479 DOSCALL ;AN000; Set the vector
1480 POP DS ;AN000; Restore data segment
1481 MOV INT24_STATUS,UNHOOKED ;AN000;
1482
1483 .ENDIF ;AN000;
1484
1485 POP DS ;AN000; Restore the data segment
1486 POP DX ;AN000;
1487 POP AX ;AN000;
1488 POPF ;AN000;
1489
1490 RET ;AN000;
1491RESTORE_INT_24 ENDP ;AN000;
1492;****************************************************************************
1493; Procedure for hooking the INT_2F_VECTOR into vector table
1494; INPUT:
1495; None.
1496; OUTPUT:
1497; None.
1498;****************************************************************************
1499PUBLIC HOOK_INT_2F ;AN000;
1500PUBLIC RESTORE_INT_2F ;AN000;
1501HOOK_INT_2F PROC FAR ;AN000;
1502
1503 PUSH AX ;AN000;
1504 PUSH BX ;AN000;
1505 PUSH DX ;AN000;
1506 PUSH ES ;AN000; Save the segment registers.
1507 PUSH DS ;AN000;
1508 MOV AL, 2FH ;AN000; Interrupt number to get the vector of
1509 MOV AH, 35H ;AN000; DOS Function number for getting a vector
1510 DOSCALL ;AN000; Get the interrupt vector
1511 MOV WORD PTR OLD_INT_2F, BX ;AN000; Save the old vactor offset
1512 MOV AX, ES ;AN000; Get the old vector segment
1513 MOV WORD PTR OLD_INT_2F[2], AX ;AN000; Save the old vector segment
1514 PUSH CS ;AN000; Point DS to the current code segment
1515 POP DS ;AN000;
1516 MOV DX, OFFSET INT_2F_VECTOR ;AN000; Load offset of the new vector
1517 MOV AL, 2FH ;AN000; Interrupt number to set
1518 MOV AH, 25H ;AN000; DOS Fn. number for setting a vector
1519 DOSCALL ;AN000; Set the vector
1520 POP DS ;AN000; Restore the registers
1521 POP ES ;AN000;
1522 POP DX ;AN000;
1523 POP BX ;AN000;
1524 POP AX ;AN000;
1525
1526 RET ;AN000;
1527
1528HOOK_INT_2F ENDP ;AN000;
1529;****************************************************************************
1530; Procedure for restoring the old interrupt 2Fh vector.
1531; INPUT:
1532; None.
1533; OUTPUT:
1534; None.
1535;****************************************************************************
1536RESTORE_INT_2F PROC FAR ;AN000;
1537 PUSHF ;AN000;
1538 PUSH AX ;AN000;
1539 PUSH DX ;AN000;
1540 PUSH DS ;AN000; Save the data segment
1541 LDS DX, OLD_INT_2F ;AN000; Load the address of the old vector
1542 MOV AH, 25H ;AN000; DOS Fn. number for setting an interrupt vector
1543 MOV AL, 2FH ;AN000; Interrupt vector to set
1544 DOSCALL ;AN000; Set the vector
1545 POP DS ;AN000; Restore the data segment
1546 POP DX ;AN000;
1547 POP AX ;AN000;
1548 POPF ;AN000;
1549 RET ;AN000;
1550RESTORE_INT_2F ENDP ;AN000;
1551;****************************************************************************
1552; Procedure for hooking the INT_2F_256KB into vector table
1553; INPUT:
1554; None.
1555; OUTPUT:
1556; None.
1557;****************************************************************************
1558PUBLIC HOOK_INT_2F_256KB ;AN000;
1559HOOK_INT_2F_256KB PROC FAR ;AN000;
1560
1561 PUSH AX ;AN000;
1562 PUSH BX ;AN000;
1563 PUSH DX ;AN000;
1564 PUSH ES ;AN000; Save the segment registers.
1565 PUSH DS ;AN000;
1566 MOV AL, 2FH ;AN000; Interrupt number to get the vector of
1567 MOV AH, 35H ;AN000; DOS Function number for getting a vector
1568 DOSCALL ;AN000; Get the interrupt vector
1569 MOV WORD PTR OLD_INT_2F, BX ;AN000; Save the old vactor offset
1570 MOV AX, ES ;AN000; Get the old vector segment
1571 MOV WORD PTR OLD_INT_2F[2], AX ;AN000; Save the old vector segment
1572 PUSH CS ;AN000; Point DS to the current code segment
1573 POP DS ;AN000;
1574 MOV DX, OFFSET INT_2F_256KB ;AN000; Load offset of the new vector
1575 MOV AL, 2FH ;AN000; Interrupt number to set
1576 MOV AH, 25H ;AN000; DOS Fn. number for setting a vector
1577 DOSCALL ;AN000; Set the vector
1578 POP DS ;AN000; Restore the registers
1579 POP ES ;AN000;
1580 POP DX ;AN000;
1581 POP BX ;AN000;
1582 POP AX ;AN000;
1583
1584 RET ;AN000;
1585
1586HOOK_INT_2F_256KB ENDP ;AN000;
1587;****************************************************************************
1588; Procedure for hooking the INT_2F_FORMAT into vector table
1589; INPUT:
1590; None.
1591; OUTPUT:
1592; None.
1593;****************************************************************************
1594PUBLIC HOOK_INT_2F_FORMAT ;AN111;JW
1595HOOK_INT_2F_FORMAT PROC FAR ;AN111;JW
1596
1597 PUSH AX ;AN111;JW
1598 PUSH BX ;AN111;JW
1599 PUSH DX ;AN111;JW
1600 PUSH ES ;AN111; Save the segment registers. JW
1601 PUSH DS ;AN111;JW
1602 MOV AL, 2FH ;AN111; Interrupt number to get the vector of JW
1603 MOV AH, 35H ;AN111; DOS Function number for getting a vector JW
1604 DOSCALL ;AN111; Get the interrupt vector JW
1605 MOV WORD PTR OLD_INT_2F, BX ;AN111; Save the old vactor offset JW
1606 MOV AX, ES ;AN111; Get the old vector segment JW
1607 MOV WORD PTR OLD_INT_2F[2], AX ;AN111; Save the old vector segment JW
1608 PUSH CS ;AN111; Point DS to the current code segment JW
1609 POP DS ; ;AN111;JW
1610 MOV DX, OFFSET INT_2F_FORMAT ;AN111; Load offset of the new vector JW
1611 MOV AL, 2FH ;AN111; Interrupt number to set JW
1612 MOV AH, 25H ;AN111; DOS Fn. number for setting a vector JW
1613 DOSCALL ;AN111; Set the vector JW
1614 POP DS ;AN111; Restore the registers JW
1615 POP ES ;AN111;JW
1616 POP DX ;AN111;JW
1617 POP BX ;AN111;JW
1618 POP AX ;AN111;JW
1619 ;
1620 RET ;AN111;JW
1621 ;
1622HOOK_INT_2F_FORMAT ENDP ;AN111;JW
1623;****************************************************************************
1624
1625CODE_FAR ENDS ;AN000;
1626 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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3; Routines in ROUTINES.ASM
4;
5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6EXTRN APPEND_STRING_ROUTINE:FAR ;AN000;
7EXTRN BEEP_ROUTINE:FAR ;AN000;
8EXTRN BIN_TO_CHAR_ROUTINE:FAR ;AN000;
9EXTRN CHK_EX_MEM_ROUTINE:FAR ;AN000;
10EXTRN COPY_ROUTINE:FAR ;AN000;
11EXTRN DISPLAY_MESSAGE_ROUTINE:FAR ;AN000;
12EXTRN EXEC_PROGRAM_ROUTINE:FAR ;AN000;
13EXTRN GET_CNTY_DEF_ROUTINE:FAR ;AN000;
14EXTRN GET_CNTY_INDEX_ROUTINE:FAR ;AN000;
15EXTRN GET_KYBD_INDEX_ROUTINE:FAR ;AN000;
16EXTRN GET_KYBD_ROUTINE:FAR ;AN000;
17EXTRN GET_PRINTER_PARAMS_ROUTINE: FAR ;AN000;
18EXTRN HOOK_INT_23:FAR ;AN074;SEH ctrl-break
19EXTRN HOOK_INT_24:FAR ;AN000;
20EXTRN HOOK_INT_2F:FAR ;AN000;
21EXTRN HOOK_INT_2F_256KB:FAR ;AN000;
22EXTRN HOOK_INT_2F_FORMAT:FAR ;AN111;JW
23EXTRN MAKE_DIR_PATHS_ROUTINE:FAR ;AN000;
24EXTRN POP_ROUTINE:FAR ;AN000;
25EXTRN POS_ZERO:FAR ;AN000;
26EXTRN PREPARE_FILE_ROUTINE:FAR ;AN000;
27EXTRN PUSH_ROUTINE:FAR ;AN000;
28EXTRN RESTORE_INT_23:FAR ;AN074;SEH ctrl-break
29EXTRN RESTORE_INT_24:FAR ;AN000;
30EXTRN RESTORE_INT_2F:FAR ;AN000;
31EXTRN SAVE_FILE_ROUTINE:FAR ;AN000;
32EXTRN SAVE_PRINTER_PARAMS_ROUTINE: FAR ;AN000;
33EXTRN SCAN_PARAMETERS_ROUTINE:FAR ;AN000;
34EXTRN SCAN_INFO_FILE_ROUTINE:FAR ;AN001; GHG for 360kb
35EXTRN WRITE_LINE_ROUTINE:FAR ;AN000;
36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
37;
38; Routines in ROUTINE2.ASM
39;
40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
41EXTRN CHANGE_ATTRIBUTE_ROUTINE:FAR ;AN000;
42EXTRN CHECK_DISK_ROUTINE:FAR ;AN000;
43EXTRN CHECK_DOS_PATH_ROUTINE:FAR ;AN000;
44EXTRN CHECK_VALID_MEDIA_ROUTINE:FAR ;AN000;
45EXTRN CHECK_VALID_PATH:FAR ;AN000;
46EXTRN CHECK_WRITE_ROUTINE:FAR ;AN000;
47EXTRN CHK_W_PROTECT_FLAG:FAR ;AN000;
48EXTRN CLOSE_FILE_ROUTINE:FAR ;AN000;
49EXTRN COMPARE_ROUTINE:FAR ;AN000;
50EXTRN CREATE_FILE_ROUTINE:FAR ;AN000;
51EXTRN ERASE_FILE_ROUTINE:FAR ;AN000;
52EXTRN CHMOD_FILE_ROUTINE:FAR ;AN000;
53EXTRN FIND_FILE_ROUTINE:FAR ;AN000;
54EXTRN MATCH_FILES_ROUTINE:FAR ;AN000;
55EXTRN OPEN_FILE_ROUTINE:FAR ;AN000;
56EXTRN READ_FILE_ROUTINE:FAR ;AN000;
57EXTRN REMOVE_END_BLANKS:FAR ;AN000;
58EXTRN RENAME_FILE_ROUTINE:FAR ;AN000;
59EXTRN SCAN_DISK_TABLE_ROUTINE:FAR ;AN000;
60EXTRN UPDATE_DISK_TABLE_ROUTINE:FAR ;AN000;
61EXTRN WRITE_FILE_ROUTINE:FAR ;AN000;
62EXTRN W_PROTECT_FLAG:FAR ;AN000;
63 ;
64; Routine in MOD_COPY.ASM ;
65EXTRN MOD_XCOPY:FAR ;AN000;
66 ;
67; Routines in PRN_DEF.ASM ;
68EXTRN CHANGE_AUTOEXEC_ROUTINE:FAR ;AN000;
69EXTRN GET_PRINTER_INFO_ROUTINE:FAR ;AN000;
70EXTRN GET_PRINTER_TITLES_ROUTINE:FAR ;AN000;
71EXTRN RELEASE_PRINTER_INFO_ROUTINE:FAR ;AN000;
72 ;
73; Routines in S_DISPLY.ASM ;
74EXTRN 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 @@
1;********************************************************************************
2; File: SCN_PARM.ASM
3;
4; Subroutine for scanning the SELECT command line, and if the appropriate
5; parameter is specified, additional information is read from the disk.
6;
7;********************************************************************************
8.ALPHA ;AN000;
9.XLIST ;AN000;
10INCLUDE MACROS.INC ;AN000;
11INCLUDE STRUC.INC ;AN000;
12INCLUDE EXT.INC ;AN000;
13.LIST ;AN000;
14
15
16PUBLIC SCAN_PARAMETERS_ROUTINE ;AN000;
17EXTRN SYSPARSE:FAR ;AN000;
18EXTRN POS_ZERO:FAR ;AN000;
19EXTRN HOOK_INT_24:FAR ;AN000;
20EXTRN RESTORE_INT_24:FAR ;AN000;
21EXTRN CLOSE_FILE_ROUTINE:FAR ;AN000;
22
23
24DATA SEGMENT BYTE PUBLIC 'DATA';AN000;
25
26PARMS LABEL BYTE ;AN000;
27 PAR_EXTEN DW PARMSX ;AN000; Offset of the PARMS EXTENSION BLOCK
28 PAR_NUM DB 0 ;AN000; The number of further definitions
29
30; The PARMS EXTENSION BLOCK
31PARMSX LABEL BYTE ;AN000;
32 PAX_MINP DB 1 ;AN000;
33 PAX_MAXP DB 1 ;AN000;
34 DW OFFSET CONTROL_P1;AN000;
35 PAX_MAX_SW DB 0 ;AN000;
36 PAX_MAX_K1 DB 0 ;AN000;
37
38CONTROL_P1 LABEL BYTE ;AN000;
39 DW 02000H ;AN000;
40 DW 0000H ;AN000;
41 DW RESULT_P1 ;AN000;
42 DW VALUE_LIST_P1 ;AN000;
43 DB 0 ;AN000;
44
45VALUE_LIST_P1 LABEL BYTE ;AN000;
46 DB 3 ;AN000; Number of value definitions
47 DB 0 ;AN000; Number of range definitions
48 DB 0 ;AN000; Number of actual value definitions
49 DB 2 ;AN000; Number of string definitions
50 DB 0 ;AN000; Value to be returned if this string is matched
51 DW OFFSET KEYWORD_MENU;AN000;
52 DB 1 ;AN000; Value to be returned if this string is matched
53 DW OFFSET KEYWORD_FDISK ;AN000;
54
55KEYWORD_MENU DB 'MENU',0 ;AN000;
56KEYWORD_FDISK DB 'FDISK',0 ;AN000;
57
58RESULT_P1 LABEL BYTE ;AN000;
59 DB 0 ;AN000; Type of operand returned
60 DB 0 ;AN000; Matched item tag
61 DW 0 ;AN000; Offset of synonym returned
62 DB 0,0,0,0 ;AN000; Unsure what this is...
63
64
65MODE DW 0 ;AN000;
66option_0 dw 0
67OPTION_1 DW 0 ;AN000;
68OPTION_2 DW 0 ;AN000;
69OPTION_3 DW 0 ;AN033;SEH
70FILE_HANDLE DW 0 ;AN000;
71
72DATA ENDS ;AN000;
73
74CODE_FAR SEGMENT BYTE PUBLIC 'CODE' ;AN000;
75
76 ASSUME CS:CODE_FAR, DS:DATA, ES:DATA ;AN000;
77
78;****************************************************************************
79;
80; SCAN_PARAMETERS_ROUTINE: Scan SELECT command line for parameters.
81;
82; SYNTAX: SCAN_PARAMETERS mode, option, path, filename, buffer, buff_size
83;
84; INPUT:
85; DI = The name of the file which contains the FDISK parameters.
86; (ASCII-N format)
87; SI = A buffer where the data read from the file can be stored.
88; CX = The size of the buffer.
89;
90; OUTPUT:
91; AX = Install mode
92; = 0: Parameter is MENU
93; = 1: Parameter is FDISK
94; = 0FFH: Parameter is invalid
95; BX = 0
96; = 1
97; = 2
98; = 0FFh: Parameter is invalid (not 0, 1, 2)
99; CX = 0,1,2
100; DI = Install path in ASCII-N format
101;
102; OPERATION: The SELECT command line is scanned for parameters. The
103; return codes for the various parameters are provided in variables
104; defined above. If the parameter on the command line is FDISK, then
105; the file specified in FILENAME is opened and additional parameters
106; are read. If the parameters in the file are invalid, or if the file
107; cannot be found, then 0FFh is returned in MODE and OPTION, and the
108; path length is set to zero.
109;
110; Note:
111; Before this macro is executed, there must be as ASSUME ES:DATA
112; statement. If not, the parser will not execute properly and
113; either the computer will hang or erroneous values will be returned.
114;
115;****************************************************************************
116 PATH EQU [BP+12] ;AN000;
117 FILENAME EQU [BP+10] ;AN000;
118 BUFFER EQU [BP+8] ;AN000;
119 BUFF_SIZE EQU [BP+6] ;AN000;
120 ;
121SCAN_PARAMETERS_ROUTINE PROC FAR ;AN000;
122 PUSH BP ;AN000;
123 MOV BP, SP ;AN000;
124 ;
125 MOV OPTION_1, E_SELECT_INV ;AN000;
126 MOV OPTION_2, E_SELECT_INV ;AN000;
127 ;
128 PUSH ES ;AN000; Save the extra register
129 MOV AX, DATA ;AN000; ES contain control block segment
130 MOV ES, AX ;AN000;
131 MOV DI, OFFSET PARMS ;AN000; DI contains offset of control block
132 MOV SI, 0081H ;AN000; SI contains offset of command line
133 MOV DX, 0 ;AN000; DX and CX must be zero
134 MOV CX, 0 ;AN000;
135 MOV AH, 062H ;AN000; Get the PSP segment
136 DOSCALL ;AN000;
137 ;
138 PUSH BX ;AN000; Save for later reference
139NEXT_PARSE: ;AN000;
140 POP AX ;AN000; Get the PSP segment
141 PUSH AX ;AN000; Place on stack again
142 PUSH DS ;AN000; Save the current data segment
143 MOV DS, AX ;AN000; Load DS with the segment of the command line
144 CALL SYSPARSE ;AN000; Parse the command line
145 POP DS ;AN000; Restore the data segment
146 ;
147 .IF < AX EQ 0 > ;AN000; Were there any errors?
148 MOV BX, DX ;AN000; No! Get the address of the result block
149 MOV AL, [BX]+1 ;AN000; Yes! Get the returned value
150 MOV AH, 0 ;AN000; Zero the high byte
151 MOV MODE, AX ;AN000; Store the result
152 JMP NEXT_PARSE ;AN000; Parse the next parameter
153 .ELSEIF < AX NE -1 > ;AN000; If there was an error, indicate so.
154 MOV MODE, E_SELECT_INV ;AN000; Return that the values are invalid
155 MOV OPTION_1, E_SELECT_INV ;AN000;
156 MOV OPTION_2, E_SELECT_INV ;AN000;
157 .ENDIF ;AN000;
158 POP AX ;AN000; Take the PSP segment off the stack
159 MOV AX,MODE ;AN000; Store the result
160 POP ES ;AN000;
161 POP BP ;AN000;
162 RET ;AN000;
163SCAN_PARAMETERS_ROUTINE ENDP ;AN000;
164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
165;
166; SCAN_INFO_FILE_ROUTINE: Scan SELECT.TMP file for parameters.
167;
168; INPUT:
169; The following variables have been passed to this routine from the
170; SCAN_INFO_FILE macro by pushing them on the stack:
171; PATH EQU [BP+12]
172; FILENAME EQU [BP+10]
173; BUFFER EQU [BP+8]
174; BUFF_SIZE EQU [BP+6]
175;
176; OUTPUT:
177; AX = Install mode
178; = 0: Parameter is MENU
179; = 1: Parameter is FDISK
180; = 0FFH: Parameter is invalid
181; BX = 1
182; = 2
183; = 3
184; = 0FFh: Parameter is invalid (not 1, 2, 3)
185; CX = 1
186; = 2
187; = 0FFh: Parameter is invalid (not 1, 2)
188; DX = 1
189; = 2
190; = 0FFh: Parameter is invalid (not 1, 2)
191;
192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
193 PUBLIC SCAN_INFO_FILE_ROUTINE ;AN000;
194SCAN_INFO_FILE_ROUTINE PROC FAR ;AN000;
195 CALL HOOK_INT_24 ;AN000;
196 ;
197 PUSH BP ;AN000;
198 MOV BP, SP ;AN000;
199 MOV OPTION_0, E_SELECT_INV ;AN000;
200 MOV OPTION_1, E_SELECT_INV ;AN000;
201 MOV OPTION_2, E_SELECT_INV ;AN000;
202 MOV OPTION_3, E_SELECT_INV ;AN033;SEH
203 PUSH ES ;AN000; Save the extra register
204 ;
205 .IF < MODE NE E_SELECT_INV> AND NEAR ;AN000; If no error has occured yet,
206 .IF < MODE EQ 1 > NEAR ;AN000; and if the parameter was FDISK...
207 MOV DI, FILENAME ;AN000; Get the offset of the filename
208 CALL POS_ZERO ;AN000; Make into an ASCII-Z string
209 MOV DX, DI ;AN000; Load filename offset again
210 ADD DX, 2 ;AN000; Adjust pointer past the length word
211 MOV AX, 3D00H ;AN000; Fn call for opening a file for reading
212 DOSCALL ;AN000; Open the file
213 .IF < C > ;AN000; If there was as error, do not continue
214 JMP FILE_ERROR ;AN000; Return INVALID parameters to the caller
215 .ENDIF ;AN000;
216 MOV FILE_HANDLE, AX ;AN000; Save the returned file handle
217 MOV AH, 3FH ;AN000; DOS Fn for reading from a file
218 MOV DX, BUFFER ;AN000; Get the offset of the data buffer
219 MOV CX, BUFF_SIZE ;AN000; Get the number of bytes in the buffer
220 MOV BX, FILE_HANDLE ;AN000; Get the file handle for the opened file
221 DOSCALL ;AN000; Read from the file
222 .IF < C > ;AN000; If there was an error, do not continue
223 JMP FILE_ERROR ;AN000; Return INVALID parameters to the caller
224 .ENDIF ;AN000;
225 MOV SI, BUFFER ;AN000; Get the offset of the data buffer
226 MOV BH, 0 ;AN000; Zero the high byte
227 MOV BL, BYTE PTR [SI] ;AN000; Get the first byte from the file
228 SUB BL, '0' ;AN000; Turn into a binary number
229 MOV OPTION_0, BX ;AN000; Save this as the first option
230 MOV BL, BYTE PTR [SI+3] ;AN000; Get the first byte from the file
231 SUB BL, '0' ;AN000; Turn into a binary number
232 MOV OPTION_1, BX ;AN000; Save this as the first option
233 MOV BL, BYTE PTR [SI+6] ;AN000; Get the second option in the file
234 SUB BL, '0' ;AN000; Make into a binary value
235 MOV OPTION_2, BX ;AN000; Save this second option
236 MOV BL, BYTE PTR [SI+9] ;AN033; SEH Get the third option in the file
237 SUB BL, '0' ;AN033; SEH Make into a binary value
238 MOV OPTION_3, BX ;AN033; SEH Save this third option
239 MOV SI, BUFFER ;AN000; Get the offset of the data buffer
240 ADD SI, 12 ;AC033; SEH Point to the start of the path line
241 MOV DI, PATH ;AN000; Get the offset of the path storage
242 MOV BX, DI ;AN000;
243 ADD DI, 2 ;AN000; Adjust pointer past the length word
244 ; AX contains the number of characters read from the file
245 SUB AX, 12 ;AC033; SEH Number of characters left in the buffer
246 MOV CX, 0 ;AN000; Number of characters in the path string
247 MOV WORD PTR [BX], 0 ;AN000; Zero the string length to begin
248 .WHILE < AX GT 0 > ;AN000; Continue while there are characters left
249 MOV DL, [SI] ;AN000; Get the character from the buffer
250 .IF < DL EQ E_CR > OR ;AN000; See if this is the end of the line
251 .IF < DL EQ E_LF > ;AN000;
252 MOV [BX], CX ;AN000; Store the length of path
253 .LEAVE ;AN000;
254 .ENDIF ;AN000;
255 MOV [DI], DL ;AN000; Store the byte in the path
256 INC DI ;AN000; Increment the path pointer
257 INC SI ;AN000; Increment the source pointer
258 INC CX ;AN000; Increment the count of characters
259 DEC AX ;AN000; Decrement the numbers of characters left
260 .IF < CX A M_INSTALL_PATH > ;AN000; If more then 40 characters then an error
261 JMP FILE_ERROR ;AN000;
262 .ENDIF ;AN000;
263 .ENDWHILE ;AN000;
264 .IF < OPTION_1 AE 1 > AND ;AN000; If option is 1 or 2 then a path is needed
265 .IF < OPTION_1 BE 3 > ;AN000;
266 .IF < <WORD PTR [BX]> EQ 0 > ;AN000; If the path length was 0, return error
267 JMP FILE_ERROR ;AN000;
268 .ENDIF ;AN000;
269 .ELSE ;AN000;
270 .IF < <WORD PTR [BX]> NE 0 > ;AN000; If option is 3 and there is a path, error
271 JMP FILE_ERROR ;AN000;
272 .ENDIF ;AN000;
273 .ENDIF ;AN000;
274 JMP CLOSE_THE_FILE ;AN000;
275FILE_ERROR: ;AN000; Here if there has been an error
276 MOV MODE, E_SELECT_INV ;AN000;
277 MOV OPTION_1, E_SELECT_INV ;AN000;
278 MOV OPTION_2, E_SELECT_INV ;AN000;
279 MOV OPTION_3, E_SELECT_INV ;AN033; SEH
280 MOV BX, PATH ;AN000;
281 MOV WORD PTR [BX], 0 ;AN000;
282CLOSE_THE_FILE: ;AN000; Close the file
283 MOV BX, FILE_HANDLE ;AN000; Get the file handle
284 CLOSE_FILE BX ;AN000; Close the file
285 .ENDIF ;AN000;
286 MOV AX, option_0 ;AN000; Return the parameters
287 MOV BX, OPTION_1 ;AN000;
288 MOV CX, OPTION_2 ;AN000;
289 MOV DX, OPTION_3 ;AN033; SEH
290 ;
291 POP ES ;AN000; Restore the extra segment
292 POP BP ;AN000;
293 CALL RESTORE_INT_24 ;AN000;
294 RET 8 ;AN000;
295SCAN_INFO_FILE_ROUTINE ENDP ;AN000;
296;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
297CODE_FAR ENDS ;AN000;
298 ;
299END ;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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3; SCROLL.ASM
4;
5;
6;
7;
8;
9;
10;
11;
12;
13;
14;
15;
16;
17;
18;
19;
20;
21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
22
23 .alpha ; arrange segments alphabetically
24
25 INCLUDE SEL-PAN.INC ;AN024;
26 EXTRN WR_CIS:WORD ;AN024;
27 ;
28 PUBLIC WR_SCBVEC ;AN024;
29 PUBLIC NUM_SCB ;AN024;
30 ;
31PANEL EQU 0 ;AN024;
32SCROLL EQU 1 ;AN024;
33 ;
34CODE SEGMENT PARA PUBLIC 'CODE' ;AN024
35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
36;
37; Scroll Control Block Vector
38;
39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
40WR_SCBVEC DW 0,OFFSET WR_SCB1 ;AN024;SCB 1 segment,offset
41 DW 0,OFFSET WR_SCB2 ;AN024;SCB 2 segment,offset
42 DW 0,OFFSET WR_SCB3 ;AN024;SCB 3 segment,offset
43 DW 0,OFFSET WR_SCB4 ;AN024;SCB 4 segment,offset
44 DW 0,OFFSET WR_SCB5 ;AN024;SCB 5 segment,offset
45 DW 0,OFFSET WR_SCB6 ;AN024;SCB 6 segment,offset
46 DW 0,OFFSET WR_SCB7 ;AN024;SCB 7 segment,offset
47 DW 0,OFFSET WR_SCB8 ;AN024;SCB 8 segment,offset
48 DW 0,OFFSET WR_SCB9 ;AN024;SCB 9 segment,offset
49 DW 0,OFFSET WR_SCB10 ;AN024;SCB 10 segment,offset
50 DW 0,OFFSET WR_SCB11 ;AN024;SCB 11 segment,offset
51 DW 0,OFFSET WR_SCB12 ;AN024;SCB 12 segment,offset
52 DW 0,OFFSET WR_SCB13 ;AN024;SCB 13 segment,offset
53 DW 0,OFFSET WR_SCB14 ;AN024;SCB 14 segment,offset
54 DW 0,OFFSET WR_SCB15 ;AN024;SCB 15 segment,offset
55 DW 0,OFFSET WR_SCB16 ;AN024;SCB 16 segment,offset
56 DW 0,OFFSET WR_SCB17 ;AN024;SCB 17 segment,offset
57 DW 0,OFFSET WR_SCB18 ;AN024;SCB 18 segment,offset
58 DW 0,OFFSET WR_SCB19 ;AN024;SCB 19 segment,offset
59 DW 0,OFFSET WR_SCB20 ;AN024;SCB 20 segment,offset
60 DW 0,OFFSET WR_SCB21 ;AN024;SCB 21 segment,offset
61 DW 0,OFFSET WR_SCB22 ;AN024;SCB 22 segment,offset
62 DW 0,OFFSET WR_SCB23 ;AN024;SCB 23 segment,offset
63 DW 0,OFFSET WR_SCB24 ;AN024;SCB 24 segment,offset
64 DW 0,OFFSET WR_SCB25 ;AN024;SCB 25 segment,offset
65 DW 0,OFFSET WR_SCB26 ;AN024;SCB 26 segment,offset
66 DW 0,OFFSET WR_SCB27 ;AN024;SCB 27 segment,offset
67 DW 0,OFFSET WR_SCB28 ;AN024;SCB 28 segment,offset
68NUM_SCB EQU ($-WR_SCBVEC)/4 ;AN024;
69L_WR_SCBVEC EQU NUM_SCB ;AN024;
70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
71;
72; Scroll Data Definition
73;
74;
75; PCSCRWR parameter block
76;
77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
78WR_INDEX1 DW 15 ;AN000;element order number
79 DW 14 ;AN000;
80 DW 13 ;AN000;
81 DW 12 ;AN000;
82 DW 11 ;AN000;
83 DW 10 ;AN000;
84 DW 9 ;AN000;
85 DW 8 ;AN000;
86 DW 7 ;AN000;
87 DW 6 ;AN000;
88 DW 5 ;AN000;
89 DW 4 ;AN000;
90 DW 3 ;AN000;
91 DW 2 ;AN000;
92 DW 1 ;AN000;
93 ;
94LEFT_COL_SCROLL EQU 11 ;AN000;
95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
96;
97; DOSLEVEL SUPPORT
98;
99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
100WR_SCB1 DW SCB_WRAP ;AN000;option word one
101 DW SCB_SKIP ;AN000;option word two
102 DW SCB_NUMS ;AN000;option word three
103 DW 0 ;AN068;SEH option word four
104 DW SND_FREQ ;AN000;error beep frequency
105 DW 12 ;AN000;upper left row
106 DW LEFT_COL_SCROLL ;AN000;upper left column
107 DW 0 ;AN000;relative upper left row
108 DW 0 ;AN000;relative upper left column
109 DW SCB_LIST1_W ;AN000;line width
110 DW SCB_LIST1_N ;AN000;number of lines
111 DW 1 ;AN000;number of element on top
112 DW SCB_LIST1_N ;AN000;number of elements
113 DW 1 ;AN000;current element
114 DW 0 ;AN000;maximun number of cols to scroll
115 DW 0 ;AN000;display offset into opt strings
116 DW 1 ;AN000;num list txt col offset in strg
117 DB '.' ;AN000;numbered list separator
118 DW 0 ;AN000;select keystroke string length
119 DW 0 ;AN000;select keystroke string offset
120 DW 0 ;AN000;select keystroke string segment
121 DW 0 ;AN000;return/leave string length
122 DW 0 ;AN000;return/leave string offset
123 DW 0 ;AN000;return/leave string segment
124 DW 0 ;AN000;return/erase string length
125 DW 0 ;AN000;return/erase string offset
126 DW 0 ;AN000;return/erase string segment
127 DW WR_UAKEYSLEN ;AN000;up arrow string length
128 DW WR_UAKEYS ;AN000;up arrow string offset
129 DW 0 ;AN000;up arrow string segment
130 DW WR_DAKEYSLEN ;AN000;down arrow string length
131 DW WR_DAKEYS ;AN000;down arrow string offset
132 DW 0 ;AN000;down arrow string segment
133 DW 0 ;AN000;left arrow string length
134 DW 0 ;AN000;left arrow string offset
135 DW 0 ;AN000;left arrow string segment
136 DW 0 ;AN000;right arrow string length
137 DW 0 ;AN000;right arrow string offset
138 DW 0 ;AN000;right arrow string segment
139 DW WR_PUKEYSLEN ;AN000;page-up string length
140 DW WR_PUKEYS ;AN000;page-up string offset
141 DW 0 ;AN000;page-up string segment
142 DW WR_PDKEYSLEN ;AN000;page-down string length
143 DW WR_PDKEYS ;AN000;page-down string offset
144 DW 0 ;AN000;page-down string segment
145 DW WR_PIINDLEN ;AN000;pointer indicator strg length
146 DW WR_PIIND ;AN000;pointer indicator string offset
147 DW 0 ;AN000;pointer indicator string segment
148 DW 1 ;AN000;pointer ind txt col off into strg
149 DW WR_AIINDLEN ;AN000;active indicator strg length
150 DW WR_AIIND ;AN000;active indicator string offset
151 DW 0 ;AN000;active indicator string segment
152 DW 1 ;AN000;active ind txt col off into stg
153 DW WR_CIINDLEN ;AN000;check mark text string length
154 DW WR_CIIND ;AN000;check mark text string offset
155 DW 0 ;AN000;check mark text string segment
156 DW 1 ;AN000;check mark offset into opt strg
157 DW WR_UIINDLEN ;AN000;up indicator string length
158 DW WR_UIIND ;AN000;up indicator string offset
159 DW 0 ;AN000;up indicator string segment
160 DW 2 ;AN000;up indicator row location
161 DW 1 ;AN000;up indicator column location
162 DW WR_DIINDLEN ;AN000;down indicator string length
163 DW WR_DIIND ;AN000;down indicator string offset
164 DW 0 ;AN000;down indicator string segment
165 DW 2 ;AN000;down indicator row location
166 DW 2 ;AN000;down indicator column locaiton
167 DW 0 ;AN000;left indicator string length
168 DW 0 ;AN000;left indicator string offset
169 DW 0 ;AN000;left indicator string segment
170 DW 0 ;AN000;left indicator row location
171 DW 0 ;AN000;left indicator column location
172 DW 0 ;AN000;right indicator string length
173 DW 0 ;AN000;right indicator string offset
174 DW 0 ;AN000;right indicator string segment
175 DW 0 ;AN000;right indicator row location
176 DW 0 ;AN000;right indicator column locaiton
177 DW 0 ;AN000;normal color array offset
178 DW 0 ;AN000;normal color array segment
179 DW 1 ;AN000;logical color index number
180 DW 0 ;AN000;number color index table entries
181 DW 0 ;AN000;offset addr of color index table
182 DW 0 ;AN000;segment addr of color index tabl
183 DW WR_INDEX1 ;AN000;index array offset
184 DW 0 ;AN000;index array segment
185 DW WR_SELECT_NUM ;AN000;element selection array offset
186 DW 0 ;AN000;element selection array segment
187 DW SSC_PTSB ;AN000;option array option word
188 DW SCB_LIST1 ;AN000;option array pointer offset
189 DW 0 ;AN000;option array pointer segment
190 DW SCB_LIST1_W ;AN000;option array string length
191 DW 0 ;AN000;option array string segment
192 DB 'A' ;AN000;option array string term char
193 DW 0 ;AN000;keystroke
194 DW 0 ;AN000;log vid buf offset override
195 DW 0 ;AN000;log vid buf segment override
196 DW 0 ;AN000;general purpose format hook opt
197 DW 0 ;AN000;general purpose format hook opt
198 DW 0 ;AN000;length of translation table
199 DW 0 ;AN000;offset of translation table
200 DW 0 ;AN000;segment of translation table
201 DW 0 ;AN000;monocasing table offset
202 DW 0 ;AN000;monocasing table segment
203 DW 0 ;AN000;dbcs table length
204 DW 0 ;AN000;dbcs table offset
205 DW 0 ;AN000;dbcs table segment
206 DW 0 ;AN068;SEH offset of font descriptor block
207 DW 0 ;AN068;SEH segment of font descriptor block
208 DB 236 DUP(0) ;AN024;
209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
210;
211; SELECT COUNTRY CODE AND KEYBOARD
212;
213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
214WR_SCB2 DW SCB_WRAP ;AN000;option word one
215 DW SCB_SKIP ;AN000;option word two
216 DW SCB_NUMS ;AN000;option word three
217 DW 0 ;AN068;SEH option word four
218 DW SND_FREQ ;AN000;error beep frequency
219 DW 13 ;AN000;upper left row
220 DW LEFT_COL_SCROLL ;AN000;upper left column
221 DW 0 ;AN000;relative upper left row
222 DW 0 ;AN000;relative upper left column
223 DW SCB_LIST2_W ;AN000;line width
224 DW SCB_LIST2_N ;AN000;number of lines
225 DW 1 ;AN000;number of element on top
226 DW SCB_LIST2_N ;AN000;number of elements
227 DW 1 ;AN000;current element
228 DW 0 ;AN000;maximun number of cols to scroll
229 DW 0 ;AN000;display offset into opt strings
230 DW 1 ;AN000;num list txt col offset in strg
231 DB '.' ;AN000;numbered list separator
232 DW 0 ;AN000;select keystroke string length
233 DW 0 ;AN000;select keystroke string offset
234 DW 0 ;AN000;select keystroke string segment
235 DW 0 ;AN000;return/leave string length
236 DW 0 ;AN000;return/leave string offset
237 DW 0 ;AN000;return/leave string segment
238 DW 0 ;AN000;return/erase string length
239 DW 0 ;AN000;return/erase string offset
240 DW 0 ;AN000;return/erase string segment
241 DW WR_UAKEYSLEN ;AN000;up arrow string length
242 DW WR_UAKEYS ;AN000;up arrow string offset
243 DW 0 ;AN000;up arrow string segment
244 DW WR_DAKEYSLEN ;AN000;down arrow string length
245 DW WR_DAKEYS ;AN000;down arrow string offset
246 DW 0 ;AN000;down arrow string segment
247 DW 0 ;AN000;left arrow string length
248 DW 0 ;AN000;left arrow string offset
249 DW 0 ;AN000;left arrow string segment
250 DW 0 ;AN000;right arrow string length
251 DW 0 ;AN000;right arrow string offset
252 DW 0 ;AN000;right arrow string segment
253 DW WR_PUKEYSLEN ;AN000;page-up string length
254 DW WR_PUKEYS ;AN000;page-up string offset
255 DW 0 ;AN000;page-up string segment
256 DW WR_PDKEYSLEN ;AN000;page-down string length
257 DW WR_PDKEYS ;AN000;page-down string offset
258 DW 0 ;AN000;page-down string segment
259 DW WR_PIINDLEN ;AN000;pointer indicator strg length
260 DW WR_PIIND ;AN000;pointer indicator string offset
261 DW 0 ;AN000;pointer indicator string segment
262 DW 1 ;AN000;pointer ind txt col off into strg
263 DW WR_AIINDLEN ;AN000;active indicator strg length
264 DW WR_AIIND ;AN000;active indicator string offset
265 DW 0 ;AN000;active indicator string segment
266 DW 1 ;AN000;active ind txt col off into stg
267 DW WR_CIINDLEN ;AN000;check mark text string length
268 DW WR_CIIND ;AN000;check mark text string offset
269 DW 0 ;AN000;check mark text string segment
270 DW 1 ;AN000;check mark offset into opt strg
271 DW WR_UIINDLEN ;AN000;up indicator string length
272 DW WR_UIIND ;AN000;up indicator string offset
273 DW 0 ;AN000;up indicator string segment
274 DW 2 ;AN000;up indicator row location
275 DW 1 ;AN000;up indicator column location
276 DW WR_DIINDLEN ;AN000;down indicator string length
277 DW WR_DIIND ;AN000;down indicator string offset
278 DW 0 ;AN000;down indicator string segment
279 DW 2 ;AN000;down indicator row location
280 DW 2 ;AN000;down indicator column locaiton
281 DW 0 ;AN000;left indicator string length
282 DW 0 ;AN000;left indicator string offset
283 DW 0 ;AN000;left indicator string segment
284 DW 0 ;AN000;left indicator row location
285 DW 0 ;AN000;left indicator column location
286 DW 0 ;AN000;right indicator string length
287 DW 0 ;AN000;right indicator string offset
288 DW 0 ;AN000;right indicator string segment
289 DW 0 ;AN000;right indicator row location
290 DW 0 ;AN000;right indicator column locaiton
291 DW WR_CIS ;AN000;normal color array offset
292 DW 0 ;AN000;normal color array segment
293 DW 2 ;AN000;logical color index number
294 DW 0 ;AN000;number color index table entries
295 DW 0 ;AN000;offset addr of color index table
296 DW 0 ;AN000;segment addr of color index tabl
297 DW WR_INDEX1 ;AN000;index array offset
298 DW 0 ;AN000;index array segment
299 DW WR_SELECT_NUM ;AN000;element selection array offset
300 DW 0 ;AN000;element selection array segment
301 DW SSC_PTSB ;AN000;option array option word
302 DW SCB_LIST2 ;AN000;option array pointer offset
303 DW 0 ;AN000;option array pointer segment
304 DW SCB_LIST2_W ;AN000;option array string length
305 DW 0 ;AN000;option array string segment
306 DB 'A' ;AN000;option array string term char
307 DW 0 ;AN000;keystroke
308 DW 0 ;AN000;log vid buf offset override
309 DW 0 ;AN000;log vid buf segment override
310 DW 0 ;AN000;general purpose format hook opt
311 DW 0 ;AN000;general purpose format hook opt
312 DW 0 ;AN000;length of translation table
313 DW 0 ;AN000;offset of translation table
314 DW 0 ;AN000;segment of translation table
315 DW 0 ;AN000;monocasing table offset
316 DW 0 ;AN000;monocasing table segment
317 DW 0 ;AN000;dbcs table length
318 DW 0 ;AN000;dbcs table offset
319 DW 0 ;AN000;dbcs table segment
320 DW 0 ;AN068;SEH offset of font descriptor block
321 DW 0 ;AN068;SEH segment of font descriptor block
322 DB 236 DUP(0) ;AN024;
323;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
324;
325; defined country codes 1
326;
327;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
328WR_SCB3 DW SCB_FRBF+SCB_FRAL ;AN000;option word one
329 DW SCB_ROTN ;AN000;option word two
330 DW 0 ;AN000;option word three
331 DW 0 ;AN068;SEH option word four
332 DW SND_FREQ ;AN000;error beep frequency
333 DW 6 ;AN000;upper left row
334 DW LEFT_COL_SCROLL ;AN000;upper left column
335 DW 0 ;AN000;relative upper left row
336 DW 0 ;AN000;relative upper left column
337 DW SCB_LIST3_W ;AN000;line width
338 DW SCB_LIST3_N ;AN000;number of lines
339 DW 1 ;AN000;number of element on top
340 DW SCB_LIST3_N ;AN000;number of elements
341 DW 1 ;AN000;current element
342 DW 0 ;AN000;maximun number of cols to scroll
343 DW 0 ;AN000;display offset into opt strings
344 DW 1 ;AN000;num list txt col offset in strg
345 DB '.' ;AN000;numbered list separator
346 DW 0 ;AN000;select keystroke string length
347 DW 0 ;AN000;select keystroke string offset
348 DW 0 ;AN000;select keystroke string segment
349 DW 0 ;AN000;return/leave string length
350 DW 0 ;AN000;return/leave string offset
351 DW 0 ;AN000;return/leave string segment
352 DW 0 ;AN000;return/erase string length
353 DW 0 ;AN000;return/erase string offset
354 DW 0 ;AN000;return/erase string segment
355 DW WR_UAKEYSLEN ;AN000;up arrow string length
356 DW WR_UAKEYS ;AN000;up arrow string offset
357 DW 0 ;AN000;up arrow string segment
358 DW WR_DAKEYSLEN ;AN000;down arrow string length
359 DW WR_DAKEYS ;AN000;down arrow string offset
360 DW 0 ;AN000;down arrow string segment
361 DW 0 ;AN000;left arrow string length
362 DW 0 ;AN000;left arrow string offset
363 DW 0 ;AN000;left arrow string segment
364 DW 0 ;AN000;right arrow string length
365 DW 0 ;AN000;right arrow string offset
366 DW 0 ;AN000;right arrow string segment
367 DW 0 ;AN000;page-up string length
368 DW 0 ;AN000;page-up string offset
369 DW 0 ;AN000;page-up string segment
370 DW 0 ;AN000;page-down string length
371 DW 0 ;AN000;page-down string offset
372 DW 0 ;AN000;page-down string segment
373 DW WR_PIINDLEN ;AN000;pointer indicator strg length
374 DW WR_PIIND ;AN000;pointer indicator string offset
375 DW 0 ;AN000;pointer indicator string segment
376 DW 1 ;AN000;pointer ind txt col off into strg
377 DW WR_AIINDLEN ;AN000;active indicator strg length
378 DW WR_AIIND ;AN000;active indicator string offset
379 DW 0 ;AN000;active indicator string segment
380 DW 1 ;AN000;active ind txt col off into stg
381 DW WR_CIINDLEN ;AN000;check mark text string length
382 DW WR_CIIND ;AN000;check mark text string offset
383 DW 0 ;AN000;check mark text string segment
384 DW 1 ;AN000;check mark offset into opt strg
385 DW WR_UIINDLEN ;AN000;up indicator string length
386 DW WR_UIIND ;AN000;up indicator string offset
387 DW 0 ;AN000;up indicator string segment
388 DW 2 ;AN000;up indicator row location
389 DW 1 ;AN000;up indicator column location
390 DW WR_DIINDLEN ;AN000;down indicator string length
391 DW WR_DIIND ;AN000;down indicator string offset
392 DW 0 ;AN000;down indicator string segment
393 DW 2 ;AN000;down indicator row location
394 DW 2 ;AN000;down indicator column locaiton
395 DW 0 ;AN000;left indicator string length
396 DW 0 ;AN000;left indicator string offset
397 DW 0 ;AN000;left indicator string segment
398 DW 0 ;AN000;left indicator row location
399 DW 0 ;AN000;left indicator column location
400 DW 0 ;AN000;right indicator string length
401 DW 0 ;AN000;right indicator string offset
402 DW 0 ;AN000;right indicator string segment
403 DW 0 ;AN000;right indicator row location
404 DW 0 ;AN000;right indicator column locaiton
405 DW WR_CIS ;AN000;normal color array offset
406 DW 0 ;AN000;normal color array segment
407 DW 3 ;AN000;logical color index number
408 DW 0 ;AN000;number color index table entries
409 DW 0 ;AN000;offset addr of color index table
410 DW 0 ;AN000;segment addr of color index tabl
411 DW WR_INDEX1 ;AN000;index array offset
412 DW 0 ;AN000;index array segment
413 DW WR_SELECT ;AN000;element selection array offset
414 DW 0 ;AN000;element selection array segment
415 DW SSC_PTSB ;AN000;option array option word
416 DW SCB_LIST3 ;AN000;option array pointer offset
417 DW 0 ;AN000;option array pointer segment
418 DW SCB_LIST3_W ;AN000;option array string length
419 DW 0 ;AN000;option array string segment
420 DB 'A' ;AN000;option array string term char
421 DW 0 ;AN000;keystroke
422 DW 0 ;AN000;log vid buf offset override
423 DW 0 ;AN000;log vid buf segment override
424 DW 0 ;AN000;general purpose format hook opt
425 DW 0 ;AN000;general purpose format hook opt
426 DW 0 ;AN000;length of translation table
427 DW 0 ;AN000;offset of translation table
428 DW 0 ;AN000;segment of translation table
429 DW 0 ;AN000;monocasing table offset
430 DW 0 ;AN000;monocasing table segment
431 DW 0 ;AN000;dbcs table length
432 DW 0 ;AN000;dbcs table offset
433 DW 0 ;AN000;dbcs table segment
434 DW 0 ;AN068;SEH offset of font descriptor block
435 DW 0 ;AN068;SEH segment of font descriptor block
436 DB 236 DUP(0) ;AN024;
437;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
438;
439; defined country codes 2
440;
441;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
442WR_SCB4 DW SCB_FRBF+SCB_FRAL ;AN000;option word one
443 DW SCB_ROTN ;AN000;option word two
444 DW 0 ;AN000;option word three
445 DW 0 ;AN068;SEH option word four
446 DW SND_FREQ ;AN000;error beep frequency
447 DW 6 ;AN000;upper left row
448 DW LEFT_COL_SCROLL+SCB_LIST4_W+2 ;AN000;upper left column
449 DW 0 ;AN000;relative upper left row
450 DW 0 ;AN000;relative upper left column
451 DW SCB_LIST4_W ;AN000;line width
452 DW SCB_LIST4_N ;AN000;number of lines
453 DW 1 ;AN000;number of element on top
454 DW SCB_LIST4_N ;AN000;number of elements
455 DW 1 ;AN000;current element
456 DW 0 ;AN000;maximun number of cols to scroll
457 DW 0 ;AN000;display offset into opt strings
458 DW 1 ;AN000;num list txt col offset in strg
459 DB '.' ;AN000;numbered list separator
460 DW 0 ;AN000;select keystroke string length
461 DW 0 ;AN000;select keystroke string offset
462 DW 0 ;AN000;select keystroke string segment
463 DW 0 ;AN000;return/leave string length
464 DW 0 ;AN000;return/leave string offset
465 DW 0 ;AN000;return/leave string segment
466 DW 0 ;AN000;return/erase string length
467 DW 0 ;AN000;return/erase string offset
468 DW 0 ;AN000;return/erase string segment
469 DW WR_UAKEYSLEN ;AN000;up arrow string length
470 DW WR_UAKEYS ;AN000;up arrow string offset
471 DW 0 ;AN000;up arrow string segment
472 DW WR_DAKEYSLEN ;AN000;down arrow string length
473 DW WR_DAKEYS ;AN000;down arrow string offset
474 DW 0 ;AN000;down arrow string segment
475 DW 0 ;AN000;left arrow string length
476 DW 0 ;AN000;left arrow string offset
477 DW 0 ;AN000;left arrow string segment
478 DW 0 ;AN000;right arrow string length
479 DW 0 ;AN000;right arrow string offset
480 DW 0 ;AN000;right arrow string segment
481 DW 0 ;AN000;page-up string length
482 DW 0 ;AN000;page-up string offset
483 DW 0 ;AN000;page-up string segment
484 DW 0 ;AN000;page-down string length
485 DW 0 ;AN000;page-down string offset
486 DW 0 ;AN000;page-down string segment
487 DW WR_PIINDLEN ;AN000;pointer indicator strg length
488 DW WR_PIIND ;AN000;pointer indicator string offset
489 DW 0 ;AN000;pointer indicator string segment
490 DW 1 ;AN000;pointer ind txt col off into strg
491 DW WR_AIINDLEN ;AN000;active indicator strg length
492 DW WR_AIIND ;AN000;active indicator string offset
493 DW 0 ;AN000;active indicator string segment
494 DW 1 ;AN000;active ind txt col off into stg
495 DW WR_CIINDLEN ;AN000;check mark text string length
496 DW WR_CIIND ;AN000;check mark text string offset
497 DW 0 ;AN000;check mark text string segment
498 DW 1 ;AN000;check mark offset into opt strg
499 DW WR_UIINDLEN ;AN000;up indicator string length
500 DW WR_UIIND ;AN000;up indicator string offset
501 DW 0 ;AN000;up indicator string segment
502 DW 2 ;AN000;up indicator row location
503 DW 1 ;AN000;up indicator column location
504 DW WR_DIINDLEN ;AN000;down indicator string length
505 DW WR_DIIND ;AN000;down indicator string offset
506 DW 0 ;AN000;down indicator string segment
507 DW 2 ;AN000;down indicator row location
508 DW 2 ;AN000;down indicator column locaiton
509 DW 0 ;AN000;left indicator string length
510 DW 0 ;AN000;left indicator string offset
511 DW 0 ;AN000;left indicator string segment
512 DW 0 ;AN000;left indicator row location
513 DW 0 ;AN000;left indicator column location
514 DW 0 ;AN000;right indicator string length
515 DW 0 ;AN000;right indicator string offset
516 DW 0 ;AN000;right indicator string segment
517 DW 0 ;AN000;right indicator row location
518 DW 0 ;AN000;right indicator column locaiton
519 DW WR_CIS ;AN000;normal color array offset
520 DW 0 ;AN000;normal color array segment
521 DW 4 ;AN000;logical color index number
522 DW 0 ;AN000;number color index table entries
523 DW 0 ;AN000;offset addr of color index table
524 DW 0 ;AN000;segment addr of color index tabl
525 DW WR_INDEX1 ;AN000;index array offset
526 DW 0 ;AN000;index array segment
527 DW WR_SELECT ;AN000;element selection array offset
528 DW 0 ;AN000;element selection array segment
529 DW SSC_PTSB ;AN000;option array option word
530 DW SCB_LIST4 ;AN000;option array pointer offset
531 DW 0 ;AN000;option array pointer segment
532 DW SCB_LIST4_W ;AN000;option array string length
533 DW 0 ;AN000;option array string segment
534 DB 'A' ;AN000;option array string term char
535 DW 0 ;AN000;keystroke
536 DW 0 ;AN000;log vid buf offset override
537 DW 0 ;AN000;log vid buf segment override
538 DW 0 ;AN000;general purpose format hook opt
539 DW 0 ;AN000;general purpose format hook opt
540 DW 0 ;AN000;length of translation table
541 DW 0 ;AN000;offset of translation table
542 DW 0 ;AN000;segment of translation table
543 DW 0 ;AN000;monocasing table offset
544 DW 0 ;AN000;monocasing table segment
545 DW 0 ;AN000;dbcs table length
546 DW 0 ;AN000;dbcs table offset
547 DW 0 ;AN000;dbcs table segment
548 DW 0 ;AN068;SEH offset of font descriptor block
549 DW 0 ;AN068;SEH segment of font descriptor block
550 DB 236 DUP(0) ;AN024;
551;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
552;
553; defined keyboard codes 1
554;
555;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
556WR_SCB5 DW SCB_FRBF+SCB_FRAL ;AN000;option word one
557 DW SCB_ROTN ;AN000;option word two
558 DW 0 ;AN000;option word three
559 DW 0 ;AN068;SEH option word four
560 DW SND_FREQ ;AN000;error beep frequency
561 DW 6 ;AN000;upper left row
562 DW LEFT_COL_SCROLL ;AN000;upper left column
563 DW 0 ;AN000;relative upper left row
564 DW 0 ;AN000;relative upper left column
565 DW SCB_LIST5_W ;AN000;line width
566 DW SCB_LIST5_N ;AN000;number of lines
567 DW 1 ;AN000;number of element on top
568 DW SCB_LIST5_N ;AN000;number of elements
569 DW 1 ;AN000;current element
570 DW 0 ;AN000;maximun number of cols to scroll
571 DW 0 ;AN000;display offset into opt strings
572 DW 1 ;AN000;num list txt col offset in strg
573 DB '.' ;AN000;numbered list separator
574 DW 0 ;AN000;select keystroke string length
575 DW 0 ;AN000;select keystroke string offset
576 DW 0 ;AN000;select keystroke string segment
577 DW 0 ;AN000;return/leave string length
578 DW 0 ;AN000;return/leave string offset
579 DW 0 ;AN000;return/leave string segment
580 DW 0 ;AN000;return/erase string length
581 DW 0 ;AN000;return/erase string offset
582 DW 0 ;AN000;return/erase string segment
583 DW WR_UAKEYSLEN ;AN000;up arrow string length
584 DW WR_UAKEYS ;AN000;up arrow string offset
585 DW 0 ;AN000;up arrow string segment
586 DW WR_DAKEYSLEN ;AN000;down arrow string length
587 DW WR_DAKEYS ;AN000;down arrow string offset
588 DW 0 ;AN000;down arrow string segment
589 DW 0 ;AN000;left arrow string length
590 DW 0 ;AN000;left arrow string offset
591 DW 0 ;AN000;left arrow string segment
592 DW 0 ;AN000;right arrow string length
593 DW 0 ;AN000;right arrow string offset
594 DW 0 ;AN000;right arrow string segment
595 DW 0 ;AN000;page-up string length
596 DW 0 ;AN000;page-up string offset
597 DW 0 ;AN000;page-up string segment
598 DW 0 ;AN000;page-down string length
599 DW 0 ;AN000;page-down string offset
600 DW 0 ;AN000;page-down string segment
601 DW WR_PIINDLEN ;AN000;pointer indicator strg length
602 DW WR_PIIND ;AN000;pointer indicator string offset
603 DW 0 ;AN000;pointer indicator string segment
604 DW 1 ;AN000;pointer ind txt col off into strg
605 DW WR_AIINDLEN ;AN000;active indicator strg length
606 DW WR_AIIND ;AN000;active indicator string offset
607 DW 0 ;AN000;active indicator string segment
608 DW 1 ;AN000;active ind txt col off into stg
609 DW WR_CIINDLEN ;AN000;check mark text string length
610 DW WR_CIIND ;AN000;check mark text string offset
611 DW 0 ;AN000;check mark text string segment
612 DW 1 ;AN000;check mark offset into opt strg
613 DW WR_UIINDLEN ;AN000;up indicator string length
614 DW WR_UIIND ;AN000;up indicator string offset
615 DW 0 ;AN000;up indicator string segment
616 DW 2 ;AN000;up indicator row location
617 DW 1 ;AN000;up indicator column location
618 DW WR_DIINDLEN ;AN000;down indicator string length
619 DW WR_DIIND ;AN000;down indicator string offset
620 DW 0 ;AN000;down indicator string segment
621 DW 2 ;AN000;down indicator row location
622 DW 2 ;AN000;down indicator column locaiton
623 DW 0 ;AN000;left indicator string length
624 DW 0 ;AN000;left indicator string offset
625 DW 0 ;AN000;left indicator string segment
626 DW 0 ;AN000;left indicator row location
627 DW 0 ;AN000;left indicator column location
628 DW 0 ;AN000;right indicator string length
629 DW 0 ;AN000;right indicator string offset
630 DW 0 ;AN000;right indicator string segment
631 DW 0 ;AN000;right indicator row location
632 DW 0 ;AN000;right indicator column locaiton
633 DW WR_CIS ;AN000;normal color array offset
634 DW 0 ;AN000;normal color array segment
635 DW 5 ;AN000;logical color index number
636 DW 0 ;AN000;number color index table entries
637 DW 0 ;AN000;offset addr of color index table
638 DW 0 ;AN000;segment addr of color index tabl
639 DW WR_INDEX1 ;AN000;index array offset
640 DW 0 ;AN000;index array segment
641 DW WR_SELECT ;AN000;element selection array offset
642 DW 0 ;AN000;element selection array segment
643 DW SSC_PTSB ;AN000;option array option word
644 DW SCB_LIST5 ;AN000;option array pointer offset
645 DW 0 ;AN000;option array pointer segment
646 DW SCB_LIST5_W ;AN000;option array string length
647 DW 0 ;AN000;option array string segment
648 DB 'A' ;AN000;option array string term char
649 DW 0 ;AN000;keystroke
650 DW 0 ;AN000;log vid buf offset override
651 DW 0 ;AN000;log vid buf segment override
652 DW 0 ;AN000;general purpose format hook opt
653 DW 0 ;AN000;general purpose format hook opt
654 DW 0 ;AN000;length of translation table
655 DW 0 ;AN000;offset of translation table
656 DW 0 ;AN000;segment of translation table
657 DW 0 ;AN000;monocasing table offset
658 DW 0 ;AN000;monocasing table segment
659 DW 0 ;AN000;dbcs table length
660 DW 0 ;AN000;dbcs table offset
661 DW 0 ;AN000;dbcs table segment
662 DW 0 ;AN068;SEH offset of font descriptor block
663 DW 0 ;AN068;SEH segment of font descriptor block
664 DB 236 DUP(0) ;AN024;
665;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
666;
667; defined keyboard codes 2
668;
669;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
670WR_SCB6 DW SCB_FRBF+SCB_FRAL ;AN000;option word one
671 DW SCB_ROTN ;AN000;option word two
672 DW 0 ;AN000;option word three
673 DW 0 ;AN068;SEH option word four
674 DW SND_FREQ ;AN000;error beep frequency
675 DW 6 ;AN000;upper left row
676 DW LEFT_COL_SCROLL+SCB_LIST6_W+2 ;AN000;upper left column
677 DW 0 ;AN000;relative upper left row
678 DW 0 ;AN000;relative upper left column
679 DW SCB_LIST6_W ;AN000;line width
680 DW SCB_LIST6_N ;AN000;number of lines
681 DW 1 ;AN000;number of element on top
682 DW SCB_LIST6_N ;AN000;number of elements
683 DW 1 ;AN000;current element
684 DW 0 ;AN000;maximun number of cols to scroll
685 DW 0 ;AN000;display offset into opt strings
686 DW 1 ;AN000;num list txt col offset in strg
687 DB '.' ;AN000;numbered list separator
688 DW 0 ;AN000;select keystroke string length
689 DW 0 ;AN000;select keystroke string offset
690 DW 0 ;AN000;select keystroke string segment
691 DW 0 ;AN000;return/leave string length
692 DW 0 ;AN000;return/leave string offset
693 DW 0 ;AN000;return/leave string segment
694 DW 0 ;AN000;return/erase string length
695 DW 0 ;AN000;return/erase string offset
696 DW 0 ;AN000;return/erase string segment
697 DW WR_UAKEYSLEN ;AN000;up arrow string length
698 DW WR_UAKEYS ;AN000;up arrow string offset
699 DW 0 ;AN000;up arrow string segment
700 DW WR_DAKEYSLEN ;AN000;down arrow string length
701 DW WR_DAKEYS ;AN000;down arrow string offset
702 DW 0 ;AN000;down arrow string segment
703 DW 0 ;AN000;left arrow string length
704 DW 0 ;AN000;left arrow string offset
705 DW 0 ;AN000;left arrow string segment
706 DW 0 ;AN000;right arrow string length
707 DW 0 ;AN000;right arrow string offset
708 DW 0 ;AN000;right arrow string segment
709 DW 0 ;AN000;page-up string length
710 DW 0 ;AN000;page-up string offset
711 DW 0 ;AN000;page-up string segment
712 DW 0 ;AN000;page-down string length
713 DW 0 ;AN000;page-down string offset
714 DW 0 ;AN000;page-down string segment
715 DW WR_PIINDLEN ;AN000;pointer indicator strg length
716 DW WR_PIIND ;AN000;pointer indicator string offset
717 DW 0 ;AN000;pointer indicator string segment
718 DW 1 ;AN000;pointer ind txt col off into strg
719 DW WR_AIINDLEN ;AN000;active indicator strg length
720 DW WR_AIIND ;AN000;active indicator string offset
721 DW 0 ;AN000;active indicator string segment
722 DW 1 ;AN000;active ind txt col off into stg
723 DW WR_CIINDLEN ;AN000;check mark text string length
724 DW WR_CIIND ;AN000;check mark text string offset
725 DW 0 ;AN000;check mark text string segment
726 DW 1 ;AN000;check mark offset into opt strg
727 DW WR_UIINDLEN ;AN000;up indicator string length
728 DW WR_UIIND ;AN000;up indicator string offset
729 DW 0 ;AN000;up indicator string segment
730 DW 2 ;AN000;up indicator row location
731 DW 1 ;AN000;up indicator column location
732 DW WR_DIINDLEN ;AN000;down indicator string length
733 DW WR_DIIND ;AN000;down indicator string offset
734 DW 0 ;AN000;down indicator string segment
735 DW 2 ;AN000;down indicator row location
736 DW 2 ;AN000;down indicator column locaiton
737 DW 0 ;AN000;left indicator string length
738 DW 0 ;AN000;left indicator string offset
739 DW 0 ;AN000;left indicator string segment
740 DW 0 ;AN000;left indicator row location
741 DW 0 ;AN000;left indicator column location
742 DW 0 ;AN000;right indicator string length
743 DW 0 ;AN000;right indicator string offset
744 DW 0 ;AN000;right indicator string segment
745 DW 0 ;AN000;right indicator row location
746 DW 0 ;AN000;right indicator column locaiton
747 DW WR_CIS ;AN000;normal color array offset
748 DW 0 ;AN000;normal color array segment
749 DW 6 ;AN000;logical color index number
750 DW 0 ;AN000;number color index table entries
751 DW 0 ;AN000;offset addr of color index table
752 DW 0 ;AN000;segment addr of color index tabl
753 DW WR_INDEX1 ;AN000;index array offset
754 DW 0 ;AN000;index array segment
755 DW WR_SELECT ;AN000;element selection array offset
756 DW 0 ;AN000;element selection array segment
757 DW SSC_PTSB ;AN000;option array option word
758 DW SCB_LIST6 ;AN000;option array pointer offset
759 DW 0 ;AN000;option array pointer segment
760 DW SCB_LIST6_W ;AN000;option array string length
761 DW 0 ;AN000;option array string segment
762 DB 'A' ;AN000;option array string term char
763 DW 0 ;AN000;keystroke
764 DW 0 ;AN000;log vid buf offset override
765 DW 0 ;AN000;log vid buf segment override
766 DW 0 ;AN000;general purpose format hook opt
767 DW 0 ;AN000;general purpose format hook opt
768 DW 0 ;AN000;length of translation table
769 DW 0 ;AN000;offset of translation table
770 DW 0 ;AN000;segment of translation table
771 DW 0 ;AN000;monocasing table offset
772 DW 0 ;AN000;monocasing table segment
773 DW 0 ;AN000;dbcs table length
774 DW 0 ;AN000;dbcs table offset
775 DW 0 ;AN000;dbcs table segment
776 DW 0 ;AN068;SEH offset of font descriptor block
777 DW 0 ;AN068;SEH segment of font descriptor block
778 DB 236 DUP(0) ;AN024;
779;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
780;
781; defined FRENCH keyboard
782;
783;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
784WR_SCB7 DW SCB_WRAP ;AN000;option word one
785 DW SCB_SKIP ;AN000;option word two
786 DW SCB_NUMS ;AN000;option word three
787 DW 0 ;AN068;SEH option word four
788 DW SND_FREQ ;AN000;error beep frequency
789 DW 10 ;AN000;upper left row
790 DW LEFT_COL_SCROLL ;AN000;upper left column
791 DW 0 ;AN000;relative upper left row
792 DW 0 ;AN000;relative upper left column
793 DW SCB_LIST7_W ;AN000;line width
794 DW SCB_LIST7_N ;AN000;number of lines
795 DW 1 ;AN000;number of element on top
796 DW SCB_LIST7_N ;AN000;number of elements
797 DW 1 ;AN000;current element
798 DW 0 ;AN000;maximun number of cols to scroll
799 DW 0 ;AN000;display offset into opt strings
800 DW 1 ;AN000;num list txt col offset in strg
801 DB '.' ;AN000;numbered list separator
802 DW 0 ;AN000;select keystroke string length
803 DW 0 ;AN000;select keystroke string offset
804 DW 0 ;AN000;select keystroke string segment
805 DW 0 ;AN000;return/leave string length
806 DW 0 ;AN000;return/leave string offset
807 DW 0 ;AN000;return/leave string segment
808 DW 0 ;AN000;return/erase string length
809 DW 0 ;AN000;return/erase string offset
810 DW 0 ;AN000;return/erase string segment
811 DW WR_UAKEYSLEN ;AN000;up arrow string length
812 DW WR_UAKEYS ;AN000;up arrow string offset
813 DW 0 ;AN000;up arrow string segment
814 DW WR_DAKEYSLEN ;AN000;down arrow string length
815 DW WR_DAKEYS ;AN000;down arrow string offset
816 DW 0 ;AN000;down arrow string segment
817 DW 0 ;AN000;left arrow string length
818 DW 0 ;AN000;left arrow string offset
819 DW 0 ;AN000;left arrow string segment
820 DW 0 ;AN000;right arrow string length
821 DW 0 ;AN000;right arrow string offset
822 DW 0 ;AN000;right arrow string segment
823 DW 0 ;AN000;page-up string length
824 DW 0 ;AN000;page-up string offset
825 DW 0 ;AN000;page-up string segment
826 DW 0 ;AN000;page-down string length
827 DW 0 ;AN000;page-down string offset
828 DW 0 ;AN000;page-down string segment
829 DW WR_PIINDLEN ;AN000;pointer indicator strg length
830 DW WR_PIIND ;AN000;pointer indicator string offset
831 DW 0 ;AN000;pointer indicator string segment
832 DW 1 ;AN000;pointer ind txt col off into strg
833 DW WR_AIINDLEN ;AN000;active indicator strg length
834 DW WR_AIIND ;AN000;active indicator string offset
835 DW 0 ;AN000;active indicator string segment
836 DW 1 ;AN000;active ind txt col off into stg
837 DW WR_CIINDLEN ;AN000;check mark text string length
838 DW WR_CIIND ;AN000;check mark text string offset
839 DW 0 ;AN000;check mark text string segment
840 DW 1 ;AN000;check mark offset into opt strg
841 DW WR_UIINDLEN ;AN000;up indicator string length
842 DW WR_UIIND ;AN000;up indicator string offset
843 DW 0 ;AN000;up indicator string segment
844 DW 2 ;AN000;up indicator row location
845 DW 1 ;AN000;up indicator column location
846 DW WR_DIINDLEN ;AN000;down indicator string length
847 DW WR_DIIND ;AN000;down indicator string offset
848 DW 0 ;AN000;down indicator string segment
849 DW 2 ;AN000;down indicator row location
850 DW 2 ;AN000;down indicator column locaiton
851 DW 0 ;AN000;left indicator string length
852 DW 0 ;AN000;left indicator string offset
853 DW 0 ;AN000;left indicator string segment
854 DW 0 ;AN000;left indicator row location
855 DW 0 ;AN000;left indicator column location
856 DW 0 ;AN000;right indicator string length
857 DW 0 ;AN000;right indicator string offset
858 DW 0 ;AN000;right indicator string segment
859 DW 0 ;AN000;right indicator row location
860 DW 0 ;AN000;right indicator column locaiton
861 DW WR_CIS ;AN000;normal color array offset
862 DW 0 ;AN000;normal color array segment
863 DW 7 ;AN000;logical color index number
864 DW 0 ;AN000;number color index table entries
865 DW 0 ;AN000;offset addr of color index table
866 DW 0 ;AN000;segment addr of color index tabl
867 DW WR_INDEX1 ;AN000;index array offset
868 DW 0 ;AN000;index array segment
869 DW WR_SELECT_NUM ;AN000;element selection array offset
870 DW 0 ;AN000;element selection array segment
871 DW SSC_PTSB ;AN000;option array option word
872 DW SCB_LIST7 ;AN000;option array pointer offset
873 DW 0 ;AN000;option array pointer segment
874 DW SCB_LIST7_W ;AN000;option array string length
875 DW 0 ;AN000;option array string segment
876 DB 'A' ;AN000;option array string term char
877 DW 0 ;AN000;keystroke
878 DW 0 ;AN000;log vid buf offset override
879 DW 0 ;AN000;log vid buf segment override
880 DW 0 ;AN000;general purpose format hook opt
881 DW 0 ;AN000;general purpose format hook opt
882 DW 0 ;AN000;length of translation table
883 DW 0 ;AN000;offset of translation table
884 DW 0 ;AN000;segment of translation table
885 DW 0 ;AN000;monocasing table offset
886 DW 0 ;AN000;monocasing table segment
887 DW 0 ;AN000;dbcs table length
888 DW 0 ;AN000;dbcs table offset
889 DW 0 ;AN000;dbcs table segment
890 DW 0 ;AN068;SEH offset of font descriptor block
891 DW 0 ;AN068;SEH segment of font descriptor block
892 DB 236 DUP(0) ;AN024;
893;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
894;
895; defined italian keyboard
896;
897;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
898WR_SCB8 DW SCB_WRAP ;AN000;option word one
899 DW SCB_SKIP ;AN000;option word two
900 DW SCB_NUMS ;AN000;option word three
901 DW 0 ;AN068;SEH option word four
902 DW SND_FREQ ;AN000;error beep frequency
903 DW 10 ;AN000;upper left row
904 DW LEFT_COL_SCROLL ;AN000;upper left column
905 DW 0 ;AN000;relative upper left row
906 DW 0 ;AN000;relative upper left column
907 DW SCB_LIST8_W ;AN000;line width
908 DW SCB_LIST8_N ;AN000;number of lines
909 DW 1 ;AN000;number of element on top
910 DW SCB_LIST8_N ;AN000;number of elements
911 DW 1 ;AN000;current element
912 DW 0 ;AN000;maximun number of cols to scroll
913 DW 0 ;AN000;display offset into opt strings
914 DW 1 ;AN000;num list txt col offset in strg
915 DB '.' ;AN000;numbered list separator
916 DW 0 ;AN000;select keystroke string length
917 DW 0 ;AN000;select keystroke string offset
918 DW 0 ;AN000;select keystroke string segment
919 DW 0 ;AN000;return/leave string length
920 DW 0 ;AN000;return/leave string offset
921 DW 0 ;AN000;return/leave string segment
922 DW 0 ;AN000;return/erase string length
923 DW 0 ;AN000;return/erase string offset
924 DW 0 ;AN000;return/erase string segment
925 DW WR_UAKEYSLEN ;AN000;up arrow string length
926 DW WR_UAKEYS ;AN000;up arrow string offset
927 DW 0 ;AN000;up arrow string segment
928 DW WR_DAKEYSLEN ;AN000;down arrow string length
929 DW WR_DAKEYS ;AN000;down arrow string offset
930 DW 0 ;AN000;down arrow string segment
931 DW 0 ;AN000;left arrow string length
932 DW 0 ;AN000;left arrow string offset
933 DW 0 ;AN000;left arrow string segment
934 DW 0 ;AN000;right arrow string length
935 DW 0 ;AN000;right arrow string offset
936 DW 0 ;AN000;right arrow string segment
937 DW 0 ;AN000;page-up string length
938 DW 0 ;AN000;page-up string offset
939 DW 0 ;AN000;page-up string segment
940 DW 0 ;AN000;page-down string length
941 DW 0 ;AN000;page-down string offset
942 DW 0 ;AN000;page-down string segment
943 DW WR_PIINDLEN ;AN000;pointer indicator strg length
944 DW WR_PIIND ;AN000;pointer indicator string offset
945 DW 0 ;AN000;pointer indicator string segment
946 DW 1 ;AN000;pointer ind txt col off into strg
947 DW WR_AIINDLEN ;AN000;active indicator strg length
948 DW WR_AIIND ;AN000;active indicator string offset
949 DW 0 ;AN000;active indicator string segment
950 DW 1 ;AN000;active ind txt col off into stg
951 DW WR_CIINDLEN ;AN000;check mark text string length
952 DW WR_CIIND ;AN000;check mark text string offset
953 DW 0 ;AN000;check mark text string segment
954 DW 1 ;AN000;check mark offset into opt strg
955 DW WR_UIINDLEN ;AN000;up indicator string length
956 DW WR_UIIND ;AN000;up indicator string offset
957 DW 0 ;AN000;up indicator string segment
958 DW 2 ;AN000;up indicator row location
959 DW 1 ;AN000;up indicator column location
960 DW WR_DIINDLEN ;AN000;down indicator string length
961 DW WR_DIIND ;AN000;down indicator string offset
962 DW 0 ;AN000;down indicator string segment
963 DW 2 ;AN000;down indicator row location
964 DW 2 ;AN000;down indicator column locaiton
965 DW 0 ;AN000;left indicator string length
966 DW 0 ;AN000;left indicator string offset
967 DW 0 ;AN000;left indicator string segment
968 DW 0 ;AN000;left indicator row location
969 DW 0 ;AN000;left indicator column location
970 DW 0 ;AN000;right indicator string length
971 DW 0 ;AN000;right indicator string offset
972 DW 0 ;AN000;right indicator string segment
973 DW 0 ;AN000;right indicator row location
974 DW 0 ;AN000;right indicator column locaiton
975 DW WR_CIS ;AN000;normal color array offset
976 DW 0 ;AN000;normal color array segment
977 DW 8 ;AN000;logical color index number
978 DW 0 ;AN000;number color index table entries
979 DW 0 ;AN000;offset addr of color index table
980 DW 0 ;AN000;segment addr of color index tabl
981 DW WR_INDEX1 ;AN000;index array offset
982 DW 0 ;AN000;index array segment
983 DW WR_SELECT_NUM ;AN000;element selection array offset
984 DW 0 ;AN000;element selection array segment
985 DW SSC_PTSB ;AN000;option array option word
986 DW SCB_LIST8 ;AN000;option array pointer offset
987 DW 0 ;AN000;option array pointer segment
988 DW SCB_LIST8_W ;AN000;option array string length
989 DW 0 ;AN000;option array string segment
990 DB 'A' ;AN000;option array string term char
991 DW 0 ;AN000;keystroke
992 DW 0 ;AN000;log vid buf offset override
993 DW 0 ;AN000;log vid buf segment override
994 DW 0 ;AN000;general purpose format hook opt
995 DW 0 ;AN000;general purpose format hook opt
996 DW 0 ;AN000;length of translation table
997 DW 0 ;AN000;offset of translation table
998 DW 0 ;AN000;segment of translation table
999 DW 0 ;AN000;monocasing table offset
1000 DW 0 ;AN000;monocasing table segment
1001 DW 0 ;AN000;dbcs table length
1002 DW 0 ;AN000;dbcs table offset
1003 DW 0 ;AN000;dbcs table segment
1004 DW 0 ;AN068;SEH offset of font descriptor block
1005 DW 0 ;AN068;SEH segment of font descriptor block
1006 DB 236 DUP(0) ;AN024;
1007;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1008;
1009; defined UK keyboard
1010;
1011;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1012WR_SCB9 DW SCB_WRAP ;AN000;option word one
1013 DW SCB_SKIP ;AN000;option word two
1014 DW SCB_NUMS ;AN000;option word three
1015 DW 0 ;AN068;SEH option word four
1016 DW SND_FREQ ;AN000;error beep frequency
1017 DW 10 ;AN000;upper left row
1018 DW LEFT_COL_SCROLL ;AN000;upper left column
1019 DW 0 ;AN000;relative upper left row
1020 DW 0 ;AN000;relative upper left column
1021 DW SCB_LIST9_W ;AN000;line width
1022 DW SCB_LIST9_N ;AN000;number of lines
1023 DW 1 ;AN000;number of element on top
1024 DW SCB_LIST9_N ;AN000;number of elements
1025 DW 1 ;AN000;current element
1026 DW 0 ;AN000;maximun number of cols to scroll
1027 DW 0 ;AN000;display offset into opt strings
1028 DW 1 ;AN000;num list txt col offset in strg
1029 DB '.' ;AN000;numbered list separator
1030 DW 0 ;AN000;select keystroke string length
1031 DW 0 ;AN000;select keystroke string offset
1032 DW 0 ;AN000;select keystroke string segment
1033 DW 0 ;AN000;return/leave string length
1034 DW 0 ;AN000;return/leave string offset
1035 DW 0 ;AN000;return/leave string segment
1036 DW 0 ;AN000;return/erase string length
1037 DW 0 ;AN000;return/erase string offset
1038 DW 0 ;AN000;return/erase string segment
1039 DW WR_UAKEYSLEN ;AN000;up arrow string length
1040 DW WR_UAKEYS ;AN000;up arrow string offset
1041 DW 0 ;AN000;up arrow string segment
1042 DW WR_DAKEYSLEN ;AN000;down arrow string length
1043 DW WR_DAKEYS ;AN000;down arrow string offset
1044 DW 0 ;AN000;down arrow string segment
1045 DW 0 ;AN000;left arrow string length
1046 DW 0 ;AN000;left arrow string offset
1047 DW 0 ;AN000;left arrow string segment
1048 DW 0 ;AN000;right arrow string length
1049 DW 0 ;AN000;right arrow string offset
1050 DW 0 ;AN000;right arrow string segment
1051 DW 0 ;AN000;page-up string length
1052 DW 0 ;AN000;page-up string offset
1053 DW 0 ;AN000;page-up string segment
1054 DW 0 ;AN000;page-down string length
1055 DW 0 ;AN000;page-down string offset
1056 DW 0 ;AN000;page-down string segment
1057 DW WR_PIINDLEN ;AN000;pointer indicator strg length
1058 DW WR_PIIND ;AN000;pointer indicator string offset
1059 DW 0 ;AN000;pointer indicator string segment
1060 DW 1 ;AN000;pointer ind txt col off into strg
1061 DW WR_AIINDLEN ;AN000;active indicator strg length
1062 DW WR_AIIND ;AN000;active indicator string offset
1063 DW 0 ;AN000;active indicator string segment
1064 DW 1 ;AN000;active ind txt col off into stg
1065 DW WR_CIINDLEN ;AN000;check mark text string length
1066 DW WR_CIIND ;AN000;check mark text string offset
1067 DW 0 ;AN000;check mark text string segment
1068 DW 1 ;AN000;check mark offset into opt strg
1069 DW WR_UIINDLEN ;AN000;up indicator string length
1070 DW WR_UIIND ;AN000;up indicator string offset
1071 DW 0 ;AN000;up indicator string segment
1072 DW 2 ;AN000;up indicator row location
1073 DW 1 ;AN000;up indicator column location
1074 DW WR_DIINDLEN ;AN000;down indicator string length
1075 DW WR_DIIND ;AN000;down indicator string offset
1076 DW 0 ;AN000;down indicator string segment
1077 DW 2 ;AN000;down indicator row location
1078 DW 2 ;AN000;down indicator column locaiton
1079 DW 0 ;AN000;left indicator string length
1080 DW 0 ;AN000;left indicator string offset
1081 DW 0 ;AN000;left indicator string segment
1082 DW 0 ;AN000;left indicator row location
1083 DW 0 ;AN000;left indicator column location
1084 DW 0 ;AN000;right indicator string length
1085 DW 0 ;AN000;right indicator string offset
1086 DW 0 ;AN000;right indicator string segment
1087 DW 0 ;AN000;right indicator row location
1088 DW 0 ;AN000;right indicator column locaiton
1089 DW WR_CIS ;AN000;normal color array offset
1090 DW 0 ;AN000;normal color array segment
1091 DW 9 ;AN000;logical color index number
1092 DW 0 ;AN000;number color index table entries
1093 DW 0 ;AN000;offset addr of color index table
1094 DW 0 ;AN000;segment addr of color index tabl
1095 DW WR_INDEX1 ;AN000;index array offset
1096 DW 0 ;AN000;index array segment
1097 DW WR_SELECT_NUM ;AN000;element selection array offset
1098 DW 0 ;AN000;element selection array segment
1099 DW SSC_PTSB ;AN000;option array option word
1100 DW SCB_LIST9 ;AN000;option array pointer offset
1101 DW 0 ;AN000;option array pointer segment
1102 DW SCB_LIST9_W ;AN000;option array string length
1103 DW 0 ;AN000;option array string segment
1104 DB 'A' ;AN000;option array string term char
1105 DW 0 ;AN000;keystroke
1106 DW 0 ;AN000;log vid buf offset override
1107 DW 0 ;AN000;log vid buf segment override
1108 DW 0 ;AN000;general purpose format hook opt
1109 DW 0 ;AN000;general purpose format hook opt
1110 DW 0 ;AN000;length of translation table
1111 DW 0 ;AN000;offset of translation table
1112 DW 0 ;AN000;segment of translation table
1113 DW 0 ;AN000;monocasing table offset
1114 DW 0 ;AN000;monocasing table segment
1115 DW 0 ;AN000;dbcs table length
1116 DW 0 ;AN000;dbcs table offset
1117 DW 0 ;AN000;dbcs table segment
1118 DW 0 ;AN068;SEH offset of font descriptor block
1119 DW 0 ;AN068;SEH segment of font descriptor block
1120 DB 236 DUP(0) ;AN024;
1121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1122;
1123; select drive b: or c:
1124;
1125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1126WR_SCB10 DW SCB_WRAP ;AN000;option word one
1127 DW SCB_SKIP ;AN000;option word two
1128 DW SCB_NUMS ;AN000;option word three
1129 DW 0 ;AN068;SEH option word four
1130 DW SND_FREQ ;AN000;error beep frequency
1131 DW 8 ;AN000;upper left row
1132 DW LEFT_COL_SCROLL ;AN000;upper left column
1133 DW 0 ;AN000;relative upper left row
1134 DW 0 ;AN000;relative upper left column
1135 DW SCB_LIST10_W ;AN000;line width
1136 DW SCB_LIST10_N ;AN000;number of lines
1137 DW 1 ;AN000;number of element on top
1138 DW SCB_LIST10_N ;AN000;number of elements
1139 DW 1 ;AN000;current element
1140 DW 0 ;AN000;maximun number of cols to scroll
1141 DW 0 ;AN000;display offset into opt strings
1142 DW 1 ;AN000;num list txt col offset in strg
1143 DB '.' ;AN000;numbered list separator
1144 DW 0 ;AN000;select keystroke string length
1145 DW 0 ;AN000;select keystroke string offset
1146 DW 0 ;AN000;select keystroke string segment
1147 DW 0 ;AN000;return/leave string length
1148 DW 0 ;AN000;return/leave string offset
1149 DW 0 ;AN000;return/leave string segment
1150 DW 0 ;AN000;return/erase string length
1151 DW 0 ;AN000;return/erase string offset
1152 DW 0 ;AN000;return/erase string segment
1153 DW WR_UAKEYSLEN ;AN000;up arrow string length
1154 DW WR_UAKEYS ;AN000;up arrow string offset
1155 DW 0 ;AN000;up arrow string segment
1156 DW WR_DAKEYSLEN ;AN000;down arrow string length
1157 DW WR_DAKEYS ;AN000;down arrow string offset
1158 DW 0 ;AN000;down arrow string segment
1159 DW 0 ;AN000;left arrow string length
1160 DW 0 ;AN000;left arrow string offset
1161 DW 0 ;AN000;left arrow string segment
1162 DW 0 ;AN000;right arrow string length
1163 DW 0 ;AN000;right arrow string offset
1164 DW 0 ;AN000;right arrow string segment
1165 DW 0 ;AN000;page-up string length
1166 DW 0 ;AN000;page-up string offset
1167 DW 0 ;AN000;page-up string segment
1168 DW 0 ;AN000;page-down string length
1169 DW 0 ;AN000;page-down string offset
1170 DW 0 ;AN000;page-down string segment
1171 DW WR_PIINDLEN ;AN000;pointer indicator strg length
1172 DW WR_PIIND ;AN000;pointer indicator string offset
1173 DW 0 ;AN000;pointer indicator string segment
1174 DW 1 ;AN000;pointer ind txt col off into strg
1175 DW WR_AIINDLEN ;AN000;active indicator strg length
1176 DW WR_AIIND ;AN000;active indicator string offset
1177 DW 0 ;AN000;active indicator string segment
1178 DW 1 ;AN000;active ind txt col off into stg
1179 DW WR_CIINDLEN ;AN000;check mark text string length
1180 DW WR_CIIND ;AN000;check mark text string offset
1181 DW 0 ;AN000;check mark text string segment
1182 DW 1 ;AN000;check mark offset into opt strg
1183 DW WR_UIINDLEN ;AN000;up indicator string length
1184 DW WR_UIIND ;AN000;up indicator string offset
1185 DW 0 ;AN000;up indicator string segment
1186 DW 2 ;AN000;up indicator row location
1187 DW 1 ;AN000;up indicator column location
1188 DW WR_DIINDLEN ;AN000;down indicator string length
1189 DW WR_DIIND ;AN000;down indicator string offset
1190 DW 0 ;AN000;down indicator string segment
1191 DW 2 ;AN000;down indicator row location
1192 DW 2 ;AN000;down indicator column locaiton
1193 DW 0 ;AN000;left indicator string length
1194 DW 0 ;AN000;left indicator string offset
1195 DW 0 ;AN000;left indicator string segment
1196 DW 0 ;AN000;left indicator row location
1197 DW 0 ;AN000;left indicator column location
1198 DW 0 ;AN000;right indicator string length
1199 DW 0 ;AN000;right indicator string offset
1200 DW 0 ;AN000;right indicator string segment
1201 DW 0 ;AN000;right indicator row location
1202 DW 0 ;AN000;right indicator column locaiton
1203 DW WR_CIS ;AN000;normal color array offset
1204 DW 0 ;AN000;normal color array segment
1205 DW 10 ;AN000;logical color index number
1206 DW 0 ;AN000;number color index table entries
1207 DW 0 ;AN000;offset addr of color index table
1208 DW 0 ;AN000;segment addr of color index tabl
1209 DW WR_INDEX1 ;AN000;index array offset
1210 DW 0 ;AN000;index array segment
1211 DW WR_SELECT_NUM ;AN000;element selection array offset
1212 DW 0 ;AN000;element selection array segment
1213 DW SSC_PTSB ;AN000;option array option word
1214 DW SCB_LIST10 ;AN000;option array pointer offset
1215 DW 0 ;AN000;option array pointer segment
1216 DW SCB_LIST10_W ;AN000;option array string length
1217 DW 0 ;AN000;option array string segment
1218 DB 'A' ;AN000;option array string term char
1219 DW 0 ;AN000;keystroke
1220 DW 0 ;AN000;log vid buf offset override
1221 DW 0 ;AN000;log vid buf segment override
1222 DW 0 ;AN000;general purpose format hook opt
1223 DW 0 ;AN000;general purpose format hook opt
1224 DW 0 ;AN000;length of translation table
1225 DW 0 ;AN000;offset of translation table
1226 DW 0 ;AN000;segment of translation table
1227 DW 0 ;AN000;monocasing table offset
1228 DW 0 ;AN000;monocasing table segment
1229 DW 0 ;AN000;dbcs table length
1230 DW 0 ;AN000;dbcs table offset
1231 DW 0 ;AN000;dbcs table segment
1232 DW 0 ;AN068;SEH offset of font descriptor block
1233 DW 0 ;AN068;SEH segment of font descriptor block
1234 DB 236 DUP(0) ;AN024;
1235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1236;
1237; select printer type
1238;
1239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1240WR_SCB11 DW 0 ;AN000;option word one
1241 DW scb_uind ;AN000;option word two
1242 DW 0 ;AN000;option word three
1243 DW 0 ;AN068;SEH option word four
1244 DW SND_FREQ ;AN000;error beep frequency
1245 DW 11 ;AN000;upper left row
1246 DW LEFT_COL_SCROLL ;AN000;upper left column
1247 DW 0 ;AN000;relative upper left row
1248 DW 0 ;AN000;relative upper left column
1249 DW SCB_LIST11_W ;AN000;line width
1250 DW 10 ;AN000;number of lines
1251 DW 1 ;AN000;number of element on top
1252 DW SCB_LIST11_N ;AN000;number of elements
1253 DW 1 ;AN000;current element
1254 DW 0 ;AN000;maximun number of cols to scroll
1255 DW 0 ;AN000;display offset into opt strings
1256 DW 1 ;AN000;num list txt col offset in strg
1257 DB '.' ;AN000;numbered list separator
1258 DW 0 ;AN000;select keystroke string length
1259 DW 0 ;AN000;select keystroke string offset
1260 DW 0 ;AN000;select keystroke string segment
1261 DW 0 ;AN000;return/leave string length
1262 DW 0 ;AN000;return/leave string offset
1263 DW 0 ;AN000;return/leave string segment
1264 DW 0 ;AN000;return/erase string length
1265 DW 0 ;AN000;return/erase string offset
1266 DW 0 ;AN000;return/erase string segment
1267 DW WR_UAKEYSLEN ;AN000;up arrow string length
1268 DW WR_UAKEYS ;AN000;up arrow string offset
1269 DW 0 ;AN000;up arrow string segment
1270 DW WR_DAKEYSLEN ;AN000;down arrow string length
1271 DW WR_DAKEYS ;AN000;down arrow string offset
1272 DW 0 ;AN000;down arrow string segment
1273 DW 0 ;AN000;left arrow string length
1274 DW 0 ;AN000;left arrow string offset
1275 DW 0 ;AN000;left arrow string segment
1276 DW 0 ;AN000;right arrow string length
1277 DW 0 ;AN000;right arrow string offset
1278 DW 0 ;AN000;right arrow string segment
1279 DW 0 ;AN000;page-up string length
1280 DW 0 ;AN000;page-up string offset
1281 DW 0 ;AN000;page-up string segment
1282 DW 0 ;AN000;page-down string length
1283 DW 0 ;AN000;page-down string offset
1284 DW 0 ;AN000;page-down string segment
1285 DW WR_PIINDLEN ;AN000;pointer indicator strg length
1286 DW WR_PIIND ;AN000;pointer indicator string offset
1287 DW 0 ;AN000;pointer indicator string segment
1288 DW 1 ;AN000;pointer ind txt col off into strg
1289 DW WR_AIINDLEN ;AN000;active indicator strg length
1290 DW WR_AIIND ;AN000;active indicator string offset
1291 DW 0 ;AN000;active indicator string segment
1292 DW 1 ;AN000;active ind txt col off into stg
1293 DW WR_CIINDLEN ;AN000;check mark text string length
1294 DW WR_CIIND ;AN000;check mark text string offset
1295 DW 0 ;AN000;check mark text string segment
1296 DW 1 ;AN000;check mark offset into opt strg
1297 DW WR_UIINDLEN ;AN000;up indicator string length
1298 DW WR_UIIND ;AN000;up indicator string offset
1299 DW 0 ;AN000;up indicator string segment
1300 DW 9 ;AN000;up indicator row location
1301 DW 64 ;AN000;up indicator column location
1302 DW WR_DIINDLEN ;AN000;down indicator string length
1303 DW WR_DIIND ;AN000;down indicator string offset
1304 DW 0 ;AN000;down indicator string segment
1305 DW 9 ;AN000;down indicator row location
1306 DW 66 ;AN000;down indicator column locaiton
1307 DW 0 ;AN000;left indicator string length
1308 DW 0 ;AN000;left indicator string offset
1309 DW 0 ;AN000;left indicator string segment
1310 DW 0 ;AN000;left indicator row location
1311 DW 0 ;AN000;left indicator column location
1312 DW 0 ;AN000;right indicator string length
1313 DW 0 ;AN000;right indicator string offset
1314 DW 0 ;AN000;right indicator string segment
1315 DW 0 ;AN000;right indicator row location
1316 DW 0 ;AN000;right indicator column locaiton
1317 DW WR_CIS ;AN000;normal color array offset
1318 DW 0 ;AN000;normal color array segment
1319 DW 1 ;AN000;logical color index number
1320 DW 16 ;AN000;number color index table entries
1321 DW WR_CIS ;AN000;offset addr of color index table
1322 DW 0 ;AN000;segment addr of color index tabl
1323 DW WR_INDEX1 ;AN000;index array offset
1324 DW 0 ;AN000;index array segment
1325 DW WR_SELECT ;AN000;element selection array offset
1326 DW 0 ;AN000;element selection array segment
1327 DW SSC_PTSB ;AN000;option array option word
1328 DW SCB_LIST11 ;AN000;option array pointer offset
1329 DW 0 ;AN000;option array pointer segment
1330 DW SCB_LIST11_W ;AN000;option array string length
1331 DW 0 ;AN000;option array string segment
1332 DB 'A' ;AN000;option array string term char
1333 DW 0 ;AN000;keystroke
1334 DW 0 ;AN000;log vid buf offset override
1335 DW 0 ;AN000;log vid buf segment override
1336 DW 0 ;AN000;general purpose format hook opt
1337 DW 0 ;AN000;general purpose format hook opt
1338 DW 0 ;AN000;length of translation table
1339 DW 0 ;AN000;offset of translation table
1340 DW 0 ;AN000;segment of translation table
1341 DW 0 ;AN000;monocasing table offset
1342 DW 0 ;AN000;monocasing table segment
1343 DW 0 ;AN000;dbcs table length
1344 DW 0 ;AN000;dbcs table offset
1345 DW 0 ;AN000;dbcs table segment
1346 DW 0 ;AN068;SEH offset of font descriptor block
1347 DW 0 ;AN068;SEH segment of font descriptor block
1348 DB 236 DUP(0) ;AN024;
1349;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1350;
1351; PARALLEL PRINTER PORT
1352;
1353;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1354WR_SCB12 DW SCB_WRAP ;AN000;option word one
1355 DW SCB_SKIP ;AN000;option word two
1356 DW SCB_NUMS ;AN000;option word three
1357 DW 0 ;AN068;SEH option word four
1358 DW SND_FREQ ;AN000;error beep frequency
1359 DW 9 ;AN000;upper left row
1360 DW LEFT_COL_SCROLL ;AN000;upper left column
1361 DW 0 ;AN000;relative upper left row
1362 DW 0 ;AN000;relative upper left column
1363 DW SCB_LIST12_W ;AN000;line width
1364 DW SCB_LIST12_N ;AN000;number of lines
1365 DW 1 ;AN000;number of element on top
1366 DW SCB_LIST12_N ;AN000;number of elements
1367 DW 1 ;AN000;current element
1368 DW 0 ;AN000;maximun number of cols to scroll
1369 DW 0 ;AN000;display offset into opt strings
1370 DW 1 ;AN000;num list txt col offset in strg
1371 DB '.' ;AN000;numbered list separator
1372 DW 0 ;AN000;select keystroke string length
1373 DW 0 ;AN000;select keystroke string offset
1374 DW 0 ;AN000;select keystroke string segment
1375 DW 0 ;AN000;return/leave string length
1376 DW 0 ;AN000;return/leave string offset
1377 DW 0 ;AN000;return/leave string segment
1378 DW 0 ;AN000;return/erase string length
1379 DW 0 ;AN000;return/erase string offset
1380 DW 0 ;AN000;return/erase string segment
1381 DW WR_UAKEYSLEN ;AN000;up arrow string length
1382 DW WR_UAKEYS ;AN000;up arrow string offset
1383 DW 0 ;AN000;up arrow string segment
1384 DW WR_DAKEYSLEN ;AN000;down arrow string length
1385 DW WR_DAKEYS ;AN000;down arrow string offset
1386 DW 0 ;AN000;down arrow string segment
1387 DW 0 ;AN000;left arrow string length
1388 DW 0 ;AN000;left arrow string offset
1389 DW 0 ;AN000;left arrow string segment
1390 DW 0 ;AN000;right arrow string length
1391 DW 0 ;AN000;right arrow string offset
1392 DW 0 ;AN000;right arrow string segment
1393 DW 0 ;AN000;page-up string length
1394 DW 0 ;AN000;page-up string offset
1395 DW 0 ;AN000;page-up string segment
1396 DW 0 ;AN000;page-down string length
1397 DW 0 ;AN000;page-down string offset
1398 DW 0 ;AN000;page-down string segment
1399 DW WR_PIINDLEN ;AN000;pointer indicator strg length
1400 DW WR_PIIND ;AN000;pointer indicator string offset
1401 DW 0 ;AN000;pointer indicator string segment
1402 DW 1 ;AN000;pointer ind txt col off into strg
1403 DW WR_AIINDLEN ;AN000;active indicator strg length
1404 DW WR_AIIND ;AN000;active indicator string offset
1405 DW 0 ;AN000;active indicator string segment
1406 DW 1 ;AN000;active ind txt col off into stg
1407 DW WR_CIINDLEN ;AN000;check mark text string length
1408 DW WR_CIIND ;AN000;check mark text string offset
1409 DW 0 ;AN000;check mark text string segment
1410 DW 1 ;AN000;check mark offset into opt strg
1411 DW WR_UIINDLEN ;AN000;up indicator string length
1412 DW WR_UIIND ;AN000;up indicator string offset
1413 DW 0 ;AN000;up indicator string segment
1414 DW 2 ;AN000;up indicator row location
1415 DW 1 ;AN000;up indicator column location
1416 DW WR_DIINDLEN ;AN000;down indicator string length
1417 DW WR_DIIND ;AN000;down indicator string offset
1418 DW 0 ;AN000;down indicator string segment
1419 DW 2 ;AN000;down indicator row location
1420 DW 2 ;AN000;down indicator column locaiton
1421 DW 0 ;AN000;left indicator string length
1422 DW 0 ;AN000;left indicator string offset
1423 DW 0 ;AN000;left indicator string segment
1424 DW 0 ;AN000;left indicator row location
1425 DW 0 ;AN000;left indicator column location
1426 DW 0 ;AN000;right indicator string length
1427 DW 0 ;AN000;right indicator string offset
1428 DW 0 ;AN000;right indicator string segment
1429 DW 0 ;AN000;right indicator row location
1430 DW 0 ;AN000;right indicator column locaiton
1431 DW WR_CIS ;AN000;normal color array offset
1432 DW 0 ;AN000;normal color array segment
1433 DW 1 ;AN000;logical color index number
1434 DW 16 ;AN000;number color index table entries
1435 DW WR_CIS ;AN000;offset addr of color index table
1436 DW 0 ;AN000;segment addr of color index tabl
1437 DW WR_INDEX1 ;AN000;index array offset
1438 DW 0 ;AN000;index array segment
1439 DW WR_SELECT_NUM ;AN000;element selection array offset
1440 DW 0 ;AN000;element selection array segment
1441 DW SSC_PTSB ;AN000;option array option word
1442 DW SCB_LIST12 ;AN000;option array pointer offset
1443 DW 0 ;AN000;option array pointer segment
1444 DW SCB_LIST12_W ;AN000;option array string length
1445 DW 0 ;AN000;option array string segment
1446 DB 'A' ;AN000;option array string term char
1447 DW 0 ;AN000;keystroke
1448 DW 0 ;AN000;log vid buf offset override
1449 DW 0 ;AN000;log vid buf segment override
1450 DW 0 ;AN000;general purpose format hook opt
1451 DW 0 ;AN000;general purpose format hook opt
1452 DW 0 ;AN000;length of translation table
1453 DW 0 ;AN000;offset of translation table
1454 DW 0 ;AN000;segment of translation table
1455 DW 0 ;AN000;monocasing table offset
1456 DW 0 ;AN000;monocasing table segment
1457 DW 0 ;AN000;dbcs table length
1458 DW 0 ;AN000;dbcs table offset
1459 DW 0 ;AN000;dbcs table segment
1460 DW 0 ;AN068;SEH offset of font descriptor block
1461 DW 0 ;AN068;SEH segment of font descriptor block
1462 DB 236 DUP(0) ;AN024;
1463;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1464;
1465; serial port
1466;
1467;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1468WR_SCB13 DW SCB_WRAP ;AN000;option word one
1469 DW SCB_SKIP ;AN000;option word two
1470 DW SCB_NUMS ;AN000;option word three
1471 DW 0 ;AN068;SEH option word four
1472 DW SND_FREQ ;AN000;error beep frequency
1473 DW 8 ;AN000;upper left row
1474 DW LEFT_COL_SCROLL ;AN000;upper left column
1475 DW 0 ;AN000;relative upper left row
1476 DW 0 ;AN000;relative upper left column
1477 DW SCB_LIST13_W ;AN000;line width
1478 DW SCB_LIST13_N ;AN000;number of lines
1479 DW 1 ;AN000;number of element on top
1480 DW SCB_LIST13_N ;AN000;number of elements
1481 DW 1 ;AN000;current element
1482 DW 0 ;AN000;maximun number of cols to scroll
1483 DW 0 ;AN000;display offset into opt strings
1484 DW 1 ;AN000;num list txt col offset in strg
1485 DB '.' ;AN000;numbered list separator
1486 DW 0 ;AN000;select keystroke string length
1487 DW 0 ;AN000;select keystroke string offset
1488 DW 0 ;AN000;select keystroke string segment
1489 DW 0 ;AN000;return/leave string length
1490 DW 0 ;AN000;return/leave string offset
1491 DW 0 ;AN000;return/leave string segment
1492 DW 0 ;AN000;return/erase string length
1493 DW 0 ;AN000;return/erase string offset
1494 DW 0 ;AN000;return/erase string segment
1495 DW WR_UAKEYSLEN ;AN000;up arrow string length
1496 DW WR_UAKEYS ;AN000;up arrow string offset
1497 DW 0 ;AN000;up arrow string segment
1498 DW WR_DAKEYSLEN ;AN000;down arrow string length
1499 DW WR_DAKEYS ;AN000;down arrow string offset
1500 DW 0 ;AN000;down arrow string segment
1501 DW 0 ;AN000;left arrow string length
1502 DW 0 ;AN000;left arrow string offset
1503 DW 0 ;AN000;left arrow string segment
1504 DW 0 ;AN000;right arrow string length
1505 DW 0 ;AN000;right arrow string offset
1506 DW 0 ;AN000;right arrow string segment
1507 DW 0 ;AN000;page-up string length
1508 DW 0 ;AN000;page-up string offset
1509 DW 0 ;AN000;page-up string segment
1510 DW 0 ;AN000;page-down string length
1511 DW 0 ;AN000;page-down string offset
1512 DW 0 ;AN000;page-down string segment
1513 DW WR_PIINDLEN ;AN000;pointer indicator strg length
1514 DW WR_PIIND ;AN000;pointer indicator string offset
1515 DW 0 ;AN000;pointer indicator string segment
1516 DW 1 ;AN000;pointer ind txt col off into strg
1517 DW WR_AIINDLEN ;AN000;active indicator strg length
1518 DW WR_AIIND ;AN000;active indicator string offset
1519 DW 0 ;AN000;active indicator string segment
1520 DW 1 ;AN000;active ind txt col off into stg
1521 DW WR_CIINDLEN ;AN000;check mark text string length
1522 DW WR_CIIND ;AN000;check mark text string offset
1523 DW 0 ;AN000;check mark text string segment
1524 DW 1 ;AN000;check mark offset into opt strg
1525 DW WR_UIINDLEN ;AN000;up indicator string length
1526 DW WR_UIIND ;AN000;up indicator string offset
1527 DW 0 ;AN000;up indicator string segment
1528 DW 2 ;AN000;up indicator row location
1529 DW 1 ;AN000;up indicator column location
1530 DW WR_DIINDLEN ;AN000;down indicator string length
1531 DW WR_DIIND ;AN000;down indicator string offset
1532 DW 0 ;AN000;down indicator string segment
1533 DW 2 ;AN000;down indicator row location
1534 DW 2 ;AN000;down indicator column locaiton
1535 DW 0 ;AN000;left indicator string length
1536 DW 0 ;AN000;left indicator string offset
1537 DW 0 ;AN000;left indicator string segment
1538 DW 0 ;AN000;left indicator row location
1539 DW 0 ;AN000;left indicator column location
1540 DW 0 ;AN000;right indicator string length
1541 DW 0 ;AN000;right indicator string offset
1542 DW 0 ;AN000;right indicator string segment
1543 DW 0 ;AN000;right indicator row location
1544 DW 0 ;AN000;right indicator column locaiton
1545 DW WR_CIS ;AN000;normal color array offset
1546 DW 0 ;AN000;normal color array segment
1547 DW 1 ;AN000;logical color index number
1548 DW 16 ;AN000;number color index table entries
1549 DW WR_CIS ;AN000;offset addr of color index table
1550 DW 0 ;AN000;segment addr of color index tabl
1551 DW WR_INDEX1 ;AN000;index array offset
1552 DW 0 ;AN000;index array segment
1553 DW WR_SELECT ;AN000;element selection array offset
1554 DW 0 ;AN000;element selection array segment
1555 DW SSC_PTSB ;AN000;option array option word
1556 DW SCB_LIST13 ;AN000;option array pointer offset
1557 DW 0 ;AN000;option array pointer segment
1558 DW SCB_LIST13_W ;AN000;option array string length
1559 DW 0 ;AN000;option array string segment
1560 DB 'A' ;AN000;option array string term char
1561 DW 0 ;AN000;keystroke
1562 DW 0 ;AN000;log vid buf offset override
1563 DW 0 ;AN000;log vid buf segment override
1564 DW 0 ;AN000;general purpose format hook opt
1565 DW 0 ;AN000;general purpose format hook opt
1566 DW 0 ;AN000;length of translation table
1567 DW 0 ;AN000;offset of translation table
1568 DW 0 ;AN000;segment of translation table
1569 DW 0 ;AN000;monocasing table offset
1570 DW 0 ;AN000;monocasing table segment
1571 DW 0 ;AN000;dbcs table length
1572 DW 0 ;AN000;dbcs table offset
1573 DW 0 ;AN000;dbcs table segment
1574 DW 0 ;AN068;SEH offset of font descriptor block
1575 DW 0 ;AN068;SEH segment of font descriptor block
1576 DB 236 DUP(0) ;AN024;
1577;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1578;
1579; parallel redirection
1580;
1581;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1582WR_SCB14 DW SCB_WRAP ;AN000;option word one
1583 DW SCB_SKIP ;AN000;option word two
1584 DW SCB_NUMS ;AN000;option word three
1585 DW 0 ;AN068;SEH option word four
1586 DW SND_FREQ ;AN000;error beep frequency
1587 DW 17 ;AN000;upper left row
1588 DW LEFT_COL_SCROLL ;AN000;upper left column
1589 DW 0 ;AN000;relative upper left row
1590 DW 0 ;AN000;relative upper left column
1591 DW SCB_LIST14_W ;AN000;line width
1592 DW SCB_LIST14_N ;AN000;number of lines
1593 DW 1 ;AN000;number of element on top
1594 DW SCB_LIST14_N ;AN000;number of elements
1595 DW 1 ;AN000;current element
1596 DW 0 ;AN000;maximun number of cols to scroll
1597 DW 0 ;AN000;display offset into opt strings
1598 DW 1 ;AN000;num list txt col offset in strg
1599 DB '.' ;AN000;numbered list separator
1600 DW 0 ;AN000;select keystroke string length
1601 DW 0 ;AN000;select keystroke string offset
1602 DW 0 ;AN000;select keystroke string segment
1603 DW 0 ;AN000;return/leave string length
1604 DW 0 ;AN000;return/leave string offset
1605 DW 0 ;AN000;return/leave string segment
1606 DW 0 ;AN000;return/erase string length
1607 DW 0 ;AN000;return/erase string offset
1608 DW 0 ;AN000;return/erase string segment
1609 DW WR_UAKEYSLEN ;AN000;up arrow string length
1610 DW WR_UAKEYS ;AN000;up arrow string offset
1611 DW 0 ;AN000;up arrow string segment
1612 DW WR_DAKEYSLEN ;AN000;down arrow string length
1613 DW WR_DAKEYS ;AN000;down arrow string offset
1614 DW 0 ;AN000;down arrow string segment
1615 DW 0 ;AN000;left arrow string length
1616 DW 0 ;AN000;left arrow string offset
1617 DW 0 ;AN000;left arrow string segment
1618 DW 0 ;AN000;right arrow string length
1619 DW 0 ;AN000;right arrow string offset
1620 DW 0 ;AN000;right arrow string segment
1621 DW WR_PUKEYSLEN ;AN000;page-up string length
1622 DW WR_PUKEYS ;AN000;page-up string offset
1623 DW 0 ;AN000;page-up string segment
1624 DW WR_PDKEYSLEN ;AN000;page-down string length
1625 DW WR_PDKEYS ;AN000;page-down string offset
1626 DW 0 ;AN000;page-down string segment
1627 DW WR_PIINDLEN ;AN000;pointer indicator strg length
1628 DW WR_PIIND ;AN000;pointer indicator string offset
1629 DW 0 ;AN000;pointer indicator string segment
1630 DW 1 ;AN000;pointer ind txt col off into strg
1631 DW WR_AIINDLEN ;AN000;active indicator strg length
1632 DW WR_AIIND ;AN000;active indicator string offset
1633 DW 0 ;AN000;active indicator string segment
1634 DW 1 ;AN000;active ind txt col off into stg
1635 DW WR_CIINDLEN ;AN000;check mark text string length
1636 DW WR_CIIND ;AN000;check mark text string offset
1637 DW 0 ;AN000;check mark text string segment
1638 DW 1 ;AN000;check mark offset into opt strg
1639 DW WR_UIINDLEN ;AN000;up indicator string length
1640 DW WR_UIIND ;AN000;up indicator string offset
1641 DW 0 ;AN000;up indicator string segment
1642 DW 2 ;AN000;up indicator row location
1643 DW 1 ;AN000;up indicator column location
1644 DW WR_DIINDLEN ;AN000;down indicator string length
1645 DW WR_DIIND ;AN000;down indicator string offset
1646 DW 0 ;AN000;down indicator string segment
1647 DW 2 ;AN000;down indicator row location
1648 DW 2 ;AN000;down indicator column locaiton
1649 DW 0 ;AN000;left indicator string length
1650 DW 0 ;AN000;left indicator string offset
1651 DW 0 ;AN000;left indicator string segment
1652 DW 0 ;AN000;left indicator row location
1653 DW 0 ;AN000;left indicator column location
1654 DW 0 ;AN000;right indicator string length
1655 DW 0 ;AN000;right indicator string offset
1656 DW 0 ;AN000;right indicator string segment
1657 DW 0 ;AN000;right indicator row location
1658 DW 0 ;AN000;right indicator column locaiton
1659 DW 0 ;AN000;normal color array offset
1660 DW 0 ;AN000;normal color array segment
1661 DW 1 ;AN000;logical color index number
1662 DW 16 ;AN000;number color index table entries
1663 DW WR_CIS ;AN000;offset addr of color index table
1664 DW 0 ;AN000;segment addr of color index tabl
1665 DW WR_INDEX1 ;AN000;index array offset
1666 DW 0 ;AN000;index array segment
1667 DW WR_SELECT ;AN000;element selection array offset
1668 DW 0 ;AN000;element selection array segment
1669 DW SSC_PTSB ;AN000;option array option word
1670 DW SCB_LIST14 ;AN000;option array pointer offset
1671 DW 0 ;AN000;option array pointer segment
1672 DW SCB_LIST14_W ;AN000;option array string length
1673 DW 0 ;AN000;option array string segment
1674 DB 'A' ;AN000;option array string term char
1675 DW 0 ;AN000;keystroke
1676 DW 0 ;AN000;log vid buf offset override
1677 DW 0 ;AN000;log vid buf segment override
1678 DW 0 ;AN000;general purpose format hook opt
1679 DW 0 ;AN000;general purpose format hook opt
1680 DW 0 ;AN000;length of translation table
1681 DW 0 ;AN000;offset of translation table
1682 DW 0 ;AN000;segment of translation table
1683 DW 0 ;AN000;monocasing table offset
1684 DW 0 ;AN000;monocasing table segment
1685 DW 0 ;AN000;dbcs table length
1686 DW 0 ;AN000;dbcs table offset
1687 DW 0 ;AN000;dbcs table segment
1688 DW 0 ;AN068;SEH offset of font descriptor block
1689 DW 0 ;AN068;SEH segment of font descriptor block
1690 DB 236 DUP(0) ;AN024;
1691;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1692;
1693; review selections
1694;
1695;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1696WR_SCB15 DW SCB_WRAP ;AN000;option word one
1697 DW SCB_SKIP ;AN000;option word two
1698 DW SCB_NUMS ;AN000;option word three
1699 DW 0 ;AN068;SEH option word four
1700 DW SND_FREQ ;AN000;error beep frequency
1701 DW 11 ;AC079;SEH ;AN000;upper left row
1702 DW LEFT_COL_SCROLL ;AN000;upper left column
1703 DW 0 ;AN000;relative upper left row
1704 DW 0 ;AN000;relative upper left column
1705 DW SCB_LIST15_W ;AN000;line width
1706 DW SCB_LIST15_N ;AN000;number of lines
1707 DW 1 ;AN000;number of element on top
1708 DW SCB_LIST15_N ;AN000;number of elements
1709 DW 1 ;AN000;current element
1710 DW 0 ;AN000;maximun number of cols to scroll
1711 DW 0 ;AN000;display offset into opt strings
1712 DW 1 ;AN000;num list txt col offset in strg
1713 DB '.' ;AN000;numbered list separator
1714 DW 0 ;AN000;select keystroke string length
1715 DW 0 ;AN000;select keystroke string offset
1716 DW 0 ;AN000;select keystroke string segment
1717 DW 0 ;AN000;return/leave string length
1718 DW 0 ;AN000;return/leave string offset
1719 DW 0 ;AN000;return/leave string segment
1720 DW 0 ;AN000;return/erase string length
1721 DW 0 ;AN000;return/erase string offset
1722 DW 0 ;AN000;return/erase string segment
1723 DW WR_UAKEYSLEN ;AN000;up arrow string length
1724 DW WR_UAKEYS ;AN000;up arrow string offset
1725 DW 0 ;AN000;up arrow string segment
1726 DW WR_DAKEYSLEN ;AN000;down arrow string length
1727 DW WR_DAKEYS ;AN000;down arrow string offset
1728 DW 0 ;AN000;down arrow string segment
1729 DW 0 ;AN000;left arrow string length
1730 DW 0 ;AN000;left arrow string offset
1731 DW 0 ;AN000;left arrow string segment
1732 DW 0 ;AN000;right arrow string length
1733 DW 0 ;AN000;right arrow string offset
1734 DW 0 ;AN000;right arrow string segment
1735 DW 0 ;AN000;page-up string length
1736 DW 0 ;AN000;page-up string offset
1737 DW 0 ;AN000;page-up string segment
1738 DW 0 ;AN000;page-down string length
1739 DW 0 ;AN000;page-down string offset
1740 DW 0 ;AN000;page-down string segment
1741 DW WR_PIINDLEN ;AN000;pointer indicator strg length
1742 DW WR_PIIND ;AN000;pointer indicator string offset
1743 DW 0 ;AN000;pointer indicator string segment
1744 DW 1 ;AN000;pointer ind txt col off into strg
1745 DW WR_AIINDLEN ;AN000;active indicator strg length
1746 DW WR_AIIND ;AN000;active indicator string offset
1747 DW 0 ;AN000;active indicator string segment
1748 DW 1 ;AN000;active ind txt col off into stg
1749 DW WR_CIINDLEN ;AN000;check mark text string length
1750 DW WR_CIIND ;AN000;check mark text string offset
1751 DW 0 ;AN000;check mark text string segment
1752 DW 1 ;AN000;check mark offset into opt strg
1753 DW WR_UIINDLEN ;AN000;up indicator string length
1754 DW WR_UIIND ;AN000;up indicator string offset
1755 DW 0 ;AN000;up indicator string segment
1756 DW 2 ;AN000;up indicator row location
1757 DW 1 ;AN000;up indicator column location
1758 DW WR_DIINDLEN ;AN000;down indicator string length
1759 DW WR_DIIND ;AN000;down indicator string offset
1760 DW 0 ;AN000;down indicator string segment
1761 DW 2 ;AN000;down indicator row location
1762 DW 2 ;AN000;down indicator column locaiton
1763 DW 0 ;AN000;left indicator string length
1764 DW 0 ;AN000;left indicator string offset
1765 DW 0 ;AN000;left indicator string segment
1766 DW 0 ;AN000;left indicator row location
1767 DW 0 ;AN000;left indicator column location
1768 DW 0 ;AN000;right indicator string length
1769 DW 0 ;AN000;right indicator string offset
1770 DW 0 ;AN000;right indicator string segment
1771 DW 0 ;AN000;right indicator row location
1772 DW 0 ;AN000;right indicator column locaiton
1773 DW WR_CIS ;AN000;normal color array offset
1774 DW 0 ;AN000;normal color array segment
1775 DW 1 ;AN000;logical color index number
1776 DW 16 ;AN000;number color index table entries
1777 DW WR_CIS ;AN000;offset addr of color index table
1778 DW 0 ;AN000;segment addr of color index tabl
1779 DW WR_INDEX1 ;AN000;index array offset
1780 DW 0 ;AN000;index array segment
1781 DW WR_SELECT_NUM ;AN000;element selection array offset
1782 DW 0 ;AN000;element selection array segment
1783 DW SSC_PTSB ;AN000;option array option word
1784 DW SCB_LIST15 ;AN000;option array pointer offset
1785 DW 0 ;AN000;option array pointer segment
1786 DW SCB_LIST15_W ;AN000;option array string length
1787 DW 0 ;AN000;option array string segment
1788 DB 'A' ;AN000;option array string term char
1789 DW 0 ;AN000;keystroke
1790 DW 0 ;AN000;log vid buf offset override
1791 DW 0 ;AN000;log vid buf segment override
1792 DW 0 ;AN000;general purpose format hook opt
1793 DW 0 ;AN000;general purpose format hook opt
1794 DW 0 ;AN000;length of translation table
1795 DW 0 ;AN000;offset of translation table
1796 DW 0 ;AN000;segment of translation table
1797 DW 0 ;AN000;monocasing table offset
1798 DW 0 ;AN000;monocasing table segment
1799 DW 0 ;AN000;dbcs table length
1800 DW 0 ;AN000;dbcs table offset
1801 DW 0 ;AN000;dbcs table segment
1802 DW 0 ;AN068;SEH offset of font descriptor block
1803 DW 0 ;AN068;SEH segment of font descriptor block
1804 DB 236 DUP(0) ;AN024;
1805;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1806;
1807; review selections #2
1808;
1809;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1810WR_SCB16 DW SCB_WRAP+SCB_DCHECK+SCB_DACTIVE;AN000;option word one
1811 DW SCB_LCOX ;AN000;option word two
1812 DW SCB_SELACT ;AN000;option word three
1813 DW 0 ;AN068;SEH option word four
1814 DW SND_FREQ ;AN000;error beep frequency
1815 DW 12 ;AN000;upper left row
1816 DW LEFT_COL_SCROLL ;AN000;upper left column
1817 DW 0 ;AN000;relative upper left row
1818 DW 0 ;AN000;relative upper left column
1819 DW 42 ;;AN000;;;SCB_LIST16_W ;line width
1820 DW SCB_LIST16_N ;AN000;number of lines
1821 DW 1 ;AN000;number of element on top
1822 DW SCB_LIST16_N ;AN000;number of elements
1823 DW 1 ;AN000;current element
1824 DW 0 ;AN000;maximun number of cols to scroll
1825 DW 0 ;AN000;display offset into opt strings
1826 DW 1 ;AN000;num list txt col offset in strg
1827 DB '.' ;AN000;numbered list separator
1828 DW 0 ;AN000;select keystroke string length
1829 DW 0 ;AN000;select keystroke string offset
1830 DW 0 ;AN000;select keystroke string segment
1831 DW 0 ;AN000;return/leave string length
1832 DW 0 ;AN000;return/leave string offset
1833 DW 0 ;AN000;return/leave string segment
1834 DW 0 ;AN000;return/erase string length
1835 DW 0 ;AN000;return/erase string offset
1836 DW 0 ;AN000;return/erase string segment
1837 DW WR_UAKEYSLEN ;AN000;up arrow string length
1838 DW WR_UAKEYS ;AN000;up arrow string offset
1839 DW 0 ;AN000;up arrow string segment
1840 DW WR_DAKEYSLEN ;AN000;down arrow string length
1841 DW WR_DAKEYS ;AN000;down arrow string offset
1842 DW 0 ;AN000;down arrow string segment
1843 DW 0 ;AN000;left arrow string length
1844 DW 0 ;AN000;left arrow string offset
1845 DW 0 ;AN000;left arrow string segment
1846 DW 0 ;AN000;right arrow string length
1847 DW 0 ;AN000;right arrow string offset
1848 DW 0 ;AN000;right arrow string segment
1849 DW 0 ;AN000;page-up string length
1850 DW 0 ;AN000;page-up string offset
1851 DW 0 ;AN000;page-up string segment
1852 DW 0 ;AN000;page-down string length
1853 DW 0 ;AN000;page-down string offset
1854 DW 0 ;AN000;page-down string segment
1855 DW WR_PIINDLEN ;AN000;pointer indicator strg length
1856 DW WR_PIIND ;AN000;pointer indicator string offset
1857 DW 0 ;AN000;pointer indicator string segment
1858 DW 1 ;AN000;pointer ind txt col off into strg
1859 DW WR_NOINDLEN ;AN000;active indicator strg length
1860 DW WR_NOIND ;AN000;active indicator string offset
1861 DW 0 ;AN000;active indicator string segment
1862 DW 50 ;AN000;active ind txt col off into stg
1863 DW WR_YESINDLEN ;AN000;check mark text string length
1864 DW WR_YESIND ;AN000;check mark text string offset
1865 DW 0 ;AN000;check mark text string segment
1866 DW 50 ;AN000;check mark offset into opt strg
1867 DW WR_UIINDLEN ;AN000;up indicator string length
1868 DW WR_UIIND ;AN000;up indicator string offset
1869 DW 0 ;AN000;up indicator string segment
1870 DW 2 ;AN000;up indicator row location
1871 DW 1 ;AN000;up indicator column location
1872 DW WR_DIINDLEN ;AN000;down indicator string length
1873 DW WR_DIIND ;AN000;down indicator string offset
1874 DW 0 ;AN000;down indicator string segment
1875 DW 2 ;AN000;down indicator row location
1876 DW 2 ;AN000;down indicator column locaiton
1877 DW 0 ;AN000;left indicator string length
1878 DW 0 ;AN000;left indicator string offset
1879 DW 0 ;AN000;left indicator string segment
1880 DW 0 ;AN000;left indicator row location
1881 DW 0 ;AN000;left indicator column location
1882 DW 0 ;AN000;right indicator string length
1883 DW 0 ;AN000;right indicator string offset
1884 DW 0 ;AN000;right indicator string segment
1885 DW 0 ;AN000;right indicator row location
1886 DW 0 ;AN000;right indicator column locaiton
1887 DW WR_CIS ;AN000;normal color array offset
1888 DW 0 ;AN000;normal color array segment
1889 DW 1 ;AN000;logical color index number
1890 DW 16 ;AN000;number color index table entries
1891 DW WR_CIS ;AN000;offset addr of color index table
1892 DW 0 ;AN000;segment addr of color index tabl
1893 DW WR_INDEX1 ;AN000;index array offset
1894 DW 0 ;AN000;index array segment
1895 DW WR_SELECT_MOD ;AN000;element selection array offset
1896 DW 0 ;AN000;element selection array segment
1897 DW SSC_PTSB ;AN000;option array option word
1898 DW SCB_LIST16 ;AN000;option array pointer offset
1899 DW 0 ;AN000;option array pointer segment
1900 DW SCB_LIST16_W ;AN000;option array string length
1901 DW 0 ;AN000;option array string segment
1902 DB 'A' ;AN000;option array string term char
1903 DW 0 ;AN000;keystroke
1904 DW 0 ;AN000;log vid buf offset override
1905 DW 0 ;AN000;log vid buf segment override
1906 DW 0 ;AN000;general purpose format hook opt
1907 DW 0 ;AN000;general purpose format hook opt
1908 DW 0 ;AN000;length of translation table
1909 DW 0 ;AN000;offset of translation table
1910 DW 0 ;AN000;segment of translation table
1911 DW 0 ;AN000;monocasing table offset
1912 DW 0 ;AN000;monocasing table segment
1913 DW 0 ;AN000;dbcs table length
1914 DW 0 ;AN000;dbcs table offset
1915 DW 0 ;AN000;dbcs table segment
1916 DW 0 ;AN068;SEH offset of font descriptor block
1917 DW 0 ;AN068;SEH segment of font descriptor block
1918 DB 236 DUP(0) ;AN024;
1919;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1920;
1921; review selections 3
1922;
1923;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1924WR_SCB17 DW SCB_WRAP+SCB_DCHECK+SCB_DACTIVE;AN000;option word one
1925 DW SCB_LCOX ;AN000;option word two
1926 DW SCB_SELACT ;AN000;option word three
1927 DW 0 ;AN068;SEH option word four
1928 DW SND_FREQ ;AN000;error beep frequency
1929 DW 12 ;AN000;upper left row
1930 DW LEFT_COL_SCROLL ;AN000;upper left column
1931 DW 0 ;AN000;relative upper left row
1932 DW 0 ;AN000;relative upper left column
1933 DW SCB_LIST17_W ;AN000;line width
1934 DW SCB_LIST17_N ;AN000;number of lines
1935 DW 1 ;AN000;number of element on top
1936 DW SCB_LIST17_N ;AN000;number of elements
1937 DW 1 ;AN000;current element
1938 DW 0 ;AN000;maximun number of cols to scroll
1939 DW 0 ;AN000;display offset into opt strings
1940 DW 1 ;AN000;num list txt col offset in strg
1941 DB '.' ;AN000;numbered list separator
1942 DW 0 ;AN000;select keystroke string length
1943 DW 0 ;AN000;select keystroke string offset
1944 DW 0 ;AN000;select keystroke string segment
1945 DW 0 ;AN000;return/leave string length
1946 DW 0 ;AN000;return/leave string offset
1947 DW 0 ;AN000;return/leave string segment
1948 DW 0 ;AN000;return/erase string length
1949 DW 0 ;AN000;return/erase string offset
1950 DW 0 ;AN000;return/erase string segment
1951 DW WR_UAKEYSLEN ;AN000;up arrow string length
1952 DW WR_UAKEYS ;AN000;up arrow string offset
1953 DW 0 ;AN000;up arrow string segment
1954 DW WR_DAKEYSLEN ;AN000;down arrow string length
1955 DW WR_DAKEYS ;AN000;down arrow string offset
1956 DW 0 ;AN000;down arrow string segment
1957 DW 0 ;AN000;left arrow string length
1958 DW 0 ;AN000;left arrow string offset
1959 DW 0 ;AN000;left arrow string segment
1960 DW 0 ;AN000;right arrow string length
1961 DW 0 ;AN000;right arrow string offset
1962 DW 0 ;AN000;right arrow string segment
1963 DW 0 ;AN000;page-up string length
1964 DW 0 ;AN000;page-up string offset
1965 DW 0 ;AN000;page-up string segment
1966 DW 0 ;AN000;page-down string length
1967 DW 0 ;AN000;page-down string offset
1968 DW 0 ;AN000;page-down string segment
1969 DW WR_PIINDLEN ;AN000;pointer indicator strg length
1970 DW WR_PIIND ;AN000;pointer indicator string offset
1971 DW 0 ;AN000;pointer indicator string segment
1972 DW 1 ;AN000;pointer ind txt col off into strg
1973 DW WR_NOINDLEN ;AN000;active indicator strg length
1974 DW WR_NOIND ;AN000;active indicator string offset
1975 DW 0 ;AN000;active indicator string segment
1976 DW 50 ;AN000;active ind txt col off into stg
1977 DW WR_YESINDLEN ;AN000;check mark text string length
1978 DW WR_YESIND ;AN000;check mark text string offset
1979 DW 0 ;AN000;check mark text string segment
1980 DW 50 ;AN000;check mark offset into opt strg
1981 DW WR_UIINDLEN ;AN000;up indicator string length
1982 DW WR_UIIND ;AN000;up indicator string offset
1983 DW 0 ;AN000;up indicator string segment
1984 DW 2 ;AN000;up indicator row location
1985 DW 1 ;AN000;up indicator column location
1986 DW WR_DIINDLEN ;AN000;down indicator string length
1987 DW WR_DIIND ;AN000;down indicator string offset
1988 DW 0 ;AN000;down indicator string segment
1989 DW 2 ;AN000;down indicator row location
1990 DW 2 ;AN000;down indicator column locaiton
1991 DW 0 ;AN000;left indicator string length
1992 DW 0 ;AN000;left indicator string offset
1993 DW 0 ;AN000;left indicator string segment
1994 DW 0 ;AN000;left indicator row location
1995 DW 0 ;AN000;left indicator column location
1996 DW 0 ;AN000;right indicator string length
1997 DW 0 ;AN000;right indicator string offset
1998 DW 0 ;AN000;right indicator string segment
1999 DW 0 ;AN000;right indicator row location
2000 DW 0 ;AN000;right indicator column locaiton
2001 DW WR_CIS ;AN000;normal color array offset
2002 DW 0 ;AN000;normal color array segment
2003 DW 1 ;AN000;logical color index number
2004 DW 16 ;AN000;number color index table entries
2005 DW WR_CIS ;AN000;offset addr of color index table
2006 DW 0 ;AN000;segment addr of color index tabl
2007 DW WR_INDEX1 ;AN000;index array offset
2008 DW 0 ;AN000;index array segment
2009 DW WR_SELECT_MOD ;AN000;element selection array offset
2010 DW 0 ;AN000;element selection array segment
2011 DW SSC_PTSB ;AN000;option array option word
2012 DW SCB_LIST17 ;AN000;option array pointer offset
2013 DW 0 ;AN000;option array pointer segment
2014 DW SCB_LIST17_W ;AN000;option array string length
2015 DW 0 ;AN000;option array string segment
2016 DB 'A' ;AN000;option array string term char
2017 DW 0 ;AN000;keystroke
2018 DW 0 ;AN000;log vid buf offset override
2019 DW 0 ;AN000;log vid buf segment override
2020 DW 0 ;AN000;general purpose format hook opt
2021 DW 0 ;AN000;general purpose format hook opt
2022 DW 0 ;AN000;length of translation table
2023 DW 0 ;AN000;offset of translation table
2024 DW 0 ;AN000;segment of translation table
2025 DW 0 ;AN000;monocasing table offset
2026 DW 0 ;AN000;monocasing table segment
2027 DW 0 ;AN000;dbcs table length
2028 DW 0 ;AN000;dbcs table offset
2029 DW 0 ;AN000;dbcs table segment
2030 DW 0 ;AN068;SEH offset of font descriptor block
2031 DW 0 ;AN068;SEH segment of font descriptor block
2032 DB 236 DUP(0) ;AN024;
2033;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2034;
2035; paritition fixed disk
2036;
2037;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2038WR_SCB18 DW SCB_WRAP ;AN000;option word one
2039 DW SCB_SKIP ;AN000;option word two
2040 DW SCB_NUMS ;AN000;option word three
2041 DW 0 ;AN068;SEH option word four
2042 DW SND_FREQ ;AN000;error beep frequency
2043 DW 15 ;AN000;upper left row
2044 DW LEFT_COL_SCROLL ;AN000;upper left column
2045 DW 0 ;AN000;relative upper left row
2046 DW 0 ;AN000;relative upper left column
2047 DW SCB_LIST18_W ;AN000;line width
2048 DW SCB_LIST18_N ;AN000;number of lines
2049 DW 1 ;AN000;number of element on top
2050 DW SCB_LIST18_N ;AN000;number of elements
2051 DW 1 ;AN000;current element
2052 DW 0 ;AN000;maximun number of cols to scroll
2053 DW 0 ;AN000;display offset into opt strings
2054 DW 1 ;AN000;num list txt col offset in strg
2055 DB '.' ;AN000;numbered list separator
2056 DW 0 ;AN000;select keystroke string length
2057 DW 0 ;AN000;select keystroke string offset
2058 DW 0 ;AN000;select keystroke string segment
2059 DW 0 ;AN000;return/leave string length
2060 DW 0 ;AN000;return/leave string offset
2061 DW 0 ;AN000;return/leave string segment
2062 DW 0 ;AN000;return/erase string length
2063 DW 0 ;AN000;return/erase string offset
2064 DW 0 ;AN000;return/erase string segment
2065 DW WR_UAKEYSLEN ;AN000;up arrow string length
2066 DW WR_UAKEYS ;AN000;up arrow string offset
2067 DW 0 ;AN000;up arrow string segment
2068 DW WR_DAKEYSLEN ;AN000;down arrow string length
2069 DW WR_DAKEYS ;AN000;down arrow string offset
2070 DW 0 ;AN000;down arrow string segment
2071 DW 0 ;AN000;left arrow string length
2072 DW 0 ;AN000;left arrow string offset
2073 DW 0 ;AN000;left arrow string segment
2074 DW 0 ;AN000;right arrow string length
2075 DW 0 ;AN000;right arrow string offset
2076 DW 0 ;AN000;right arrow string segment
2077 DW 0 ;AN000;page-up string length
2078 DW 0 ;AN000;page-up string offset
2079 DW 0 ;AN000;page-up string segment
2080 DW 0 ;AN000;page-down string length
2081 DW 0 ;AN000;page-down string offset
2082 DW 0 ;AN000;page-down string segment
2083 DW WR_PIINDLEN ;AN000;pointer indicator strg length
2084 DW WR_PIIND ;AN000;pointer indicator string offset
2085 DW 0 ;AN000;pointer indicator string segment
2086 DW 1 ;AN000;pointer ind txt col off into strg
2087 DW WR_AIINDLEN ;AN000;active indicator strg length
2088 DW WR_AIIND ;AN000;active indicator string offset
2089 DW 0 ;AN000;active indicator string segment
2090 DW 1 ;AN000;active ind txt col off into stg
2091 DW WR_CIINDLEN ;AN000;check mark text string length
2092 DW WR_CIIND ;AN000;check mark text string offset
2093 DW 0 ;AN000;check mark text string segment
2094 DW 1 ;AN000;check mark offset into opt strg
2095 DW WR_UIINDLEN ;AN000;up indicator string length
2096 DW WR_UIIND ;AN000;up indicator string offset
2097 DW 0 ;AN000;up indicator string segment
2098 DW 2 ;AN000;up indicator row location
2099 DW 1 ;AN000;up indicator column location
2100 DW WR_DIINDLEN ;AN000;down indicator string length
2101 DW WR_DIIND ;AN000;down indicator string offset
2102 DW 0 ;AN000;down indicator string segment
2103 DW 2 ;AN000;down indicator row location
2104 DW 2 ;AN000;down indicator column locaiton
2105 DW 0 ;AN000;left indicator string length
2106 DW 0 ;AN000;left indicator string offset
2107 DW 0 ;AN000;left indicator string segment
2108 DW 0 ;AN000;left indicator row location
2109 DW 0 ;AN000;left indicator column location
2110 DW 0 ;AN000;right indicator string length
2111 DW 0 ;AN000;right indicator string offset
2112 DW 0 ;AN000;right indicator string segment
2113 DW 0 ;AN000;right indicator row location
2114 DW 0 ;AN000;right indicator column locaiton
2115 DW WR_CIS ;AN000;normal color array offset
2116 DW 0 ;AN000;normal color array segment
2117 DW 1 ;AN000;logical color index number
2118 DW 16 ;AN000;number color index table entries
2119 DW WR_CIS ;AN000;offset addr of color index table
2120 DW 0 ;AN000;segment addr of color index tabl
2121 DW WR_INDEX1 ;AN000;index array offset
2122 DW 0 ;AN000;index array segment
2123 DW WR_SELECT_NUM ;AN000;element selection array offset
2124 DW 0 ;AN000;element selection array segment
2125 DW SSC_PTSB ;AN000;option array option word
2126 DW SCB_LIST18 ;AN000;option array pointer offset
2127 DW 0 ;AN000;option array pointer segment
2128 DW SCB_LIST18_W ;AN000;option array string length
2129 DW 0 ;AN000;option array string segment
2130 DB 'A' ;AN000;option array string term char
2131 DW 0 ;AN000;keystroke
2132 DW 0 ;AN000;log vid buf offset override
2133 DW 0 ;AN000;log vid buf segment override
2134 DW 0 ;AN000;general purpose format hook opt
2135 DW 0 ;AN000;general purpose format hook opt
2136 DW 0 ;AN000;length of translation table
2137 DW 0 ;AN000;offset of translation table
2138 DW 0 ;AN000;segment of translation table
2139 DW 0 ;AN000;monocasing table offset
2140 DW 0 ;AN000;monocasing table segment
2141 DW 0 ;AN000;dbcs table length
2142 DW 0 ;AN000;dbcs table offset
2143 DW 0 ;AN000;dbcs table segment
2144 DW 0 ;AN068;SEH offset of font descriptor block
2145 DW 0 ;AN068;SEH segment of font descriptor block
2146 DB 236 DUP(0) ;AN024;
2147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2148;
2149; paritition fixed disk 2
2150;
2151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2152WR_SCB19 DW SCB_WRAP ;AN000;option word one
2153 DW SCB_SKIP ;AN000;option word two
2154 DW SCB_NUMS ;AN000;option word three
2155 DW 0 ;AN068;SEH option word four
2156 DW SND_FREQ ;AN000;error beep frequency
2157 DW 15 ;AN000;upper left row
2158 DW LEFT_COL_SCROLL ;AN000;upper left column
2159 DW 0 ;AN000;relative upper left row
2160 DW 0 ;AN000;relative upper left column
2161 DW SCB_LIST19_W ;AN000;line width
2162 DW SCB_LIST19_N ;AN000;number of lines
2163 DW 1 ;AN000;number of element on top
2164 DW SCB_LIST19_N ;AN000;number of elements
2165 DW 1 ;AN000;current element
2166 DW 0 ;AN000;maximun number of cols to scroll
2167 DW 0 ;AN000;display offset into opt strings
2168 DW 1 ;AN000;num list txt col offset in strg
2169 DB '.' ;AN000;numbered list separator
2170 DW 0 ;AN000;select keystroke string length
2171 DW 0 ;AN000;select keystroke string offset
2172 DW 0 ;AN000;select keystroke string segment
2173 DW 0 ;AN000;return/leave string length
2174 DW 0 ;AN000;return/leave string offset
2175 DW 0 ;AN000;return/leave string segment
2176 DW 0 ;AN000;return/erase string length
2177 DW 0 ;AN000;return/erase string offset
2178 DW 0 ;AN000;return/erase string segment
2179 DW WR_UAKEYSLEN ;AN000;up arrow string length
2180 DW WR_UAKEYS ;AN000;up arrow string offset
2181 DW 0 ;AN000;up arrow string segment
2182 DW WR_DAKEYSLEN ;AN000;down arrow string length
2183 DW WR_DAKEYS ;AN000;down arrow string offset
2184 DW 0 ;AN000;down arrow string segment
2185 DW 0 ;AN000;left arrow string length
2186 DW 0 ;AN000;left arrow string offset
2187 DW 0 ;AN000;left arrow string segment
2188 DW 0 ;AN000;right arrow string length
2189 DW 0 ;AN000;right arrow string offset
2190 DW 0 ;AN000;right arrow string segment
2191 DW 0 ;AN000;page-up string length
2192 DW 0 ;AN000;page-up string offset
2193 DW 0 ;AN000;page-up string segment
2194 DW 0 ;AN000;page-down string length
2195 DW 0 ;AN000;page-down string offset
2196 DW 0 ;AN000;page-down string segment
2197 DW WR_PIINDLEN ;AN000;pointer indicator strg length
2198 DW WR_PIIND ;AN000;pointer indicator string offset
2199 DW 0 ;AN000;pointer indicator string segment
2200 DW 1 ;AN000;pointer ind txt col off into strg
2201 DW WR_AIINDLEN ;AN000;active indicator strg length
2202 DW WR_AIIND ;AN000;active indicator string offset
2203 DW 0 ;AN000;active indicator string segment
2204 DW 1 ;AN000;active ind txt col off into stg
2205 DW WR_CIINDLEN ;AN000;check mark text string length
2206 DW WR_CIIND ;AN000;check mark text string offset
2207 DW 0 ;AN000;check mark text string segment
2208 DW 1 ;AN000;check mark offset into opt strg
2209 DW WR_UIINDLEN ;AN000;up indicator string length
2210 DW WR_UIIND ;AN000;up indicator string offset
2211 DW 0 ;AN000;up indicator string segment
2212 DW 2 ;AN000;up indicator row location
2213 DW 1 ;AN000;up indicator column location
2214 DW WR_DIINDLEN ;AN000;down indicator string length
2215 DW WR_DIIND ;AN000;down indicator string offset
2216 DW 0 ;AN000;down indicator string segment
2217 DW 2 ;AN000;down indicator row location
2218 DW 2 ;AN000;down indicator column locaiton
2219 DW 0 ;AN000;left indicator string length
2220 DW 0 ;AN000;left indicator string offset
2221 DW 0 ;AN000;left indicator string segment
2222 DW 0 ;AN000;left indicator row location
2223 DW 0 ;AN000;left indicator column location
2224 DW 0 ;AN000;right indicator string length
2225 DW 0 ;AN000;right indicator string offset
2226 DW 0 ;AN000;right indicator string segment
2227 DW 0 ;AN000;right indicator row location
2228 DW 0 ;AN000;right indicator column locaiton
2229 DW WR_CIS ;AN000;normal color array offset
2230 DW 0 ;AN000;normal color array segment
2231 DW 1 ;AN000;logical color index number
2232 DW 16 ;AN000;number color index table entries
2233 DW WR_CIS ;AN000;offset addr of color index table
2234 DW 0 ;AN000;segment addr of color index tabl
2235 DW WR_INDEX1 ;AN000;index array offset
2236 DW 0 ;AN000;index array segment
2237 DW WR_SELECT_NUM ;AN000;element selection array offset
2238 DW 0 ;AN000;element selection array segment
2239 DW SSC_PTSB ;AN000;option array option word
2240 DW SCB_LIST19 ;AN000;option array pointer offset
2241 DW 0 ;AN000;option array pointer segment
2242 DW SCB_LIST19_W ;AN000;option array string length
2243 DW 0 ;AN000;option array string segment
2244 DB 'A' ;AN000;option array string term char
2245 DW 0 ;AN000;keystroke
2246 DW 0 ;AN000;log vid buf offset override
2247 DW 0 ;AN000;log vid buf segment override
2248 DW 0 ;AN000;general purpose format hook opt
2249 DW 0 ;AN000;general purpose format hook opt
2250 DW 0 ;AN000;length of translation table
2251 DW 0 ;AN000;offset of translation table
2252 DW 0 ;AN000;segment of translation table
2253 DW 0 ;AN000;monocasing table offset
2254 DW 0 ;AN000;monocasing table segment
2255 DW 0 ;AN000;dbcs table length
2256 DW 0 ;AN000;dbcs table offset
2257 DW 0 ;AN000;dbcs table segment
2258 DW 0 ;AN068;SEH offset of font descriptor block
2259 DW 0 ;AN068;SEH segment of font descriptor block
2260 DB 236 DUP(0) ;AN024;
2261;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2262;
2263; FORMAT FIXED DISK DRIVE
2264;
2265;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2266WR_SCB20 DW SCB_WRAP ;AN000;option word one
2267 DW SCB_SKIP ;AN000;option word two
2268 DW SCB_NUMS ;AN000;option word three
2269 DW 0 ;AN068;SEH option word four
2270 DW SND_FREQ ;AN000;error beep frequency
2271 DW 9 ;AC000;upper left row JW
2272 DW LEFT_COL_SCROLL ;AN000;upper left column
2273 DW 0 ;AN000;relative upper left row
2274 DW 0 ;AN000;relative upper left column
2275 DW SCB_LIST20_W ;AN000;line width
2276 DW SCB_LIST20_N ;AN000;number of lines
2277 DW 1 ;AN000;number of element on top
2278 DW SCB_LIST20_N ;AN000;number of elements
2279 DW 1 ;AN000;current element
2280 DW 0 ;AN000;maximun number of cols to scroll
2281 DW 0 ;AN000;display offset into opt strings
2282 DW 1 ;AN000;num list txt col offset in strg
2283 DB '.' ;AN000;numbered list separator
2284 DW 0 ;AN000;select keystroke string length
2285 DW 0 ;AN000;select keystroke string offset
2286 DW 0 ;AN000;select keystroke string segment
2287 DW 0 ;AN000;return/leave string length
2288 DW 0 ;AN000;return/leave string offset
2289 DW 0 ;AN000;return/leave string segment
2290 DW 0 ;AN000;return/erase string length
2291 DW 0 ;AN000;return/erase string offset
2292 DW 0 ;AN000;return/erase string segment
2293 DW WR_UAKEYSLEN ;AN000;up arrow string length
2294 DW WR_UAKEYS ;AN000;up arrow string offset
2295 DW 0 ;AN000;up arrow string segment
2296 DW WR_DAKEYSLEN ;AN000;down arrow string length
2297 DW WR_DAKEYS ;AN000;down arrow string offset
2298 DW 0 ;AN000;down arrow string segment
2299 DW 0 ;AN000;left arrow string length
2300 DW 0 ;AN000;left arrow string offset
2301 DW 0 ;AN000;left arrow string segment
2302 DW 0 ;AN000;right arrow string length
2303 DW 0 ;AN000;right arrow string offset
2304 DW 0 ;AN000;right arrow string segment
2305 DW 0 ;AN000;page-up string length
2306 DW 0 ;AN000;page-up string offset
2307 DW 0 ;AN000;page-up string segment
2308 DW 0 ;AN000;page-down string length
2309 DW 0 ;AN000;page-down string offset
2310 DW 0 ;AN000;page-down string segment
2311 DW WR_PIINDLEN ;AN000;pointer indicator strg length
2312 DW WR_PIIND ;AN000;pointer indicator string offset
2313 DW 0 ;AN000;pointer indicator string segment
2314 DW 1 ;AN000;pointer ind txt col off into strg
2315 DW WR_AIINDLEN ;AN000;active indicator strg length
2316 DW WR_AIIND ;AN000;active indicator string offset
2317 DW 0 ;AN000;active indicator string segment
2318 DW 1 ;AN000;active ind txt col off into stg
2319 DW WR_CIINDLEN ;AN000;check mark text string length
2320 DW WR_CIIND ;AN000;check mark text string offset
2321 DW 0 ;AN000;check mark text string segment
2322 DW 1 ;AN000;check mark offset into opt strg
2323 DW WR_UIINDLEN ;AN000;up indicator string length
2324 DW WR_UIIND ;AN000;up indicator string offset
2325 DW 0 ;AN000;up indicator string segment
2326 DW 2 ;AN000;up indicator row location
2327 DW 1 ;AN000;up indicator column location
2328 DW WR_DIINDLEN ;AN000;down indicator string length
2329 DW WR_DIIND ;AN000;down indicator string offset
2330 DW 0 ;AN000;down indicator string segment
2331 DW 2 ;AN000;down indicator row location
2332 DW 2 ;AN000;down indicator column locaiton
2333 DW 0 ;AN000;left indicator string length
2334 DW 0 ;AN000;left indicator string offset
2335 DW 0 ;AN000;left indicator string segment
2336 DW 0 ;AN000;left indicator row location
2337 DW 0 ;AN000;left indicator column location
2338 DW 0 ;AN000;right indicator string length
2339 DW 0 ;AN000;right indicator string offset
2340 DW 0 ;AN000;right indicator string segment
2341 DW 0 ;AN000;right indicator row location
2342 DW 0 ;AN000;right indicator column locaiton
2343 DW WR_CIS ;AN000;normal color array offset
2344 DW 0 ;AN000;normal color array segment
2345 DW 1 ;AN000;logical color index number
2346 DW 16 ;AN000;number color index table entries
2347 DW WR_CIS ;AN000;offset addr of color index table
2348 DW 0 ;AN000;segment addr of color index tabl
2349 DW WR_INDEX1 ;AN000;index array offset
2350 DW 0 ;AN000;index array segment
2351 DW WR_SELECT_NUM ;AN000;element selection array offset
2352 DW 0 ;AN000;element selection array segment
2353 DW SSC_PTSB ;AN000;option array option word
2354 DW SCB_LIST20 ;AN000;option array pointer offset
2355 DW 0 ;AN000;option array pointer segment
2356 DW SCB_LIST20_W ;AN000;option array string length
2357 DW 0 ;AN000;option array string segment
2358 DB 'A' ;AN000;option array string term char
2359 DW 0 ;AN000;keystroke
2360 DW 0 ;AN000;log vid buf offset override
2361 DW 0 ;AN000;log vid buf segment override
2362 DW 0 ;AN000;general purpose format hook opt
2363 DW 0 ;AN000;general purpose format hook opt
2364 DW 0 ;AN000;length of translation table
2365 DW 0 ;AN000;offset of translation table
2366 DW 0 ;AN000;segment of translation table
2367 DW 0 ;AN000;monocasing table offset
2368 DW 0 ;AN000;monocasing table segment
2369 DW 0 ;AN000;dbcs table length
2370 DW 0 ;AN000;dbcs table offset
2371 DW 0 ;AN000;dbcs table segment
2372 DW 0 ;AN068;SEH offset of font descriptor block
2373 DW 0 ;AN068;SEH segment of font descriptor block
2374 DB 236 DUP(0) ;AN024;
2375;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2376;
2377; HELP SCROLL INFORMATION
2378;
2379;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2380WR_SCB21 DW scb_uc+SCB_LL ;AN000;option word one
2381 DW SCB_ROTN+scb_dyn+scb_uind;AN000;option word two
2382 DW SCB_RELSCR+SCB_RELUIND ;AN000;option word three
2383 DW 0 ;AN068;SEH option word four
2384 DW 100 ;AN000;error beep frequency
2385 DW 4 ;AN000;upper left row
2386 DW 3 ;AN000;upper left column
2387 DW 0 ;AN000;relative upper left row
2388 DW 0 ;AN000;relative upper left column
2389 DW 53 ;AN000;line width
2390 DW 7 ;AN000;number of lines
2391 DW 1 ;AN000;number of element on top
2392 DW 55 ;AN000;number of elements
2393 DW 1 ;AN000;current element
2394 DW 0 ;AN000;maximun number of cols to scroll
2395 DW 0 ;AN000;display offset into opt strings
2396 DW 0 ;AN000;num list txt col offset in strg
2397 DB 0 ;AN000;numbered list separator
2398 DW 0 ;AN000;select keystroke string length
2399 DW 0 ;AN000;select keystroke string offset
2400 DW 0 ;AN000;select keystroke string segment
2401 DW WR_REHLPKEYSLEN ;AN000;return/leave string length
2402 DW WR_REHLPKEYS ;AN000;return/leave string offset
2403 DW 0 ;AN000;return/leave string segment
2404 DW 0 ;AN000;return/erase string length
2405 DW 0 ;AN000;return/erase string offset
2406 DW 0 ;AN000;return/erase string segment
2407 DW WR_UAKEYSLEN ;AN000;up arrow string length
2408 DW WR_UAKEYS ;AN000;up arrow string offset
2409 DW 0 ;AN000;up arrow string segment
2410 DW WR_DAKEYSLEN ;AN000;down arrow string length
2411 DW WR_DAKEYS ;AN000;down arrow string offset
2412 DW 0 ;AN000;down arrow string segment
2413 DW 0 ;AN000;left arrow string length
2414 DW 0 ;AN000;left arrow string offset
2415 DW 0 ;AN000;left arrow string segment
2416 DW 0 ;AN000;right arrow string length
2417 DW 0 ;AN000;right arrow string offset
2418 DW 0 ;AN000;right arrow string segment
2419 DW WR_PUKEYSLEN ;AN000;page-up string length
2420 DW WR_PUKEYS ;AN000;page-up string offset
2421 DW 0 ;AN000;page-up string segment
2422 DW WR_PDKEYSLEN ;AN000;page-down string length
2423 DW WR_PDKEYS ;AN000;page-down string offset
2424 DW 0 ;AN000;page-down string segment
2425 DW WR_PIINDLEN ;AN000;pointer indicator strg length
2426 DW WR_PIIND ;AN000;pointer indicator string offset
2427 DW 0 ;AN000;pointer indicator string segment
2428 DW 1 ;AN000;pointer ind txt col off into strg
2429 DW WR_AIINDLEN ;AN000;active indicator strg length
2430 DW WR_AIIND ;AN000;active indicator string offset
2431 DW 0 ;AN000;active indicator string segment
2432 DW 1 ;AN000;active ind txt col off into stg
2433 DW WR_CIINDLEN ;AN000;check mark text string length
2434 DW WR_CIIND ;AN000;check mark text string offset
2435 DW 0 ;AN000;check mark text string segment
2436 DW 1 ;AN000;check mark offset into opt strg
2437 DW WR_UIINDLEN ;AN000;up indicator string length
2438 DW WR_UIIND ;AN000;up indicator string offset
2439 DW 0 ;AN000;up indicator string segment
2440 DW 2 ;AN000;up indicator row location
2441 DW 50 ;AN000;up indicator column location
2442 DW WR_DIINDLEN ;AN000;down indicator string length
2443 DW WR_DIIND ;AN000;down indicator string offset
2444 DW 0 ;AN000;down indicator string segment
2445 DW 2 ;AN000;down indicator row location
2446 DW 51 ;AN000;down indicator column locaiton
2447 DW 0 ;AN000;left indicator string length
2448 DW 0 ;AN000;left indicator string offset
2449 DW 0 ;AN000;left indicator string segment
2450 DW 0 ;AN000;left indicator row location
2451 DW 0 ;AN000;left indicator column location
2452 DW 0 ;AN000;right indicator string length
2453 DW 0 ;AN000;right indicator string offset
2454 DW 0 ;AN000;right indicator string segment
2455 DW 0 ;AN000;right indicator row location
2456 DW 0 ;AN000;right indicator column locaiton
2457 DW 0 ;AN000;normal color array offset
2458 DW 0 ;AN000;normal color array segment
2459 DW 3;AN000;BLACK_WHITE ;logical color index number
2460 DW 0 ;AN000;number color index table entries
2461 DW 0 ;AN000;offset addr of color index table
2462 DW 0 ;AN000;segment addr of color index tabl
2463 DW 0 ;AN000;index array offset
2464 DW 0 ;AN000;index array segment
2465 DW WR_SELECT ;AN000;element selection array offset
2466 DW 0 ;AN000;element selection array segment
2467 DW SSC_PTSB ;AN000;option array option word
2468 DW 0 ;AN000;option array pointer offset
2469 DW 0 ;AN000;option array pointer segment
2470 DW 53 ;AN000;option array string length
2471 DW 0 ;AN000;option array string segment
2472 DB 0 ;AN000;option array string term char
2473 DW 0 ;AN000;keystroke
2474 DW 0 ;AN000;log vid buf offset override
2475 DW 0 ;AN000;log vid buf segment override
2476 DW 0 ;AN000;general purpose format hook opt
2477 DW 0 ;AN000;general purpose format hook opt
2478 DW 0 ;AN000;length of translation table
2479 DW 0 ;AN000;offset of translation table
2480 DW 0 ;AN000;segment of translation table
2481 DW 0 ;AN000;monocasing table offset
2482 DW 0 ;AN000;monocasing table segment
2483 DW 0 ;AN000;dbcs table length
2484 DW 0 ;AN000;dbcs table offset
2485 DW 0 ;AN000;dbcs table segment
2486 DW 0 ;AN068;SEH offset of font descriptor block
2487 DW 0 ;AN068;SEH segment of font descriptor block
2488 DB 236 DUP(0) ;AN024;
2489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2490;
2491; HELP TITLE SCROLL INFORMATION
2492;
2493;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2494WR_SCB22 DW scb_uc+SCB_LL ;AN000;option word one
2495 DW SCB_ROTN+scb_dyn+scb_uind;AN000;option word two
2496 DW SCB_RELSCR+SCB_RELUIND ;AN000;option word three
2497 DW 0 ;AN068;SEH option word four
2498 DW 100 ;AN000;error beep frequency
2499 DW 2 ;AN000;upper left row
2500 DW 3 ;AN000;upper left column
2501 DW 0 ;AN000;relative upper left row
2502 DW 0 ;AN000;relative upper left column
2503 DW 53 ;AN000;line width
2504 DW 1 ;AN000;number of lines
2505 DW 1 ;AN000;number of element on top
2506 DW 1 ;AN000;number of elements
2507 DW 1 ;AN000;current element
2508 DW 0 ;AN000;maximun number of cols to scroll
2509 DW 0 ;AN000;display offset into opt strings
2510 DW 0 ;AN000;num list txt col offset in strg
2511 DB 0 ;AN000;numbered list separator
2512 DW 0 ;AN000;select keystroke string length
2513 DW 0 ;AN000;select keystroke string offset
2514 DW 0 ;AN000;select keystroke string segment
2515 DW 0 ;AN000;return/leave string length
2516 DW 0 ;AN000;return/leave string offset
2517 DW 0 ;AN000;return/leave string segment
2518 DW 0 ;AN000;return/erase string length
2519 DW 0 ;AN000;return/erase string offset
2520 DW 0 ;AN000;return/erase string segment
2521 DW WR_UAKEYSLEN ;AN000;up arrow string length
2522 DW WR_UAKEYS ;AN000;up arrow string offset
2523 DW 0 ;AN000;up arrow string segment
2524 DW WR_DAKEYSLEN ;AN000;down arrow string length
2525 DW WR_DAKEYS ;AN000;down arrow string offset
2526 DW 0 ;AN000;down arrow string segment
2527 DW 0 ;AN000;left arrow string length
2528 DW 0 ;AN000;left arrow string offset
2529 DW 0 ;AN000;left arrow string segment
2530 DW 0 ;AN000;right arrow string length
2531 DW 0 ;AN000;right arrow string offset
2532 DW 0 ;AN000;right arrow string segment
2533 DW WR_PUKEYSLEN ;AN000;page-up string length
2534 DW WR_PUKEYS ;AN000;page-up string offset
2535 DW 0 ;AN000;page-up string segment
2536 DW WR_PDKEYSLEN ;AN000;page-down string length
2537 DW WR_PDKEYS ;AN000;page-down string offset
2538 DW 0 ;AN000;page-down string segment
2539 DW WR_PIINDLEN ;AN000;pointer indicator strg length
2540 DW WR_PIIND ;AN000;pointer indicator string offset
2541 DW 0 ;AN000;pointer indicator string segment
2542 DW 1 ;AN000;pointer ind txt col off into strg
2543 DW WR_AIINDLEN ;AN000;active indicator strg length
2544 DW WR_AIIND ;AN000;active indicator string offset
2545 DW 0 ;AN000;active indicator string segment
2546 DW 1 ;AN000;active ind txt col off into stg
2547 DW WR_CIINDLEN ;AN000;check mark text string length
2548 DW WR_CIIND ;AN000;check mark text string offset
2549 DW 0 ;AN000;check mark text string segment
2550 DW 1 ;AN000;check mark offset into opt strg
2551 DW WR_UIINDLEN ;AN000;up indicator string length
2552 DW WR_UIIND ;AN000;up indicator string offset
2553 DW 0 ;AN000;up indicator string segment
2554 DW 2 ;AN000;up indicator row location
2555 DW 23 ;AN000;up indicator column location
2556 DW WR_DIINDLEN ;AN000;down indicator string length
2557 DW WR_DIIND ;AN000;down indicator string offset
2558 DW 0 ;AN000;down indicator string segment
2559 DW 2 ;AN000;down indicator row location
2560 DW 21 ;AN000;down indicator column locaiton
2561 DW 0 ;AN000;left indicator string length
2562 DW 0 ;AN000;left indicator string offset
2563 DW 0 ;AN000;left indicator string segment
2564 DW 0 ;AN000;left indicator row location
2565 DW 0 ;AN000;left indicator column location
2566 DW 0 ;AN000;right indicator string length
2567 DW 0 ;AN000;right indicator string offset
2568 DW 0 ;AN000;right indicator string segment
2569 DW 0 ;AN000;right indicator row location
2570 DW 0 ;AN000;right indicator column locaiton
2571 DW 0 ;AN000;normal color array offset
2572 DW 0 ;AN000;normal color array segment
2573 DW 3;AN000;BLACK_WHITE ;logical color index number
2574 DW 0 ;AN000;number color index table entries
2575 DW 0 ;AN000;offset addr of color index table
2576 DW 0 ;AN000;segment addr of color index tabl
2577 DW 0 ;AN000;index array offset
2578 DW 0 ;AN000;index array segment
2579 DW WR_SELECT ;AN000;element selection array offset
2580 DW 0 ;AN000;element selection array segment
2581 DW SSC_PTSB ;AN000;option array option word
2582 DW 0 ;AN000;option array pointer offset
2583 DW 0 ;AN000;option array pointer segment
2584 DW 53 ;AN000;option array string length
2585 DW 0 ;AN000;option array string segment
2586 DB 0 ;AN000;option array string term char
2587 DW 0 ;AN000;keystroke
2588 DW 0 ;AN000;log vid buf offset override
2589 DW 0 ;AN000;log vid buf segment override
2590 DW 0 ;AN000;general purpose format hook opt
2591 DW 0 ;AN000;general purpose format hook opt
2592 DW 0 ;AN000;length of translation table
2593 DW 0 ;AN000;offset of translation table
2594 DW 0 ;AN000;segment of translation table
2595 DW 0 ;AN000;monocasing table offset
2596 DW 0 ;AN000;monocasing table segment
2597 DW 0 ;AN000;dbcs table length
2598 DW 0 ;AN000;dbcs table offset
2599 DW 0 ;AN000;dbcs table segment
2600 DW 0 ;AN068;SEH offset of font descriptor block
2601 DW 0 ;AN068;SEH segment of font descriptor block
2602 DB 236 DUP(0) ;AN024;
2603;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2604;
2605; SCR_ACC_CTY
2606;
2607;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2608WR_SCB23 DW SCB_FRBF+SCB_FRAL ;AN000;option word one
2609 DW SCB_ROTN ;AN000;option word two
2610 DW 0 ;AN000;option word three
2611 DW 0 ;AN068;SEH option word four
2612 DW SND_FREQ ;AN000;error beep frequency
2613 DW 4 ;AN000;upper left row
2614 DW 37 ;AN000;**********;upper left column
2615 DW 0 ;AN000;relative upper left row
2616 DW 0 ;AN000;relative upper left column
2617 DW SCB_LIST23_W ;AN000;line width
2618 DW 1 ;AN000;number of lines
2619 DW 1 ;AN000;number of element on top
2620 DW SCB_LIST23_N ;AN000;number of elements
2621 DW 1 ;AN000;current element
2622 DW 0 ;AN000;maximun number of cols to scroll
2623 DW 0 ;AN000;display offset into opt strings
2624 DW 1 ;AN000;num list txt col offset in strg
2625 DB '.' ;AN000;numbered list separator
2626 DW 0 ;AN000;select keystroke string length
2627 DW 0 ;AN000;select keystroke string offset
2628 DW 0 ;AN000;select keystroke string segment
2629 DW 0 ;AN000;return/leave string length
2630 DW 0 ;AN000;return/leave string offset
2631 DW 0 ;AN000;return/leave string segment
2632 DW 0 ;AN000;return/erase string length
2633 DW 0 ;AN000;return/erase string offset
2634 DW 0 ;AN000;return/erase string segment
2635 DW WR_UAKEYSLEN ;AN000;up arrow string length
2636 DW WR_UAKEYS ;AN000;up arrow string offset
2637 DW 0 ;AN000;up arrow string segment
2638 DW WR_DAKEYSLEN ;AN000;down arrow string length
2639 DW WR_DAKEYS ;AN000;down arrow string offset
2640 DW 0 ;AN000;down arrow string segment
2641 DW 0 ;AN000;left arrow string length
2642 DW 0 ;AN000;left arrow string offset
2643 DW 0 ;AN000;left arrow string segment
2644 DW 0 ;AN000;right arrow string length
2645 DW 0 ;AN000;right arrow string offset
2646 DW 0 ;AN000;right arrow string segment
2647 DW 0 ;AN000;page-up string length
2648 DW 0 ;AN000;page-up string offset
2649 DW 0 ;AN000;page-up string segment
2650 DW 0 ;AN000;page-down string length
2651 DW 0 ;AN000;page-down string offset
2652 DW 0 ;AN000;page-down string segment
2653 DW WR_PIINDLEN ;AN000;pointer indicator strg length
2654 DW WR_PIIND ;AN000;pointer indicator string offset
2655 DW 0 ;AN000;pointer indicator string segment
2656 DW 1 ;AN000;pointer ind txt col off into strg
2657 DW WR_AIINDLEN ;AN000;active indicator strg length
2658 DW WR_AIIND ;AN000;active indicator string offset
2659 DW 0 ;AN000;active indicator string segment
2660 DW 1 ;AN000;active ind txt col off into stg
2661 DW WR_CIINDLEN ;AN000;check mark text string length
2662 DW WR_CIIND ;AN000;check mark text string offset
2663 DW 0 ;AN000;check mark text string segment
2664 DW 1 ;AN000;check mark offset into opt strg
2665 DW WR_UIINDLEN ;AN000;up indicator string length
2666 DW WR_UIIND ;AN000;up indicator string offset
2667 DW 0 ;AN000;up indicator string segment
2668 DW 2 ;AN000;up indicator row location
2669 DW 1 ;AN000;up indicator column location
2670 DW WR_DIINDLEN ;AN000;down indicator string length
2671 DW WR_DIIND ;AN000;down indicator string offset
2672 DW 0 ;AN000;down indicator string segment
2673 DW 2 ;AN000;down indicator row location
2674 DW 2 ;AN000;down indicator column locaiton
2675 DW 0 ;AN000;left indicator string length
2676 DW 0 ;AN000;left indicator string offset
2677 DW 0 ;AN000;left indicator string segment
2678 DW 0 ;AN000;left indicator row location
2679 DW 0 ;AN000;left indicator column location
2680 DW 0 ;AN000;right indicator string length
2681 DW 0 ;AN000;right indicator string offset
2682 DW 0 ;AN000;right indicator string segment
2683 DW 0 ;AN000;right indicator row location
2684 DW 0 ;AN000;right indicator column locaiton
2685 DW WR_CIS ;AN000;normal color array offset
2686 DW 0 ;AN000;normal color array segment
2687 DW 1 ;AN000;logical color index number
2688 DW 16 ;AN000;number color index table entries
2689 DW WR_CIS ;AN000;offset addr of color index table
2690 DW 0 ;AN000;segment addr of color index tabl
2691 DW WR_INDEX1 ;AN000;index array offset
2692 DW 0 ;AN000;index array segment
2693 DW WR_SELECT ;AN000;element selection array offset
2694 DW 0 ;AN000;element selection array segment
2695 DW SSC_PTSB ;AN000;option array option word
2696 DW SCB_LIST23 ;AN000;option array pointer offset
2697 DW 0 ;AN000;option array pointer segment
2698 DW SCB_LIST23_W ;AN000;option array string length
2699 DW 0 ;AN000;option array string segment
2700 DB 'A' ;AN000;option array string term char
2701 DW 0 ;AN000;keystroke
2702 DW 0 ;AN000;log vid buf offset override
2703 DW 0 ;AN000;log vid buf segment override
2704 DW 0 ;AN000;general purpose format hook opt
2705 DW 0 ;AN000;general purpose format hook opt
2706 DW 0 ;AN000;length of translation table
2707 DW 0 ;AN000;offset of translation table
2708 DW 0 ;AN000;segment of translation table
2709 DW 0 ;AN000;monocasing table offset
2710 DW 0 ;AN000;monocasing table segment
2711 DW 0 ;AN000;dbcs table length
2712 DW 0 ;AN000;dbcs table offset
2713 DW 0 ;AN000;dbcs table segment
2714 DW 0 ;AN068;SEH offset of font descriptor block
2715 DW 0 ;AN068;SEH segment of font descriptor block
2716 DB 236 DUP(0) ;AN024;
2717;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2718;
2719; SCR_ACC_KYB
2720;
2721;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2722WR_SCB24 DW SCB_FRBF+SCB_FRAL ;AN000;option word one
2723 DW SCB_ROTN ;AN000;option word two
2724 DW 0 ;AN000;option word three
2725 DW 0 ;AN068;SEH option word four
2726 DW SND_FREQ ;AN000;error beep frequency
2727 DW 5 ;AN000;upper left row
2728 DW 37 ;AN000;**********;upper left column
2729 DW 0 ;AN000;relative upper left row
2730 DW 0 ;AN000;relative upper left column
2731 DW SCB_LIST24_W ;AN000;line width
2732 DW 1 ;AN000;number of lines
2733 DW 1 ;AN000;number of element on top
2734 DW SCB_LIST24_N ;AN000;number of elements
2735 DW 1 ;AN000;current element
2736 DW 0 ;AN000;maximun number of cols to scroll
2737 DW 0 ;AN000;display offset into opt strings
2738 DW 1 ;AN000;num list txt col offset in strg
2739 DB '.' ;AN000;numbered list separator
2740 DW 0 ;AN000;select keystroke string length
2741 DW 0 ;AN000;select keystroke string offset
2742 DW 0 ;AN000;select keystroke string segment
2743 DW 0 ;AN000;return/leave string length
2744 DW 0 ;AN000;return/leave string offset
2745 DW 0 ;AN000;return/leave string segment
2746 DW 0 ;AN000;return/erase string length
2747 DW 0 ;AN000;return/erase string offset
2748 DW 0 ;AN000;return/erase string segment
2749 DW WR_UAKEYSLEN ;AN000;up arrow string length
2750 DW WR_UAKEYS ;AN000;up arrow string offset
2751 DW 0 ;AN000;up arrow string segment
2752 DW WR_DAKEYSLEN ;AN000;down arrow string length
2753 DW WR_DAKEYS ;AN000;down arrow string offset
2754 DW 0 ;AN000;down arrow string segment
2755 DW 0 ;AN000;left arrow string length
2756 DW 0 ;AN000;left arrow string offset
2757 DW 0 ;AN000;left arrow string segment
2758 DW 0 ;AN000;right arrow string length
2759 DW 0 ;AN000;right arrow string offset
2760 DW 0 ;AN000;right arrow string segment
2761 DW 0 ;AN000;page-up string length
2762 DW 0 ;AN000;page-up string offset
2763 DW 0 ;AN000;page-up string segment
2764 DW 0 ;AN000;page-down string length
2765 DW 0 ;AN000;page-down string offset
2766 DW 0 ;AN000;page-down string segment
2767 DW WR_PIINDLEN ;AN000;pointer indicator strg length
2768 DW WR_PIIND ;AN000;pointer indicator string offset
2769 DW 0 ;AN000;pointer indicator string segment
2770 DW 1 ;AN000;pointer ind txt col off into strg
2771 DW WR_AIINDLEN ;AN000;active indicator strg length
2772 DW WR_AIIND ;AN000;active indicator string offset
2773 DW 0 ;AN000;active indicator string segment
2774 DW 1 ;AN000;active ind txt col off into stg
2775 DW WR_CIINDLEN ;AN000;check mark text string length
2776 DW WR_CIIND ;AN000;check mark text string offset
2777 DW 0 ;AN000;check mark text string segment
2778 DW 1 ;AN000;check mark offset into opt strg
2779 DW WR_UIINDLEN ;AN000;up indicator string length
2780 DW WR_UIIND ;AN000;up indicator string offset
2781 DW 0 ;AN000;up indicator string segment
2782 DW 2 ;AN000;up indicator row location
2783 DW 1 ;AN000;up indicator column location
2784 DW WR_DIINDLEN ;AN000;down indicator string length
2785 DW WR_DIIND ;AN000;down indicator string offset
2786 DW 0 ;AN000;down indicator string segment
2787 DW 2 ;AN000;down indicator row location
2788 DW 2 ;AN000;down indicator column locaiton
2789 DW 0 ;AN000;left indicator string length
2790 DW 0 ;AN000;left indicator string offset
2791 DW 0 ;AN000;left indicator string segment
2792 DW 0 ;AN000;left indicator row location
2793 DW 0 ;AN000;left indicator column location
2794 DW 0 ;AN000;right indicator string length
2795 DW 0 ;AN000;right indicator string offset
2796 DW 0 ;AN000;right indicator string segment
2797 DW 0 ;AN000;right indicator row location
2798 DW 0 ;AN000;right indicator column locaiton
2799 DW WR_CIS ;AN000;normal color array offset
2800 DW 0 ;AN000;normal color array segment
2801 DW 1 ;AN000;logical color index number
2802 DW 16 ;AN000;number color index table entries
2803 DW WR_CIS ;AN000;offset addr of color index table
2804 DW 0 ;AN000;segment addr of color index tabl
2805 DW WR_INDEX1 ;AN000;index array offset
2806 DW 0 ;AN000;index array segment
2807 DW WR_SELECT ;AN000;element selection array offset
2808 DW 0 ;AN000;element selection array segment
2809 DW SSC_PTSB ;AN000;option array option word
2810 DW SCB_LIST24 ;AN000;option array pointer offset
2811 DW 0 ;AN000;option array pointer segment
2812 DW SCB_LIST24_W ;AN000;option array string length
2813 DW 0 ;AN000;option array string segment
2814 DB 'A' ;AN000;option array string term char
2815 DW 0 ;AN000;keystroke
2816 DW 0 ;AN000;log vid buf offset override
2817 DW 0 ;AN000;log vid buf segment override
2818 DW 0 ;AN000;general purpose format hook opt
2819 DW 0 ;AN000;general purpose format hook opt
2820 DW 0 ;AN000;length of translation table
2821 DW 0 ;AN000;offset of translation table
2822 DW 0 ;AN000;segment of translation table
2823 DW 0 ;AN000;monocasing table offset
2824 DW 0 ;AN000;monocasing table segment
2825 DW 0 ;AN000;dbcs table length
2826 DW 0 ;AN000;dbcs table offset
2827 DW 0 ;AN000;dbcs table segment
2828 DW 0 ;AN068;SEH offset of font descriptor block
2829 DW 0 ;AN068;SEH segment of font descriptor block
2830 DB 236 DUP(0) ;AN024;
2831;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2832;
2833; SCR_ACC_PRT
2834;
2835;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2836WR_SCB25 DW SCB_FRBF+SCB_FRAL ;AN000;option word one
2837 DW SCB_ROTN ;AN000;option word two
2838 DW 0 ;AN000;option word three
2839 DW 0 ;AN068;SEH option word four
2840 DW SND_FREQ ;AN000;error beep frequency
2841 DW 4 ;AN000;upper left row
2842 DW 32 ;AN000;upper left column
2843 DW 0 ;AN000;relative upper left row
2844 DW 0 ;AN000;relative upper left column
2845 DW SCB_LIST11_W ;AN000;line width
2846 DW 1 ;AN000;number of lines
2847 DW 1 ;AN000;number of element on top
2848 DW SCB_LIST11_N ;AN000;number of elements
2849 DW 1 ;AN000;current element
2850 DW 0 ;AN000;maximun number of cols to scroll
2851 DW 0 ;AN000;display offset into opt strings
2852 DW 1 ;AN000;num list txt col offset in strg
2853 DB '.' ;AN000;numbered list separator
2854 DW 0 ;AN000;select keystroke string length
2855 DW 0 ;AN000;select keystroke string offset
2856 DW 0 ;AN000;select keystroke string segment
2857 DW 0 ;AN000;return/leave string length
2858 DW 0 ;AN000;return/leave string offset
2859 DW 0 ;AN000;return/leave string segment
2860 DW 0 ;AN000;return/erase string length
2861 DW 0 ;AN000;return/erase string offset
2862 DW 0 ;AN000;return/erase string segment
2863 DW WR_UAKEYSLEN ;AN000;up arrow string length
2864 DW WR_UAKEYS ;AN000;up arrow string offset
2865 DW 0 ;AN000;up arrow string segment
2866 DW WR_DAKEYSLEN ;AN000;down arrow string length
2867 DW WR_DAKEYS ;AN000;down arrow string offset
2868 DW 0 ;AN000;down arrow string segment
2869 DW 0 ;AN000;left arrow string length
2870 DW 0 ;AN000;left arrow string offset
2871 DW 0 ;AN000;left arrow string segment
2872 DW 0 ;AN000;right arrow string length
2873 DW 0 ;AN000;right arrow string offset
2874 DW 0 ;AN000;right arrow string segment
2875 DW 0 ;AN000;page-up string length
2876 DW 0 ;AN000;page-up string offset
2877 DW 0 ;AN000;page-up string segment
2878 DW 0 ;AN000;page-down string length
2879 DW 0 ;AN000;page-down string offset
2880 DW 0 ;AN000;page-down string segment
2881 DW WR_PIINDLEN ;AN000;pointer indicator strg length
2882 DW WR_PIIND ;AN000;pointer indicator string offset
2883 DW 0 ;AN000;pointer indicator string segment
2884 DW 1 ;AN000;pointer ind txt col off into strg
2885 DW WR_AIINDLEN ;AN000;active indicator strg length
2886 DW WR_AIIND ;AN000;active indicator string offset
2887 DW 0 ;AN000;active indicator string segment
2888 DW 1 ;AN000;active ind txt col off into stg
2889 DW WR_CIINDLEN ;AN000;check mark text string length
2890 DW WR_CIIND ;AN000;check mark text string offset
2891 DW 0 ;AN000;check mark text string segment
2892 DW 1 ;AN000;check mark offset into opt strg
2893 DW WR_UIINDLEN ;AN000;up indicator string length
2894 DW WR_UIIND ;AN000;up indicator string offset
2895 DW 0 ;AN000;up indicator string segment
2896 DW 2 ;AN000;up indicator row location
2897 DW 1 ;AN000;up indicator column location
2898 DW WR_DIINDLEN ;AN000;down indicator string length
2899 DW WR_DIIND ;AN000;down indicator string offset
2900 DW 0 ;AN000;down indicator string segment
2901 DW 2 ;AN000;down indicator row location
2902 DW 2 ;AN000;down indicator column locaiton
2903 DW 0 ;AN000;left indicator string length
2904 DW 0 ;AN000;left indicator string offset
2905 DW 0 ;AN000;left indicator string segment
2906 DW 0 ;AN000;left indicator row location
2907 DW 0 ;AN000;left indicator column location
2908 DW 0 ;AN000;right indicator string length
2909 DW 0 ;AN000;right indicator string offset
2910 DW 0 ;AN000;right indicator string segment
2911 DW 0 ;AN000;right indicator row location
2912 DW 0 ;AN000;right indicator column locaiton
2913 DW WR_CIS ;AN000;normal color array offset
2914 DW 0 ;AN000;normal color array segment
2915 DW 1 ;AN000;logical color index number
2916 DW 16 ;AN000;number color index table entries
2917 DW WR_CIS ;AN000;offset addr of color index table
2918 DW 0 ;AN000;segment addr of color index tabl
2919 DW WR_INDEX1 ;AN000;index array offset
2920 DW 0 ;AN000;index array segment
2921 DW WR_SELECT ;AN000;element selection array offset
2922 DW 0 ;AN000;element selection array segment
2923 DW SSC_PTSB ;AN000;option array option word
2924 DW SCB_LIST11 ;AN000;option array pointer offset
2925 DW 0 ;AN000;option array pointer segment
2926 DW SCB_LIST11_W ;AN000;option array string length
2927 DW 0 ;AN000;option array string segment
2928 DB 'A' ;AN000;option array string term char
2929 DW 0 ;AN000;keystroke
2930 DW 0 ;AN000;log vid buf offset override
2931 DW 0 ;AN000;log vid buf segment override
2932 DW 0 ;AN000;general purpose format hook opt
2933 DW 0 ;AN000;general purpose format hook opt
2934 DW 0 ;AN000;length of translation table
2935 DW 0 ;AN000;offset of translation table
2936 DW 0 ;AN000;segment of translation table
2937 DW 0 ;AN000;monocasing table offset
2938 DW 0 ;AN000;monocasing table segment
2939 DW 0 ;AN000;dbcs table length
2940 DW 0 ;AN000;dbcs table offset
2941 DW 0 ;AN000;dbcs table segment
2942 DW 0 ;AN068;SEH offset of font descriptor block
2943 DW 0 ;AN068;SEH segment of font descriptor block
2944 DB 236 DUP(0) ;AN024;
2945;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2946;
2947; DOS LOCATION SUPPORT ;AN000;JW
2948;
2949;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2950WR_SCB26 DW SCB_WRAP ;AN000;option word one
2951 DW SCB_SKIP ;AN000;option word two
2952 DW SCB_NUMS ;AN000;option word three
2953 DW 0 ;AN068;SEH option word four
2954 DW SND_FREQ ;AN000;error beep frequency
2955 DW 17 ;AN000;upper left row
2956 DW LEFT_COL_SCROLL ;AN000;upper left column
2957 DW 0 ;AN000;relative upper left row
2958 DW 0 ;AN000;relative upper left column
2959 DW SCB_LIST26_W ;AN000;line width
2960 DW SCB_LIST26_N ;AN000;number of lines
2961 DW 1 ;AN000;number of element on top
2962 DW SCB_LIST26_N ;AN000;number of elements
2963 DW 1 ;AN000;current element
2964 DW 0 ;AN000;maximun number of cols to scroll
2965 DW 0 ;AN000;display offset into opt strings
2966 DW 1 ;AN000;num list txt col offset in strg
2967 DB '.' ;AN000;numbered list separator
2968 DW 0 ;AN000;select keystroke string length
2969 DW 0 ;AN000;select keystroke string offset
2970 DW 0 ;AN000;select keystroke string segment
2971 DW 0 ;AN000;return/leave string length
2972 DW 0 ;AN000;return/leave string offset
2973 DW 0 ;AN000;return/leave string segment
2974 DW 0 ;AN000;return/erase string length
2975 DW 0 ;AN000;return/erase string offset
2976 DW 0 ;AN000;return/erase string segment
2977 DW WR_UAKEYSLEN ;AN000;up arrow string length
2978 DW WR_UAKEYS ;AN000;up arrow string offset
2979 DW 0 ;AN000;up arrow string segment
2980 DW WR_DAKEYSLEN ;AN000;down arrow string length
2981 DW WR_DAKEYS ;AN000;down arrow string offset
2982 DW 0 ;AN000;down arrow string segment
2983 DW 0 ;AN000;left arrow string length
2984 DW 0 ;AN000;left arrow string offset
2985 DW 0 ;AN000;left arrow string segment
2986 DW 0 ;AN000;right arrow string length
2987 DW 0 ;AN000;right arrow string offset
2988 DW 0 ;AN000;right arrow string segment
2989 DW WR_PUKEYSLEN ;AN000;page-up string length
2990 DW WR_PUKEYS ;AN000;page-up string offset
2991 DW 0 ;AN000;page-up string segment
2992 DW WR_PDKEYSLEN ;AN000;page-down string length
2993 DW WR_PDKEYS ;AN000;page-down string offset
2994 DW 0 ;AN000;page-down string segment
2995 DW WR_PIINDLEN ;AN000;pointer indicator strg length
2996 DW WR_PIIND ;AN000;pointer indicator string offset
2997 DW 0 ;AN000;pointer indicator string segment
2998 DW 1 ;AN000;pointer ind txt col off into strg
2999 DW WR_AIINDLEN ;AN000;active indicator strg length
3000 DW WR_AIIND ;AN000;active indicator string offset
3001 DW 0 ;AN000;active indicator string segment
3002 DW 1 ;AN000;active ind txt col off into stg
3003 DW WR_CIINDLEN ;AN000;check mark text string length
3004 DW WR_CIIND ;AN000;check mark text string offset
3005 DW 0 ;AN000;check mark text string segment
3006 DW 1 ;AN000;check mark offset into opt strg
3007 DW WR_UIINDLEN ;AN000;up indicator string length
3008 DW WR_UIIND ;AN000;up indicator string offset
3009 DW 0 ;AN000;up indicator string segment
3010 DW 2 ;AN000;up indicator row location
3011 DW 1 ;AN000;up indicator column location
3012 DW WR_DIINDLEN ;AN000;down indicator string length
3013 DW WR_DIIND ;AN000;down indicator string offset
3014 DW 0 ;AN000;down indicator string segment
3015 DW 2 ;AN000;down indicator row location
3016 DW 2 ;AN000;down indicator column locaiton
3017 DW 0 ;AN000;left indicator string length
3018 DW 0 ;AN000;left indicator string offset
3019 DW 0 ;AN000;left indicator string segment
3020 DW 0 ;AN000;left indicator row location
3021 DW 0 ;AN000;left indicator column location
3022 DW 0 ;AN000;right indicator string length
3023 DW 0 ;AN000;right indicator string offset
3024 DW 0 ;AN000;right indicator string segment
3025 DW 0 ;AN000;right indicator row location
3026 DW 0 ;AN000;right indicator column locaiton
3027 DW 0 ;AN000;normal color array offset
3028 DW 0 ;AN000;normal color array segment
3029 DW 1 ;AN000;logical color index number
3030 DW 16 ;AN000;number color index table entries
3031 DW WR_CIS ;AN000;offset addr of color index table
3032 DW 0 ;AN000;segment addr of color index tabl
3033 DW WR_INDEX1 ;AN000;index array offset
3034 DW 0 ;AN000;index array segment
3035 DW WR_SELECT_NUM ;AN000;element selection array offset
3036 DW 0 ;AN000;element selection array segment
3037 DW SSC_PTSB ;AN000;option array option word
3038 DW SCB_LIST26 ;AN000;option array pointer offset
3039 DW 0 ;AN000;option array pointer segment
3040 DW SCB_LIST26_W ;AN000;option array string length
3041 DW 0 ;AN000;option array string segment
3042 DB 'A' ;AN000;option array string term char
3043 DW 0 ;AN000;keystroke
3044 DW 0 ;AN000;log vid buf offset override
3045 DW 0 ;AN000;log vid buf segment override
3046 DW 0 ;AN000;general purpose format hook opt
3047 DW 0 ;AN000;general purpose format hook opt
3048 DW 0 ;AN000;length of translation table
3049 DW 0 ;AN000;offset of translation table
3050 DW 0 ;AN000;segment of translation table
3051 DW 0 ;AN000;monocasing table offset
3052 DW 0 ;AN000;monocasing table segment
3053 DW 0 ;AN000;dbcs table length
3054 DW 0 ;AN000;dbcs table offset
3055 DW 0 ;AN000;dbcs table segment
3056 DW 0 ;AN068;SEH offset of font descriptor block
3057 DW 0 ;AN068;SEH segment of font descriptor block
3058 DB 236 DUP(0) ;AN024;
3059;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3060;
3061; select drive a: or c: ;AN111;JW
3062;
3063;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3064WR_SCB27 DW SCB_WRAP ;AN000;option word one
3065 DW SCB_SKIP ;AN000;option word two
3066 DW SCB_NUMS ;AN000;option word three
3067 DW 0 ;AN068;SEH option word four
3068 DW SND_FREQ ;AN000;error beep frequency
3069 DW 8 ;AN000;upper left row
3070 DW LEFT_COL_SCROLL ;AN000;upper left column
3071 DW 0 ;AN000;relative upper left row
3072 DW 0 ;AN000;relative upper left column
3073 DW SCB_LIST27_W ;AN000;line width
3074 DW SCB_LIST27_N ;AN000;number of lines
3075 DW 1 ;AN000;number of element on top
3076 DW SCB_LIST27_N ;AN000;number of elements
3077 DW 1 ;AN000;current element
3078 DW 0 ;AN000;maximun number of cols to scroll
3079 DW 0 ;AN000;display offset into opt strings
3080 DW 1 ;AN000;num list txt col offset in strg
3081 DB '.' ;AN000;numbered list separator
3082 DW 0 ;AN000;select keystroke string length
3083 DW 0 ;AN000;select keystroke string offset
3084 DW 0 ;AN000;select keystroke string segment
3085 DW 0 ;AN000;return/leave string length
3086 DW 0 ;AN000;return/leave string offset
3087 DW 0 ;AN000;return/leave string segment
3088 DW 0 ;AN000;return/erase string length
3089 DW 0 ;AN000;return/erase string offset
3090 DW 0 ;AN000;return/erase string segment
3091 DW WR_UAKEYSLEN ;AN000;up arrow string length
3092 DW WR_UAKEYS ;AN000;up arrow string offset
3093 DW 0 ;AN000;up arrow string segment
3094 DW WR_DAKEYSLEN ;AN000;down arrow string length
3095 DW WR_DAKEYS ;AN000;down arrow string offset
3096 DW 0 ;AN000;down arrow string segment
3097 DW 0 ;AN000;left arrow string length
3098 DW 0 ;AN000;left arrow string offset
3099 DW 0 ;AN000;left arrow string segment
3100 DW 0 ;AN000;right arrow string length
3101 DW 0 ;AN000;right arrow string offset
3102 DW 0 ;AN000;right arrow string segment
3103 DW 0 ;AN000;page-up string length
3104 DW 0 ;AN000;page-up string offset
3105 DW 0 ;AN000;page-up string segment
3106 DW 0 ;AN000;page-down string length
3107 DW 0 ;AN000;page-down string offset
3108 DW 0 ;AN000;page-down string segment
3109 DW WR_PIINDLEN ;AN000;pointer indicator strg length
3110 DW WR_PIIND ;AN000;pointer indicator string offset
3111 DW 0 ;AN000;pointer indicator string segment
3112 DW 1 ;AN000;pointer ind txt col off into strg
3113 DW WR_AIINDLEN ;AN000;active indicator strg length
3114 DW WR_AIIND ;AN000;active indicator string offset
3115 DW 0 ;AN000;active indicator string segment
3116 DW 1 ;AN000;active ind txt col off into stg
3117 DW WR_CIINDLEN ;AN000;check mark text string length
3118 DW WR_CIIND ;AN000;check mark text string offset
3119 DW 0 ;AN000;check mark text string segment
3120 DW 1 ;AN000;check mark offset into opt strg
3121 DW WR_UIINDLEN ;AN000;up indicator string length
3122 DW WR_UIIND ;AN000;up indicator string offset
3123 DW 0 ;AN000;up indicator string segment
3124 DW 2 ;AN000;up indicator row location
3125 DW 1 ;AN000;up indicator column location
3126 DW WR_DIINDLEN ;AN000;down indicator string length
3127 DW WR_DIIND ;AN000;down indicator string offset
3128 DW 0 ;AN000;down indicator string segment
3129 DW 2 ;AN000;down indicator row location
3130 DW 2 ;AN000;down indicator column locaiton
3131 DW 0 ;AN000;left indicator string length
3132 DW 0 ;AN000;left indicator string offset
3133 DW 0 ;AN000;left indicator string segment
3134 DW 0 ;AN000;left indicator row location
3135 DW 0 ;AN000;left indicator column location
3136 DW 0 ;AN000;right indicator string length
3137 DW 0 ;AN000;right indicator string offset
3138 DW 0 ;AN000;right indicator string segment
3139 DW 0 ;AN000;right indicator row location
3140 DW 0 ;AN000;right indicator column locaiton
3141 DW 0 ;AN000;normal color array offset
3142 DW 0 ;AN000;normal color array segment
3143 DW 1 ;AN000;logical color index number
3144 DW 16 ;AN000;number color index table entries
3145 DW WR_CIS ;AN000;offset addr of color index table
3146 DW 0 ;AN000;segment addr of color index tabl
3147 DW WR_INDEX1 ;AN000;index array offset
3148 DW 0 ;AN000;index array segment
3149 DW WR_SELECT_NUM ;AN000;element selection array offset
3150 DW 0 ;AN000;element selection array segment
3151 DW SSC_PTSB ;AN000;option array option word
3152 DW SCB_LIST27 ;AN000;option array pointer offset
3153 DW 0 ;AN000;option array pointer segment
3154 DW SCB_LIST27_W ;AN000;option array string length
3155 DW 0 ;AN000;option array string segment
3156 DB 'A' ;AN000;option array string term char
3157 DW 0 ;AN000;keystroke
3158 DW 0 ;AN000;log vid buf offset override
3159 DW 0 ;AN000;log vid buf segment override
3160 DW 0 ;AN000;general purpose format hook opt
3161 DW 0 ;AN000;general purpose format hook opt
3162 DW 0 ;AN000;length of translation table
3163 DW 0 ;AN000;offset of translation table
3164 DW 0 ;AN000;segment of translation table
3165 DW 0 ;AN000;monocasing table offset
3166 DW 0 ;AN000;monocasing table segment
3167 DW 0 ;AN000;dbcs table length
3168 DW 0 ;AN000;dbcs table offset
3169 DW 0 ;AN000;dbcs table segment
3170 DW 0 ;AN068;SEH offset of font descriptor block
3171 DW 0 ;AN068;SEH segment of font descriptor block
3172 DB 236 DUP(0) ;AN024;
3173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3174;
3175; chose shell
3176;
3177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3178WR_SCB28 DW SCB_WRAP ;AN000;option word one
3179 DW SCB_SKIP ;AN000;option word two
3180 DW SCB_NUMS ;AN000;option word three
3181 DW 0 ;AN068;SEH option word four
3182 DW SND_FREQ ;AN000;error beep frequency
3183 DW 11 ;AC079;SEH ;AN000;upper left row
3184 DW LEFT_COL_SCROLL ;AN000;upper left column
3185 DW 0 ;AN000;relative upper left row
3186 DW 0 ;AN000;relative upper left column
3187 DW SCB_LIST28_W ;AN000;line width
3188 DW SCB_LIST28_N ;AN000;number of lines
3189 DW 1 ;AN000;number of element on top
3190 DW SCB_LIST28_N ;AN000;number of elements
3191 DW 1 ;AN000;current element
3192 DW 0 ;AN000;maximun number of cols to scroll
3193 DW 0 ;AN000;display offset into opt strings
3194 DW 1 ;AN000;num list txt col offset in strg
3195 DB '.' ;AN000;numbered list separator
3196 DW 0 ;AN000;select keystroke string length
3197 DW 0 ;AN000;select keystroke string offset
3198 DW 0 ;AN000;select keystroke string segment
3199 DW 0 ;AN000;return/leave string length
3200 DW 0 ;AN000;return/leave string offset
3201 DW 0 ;AN000;return/leave string segment
3202 DW 0 ;AN000;return/erase string length
3203 DW 0 ;AN000;return/erase string offset
3204 DW 0 ;AN000;return/erase string segment
3205 DW WR_UAKEYSLEN ;AN000;up arrow string length
3206 DW WR_UAKEYS ;AN000;up arrow string offset
3207 DW 0 ;AN000;up arrow string segment
3208 DW WR_DAKEYSLEN ;AN000;down arrow string length
3209 DW WR_DAKEYS ;AN000;down arrow string offset
3210 DW 0 ;AN000;down arrow string segment
3211 DW 0 ;AN000;left arrow string length
3212 DW 0 ;AN000;left arrow string offset
3213 DW 0 ;AN000;left arrow string segment
3214 DW 0 ;AN000;right arrow string length
3215 DW 0 ;AN000;right arrow string offset
3216 DW 0 ;AN000;right arrow string segment
3217 DW 0 ;AN000;page-up string length
3218 DW 0 ;AN000;page-up string offset
3219 DW 0 ;AN000;page-up string segment
3220 DW 0 ;AN000;page-down string length
3221 DW 0 ;AN000;page-down string offset
3222 DW 0 ;AN000;page-down string segment
3223 DW WR_PIINDLEN ;AN000;pointer indicator strg length
3224 DW WR_PIIND ;AN000;pointer indicator string offset
3225 DW 0 ;AN000;pointer indicator string segment
3226 DW 1 ;AN000;pointer ind txt col off into strg
3227 DW WR_AIINDLEN ;AN000;active indicator strg length
3228 DW WR_AIIND ;AN000;active indicator string offset
3229 DW 0 ;AN000;active indicator string segment
3230 DW 1 ;AN000;active ind txt col off into stg
3231 DW WR_CIINDLEN ;AN000;check mark text string length
3232 DW WR_CIIND ;AN000;check mark text string offset
3233 DW 0 ;AN000;check mark text string segment
3234 DW 1 ;AN000;check mark offset into opt strg
3235 DW WR_UIINDLEN ;AN000;up indicator string length
3236 DW WR_UIIND ;AN000;up indicator string offset
3237 DW 0 ;AN000;up indicator string segment
3238 DW 2 ;AN000;up indicator row location
3239 DW 1 ;AN000;up indicator column location
3240 DW WR_DIINDLEN ;AN000;down indicator string length
3241 DW WR_DIIND ;AN000;down indicator string offset
3242 DW 0 ;AN000;down indicator string segment
3243 DW 2 ;AN000;down indicator row location
3244 DW 2 ;AN000;down indicator column locaiton
3245 DW 0 ;AN000;left indicator string length
3246 DW 0 ;AN000;left indicator string offset
3247 DW 0 ;AN000;left indicator string segment
3248 DW 0 ;AN000;left indicator row location
3249 DW 0 ;AN000;left indicator column location
3250 DW 0 ;AN000;right indicator string length
3251 DW 0 ;AN000;right indicator string offset
3252 DW 0 ;AN000;right indicator string segment
3253 DW 0 ;AN000;right indicator row location
3254 DW 0 ;AN000;right indicator column locaiton
3255 DW WR_CIS ;AN000;normal color array offset
3256 DW 0 ;AN000;normal color array segment
3257 DW 1 ;AN000;logical color index number
3258 DW 16 ;AN000;number color index table entries
3259 DW WR_CIS ;AN000;offset addr of color index table
3260 DW 0 ;AN000;segment addr of color index tabl
3261 DW WR_INDEX1 ;AN000;index array offset
3262 DW 0 ;AN000;index array segment
3263 DW WR_SELECT_NUM ;AN000;element selection array offset
3264 DW 0 ;AN000;element selection array segment
3265 DW SSC_PTSB ;AN000;option array option word
3266 DW SCB_LIST28 ;AN000;option array pointer offset
3267 DW 0 ;AN000;option array pointer segment
3268 DW SCB_LIST28_W ;AN000;option array string length
3269 DW 0 ;AN000;option array string segment
3270 DB 'A' ;AN000;option array string term char
3271 DW 0 ;AN000;keystroke
3272 DW 0 ;AN000;log vid buf offset override
3273 DW 0 ;AN000;log vid buf segment override
3274 DW 0 ;AN000;general purpose format hook opt
3275 DW 0 ;AN000;general purpose format hook opt
3276 DW 0 ;AN000;length of translation table
3277 DW 0 ;AN000;offset of translation table
3278 DW 0 ;AN000;segment of translation table
3279 DW 0 ;AN000;monocasing table offset
3280 DW 0 ;AN000;monocasing table segment
3281 DW 0 ;AN000;dbcs table length
3282 DW 0 ;AN000;dbcs table offset
3283 DW 0 ;AN000;dbcs table segment
3284 DW 0 ;AN068;SEH offset of font descriptor block
3285 DW 0 ;AN068;SEH segment of font descriptor block
3286 DB 236 DUP(0) ;AN024;
3287;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3288;
3289; Keystroke Strings and length calculations
3290;
3291;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3292WR_REHLPKEYS DB 0,F1,0,F9,ESCAPE ;AN000;return/erase keystroke string
3293WR_REHLPKEYSLEN EQU ($-WR_REHLPKEYS) ;AN000;
3294
3295WR_UAKEYS DB 0,UPARROW ;AN000;up arrow keystroke string
3296WR_UAKEYSLEN EQU ($-WR_UAKEYS) ;AN000;
3297
3298WR_DAKEYS DB 0,DNARROW ;AN000;down arrow keystroke string
3299WR_DAKEYSLEN EQU ($-WR_DAKEYS) ;AN000;
3300
3301
3302WR_PUKEYS DB 0,PGUP ;AN000;define page up key buffer
3303WR_PUKEYSLEN EQU ($-WR_PUKEYS) ;AN000;
3304
3305WR_PDKEYS DB 0,PGDN ;AN000;define page down key buffer
3306WR_PDKEYSLEN EQU ($-WR_PDKEYS) ;AN000;
3307
3308WR_UIIND DB 24 ;AN000;define up indicator buffer
3309WR_UIINDLEN EQU ($-WR_UIIND) ;AN000;
3310
3311WR_DIIND DB 25 ;AN000;define down indicator buffer
3312WR_DIINDLEN EQU ($-WR_DIIND) ;AN000;
3313
3314WR_PIIND DB '�' ;AN000;selection pointer indicator buff
3315WR_PIINDLEN EQU ($-WR_PIIND) ;AN000;
3316
3317WR_AIIND DB '<' ;AN000;active string indicator buffer
3318WR_AIINDLEN EQU ($-WR_AIIND) ;AN000;
3319
3320WR_CIIND DB '>' ;AN000;check mark string indicator buff
3321WR_CIINDLEN EQU ($-WR_CIIND) ;AN000;
3322
3323;
3324; Selection array structure
3325;
3326WR_SELECT_NUM DW SCB_ACTIVEON ;AN000;
3327 DW SCB_SKIPON ;AN000;
3328 DW SCB_ACTIVEON ;AN000;
3329 DW SCB_SKIPON ;AN000;
3330 DW SCB_ACTIVEON ;AN000;
3331 DW SCB_SKIPON ;AN000;
3332 DW SCB_ACTIVEON ;AN000;
3333 DW SCB_SKIPON ;AN000;
3334 DW SCB_ACTIVEON ;AN000;
3335 DW SCB_SKIPON ;AN000;
3336 DW SCB_ACTIVEON ;AN000;
3337
3338WR_SELECT DW SCB_ACTIVEON ;AN000;
3339 DW SCB_ACTIVEON ;AN000;
3340 DW SCB_ACTIVEON ;AN000;
3341 DW SCB_ACTIVEON ;AN000;
3342 DW SCB_ACTIVEON ;AN000;
3343 DW SCB_ACTIVEON ;AN000;
3344 DW SCB_ACTIVEON ;AN000;
3345 DW SCB_ACTIVEON ;AN000;
3346 DW SCB_ACTIVEON ;AN000;
3347 DW SCB_ACTIVEON ;AN000;
3348 DW SCB_ACTIVEON ;AN000;
3349 DW SCB_ACTIVEON ;AN000;
3350WR_SELECT_MOD DW 10 DUP (0) ;AN000;
3351
3352 INCLUDE PANEL.INF ;AN000;
3353
3354CODE ENDS ;AN000;
3355 END ;AN000;
3356 \ 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 @@
1
2
3PAGE 55,132 ;AN000;
4NAME SELPAN ;AN000;
5TITLE SELPAN - Table of entry points of panels, scroll fields, color ;AN000;
6SUBTTL sel-pan.asm ;AN000;
7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8;
9; SELPAN .ASM
10;
11;
12; Copyright 1988 Microsoft
13;
14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15
16 .alpha ; arrange segments alphabetically
17
18 EXTRN PCB_VECTOR:WORD ;AN000;
19 EXTRN NUM_PCB:ABS ;AN000;
20 EXTRN WR_SCBVEC:WORD ;AN000;
21 EXTRN NUM_SCB:ABS ;AN000;
22 EXTRN WR_CIS:WORD ;AN000;
23 EXTRN L_WR_CIS:ABS ;AN000;
24 EXTRN WR_CIS2:WORD ;AN000;
25 EXTRN L_WR_CIS2:ABS ;AN000;
26 ;
27EXT_FILE STRUC ;AN000;
28PCBS DW 0 ;AN000;
29NPCBS DW 0 ;AN000;
30SCBS DW 0 ;AN000;
31NSCBS DW 0 ;AN000;
32COLTBL DW 0 ;AN000;
33NCOLTBL DW 0 ;AN000;
34MONTBL DW 0 ;AN000;
35NMONTBL DW 0 ;AN000;
36EXT_FILE ENDS ;AN000;
37 ;
38CODE SEGMENT PARA PUBLIC 'CODE' ;AN000;
39 DW PCB_VECTOR ;AN000;
40 DW NUM_PCB ;AN000;
41 DW WR_SCBVEC ;AN000;
42 DW NUM_SCB ;AN000;
43 DW WR_CIS2 ;AN000;
44 DW L_WR_CIS2 ;AN000;
45 DW WR_CIS2 ;AN000;
46 DW L_WR_CIS2 ;AN000;
47CODE ENDS ;AN000;
48 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 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3;
4; SEL-PAN.INC
5;
6;
7FALSE = 0
8
9;
10; Dialog Equates
11;
12; These values will eventually be defined by the dialog.
13;
14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15.XLIST ;AN000;
16LEFT_COL EQU 8 ;AN000;
17SCR_CONT EQU 1 ;AN000;contextual helps
18SCR_INDX EQU 2 ;AN000;indexed helps
19SCR_MAIN EQU 3 ;AN000;main menu
20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
21;
22; Help ID equates
23;
24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
25HCB_KEYS EQU 1 ;AN000;help on keys text
26HCB_HELP EQU 2 ;AN000;help on help text
27HCB_MAIN EQU 3 ;AN000;main menu help text
28HCB_SAMP EQU 4 ;AN000;sample application help text
29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
30;
31; Color index record equates
32;
33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
34WHITE_BLUE EQU 1 ;AN000;
35BLACK_WHITE EQU 4 ;AN000;
36WHITE_RED EQU 5 ;AN000;
37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
38;
39; Color ID equates
40;
41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
42CLR_CLR EQU 1 ;AN000;shipped text mode color index
43CLR_MON EQU 2 ;AN000;shipped monochrome color index
44CLR_USE EQU 3 ;AN000;user color index
45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
46;
47; Sound equates
48;
49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
50SND_DURA EQU 10000 ;AN000;duration of error beep
51SND_FREQ EQU 440 ;AN000;frequency of error beep
52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
53;
54; Size equates
55;
56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
57MAX_MEMPAR EQU 4000 ;AN000;size of buffer in 16 byte paraghp
58MAX_RETKSZ EQU 512 ;AN000;max # of bytes in return key buff
59MAX_HELPSZ EQU 5000 ;AN000;max # of bytes in help text buff
60MAX_PANNUM EQU 98 ;AN000;max num of panels possible in mem
61MAX_SCRNUM EQU 28 ;AN000;max num of scroll possible in mem
62MAX_CHDQUE EQU 5 ;AN000;max # of child queues to save
63MAX_PANQUE EQU 4 ;AN000;max # of panel queues to save
64MAX_NUMCHD EQU 11 ;AN000;max # of parent panels queued
65MAX_NUMPAN EQU 10 ;AN000;max # of child panels queued
66MAX_CLRECD EQU 12 ;AN000;num of bytes per PCPANEL color rc
67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
68;
69; Keystroke equates
70;
71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
72KEY_HELP EQU 3B00H ;AN000;F1=Help
73KEY_SWIT EQU 3C00H ;AN000;F2=Switch
74KEY_INDX EQU 3F00H ;AN000;F5=Index
75KEY_KEYS EQU 4000H ;AN000;F7=Keys
76KEY_SELT EQU 000DH ;AN000;Enter
77KEY_QUIT EQU 001BH ;AN000;Esc=Quit
78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
79;
80; PCPANWR equates
81;
82;
83; PCPANWR option bit equates (PWR_OPT1)
84;
85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
86PWR_WRITEONE EQU 0000000000000001B ;AN000;write pan specified by PWR_ID
87PWR_WRITEALL EQU 0000000000000010B ;AN000;write all pans to specified file
88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
89;
90; PCPANWR error bit equates (PWR_ERROR)
91;
92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
93PWR_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small
94PWR_NOPANELS EQU 0000000000000010B ;AN000;file does not contain panels
95PWR_NOTCASFILE EQU 0000000000000100B ;AN000;CAS file obj list does not exist
96PWR_PANELSFULL EQU 0000000000001000B ;AN000;panel vector is full
97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
98;
99; PCPANEL equates
100;
101;
102; PCPANEL option bit equates (PM_OPT1)
103;
104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
105PM_RF EQU 0000000000000001B ;AN000;do not refresh display
106PM_SRF EQU 0000000000000010B ;AN000;selective PVB refresh from LVB
107PM_BK EQU 0000000000000100B ;AN000;panel break function active
108PM_CL EQU 0000000000001000B ;AN000;initialize LVB to base char/attr
109PM_DOA EQU 0000000000010000B ;AN000;display childs in active parent
110PM_DOV EQU 0000000000100000B ;AN000;use child row, col, color overrid
111PM_DOQ EQU 0000000001000000B ;AN000;disp all child in parent chd tabl
112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
113;
114; PCPANEL error equates for (PM_ERROR)
115;
116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
117PM_PANPDQ EQU 0000000000000001B ;AN000;invalid parent PDQ or start num
118PM_PCBVEC EQU 0000000000000010B ;AN000;invalid PCB vector entry found
119PM_UNKNPANS EQU 0000000000000100B ;AN000;unknown panel source found
120PM_CHDTAB EQU 0000000000001000B ;AN000;set error with child table
121PM_COLORX EQU 0000000000010000B ;AN000;panel's color index out of range
122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
123;
124; PCPANEL Parent and Child Display Queue option bit equates (PT_OPT)
125;
126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
127PT_BK EQU 0000000000000001B ;AN000;panel break on
128PT_SRF EQU 0000000000000010B ;AN000;selective refresh of panel to PVB
129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
130;
131; PCPANEL Panel Control Block option equates for individual panels (PCB_OPT1)
132;
133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
134PCB_CRE EQU 0000000000000001B ;AN000;Create panel from scratch
135PCB_CMP EQU 0000000000000010B ;AN000;Use compress text form in memory
136PCB_EXP EQU 0000000000000100B ;AN000;Use expanded text form in memory
137PCB_MXP EQU 0000000000001000B ;AN000;Use mixed text/attr form in memoy
138PCB_LB EQU 0000000000010000B ;AN000;Use logical border
139PCB_ASZ EQU 0000000000100000B ;AN000;Allow sizing of panel
140PCB_ASC EQU 0000000001000000B ;AN000;Allow scrolling of panel
141PCB_LAB EQU 0000000010000000B ;AN000;Use the defined panel label
142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
143;
144; PCPANEL Child information table option equates (CHILD_OPT)
145;
146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
147CHD_ABS EQU 0000000000000001B ;AN000;calc child pan pos from scr corne
148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
149;
150; PCCLRWR equates
151;
152; PCCLRWR error bit equates (CWR_ERROR)
153;
154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
155CWR_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small
156CWR_NOCOLORS EQU 0000000000000010B ;AN000;file does not contain colors
157CWR_NOTCASFILE EQU 0000000000000100B ;AN000;file object list does not exist
158CWR_COLORSFULL EQU 0000000000001000B ;AN000;color vector is full
159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
160;
161; PCSCRWR equates
162;
163;
164; PCSCRWR option bit equates (SWR_OPT1)
165;
166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
167SWR_WRITEONE EQU 0000000000000001B ;AN000;write pan specified by SWR_ID
168SWR_WRITEALL EQU 0000000000000010B ;AN000;write all pans to specified file
169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
170;
171; PCSCRWR error bit equates (SWR_ERROR)
172;
173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
174SWR_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small
175SWR_NOFIELDS EQU 0000000000000010B ;AN000;file does not contain fields
176SWR_NOTCASFILE EQU 0000000000000100B ;AN000;file object list does not exist
177SWR_FIELDSFULL EQU 0000000000001000B ;AN000;field vector is full
178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
179;
180; PCSTRST equates
181;
182; PCSTRST equates
183;
184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
185SSC_TBSL EQU 0000000000000001B ;AN000;use two byte string length
186SSC_PTSB EQU 0000000000000010B ;AN000;pointer points to string buffer
187SSC_VTSAO EQU 0000000000000100B ;AN000;vector table is string addr only
188SSC_VTASO EQU 0000000000001000B ;AN000;vector table addr is seg:offset
189SSC_SLSB EQU 0000000000010000B ;AN000;string length is in string buffer
190SSC_SBTC EQU 0000000000100000B ;AN000;string buffer has term. character
191SSC_VTE EQU 1 ;AN000;error in vector table
192SSC_SBE EQU 2 ;AN000;error in sting buffer
193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
194;
195; PCSLCTP equates
196;
197; PCSLCTP Option word one (SCB_OPT1)
198;
199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
200SCB_UC EQU 0000000000000001B ;AN000;upper case option
201SCB_WRAP EQU 0000000000000010B ;AN000;wrap option
202SCB_FRBF EQU 0000000000000100B ;AN000;force return before first option
203SCB_FRAL EQU 0000000000001000B ;AN000;force return after last option
204SCB_LL EQU 0000000000010000B ;AN000;lock line
205SCB_UKS EQU 0000000000100000B ;AN000;use keystroke
206SCB_RD EQU 0000000001000000B ;AN000;return after display option
207SCB_RUK EQU 0000000010000000B ;AN000;return unused keys option
208SCB_UI EQU 0000000100000000B ;AN000;use index option
209SCB_TRN EQU 0000001000000000B ;AN000;translate character
210SCB_MON EQU 0000010000000000B ;AN000;convert to upper case monocasing
211SCB_DBCS EQU 0000100000000000B ;AN000;check for double byte chars
212SCB_TBL EQU 0001000000000000B ;AN000;use given DBCS range table
213SCB_DCHECK EQU 0010000000000000B ;AN000;display check mark characters
214SCB_DACTIVE EQU 0100000000000000B ;AN000;display active string indicators
215SCB_DPOINT EQU 1000000000000000B ;AN000;display selection pointer string
216;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
217;
218; PCSLCTP Option word two (SCB_OPT2)
219;
220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
221SCB_CS EQU 0000000000000001B ;AN000;clear screen on entry option
222SCB_ROTN EQU 0000000000000010B ;AN000;reset option to normal on return
223SCB_UET EQU 0000000000000100B ;AN000;use existing text option
224SCB_CFO EQU 0000000000001000B ;AN000;cursor follows option
225SCB_LCOX EQU 0000000000010000B ;AN000;leave cursor on exit
226SCB_IPAGE EQU 0000000000100000B ;AN000;instant paging
227SCB_PM1 EQU 0000000001000000B ;AN000;paging is minus one line
228SCB_UIND EQU 0000000010000000B ;AN000;display up, dn, lf, rg indicators
229SCB_UNCA EQU 0000000100000000B ;AN000;use normal color array
230SCB_DYN EQU 0000001000000000B ;AN000;option array is dynamicly created
231SCB_LANDR EQU 0000010000000000B ;AN000;left and right scrolling active
232SCB_CPHY EQU 0000100000000000B ;AN000;color array is physical attributs
233SCB_NUML EQU 0001000000000000B ;AN000;generate num list in opt strings
234SCB_SKIP EQU 0010000000000000B ;AN000;skip inactive option strings
235SCB_SHIGH EQU 0100000000000000B ;AN000;highlight the selected opt strgs
236SCB_AHIGH EQU 1000000000000000B ;AN000;highlight the active option strgs
237;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
238;
239; PCSLCTP Option word three (SCB_OPT3)
240;
241;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
242SCB_SELACT EQU 0000000000000001B ;AN000;allow selection of inactive elem
243SCB_SELEXC EQU 0000000000000010B ;AN000;exclusive selection of one elemet
244SCB_EXCSING EQU 0000000000000100B ;AN000;one element is always selected
245SCB_NUMUIND EQU 0000000000001000B ;AN000;display line number count
246SCB_CHIGH EQU 0000000000010000B ;AN000;hilight cursored and selected stg
247SCB_NUMS EQU 0000000000100000B ;AN000;auto 0-9 number selection
248SCB_FINDE EQU 0000000001000000B ;AN000;auto character search
249SCB_RELUIND EQU 0000000010000000B ;AN000;rel row/col used w/dirct indicato
250SCB_RELSCR EQU 0000000100000000B ;AN000;rel row/col used w/scroll field
251SCB_LVBOVR EQU 0000001000000000B ;AN000;use video buffer seg:off override
252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
253;
254; PCSLCTP Select Array Option (SCB_SELSEG:SCB_SELOFF)
255;
256;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
257SCB_SELECTON EQU 0000000000000001B ;AN000;element selected
258SCB_ACTIVEON EQU 0000000000000010B ;AN000;element active
259SCB_SKIPON EQU 0000000000000100B ;AN000;element should be skipped
260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
261;
262; PCHLPWR equates
263;
264; PCHLPWR option bit equates (HWR_OPT1)
265;
266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
267HWR_REPLACE EQU 0000000000000001B ;AN000;Replace existing help text/topic
268;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
269;
270; PCHLPWR error bit equates (HWR_ERROR)
271;
272;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
273HWR_BUFSIZE EQU 0000000000000001B ;AN000;buffer size is too small
274HWR_HELPUSED EQU 0000000000000010B ;AN000;help ID already in use
275HWR_INVALDID EQU 0000000000000100B ;AN000;help ID is out of range
276HWR_NOHLPOBJ EQU 0000000000001000B ;AN000;no help object
277HWR_NOTCASFILE EQU 0000000000010000B ;AN000;not a valid cas file
278HWR_HELPSFULL EQU 0000000000100000B ;AN000;help vector is full
279;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
280;
281; Internal equates
282;
283; internal equates
284;
285;;;;;;;;;;;;;;;;;;;;;;;;;
286UPARROW EQU 72 ;AN000;up arrow
287DNARROW EQU 80 ;AN000;down arrow
288LFARROW EQU 75 ;AN000;left arrow
289RTARROW EQU 77 ;AN000;right arrow
290PGUP EQU 73 ;AN000;
291PGDN EQU 81 ;AN000;
292ESCAPE EQU 27 ;AN000;
293ENTER EQU 13 ;AN000;
294SPACE EQU 32 ;AN000;
295F1 EQU 59 ;AN000;
296F2 EQU 60 ;AN000;
297F3 EQU 61 ;AN000;
298F4 EQU 62 ;AN000;
299F5 EQU 63 ;AN000;
300F6 EQU 64 ;AN000;
301F7 EQU 65 ;AN000;
302F8 EQU 66 ;AN000;
303F9 EQU 67 ;AN000;
304F10 EQU 68 ;AN000;
305.LIST ;AN000;
306;;;;;;;;;;;;;;;;;;;;;;;;;
307 \ 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 @@
1SEL-PAN+
2 PANELS+
3 COLORS+
4 SCROLL,,,
5 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 @@
1PAGE 55,132 ;AN000;
2NAME SELCHILD ;AN000;
3TITLE SELCHILD - CHILD processing for SELECT.EXE;AN000;
4SUBTTL selchild.asm ;AN000;
5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6;
7; HANDLE_CHILDREN
8;
9; Entry:
10;
11;
12;
13; Exit:
14;
15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
16 EXTRN QM_ID:WORD ;AN000;
17 EXTRN QM_OPT1:WORD ;AN000;
18 EXTRN QM_ACTIVEPAN:WORD ;AN000;
19 ;
20SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine
21 ASSUME CS:SELECT ;AN000;
22 ;
23 EXTRN GET_PCB:NEAR ;AN000;
24 EXTRN PCDISPQ_CALL:NEAR ;AN000;
25 ;
26 INCLUDE PCEQUATE.INC ;AN000;
27 INCLUDE CASTRUC.INC ;AN000;
28 INCLUDE MACROS.INC ;AN000;
29 ;
30 PUBLIC HANDLE_CHILDREN ;AN000;
31HANDLE_CHILDREN PROC ;AN000;
32 PUSHH <AX,BX,CX,DI,ES> ;AN000;
33 MOV QM_OPT1,QM_PUSHCHD ;AN000; push child panels
34 ;
35 MOV BX,QM_ACTIVEPAN ;AN000;
36 CALL GET_PCB ;AN000; get panel control block
37 ; for active parent panel
38 MOV CX,ES:[DI]+PCB_CHILDNUM ;AN000;
39 OR CX,CX ;AN000;
40 JZ HC_1 ;AN000;
41 ;
42 PUSH ES:[DI]+PCB_CHILDSEG ;AN000; get address of first child panel
43 PUSH ES:[DI]+PCB_CHILDOFF ;AN000;
44 POP DI ;AN000;
45 POP ES ;AN000;
46 ;
47HC_0: MOV AX,ES:[DI]+CHD_PCB ;AN000;
48 MOV QM_ID,AX ;AN000;
49 PUSHH <ES,DI> ;AN000;
50 CALL PCDISPQ_CALL ;AN000; push next child on the stack
51 POPP <DI,ES> ;AN000;
52 ;
53 ADD DI,TYPE CHD_PB ;AN000; get next child control block
54 LOOP HC_0 ;AN000;
55 ;
56HC_1: POPP <ES,DI,CX,BX,AX> ;AN000;
57 RET ;AN000;
58HANDLE_CHILDREN ENDP ;AN000;
59SELECT ENDS ;AN000;
60 END ;AN000;
61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
62
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 @@
1;-----------------------------------------------------------------------------+
2; SELECT.INC :
3; :
4; :
5; Dialog Equates :
6; :
7; These values will eventually be defined by the dialog manager :
8; :
9;-----------------------------------------------------------------------------+
10;
11; Help ID equates
12;
13HCB_KEYS EQU 1 ;AN000;help on keys text
14HCB_HELP EQU 2 ;AN000;help on help text
15;
16; Color ID equates
17;
18CLR_CLR EQU 1 ;AN000;shipped text mode color index
19CLR_MON EQU 2 ;AN000;shipped monochrome color index
20;
21; Sound equates
22;
23SND_DURA EQU 40000 ;AN000;duration of error beep
24SND_FREQ EQU 440 ;AN000;frequency of error beep
25;
26; Size equates
27;
28MAX_MEMPAR EQU 0F7FH ;AC091;SEH reduce area to 62K to help 256K mem problem;AN000;size of buffer in 16 byte paraghp (64KB)
29MAX_MEMLVB EQU 012BH ;AN000;size of buffer in 16 byte paraghp (4240 BYTES)
30MAX_RETKSZ EQU 50 ;AN000;max # of bytes in return key buff
31MAX_HELPSZ EQU 2000H ;AN000;max # of bytes in help text buff (8KB)
32MAX_PANNUM EQU 98 ;AC111;JW ;max num of panels possible in mem
33MAX_SCRNUM EQU 28 ;AC111;JW ;max num of scroll possible in mem
34MAX_CHDQUE EQU 2 ;AN000;max # of child queues to save
35MAX_PANQUE EQU 5 ;AN000;max # of panel queues to save
36MAX_NUMCHD EQU 5 ;AN000;max # of parent panels queued
37MAX_NUMPAN EQU 5 ;AN000;max # of child panels queued
38MAX_CLRECD EQU 12 ;AN000;num of bytes per PCPANEL color rc
39;
40; Keystroke equates
41;
42KEY_HELP EQU 3B00H ;AN000;F1=Help
43KEY_SWIT EQU 3C00H ;AN000;F2=Switch
44KEY_INDX EQU 3F00H ;AN000;F5=Index
45KEY_KEYS EQU 4300H ;AN000;F9=Keys
46KEY_SELT EQU 000DH ;AN000;Enter
47KEY_QUIT EQU 001BH ;AN000;Esc=Quit
48;
49; Miscellaneous equates
50;
51VECSEGLEN EQU 2 ;AN000;vector segment length
52VECOFFLEN EQU 2 ;AN000;vector offset length
53
54 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 @@
1 SELECT0+
2 SELECT1+
3 SELECT2+
4 SELECT2A+
5 SELECT3+
6 SELECT4+
7 SELECT5+
8 SELECT5A+
9 SELECT6+
10 SELECT7+
11 SELECT8+
12 SELECT9+
13 ROUTINE2+
14 GEN_COMS+
15 ROUTINES+
16 INTVEC+
17 CKDISP+
18 SCN_PARM+
19 PRN_DEF+
20 VAR+
21 CASERVIC+
22 INPUT+
23 INITMEM+
24 MPARSE+
25 MOD_COPY+
26 S_DISPLY+
27 BRIDGE+
28 ASM2C+
29 GET_STAT+
30 GLOBAL+
31 INT13+
32 BOOTREC,
33SELECT.EXE /EXEPACK
34SELECT/MAP
35SERVICES.LIB+
36CASSFAR.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 @@
1COM=..\COMMON
2MSG=..\MESSAGES
3country=usa
4
5#
6# Make file for SELECT.EXE, SELECT.DAT, SELECT.COM, SELECT.HLP
7#
8
9#
10# Build CASSFAR.LIB
11#
12
13DUMMY.OUT: SELECT.MAK
14 CD ..\CASSFAR
15 MAKE CASSFAR.MAK
16 CD ..\SELECT
17
18#
19# Make SELECT.EXE
20#
21
22SELECT.CTL: SELECT.SKL $(MSG)\$(COUNTRY).MSG
23 MSGBUILD SELECT.SKL
24
25
26SELECT0.OBJ: SELECT0.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \
27 PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \
28 MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \
29 MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \
30 SELECT.CTL SELECT.MAK
31 ASM87 SELECT0 -b1
32
33SELECT1.OBJ: SELECT1.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \
34 PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \
35 MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \
36 MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \
37 SELECT.MAK
38 ASM87 SELECT1 -b1
39
40SELECT2.OBJ: SELECT2.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \
41 PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \
42 MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \
43 MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \
44 SELECT.MAK
45 ASM87 SELECT2 -b1
46
47SELECT2A.OBJ: SELECT2A.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \
48 PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \
49 MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \
50 MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \
51 SELECT.MAK
52 ASM87 SELECT2A -b1
53
54SELECT3.OBJ: SELECT3.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \
55 PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \
56 MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \
57 MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \
58 SELECT.MAK
59 ASM87 SELECT3 -b1
60
61SELECT4.OBJ: SELECT4.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \
62 PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \
63 MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \
64 MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \
65 SELECT.MAK
66 ASM87 SELECT4 -b1
67
68SELECT5.OBJ: SELECT5.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \
69 PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \
70 MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \
71 MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \
72 SELECT.MAK
73 ASM87 SELECT5 -b1
74
75SELECT5A.OBJ: SELECT5A.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \
76 PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \
77 MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \
78 MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \
79 SELECT.MAK
80 ASM87 SELECT5A -b1
81
82SELECT6.OBJ: SELECT6.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \
83 PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \
84 MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \
85 MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \
86 SELECT.MAK
87 ASM87 SELECT6 -b1
88
89SELECT7.OBJ: SELECT7.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \
90 PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \
91 MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \
92 MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \
93 SELECT.MAK
94 ASM87 SELECT7 -b1
95
96SELECT8.OBJ: SELECT8.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \
97 PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \
98 MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \
99 MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \
100 SELECT.MAK
101 ASM87 SELECT8 -b1
102
103SELECT9.OBJ: SELECT9.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \
104 PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \
105 MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \
106 MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \
107 SELECT.MAK
108 ASM87 SELECT9 -b1
109
110GEN_COMS.OBJ: GEN_COMS.ASM $(COM)\STRUC.INC $(COM)\SYSMSG.INC CASEXTRN.INC \
111 PANEL.MAC SELECT.INC PAN-LIST.INC CASTRUC.INC MACROS.INC \
112 MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \
113 MACROS7.INC MAC_EQU.INC EXT.INC VARSTRUC.INC ROUT_EXT.INC \
114 SELECT.MAK
115 ASM87 GEN_COMS -b1
116
117MPARSE.OBJ: MPARSE.ASM $(COM)\PARSE.ASM SELECT.MAK
118 ASM87 MPARSE -b1
119
120INITMEM.OBJ: INITMEM.ASM $(COM)\STRUC.INC MACROS.INC MACROS2.INC MACROS3.INC \
121 MACROS4.INC MACROS5.INC MACROS6.INC MACROS7.INC SELECT.MAK
122 ASM87 INITMEM -b1
123
124INPUT.OBJ: INPUT.ASM PCEQUATE.INC SELECT.MAK
125 ASM87 INPUT -b1
126
127ONEDRIVE.OBJ: ONEDRIVE.ASM SELECT.MAK
128 ASM87 ONEDRIVE -b1
129
130ROUTINES.OBJ: ROUTINES.ASM $(COM)\STRUC.INC MAC_EQU.INC VARSTRUC.INC EXT.INC \
131 MACROS.INC MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC \
132 MACROS6.INC MACROS7.INC SELECT.MAK
133 ASM87 ROUTINES -b1
134
135ROUTINE2.OBJ: ROUTINE2.ASM $(COM)\STRUC.INC MAC_EQU.INC EXT.INC VARSTRUC.INC \
136 MACROS.INC MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC \
137 MACROS6.INC MACROS7.INC SELECT.MAK
138 ASM87 ROUTINE2 -b1
139
140VAR.OBJ: VAR.ASM $(COM)\SYSMSG.INC SEL_FILE.INC VARSTRUC.INC SELECT.MAK
141 ASM87 VAR -b1
142
143PRN_DEF.OBJ: PRN_DEF.ASM $(COM)\STRUC.INC MACROS.INC MACROS2.INC MACROS3.INC \
144 MACROS4.INC MACROS5.INC MACROS6.INC MACROS7.INC SELECT.MAK
145 ASM87 PRN_DEF -b1
146
147SCN_PARM.OBJ: SCN_PARM.ASM $(COM)\STRUC.INC EXT.INC MACROS.INC MACROS2.INC \
148 MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC MACROS7.INC \
149 SELECT.MAK
150 ASM87 SCN_PARM -b1
151
152S_DISPLY.OBJ: S_DISPLY.ASM $(COM)\STRUC.INC SELECT.MAK
153 ASM87 S_DISPLY -b1
154
155MOD_COPY.OBJ: MOD_COPY.ASM $(COM)\STRUC.INC DOS.EQU XCOPY.EQU DOSFILES.INC \
156 MACROS.INC MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC \
157 MACROS6.INC MACROS7.INC SELECT.MAK
158 ASM87 MOD_COPY -b1
159
160BRIDGE.OBJ: BRIDGE.ASM CASVAR.INC CASRN.INC SELECT.MAK
161 ASM87 BRIDGE -b1
162
163CASERVIC.OBJ: CASERVIC.ASM CASVAR.INC CASRN.INC PAN-LIST.INC SELECT.INC \
164 CASTRUC.INC DATA.MAC PANEL.MAC MACROS.INC SELECT.MAK
165 ASM87 CASERVIC -b1
166
167CKDISP.OBJ: CKDISP.ASM $(COM)\STRUC.INC SELECT.MAK
168 ASM87 CKDISP -b1
169
170INTVEC.OBJ: INTVEC.ASM $(COM)\STRUC.INC MAC_EQU.INC PAN-LIST.INC \
171 PANEL.MAC MACROS.INC VARSTRUC.INC EXT.INC CASEXTRN.INC \
172 SELECT.MAK
173 ASM87 INTVEC -b1
174
175ASM2C.OBJ : ASM2C.ASM SELECT.MAK
176 ASM87 ASM2C -b1
177
178GET_STAT.OBJ : GET_STAT.C SELECT.MAK
179 CCOMP GET_STAT.C /AS /Od /Zep /DLINT_ARGS
180
181INT13.OBJ : INT13.C SELECT.MAK
182 CCOMP INT13.C /AS /Od /Zep /DLINT_ARGS
183
184GLOBAL.OBJ : GLOBAL.C SELECT.MAK
185 CCOMP GLOBAL.C /AS /Od /Zep /DLINT_ARGS
186
187BOOTREC.OBJ : ..\Fdisk\BOOTREC.ASM ..\Fdisk\FDBOOT.INC SELECT.MAK
188 Copy ..\FDISK\BOOTREC.ASM BOOTREC.ASM
189 Copy ..\FDISK\FDBOOT.INC FDBOOT.INC
190 ASM87 BOOTREC -b1
191 Del BOOTREC.asm
192 Del FDBOOT.INC
193
194SELQUIT.OBJ : SELQUIT.ASM PANEL.MAC PCEQUATE.INC PAN-LIST.INC CASTRUC.INC \
195 EXT.INC $(COM)\STRUC.INC MACROS.INC MACROS2.INC MACROS3.INC \
196 MACROS4.INC MACROS5.INC MACROS6.INC MACROS7.INC SELECT.MAK
197 ASM87 SELQUIT -b1
198
199SELCHILD.OBJ : SELCHILD.ASM PCEQUATE.INC CASTRUC.INC MACROS.INC MACROS2.INC \
200 MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC MACROS7.INC \
201 SELECT.MAK
202 ASM87 SELCHILD -b1
203
204SERVICES.OBJ : SERVICES.ASM PCEQUATE.INC CASTRUC.INC CASVAR.INC MACROS.INC \
205 MACROS2.INC MACROS3.INC MACROS4.INC MACROS5.INC MACROS6.INC \
206 MACROS7.INC SELECT.MAK
207 ASM87 SERVICES -b1
208
209GET_HELP.OBJ : GET_HELP.ASM SELECT.MAK
210 ASM87 GET_HELP -b1
211
212SELSERV.OBJ : SELSERV.ASM SELECT.MAK
213 ASM87 SELSERV -b1
214
215SERVICES.LIB : SELQUIT.OBJ SELCHILD.OBJ SERVICES.OBJ GET_HELP.OBJ SELSERV.OBJ \
216 SELECT.MAK
217 LIB SERVICES.LIB -+ SELQUIT;
218 LIB SERVICES.LIB -+ SELCHILD;
219 LIB SERVICES.LIB -+ SERVICES;
220 LIB SERVICES.LIB -+ GET_HELP;
221 LIB SERVICES.LIB -+ SELSERV;
222
223SELECT.EXE: SELECT0.OBJ SELECT1.OBJ SELECT2.OBJ SELECT2A.OBJ SELECT3.OBJ \
224 SELECT4.OBJ SELECT5.OBJ SELECT6.OBJ SELECT7.OBJ SELECT8.OBJ SELECT9.OBJ \
225 ROUTINE2.OBJ GEN_COMS.OBJ ROUTINES.OBJ INTVEC.OBJ ONEDRIVE.OBJ \
226 CKDISP.OBJ SCN_PARM.OBJ PRN_DEF.OBJ VAR.OBJ CASERVIC.OBJ INPUT.OBJ \
227 INITMEM.OBJ MPARSE.OBJ MOD_COPY.OBJ S_DISPLY.OBJ BRIDGE.OBJ \
228 ASM2C.OBJ GET_STAT.OBJ GLOBAL.OBJ INT13.OBJ BOOTREC.OBJ \
229 SERVICES.LIB CASSTMP.LIB SLIBFP.LIB $(COM)\SETVER.BAT
230 LINK @SELECT.ARF
231 TAG SELECT.EXE
232
233#
234# Make SELECT.COM
235#
236
237SSTUB.OBJ: SSTUB.ASM $(COM)\SYSMSG.INC SELECT.CTL SELECT.MAK
238 ASM87 SSTUB -b1
239
240SELECT.COM: SSTUB.OBJ
241 LINK SSTUB;
242 EXE2BIN SSTUB.EXE SELECT.COM
243 TAG SELECT.COM
244
245#
246# Make SELECT.DAT
247#
248
249DUMMY.OUT: SELECT.MAK
250 COPY $(COUNTRY).INF+,, PANEL.INF
251
252PANELS.OBJ: PANELS.ASM SEL-PAN.INC PAN-LIST.INC PANEL.INF SELECT.MAK
253 ASM87 PANELS -a-b1
254
255COLORS.OBJ: COLORS.ASM SEL-PAN.INC SELECT.MAK
256 ASM87 COLORS -a-b1
257
258SCROLL.OBJ: SCROLL.ASM SEL-PAN.INC PANEL.INF SELECT.MAK
259 ASM87 SCROLL -a-b1
260
261SEL-PAN.OBJ: SEL-PAN.ASM CASVAR.INC SEL-PAN.INC SELECT.MAK
262 ASM87 SEL-PAN -a-b1
263
264SEL-PAN.EXE: PANELS.OBJ COLORS.OBJ SCROLL.OBJ SEL-PAN.OBJ
265 LINK @PANELS.ARF
266 ERASE SELECT.DAT
267 SEL-PAN
268
269#
270# Make ASC2HLP.EXE
271#
272
273DUMMY.OUT: SELECT.MAK
274 CD ..\SHELLHLP
275 MAKE SHELLHLP.MAK
276 CD ..\SELECT
277#
278# Make SELECT.HLP
279#
280
281SELECT.HLP: $(COUNTRY).TXT SELECT.MAK
282 ERASE SELECT.HLP
283 chmode +r usa.txt
284 ..\SHELLHLP\ASC2HLP $(COUNTRY).TXT SELECT.HLP
285 chmode +r usa.txt
286
287 \ 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 @@
122
2P IBM 5152 Graphics Printer Model 2
3GP GRAPHICS
4
5P IBM 4201 Proprinter
6CDP 4201,437
7CPP 4201.CPI
8GP GRAPHICS
9
10P IBM 4201 Proprinter II
11CDP 4201,437
12CPP 4201.CPI
13GP GRAPHICS
14
15P IBM 4202 Proprinter XL
16CDP 4201,437
17CPP 4201.CPI
18GP GRAPHICS
19
20P IBM 4207 Proprinter X24
21CDP 4208,437
22CPP 4208.CPI
23GP GRAPHICS
24
25P IBM 4208 Proprinter XL24
26CDP 4208,437
27CPP 4208.CPI
28GP GRAPHICS
29
30S IBM 4201 Proprinter (Serial)
31SP BAUD=96 PARITY=E DATA=8 STOP=1
32GP GRAPHICS
33
34S IBM 4202 Proprinter XL (Serial)
35SP BAUD=96 PARITY=E DATA=8 STOP=1
36GP GRAPHICS
37
38S IBM 4207 Proprinter X24 (Serial)
39SP BAUD=96 PARITY=E DATA=8 STOP=1
40GP GRAPHICS
41
42S IBM 4208 Proprinter XL24 (Serial)
43SP BAUD=96 PARITY=E DATA=8 STOP=1
44GP GRAPHICS
45
46P IBM 5182 Color Printer
47GP COLOR1
48
49P IBM 3852 Ink Jet Printer
50
51P IBM 5201 Quietwriter I Printer
52
53P IBM 5201 Quietwriter II Printer
54GP GRAPHICS
55
56P IBM 5202 Quietwriter III Printer
57CDP 5202,437
58CPP 5202.CPI
59GP GRAPHICS
60
61P IBM 5216 Wheelprinter
62
63P IBM 5223 Wheelprinter E Model 1
64
65S IBM 3812 Pageprinter
66SP BAUD=96 PARITY=E DATA=8 STOP=1 RETRY=P
67GP GRAPHICS
68
69P Other IBM Parallel Printer
70
71S Other IBM Serial Printer
72
73P Other Parallel Printer
74
75S 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 @@
1:util select ;AN000;
2 ;AN000;
3:class A ;AN000;
4:use 1 COMMON1 ;AN000;
5:use 2 common2 ;AN000;
6:use 3 common3 ;AN000;
7:def 4 BELL,'Invalid SELECT Boot Media',CR,LF,CR,LF ;AN000;
8 'Insert INSTALL diskette in drive A, then retry' ;AN000;
9:def 5 BELL,'Invalid Disk/Diskette Media',CR,LF,CR,LF ;AN000;
10 'Insert INSTALL diskette in drive A, then retry' ;AN000;
11:def 6 BELL,'Invalid Parameters on SELECT Command Line',CR,LF,CR,LF ;AN000;
12 'Make sure the INSTALL diskette is in drive A,',CR,LF ;AN000;
13 'then press Ctrl+Alt+Del to restart.' ;AN000;
14:def 7 BELL,'Unable to install DOS. Program terminated',CR,LF ;AN000;
15:def 8 'Loading SELECT. Please wait...' ;AN000;
16:def 9 'You must restart your computer to continue.',CR,LF,CR,LF ;AN000;
17 'Press Ctrl+Alt+Del to continue with DOS installation.' ;AN000;
18:class B ;AN000;
19:def 10 'Insert SELECT diskette in drive A',CR,LF,CR,LF ;AN000;
20 'Press ENTER to continue installing DOS,',CR,LF ;AN000;
21 'or press ESC to exit.',CR,LF ;AN000;
22:def 11 BELL ;AN000;
23:def 12 'Insert SELECT diskette in drive A',CR,LF,CR,LF ;AN000;
24 'Press ENTER to continue.',CR,LF ;AN000;
25:def 13 'Remove the SELECT COPY Diskette from drive A',CR,LF,CR,LF ;AC080;SEH ;AN000;
26 'Insert the INSTALL Diskette in drive A',CR,LF,CR,LF,CR,LF ;AN000;
27 'Press Enter to continue.',CR,LF ;AN000;
28:def 14 'Remove the INSTALL Diskette from drive A',CR,LF,CR,LF ;AN000;
29 'Insert the SELECT COPY Diskette in drive A',CR,LF,CR,LF,CR,LF ;AC080;SEH ;AN000;
30 'Press Enter to continue.',CR,LF ;AN000;
31:def 15 'Copying diskette . . .',CR,LF ;AN000;
32:def 16 'Drive not ready. Please close the',CR,LF,CR,LF ;AN000;
33 'diskette drive door and press Enter',CR,LF ;AN000;
34 'to continue, or Esc to exit SELECT.',CR,LF ;AN000;
35:def 17 'Write protect diskette in drive.',CR,LF,CR,LF ;AN000;
36 'Please remove protect tab and',CR,LF ;AN000;
37 'press ENTER to continue, or Esc to exit SELECT.',CR,LF ;AN000;
38:def 18 'An error occurred while installing DOS.',CR,LF ;AN000;
39 'Press Enter to continue, or Esc to exit SELECT.',CR,LF ;AN000;
40:def 19 'Insert the INSTALL Diskette in drive A',CR,LF,CR,LF ;AN000;
41 'Press Enter to continue.',CR,LF ;AN000;
42:use 20 EXTEND8 ;AN067;SEH insufficient memory
43: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 @@
1
2
3PAGE 60,132 ;AN000;
4NAME SELECT ;AN000;
5TITLE SELECT0 - DOS - SELECT.EXE ;AN000;
6SUBTTL select0.asm ;AN000;
7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8;
9; SELECT0.ASM : Copyright 1988 Microsoft
10;
11; DATE: July 4/87
12;
13; COMMENTS: Assemble with MASM 3.0 (using the /A option)
14;
15; Panel flow is defined in the following files:
16;
17; � SELECT1.ASM
18; � SELECT2.ASM
19; � SELECT3.ASM
20; � SELECT4.ASM
21; � SELECT5.ASM
22; � SELECT6.ASM
23;
24; CHANGE HISTORY:
25;
26; This module contains the change history for the entire SELECT
27; component as of 1/25/88. Some changes before this date are
28; listed in the individual modules.
29;
30; A000 - 1/25/88, designates original 4.00 level source.
31; A001-A009, All changes made prior to 1/25/88, these descriptions
32; exist in the individual modules which were Revised.
33; A111 - D353, 12/28/87, added support for A: to A: installation on
34; systems with only one diskette drive. J.W.
35; A010 - D407, 1/25/88, changed install to one directory to not
36; copy over system files. J.W.
37; A011 - P3231, 1/26/88, add 'PRINT /D:LPTx' or 'PRINT /D:COMx' to
38; autoexec.bat file for balanced and max. DOS function. S. H.
39; A012 - P3238, 1/27/88, add /DATE as default shell invocation switch.
40; S. H.
41; A013 - P3239, 1/27/88, changed text of prompt setting in DOSSHELL.BAT
42; file. J.W.
43; A014 - P3275, 1/29/87, added check for minimum DOS function. S. H.
44; A015 - P3310, 2/1/88, Removed PRINT invocation from diskette based
45; system. J.W.
46; A016 - D445, 2/4/88, removed /REF from DOSSHELL.BAT file. S. H.
47; A017 - P3339, 2/4/88, Added check for read-only .BAT and .340 files,
48; J.W.
49; A018 - D418, 2/4/88, removed the default /TEXT option on a model 25
50; or 30. S. H.
51; A019 - D443, 2/4/88, changed 'SHELL.BAT' to DOSSHELL.BAT'. S. H.
52; A020 - D438, 2/5/88, removed EXT_DISKETTE_SCREEN and EXT_DISK_PARMS_SCREEN
53; and other code related to supporting external diskette drives.
54; S. H.
55; A021 - D442, 2/8/88, Added selection of SHARE when >32M partition
56; exists. J.W.
57; A022 - P3403, 2/8/88, edited Welcome Screen to inform PS/2 users they
58; can use 1 or 2 MB 3.5" blank diskette. S. H.
59; A023 - P3292, 2/8/88, implemented error level check on FDISK to detect
60; a disk with no primary DOS partition defined. J.W.
61; A024 - D463, 2/9/88, changed method for reading and writing the
62; SELECT.DAT file. File can now be compressed. Eliminated
63; the large and slow CAS routines. J.W./D.T.
64; A025 - P3460, 2/10/88, Changed printer panel number and panel list
65; to remove unused panels. J.W.
66; A026 - P3450, 2/11/88, added color change to unselected fields on
67; the DOS location panel. J.W.
68; A027 - P3459, 2/15/88, set the carry flag in HANDLE_F3 in order to
69; eliminate an endless loop in GET_FUNCTION_CALL. S. H.
70; A028 - P3592, 2/22/88, Add text to direct users to Getting Started With
71; DOS 4.00 book. J.W.
72; A029 - P3529, 2/17/88, Corrected GRAPHICS parameter initialization
73; problem. J.W.
74; A030 - P3527, 2/17/88, Changed incorrect diskette error panel to be
75; more descriptive. J.W.
76; A031 - P3546, 2/17/88, changed code to allow a semi-colon as the last
77; character entered in DOS or APPEND PATH. S. H.
78; A032 - P3576, 2/22/88, changed code to flash message on screen if
79; user does not put SELECT diskette in to start SELECT (360KB
80; diskettes only). S. H.
81; A033 - P3620, 2/24/88, saved the value in I_DESTINATION so that it
82; is not wiped out upon reboot. S. H.
83; A034 - P3618, 2/25/88, changed code so that user does not have to reboot
84; if he makes no changes to the partition. S. H.
85; A035 - P3654, 2/29/88, updated help texts #18 and #19 received from I.D.
86; S. H.
87; A036 - P3666, 3/1/88, added GRAPHICS to the SELECT.PRT file for
88; Quietwriter II and Pageprinter.
89; A037 - P3672, 3/1/88, removed /MSG from SHELL= statement in CONFIG.SYS
90; for installs to hard disk (for purposes of code reduction in
91; COMMAND.COM).
92; A038 - P3700, 3/2/88, changed second scroll option on DOS Location
93; Screen to let user know system files not copied.
94; A039 - D496, 3/3/88, added a dummy file for the user of the SHELL
95; tutorial to copy and delete.
96; A040 - P3741, 3/4/88, changed D_XMA2EMS_1 values.
97; A041 - P3747, 3/4/88, changed initialization values for D_BUFFERS_2
98; and D_FASTOPEN_2 (max. DOS utilization)
99; A042 - P3737, 3/9/88, changed FDISK.EXE to FDISK.COM.
100; A043 - P3813, 3/10/88, moved the COMSPEC statement in the AUTOEXEC.BAT
101; after the @ECHO OFF statement.
102; A044 - P3852, 3/14/88, changed D_XMA2EMS_1 values again.
103; A045 - D503, 3/15/88, changed MAJOR_DOS_VER to 4 and MINOR_DOS_VER to
104; 00 for DOS 4.00 build. Everything visible to user still says
105; DOS 4.00.
106; A046 - D474, 3/16/88, changed the /E parameter for buffers to /X.
107;
108; A047 - P3924, 3/17/88, SELECT now includes VERSIONA.INC for the DOS
109; version check---check formerly made in MAC_EQU.INC.
110; A048 - P3857, 3/18/88, changed code for 360KB install to hardfile on
111; 256KB machine to deallocate memory before COMMAND.COM is
112; read in.
113; A049 - P4017, 3/25/88, changed capital "W" to a small "w" in the
114; Getting Started with DOS 4.00 title in panels.
115; A050 - P4020, 3/25/88, removed quote marks and spaces between 1 MB
116; and 2 MB on Welcome Screen.
117; A051 - P3992, 3/26/88, edited code for DOS Location Screen so that
118; ESC (hit from any field) takes you back to previous screen.
119;
120; A052 - P4015, 3/28/88, stated diskette size user needs when installing
121; to a single 3.5 inch diskette.
122; A053 - D505, 3/28/88, redesigned the Dos Location screen.
123; A054 - P4006, 3/28/88, turned off blinking cursor on early SELECT
124; screens (enhanced color display used).
125; A055 - D508, 3/29/88, put SHARE.EXE on 720 Install diskette.
126; A056 - P4047, 3/29/88, revised installation complete panel for
127; 720 to 720 installation.
128; A057 - P3866, strengthened panel msg referring user to Getting Started
129; with DOS 4.00.
130; A058 - P3945, corrected code that creates install path when putting
131; DOSSHELL.BAT in the root.
132; A059 - P4056, 3/30/88, corrected input routines to flush buffer before
133; read.
134; A060 - P4008, 3/30/88, added error message for help access when install
135; disk not in drive.
136; A061 - P4000, 3/30/88, corrected problem with allowable return key
137; strings.
138; A062 - P4059, 3/30/88, added FORMAT.COM to SELECT and OPERATING
139; diskettes; moved IFSFUNC from OPERATING to INSTALL diskette.
140;
141; A063 - P3950, 4/1/88, added code to enable SELECT to install to a
142; 256KB 2-drive convertible.
143; A064 - D514, 4/6/88, revised two Installation Complete panels.
144;
145; A065 - D501, 4/6/88, added code to check for OS/2 and rename its
146; config.sys and autoexec.bat to config.os2 and autoexec.os2.
147;
148; A066 - P4179, D519, 4/6/88, moved the print statement to next to last
149; in the autoexec.bat file.
150; A067 - P4290, 4/13/88, output message to user if SELECT encounters
151; insufficient memory to install DOS.
152; A068 - P4325, 4/14/88, updated CASTRUC.INC to match G:\CASSFAR\PCSLCTP.
153;
154; A069 - P4364, 4/18/88, updated SELECT to match new PCINPUT file.
155; A070 - P4401, 4/19/88, changed Latin America's default code page to 850.
156;
157; A071 - P4428, 4/22/88, removed the /PRE parameter from the DOSSHELL.BAT.
158;
159; A072 - P3950, overlay PARSER and PCINPUT segments if on a 256KB machine.
160;
161; A073 - P4409, 5/2/88, corrected problem of SELECT using different default
162; drives on different machines---variable not assigned.
163; A074 - P4568, 5/2/88, disallow user to end SELECT by pressing CTRL-BREAK.
164; A075 - P4720, 5/6/88, changed "INSTALL COPY" diskette name to "SELECT
165; COPY".
166; A076 - P4718, 5/6/88, capitalized the sentence in the INSTALLATION
167; COMPLETE panels which points the user to the Getting Started
168; with DOS 4.00 book.
169; A077 - P4772, 5/6/88, added /PROMPT as default startup parameter for
170; DOS Shell for 256K machine.
171; A078 - P4782, 5/9/88, changed FASTOPEN defaults for maximum DOS
172; function to 150,150.
173; A079 - P4744, 5/10/88, made panel and scroll field change for Installation
174; Option screen.
175; A080 - P4832, 5/11/88, changed SELECT.SKL and USA.MSG to reflect the
176; change of "INSTALL COPY" to "SELECT COPY" diskette (see P4720).
177;
178; A081 - P4848, 5/12/88, spaced over the keys at the bottom of the help
179; panel to allow more room for translation; exported it on this
180; ptm to export help text changes.
181; A082 - P4916, 5/18/88, turned cursor off following FDISK reboot.
182;
183; A083 - P4917, 5/19/88, stopped typomatic effect of pressing enter key
184; too long during installation.
185; A084 - P4906, 5/19/88, corrected mode 40 machine installation hang.
186;
187; A085 - P4926, 5/19/88, homed the cursor before call to format so that
188; message stating % of diskette formatted is at top of screen.
189;
190; A086 - P4934, 5/20/88, changed the 16h value used for INT 2Fh when
191; checking for ANSI presence to 1Ah to avoid MICROSOFT collision.
192;
193; A087 - P4955, 5/23/88, adjusted the spacing between the ENTER and F1
194; keys on the bottom of panels 31 (Time and Date) and 32 (Format
195; Fixed Disk Drive) to give more room for translation.
196; A088 - P5064, 6/9/88, replaced a call to clear the input buffer in
197; PCINCHA_CALL (see A059).
198; A089 - P5048, 6/9/88, increased the value of MAX_NUM_PRINTER_DEFS to
199; allow more printers in the SELECT.PRT file.
200; A090 - P5127, 6/17/88, changed default index for alternate keyboards
201; to be second (old) keyboard. J. Wright
202; A091 - P5142, 6/30/88, reduced memory allocation for panels from 64KB
203; to 62KB to allow more room for foreign versions of SELECT to
204; run. S. Holahan
205; A092 - P5173, 7/15/88, added @BREAK=OFF" after :COMMON statement
206; in DOSSHELL.BAT file. S. Holahan
207;
208;
209;
210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
211CODE SEGMENT PARA PUBLIC 'CODE' ;AN000; Segment for CASS libraries
212CODE ENDS ;AN000;
213 ;
214CODE_FAR SEGMENT PARA PUBLIC 'CODE' ;AN000; Segment for miscellaneous routines
215CODE_FAR ENDS ;AN000;
216 ;
217_TEXT segment byte public 'CODE' ;AN000;
218_TEXT ends ;AN000;
219_DATA segment word public 'DATA' ;AN000;
220_DATA ends ;AN000;
221CONST segment word public 'CONST' ;AN000;
222CONST ends ;AN000;
223_BSS segment word public 'BSS' ;AN000;
224_BSS ends ;AN000;
225 ;
226 ;
227DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; Segment for Data values
228DATA ENDS ;AN000;
229 ;
230SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;
231SELECT ENDS ;AN000;
232
233SERVICE SEGMENT PARA PUBLIC 'SERVICE' ;AN000; Segment for CAS_SERVICE routines
234SERVICE ENDS ;AN000;
235 ;
236OUR_STACK SEGMENT BYTE STACK ;AN000; Segment for Local Stack
237 DB 512 DUP('IBM ') ;AN000;
238LAST_STACK EQU $ ;AN000;
239OUR_STACK ENDS ;AN000;
240 ;
241PARSER SEGMENT PARA PUBLIC 'PARSER' ;AN000; Segment for PARSE code
242PARSER ENDS ;AN000;
243
244PCINPUT SEGMENT PARA PUBLIC 'PCINPUT' ;AN072;
245PCINPUT ENDS ;AN072;
246 ;
247ZSEG SEGMENT PARA PUBLIC 'ZSEG' ;AN000; Dummy segment for End-of-Code
248ZSEG ENDS ;AN000;
249 ;
250AGROUP GROUP CODE,CODE_FAR,DATA,PARSER,SERVICE,SELECT,OUR_STACK,ZSEG ;AN000;
251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
252;
253;
254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
255.XLIST ;AN000;
256 INCLUDE PANEL.MAC ;AN000;
257 INCLUDE STRUC.INC ;AN000;
258 INCLUDE MACROS.INC ;AN000;
259 INCLUDE SYSMSG.INC ;AN000;
260 INCLUDE ROUT_EXT.INC ;AN000;
261 INCLUDE EXT.INC ;AN000;
262 INCLUDE PAN-LIST.INC ;AN000;
263.LIST ;AN000;
264 ;
265 EXTRN DEALLOCATE_MEMORY_CALL:FAR ;AN000;
266 EXTRN CHECK_VERSION:NEAR ;AN000;
267 ;
268 PUBLIC INSTALL ;AN000;
269 PUBLIC SYSDISPMSG ;AN000;
270 PUBLIC EXIT_SELECT ;AN000;
271 PUBLIC EXIT_SELECT2 ;AN000;
272 PUBLIC INITIALIZATION ;AN000;
273 PUBLIC ABORT_SELECT ;AN000;
274 ;
275 MSG_UTILNAME <SELECT> ;AN000;
276;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
277;
278;
279;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
280SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;
281 ASSUME CS:SELECT,DS:DATA,SS:our_STACK ;AN000;
282 ;
283OLD_STACK_SEG DW ? ;AN000;
284OLD_STACK_OFF DW ? ;AN000;
285 ;
286 INCLUDE CASEXTRN.INC ;AN000;
287 ;
288;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
289;
290; Beginning of code
291;
292;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
293INSTALL PROC FAR ;AN000;
294 CLI ;AN000;
295 MOV AX,SS ;AN000;
296 MOV OLD_STACK_SEG,AX ;AN000;
297 MOV OLD_STACK_OFF,SP ;AN000;
298 mov ax,our_stack ;AN000;
299 mov ss,ax ;AN000;
300 mov sp,512*4 ;AN000;
301 STI ;AN000;
302 ;
303 MOV AX,DATA ;AN000;
304 MOV DS,AX ;AN000;
305 JMP INITIALIZATION ;AN000;
306;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
307;
308; CODE TO LEAVE SELECT WITH!!!!
309;
310;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
311EXIT_SELECT: ;AN000;
312 ;
313 FIND_FILE S_AUTO_REBOOT, 0 ;AN000;DT Make sure INSTALL disk in drive
314 .IF < c > ;AN000;DT
315 .REPEAT ;AN000;DT make sure diskette
316 CLEAR_SCREEN ;AN000;DT with COMMAND.COM in drive
317 DISPLAY_MESSAGE 19 ;AN000;DT Insert INSTALL diskette
318 GET_FUNCTION FK_ENT ;AN000;DT
319 FIND_FILE S_AUTO_REBOOT, 0 ;AN000;DT
320 .LEAVE < nc > ;AN000;DT
321 HANDLE_ERROR ERR_DOS_DISK, 2 ;AN000;DT
322 .UNTIL ;AN000;DT
323 CLEAR_SCREEN2 ;AN000;JW
324 .ENDIF ;AN000;
325 ;
326EXIT_SELECT2: ;AN000;
327 ;
328 DEALLOCATE_MEMORY ;AN000;free up allocated segment
329 .IF < NC > ;AN000;
330 CALL RESTORE_INT_23 ;AN074;SEH restore ctrl-break before exiting
331 MOV AX,OLD_STACK_SEG ;AN000;
332 MOV SS,AX ;AN000;
333 MOV SP,OLD_STACK_OFF ;AN000;
334 CALL CURSORON ;AN000;
335 MOV AX,4C00H ;AN000;
336 INT 21H ;AN000;
337 .ELSE ;AN000;
338ABORT_SELECT: ;AN000;exit without handling allocated memory
339 CALL RESTORE_INT_23 ;AN074;SEH restore ctrl-break before exiting
340 MOV AX,OLD_STACK_SEG ;AN000;
341 MOV SS,AX ;AN000;
342 MOV SP,OLD_STACK_OFF ;AN000;
343 CALL CURSORON ;AN000;
344 MOV AX,4C00H ;AN000;
345 INT 21H ;AN000;
346 .ENDIF ;AN000;
347INSTALL ENDP ;AN000;
348;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
349;
350; Message Retriever code inserted at this point....
351;
352;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
353 MSG_SERVICES <NOVERCHECKmsg, FARmsg, GETmsg, DISPLAYmsg, LOADmsg> ;AN000;
354 MSG_SERVICES <SELECT.CLA,SELECT.CLB> ;AN000;
355 MSG_SERVICES <SELECT.CL1,SELECT.CL2> ;AN000;
356;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
357;
358; Start of SELECT.EXE code
359;
360;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
361INITIALIZATION: ;AN000;
362 LOAD_MESSAGES ;AN000;
363 JMP CHECK_VERSION ;AN000;
364;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
365
366
367SELECT ENDS ;AN000;
368
369include msgdcl.inc
370
371 END INSTALL ;AN000;
372
diff --git a/v4.0/src/SELECT/SELECT1.ASM b/v4.0/src/SELECT/SELECT1.ASM
new file mode 100644
index 0000000..3770fd7
--- /dev/null
+++ b/v4.0/src/SELECT/SELECT1.ASM
@@ -0,0 +1,447 @@
1
2
3PAGE 60,132 ;AN000;
4NAME SELECT ;AN000;
5TITLE SELECT1 - DOS - SELECT.EXE ;AN000;
6SUBTTL select1.asm ;AN000;
7.ALPHA ;AN000;
8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9;
10; SELECT1.ASM : Copyright 1988 Microsoft
11;
12; DATE: July 4/87
13;
14; COMMENTS: Assemble with MASM 3.0 (using the /A option)
15;
16; Panel flow is defined in the following files:
17;
18; SELECT1.ASM
19; SELECT2.ASM
20; SELECT3.ASM
21; SELECT4.ASM
22; SELECT5.ASM
23; SELECT6.ASM
24;
25; CHANGE HISTORY:
26;
27; ;AN001;JW - P2452 Check for user switching disk before asked to
28;
29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
30_TEXT segment byte public 'CODE' ;AN000;
31 extrn gget_status:far ;AN000;
32_TEXT ends ;AN000;
33_DATA segment word public 'DATA' ;AN000;
34_DATA ends ;AN000;
35CONST segment word public 'CONST' ;AN000;
36CONST ends ;AN000;
37_BSS segment word public 'BSS' ;AN000;
38_BSS ends ;AN000;
39 ;
40DGROUP GROUP CONST,_BSS,_DATA ;AN000;
41 ;
42DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; Segment for Data values
43DATA ENDS ;AN000;
44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
45;
46;
47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
48.XLIST ;AN000;
49 INCLUDE PANEL.MAC ;AN000;
50 INCLUDE SELECT.INC ;AN000;
51 INCLUDE CASTRUC.INC ;AN000;
52 INCLUDE STRUC.INC ;AN000;
53 INCLUDE MACROS.INC ;AN000;
54 INCLUDE EXT.INC ;AN000;
55 INCLUDE VARSTRUC.INC ;AN000;
56 INCLUDE ROUT_EXT.INC ;AN000;
57 INCLUDE PAN-LIST.INC ;AN000;
58.LIST ;AN000;
59 ;
60 EXTRN PM_BASECHAR:BYTE ;AN000;
61 EXTRN PM_BASEATTR:BYTE ;AN000;
62 EXTRN CRD_CCBVECOFF:WORD ;AN000;
63 EXTRN CRD_CCBVECSEG:WORD ;AN000;
64 ;
65 EXTRN ALLOCATE_MEMORY_CALL:FAR ;AN000;
66 EXTRN DEALLOCATE_MEMORY_CALL:FAR ;AN000;
67 EXTRN VIDEO_CHECK:FAR ;AN000;
68 EXTRN EXIT_SELECT:NEAR ;AN000;
69 EXTRN EXIT_SELECT2:NEAR ;AN000;JW
70 EXTRN ABORT_SELECT:NEAR ;AN000;
71 EXTRN HANDLE_F3:NEAR ;AN001;GHG
72 ;
73 PUBLIC CHECK_VERSION ;AN000;
74 PUBLIC INTRO_SCREEN ;AN000;
75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
76;
77;
78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
79SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;
80 ASSUME CS:SELECT,DS:DATA ;AN000;
81 ;
82 PUBLIC BCHAR ;AN000;
83 DB 'BCHAR=' ;AN000;
84BCHAR DB ' ' ;AN000;
85 ;
86 INCLUDE CASEXTRN.INC ;AN000;
87 ;
88 EXTRN EXIT_DOS:NEAR ;AN000;
89 EXTRN EXIT_DOS_CONT:NEAR ;AN000;
90 EXTRN PROCESS_ESC_F3:NEAR ;AN000;
91 EXTRN WORKSPACE_SCREEN:NEAR ;AN000;
92 EXTRN DATE_TIME_SCREEN:NEAR ;AN000;
93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
94;
95; Beginning of code
96;
97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
98CHECK_VERSION: ;AN000;
99 INIT_VAR N_HOUSE_CLEAN,E_CLEAN_NO ;AN000; no files to be erased on exit
100 ;
101 CHECK_DOS_VERSION ;AN000; check DOS version
102 ;;;check for DOS version 4.00 ;
103 .IF c ;AN000; if incorrect DOS version
104 DISPLAY_MESSAGE 1 ;AN000;
105 GOTO EXIT_DOS_CONT ;AN000;
106 .ENDIF ;AN000; EXIT
107 ;
108 CHECK_DEFAULT_DRIVE ;AN000; check if default drive is A:
109 ;;;check if default drive is A: ;
110 .IF c ;AN000; if default drive not A:
111 DISPLAY_MESSAGE 4 ;AN000;
112 GOTO EXIT_DOS_CONT ;AN000;
113 .ENDIF ;AN000; EXIT
114 ;
115 CHECK_DISKETTE N_DISKETTE_A,N_DISKETTE_B,N_DISKETTE_TOT,P_STR120_1 ;AN000;
116 ;;;get diskette media type and no of drives ;
117 ;;;N_DISKETTE_A & B - media type 360k,720k, etc ;
118 ;;;N_DISKETTE_TOT - number of drives ;
119 ;
120 CHECK_DISK E_DISK_1,N_DISK_1,N_DISK_1_S1,N_DISK_1_S2,DISK_1_TABLE ;AN000;
121 ;;;get partition status for 1st fixed disk ;
122 ;;;N_DISK_1 - disk status ;
123 ;;;N_DISK_1_S1 - detailed disk status word 1 ;
124 ;;;N_DISK_1_S2 - detailed disk status word 2 ;
125 ;;;DISK_1_TABLE - status of all partitions ;
126 ;
127 CHECK_DISK E_DISK_2,N_DISK_2,N_DISK_2_S1,N_DISK_2_S2,DISK_2_TABLE ;AN000;
128 ;;;get partition status for 2nd fixed disk ;
129 ;;;N_DISK_2 - disk status ;
130 ;;;N_DISK_2_S1 - detailed disk status byte 1 ;
131 ;;;N_DISK_2_S2 - detailed disk status byte 2 ;
132 ;;;DISK_2_TABLE - status of all partitions ;
133 ;
134 CHECK_VALID_MEDIA N_DISKETTE_A,N_DISKETTE_B,N_DISKETTE_TOT,N_DISK_1,N_DEST_DRIVE,I_DEST_DRIVE,N_DRIVE_OPTION ;AN000;JW
135 ;;;check if disk/diskette combination is valid ;
136 ;;;also determine default install drive ;
137 ;;;N_DEST_DRIVE - default/user drive choice ;
138 ;;;I_DEST_DRIVE - drive A: or B: or C: ; ;AN111;JW
139 ;;;N_DRIVE_OPTION - which drive options are avail ;AN111;JW
140 .IF c ;AN000;
141 DISPLAY_MESSAGE 5 ;AN000;
142 GOTO EXIT_DOS_CONT ;AN000;
143 .ENDIF ;AN000;
144 ;
145 GET_INSTALLED_MEM MEM_SIZE ;AN000;
146 ;
147 CHECK_MACHINE MACHINE_TYPE, PS2_FLAG ;AN000;JW
148 ;
149 SCAN_PARAMETERS N_SELECT_MODE ;AN000;
150 ;;;scan command line ;
151 ;;;N_SELECT_MODE - MENU or FDISK ;
152 .IF < N_SELECT_MODE EQ E_SELECT_INV > ;AN000;JW
153 DISPLAY_MESSAGE 6 ;AN000;JW
154 GOTO EXIT_SELECT2 ;AN000;JW
155 .ENDIF ;AN000;JW
156 ;
157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
158;
159; If this is reboot after FDISK, load parameters in SELECT.TMP
160;
161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
162 .IF < N_SELECT_MODE eq E_SELECT_FDISK > and ;AN000;JW
163 .IF < N_DISKETTE_A ne E_DISKETTE_360 > ;AN000;
164 CALL SCAN_INFO_CALL ;AN000;
165 .ENDIF ;AN000;
166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
167 CHECK_DISPLAY ;AN000; determine display type
168 .IF < ACTIVE eq EGA > or ;AN000;
169 .IF < ALTERNATE eq EGA > or ;AN000;
170 .IF < ACTIVE eq LCD > or ;AN000;
171 .IF < ALTERNATE eq LCD > ;AN000;
172 INIT_VAR N_DISPLAY, E_CPSW_DISP ;AN000;
173 .ELSE ;AN000;
174 INIT_VAR N_DISPLAY, E_NOCPSW_DISP ;AN000;
175 .ENDIF ;AN000;
176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
177;
178; Read in SELECT.DAT data (all but the help)
179;
180; This will read in the panels, the scroll fields,
181; the color index (COLOR or MONO), and (EVENTUALLY)
182; the input fields.
183;
184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
185 SET_DISPLAY_MODE ;AC084; SEH call moved before video information requested ;AN000; set display to 80 col and 25 lines
186 CALL PCGVIDO_CALL ;AN000;get video information
187 ALLOCATE_MEMORY ;AN000;allocate enough memory for SELECT.DAT
188 .IF < NC > ;AN000;
189 CALL INITIALIZE ;AN000;read all panels, color, scroll
190 .IF < NC > ;AN000;check if error condition occurred
191 INITIALIZE_BCHAR BCHAR ;AN000;Initialize the background character
192 JMP MEMORY_ALLOCATED ;AN000;
193 .ELSE ;AN000;
194 JMP EXIT_SELECT ;AN000;terminate SELECT without affecting memory
195 .ENDIF ;AN000;
196 .ELSE ;AN000;
197 DISPLAY_MESSAGE 20 ;AN067;SEH insufficient memory
198 JMP ABORT_SELECT ;AN000;
199 .ENDIF ;AN000;
200MEMORY_ALLOCATED: ;AN000;
201 ;;; CALL CURSOROFF ;AN000;deactive cursor
202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
203;
204; Commence the heart of the SELECT installation routine.
205; At the initial portion of the code, a system hardware
206; check out is performed. The peripherals are established,
207; the display type is determined, and checks are made against
208; disk media installed.
209;
210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
211 ;;; CALL CURSOROFF ;AN000;
212 ;
213 .IF < ACTIVE eq EGA > ;AN000; if active display = EGA
214 COPY_STRING S_STR120_1,M_STR120_1,S_PREP_EGA;AN000; set parameter for EGA.CPI
215 .ELSEIF < ACTIVE eq LCD > ;AN000; elseif active display = LCD
216 COPY_STRING S_STR120_1,M_STR120_1,S_PREP_LCD;AN000; set parameter for LCD.CPI
217 .ELSE ;AN000; else
218 INIT_VAR S_STR120_1, 0 ;AN000; set parameter = null
219 .ENDIF ;AN000;
220 ;
221 .IF < S_STR120_1 gt 0 > ;AN000; if parameter is not null
222 EXEC_PROGRAM S_MODE,S_STR120_1,PARM_BLOCK,EXEC_DIR ;AN000;GHG exec MODE CON CP PREP((850)...)
223 EXEC_PROGRAM S_MODE,S_CP_SEL,PARM_BLOCK,EXEC_DIR ;AN000;GHG execute MODE CON CP SEL=850
224 .ENDIF ;AN000;
225 ;
226 INIT_VAR F_PARTITION, E_PART_DEFAULT ;AN000;
227 INIT_VAR F_FORMAT, E_FORMAT_FAT ;AN000;
228 .IF < N_SELECT_MODE eq E_SELECT_FDISK > ;AN000;
229 INIT_VAR I_DEST_DRIVE, E_DEST_DRIVE_C ;AN000;
230 GOTO DATE_TIME_SCREEN ;AN000;
231 .ENDIF ;AN000;
232 ;
233 CHECK_EXPANDED_MEMORY N_XMA, N_MOD80 ;AN000; check if expanded memory is present
234 GET_NUMBER_PORTS N_PARALLEL, N_SERIAL ;AN000; get number of parallel/serial ports
235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
236;
237; Initialize pre-defined country and keyboard information
238;
239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
240 GET_DOS_COUNTRY P_STR120_1, N_COUNTRY ;AN000; get current DOS country
241 GET_COUNTRY_INDEX N_COUNTRY, N_CTY_LIST,I_COUNTRY ;AN000; get index into country table
242 GET_COUNTRY_DEFAULTS N_CTY_LIST, I_COUNTRY ;AN000; get default data for specified country
243 .IF < N_DISPLAY eq E_CPSW_DISP > ;AN000;
244 .IF < N_CPSW eq E_CPSW_NOT_VAL > ;AN000; if cpsw not valid
245 INIT_VAR F_CPSW, E_CPSW_NA ;AN000; set cpsw = not available
246 .ELSEIF < N_CPSW eq E_CPSW_NOT_REC > ;AN000; else if cpsw not recommended
247 INIT_VAR F_CPSW, E_CPSW_NO ;AN000; set cpsw = no
248 .ELSE ;AN000; else
249 INIT_VAR F_CPSW, E_CPSW_YES ;AN000; set cpsw = yes
250 .ENDIF ;AN000;
251 .ELSE ;AN000;
252 INIT_VAR F_CPSW, E_CPSW_NA ;AN000;
253 .ENDIF ;AN000;
254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
255;
256; If country is SWISS:
257; then get keyboard from an input field
258;
259;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
260 COMPARE_STRINGS S_KEYBOARD,S_SWISS ;AN000;GHG is default KB=SF?
261 .IF <NC> ;AN000;GHG
262 RETURN_STRING STR_SWISS_KEYB,S_KEYBOARD,M_KEYBOARD+2;AN000;GHG
263 .ENDIF ;AN000;GHG
264;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
265;
266; Establish the default keyboard indice based on the
267; existing keyboard string.
268;
269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
270 GET_KEYBOARD_INDEX S_KEYBOARD,N_KYBD_LIST,I_KEYBOARD,N_KYBD_ALT;AN000; get kybd info
271 .IF < N_KYBD_ALT eq E_KYBD_ALT_YES > near ;AN000;
272 GET_ALT_KYBD_TABLE S_KEYBOARD,ALT_TAB_PTR,ALT_KYB_ID ;AN000; get ptr to alt kybd
273 COPY_BYTE ALT_KYB_ID_PREV, ALT_KYB_ID ;AN000; set prev id = current id
274 INIT_VAR I_KYBD_ALT, 2 ;AN090; set index into alt kybd list = 2
275 GET_ALT_KEYBOARD ALT_TAB_PTR,ALT_KYB_ID,I_KYBD_ALT,S_KYBD_ALT;AN000; get alt kybd id
276 .ELSE ;AN000;
277 INIT_VAR ALT_KYB_ID_PREV, 0 ;AN000; set prev alt kyb id = 0
278 .ENDIF ;AN000;
279 ;
280 INIT_VAR N_KYB_LOAD, E_KYB_LOAD_UND ;AN000; set KEYB loaded status = undefined
281;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
282;
283; Initialize installation variables to default values
284;
285;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
286 .IF < MEM_SIZE eq 256 > ;AN000;JW
287 INIT_VAR I_WORKSPACE, E_WORKSPACE_MIN ;AN000; set workspace option = minimum DOS JW
288 COPY_STRING S_FILES, M_FILES, D_FILES_2 ;AN000; set FILES = 20
289 .ELSE ;AN000;JW
290 INIT_VAR I_WORKSPACE, E_WORKSPACE_BAL ;AN000; set workspace option = balance DOS
291 COPY_STRING S_FILES, M_FILES, D_FILES_1 ;AN000; set FILES = 20
292 .ENDIF ;AN000;JW
293 INIT_VAR N_WORK_PREV, 0 ;AN000; set previous workspace option=undefined
294 COPY_STRING S_BREAK, M_BREAK, S_ON ;AN000; set BREAK = ON
295 COPY_STRING S_CPSW, M_CPSW, S_OFF ;AN000; set CPSW = OFF
296 COPY_STRING S_LASTDRIVE,M_LASTDRIVE,D_LASTDRIVE_1 ;AN000; set LASTDRIVE = E
297 INIT_VAR S_STACKS, 0 ;AN000; set STACKS = null (spaces)
298 COPY_STRING S_VERIFY, M_VERIFY, S_OFF ;AN000; set VERIFY = OFF
299 COPY_STRING S_PROMPT, M_PROMPT, D_PROMPT_1 ;AN000; set PROMPT = $P$G
300 COPY_STRING S_DOS_LOC,M_DOS_LOC,D_DOS_LOC_1 ;AN000; set DOS location = DOS
301 INIT_VAR S_INSTALL_PATH, 0 ;AN000; set install path = null
302 INIT_VAR F_SHELL,E_SHELL_NO ;AN000; set SHELL = no
303 .IF < MEM_SIZE eq 256 > ;AN000;DT
304 COPY_STRING S_SHELL, M_SHELL, D_SHELL_1 ;AN000; set SHELL parameter = /R
305 .ELSE ;AN000;
306 COPY_STRING S_SHELL, M_SHELL, D_SHELL_2 ;AN000; set SHELL parameter = /R
307 .ENDIF ;AN000;DT
308;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
309;
310;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
311 INIT_VAR F_SHARE, E_SHARE_NO ;AN000; set SHARE = no
312 INIT_VAR S_SHARE, 0 ;AN000; set SHARE parameter = null
313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
314;
315; Continue initialization ...
316;
317;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
318 INIT_VAR F_VDISK, E_VDISK_NO ;AN000; set VDISK = no
319 INIT_VAR S_VDISK, 0 ;AN000; set VDISK field = null (spaces)
320 .IF < N_XMA eq E_XMA_PRESENT > ;AN000; if expanded memory present
321 INIT_VAR F_XMA, E_XMA_NO ;AN000; set XMA = no (default)
322 INIT_VAR S_XMAEM, 0 ;AN000; set XMAEM field=null (spaces)
323 COPY_STRING S_XMA2EMS,M_XMA2EMS,D_XMA2EMS_1 ;AN000; & XMA2EMS field=FRAME=(D000,C800,CC00)
324 .ELSE ;AN000; else
325 INIT_VAR F_XMA, E_XMA_NA ;AN000; set XMA = no
326 .ENDIF ;AN000;
327 INIT_VAR F_REVIEW, E_REVIEW_ACCEPT ;AN000; set review option = accept selection
328 INIT_VAR I_CTY_KYBD, E_CTY_KB_PREDEF ;AN000; set country support=pre-defined support
329 ;
330 .IF < ACTIVE eq CGA > or ;AN000; if CGA adaptor
331 .IF < ALTERNATE eq CGA > ;AN000;
332 INIT_VAR F_GRAFTABL, E_GRAFTABL_YES ;AN000; set GRAFTABL = yes
333 .ELSE ;AN000; else
334 INIT_VAR F_GRAFTABL, E_GRAFTABL_NA ;AN000; set GRAFTABL = not available
335 .ENDIF ;AN000;
336 ;
337 INIT_VAR N_NUMPRINT, MIN_NUMPRINT ;AN000; set number of printers = 0
338 INIT_VAR I_PRINTER, 1 ;AN000; set index into printer list = 1
339 INIT_VAR I_PORT, 1 ;AN000; set port number = 1
340 INIT_VAR I_REDIRECT, 1 ;AN000; set redirect port number = 1
341 ;
342 CALL HOOK_INT_23 ;AN074; SEH don't allow ctrl-break
343 CALL CURSOROFF ;AN054; SEH moved from earlier in code
344;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
345;
346; ������������������������������������Ŀ
347; �WELCOME_SCREEN �
348; � �
349; ��������������������������������������
350;
351; The WELCOME screen is always presented.
352; The screen does not have help, F3 function or input variables.
353; Valid keys are ENTER and ESC.
354; ESC key will return control to the DOS command line.
355; If installing from 360KB diskettes, must prompt for INSTALL diskette
356;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
357WELCOME_SCREEN: ;AN000;
358 ;
359 .IF < N_DISKETTE_A eq E_DISKETTE_360 > ;AN000;
360 INSERT_DISK SUB_REM_DOS_A, S_DOS_COM_360 ;AN000; Insert the INSTALL diskette
361 .ENDIF ;AN000;
362 ;
363WELCOME_SCREEN2: ;AN000;
364 INIT_PQUEUE PAN_WELCOME ;AN000; initialize queue
365 PREPARE_PANEL SUB_CONT_OPTION ;AN000; prepare continue or cancel
366 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
367 PREPARE_CHILDREN ;AN000; prepare child panels
368 DISPLAY_PANEL ;AN000; display WELCOME panel
369 ;
370 GET_FUNCTION FK_ENT_ESC_F3 ;AN000; get user entered function
371 .IF < N_USER_FUNC eq E_F3 > ;AN000;DT if user entered F3 key
372 GOTO EXIT_DOS ;AN000;DT
373 .ELSEIF < N_USER_FUNC eq E_ENTER > ;AN000; if user entered ENTER key
374 FIND_FILE S_PRINT_FILE, E_FILE_ATTR ;AN001; check to make sure they did not switch
375 .IF < c > ;AN000;JW
376 INSERT_DISK SUB_REM_DOS_A, S_PRINT_FILE ;AN000;JW
377 .ENDIF ;AN000;JW
378 GOTO INTRO_SCREEN ;AN000; go to next screen
379 .ELSE ;AN000; else
380 CALL HANDLE_F3 ;AN001;GHG exit to DOS command line
381 .IF < C > ;AN001;GHG
382 GOTO EXIT_DOS ;AN001;GHG
383 .ELSE ;AN001;GHG
384 GOTO WELCOME_SCREEN2 ;AN001;GHG
385 .ENDIF ;AN000;
386 .ENDIF ;AN000;
387;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
388;
389; ������������������������������������Ŀ
390; �INTRO_SCREEN �
391; � �
392; ��������������������������������������
393;
394; The INTRODUCTION screen is always presented.
395; The screen does not have help, F3 function or any variables.
396; Valid keys are ENTER and ESC.
397; ESC key will return control to the DOS command line.
398;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
399INTRO_SCREEN: ;AN000;
400 INIT_PQUEUE PAN_INTRO ;AN000; initialize queue
401 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
402 PREPARE_CHILDREN ;AN000; prepare child panels
403 DISPLAY_PANEL ;AN000; display INTRODUCTION panel
404 ;
405 GET_FUNCTION FK_ENT_ESC_F3 ;AN000; get user entered function
406 .IF < N_USER_FUNC eq E_F3 > ;AN027;SEH Added to prevent going to Welcome Screen
407 GOTO EXIT_DOS ;AN027;SEH when F3 hit
408 ; (ENTER or ESC)
409 .ELSEIF < N_USER_FUNC eq E_ENTER > ;AN000; if user entered ENTER key
410 GOTO WORKSPACE_SCREEN ;AN000; go to next screen
411 .ELSE ;AN000; else
412 GOTO WELCOME_SCREEN2 ;AN001;GHG; exit to DOS command line
413 .ENDIF ;AN000;
414;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
415;
416; ROUTINE TO SCAN SELECT.TMP FILE
417;
418; Broken down into a subroutine for code savings...
419;
420;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
421 PUBLIC SCAN_INFO_CALL ;AN000;
422SCAN_INFO_CALL PROC NEAR ;AN000;
423 SCAN_INFO_FILE F_SHELL, N_FORMAT_MODE,N_DISK1_MODE,I_DESTINATION,S_INSTALL_PATH,S_SELECT_TMP,P_STR120_1,M_STR120_1
424 ;;;F_SHELL - shell installation flag
425 ;;;N_FORMAT_MODE - partition & format option :
426 ;;; new(select),new(user),used(user) ;
427 ;;;N_DISK1_MODE - 1st disk status - new or used ;
428 ;;;I_DESTINATION - destination on c: disk option
429 ;;;S_INSTALL_PATH - DOS install path ;
430 ;;;S_SELECT_TMP - file for FDISK parameters ;
431 ;
432 .IF < N_SELECT_MODE eq E_SELECT_INV > ;AN000; if SELECT mode not MENU or FDISK
433 DISPLAY_MESSAGE 6 ;AN000;
434 GOTO EXIT_DOS_CONT ;AN000;
435 .ENDIF ;AN000; EXIT
436 ;
437 .IF < N_SELECT_MODE eq E_SELECT_FDISK > and ;AN000; if SELECT mode is FDISK
438 .IF < N_FORMAT_MODE eq E_SELECT_INV > or ;AN000; and format and disk status
439 .IF < N_DISK1_MODE eq E_SELECT_INV > ;AN000; not available from SELECT.TMP
440 DISPLAY_MESSAGE 6 ;AN000;
441 GOTO EXIT_DOS_CONT ;AN000;
442 .ENDIF ;AN000; EXIT
443 RET ;AN000;
444SCAN_INFO_CALL ENDP ;AN000;
445;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
446SELECT ENDS ;AN000;
447 END ;AN000;
diff --git a/v4.0/src/SELECT/SELECT2.ASM b/v4.0/src/SELECT/SELECT2.ASM
new file mode 100644
index 0000000..d6dc952
--- /dev/null
+++ b/v4.0/src/SELECT/SELECT2.ASM
@@ -0,0 +1,589 @@
1
2
3PAGE 55,132 ;AN000;
4NAME SELECT ;AN000;
5TITLE SELECT - DOS - SELECT.EXE ;AN000;
6SUBTTL SELECT2.asm ;AN000;
7.ALPHA ;AN000;
8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9;
10; SELECT2.ASM : Copyright 1988 Microsoft
11;
12; DATE: August 8/87
13;
14; COMMENTS: Assemble with MASM 3.0 (using the -A option)
15;
16; Panel flow is defined in the following files:
17;
18; � SELECT1.ASM
19; � SELECT2.ASM
20; � SELECT3.ASM
21; � SELECT4.ASM
22; � SELECT5.ASM
23; � SELECT6.ASM
24;
25;
26; Module contains code for :
27; - Program/Memory workspace screen
28; - Predefined country/keyboard screen
29; - Country screen
30; - Keyboard screen
31; - Alternate Keyboard screen
32; - Load the specified keyboard
33; - Install drive screen
34; - DOS location screen
35;
36; CHANGE HISTORY:
37;
38;
39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
40DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
41 EXTRN EXEC_ERR:BYTE ;
42DATA ENDS ;AN000;
43 ;
44.XLIST ;AN000;
45 INCLUDE PANEL.MAC ;AN000;
46 INCLUDE SELECT.INC ;AN000;
47 INCLUDE CASTRUC.INC ;AN000;
48 INCLUDE STRUC.INC ;AN000;
49 INCLUDE MACROS.INC ;AN000;
50 INCLUDE EXT.INC ;AN000;
51 INCLUDE VARSTRUC.INC ;AN000;
52 INCLUDE ROUT_EXT.INC ;AN000;
53 INCLUDE PAN-LIST.INC ;AN000;
54.LIST ;AN000;
55 ;
56 PUBLIC WORKSPACE_SCREEN ;AN000;
57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
58;
59;
60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
61SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;
62 ASSUME CS:SELECT,DS:DATA ;AN000;
63 ;
64 INCLUDE CASEXTRN.INC ;AN000;
65 ;
66 EXTRN EXIT_DOS:NEAR ;AN000;
67 EXTRN EXIT_SELECT:NEAR ;AN000;
68 EXTRN PROCESS_ESC_F3:NEAR ;AN000;
69 EXTRN INTRO_SCREEN:NEAR ;AN000;
70 EXTRN DOS_LOC_SCREEN:NEAR ;AN000;
71 EXTRN DEALLOCATE_MEMORY_CALL:FAR ;AN000;DT
72 EXTRN GET_OVERLAY:NEAR ;AN000;DT
73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
74;
75; ������������������������������������Ŀ
76; �WORKSPACE_SCREEN �
77; � �
78; ��������������������������������������
79;
80; The User Function and Memory Workspace Needs Screen is always presented.
81; The screen allows the user to define the memory requirements for
82; the install process. Default values for DOS commands will be assigned based
83; on user input.
84; Valid keys are ENTER, ESC, F1, cursor up/down and numeric 1 to 3.
85;
86; All values are re-initialized the second time round only if the new option
87; is different from the previously selected option.
88;
89; �����������������������������������������������������������������Ŀ
90; � � I_WORKSPACE=1 � I_WORKSPACE=2 � I_WORKSPACE=3 �
91; �����������������������������������������������������������������Ĵ
92; � P_BREAK � 'ON' � 'ON' � 'ON' �
93; � P_BUFFERS � ' ' � '20' � '50,4' �
94; � P_CPSW � 'OFF' � 'OFF' � 'OFF' �
95; � F_CPSW � no � no � no �
96; � P_FCBS � ' ' � ' ' � '20,8' �
97; � P_FILES � '8' � '20' � '20' �
98; � P_LASTDRIVE � 'E' � 'E' � 'E' �
99; � P_STACKS � ' ' � ' ' � ' ' �
100; � P_VERIFY � 'OFF' � 'OFF' � 'OFF' �
101; � P_PROMPT � '$P$G' � '$P$G' � '$P$G' �
102; � F_PROMPT � no � no � no �
103; � P_PATH � ' ' � ' ' � ' ' �
104; � F_PATH � no � no � no �
105; � P_APPEND � ' ' � ' ' � ' ' �
106; � F_APPEND � no � no � no �
107; � P_ANSI � ' ' � ' ' � '/X' �
108; � F_ANSI � no � yes � yes �
109; � P_FASTOPEN � ' ' � 'C:=(50,25)' � 'C:=(100,200)'�
110; � F_FASTOPEN � no � yes � yes �
111; � F_GRAFTABL � no � no � no �
112; � P_GRAPHICS � ' ' � ' ' � ' ' �
113; � F_GRAPHICS � no � yes � yes �
114; � P_SHARE � ' ' � ' ' � ' ' �
115; � F_SHARE � no � no � no �
116; � P_SHELL � '/R' � '/R' � '/R' �
117; � F_SHELL � yes � yes � yes �
118; � P_VDISK � ' ' � ' ' � ' ' �
119; � F_VDISK � no � no � no �
120; � P_XMAEM � ' ' � ' ' � ' ' �
121; � DOS_LOC � 'DOS' � 'DOS' � 'DOS' �
122; � F_XMA � yes � yes � yes �
123; � P_XMA2EMS � 'FRAME=D000 P254=C800 P255=CC00' for all options�
124; �������������������������������������������������������������������
125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
126WORKSPACE_SCREEN: ;AN000;
127 INIT_PQUEUE PAN_WORKSPACE ;AN000; initialize queue
128 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
129 PREPARE_CHILDREN ;AN000; prepare child panels
130 INIT_SCROLL SCR_DOS_SUPPORT,I_WORKSPACE ;AN000;
131 DISPLAY_PANEL ;AN000; display WORKSPACE panel
132 ;
133 GET_SCROLL SCR_DOS_SUPPORT,I_WORKSPACE,FK_SCROLL ;AN000; get user entered option
134 .IF < N_USER_FUNC eq E_F3 > ;AN027;SEH Added to prevent going to Intro Screen
135 GOTO EXIT_DOS ;AN027;SEH when F3 hit
136 .ELSEIF < N_USER_FUNC eq E_ENTER > near ;AN000; if user entered ENTER key
137 .THEN ;AN000;
138 PUSH_HEADING WORKSPACE_SCREEN ;AN000; save screen address on SELECT STACK
139 COMP_WORDS N_WORK_PREV, I_USER_INDEX ;AN000; compare previous and new options
140 .IF nz near ;AN000; if new option is different
141 .THEN ;AN000;
142 COPY_WORD I_WORKSPACE, I_USER_INDEX ;AN000; set current option = new option
143 COPY_WORD N_WORK_PREV, I_USER_INDEX ;AN000; set previous option = new option
144 ;
145 .SELECT ;AN000;
146 ;
147 .WHEN < I_WORKSPACE eq E_WORKSPACE_MIN > near ;AN000; option = minimize DOS functions
148 INIT_VAR_MINIMIZE ;AN000; initialize variables
149 ;
150 .WHEN < I_WORKSPACE eq E_WORKSPACE_BAL > near ;AN000; option = balance DOS functions
151 INIT_VAR_BALANCE ;AN000; initialize variables
152 ;
153 .OTHERWISE ;AN000; option = maximize DOS functions
154 INIT_VAR_MAXIMIZE ;AN000; initialize variables
155 ;
156 .ENDSELECT ;AN000;
157 ;
158 .ENDIF ;AN000;
159 GOTO CTY_KYBD_SCREEN ;AN000; goto the next screen (CTY-KYBD)
160 .ELSE ;AN000;
161 GOTO INTRO_SCREEN ;AN001;GHG; user entered ENTER or ESC, take action
162 .ENDIF ;AN000;
163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
164;
165; ������������������������������������Ŀ
166; �CTY_KYBD_SCREEN �
167; � �
168; ��������������������������������������
169;
170; The COUNTRY and KEYBOARD support screen is always presented.
171; The screen allows the user to choose the pre-defined country and
172; keyboard displayed or to select a country specific support.
173; When the screen is presented for the first time, the pre-defined
174; country is the country code in the CONFIG.SYS file obtained by a DOS call.
175; The pre-defined keyboard is the
176; default keyboard associated with the pre-defined country. If there is no
177; valid keyboard association, "None" is displayed. Subsequent presentation of
178; this screen will display the user selected support.
179; Two keyboards are associated with the Swiss country code; French and
180; German. The keyboard code to be used will be identified during translation
181; and will be saved in the form of a panel.
182; Valid keys are ENTER, ESC, F1, F3, cursor up/down, numeric 1 to 2.
183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
184CTY_KYBD_SCREEN: ;AN000;
185 COPY_WORD N_WORD_1, I_COUNTRY ;AN000; scroll list item = country index
186 .IF < N_CTY_LIST eq E_CTY_LIST_2 > ;AN000; if country list = 2
187 .THEN ;AN000;
188 ADD_WORD N_WORD_1, CTY_A_ITEMS ;AN000; add items in list 1
189 .ENDIF ;AN000;
190 ;
191 .IF < N_KYBD_ALT eq E_KYBD_ALT_NO > near ;AN000; if no alt kyb id
192 .THEN ;AN000;
193 COPY_WORD N_WORD_2, I_KEYBOARD ;AN000; scroll list item = keyboard index
194 .IF < N_KYBD_LIST eq E_KYBD_LIST_2 > ;AN000; if kybd list = 2
195 .THEN ;AN000;
196 ADD_WORD N_WORD_2, KYBD_A_ITEMS ;AN000; add items in list 1
197 .ENDIF ;AN000;
198 .ELSE ;AN000; else
199 ;
200 INIT_VAR N_WORD_2, KYBD_A_ITEMS ;AN000; scroll list item = items in list 1
201 ADD_WORD N_WORD_2, KYBD_B_ITEMS ;AN000; + items in list 2
202 ADD_WORD N_WORD_2, 1 ;AN000; + 1st item in French alt kybd
203 .IF < ALT_KYB_ID gt ALT_FRENCH > ;AN000; if alt kybd id > French
204 .THEN ;AN000;
205 ADD_WORD N_WORD_2, ALT_FR_ITEMS ;AN000; add items in French alt kybd to list
206 .ENDIF ;AN000;GHG
207 .IF < ALT_KYB_ID gt ALT_ITALIAN > ;AN000;GHG if alt kybd id > Italian
208 .THEN ;AN000;
209 ADD_WORD N_WORD_2, ALT_IT_ITEMS ;AN000; add items in Italian alt kybd to list
210 .ENDIF ;AN000;
211 ;
212 DEC N_WORD_2 ;AN090;GHG These two lines were moved inside the
213 ADD_WORD N_WORD_2, I_KYBD_ALT ;AN090;GHG ELSE clause.
214 ;
215 .ENDIF ;AN000;
216 ;
217 ;
218 INIT_PQUEUE PAN_CTY_KYB ;AN000; initialize queue
219 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
220 PREPARE_CHILDREN ;AN000; prepare child panels
221 INIT_SCROLL SCR_ACC_CTY, N_WORD_1 ;AN000; display current country
222 INIT_SCROLL SCR_ACC_KYB, N_WORD_2 ;AN000; display current keyboard
223 INIT_SCROLL SCR_CTY_KYB, I_CTY_KYBD ;AN000;
224 DISPLAY_PANEL ;AN000; display screen
225 ;
226 GET_SCROLL SCR_CTY_KYB,I_CTY_KYBD,FK_SCROLL;AN000; get new option
227 ;
228 .IF < N_USER_FUNC eq E_ENTER > ;AN000; if user entered ENTER key
229 .THEN ;AN000;
230 COPY_WORD I_CTY_KYBD, I_USER_INDEX ;AN000; save new option
231 PUSH_HEADING CTY_KYBD_SCREEN ;AN000; save screen address on SELECT STACK
232 GOTO COUNTRY_SCREEN ;AN000; goto the next screen (COUNTRY)
233 .ELSE ;AN000;
234 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC or F3, take action
235 .ENDIF ;AN000;
236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
237;
238; ������������������������������������Ŀ
239; �COUNTRY_SCREEN �
240; � �
241; ��������������������������������������
242;
243; The COUNTRY CODE screen is presented if the user selected to define
244; country specific support (CTY_KYBD_SCREEN).
245; When this screen is presented for the first time, the current
246; country obtained from DOS will be highlighted. Subsequent presentations
247; of this screen will highlight the user selected country.
248; Code Page to be used will be determined by the selected country code.
249; Valid keys are ENTER, ESC, F1, F3, cursor up/down.
250;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
251COUNTRY_SCREEN: ;AN000;
252 .IF < I_CTY_KYBD eq E_CTY_KB_PREDEF > ;AN000; if accept pre-defined support
253 .THEN ;AN000;
254 GOTO LOAD_KEYBOARD ;AN000; goto load specified kybd id
255 .ENDIF ;AN000;
256 ;
257 INIT_PQUEUE PAN_COUNTRY ;AN000; initialize queue
258 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
259 PREPARE_CHILDREN ;AN000; prepare child panels
260 INIT_SCROLL SCR_CTY_1, 0 ;AN000; init 1st scroll list
261 INIT_SCROLL SCR_CTY_2, 0 ;AN000; init 2nd scroll list
262 DISPLAY_PANEL ;AN000; display COUNTRY panel
263 ;
264 .IF < N_CTY_LIST eq E_CTY_LIST_1 > ;AN000; if country is in list 1
265 .THEN ;AN000;
266 GET_SCROLL SCR_CTY_1,I_COUNTRY, FK_SCROLL ;AN000; highlight country in list 1 & get new choice
267 .ELSE ;AN000; else
268 GET_SCROLL SCR_CTY_2, I_COUNTRY, FK_SCROLL ;AN000; highlight country in list 2 & get new choice
269 .ENDIF ;AN000;
270 ;
271 .REPEAT ;AN000; repeat code block: CASS cannot do this automatically
272 .IF < N_USER_FUNC eq UPARROW > near ;AN000; if user entered cursor up
273 .THEN ;AN000;
274 .IF < N_CTY_LIST eq E_CTY_LIST_1 > near ;AN000; if country list = 1
275 .THEN ;AN000;
276 INIT_VAR N_CTY_LIST, E_CTY_LIST_2 ;AN000; set country list = 2
277 GET_SCROLL SCR_CTY_2,CTY_B_ITEMS,FK_SCROLL ;AN000; point to last item in list 2
278 .ELSE near ;AN000; else
279 INIT_VAR N_CTY_LIST, E_CTY_LIST_1 ;AN000; set country list = 1
280 GET_SCROLL SCR_CTY_1,CTY_A_ITEMS,FK_SCROLL ;AN000; point to last item in list 1
281 .ENDIF ;AN000;
282 .ELSEIF < N_USER_FUNC EQ DNARROW > near ;AN000; else if user entered cursor down
283 .THEN ;AN000;
284 .IF < N_CTY_LIST eq E_CTY_LIST_1 > near ;AN000; if country list = 1
285 .THEN ;AN000;
286 INIT_VAR N_CTY_LIST, E_CTY_LIST_2 ;AN000; set country list = 2
287 GET_SCROLL SCR_CTY_2, 1, FK_SCROLL ;AN000; point to 1st item in list 2
288 .ELSE near ;AN000; else
289 INIT_VAR N_CTY_LIST, E_CTY_LIST_1 ;AN000; set country list = 1
290 GET_SCROLL SCR_CTY_1, 1, FK_SCROLL ;AN000; point to 1st item in list 1
291 .ENDIF ;AN000;
292 .ELSE near ;AN000; else
293 .LEAVE ;AN000; break away from repeat loop
294 .ENDIF ;AN000;
295 .UNTIL ;AN000; end of repeat block
296 ;
297 .IF < N_USER_FUNC eq E_ENTER > near ;AN000; if user entered ENTER key
298 .THEN ;AN000;
299 COPY_WORD I_COUNTRY, I_USER_INDEX ;AN000; save new country
300 PUSH_HEADING COUNTRY_SCREEN ;AN000; save screen address on SELECT STACK
301 GET_COUNTRY_DEFAULTS N_CTY_LIST, I_COUNTRY ;AN000; get country default parameters
302 .IF < N_DISPLAY eq E_CPSW_DISP > ;AN000;
303 .THEN ;AN000;
304 .IF < N_CPSW eq E_CPSW_NOT_VAL > ;AN000; if cpsw not valid
305 .THEN ;AN000;
306 INIT_VAR F_CPSW, E_CPSW_NA ;AN000; set cpsw = not available
307 .ELSEIF < N_CPSW eq E_CPSW_NOT_REC > ;AN000; else if cpsw not recommended
308 .THEN ;AN000;
309 INIT_VAR F_CPSW, E_CPSW_NO ;AN000; set cpsw = no
310 .ELSE ;AN000; else
311 INIT_VAR F_CPSW, E_CPSW_YES ;AN000; set cpsw = yes
312 .ENDIF ;AN000;
313 .ELSE ;AN000;
314 INIT_VAR F_CPSW, E_CPSW_NA ;AN000;
315 .ENDIF ;AN000;
316 ;
317 ;;; get keyboard from input field if country = Swiss ;
318 COMPARE_STRINGS S_KEYBOARD,S_SWISS ;AN000;GHG is default KB=SF?
319 .IF <NC> ;AN000;GHG
320 .THEN ;AN000;GHG
321 RETURN_STRING STR_SWISS_KEYB,S_KEYBOARD,M_KEYBOARD+2;AN000;GHG
322 .ENDIF ;AN000;GHG
323 ;
324 GET_KEYBOARD_INDEX S_KEYBOARD,N_KYBD_LIST,I_KEYBOARD,N_KYBD_ALT ;AN000; get index into keyboard tables
325 GOTO KEYBOARD_SCREEN ;AN000; goto the next screen (KEYBOARD)
326 .ELSE ;AN000;
327 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC or F3, action
328 .ENDIF ;AN000;
329;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
330;
331; ������������������������������������Ŀ
332; �KEYBOARD_SCREEN �
333; � �
334; ��������������������������������������
335; The KEYBOARD CODE screen is presented if the user had selected to
336; define country specific support and the country code selected has a valid
337; keyboard code association.
338; The keyboard code associated with the selected country code will be
339; highlighted.
340; For keyboards that have more than one valid keyboard code, a second
341; level keyboard code screen will be presented to the user.
342; Valid keys are ENTER, ESC, F1, F3, cursor up/down.
343;
344;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
345KEYBOARD_SCREEN: ;AN000;
346 .IF < N_KYB_LOAD eq E_KYB_LOAD_ERR > ;AN000; if KEYB load status is error
347 .THEN ;AN000;
348 INIT_VAR N_KYB_LOAD, E_KYB_LOAD_UND ;AN000; set KEYB loaded status = undefined
349 POP_HEADING ;AN000; goto previous screen
350 .ENDIF ;AN000;
351 ;
352 .IF < N_KYBD_VAL eq E_KYBD_VAL_NO > ;AN000; if keyboard id not valid
353 .THEN ;AN000;
354 GOTO LOAD_KEYBOARD ;AN000; goto load specified kybd id
355 .ENDIF ;AN000;
356 ;
357 INIT_PQUEUE PAN_KEYBOARD ;AN000; initialize queue
358 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
359 PREPARE_CHILDREN ;AN000; prepare child panels
360 INIT_SCROLL SCR_KYB_1, 0 ;AN000; init 1st scroll list
361 INIT_SCROLL SCR_KYB_2, 0 ;AN000; init 2nd scroll list
362 DISPLAY_PANEL ;AN000; display KEYBOARD panel
363 ;
364 .IF < N_KYBD_LIST eq E_KYBD_LIST_1 > ;AN000; if keyboard is in list 1
365 .THEN ;AN000;
366 GET_SCROLL SCR_KYB_1,I_KEYBOARD, FK_SCROLL ;AN000; highlight kybd in list 1 & get new choice
367 .ELSE ;AN000; else
368 GET_SCROLL SCR_KYB_2,I_KEYBOARD, FK_SCROLL ;AN000; highlight kybd in list 2 & get new choice
369 .ENDIF ;AN000;
370 ;
371 .REPEAT ;AN000; repeat code block: CASS cannot do this automatically
372 .IF < N_USER_FUNC eq UPARROW > near ;AN000; if user entered cursor up
373 .THEN ;AN000;
374 .IF < N_KYBD_LIST eq E_KYBD_LIST_1 > near ;AN000; if kybd list = 1
375 .THEN ;AN000;
376 INIT_VAR N_KYBD_LIST, E_KYBD_LIST_2 ;AN000; set kybd list = 2
377 GET_SCROLL SCR_KYB_2,KYBD_B_ITEMS,FK_SCROLL;AN000; point to last item in list 2
378 .ELSE near ;AN000; else
379 INIT_VAR N_KYBD_LIST, E_KYBD_LIST_1 ;AN000; set kybd list = 1
380 GET_SCROLL SCR_KYB_1,KYBD_A_ITEMS,FK_SCROLL;AN000; point to last item in list 1
381 .ENDIF ;AN000;
382 .ELSEIF < N_USER_FUNC EQ DNARROW > near ;AN000; else if user entered cursor down
383 .THEN ;AN000;
384 .IF < N_KYBD_LIST eq E_KYBD_LIST_1 > near ;AN000; if kybd list = 1
385 .THEN ;AN000;
386 INIT_VAR N_KYBD_LIST, E_KYBD_LIST_2 ;AN000; set kybd list = 2
387 GET_SCROLL SCR_KYB_2, 1, FK_SCROLL ;AN000; point to 1st item in list 2
388 .ELSE near ;AN000; else
389 INIT_VAR N_KYBD_LIST, E_KYBD_LIST_1 ;AN000; set kybd list = 1
390 GET_SCROLL SCR_KYB_1, 1, FK_SCROLL ;AN000; point to 1st item in list 1
391 .ENDIF ;AN000;
392 .ELSE near ;AN000; else
393 .LEAVE ;AN000; break away from repeat loop
394 .ENDIF ;AN000;
395 .UNTIL ;AN000; end of repeat block
396 ;
397 .IF < N_USER_FUNC eq E_ENTER > near ;AN000; if user entered ENTER key
398 .THEN ;AN000;
399 COPY_WORD I_KEYBOARD, I_USER_INDEX ;AN000; save new kybd
400 PUSH_HEADING KEYBOARD_SCREEN ;AN000; save screen address on SELECT STACK
401 GET_KEYBOARD N_KYBD_LIST,I_KEYBOARD,S_KEYBOARD,N_KYBD_ALT ;AN000; get keyboard code
402 GOTO ALT_KYB_SCREEN ;AN000; goto next screen (ALT_KYBD)
403 .ELSE ;AN000;
404 GOTO PROCESS_ESC_F3 ;AN000; user entered ENTER or ESC, take action
405 .ENDIF ;AN000;
406;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
407;
408; ������������������������������������Ŀ
409; �ALT_KYB_SCREEN �
410; � �
411; ��������������������������������������
412;
413; The ALTERNATE KEYBOARD CODE screen is presented if the selected keyboard
414; has different keyboard layouts.
415; The screen allows the user to enter the desired keyboard when the
416; language supports different keyboard layouts. The following languages
417; have different keyboard layouts:
418; French
419; Italian
420; UK English
421; Valid keys are ENTER, ESC, F1, F3, cursor up/down.
422;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
423ALT_KYB_SCREEN: ;AN000;
424 .IF < N_KYB_LOAD eq E_KYB_LOAD_ERR > ;AN000; if KEYB load status is error
425 .THEN ;AN000;
426 POP_HEADING ;AN000; goto previous screen
427 .ENDIF ;AN000;
428 ;
429 .IF < N_KYBD_ALT eq E_KYBD_ALT_NO > ;AN000; if no alternate keyboard
430 .THEN ;AN000;
431 GOTO LOAD_KEYBOARD ;AN000; goto load specified kybd id
432 .ENDIF ;AN000;
433 ;
434 GET_ALT_KYBD_TABLE S_KEYBOARD, ALT_TAB_PTR, ALT_KYB_ID ;AN000; get alternate keyboard id
435 ;
436 .SELECT ;AN000;
437 ;
438 .WHEN < ALT_KYB_ID eq ALT_FRENCH > ;AN000; kybd id = French
439 INIT_VAR N_WORD_1, SCR_FR_KYB ;AN000; set scroll list id = French
440 ;
441 .WHEN < ALT_KYB_ID eq ALT_ITALIAN > ;AN000; kybd id = Italian
442 INIT_VAR N_WORD_1, SCR_IT_KYB ;AN000; set scroll list id = Italian
443 ;
444 .OTHERWISE ;AN000; kybd id = UK English
445 INIT_VAR N_WORD_1, SCR_UK_KYB ;AN000; set scroll list id = UK English
446 ;
447 .ENDSELECT ;AN000;
448 ;
449 COMP_BYTES ALT_KYB_ID, ALT_KYB_ID_PREV ;AN000; if current alt kyb id different
450 .IF nz ;AN000;
451 .THEN ;AN000;
452 INIT_VAR I_KYBD_ALT, 2 ;AN090; set index into list = 1
453 COPY_BYTE ALT_KYB_ID_PREV, ALT_KYB_ID ;AN000; set prev id = current id
454 .ENDIF ;AN000;
455 ;
456 INIT_PQUEUE PAN_KYBD_ALT ;AN000; initialize queue
457 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
458 PREPARE_CHILDREN ;AN000; prepare child panels
459 INIT_SCROLL N_WORD_1, 0 ;AN000; init scroll list
460 DISPLAY_PANEL ;AN000; display ALTERNATE keyboard panel
461 ;
462 GET_SCROLL N_WORD_1, I_KYBD_ALT, FK_SCROLL ;AN000; get new alt kyb id
463 ;
464 .IF < N_USER_FUNC eq E_ENTER > ;AN000; if user entered ENTER key
465 .THEN ;AN000;
466 COPY_WORD I_KYBD_ALT, I_USER_INDEX ;AN000; save new alternate keyboard
467 PUSH_HEADING ALT_KYB_SCREEN ;AN000; push screen address on SELECT STACK
468 GET_ALT_KEYBOARD ALT_TAB_PTR,ALT_KYB_ID,I_KYBD_ALT,S_KYBD_ALT ;AN000;get alternate keyboard code
469 GOTO LOAD_KEYBOARD ;AN000; goto load specified kybd id
470 .ELSE ;AN000;
471 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC or F3, take action
472 .ENDIF ;AN000;
473;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
474;
475; � � � � � � � � � � � � � � � � � � �
476; � LOAD_KEYBOARD �
477;
478; � This will execute the keyboard �
479; program to load the requested
480; � keyboard routine. �
481; � � � � � � � � � � � � � � � � � � �
482;
483;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
484LOAD_KEYBOARD: ;AN000;
485 .IF < N_KYBD_LIST eq E_KYBD_LIST_2 > and ;AN000; if kybd is none
486 .IF < I_KEYBOARD eq KYBD_B_ITEMS > ;AN000;
487 .THEN ;AN000;
488 INIT_VAR N_KYBD_VAL, E_KYBD_VAL_DEF ;AN000; set kybd id = default id
489 .ENDIF ;AN000;
490 ;
491 .IF < N_KYBD_VAL eq E_KYBD_VAL_YES > near ;AN000; if kybd id is valid
492 .THEN ;AN000;
493 .IF < N_KYBD_ALT eq E_KYBD_ALT_NO > ;AN000; if alt kybd not valid
494 .THEN ;AN000;
495 COPY_STRING S_STR120_1,M_STR120_1,S_KEYBOARD;AN000; set par = kybd id
496 .ELSE ;AN000; else
497 COPY_STRING S_STR120_1,M_STR120_1,S_KYBD_ALT;AN000; set par = alt kybd id
498 .ENDIF ;AN000;
499 INIT_VAR N_WORD_1, E_KYB_LOAD_SUC ;AN000;
500 .ELSE ;AN000;
501 COPY_STRING S_STR120_1,M_STR120_1,S_US ;AN000;
502 INIT_VAR N_WORD_1, E_KYB_LOAD_US ;AN000;
503 .ENDIF ;AN000;
504 ;
505 .IF < N_KYB_LOAD eq E_KYB_LOAD_US > and ;AN000;
506 .IF < N_WORD_1 eq E_KYB_LOAD_US > ;AN000;
507 .THEN ;AN000;
508 .ELSE near ;AN000;
509 ;
510 .IF < MEM_SIZE eq 256 > ;AN000;DT this includes support for PC Convertible (SEH)
511 DEALLOCATE_MEMORY ;AN000;DT
512 .ENDIF ;AN000;DT
513 ;
514 CALL HOOK_INT_24 ;AN000;
515 EXEC_PROGRAM S_KEYB,S_STR120_1,PARM_BLOCK,EXEC_DIR ;AN000; load specified kybd id
516 .IF < MEM_SIZE eq 256 > ;AN063;SEH
517 CALL GET_OVERLAY ;AN063;SEH
518 .ENDIF ;AN063;SEH
519 .IF < EXEC_ERR eq TRUE > ;AC063;SEH ;AN000;
520 .THEN ;AN000;
521 HANDLE_ERROR ERR_KEYB,E_RETURN ;AN000;
522 INIT_VAR N_KYB_LOAD, E_KYB_LOAD_ERR ;AN000;
523 POP_HEADING ;AN000;
524 .ENDIF ;AN000;
525 CALL RESTORE_INT_24 ;AN000;
526 COPY_WORD N_KYB_LOAD, N_WORD_1 ;AN000;
527 ;
528 .IF < MEM_SIZE eq 256 > and ;AC063;SEH ;AN000;DT
529 .IF < N_DISKETTE_A ne E_DISKETTE_720 > ;AN063;SEH
530 INSERT_DISK SUB_REM_DOS_A, S_DOS_COM_360 ;AN000;JW Insert the INSTALL diskette
531 .ENDIF ;AN000;DT
532 ;
533 .ENDIF ;AN000;
534 ;
535 .IF < N_KYBD_LIST eq E_KYBD_LIST_2 > and ;AN000; if kybd is US ENGLISH JW
536 .IF < I_KEYBOARD eq 8 > ;AN000; JW
537 .THEN ;AN000; JW
538 INIT_VAR N_KYBD_VAL, E_KYBD_VAL_YES ;AN000; set kybd id = US KEYBOARD JW
539 .ENDIF ;AN000; JW
540 ;
541;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
542;
543; ������������������������������������Ŀ
544; �DEST_DRIVE_SCREEN �
545; � �
546; ��������������������������������������
547;
548; The DESTINATION DRIVE screen is presented when there is an option for
549; the destination drive. Possible options are:
550; B or C
551; A or C
552; Valid keys are ENTER, ESC, F1, F3, cursor up/down, numeric 1 to 2.
553;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
554DEST_DRIVE_SCREEN: ;AN000;
555 .IF < N_DEST_DRIVE eq E_DEST_SELECT > ;AN000; if default destination drive
556 .THEN ;AN000;
557 GOTO DOS_LOC_SCREEN ;AN000; goto next screen (DOS_LOC)
558 .ENDIF ;AN000;
559 ;
560 .IF < N_DRIVE_OPTION eq E_OPTION_B_C > ;AN111;JW
561 INIT_VAR N_WORD_1, SCR_DEST_B_C ;AN111;JW
562 .ELSE ;AN111;JW
563 INIT_VAR N_WORD_1, SCR_DEST_A_C ;AN111;JW
564 .ENDIF ;AN111;JW
565 ;
566 INIT_PQUEUE PAN_DEST_DRIVE ;AN000; initialize queue
567 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
568 PREPARE_CHILDREN ;AN000; prepare child panels
569 INIT_SCROLL N_WORD_1, I_DEST_DRIVE ;AN000; init scroll list
570 DISPLAY_PANEL ;AN000; display DEST_DRIVE panel
571 ;
572 GET_SCROLL N_WORD_1,I_DEST_DRIVE,FK_SCROLL ;AN000; get new install destination
573 ;
574 .IF < N_USER_FUNC eq E_ENTER > ;AN000; if user entered ENTER key
575 .THEN ;AN000;
576 .IF < N_DRIVE_OPTION eq E_OPTION_A_C > and ;AN111;JW
577 .IF < I_USER_INDEX eq 2 > ;AN111;JW
578 INIT_VAR I_DEST_DRIVE, E_DEST_DRIVE_A ;AN111;JW
579 .ELSE ;AN111;JW
580 COPY_WORD I_DEST_DRIVE, I_USER_INDEX ;AN000; save new install destination drive
581 .ENDIF ;AN111;JW
582 PUSH_HEADING DEST_DRIVE_SCREEN ;AN000; save screen address on the SELECT STACK
583 GOTO DOS_LOC_SCREEN ;AN000; goto the next screen (DOS_LOC)
584 .ELSE ;AN000;
585 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC OR F3, take action
586 .ENDIF ;AN000;
587;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
588SELECT ENDS ;AN000;
589 END ;AN000;
diff --git a/v4.0/src/SELECT/SELECT2A.ASM b/v4.0/src/SELECT/SELECT2A.ASM
new file mode 100644
index 0000000..f253a3f
--- /dev/null
+++ b/v4.0/src/SELECT/SELECT2A.ASM
@@ -0,0 +1,381 @@
1
2
3PAGE 55,132 ;AN000;
4NAME SELECT ;AN000;
5TITLE SELECT - DOS - SELECT.EXE ;AN000;
6SUBTTL SELECT2A.asm ;AN000;
7.ALPHA ;AN000;
8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9;
10; SELECT2A.ASM : Copyright 1988 Microsoft
11;
12; DATE: August 8/87
13;
14; COMMENTS: Assemble with MASM 3.0 (using the -A option)
15;
16; Panel flow is defined in the following files:
17;
18; � SELECT1.ASM
19; � SELECT2.ASM
20; � SELECT3.ASM
21; � SELECT4.ASM
22; � SELECT5.ASM
23; � SELECT6.ASM
24;
25; CHANGE HISTORY:
26;
27; mrw0 6/16/88 Added panel for shell selection...
28;
29;
30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
31DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; Dummy data segment
32 EXTRN SEG_LOC:WORD ;AN000;
33 EXTRN NAMES_OFF:WORD ;AN000;
34 EXTRN N_PRN_NAMES:WORD ;AN000;
35 EXTRN MAX_NAME:WORD ;AN000;
36 EXTRN SIZE_NAMES:ABS ;AN000;
37DATA ENDS ;AN000;
38 ;
39.XLIST ;AN000;
40 INCLUDE PANEL.MAC ;AN000;
41 INCLUDE SELECT.INC ;AN000;
42 INCLUDE PAN-LIST.INC ;AN000;
43 INCLUDE CASTRUC.INC ;AN000;
44 INCLUDE STRUC.INC ;AN000;
45 INCLUDE MACROS.INC ;AN000;
46 INCLUDE EXT.INC ;AN000;
47 INCLUDE VARSTRUC.INC ;AN000;
48 INCLUDE ROUT_EXT.INC ;AN000;
49.LIST ;AN000;
50 PUBLIC DOS_LOC_SCREEN ;AN000;
51 PUBLIC PRINTER_SCREEN ;AN000;
52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
53;
54;
55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
56SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;
57 ASSUME CS:SELECT,DS:DATA ;AN000;
58 ;
59 INCLUDE CASEXTRN.INC ;AN000;
60 ;
61 EXTRN INSTALL_ERROR:NEAR ;AN000;
62 EXTRN EXIT_DOS:NEAR ;AN000;
63 EXTRN EXIT_SELECT:NEAR ;AN000;
64 ;
65 EXTRN PROCESS_ESC_F3:NEAR ;AN000;
66 EXTRN INTRO_SCREEN:NEAR ;AN000;
67 EXTRN choose_shell_screen:NEAR ;mrw0 ;AC020;SEH
68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
69;
70; ������������������������������������Ŀ
71; �DOS_LOC_SCREEN �
72; � �
73; ��������������������������������������
74;
75; The DOS LOCATION screen is presented only if DOS is to be installed
76; on drive C:.
77; The maximum length of the install path will be limited to 40 characters.
78; This restriction is imposed so that when generating commands
79; for the CONFIG.SYS and AUTOEXEC.BAT files, the command line length will not
80; exceed 128 characters.
81; When the screen is presented for the first time, the default install
82; path displayed will be "DOS". On subsequent presentations, the user
83; selected path will be displayed.
84; Valid keys are ENTER, ESC, F1, F3 and ASCII characters A to Z.
85;?????????????????????????????update?????????????????????????????????
86; The Functional Specification dated 5 May 1987, states that the APPEND
87; and PATH commands will be generated if the user selected to minimize workspace
88; or maximize workspace but not if the user selected balance workspace. Since
89; this assumption does not seem logical, the check has been revised to
90; generate the commands if the install destination is drive C:. Also, the
91; PC/DOS parameters screen does not check for the workspace definition.
92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
93DOS_LOC_SCREEN: ;AN000;
94 .IF < I_DEST_DRIVE ne E_DEST_DRIVE_C > ;AN111; if install destination is drive A: or B: JW
95 .THEN ;AN000;
96 INIT_VAR F_PROMPT, E_PROMPT_NO ;AN000; set prompt = no
97 INIT_VAR F_PATH, E_PATH_NO ;AN000; set path = no
98 INIT_VAR F_APPEND, E_APPEND_NO ;AN000; set append = no
99 GOTO PRINTER_SCREEN ;AN000; goto next screen (PRINTER)
100 .ENDIF ;AN000;
101 ;
102 INIT_PQUEUE PAN_DOS_LOC ;AN000; initialize queue
103 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
104 PREPARE_CHILDREN ;AN000; prepare child panels
105 INIT_STRING STR_DOS_LOC,S_DOS_LOC,M_DOS_LOC ;AN000;
106 .IF < N_DISK1_MODE ne E_DISK1_INSTALL > ;AN000; if this is not a new fixed disk JW
107 .THEN ;AN000; then JW
108 INIT_SCROLL SCR_COPY_DEST,I_DESTINATION ;AN000; initialize destination choice JW
109 INIT_SCROLL_COLOUR SCR_COPY_DEST,2 ;AN026; set field to not active color
110 .ENDIF ;AN000; endif JW
111 DISPLAY_PANEL ;AN000; display DOS_LOC panel
112 ;
113 COPY_STRING S_STR120_1,M_STR120_1,S_DOS_LOC ;AN000;
114 ;
115GET_DOS_LOCATION: ;AN000;
116 GET_STRING STR_DOS_LOC,S_STR120_1,M_DOS_LOC,FK_TAB ;AN000;get new install path
117 ;
118 PROCESS_F3 ;AN000; if user entered F3, exit to DOS
119 PROCESS_ESC ;AN000; if user entered ESC, goto previous screen
120 ;
121 COPY_STRING S_STR120_1,M_STR120_1,S_USER_STRING ;AN000;
122 CHECK_PATH S_STR120_1,0, 0 ;AN000;
123 .IF nc near ;AN000; if path is valid
124 .THEN ;AN000;
125 COPY_STRING S_DOS_LOC,M_DOS_LOC,S_USER_STRING ;AN000; save new DOS install path
126 COPY_STRING S_STR120_2, M_STR120_2, S_INSTALL_PATH;AN000;save old install path
127 MERGE_STRING S_INSTALL_PATH,M_INSTALL_PATH,S_DEST_DRIVE,S_DOS_LOC ;AN000; add 'C:\' to install path
128 COMPARE_STRINGS S_INSTALL_PATH, S_STR120_2 ;AN000; compare old and new paths
129 .IF c ;AN000; if paths different
130 .THEN ;AN000;
131 INIT_VAR F_APPEND, E_APPEND_YES ;AN000; set APPEND = yes
132 COPY_STRING S_APPEND,M_APPEND,S_INSTALL_PATH;AN000; set new APPEND path
133 INIT_VAR F_PATH, E_PATH_YES ;AN000; set PATH = yes
134 COPY_STRING S_PATH, M_PATH, S_INSTALL_PATH ;AN000; set new DOS path
135 .ELSEIF < S_APPEND eq 0 > ;AN000;
136 .THEN ;AN000;
137 COPY_STRING S_APPEND,M_APPEND,S_INSTALL_PATH;AN000;
138 INIT_VAR F_APPEND, E_APPEND_YES ;AN000;
139 .ENDIF ;AN000;
140 .IF < I_WORKSPACE eq E_WORKSPACE_MIN > ;AN000; if workspace option = minimize
141 .THEN ;AN000;
142 INIT_VAR S_APPEND, 0 ;AN000; set APPEND= null
143 .ENDIF ;AN000;
144 INIT_VAR F_PROMPT, E_PROMPT_YES ;AN000; set PROMPT = yes
145 .ELSE ;AN000; else
146 HANDLE_ERROR ERR_BAD_PATH, E_RETURN ;AN000; pop error message
147 GOTO GET_DOS_LOCATION ;AN000; goto get DOS location again
148 .ENDIF ;AN000;
149 ;
150 .IF < N_DISK1_MODE ne E_DISK1_INSTALL > AND ;AN000; if this is not a new fixed disk JW
151 .IF < N_USER_FUNC eq E_TAB > ;AN000; if user tabbed to the scroll field JW
152 .THEN ;AN000; JW
153 GET_SCROLL SCR_COPY_DEST,I_DESTINATION,FK_TAB ;AN000; JW
154 PROCESS_F3 ;AN000; if user entered F3, exit to DOS JW
155 PROCESS_ESC ;AN000; JW
156 COPY_WORD I_DESTINATION, I_USER_INDEX ;AN000; save new install destination drive JW
157 .IF < N_USER_FUNC eq E_TAB > ;AN000; if user entered ESC JW
158 .THEN ;AN000; JW
159 SET_SCROLL SCR_COPY_DEST,I_DESTINATION ;AN026; Set to not active
160 GOTO GET_DOS_LOCATION ;AC051;SEH ;AN000 Go get dos location JW
161 .ENDIF ;AN000; JW
162 .ENDIF ;AN000; JW
163 PUSH_HEADING DOS_LOC_SCREEN ;AC051;SEH ;AN000; save screen address on SELECT STACK
164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
165;
166; ������������������������������������Ŀ
167; �PRINTER_SCREEN �
168; � �
169; ��������������������������������������
170;
171; The PRINTER SCREEN is always presented.
172; The screen allows the user to indicate the number of printers attached.
173; Valid keys are ENTER, ESC, F1, F3 and numeric 0 to 7.
174;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
175PRINTER_SCREEN: ;AN000;
176 .IF < N_PARALLEL eq 0 > and ;AN000; if zero parallel and
177 .IF < N_SERIAL eq 0 > ;AN000; and zero serial printers
178 .THEN ;AN000;
179 INIT_VAR F_GRAPHICS, E_GRAPHICS_NO ;AN000; set GRAPHICS = no JW
180 GOTO choose_shell_screen ;mrw0 ;AC020;SEH goto next screen
181 .ENDIF ;AN000;
182 ;
183 ;;;display panel to get number of printers ;
184 INIT_PQUEUE PAN_PRINTER ;AN000; initialize queue
185 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
186 PREPARE_CHILDREN ;AN000; prepare child panels
187 INIT_NUMERIC NUM_PRINTER,N_NUMPRINT,MAX_NUMPRINT,S_STR120_1;AN000;
188 DISPLAY_PANEL ;AN000;
189 ;
190 ;;;get number of printers ;
191 GET_NUMERIC NUM_PRINTER,N_NUMPRINT,MIN_NUMPRINT,MAX_NUMPRINT,FK_TEXT,S_STR120_1;AN000;
192 ;
193 ;;;save number of printers and goto next screen ;
194 .IF < N_USER_FUNC eq E_ENTER > ;AN000; if user entered ENTER key
195 .THEN ;AN000;
196 COPY_WORD N_NUMPRINT, N_USER_NUMERIC ;AN000; save number of printers
197 PUSH_HEADING PRINTER_SCREEN ;AN000; save screen address on SELECT STACK
198 .ELSE ;AN000;
199 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC or F3, take action
200 .ENDIF ;AN000;
201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
202;
203; ������������������������������������Ŀ
204; �PRINTER_TYPE_SCREEN �
205; � �
206; ��������������������������������������
207;
208; Get type of printer
209;
210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
211PRINTER_TYPE_SCREEN: ;AN000;
212 .IF < N_NUMPRINT eq MIN_NUMPRINT > ;AN000; if zero printers specified
213 .THEN ;AN000;
214 INIT_VAR F_GRAPHICS, E_GRAPHICS_NO ;AN000; set GRAPHICS = no JW
215 GOTO choose_shell_screen ;mrw0 ;AC020; SEH goto next screen
216 .ENDIF ;AN000;
217 ;
218 GET_PRINTER_TITLES S_PRINT_FILE ;AN000; read printer titles from SELECT.PRT
219 .IF c ;AN000; if error reading file
220 .THEN ;AN000;
221 INIT_VAR N_NUMPRINT, MIN_NUMPRINT ;AN000; set no of printers = 0
222 HANDLE_ERROR ERR_BAD_PFILE, E_RETURN ;AN000; popup error message
223 GOTO choose_shell_screen ;mrw0 ;AC020; SEH goto next screen
224 .ENDIF ;AN000;
225 ;
226 INIT_VAR N_COUNTER, 1 ;AN000; set printer no = 1
227 .IF < I_WORKSPACE ne E_WORKSPACE_MIN > ;AN014; SEH if not minimum DOS workspace
228 .THEN ;AN014;
229 INIT_VAR F_GRAPHICS, E_GRAPHICS_YES ;AN000; set GRAPHICS = yes SEH
230 .ENDIF ;AN014; SEH
231 ;
232GET_PRINTER_TYPE: ;AN000; repeat loop to get printer info
233 ;
234 .IF < N_COUNTER eq 0 > ;AN000; if printer no = zero
235 .THEN ;AN000;
236 RELEASE_PRINTER_INFO ;AN000; release memory
237 .IF c ;AN000;
238 .THEN ;AN000;
239 GOTO INSTALL_ERROR ;AN000;
240 .ENDIF ;AN000;
241 POP_HEADING ;AN000; goto previous screen
242 .ENDIF ;AN000;
243 ;
244 .SELECT ;AN000; get printer no sub panel
245 ;
246 .WHEN < N_COUNTER eq 1 > ;AN000;
247 INIT_VAR N_BYTE_1, '1' ;AC025;
248 ;
249 .WHEN < N_COUNTER eq 2 > ;AN000;
250 INIT_VAR N_BYTE_1, '2' ;AC025;
251 ;
252 .WHEN < N_COUNTER eq 3 > ;AN000;
253 INIT_VAR N_BYTE_1, '3' ;AC025;
254 ;
255 .WHEN < N_COUNTER eq 4 > ;AN000;
256 INIT_VAR N_BYTE_1, '4' ;AC025;
257 ;
258 .WHEN < N_COUNTER eq 5 > ;AN000;
259 INIT_VAR N_BYTE_1, '5' ;AC025;
260 ;
261 .WHEN < N_COUNTER eq 6 > ;AN000;
262 INIT_VAR N_BYTE_1, '6' ;AC025;
263 ;
264 .OTHERWISE ;AN000;
265 INIT_VAR N_BYTE_1, '7' ;AC025;
266 ;
267 .ENDSELECT ;AN000;
268 ;
269 GET_PRINTER_PARAMS N_COUNTER, 0, N_RETCODE ;AN000; based on printer #
270 ;
271 ;;;N_BYTE_1 = printer number ;
272 INIT_CHAR N_BYTE_1, E_DISK_ROW, E_DISK_COL, SUB_PRINTER_1 ;AN025; display the printer number
273 INIT_PQUEUE PAN_PRT_TYPE ;AN000; initialize queue
274 PREPARE_PANEL SUB_PRINTER_1 ;AC025; printer no
275 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
276 PREPARE_CHILDREN ;AN000; prepare child panels
277 INIT_SCROLL_W_LIST SCR_PRT_TYPE,SEG_LOC,NAMES_OFF,N_PRN_NAMES,SIZE_NAMES,MAX_NAME,I_PRINTER;AN000;
278 DISPLAY_PANEL ;AN000;
279 ;
280 GET_SCROLL SCR_PRT_TYPE,I_PRINTER,FK_SCROLL;AN000; get printer type
281 ;
282 PROCESS_F3 ;AN000; take action if F3 entered
283 ;
284 .IF < N_USER_FUNC eq E_ESCAPE > ;AN000; if user entered ESC
285 .THEN ;AN000;
286 DEC N_COUNTER ;AN000; dec printer number
287 GOTO GET_PRINTER_TYPE ;AN000; goto previous printer
288 .ENDIF ;AN000;
289 ;
290 COPY_WORD I_PRINTER, I_USER_INDEX ;AN000; save printer type
291 ;
292 GET_PRINTER_INFO I_PRINTER ;AN000; get printer info from SELECT.PRT
293 .IF c ;AN000; if error
294 .THEN ;AN000;
295 HANDLE_ERROR ERR_BAD_PPRO, E_RETURN ;AN000; popup error message
296 GOTO GET_PRINTER_TYPE ;AN000; goto get printer type
297 .ENDIF ;AN000;
298 ;
299 .IF < N_PRINTER_TYPE eq E_PARALLEL > and ;AN000;
300 .IF < N_PARALLEL eq 0 > ;AN000;
301 .THEN ;AN000;
302 HANDLE_ERROR ERR_PRT_NO_HDWR, E_RETURN ;AN000;
303 GOTO GET_PRINTER_TYPE ;AN000;
304 .ENDIF ;AN000;
305 ;
306 .IF < N_PRINTER_TYPE eq E_SERIAL > and ;AN000;
307 .IF < N_SERIAL eq 0 > ;AN000;
308 .THEN ;AN000;
309 HANDLE_ERROR ERR_PRT_NO_HDWR, E_RETURN ;AN000;
310 GOTO GET_PRINTER_TYPE ;AN000;
311 .ENDIF ;AN000;
312 ;
313 .SELECT ;AN000;
314 ;
315 .WHEN < N_PRINTER_TYPE eq E_PARALLEL > near ;AN000; if parallel printer
316 INIT_CHAR N_BYTE_1, E_DISK_ROW, E_DISK_COL, SUB_PRINTER_1 ;AN025; display the printer number
317 INIT_PQUEUE PAN_PARALLEL ;AN000; initialize queue
318 PREPARE_PANEL SUB_PRINTER_1 ;AC025;
319 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
320 PREPARE_CHILDREN ;AN000; prepare child panels
321 INIT_SCROLL_W_LIST SCR_ACC_PRT,SEG_LOC,NAMES_OFF,N_PRN_NAMES,SIZE_NAMES,MAX_NAME,I_PRINTER;AN000;
322 INIT_SCROLL_W_NUM SCR_PARALLEL,N_PARALLEL,I_PORT ;AN000;
323 DISPLAY_PANEL ;AN000; display panel
324 ;
325 GET_SCROLL SCR_PARALLEL, I_PORT, FK_SCROLL ;AN000;
326 COPY_WORD I_PORT, I_USER_INDEX ;AN000;
327 ;
328 .OTHERWISE near ;AN000; if serial printer
329 ;
330 INIT_CHAR N_BYTE_1, E_DISK_ROW, E_DISK_COL, SUB_PRINTER_1 ;AN025; display the printer number
331 INIT_PQUEUE PAN_SERIAL ;AN000; initialize queue
332 PREPARE_PANEL SUB_PRINTER_1 ;AN025;
333 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
334 PREPARE_CHILDREN ;AN000; prepare child panels
335 INIT_SCROLL_W_LIST SCR_ACC_PRT,SEG_LOC,NAMES_OFF,N_PRN_NAMES,SIZE_NAMES,MAX_NAME,I_PRINTER;AN000;
336 INIT_SCROLL_W_NUM SCR_SERIAL,N_SERIAL,I_PORT ;AN000;
337 INIT_SCROLL SCR_PRT_REDIR, I_REDIRECT ;AN000;
338 INIT_SCROLL_COLOUR SCR_PRT_REDIR, 2 ;AN000;
339 DISPLAY_PANEL ;AN000;
340 ;
341 .REPEAT ;AN000;
342 SET_SCROLL SCR_PRT_REDIR, I_REDIRECT ;AN000;
343 GET_SCROLL SCR_SERIAL, I_PORT, FK_TAB ;AN000;
344 COPY_WORD I_PORT, I_USER_INDEX ;AN000;
345 .IF < N_USER_FUNC eq E_TAB > near ;AN000;
346 .THEN ;AN000;
347 SET_SCROLL SCR_SERIAL, I_PORT ;AN000;
348 GET_SCROLL SCR_PRT_REDIR,I_REDIRECT,FK_TAB ;AN000;
349 COPY_WORD I_REDIRECT, I_USER_INDEX ;AN000;
350 .ENDIF ;AN000;
351 ;
352 .UNTIL < N_USER_FUNC eq E_ENTER > or near ;AN000;
353 .UNTIL < N_USER_FUNC eq E_ESCAPE > or near ;AN000;
354 .UNTIL < N_USER_FUNC eq E_F3 > ;AN000;
355 ;
356 .ENDSELECT ;AN000;
357 ;
358 PROCESS_F3 ;AN000;
359 ;
360 .IF < N_USER_FUNC eq E_ESCAPE > ;AN000; if user entered ESC
361 .THEN ;AN000;
362 GOTO GET_PRINTER_TYPE ;AN000; goto get printer type
363 .ENDIF ;AN000;
364 SAVE_PRINTER_PARAMS N_COUNTER ;AN000; save printer parameters
365 INC_VAR N_COUNTER ;AN000; inc printer number
366 COMP_WORDS N_COUNTER, N_NUMPRINT ;AN000; if printer no > no of printers
367 .IF nc and ;AN000;
368 .IF nz ;AN000;
369 .THEN ;AN000;
370 RELEASE_PRINTER_INFO ;AN000; release memory
371 .IF c ;AN000; if error
372 .THEN ;AN000;
373 GOTO INSTALL_ERROR ;AN000; :::::::
374 .ENDIF ;AN000;
375 GOTO choose_shell_screen ;mrw0 ;AC020; SEH goto next screen
376 .ELSE ;AN000;
377 GOTO GET_PRINTER_TYPE ;AN000;
378 .ENDIF ;AN000;
379;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
380SELECT ENDS ;AN000;
381 END ;AN000;
diff --git a/v4.0/src/SELECT/SELECT3.ASM b/v4.0/src/SELECT/SELECT3.ASM
new file mode 100644
index 0000000..64c46c5
--- /dev/null
+++ b/v4.0/src/SELECT/SELECT3.ASM
@@ -0,0 +1,286 @@
1
2
3PAGE 60,132 ;AN000;
4NAME SELECT ;AN000;
5TITLE SELECT - DOS - SELECT.EXE ;AN000;
6SUBTTL SELECT3.asm ;AN000;
7.ALPHA ;AN000;
8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9;
10; SELECT3.ASM : Copyright 1988 Microsoft
11;
12; DATE: August 8/87
13;
14; COMMENTS: Assemble with MASM 3.0 (using the -A option)
15;
16; Panel flow is defined in the following files:
17;
18; � SELECT1.ASM
19; � SELECT2.ASM
20; � SELECT3.ASM
21; � SELECT4.ASM
22; � SELECT5.ASM
23; � SELECT6.ASM
24;
25;
26; The following screens are contained in this module:
27; - External diskette parameters
28; - Review selection choice
29; - Review selections for fixed disk
30; - Review selections for diskette
31;
32;
33; ;AN001; GHG changes for 0 Parallel/Serial printer ports
34;
35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
36DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; Dummy DATA Seg
37 EXTRN SEG_LOC:WORD ;AN000;
38 EXTRN NAMES_OFF:WORD ;AN000;
39 EXTRN N_PRN_NAMES:WORD ;AN000;
40 EXTRN MAX_NAME:WORD ;AN000;
41 EXTRN SIZE_NAMES:ABS ;AN000;
42DATA ENDS ;AN000;
43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
44;
45;
46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
47.XLIST ;AN000;
48 INCLUDE PANEL.MAC ;AN000;
49 INCLUDE SELECT.INC ;AN000;
50 INCLUDE PAN-LIST.INC ;AN000;
51 INCLUDE CASTRUC.INC ;AN000;
52 INCLUDE STRUC.INC ;AN000;
53 INCLUDE MACROS.INC ;AN000;
54 INCLUDE EXT.INC ;AN000;
55 INCLUDE VARSTRUC.INC ;AN000;
56 INCLUDE ROUT_EXT.INC ;AN000;
57.LIST ;AN000;
58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
59;
60; Continuation of code ...
61;
62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
63SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;
64 ASSUME CS:SELECT,DS:DATA ;AN000;
65 ;
66 INCLUDE CASEXTRN.INC ;AN000;
67 ;
68 EXTRN EXIT_SELECT:NEAR ;AN000;
69 EXTRN INSTALL_ERROR:NEAR ;AN000;
70 EXTRN PROCESS_ESC_F3:NEAR ;AN000;
71 EXTRN DOS_PARAMETERS_SCREEN:NEAR ;AN000;
72 EXTRN EXIT_DOS:NEAR ;AN000;
73 EXTRN FIRST_DISK_SCREEN:NEAR ;AN000;
74 PUBLIC choose_shell_screen ;AC020; SEH
75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
76;
77; ������������������������������������Ŀ
78; �choose_shell_screen �
79; � �
80; ��������������������������������������
81;
82; The CHOOSE SHELL SCREEN is always presented.
83; This screen allows the user to decide whether or not the DOS
84; shell will be installed.
85; Valid keys are ENTER, ESC, F1, F3 and numeric 1 and 2.
86;----
87; Note: This screen (and, hence, all shell support) can be eradicated
88; by defining the symbol NOSHELL.
89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
90choose_shell_screen: ;AN000;
91IFNDEF NOSHELL
92 INIT_PQUEUE PAN_choose_shell ;AN000; initialize queue
93 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
94 PREPARE_CHILDREN ;AN000; prepare child panels
95 INIT_SCROLL SCR_choose_shell, f_shell ;AN000;
96 DISPLAY_PANEL ;AN000; display CHOOSE SHELL SCREEN
97 ;
98 GET_SCROLL SCR_choose_shell, f_shell, FK_SCROLL ;AN000; get new shell option
99 ;
100 .IF < N_USER_FUNC eq E_ENTER > ;AN000; if user entered ENTER key
101 .THEN ;AN000;
102 COPY_WORD f_shell, I_USER_INDEX ;AN000; save new shell option
103 PUSH_HEADING choose_shell_screen ;AN000; save address on SELECT STACK
104 GOTO REVIEW_SELECTION_SCREEN ;AN000; goto the next screen (REVIEW_SELECTION)
105 .ELSE ;AN000;
106 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC or F3, take action
107 .ENDIF ;AN000;
108ENDIF
109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
110;
111; ������������������������������������Ŀ
112; �REVIEW_SELECTION_SCREEN �
113; � �
114; ��������������������������������������
115;
116; The REVIEW SELECTION SCREEN is always presented.
117; The screen asks the user if SELECT generated choices are to be presented.
118; Valid keys are ENTER, ESC, F1, F3 and numeric 1 and 2.
119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
120REVIEW_SELECTION_SCREEN: ;AN000;
121 INIT_PQUEUE PAN_REVIEW ;AN000; initialize queue
122 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
123 PREPARE_CHILDREN ;AN000; prepare child panels
124 INIT_SCROLL SCR_REVIEW, F_REVIEW ;AN000;
125 DISPLAY_PANEL ;AN000; display REVIEW SELECTION SCREEN
126 ;
127 GET_SCROLL SCR_REVIEW, F_REVIEW, FK_SCROLL ;AN000; get new review option
128 ;
129 .IF < N_USER_FUNC eq E_ENTER > ;AN000; if user entered ENTER key
130 .THEN ;AN000;
131 COPY_WORD F_REVIEW, I_USER_INDEX ;AN000; save new review option
132 PUSH_HEADING REVIEW_SELECTION_SCREEN ;AN000; save address on SELECT STACK
133 GOTO REVIEW_DISK_SCREEN ;AN000; goto the next screen (REVIEW_FUNCTIONS)
134 .ELSE ;AN000;
135 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC or F3, take action
136 .ENDIF ;AN000;
137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
138;
139; ������������������������������������Ŀ
140; �REVIEW_DISK_SCREEN �
141; � �
142; ��������������������������������������
143;
144; The REVIEW SELECT DOS FUNCTIONS SELECTION SCREEN is presented if
145; the user selected to view/change the selections generated by
146; SELECT ( F_REVIEW = 2 )
147; The screen asks the user to select functions required from the
148; displayed list. Functions are Code Page Switching, Expanded Memory Support,
149; ANSI.SYS support, FASTOPEN support, GRAFTABL support, GRAPHICS support,
150; SHARE support, and VDISK support.
151; There are two versions of this screen. The screen version displayed
152; will depend on whether the install destination is drive B:/A: or drive C:.
153; This screen version will be presented if install destination is drive C:.
154; The screen lists the parameters for which selections have been made by
155; SELECT. The user may accept these choices (yes/no)
156; or change them by cursoring to the parameter and pressing the SPACE key.
157; The SPACE key will toggle the choice for the selected parameter.
158; The cursor key is used to move to the next item on the parameter list.
159; If the cursor is on the last item in the parameter list, cursor down key
160; will cause the cursor to wrap around to the first item of the parameter list.
161; If the cursor is on the first item in the parameter list, cursor up key
162; will cause the cursor to wrap around to the last item of the parameter list.
163; When the SPACE key is depressed, the current parameter value is saved in
164; a temporary location. The temporary parameter values are copied to actual
165; values only when the ENTER key is depressed.
166; Valid keys are ENTER, ESC, F1, F3, SPACE, cursor up and cursor down.
167; If a parameter is not supported due to the hardware environment, the
168; choice presented to the user will be NO but internally will be stored as N/A.
169; a N/A choice would not be toggled by the user and a beep would be issued
170; instead.
171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
172REVIEW_DISK_SCREEN: ;AN000;
173 .IF < F_REVIEW eq E_REVIEW_ACCEPT > ;AN000; if accept SELECT generated commands
174 .THEN ;AN000;
175 GOTO FIRST_DISK_SCREEN ;AN000; skip related screens
176 .ENDIF ;AN000;
177 ;
178 .IF < I_DEST_DRIVE ne E_DEST_DRIVE_C > ;AC000; if install to drive B: or A: JW
179 .THEN ;AN000;
180 GOTO REVIEW_DISKETTE_SCREEN ;AN000; goto disket functions screen
181 .ENDIF ;AN000;
182 ;
183 INIT_PQUEUE PAN_FUNC_DISK ;AN000; initialize queue
184 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
185 PREPARE_CHILDREN ;AN000; prepare child panels
186 INIT_SCROLL SCR_FUNC_DISK, 0 ;AN000;
187 INIT_SUPPORT SUPPORT_STATUS,E_CPSW_C, F_CPSW ;AN000; cpsw support
188 INIT_SUPPORT SUPPORT_STATUS, E_XMA_C, F_XMA ;AN000; expanded memory support
189 INIT_SUPPORT SUPPORT_STATUS,E_ANSI_C, F_ANSI ;AN000; ANSI.SYS support
190 INIT_SUPPORT SUPPORT_STATUS,E_FASTOPEN_C,F_FASTOPEN;AN000; FASTOPEN support
191 INIT_SUPPORT SUPPORT_STATUS,E_GRAFTABL_C,F_GRAFTABL;AN000; GRAFTABL support
192 INIT_SUPPORT SUPPORT_STATUS,E_GRAPHICS_C,F_GRAPHICS;AN000; GRAPHICS support
193 INIT_SUPPORT SUPPORT_STATUS,E_SHARE_C,F_SHARE;AN000; SHARE support
194 INIT_SUPPORT SUPPORT_STATUS,E_SHELL_C,F_SHELL;AN000; SHELL support
195 INIT_SUPPORT SUPPORT_STATUS,E_VDISK_C,F_VDISK;AN000; VDISK support
196 INIT_SCROLL_STATUS SCR_FUNC_DISK,SUPPORT_STATUS ;AN000;
197 DISPLAY_PANEL ;AN000; display functions list screen
198 ;
199 INIT_VAR I_USER_INDEX, 1 ;AN000; set counter = 1
200 ;
201 .REPEAT ;AN000; repeat code block
202 ;
203 GET_SCROLL SCR_FUNC_DISK,I_USER_INDEX,FK_REVIEW ;AN000; get new value
204 ;
205 .IF < N_USER_FUNC eq E_SPACE > ;AN000; if user entered TAB
206 .THEN ;AN000;
207 TOGGLE_SUPPORT SUPPORT_STATUS, I_USER_INDEX ;AN000; toggle support of parameter
208 .ELSE ;AN000; else
209 .LEAVE ;AN000; break from repeat loop
210 .ENDIF ;AN000;
211 ;
212 .UNTIL ;AN000; end of repeat loop
213 ;
214 .IF < N_USER_FUNC eq E_ENTER > near ;AN000; if user entered ENTER key
215 .THEN ;AN000; get revised values for
216 RET_SUPPORT SUPPORT_STATUS,E_CPSW_C, F_CPSW ;AN000; cpsw support
217 RET_SUPPORT SUPPORT_STATUS, E_XMA_C, F_XMA ;AN000; expanded memory support
218 RET_SUPPORT SUPPORT_STATUS,E_ANSI_C, F_ANSI ;AN000; ANSI.SYS support
219 RET_SUPPORT SUPPORT_STATUS,E_FASTOPEN_C,F_FASTOPEN;AN000; FASTOPEN support
220 RET_SUPPORT SUPPORT_STATUS,E_GRAFTABL_C,F_GRAFTABL;AN000; GRAFTABL support
221 RET_SUPPORT SUPPORT_STATUS,E_GRAPHICS_C,F_GRAPHICS;AN000; GRAPHICS support
222 RET_SUPPORT SUPPORT_STATUS,E_SHARE_C,F_SHARE;AN000; SHARE support
223 RET_SUPPORT SUPPORT_STATUS,E_SHELL_C,F_SHELL;AN000; SHELL support
224 RET_SUPPORT SUPPORT_STATUS,E_VDISK_C,F_VDISK;AN000; VDISK support
225 PUSH_HEADING REVIEW_DISK_SCREEN ;AN000; save screen address on SELECT STACK
226 GOTO DOS_PARAMETERS_SCREEN ;AN000; goto the next screen (DOS_PARAMETERS)
227 .ELSE ;AN000;
228 GOTO PROCESS_ESC_F3 ;AN000; user entered ESCAPE or F3, take action
229 .ENDIF ;AN000;
230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
231;
232; ������������������������������������Ŀ
233; �REVIEW_DISKETTE_SCREEN �
234; � �
235; ��������������������������������������
236;
237; The REVIEW SELECT DOS FUNCTIONS SELECTION SCREEN is presented if
238; the user selected to view/change the selections generated by
239; SELECT ( F_REVIEW = 2 )
240; This screen version will be presented if install destination is drive A:/B:
241;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
242REVIEW_DISKETTE_SCREEN: ;AN000;
243 INIT_PQUEUE PAN_FUNC_DISKET ;AN000; initialize queue
244 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
245 PREPARE_CHILDREN ;AN000; prepare child panels
246 INIT_SCROLL SCR_FUNC_DISKET, 0 ;AN000;
247 INIT_SUPPORT SUPPORT_STATUS,E_CPSW_B, F_CPSW ;AN000; cpsw support
248 INIT_SUPPORT SUPPORT_STATUS,E_ANSI_B, F_ANSI ;AN000; ANSI.SYS support
249 INIT_SUPPORT SUPPORT_STATUS,E_GRAFTABL_B,F_GRAFTABL;AN000; GRAFTABL support
250 INIT_SUPPORT SUPPORT_STATUS,E_GRAPHICS_B,F_GRAPHICS;AN000; GRAPHICS support
251 INIT_SUPPORT SUPPORT_STATUS,E_SHELL_B,F_SHELL;AN000; SHELL support
252 INIT_SUPPORT SUPPORT_STATUS,E_VDISK_B,F_VDISK;AN000; VDISK support
253 INIT_SCROLL_STATUS SCR_FUNC_DISKET, SUPPORT_STATUS ;AN000;
254 DISPLAY_PANEL ;AN000; display functions list screen
255 ;
256 INIT_VAR I_USER_INDEX, 1 ;AN000; set counter = 1
257 ;
258 .REPEAT ;AN000; repeat code block
259 ;
260 GET_SCROLL SCR_FUNC_DISKET,I_USER_INDEX,FK_REVIEW;AN000; get new value
261 ;
262 .IF < N_USER_FUNC eq E_SPACE > ;AN000; if user entered TAB
263 .THEN ;AN000;
264 TOGGLE_SUPPORT SUPPORT_STATUS, I_USER_INDEX ;AN000; toggle support of parameter
265 .ELSE ;AN000;
266 .LEAVE ;AN000; else
267 .ENDIF ;AN000; break from loop
268 ;
269 .UNTIL ;AN000; end of repeat block
270 ;
271 .IF < N_USER_FUNC eq E_ENTER > near ;AN000; if user entered ENTER key
272 .THEN ;AN000; get revised values
273 RET_SUPPORT SUPPORT_STATUS,E_CPSW_B, F_CPSW ;AN000; cpsw support
274 RET_SUPPORT SUPPORT_STATUS,E_ANSI_B, F_ANSI ;AN000; ANSI.SYS support
275 RET_SUPPORT SUPPORT_STATUS,E_GRAFTABL_B,F_GRAFTABL;AN000; GRAFTABL support
276 RET_SUPPORT SUPPORT_STATUS,E_GRAPHICS_B,F_GRAPHICS;AN000; GRAPHICS support
277 RET_SUPPORT SUPPORT_STATUS,E_SHELL_B,F_SHELL;AN000; SHELL support
278 RET_SUPPORT SUPPORT_STATUS,E_VDISK_B,F_VDISK;AN000; VDISK support
279 PUSH_HEADING REVIEW_DISKETTE_SCREEN ;AN000; save screen address onto SELECT STACK
280 GOTO DOS_PARAMETERS_SCREEN ;AN000; goto the next screen (DOS_PARAMETERS)
281 .ELSE ;AN000;
282 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC or E3, take action
283 .ENDIF ;AN000;
284;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
285SELECT ENDS ;AN000;
286 END ;AN000;
diff --git a/v4.0/src/SELECT/SELECT4.ASM b/v4.0/src/SELECT/SELECT4.ASM
new file mode 100644
index 0000000..bd56ddd
--- /dev/null
+++ b/v4.0/src/SELECT/SELECT4.ASM
@@ -0,0 +1,438 @@
1
2
3PAGE 55,132 ;AN000;
4NAME SELECT ;AN000;
5TITLE SELECT - DOS - SELECT.EXE ;AN000;
6SUBTTL SELECT4.asm ;AN000;
7.ALPHA ;AN000;
8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9;
10; SELECT4.ASM : Copyright 1988 Microsoft
11;
12; DATE: August 8/87
13;
14; COMMENTS: Assemble with MASM 3.0 (using the /A option)
15;
16; Panel flow is defined in the following files:
17;
18; � SELECT1.ASM
19; � SELECT2.ASM
20; � SELECT3.ASM
21; � SELECT4.ASM
22; � SELECT5.ASM
23; � SELECT6.ASM
24;
25;
26;
27; Module contains code for :
28; - DOS parameters screen
29; - SHELL parameters screen
30; - FASTOPEN parameters screen
31; - SHARE screen
32; - GRAPHICS parameter screen
33; - EXPANDED MEMORY parameters screen
34;
35;
36; CHANGE HISTORY:
37;
38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
39DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
40DATA ENDS ;AN000;
41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
42;
43;
44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
45.XLIST ;AN000;
46 INCLUDE PANEL.MAC ;AN000;
47 INCLUDE SELECT.INC ;AN000;
48 INCLUDE PAN-LIST.INC ;AN000;
49 INCLUDE CASTRUC.INC ;AN000;
50 INCLUDE STRUC.INC ;AN000;
51 INCLUDE MACROS.INC ;AN000;
52 INCLUDE EXT.INC ;AN000;
53 INCLUDE VARSTRUC.INC ;AN000;
54 INCLUDE ROUT_EXT.INC ;AN000;
55.LIST ;AN000;
56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
57;
58;
59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
60 ;
61SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine
62 ASSUME CS:SELECT,DS:DATA ;AN000;
63 ;
64 INCLUDE CASEXTRN.INC ;AN000;
65 ;
66HLP_OVER EQU 00010000B ;AN000;
67ICB_OUT EQU 0000000100000000B ;AN000;display default and accept input
68 ;
69 PUBLIC DOS_PARAMETERS_SCREEN ;AN000;
70 EXTRN EXIT_SELECT:NEAR ;AN000;
71 EXTRN PROCESS_ESC_F3:NEAR ;AN000;
72 EXTRN FIRST_DISK_SCREEN:NEAR ;AN000;
73 EXTRN VDISK_SCREEN:NEAR ;AN000;
74 EXTRN EXIT_DOS:NEAR ;AN000;
75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
76;
77; ������������������������������������Ŀ
78; �DOS_PARAMETERS_SCREENS �
79; � �
80; ��������������������������������������
81;
82; The DOS PARAMETERS SCREEN is presented if the user selected to
83; view/change the selections generated by SELECT ( F_REVIEW = 2 ).
84; The screen gets various DOS parameters (PATH, APPEND, PROMPT).
85; The TAB key is used to move to the next item on the parameter list.
86; If the cursor is on the last item in the parameter list, TAB key
87; will cause the cursor to wrap around to the first item of the parameter list.
88; When the TAB key is depressed, the current parameter value is saved in
89; a temporary location. The temporary parameter values are copied to actual
90; values only when the ENTER key is depressed.
91; Valid keys are ENTER, ESC, F1, F3, TAB and ASCII characters.
92; Since the DOS parameters APPEND and PATH are only useful for hard
93; disk based systems, an additional check of install to drive C: has been
94; included. This check is not specified in the Functional Specification.
95; PROMPT parameter values are not checked for validity.
96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
97DOS_PARAMETERS_SCREEN: ;AN000; if user accepts choices
98 .IF < F_REVIEW eq E_REVIEW_ACCEPT > ;AN000;
99 .THEN ;AN000;
100 GOTO FIRST_DISK_SCREEN ;AN000; goto FIRST_DISK_SCREEN
101 .ENDIF ;AN000;
102 ;
103 .IF < I_DEST_DRIVE ne E_DEST_DRIVE_C > ;AC000; if install to drive B: or A: JW
104 .THEN ;AN000;
105 GOTO SHELL_SCREEN ;AN000; goto next screen
106 .ENDIF ;AN000;
107 ;
108 COPY_STRING S_STR120_1, M_STR120_1, S_PATH ;AN000; copy PATH to temp location
109 COPY_STRING S_STR40, M_STR40, S_APPEND_P ;AN000; copy APPEND parameters to temp location JW
110 COPY_STRING S_STR120_2, M_STR120_2,S_APPEND ;AN000; copy APPEND to temp location
111 COPY_STRING S_STR120_3, M_STR120_3,S_PROMPT ;AN000; copy PROMPT to temp location
112 ;
113 INIT_PQUEUE PAN_DOS_PARAM ;AN000; initialize queue
114 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
115 PREPARE_CHILDREN ;AN000; prepare child panels
116 INIT_STRING STR_DOS_PATH,S_STR120_1, M_PATH ;AN000; display current PATH value
117 INIT_STRING STR_DOS_APPEND_P,S_STR40,M_APPEND_P ;AN000; display current APPEND parameters value JW
118 INIT_STRING STR_DOS_APPEND,S_STR120_2,M_APPEND ;AN000; display current APPEND value
119 INIT_STRING STR_DOS_PROMPT,S_STR120_3,M_PROMPT ;AN000; display current PROMPT value
120 DISPLAY_PANEL ;AN000; display PC/DOS parameters panel
121 ;
122 INIT_VAR N_COUNTER, 1 ;AN000; set counter = 1
123 ;
124GET_PARAMETERS: ;AN000;
125 ;
126 .REPEAT ;AN000; repeat code block
127 ;
128 .SELECT ;AN000;
129 ;
130 .WHEN < N_COUNTER eq 1 > ;AN000;
131 GET_STRING STR_DOS_PATH,S_STR120_1,M_PATH,FK_TAB ;AN000; get user parameters for PATH
132 COPY_STRING S_STR120_1,M_STR120_1,S_USER_STRING ;AN000; save parameter in temp location
133 ;
134 .WHEN < N_COUNTER eq 2 > ;AN000; JW
135 GET_STRING STR_DOS_APPEND_P,S_STR40,M_APPEND_P,FK_TAB ;AN000; get user parameters for APPEND JW
136 COPY_STRING S_STR40,M_STR40,S_USER_STRING ;AN000; save parameter in temp location JW
137 ;
138 .WHEN < N_COUNTER eq 3 > ;AN000;
139 GET_STRING STR_DOS_APPEND,S_STR120_2,M_APPEND,FK_TAB ;AN000; get user path for APPEND
140 COPY_STRING S_STR120_2,M_STR120_2,S_USER_STRING ;AN000; save parameter in temp location
141 ;
142 .OTHERWISE ;AN000;
143 GET_STRING STR_DOS_PROMPT,S_STR120_3,M_PROMPT,FK_TAB ;AN000; get user parameters for PROMPT
144 COPY_STRING S_STR120_3,M_STR120_3,S_USER_STRING ;AN000; save parameter in temp location
145 ;
146 .ENDSELECT ;AN000;
147 ;
148 INC_VAR N_COUNTER ;AN000; inc counter
149 ;
150 .IF < N_COUNTER a 4 > ;AN000; if counter > 3
151 .THEN ;AN000;
152 INIT_VAR N_COUNTER, 1 ;AN000; set counter = 1
153 .ENDIF ;AN000;
154 ;
155 .UNTIL < N_USER_FUNC eq E_ENTER > or near ;AN000; break loop if ENTER entered
156 .UNTIL < N_USER_FUNC eq E_ESCAPE > or near ;AN000; or ESCAPE entered
157 .UNTIL < N_USER_FUNC eq E_F3 > near ;AN000; or F3 entered
158 ;
159 PROCESS_ESC ;AN000;
160 PROCESS_F3 ;AN000;
161 ;
162 CHECK_DOS_PATH S_STR120_1 ;AN000; check PATH path
163 .IF c ;AN000;
164 .THEN ;AN000;
165 HANDLE_ERROR ERR_BAD_PATH, E_RETURN ;AN000;
166 INIT_VAR N_COUNTER, 1 ;AN000;
167 GOTO GET_PARAMETERS ;AN000;
168 .ENDIF ;AN000;
169 ;
170 CHECK_DOS_PATH S_STR120_2 ;AN000; check APPEND path
171 .IF c ;AN000;
172 .THEN ;AN000;
173 HANDLE_ERROR ERR_BAD_PATH, E_RETURN ;AN000;
174 INIT_VAR N_COUNTER,2 ;AN000;
175 GOTO GET_PARAMETERS ;AN000;
176 .ENDIF ;AN000;
177 ;
178 COPY_STRING S_PATH, M_PATH, S_STR120_1 ;AN000; save PATH parameter
179 COPY_STRING S_APPEND_P, M_APPEND_P, S_STR40 ;AN000; save APPEND parameter JW
180 COPY_STRING S_APPEND, M_APPEND, S_STR120_2 ;AN000; save APPEND path
181 COPY_STRING S_PROMPT, M_PROMPT, S_STR120_3 ;AN000; save PROMPT parameter
182 PUSH_HEADING DOS_PARAMETERS_SCREEN ;AN000; save screen address on SELECT STACK
183 GOTO SHELL_SCREEN ;AN000; goto the next screen (SHELL)
184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
185;
186; ������������������������������������Ŀ
187; �SHELL_SCREEN �
188; � �
189; ��������������������������������������
190;
191; The SHELL PARAMETERS SCREEN is presented if the user selected to
192; install SHELL support and the user wants to view/change parameters.
193; Note.The view/change parameters condition is not specified in the May 5, 1987
194; Functional Specification.
195; The screen gets the parameters for SHELL.
196; Valid keys are ENTER, ESC, F1, F3 and ASCII characters.
197; Note.User entered parameter values are not checked for validity.
198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
199SHELL_SCREEN: ;AN000;
200 .IF < F_SHELL eq E_SHELL_NO > ;AN000; if SHELL support is not required
201 .THEN ;AN000;
202 GOTO FASTOPEN_SCREEN ;AN000; goto the next screen (KSAM)
203 .ENDIF ;AN000;
204 ;
205 INIT_PQUEUE PAN_SHELL ;AN000; initialize queue
206 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
207 PREPARE_CHILDREN ;AN000; prepare child panels
208 INIT_STRING STR_SHELL,S_SHELL,M_SHELL ;AN000; get SHELL parameters
209 DISPLAY_PANEL ;AN000; display SHELL panel
210 ;
211 GET_STRING STR_SHELL,S_SHELL,M_SHELL,FK_TEXT ;AN000; get SHELL parameters
212 ;
213 .IF < N_USER_FUNC eq E_ENTER > ;AN000; if user entered ENTER key
214 .THEN ;AN000;
215 COPY_STRING S_SHELL, M_SHELL, S_USER_STRING ;AN000; save new SHELL parameters
216 PUSH_HEADING SHELL_SCREEN ;AN000; save screen address on SELECT STACK
217 GOTO FASTOPEN_SCREEN ;AN000; goto the next screen (KSAM)
218 .ELSE ;AN000;
219 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC or F3, take action
220 .ENDIF ;AN000;
221;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
222;
223; ������������������������������������Ŀ
224; �FASTOPEN_SCREEN �
225; � �
226; ��������������������������������������
227;
228; The FASTOPEN PARAMETERS SCREEN is presented if the user selected to
229; install FASTOPEN support and the user wants to view/change the parameters.
230; Note.The view/change parameters condition is not specified in the May 5, 1987
231; Functional Specification.
232; The screen gets parameters for the FASTOPEN command.
233; Valid keys are ENTER, ESC, F1, F3 and ASCII characters.
234; Note.User entered parameter values are not checked for validity.
235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
236FASTOPEN_SCREEN: ;AN000;
237 .IF < F_FASTOPEN eq E_FASTOPEN_NO > or ;AN000; if FASTOPEN support not required
238 .IF < I_DEST_DRIVE ne E_DEST_DRIVE_C > ;AC000;JW
239 .THEN ;AN000;
240 GOTO SHARE_SCREEN ;AN000; goto next screen (SHARE)
241 .ENDIF ;AN000;
242 ;
243 INIT_PQUEUE PAN_FASTOPEN ;AN000; initialize queue
244 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
245 PREPARE_CHILDREN ;AN000; prepare child panels
246 INIT_STRING STR_FASTOPEN,S_FASTOPEN,M_FASTOPEN ;AN000; get new parameters for FASTOPEN
247 DISPLAY_PANEL ;AN000; display FASTOPEN panel
248 ;
249 GET_STRING STR_FASTOPEN,S_FASTOPEN,M_FASTOPEN,FK_TEXT ;AN000; get new parameters for FASTOPEN
250 ;
251 .IF < N_USER_FUNC eq E_ENTER > ;AN000; if user entered ENTER key
252 .THEN ;AN000;
253 COPY_STRING S_FASTOPEN,M_FASTOPEN,S_USER_STRING ;AN000;save new parameters for FASTOPEN
254 PUSH_HEADING FASTOPEN_SCREEN ;AN000; save screen address on SELECT STACK
255 GOTO SHARE_SCREEN ;AN000; goto the next screen (SHARE)
256 .ELSE ;AN000;
257 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC or F3, take action
258 .ENDIF ;AN000;
259;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
260;
261; ������������������������������������Ŀ
262; �SHARE_SCREEN �
263; � �
264; ��������������������������������������
265;
266; The SHARE PARAMETERS SCREEN is presented if the user selected to
267; install SHARE support and the user wants to view/change parameters.
268; Note.The view/change parameters condition is not specified in the May 5, 1987
269; Functional Specification.
270; The screen gets parameters for the SHARE command.
271; Valid keys are ENTER, ESC, F1, F3 and ASCII characters.
272; Note.User entered parameter values are not checked for validity.
273;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
274SHARE_SCREEN: ;AN000;
275 .IF < F_SHARE eq E_SHARE_NO > or ;AN000; if SHARE support not required
276 .IF < I_DEST_DRIVE ne E_DEST_DRIVE_C > ;AC000;JW
277 .THEN ;AN000;
278;; INIT_VAR F_SHARE, E_SHARE_NO ;AN021;
279 GOTO GRAPHICS_SCREEN ;AN000; goto the next screen (GRAPHICS)
280 .ENDIF ;AN000;
281 ;
282 INIT_PQUEUE PAN_SHARE ;AN000; initialize queue
283 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
284 PREPARE_CHILDREN ;AN000; prepare child panels
285 INIT_STRING STR_SHARE,S_SHARE,M_SHARE ;AN000; get new parameters for SHARE
286 DISPLAY_PANEL ;AN000; display SHARE panel
287 ;
288 GET_STRING STR_SHARE,S_SHARE,M_SHARE,FK_TEXT ;AN000; get new parameters for SHARE
289 ;
290 .IF < N_USER_FUNC eq E_ENTER > ;AN000; if user entered ENTER key
291 .THEN ;AN000;
292 COPY_STRING S_SHARE, M_SHARE, S_USER_STRING ;AN000; save new parameters for SHARE
293 PUSH_HEADING SHARE_SCREEN ;AN000; save screen address on SELECT STACK
294 GOTO GRAPHICS_SCREEN ;AN000; goto the next screen (GRAPHICS)
295 .ELSE ;AN000;
296 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC or F3, take action
297 .ENDIF ;AN000;
298;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
299;
300; ������������������������������������Ŀ
301; �GRAPHICS_SCREEN �
302; � �
303; ��������������������������������������
304;
305; The GRAPHICS PARAMETERS SCREEN is presented if the user selected to
306; install GRAPHICS support and the user wants to view/change parameters.
307; Note.The view/change parameters condition is not specified in the May 5, 1987
308; Functional Specification.
309; The screen gets parameters for the GRAPHICS command.
310; Valid keys are ENTER, ESC, F1, F3 and ASCII characters.
311; Note.User entered parameter values are not checked for validity.
312;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
313GRAPHICS_SCREEN: ;AN000;
314 .IF < F_GRAPHICS eq E_GRAPHICS_NO > ;AN000; if GRAPHICS support not required
315 .THEN ;AN000;
316 GOTO EXP_MEMORY_SCREEN ;AN000; goto the next screen (EXPANDED_MEM)
317 .ENDIF ;AN000;
318 ;
319 GET_PRINTER_PARAMS 0, 1, N_RETCODE ;AN000;
320 .IF < N_RETCODE eq 1 > ;AN000;
321 .THEN ;AN000;
322 COPY_STRING S_GRAPHICS,M_GRAPHICS,S_GRAPH_PARM ;AN000;
323 .ENDIF ;AN000;
324 ;
325 INIT_PQUEUE PAN_GRAPHICS ;AN000; initialize queue
326 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
327 PREPARE_CHILDREN ;AN000; prepare child panels
328 INIT_STRING STR_GRAPHICS,S_GRAPHICS,M_GRAPHICS ;AN000; get new parameters for GRAPHICS
329 DISPLAY_PANEL ;AN000; display GRAPHICS panel
330 ;
331 GET_STRING STR_GRAPHICS,S_GRAPHICS,M_GRAPHICS,FK_TEXT ;AN000; get new parameters for GRAPHICS
332 ;
333 .IF < N_USER_FUNC eq E_ENTER > ;AN000; if user entered ENTER key
334 .THEN ;AN000;
335 COPY_STRING S_GRAPHICS, M_GRAPHICS, S_USER_STRING ;AN000;save new parameters for GRAPHICS
336 PUSH_HEADING GRAPHICS_SCREEN ;AN000; save screen address on SELECT STACK
337 GOTO EXP_MEMORY_SCREEN ;AN000; goto next screen (EXPANDED_MEMORY)
338 .ELSE ;AN000;
339 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC or F3, take action
340 .ENDIF ;AN000;
341;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
342;
343; ������������������������������������Ŀ
344; �EXP_MEMORY_SCREEN �
345; � �
346; ��������������������������������������
347;
348; The EXPANDED MEMORY PARAMETERS SCREEN is presented if the user selected to
349; install expanded memory support and the user wants to view/change parameters.
350; Note.The view/change parameters condition is not specified in the May 5, 1987
351; Functional Specification.
352; The screen gets parameters for the XMAEM and XMA2EMS commands.
353; The expanded memory commands are only supported if memory above 1000000H
354; is available.
355; The TAB key is used to move to the next item on the parameter list.
356; If the cursor is on the last item in the parameter list, TAB key
357; will cause the cursor to wrap around to the first item of the parameter list.
358; When the TAB key is depressed, the current parameter value is saved in
359; a temporary location. The temporary parameter values are copied to actual
360; values only when the ENTER key is depressed.
361; Valid keys are ENTER, ESC, F1, F3 and ASCII characters.
362; Note.User entered parameter values are not checked for validity.
363;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
364EXP_MEMORY_SCREEN: ;AN000;
365 .IF < F_XMA eq E_XMA_NO > or ;AN000; if XMA support not required
366 .IF < F_XMA eq E_XMA_NA > or ;AN000; or if XMA not available
367 .IF < I_DEST_DRIVE ne E_DEST_DRIVE_C > ;AC000; or if install to drive B: or A: JW
368 .THEN ;AN000;
369 GOTO VDISK_SCREEN ;AN000; goto the next screen (VDISK)
370 .ENDIF ;AN000;
371 ;
372 COPY_STRING S_STR120_1, M_STR120_1, S_XMAEM ;AN000; copy XMAEM to temp location
373 COPY_STRING S_STR120_2,M_STR120_2,S_XMA2EMS ;AN000; copy XMA2EMS to temp location
374 ;
375 .IF < N_MOD80 eq E_IS_MOD80 > ;AN000; JW
376 .THEN ;AN000; JW
377 INIT_PQUEUE PAN_EXP_MEMORY ;AN000; initialize queue
378 .ELSE ;AN000; JW
379 INIT_PQUEUE PAN_EXP_MEMORY2 ;AN000; initialize queue JW
380 .ENDIF ;AN000; JW
381 ;
382 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
383 PREPARE_CHILDREN ;AN000; prepare child panels
384 ;
385 .IF < N_MOD80 eq E_IS_MOD80 > ;AN000; JW
386 .THEN ;AN000; JW
387 INIT_STRING STR_XMAEM,S_STR120_1,M_XMAEM ;AN000; display parameter for XMAEM
388 .ENDIF ;AN000; JW
389 ;
390 INIT_STRING STR_XMA2EMS,S_STR120_2,M_XMA2EMS ;AN000; display XMA2EMS parameters
391 DISPLAY_PANEL ;AN000; display EXPANDED_MEMORY panel
392 ;
393 ;
394 .IF < N_MOD80 eq E_IS_MOD80 > near ;AN000; JW
395 .THEN ;AN000; JW
396 INIT_VAR N_COUNTER,1 ;AN000; set counter = 1
397 ;
398 .REPEAT ;AN000; repeat block of code
399 ;
400 .SELECT ;AN000;
401 ;
402 .WHEN < N_COUNTER eq 1 > near ;AN000;
403 GET_STRING STR_XMAEM,S_STR120_1,M_XMAEM,FK_TAB;AN000; get new parameter for XMAEM
404 COPY_STRING S_STR120_1,M_STR120_1,S_USER_STRING;AN000; save parameter in temp location
405 ;
406 .OTHERWISE ;AN000;
407 GET_STRING STR_XMA2EMS,S_STR120_2,M_XMA2EMS,FK_TAB ;AN000;get new parameter for XMA2EMS
408 COPY_STRING S_STR120_2,M_STR120_2,S_USER_STRING ;AN000; save parameter in temp location
409 ;
410 .ENDSELECT ;AN000;
411 ;
412 INC_VAR N_COUNTER ;AN000;
413 ;
414 .IF < N_COUNTER a 2 > ;AN000;
415 .THEN ;AN000;
416 INIT_VAR N_COUNTER,1 ;AN000;
417 .ENDIF ;AN000;
418 ;
419 .UNTIL < N_USER_FUNC eq E_ENTER > or near ;AN000; break loop if ENTER entered
420 .UNTIL < N_USER_FUNC eq E_ESCAPE > or near ;AN000; or ESCAPE entered
421 .UNTIL < N_USER_FUNC eq E_F3 > near ;AN000; or F3 entered
422 .ELSE ;AN000; JW
423 GET_STRING STR_XMA2EMS,S_STR120_2,M_XMA2EMS,FK_TEXT ;AN000;get new parameter for XMA2EMS JW
424 COPY_STRING S_STR120_2,M_STR120_2,S_USER_STRING ;AN000; save parameter in temp location JW
425 .ENDIF ;AN000; JW
426 ;
427 .IF < N_USER_FUNC eq E_ENTER > ;AN000; if user entered ENTER key
428 .THEN ;AN000;
429 COPY_STRING S_XMAEM, M_XMAEM, S_STR120_1 ;AN000; save new XMAEM parameter
430 COPY_STRING S_XMA2EMS, M_XMA2EMS,S_STR120_2 ;AN000; save new XMA2EMS parameter
431 PUSH_HEADING EXP_MEMORY_SCREEN ;AN000; save screen address on SELECT STACK
432 GOTO VDISK_SCREEN ;AN000; goto next screen (VDISK)
433 .ELSE ;AN000;
434 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC or F3, take action
435 .ENDIF ;AN000;
436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
437SELECT ENDS ;AN000;
438 END ;AN000;
diff --git a/v4.0/src/SELECT/SELECT5.ASM b/v4.0/src/SELECT/SELECT5.ASM
new file mode 100644
index 0000000..68920be
--- /dev/null
+++ b/v4.0/src/SELECT/SELECT5.ASM
@@ -0,0 +1,576 @@
1
2
3PAGE 55,132 ;AN000;
4NAME SELECT ;AN000;
5TITLE SELECT - DOS - SELECT.EXE ;AN000;
6SUBTTL SELECT5.asm ;AN000;
7.ALPHA ;AN000;
8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9;
10; SELECT5.ASM : Copyright 1988 Microsoft
11;
12; DATE: August 8/87
13;
14; COMMENTS: Assemble with MASM 3.0 (using the /A option)
15;
16; Panel flow is defined in the following files:
17;
18; � SELECT1.ASM
19; � SELECT2.ASM
20; � SELECT3.ASM
21; � SELECT4.ASM
22; � SELECT5.ASM
23; � SELECT6.ASM
24;
25; Module contains code for :
26; - VDISK screen
27; - CONFIG.SYS screen
28; - Fixed disk partition screen
29; - Date/Time screen
30;
31; CHANGE HISTORY:
32;
33; ;AN002; for DCR225 by G.G.
34;
35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
36DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
37 EXTRN SEL_FLG:BYTE ;AN000;
38 EXTRN EXEC_DEALLOC:BYTE ;AN000;
39 EXTRN EXEC_FDISK:BYTE ;AN000;DT
40 EXTRN EXEC_ERR:BYTE ;AN000;DT
41 EXTRN BCHAR:BYTE ;AN000;DT
42DATA ENDS ;AN000;
43 ;
44.XLIST ;AN000;
45 INCLUDE PANEL.MAC ;AN000;
46 INCLUDE SELECT.INC ;AN000;
47 INCLUDE CASTRUC.INC ;AN000;
48 INCLUDE STRUC.INC ;AN000;
49 INCLUDE MACROS.INC ;AN000;
50 INCLUDE EXT.INC ;AN000;
51 INCLUDE VARSTRUC.INC ;AN000;
52 INCLUDE ROUT_EXT.INC ;AN000;
53 INCLUDE PAN-LIST.INC ;AN000;
54.LIST ;AN000;
55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
56 ;
57 EXTRN DEALLOCATE_HELP:FAR ;AN000;DT
58 EXTRN ALLOCATE_HELP:FAR ;AN000;DT
59 EXTRN DEALLOCATE_BLOCK:FAR ;AN000;DT
60 EXTRN ALLOCATE_BLOCK:FAR ;AN000;DT
61 EXTRN DEALLOCATE_MEMORY_CALL:FAR ;AN000;DT
62 EXTRN ALLOCATE_MEMORY_CALL:FAR ;AN000;DT
63 EXTRN PM_BASECHAR:BYTE ;AN000;
64 EXTRN PM_BASEATTR:BYTE ;AN000;
65 EXTRN CRD_CCBVECOFF:WORD ;AN000;
66 EXTRN CRD_CCBVECSEG:WORD ;AN000;
67 ;
68 ;
69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
70SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine
71 ASSUME CS:SELECT,DS:DATA ;AN000;
72 ;
73 INCLUDE CASEXTRN.INC ;AN000;
74 ;
75 EXTRN CREATE_AUTOEXEC_BAT:NEAR ;AN000;
76 EXTRN CREATE_CONFIG_SYS:NEAR ;AN000;
77 EXTRN CREATE_SHELL_BAT:NEAR ;AN000;DT
78 EXTRN SCAN_INFO_CALL:NEAR ;AN000;DT
79 EXTRN DATE_TIME_SCREEN:NEAR ;AN000;DT
80 ;
81 PUBLIC FIRST_DISK_SCREEN ;AN000;
82 PUBLIC VDISK_SCREEN ;AN000;
83 EXTRN PROCESS_ESC_F3:near ;AN000;
84 EXTRN FORMAT_DISK_SCREEN:near ;AN000;
85 EXTRN EXIT_DOS:near ;AN000;
86 EXTRN INSTALL_ERROR:near ;AN000;
87 EXTRN EXIT_SELECT:NEAR ;AN000;
88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
89;
90; ������������������������������������Ŀ
91; �VDISK_SCREEN �
92; � �
93; ��������������������������������������
94;
95; The VDISK PARAMETERS SCREEN is presented if the user selected to
96; install virtual disk support and the user wants to view/change parameters.
97; Note.The view/change parameters condition is not specified in the May 5, 1987
98; Functional Specification.
99; The screen gets parameters for the VDISK command.
100; Valid keys are ENTER, ESC, F1, F3 and ASCII characters.
101; Note.User entered parameter values are not checked for validity.
102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
103VDISK_SCREEN: ;AN000;
104 .IF < F_VDISK eq E_VDISK_NO > ;AN000; if VDISK support not required
105 GOTO CONFIG_SYS_SCREEN ;AN000; goto the next screen (CONFIG.SYS)
106 .ENDIF ;AN000;
107 ;
108 INIT_PQUEUE PAN_VDISK ;AN000; initialize queue
109 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
110 PREPARE_CHILDREN ;AN000; prepare child panels
111 INIT_STRING STR_VDISK,S_VDISK,M_VDISK ;AN000; get new parameters for VDISK
112 DISPLAY_PANEL ;AN000; display VDISK panel
113 ;
114 GET_STRING STR_VDISK,S_VDISK,M_VDISK,FK_TEXT ;AN000; get new parameters for VDISK
115 ;
116 .IF < N_USER_FUNC eq E_ENTER > ;AN000; if user entered ENTER key
117 COPY_STRING S_VDISK, M_VDISK, S_USER_STRING ;AN000; save new parameters for VDISK
118 PUSH_HEADING VDISK_SCREEN ;AN000; save screen address on SELECT STACK
119 GOTO CONFIG_SYS_SCREEN ;AN000; goto the next screen (CONFIG.SYS)
120 .ELSE ;AN000;
121 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC or F3, take action
122 .ENDIF ;AN000;
123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
124;
125; ������������������������������������Ŀ
126; �CONFIG_SYS_SCREEN �
127; � �
128; ��������������������������������������
129;
130; The CONFIG.SYS PARAMETERS SCREEN is presented if the user selected to
131; view/change SELECT generated commands ( F_REVIEW = 2 ).
132; The screen gets parameters for CONFIG.SYS commands ( BREAK, BUFFERS,
133; FCBS, FILES, LASTDRIVE, STACKS, VERIFY ).
134; The TAB key is used to move to the next item on the parameter list.
135; If the cursor is on the last item in the parameter list, TAB key
136; will cause the cursor to wrap around to the first item of the parameter list.
137; When the TAB key is depressed, the current parameter value is saved in
138; a temporary location. The temporary parameter values are copied to actual
139; values only when the ENTER key is depressed.
140; Valid keys are ENTER, ESC, F1, F3, TAB and ASCII characters.
141; Note.User entered parameter values are not checked for validity.
142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
143CONFIG_SYS_SCREEN: ;AN000;
144 COPY_STRING ST_BREAK, MT_BREAK, S_BREAK ;AN000; copy BREAK par to temp location
145 COPY_STRING ST_BUFFERS,MT_BUFFERS,S_BUFFERS ;AN000; copy BUFFERS par to temp location
146 COPY_STRING ST_FCBS, MT_FCBS, S_FCBS ;AN000; copy FCBS par to temp location
147 COPY_STRING ST_FILES, MT_FILES, S_FILES ;AN000; copy FILES par to temp location
148 COPY_STRING ST_LASTDRIVE,MT_LASTDRIVE,S_LASTDRIVE ;AN000; copy LASTDRIVE par to temp location
149 COPY_STRING ST_STACKS, MT_STACKS, S_STACKS ;AN000; copy STACKS par to temp location
150 COPY_STRING ST_VERIFY, MT_VERIFY, S_VERIFY ;AN000; copy VERIFY par to temp location
151 ;
152 INIT_PQUEUE PAN_CONFIG_PARS ;AN000; initialize queue
153 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
154 PREPARE_CHILDREN ;AN000; prepare child panels
155 INIT_STRING STR_BREAK, ST_BREAK, MT_BREAK ;AN000; display BREAK parameters
156 INIT_STRING STR_BUFFERS,ST_BUFFERS,MT_BUFFERS ;AN000; display BUFFERS parameters
157 INIT_STRING STR_FCBS, ST_FCBS, MT_FCBS ;AN000; display FCBS parameters
158 INIT_STRING STR_FILES, ST_FILES, MT_FILES ;AN000; display FILES parameters
159 INIT_STRING STR_LASTDRIVE,ST_LASTDRIVE,MT_LASTDRIVE ;AN000; display LASTDRIVE parameters
160 INIT_STRING STR_STACKS,ST_STACKS, MT_STACKS ;AN000; display STACKS parameters
161 INIT_STRING STR_VERIFY,ST_VERIFY, MT_VERIFY ;AN000; display VERIFY parameters
162 DISPLAY_PANEL ;AN000; display CONFIG.SYS parameters panel
163 ;
164 INIT_VAR N_COUNTER, 1 ;AN000;
165 ;
166 .REPEAT ;AN000; repeat code block
167 ;
168 .SELECT ;AN000;
169 ;
170 .WHEN < N_COUNTER eq 1 > ;AN000;
171 GET_STRING STR_BREAK,ST_BREAK,MT_BREAK,FK_TAB ;AN000; get new parameter for BREAK
172 COPY_STRING ST_BREAK,MT_BREAK,S_USER_STRING ;AN000; save new BREAK parameter
173 ;
174 .WHEN < N_COUNTER eq 2 > ;AN000;
175 GET_STRING STR_BUFFERS,ST_BUFFERS,MT_BUFFERS,FK_TAB ;AN000; get new parameter for BUFFERS
176 COPY_STRING ST_BUFFERS,MT_BUFFERS,S_USER_STRING ;AN000; save new BUFFERS parameter
177 ;
178 .WHEN < N_COUNTER eq 3 > ;AC000;JW
179 GET_STRING STR_FCBS,ST_FCBS,MT_FCBS,FK_TAB ;AN000; get new parameter for FCBS
180 COPY_STRING ST_FCBS, MT_FCBS, S_USER_STRING ;AN000; save new FCBS parameter
181 ;
182 .WHEN < N_COUNTER eq 4 > ;AC000;JW;
183 GET_STRING STR_FILES,ST_FILES,MT_FILES,FK_TAB ;AN000; get new parameter for FILES
184 COPY_STRING ST_FILES,MT_FILES,S_USER_STRING ;AN000; save new FILES parameter
185 ;
186 .WHEN < N_COUNTER eq 5 > ;AC000;JW;
187 GET_STRING STR_LASTDRIVE,ST_LASTDRIVE,MT_LASTDRIVE, FK_TAB ;AN000; get new parameter for LASTDRIVE
188 COPY_STRING ST_LASTDRIVE,MT_LASTDRIVE,S_USER_STRING ;AN000;save new LASTDRIVE parameter
189 ;
190 .WHEN < N_COUNTER eq 6 > ;AC000;JW;
191 GET_STRING STR_STACKS,ST_STACKS,MT_STACKS,FK_TAB ;AN000;get new parameter for STACKS
192 COPY_STRING ST_STACKS,MT_STACKS,S_USER_STRING ;AN000; save new STACKS parameter
193 ;
194 .OTHERWISE ;AN000;
195 GET_STRING STR_VERIFY,ST_VERIFY,MT_VERIFY,FK_TAB ;AN000;get new parameter for VERIFY
196 COPY_STRING ST_VERIFY,MT_VERIFY,S_USER_STRING ;AN000; save new VERIFY parameter
197 ;
198 .ENDSELECT ;AN000;
199 ;
200 INC_VAR N_COUNTER ;AN000; inc counter
201 ;
202 .IF < N_COUNTER a 7 > ;AC000;JW; if counter > 8
203 INIT_VAR N_COUNTER, 1 ;AN000; set counter = 1
204 .ENDIF ;AN000;
205 ;
206 .UNTIL < N_USER_FUNC eq E_ENTER > or near ;AN000; break if loop if ENTER entered
207 .UNTIL < N_USER_FUNC eq E_ESCAPE > or near ;AN000; or ESCAPE entered
208 .UNTIL < N_USER_FUNC eq E_F3 > near ;AN000; or F3 entered
209 ;
210 .IF < N_USER_FUNC eq E_ENTER > near ;AN000; if user entered ENTER key
211 COPY_STRING S_BREAK, M_BREAK, ST_BREAK ;AN000; save BREAK parameter
212 COPY_STRING S_BUFFERS,M_BUFFERS, ST_BUFFERS ;AN000; save BUFFERS parameter
213 COPY_STRING S_FCBS, M_FCBS, ST_FCBS ;AN000; save FCBS parameter
214 COPY_STRING S_FILES, M_FILES, ST_FILES ;AN000; save FILES parameter
215 COPY_STRING S_LASTDRIVE,M_LASTDRIVE,ST_LASTDRIVE ;AN000;save LASTDRIVE parameter
216 COPY_STRING S_STACKS, M_STACKS, ST_STACKS ;AN000; save STACKS parameter
217 COPY_STRING S_VERIFY, M_VERIFY, ST_VERIFY ;AN000; save VERIFY parameter
218 PUSH_HEADING CONFIG_SYS_SCREEN ;AN000; save screen address on SELECT STACK
219 GOTO FIRST_DISK_SCREEN ;AN000; goto the first fixed disk screen
220 .ELSE ;AN000;
221 GOTO PROCESS_ESC_F3 ;AN000; user entered ESC or F3, take action
222 .ENDIF ;AN000;
223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
224;
225; ������������������������������������Ŀ
226; �FIRST_DISK_SCREEN �
227; � �
228; ��������������������������������������
229;
230; The PARTITION FIXED DISK SCREEN is presented if the first fixed drive
231; exists and is completely unused.
232; When SELECT is invoked, the system configuration is checked and if fixed
233; disks exist, the fixed disk status is obtained and variables are initialized.
234; The screen allows the user to create partitions for the fixed drive.
235; If the user chooses to let SELECT define partition sizes, the first fixed
236; disk will be partitioned as follows:
237; - A Primary DOS partition is created using the entire disk.
238; SELECT will partition the second fixed disk if it exists as follows:
239; - An Extended DOS partition is created using the entire disk space and a
240; logical drive is created using the entire Extended DOS partition.
241; Valid keys are ENTER, ESC, F1, F3, cursor up/down, 1/2.
242; Note.After FDISK, the partitions have to formatted. Since the system is going
243; to reboot, SELECT must know if the user had created his own partitions or not
244; so that the partitions can be automatically formatted. The MENU parameter
245; in the AUTOEXEC.BAT file is changed FDISK.
246;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
247FIRST_DISK_SCREEN: ;AN000;
248 .IF < I_DEST_DRIVE ne E_DEST_DRIVE_C > or ;AC111;JW
249 .IF < N_DISK_1 eq E_DISK_INV > ;AN000; if first fixed disk not present
250 GOTO DATE_TIME_SCREEN ;AN000; goto DATE_TIME screen
251 .ENDIF ;AN000;
252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
253;
254; ������������������������������������Ŀ
255; �MAKE_BACKUP_DISKETTE �
256; � �
257; � �
258; ��������������������������������������
259;
260; WE NEED TO MAKE A DUPLICATE OF THE SELECT/SHELL DISKETTE
261; FOR R/W PURPOSES!
262;
263;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
264MAKE_BACKUP_DISKETTE: ;AN000;
265 ;
266 .REPEAT ;AN000;JW
267 .REPEAT ;AN000;
268 ;
269 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
270 PREPARE_PANEL PAN_DISKCOPY ;AN000;
271 PREPARE_PANEL PAN_HBAR ;AN000;
272 PREPARE_CHILDREN ;AN000;
273 DISPLAY_PANEL ;AN000;
274 ;
275 GET_FUNCTION FK_ENT_ESC_F3 ;AN002;GHG get user entered function (ENTER or ESC )
276 ;
277 .IF < N_USER_FUNC ne E_ENTER > ;AN002;GHG if user entered ENTER key
278 GOTO PROCESS_ESC_F3 ;AN002;GHG exit to DOS command line
279 .ENDIF ;AN002;GHG
280 ;
281 FIND_FILE S_AUTO_REBOOT, E_FILE_ATTR ;AN000;DT Look for AUTOEXEC.BAT (INSTALL diskette)
282 .LEAVE < nc > ;AN000;DT
283 HANDLE_ERROR ERR_DOS_DISK, E_RETURN ;AN000;DT
284 ;
285 .UNTIL ;AN000;DT
286 ;
287 .IF < MEM_SIZE ne 256 > near ;AN000;DT
288 CALL HOOK_INT_2F ;AN000;GHG
289 .ELSE ;AN000;
290 DEALLOCATE_MEMORY ;AN000;
291 CALL HOOK_INT_2F_256KB ;AN000;
292 .ENDIF ;AN000;
293 ;
294 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK ;AN000;JW
295 EXEC_PROGRAM S_DISKCOPY,S_DISKCOPY_PARM,PARM_BLOCK,EXEC_NO_DIR;AN000; control will not return
296 .IF < c > ;AN000;
297 MOV EXEC_ERR,TRUE ;AN000;
298 .ENDIF ;AN000;
299 CALL RESTORE_INT_2F ;AN000;GHG
300 ;
301 .UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY > near ;AN000;JW
302 ;
303 .IF < MEM_SIZE eq 256 > near ;AN000;DT
304 CLEAR_SCREEN ;AN000;
305 DISPLAY_MESSAGE 12 ;AN000;DT Insert SELECT diskette
306 .REPEAT ;AN000;
307 CALL GET_ENTER_KEY ;AN000; get user entered function
308 FIND_FILE S_DOS_SEL_360, E_FILE_ATTR ;AN000;
309 .LEAVE < nc > ;AN000;
310 DISPLAY_MESSAGE 11 ;AN000;DT Beep
311 .UNTIL ;AN000;
312 ALLOCATE_MEMORY ;AN000;
313 CALL INITIALIZE ;AN000;DT and read them in
314 INITIALIZE_BCHAR BCHAR ;AN000;Initialize the background character
315 INSERT_DISK SUB_INSTALL_COPY, S_DOS_COM_360 ;AN000;JW
316 .ENDIF ;AN000;
317 .IF < EXEC_ERR eq TRUE > ;AN000;
318 HANDLE_ERROR ERR_GENERAL, E_RETURN ;AN000;
319 GOTO MAKE_BACKUP_DISKETTE ;AN000;
320 .ENDIF ;AN000;
321 CALL CURSOROFF ;AN000; set cursor off
322 ;
323 OR SEL_FLG,INSTALLRW ;AN000; indicate INSTALL diskette is R/W
324;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
325; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
326; � Create the CONFIG.340, AUTOEXEC.340, and SHELL.BAT on the �
327; � INSTALL COPY diskette in drive A: �
328; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
329;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
330 CREATE_CONFIG S_CONFIG_NEW, N_RETCODE ;AN000;
331 .IF c ;AN000;
332 GOTO INSTALL_ERROR ;AN000;
333 .ENDIF ;AN000;
334 ;
335 INIT_VAR N_HOUSE_CLEAN,E_CLEAN_YES ;AN000; set to perform cleanup on exit
336 ;
337 CREATE_AUTOEXEC S_AUTO_NEW,E_DEST_SHELL,N_RETCODE ;AN000; create autoexec with SHELL commands
338 .IF c ;AN000;
339 GOTO INSTALL_ERROR ;AN000;
340 .ENDIF ;AN000;
341 ;
342 CREATE_SHELL S_SHELL_NEW, N_RETCODE ;AN000;DT
343 .IF c ;AN000;DT
344 GOTO INSTALL_ERROR ;AN000;DT
345 .ENDIF ;AN000;DT
346 ;
347;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
348; ������������������������������������Ŀ
349; �DISK_PARTITION_OPTION �
350; � �
351; � �
352; ��������������������������������������
353;
354; If the first fixed disk is not new (existing partition)
355; goto different screen. Else present screen with partition
356; options.
357;
358;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
359 .IF < N_DISK_1 eq E_DISK_VAL_PART > ;AN000; if first disk has partitions
360 GOTO BOTH_DISK_SCREEN ;AN000; goto next screen (BOTH_DISK)
361 .ENDIF ;AN000;
362 ;
363DISK_PARTITION_OPTION: ;AN000;
364 INIT_VAR N_DISK_NUM, '1' ;AN000;JW
365 INIT_CHAR N_DISK_NUM, E_DISK_ROW, E_DISK_COL, SUB_FIXED_1 ;AN000; display the disk number JW
366 ;
367 INIT_PQUEUE PAN_FIXED_FIRST ;AN000; initialize queue
368 PREPARE_PANEL SUB_FIXED_1 ;AN000; prepare fixed disk 1 message
369 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
370 PREPARE_CHILDREN ;AN000; prepare child panels
371 INIT_SCROLL SCR_FIXED_FIRST, F_PARTITION ;AN000;
372 DISPLAY_PANEL ;AN000; display first fixed disk partition screen
373 ;
374 GET_SCROLL SCR_FIXED_FIRST,F_PARTITION,FK_SCROLL ;AN000; get user selected option for creating partitions
375 ;
376 PROCESS_F3 ;AN000;
377 PROCESS_ESC ;AN000;
378 ;
379 COPY_WORD F_PARTITION, I_USER_INDEX ;AN000;
380 .IF < F_PARTITION eq E_PART_DEFAULT > ;AN000;
381 INIT_VAR N_FORMAT_MODE, E_FORMAT_SELECT ;AN000;
382 .ELSE ;AN000;
383 INIT_VAR N_FORMAT_MODE, E_FORMAT_NEW ;AN000;
384 .ENDIF ;AN000;
385 ;
386 SAVE_PARAMETERS S_SELECT_TMP, N_RETCODE ;AN000;
387 .IF c ;AN000;
388 GOTO INSTALL_ERROR ;AN000;
389 .ENDIF ;AN000;
390 ;
391 CHANGE_AUTOEXEC S_AUTO_REBOOT, S_AUTO_FDISK ;AN000;
392 .IF c ;AN000;
393 GOTO INSTALL_ERROR ;AN000;
394 .ENDIF ;AN000;
395 ;
396 .IF < MEM_SIZE eq 256 > ;AN000;DT
397 DEALLOCATE_MEMORY ;AN000;
398 .ENDIF ;AN000;DT
399 ;
400 .IF < F_PARTITION eq E_PART_USER > near ;AN000; if user selected to define his own partition sizes
401 ;
402 SAVE_PANEL_LIST ;AN000; save panel list for test team
403 INIT_VAR S_STR120_1, 0 ;AN000;
404 APPEND_STRING S_STR120_1,M_STR120_1,S_SLASH_Q ;AN000;DT add /Q parameter (no insert disk at end)
405 CALL CURSORON ;AN000; set cursor to show
406 EXEC_PROGRAM S_FDISK,S_STR120_1,PARM_BLOCK,EXEC_NO_DIR ;AN000; control will not return
407 .IF c ;AN000;
408 GOTO FDISK_ERROR ;AN000;
409 .ENDIF ;AN000;
410 ;
411 GOTO FDISK_REBOOT ;AN000;DT
412 .ENDIF ;AN000;
413 ;
414 INIT_VAR N_WORD_1, 1 ;AN000;
415 SCAN_DISK_TABLE E_DISK_1, N_WORD_1, N_RETCODE ;AN000;
416 .IF < N_RETCODE eq 0 > and ;AN000;
417 .IF < N_NAME_PART eq E_FREE_MEM_DISK > ;AN000;
418 WORD_TO_CHAR N_SIZE_PART, S_STR120_2 ;AN000;
419 MERGE_STRING S_STR120_1,M_STR120_1,SC_1,SC_PRI ;AN000;
420 APPEND_STRING S_STR120_1,M_STR120_1,S_STR120_2;AN000;
421 APPEND_STRING S_STR120_1,M_STR120_1,S_SLASH_Q ;AN000;DT add /Q parameter (no insert disk at end)
422 EXEC_PROGRAM S_FDISK,S_STR120_1,PARM_BLOCK,EXEC_NO_DIR ;AN000;
423 .IF c ;AN000;
424 GOTO FDISK_ERROR ;AN000;
425 .ENDIF ;AN000;
426 .ENDIF ;AN000;
427 ;
428 .IF < N_DISK_2 eq E_DISK_NO_PART > near ;AN000;
429 INIT_VAR N_WORD_1, 1 ;AN000;
430 SCAN_DISK_TABLE E_DISK_2, N_WORD_1, N_RETCODE ;AN000;
431 .IF < N_RETCODE eq 0 > and near ;AN000;
432 .IF < N_NAME_PART eq E_FREE_MEM_DISK > near ;AN000;
433 WORD_TO_CHAR N_SIZE_PART, S_STR120_2 ;AN000;
434 MERGE_STRING S_STR120_1,M_STR120_1,SC_2,SC_EXT ;AN000;
435 APPEND_STRING S_STR120_1,M_STR120_1,S_STR120_2;AN000;
436 APPEND_STRING S_STR120_1,M_STR120_1,SC_LOG ;AN000;
437 APPEND_STRING S_STR120_1,M_STR120_1,S_STR120_2;AN000;
438 APPEND_STRING S_STR120_1,M_STR120_1,S_SLASH_Q ;AN000;DT add /Q parameter (no insert disk at end)
439 EXEC_PROGRAM S_FDISK,S_STR120_1,PARM_BLOCK,EXEC_NO_DIR ;AN000;
440 .IF c ;AN000;
441 GOTO FDISK_ERROR ;AN000;
442 .ENDIF ;AN000;
443 .ENDIF ;AN000;
444 .ENDIF ;AN000;
445 ;
446FDISK_REBOOT: ;AN000;
447 .IF < MEM_SIZE eq 256 > ;AN000;DT
448 CLEAR_SCREEN ;AN000;
449 DISPLAY_MESSAGE 9 ;AN000;
450 .ELSE ;AN000;
451 CALL CURSOROFF ;AN000; set to hide cursor
452 INIT_PQUEUE PAN_REBOOT ;AN000; initialize queue
453 PREPARE_PANEL SUB_REBOOT_KEYS ;AN000;
454 DISPLAY_PANEL ;AN000;
455 SAVE_PANEL_LIST ;AN000; save panel list for test team
456 .ENDIF ;AN000;
457 ;
458 GET_FUNCTION FK_REBOOT ;AN000; Reboot
459 ;
460FDISK_ERROR: ;AN000;
461 .IF < MEM_SIZE eq 256 > near ;AN000;DT
462 CLEAR_SCREEN ;AN000;
463 DISPLAY_MESSAGE 12 ;AN000;DT Insert SELECT diskette
464 ;
465 .REPEAT ;AN000;
466 GET_FUNCTION FK_ENT ;AN000; get user entered function
467 FIND_FILE S_DOS_SEL_360, E_FILE_ATTR ;AN000;
468 .LEAVE < nc > ;AN000;
469 DISPLAY_MESSAGE 11 ;AN000;DT Beep
470 .UNTIL ;AN000;
471 ;
472 ALLOCATE_MEMORY ;AN000;
473 CALL INITIALIZE ;AN000;DT and read them in
474 .ENDIF ;AN000;
475 .IF < SUB_ERROR eq 1 > ;AN023; If error is because no Primary DOS partition
476 CALL CURSOROFF ;AN023; set cursor off
477 GOTO DISK_PARTITION_OPTION ;AN023; return to partition options
478 .ENDIF ;AN023;
479 GOTO INSTALL_ERROR ;AN000;
480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
481;
482; ������������������������������������Ŀ
483; �BOTH_DISK_SCREEN �
484; � �
485; � �
486; ��������������������������������������
487;
488; Ask user if they want to change the existing partition
489; layout or leave it the same (for both disks if 2nd exists).
490;
491;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
492BOTH_DISK_SCREEN: ;AN000;
493BOTH_DISK_PART_OPTION: ;AN000;
494 ;
495 .IF < N_DISK_1_S2 eq E_SPACE_EDOS > or ;AN000;
496 .IF < N_DISK_1_S2 eq E_SPACE_DISK > ;AN000;
497 INIT_VAR N_DISK_NUM, '1' ;AN000;JW
498 .ELSEIF < N_DISK_2_S2 eq E_SPACE_EDOS > or ;AN000;
499 .IF < N_DISK_2_S2 eq E_SPACE_DISK > ;AN000;
500 INIT_VAR N_DISK_NUM, '2' ;AN000;JW
501 .ELSE ;AN000;
502 GOTO DATE_TIME_SCREEN ;AN000; no more partitions to be created
503 .ENDIF ;AN000;
504 ;
505 INIT_CHAR N_DISK_NUM, E_DISK_ROW, E_DISK_COL, SUB_FIXED_1 ;AN000; display the disk number JW
506 INIT_PQUEUE PAN_FIXED_BOTH ;AN000; initialize queue
507 PREPARE_PANEL SUB_FIXED_1 ;AN000; prepare fixed disk message JW
508 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
509 PREPARE_CHILDREN ;AN000; prepare child panels
510 INIT_SCROLL SCR_FIXED_BOTH, F_PARTITION ;AN000;
511 DISPLAY_PANEL ;AN000; display first fixed disk partition screen
512 ;
513 GET_SCROLL SCR_FIXED_BOTH,F_PARTITION,FK_SCROLL ;AN000; get user selected option for creating partitions
514 ;
515 PROCESS_ESC ;AN000;
516 PROCESS_F3 ;AN000;
517 ;
518 COPY_WORD F_PARTITION, I_USER_INDEX ;AN000;
519 CHANGE_AUTOEXEC S_AUTO_REBOOT, S_AUTO_FDISK ;AN000;
520 .IF c ;AN000;
521 GOTO INSTALL_ERROR ;AN000;
522 .ENDIF ;AN000;
523 ;
524 .IF < F_PARTITION eq E_PART_USER > near ;AN000; if user will define his own partition
525 ;
526 .IF < MEM_SIZE eq 256 > ;AN000;DT
527 DEALLOCATE_MEMORY ;AN000;
528 .ENDIF ;AN000;DT
529 ;
530 INIT_VAR N_FORMAT_MODE, E_FORMAT_USED ;AN000;
531 SAVE_PARAMETERS S_SELECT_TMP, N_RETCODE ;AN000;
532 SAVE_PANEL_LIST ;AN000; save panel list for test team
533 INIT_VAR S_STR120_1, 0 ;AN000;
534 APPEND_STRING S_STR120_1,M_STR120_1,S_SLASH_Q ;AN000;DT add /Q parameter (no insert disk at end)
535 CALL CURSORON ;AN000; set to show cursor
536 EXEC_PROGRAM S_FDISK,S_STR120_1,PARM_BLOCK,EXEC_NO_DIR ;AN000; control will not return
537 .IF c ;AN000;
538 .IF < SUB_ERROR eq 2 > ;AN034; SEH If user made no changes to partition
539 CALL CURSOROFF ;AN034; SEH Set cursor off
540 GOTO BOTH_DISK_SCREEN ;AN034; SEH Go to previous screen
541 .ELSE ;AN034; SEH
542 GOTO FDISK_ERROR ;AN000;
543 .ENDIF ;AN034; SEH
544 .ENDIF ;AN000;
545 ;
546 GOTO FDISK_REBOOT ;AN000;DT
547 .ELSE ;AN000;
548 GOTO DATE_TIME_SCREEN ;AN000; no more partitions to be created
549 .ENDIF ;AN000;
550;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
551;
552; GET KEY ROUTINE (256KB)
553;
554; Input: none
555;
556; Output: none
557;
558;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
559PUBLIC GET_ENTER_KEY ;AN063;SEH
560GET_ENTER_KEY PROC NEAR ;AN000;DT
561GEKEY_AGN: ;AN000;DT
562 MOV AH,0 ;AN000;DT
563 INT 16H ;AN000;DT get keystroke
564 CMP AL,13 ;AN000;DT If ENTER the continue
565 JE GEKEY_EXIT ;AN000;DT
566 DISPLAY_MESSAGE 11 ;AN000;DT BEEP
567 JMP GEKEY_AGN ;AN000;DT
568 ;
569GEKEY_EXIT: ;AN000;DT
570 RET ;AN000;DT
571GET_ENTER_KEY ENDP ;AN000;DT
572 ;
573 ;
574SELECT ENDS ;AN000;
575 END ;AN000;
576 \ No newline at end of file
diff --git a/v4.0/src/SELECT/SELECT5A.ASM b/v4.0/src/SELECT/SELECT5A.ASM
new file mode 100644
index 0000000..1a7d29e
--- /dev/null
+++ b/v4.0/src/SELECT/SELECT5A.ASM
@@ -0,0 +1,186 @@
1
2
3PAGE 55,132 ;AN000;
4NAME SELECT ;AN000;
5TITLE SELECT - DOS - SELECT.EXE ;AN000;
6SUBTTL SELECT5A.asm ;AN000;
7.ALPHA ;AN000;
8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9;
10; SELECT5A.ASM : Copyright 1988 Microsoft
11;
12; DATE: August 8/87
13;
14; COMMENTS: Assemble with MASM 3.0 (using the /A option)
15;
16; Panel flow is defined in the following files:
17;
18; � SELECT1.ASM
19; � SELECT2.ASM
20; � SELECT3.ASM
21; � SELECT4.ASM
22; � SELECT5.ASM
23; � SELECT6.ASM
24;
25; Module contains code for :
26; - Date/Time screen
27;
28; CHANGE HISTORY:
29;
30; ;AN002; for DCR225
31;
32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
33DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
34 EXTRN SEL_FLG:BYTE ;AN000;
35DATA ENDS ;AN000;
36 ;
37.XLIST ;AN000;
38 INCLUDE PANEL.MAC ;AN000;
39 INCLUDE SELECT.INC ;AN000;
40 INCLUDE CASTRUC.INC ;AN000;
41 INCLUDE STRUC.INC ;AN000;
42 INCLUDE MACROS.INC ;AN000;
43 INCLUDE EXT.INC ;AN000;
44 INCLUDE VARSTRUC.INC ;AN000;
45 INCLUDE ROUT_EXT.INC ;AN000;
46 INCLUDE PAN-LIST.INC ;AN000;
47.LIST ;AN000;
48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
49SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine
50 ASSUME CS:SELECT,DS:DATA ;AN000;
51 ;
52 INCLUDE CASEXTRN.INC ;AN000;
53 ;
54 EXTRN CREATE_AUTOEXEC_BAT:NEAR ;AN000;
55 EXTRN CREATE_CONFIG_SYS:NEAR ;AN000;
56 EXTRN CREATE_SHELL_BAT:NEAR ;AN000;DT
57 EXTRN SCAN_INFO_CALL:NEAR ;AN000;DT
58 ;
59 PUBLIC DATE_TIME_SCREEN ;AN000;
60 EXTRN PROCESS_ESC_F3:near ;AN000;
61 EXTRN FORMAT_DISK_SCREEN:near ;AN000;
62 EXTRN EXIT_DOS:near ;AN000;
63 EXTRN INSTALL_ERROR:near ;AN000;
64 EXTRN EXIT_SELECT:NEAR ;AN000;
65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
66;
67; ������������������������������������Ŀ
68; �DATE_TIME_SCREEN �
69; � �
70; ��������������������������������������
71;
72; The INSTALL DATE and TIME SCREEN is presented if the active date is 1/1/80.
73; If the user is installing to drive C: , this is the first screen presented
74; after the system is reboot due to the execution of FDISK.
75; The user cannot go back to the previous screen or terminate the
76; install process from this screen.
77; If the user did not change the date or time presented on the screen,
78; no action is taken.
79; Valid keys are ENTER, F1, and numeric characters.
80; If installing from 360KB diskettes, must prompt for INSTALL diskette
81;
82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
83DATE_TIME_SCREEN: ;AN000;
84 ;
85 .IF < N_SELECT_MODE eq E_SELECT_FDISK > and ;AN000;DT
86 .IF < N_DISKETTE_A eq E_DISKETTE_360 > ;AN000;DT
87 CALL CURSOROFF ;AN082;SEH
88 INSERT_DISK SUB_INSTALL_COPY, S_SELECT_TMP ;AN000;JW
89 CALL SCAN_INFO_CALL ;AN000;DT
90 .ENDIF ;AN000;DT
91 ;
92 INIT_VAR STACK_INDEX, 0 ;AN000; clear SELECT STACK
93 ;
94 CHECK_WRITE_PROTECT DRIVE_A, N_RETCODE ;AC000;JW
95 .IF c ;AN000;
96 GOTO INSTALL_ERROR ;AN000;
97 .ELSE ;AN000;
98 OR SEL_FLG,INSTALLRW ;AN000; indicate INSTALL diskette is R/W
99 .ENDIF ;AN000;
100 ;
101 GET_DATE N_YEAR, N_MONTH, N_DAY ;AN000; get system date
102 .IF c ;AN000; if system date is 1/1/1980
103 GOTO FORMAT_DISK_SCREEN ;AN000; goto next screen (FORMAT_DISK)
104 .ENDIF ;AN000;
105 ;
106 GET_TIME N_HOUR, N_MINUTE, N_SECOND ;AN000; get system time
107 ;
108 COPY_WORD N_WORD_1, N_YEAR ;AN000; copy year to temp var
109 COPY_WORD N_WORD_2, N_MONTH ;AN000; copy month to temp var
110 COPY_WORD N_WORD_3, N_DAY ;AN000; copy day to temp var
111 COPY_WORD N_WORD_4, N_HOUR ;AN000; copy hour to temp var
112 COPY_WORD N_WORD_5, N_MINUTE ;AN000; copy minute to temp var
113 COPY_WORD N_WORD_6, N_SECOND ;AN000; copy second to temp var
114 ;
115 INIT_PQUEUE PAN_DATE_TIME ;AN000; initialize queue
116 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
117 PREPARE_CHILDREN ;AN000; prepare child panels
118 INIT_NUMERIC NUM_YEAR,N_WORD_1,MAX_YEAR,S_STR120_1 ;AN000; display current year
119 INIT_NUMERIC NUM_MONTH,N_WORD_2,MAX_MONTH,S_STR120_2 ;AN000; display current month
120 INIT_NUMERIC NUM_DAY,N_WORD_3,MAX_DAY,S_STR120_3 ;AN000; display current day
121 INIT_NUMERIC NUM_HOUR,N_WORD_4,MAX_HOUR,SC_LINE ;AN000; display current hour
122 INIT_NUMERIC NUM_MINUTE,N_WORD_5,MAX_MINUTE,S_MODE_PARM ;AN000; display current minute
123 INIT_NUMERIC NUM_SECOND,N_WORD_6,MAX_SECOND,S_CP_DRIVER ;AN000; display current second
124 CALL CURSORON ;AN082;SEH
125 DISPLAY_PANEL ;AN000;
126 ;
127 INIT_VAR N_COUNTER, 1 ;AN000; set counter = 1
128 ;
129DATE_TIME_LOOP: ;AN000;
130 ;
131 .REPEAT ;AN000; repeat code block
132 ;
133 .SELECT ;AN000;
134 ;
135 .WHEN < N_COUNTER eq 1 > ;AN000; counter = 1
136 GET_NUMERIC NUM_YEAR,N_WORD_1,MIN_YEAR,MAX_YEAR,FK_DATE,S_STR120_1 ;AN000; get new year value
137 COPY_WORD N_WORD_1, N_USER_NUMERIC ;AN000; save new year value
138 ;
139 .WHEN < N_COUNTER eq 2 > ;AN000; counter = 2
140 GET_NUMERIC NUM_MONTH,N_WORD_2,MIN_MONTH,MAX_MONTH,FK_DATE,S_STR120_2 ;AN000; get new month value
141 COPY_WORD N_WORD_2, N_USER_NUMERIC ;AN000; save new month value
142 ;
143 .WHEN < N_COUNTER eq 3 > ;AN000; counter = 3
144 GET_NUMERIC NUM_DAY,N_WORD_3,MIN_DAY,MAX_DAY,FK_DATE,S_STR120_3 ;AN000; get new day value
145 COPY_WORD N_WORD_3, N_USER_NUMERIC ;AN000; save new day value
146 ;
147 .WHEN < N_COUNTER eq 4 > ;AN000; counter = 4
148 GET_NUMERIC NUM_HOUR,N_WORD_4,MIN_HOUR,MAX_HOUR,FK_DATE,SC_LINE ;AN000; get new hour value
149 COPY_WORD N_WORD_4, N_USER_NUMERIC ;AN000; save new hour value
150 ;
151 .WHEN < N_COUNTER eq 5 > ;AN000; counter = 5
152 GET_NUMERIC NUM_MINUTE,N_WORD_5,MIN_MINUTE,MAX_MINUTE,FK_DATE,S_MODE_PARM ;AN000; get new minute value
153 COPY_WORD N_WORD_5, N_USER_NUMERIC ;AN000; save new minute value
154 ;
155 .OTHERWISE ;AN000; counter = 6
156 GET_NUMERIC NUM_SECOND,N_WORD_6,MIN_SECOND,MAX_SECOND,FK_DATE,S_CP_DRIVER ;AN000; get new second value
157 COPY_WORD N_WORD_6, N_USER_NUMERIC ;AN000; save new second value
158 ;
159 .ENDSELECT ;AN000;
160 ;
161 INC_VAR N_COUNTER ;AN000; inc counter
162 ;
163 .IF < N_COUNTER a 6 > ;AN000; if counter > 6
164 INIT_VAR N_COUNTER, 1 ;AN000; set counter = 1
165 .ENDIF ;AN000;
166 ;
167 .UNTIL < N_USER_FUNC eq E_ENTER > near ;AN000; break loop if user entered ENTER
168 ;
169 CHECK_DATE_CHANGE N_WORD_1,N_WORD_2,N_WORD_3,N_YEAR,N_MONTH,N_DAY ;AN000; check if new date is different
170 .IF c ;AN000; if new date different
171 SET_DATE N_WORD_1, N_WORD_2, N_WORD_3 ;AN000; set new system date
172 .IF c ;AN000; if new date invalid
173 INIT_VAR N_COUNTER, 3 ;AN000; set counter = 3
174 GOTO DATE_TIME_LOOP ;AN000; goto get day again
175 .ENDIF ;AN000;
176 .ENDIF ;AN000;
177 ;
178 CHECK_TIME_CHANGE N_WORD_4,N_WORD_5,N_WORD_6,N_HOUR,N_MINUTE,N_SECOND ;AN000; check if new time is different
179 .IF c ;AN000; if new time is different
180 SET_TIME N_WORD_4, N_WORD_5, N_WORD_6 ;AN000; set new system time
181 .ENDIF ;AN000;
182 ;
183 GOTO FORMAT_DISK_SCREEN ;AN000; goto next screen (FORMAT_DISK)
184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
185SELECT ENDS ;AN000;
186 END ;AN000;
diff --git a/v4.0/src/SELECT/SELECT6.ASM b/v4.0/src/SELECT/SELECT6.ASM
new file mode 100644
index 0000000..863aecc
--- /dev/null
+++ b/v4.0/src/SELECT/SELECT6.ASM
@@ -0,0 +1,561 @@
1
2
3PAGE 55,132 ;AN000;
4NAME SELECT ;AN000;
5TITLE SELECT - DOS - SELECT.EXE ;AN000;
6SUBTTL SELECT6.asm ;AN000;
7.ALPHA ;AN000;
8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9;
10; SELECT6.ASM : Copyright 1988 Microsoft
11;
12; DATE: August 8/87
13;
14; COMMENTS: Assemble with MASM 3.0 (using the /A option)
15;
16; Panel flow is defined in the following files:
17;
18; � SELECT1.ASM
19; ;AN000; SELECT2.ASM
20; ;AN000; SELECT3.ASM
21; ;AN000; SELECT4.ASM
22; ;AN000; SELECT5.ASM
23; ;AN000; SELECT6.ASM
24;
25;
26; Module contains code for :
27; - Format the drives
28; - Copy files
29;
30; CHANGE HISTORY:
31;
32; ;AN009; DT added support for creation of the DOSSHELL.BAT as a
33; separately installed file. (D233)
34; ;AN002; GHG for P1146
35; ;AN003; GHG for D234
36; ;AN004; GHG for P65
37; ;AN005; DT for single drive support
38; ;AN006; JW for dos location choice (global or path only)
39; ;AN007; JW for D239 - display drive letter to format
40;
41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
42DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
43 EXTRN SEL_FLG:BYTE ;AN000;
44 EXTRN EXEC_FDISK:BYTE ;AN000;DT
45 EXTRN EXEC_ERR:BYTE ;AN000;DT
46DATA ENDS ;AN000;
47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
49;
50; Define dummy segment to calculate end of program
51;
52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
53PARSER SEGMENT PARA PUBLIC 'PARSER' ;AN072;
54PARSER ENDS ;AN072;
55
56SET_BLOCK equ 4AH ;AN072;
57;
58;
59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
60.XLIST ;AN000;
61 INCLUDE PANEL.MAC ;AN000;
62 INCLUDE SELECT.INC ;AN000;
63 INCLUDE CASTRUC.INC ;AN000;
64 INCLUDE STRUC.INC ;AN000;
65 INCLUDE MACROS.INC ;AN000;
66 INCLUDE MACROS7.INC ;AN009;DT
67 INCLUDE EXT.INC ;AN000;
68 INCLUDE VARSTRUC.INC ;AN000;
69 INCLUDE ROUT_EXT.INC ;AN000;
70 INCLUDE PAN-LIST.INC ;AN000;
71.LIST ;AN000;
72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
73 ;
74 EXTRN DEALLOCATE_HELP:FAR ;AN000;DT
75 EXTRN DEALLOCATE_BLOCK:FAR ;AN000;DT
76 EXTRN ALLOCATE_BLOCK:FAR ;AN000;DT
77 EXTRN DEALLOCATE_MEMORY_CALL:FAR ;AN000;DT
78 EXTRN ALLOCATE_MEMORY_CALL:FAR ;AN000;DT
79 EXTRN GET_OVERLAY:NEAR ;AN048;SEH
80 ;
81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
82SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;
83 ASSUME CS:SELECT,DS:DATA ;AN000;
84 ;
85 INCLUDE CASEXTRN.INC ;AN000;
86 ;
87 EXTRN EXIT_SELECT:near ;AN000;
88 EXTRN CREATE_CONFIG_SYS:NEAR ;AN000;
89 EXTRN CREATE_AUTOEXEC_BAT:NEAR ;AN000;
90 EXTRN CREATE_SHELL_BAT:NEAR ;AN009;DT
91 ; EXTRN DO_PREP_FOR_ONE:NEAR ;AN009;DT
92 ; EXTRN DO_HOOK15:NEAR ;AN009;DT
93 ; EXTRN DO_UNHOOK15:NEAR ;AN009;DT
94 ;
95 EXTRN EXIT_DOS:near ;AN004;GHG
96 EXTRN INSTALL_ERROR:near ;AN004;GHG
97 EXTRN EXIT_SELECT:NEAR ;AN004;GHG
98 EXTRN PROCESS_ESC_F3:near ;AN004;GHG
99 EXTRN DISKETTE_INSTALL:NEAR ;AN111;JW
100 EXTRN EXIT_DOS_CONT:NEAR ;AN004;GHG
101 EXTRN CONTINUE_360:NEAR ;AN004;GHG
102 ;
103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
104;
105; CODE CONTINUES.....
106;
107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
108 PUBLIC FORMAT_DISK_SCREEN ;AN000;
109FORMAT_DISK_SCREEN: ;AN000;
110 ;
111 CALL DEALLOCATE_HELP ;AN072;Help no longer needed
112 POS_CURSOR ;AN085;SEH position cursor at top left corner so that future "% formatted" msg appears in correct spot
113 CALL CURSOROFF ;AN082;SEH
114 ;
115 .IF < I_DEST_DRIVE ne E_DEST_DRIVE_C > ;AN111;JW
116 GOTO DISKETTE_INSTALL ;AN111;JW
117 .ENDIF ;AN000;
118 ;
119; N_WORD_1 : disk number ;
120; N_WORD_2 : index into disk table ;
121; N_WORD_3 : sub panel number for specified disk ;
122 ;
123 INIT_VAR N_WORD_1, 1 ;AN000; set disk no = 1
124 .REPEAT ;AN000; repeat code block
125 INIT_VAR N_WORD_2, 1 ;AN000; set index into table = 1
126 .IF < N_WORD_1 eq E_DISK_1 > ;AN000; if disk = 1
127 INIT_VAR N_DISK_NUM, '1' ;AN007; sub panel = fixed disk 1 JW
128 .ELSE ;AN000; else
129 INIT_VAR N_DISK_NUM, '2' ;AN007; sub panel = fixed disk 2 JW
130 .ENDIF ;AN000;
131 ;
132 .REPEAT ;AN000; repeat code block
133 SCAN_DISK_TABLE N_WORD_1,N_WORD_2,N_RETCODE ;AN000; scan disk table
134 .LEAVE < N_RETCODE ne 0 > near ;AN000; break loop if no more entries
135 ;
136 .IF < N_NAME_PART eq E_PART_PRI_DOS > and ;AN000; if pri part & unformatted
137 .IF < N_STATUS_PART eq E_PART_UNFORMAT > ;AN000;
138 INIT_VAR N_TYPE_PART, E_PART_FAT ;AN000; set to format as FAT
139 .ELSEIF < N_NAME_PART eq E_PART_LOG_DRI > near and;AN000; if log drive & unformatted
140 .IF < N_STATUS_PART eq E_PART_UNFORMAT > near ;AN000;
141 .IF < N_FORMAT_MODE eq E_FORMAT_SELECT > ;AN000; if select to format partition
142 INIT_VAR N_TYPE_PART, E_PART_FAT ;AN000; set to format as FAT
143 .ELSE near ;AN000; else
144 INIT_CHAR N_DISK_NUM, E_DISK_ROW, E_DISK_COL,SUB_FIXED_1 ;AN007; display the disk number JW
145 INIT_CHAR P_DRIVE_PART, E_DRIVE_ROW, E_DRIVE_COL,SUB_LOG_DRIVE ;AN000; display the drive letter JW
146 INIT_PQUEUE PAN_FORMAT ;AN000; init format panel
147 PREPARE_PANEL PAN_HBAR ;AN000; prepare hor. bar panel
148 PREPARE_PANEL SUB_FIXED_1 ;AC007; prepare disk no panel JW
149 PREPARE_PANEL SUB_LOG_DRIVE ;AN000;JW
150 PREPARE_CHILDREN ;AN000; prepare children
151 INIT_VAR F_FORMAT, E_FORMAT_FAT ;AN000; set option=format as FAT
152 INIT_SCROLL SCR_FORMAT, F_FORMAT ;AN000; init scroll list
153 DISPLAY_PANEL ;AN000; display panel
154 GET_SCROLL SCR_FORMAT,F_FORMAT,FK_FORMAT ;AN000; get option
155 COPY_WORD F_FORMAT, I_USER_INDEX ;AN000; save option
156 .IF < F_FORMAT eq E_FORMAT_FAT > ;AN000; if option=format
157 INIT_VAR N_TYPE_PART, E_PART_FAT ;AN000; set to format as FAT
158 .ENDIF ;AN000;
159 .ENDIF ;AN000;
160 .ENDIF ;AN000;
161 UPDATE_DISK_TABLE N_WORD_1,N_WORD_2,N_RETCODE ;AN000; update disk table
162 INC_VAR N_WORD_2 ;AN000; inc index into table
163 .UNTIL ;AN000; end of repeat block
164 INC_VAR N_WORD_1 ;AN000; inc disk no
165 .UNTIL < N_WORD_1 gt 2> near ;AN000; end of repeat block
166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
167;
168; Format the logical drives and primary partition
169; N_WORD_1 : disk number
170; N_WORD_2 : index into disk table
171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
172 INIT_VAR N_WORD_1, 1 ;AN000; set disk no = 1
173 .REPEAT ;AN000; repeat code block
174 INIT_VAR N_WORD_2, 1 ;AN000; set index into disk table = 1
175 .REPEAT ;AN000; repeat code block
176 SCAN_DISK_TABLE N_WORD_1,N_WORD_2,N_RETCODE ;AN000; scan disk table
177 .LEAVE < N_RETCODE ne 0 > near ;AN000; break loop in index not valid
178 .IF < N_STATUS_PART eq E_PART_UNFORMAT > and near ;AN000; if partition not unformatted and
179 .IF < N_TYPE_PART eq E_PART_FAT > near ;AN000; format set to FAT
180 COPY_BYTE P_STR120_1, P_DRIVE_PART ;AN000; save drive letter in buffer
181 INIT_VAR S_STR120_1, 1 ;AN000; set length of string
182 APPEND_STRING S_STR120_1, M_STR120_1, S_COLON ;AN000; append colon to drive
183 .IF < N_NAME_PART eq E_PART_PRI_DOS > and ;AN111; if primary partition and JW
184 .IF < N_WORD_1 eq 1 > ;AN111; first drive JW
185 APPEND_STRING S_STR120_1,M_STR120_1,S_SLASH_S ;AN000; append ' /s' to drive
186 INIT_VAR I_DESTINATION, E_ENTIRE_DISK ;AN033; SEH install to entire disk if formatting
187 .ENDIF ;AN000;
188 APPEND_STRING S_STR120_1,M_STR120_1,S_VOL_SEL ;AN000; append "/V:DOS340 /SELECT"
189 CLEAR_SCREEN ;AN000; pos cursor at top of screen
190 INIT_PQUEUE FORMAT_DISK ;AN000; initialize queue
191 DISPLAY_PANEL ;AN000;
192 ;
193 .IF < MEM_SIZE eq 256 > ;AN000;DT
194 DEALLOCATE_MEMORY ;AN000;DT
195 .ENDIF ;AN000;DT
196 ;
197 EXEC_PROGRAM S_FORMAT,S_STR120_1,PARM_BLOCK,EXEC_NO_DIR ;AN000; format partition as FAT
198 .IF < c > ;AN000;
199 MOV EXEC_ERR,TRUE ;AN000;
200 .ENDIF ;AN000;
201 ;
202 .IF < MEM_SIZE eq 256 > near ;AN000;DT
203 CLEAR_SCREEN ;AN000;
204 DISPLAY_MESSAGE 12 ;AN000;DT Insert SELECT diskette
205 .REPEAT ;AN000;
206 GET_FUNCTION FK_ENT ;AN000; get user entered function
207 FIND_FILE S_DOS_SEL_360, E_FILE_ATTR;AN000;
208 .LEAVE < nc > ;AN000;
209 DISPLAY_MESSAGE 11 ;AN000;DT Beep
210 .UNTIL ;AN000;
211 ALLOCATE_MEMORY ;AN000;DT
212 CALL INITIALIZE ;AN000;DT and read them in
213 CALL DEALLOCATE_HELP ;AN072;Help no longer needed
214 ;
215 INSERT_DISK SUB_INSTALL_COPY, S_AUTO_NEW ;AN000;JW Insert INSTALL COPY diskette
216 ;
217 .ENDIF ;AN000;
218 ;
219 .IF < EXEC_ERR eq TRUE > ;AN000;
220 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
221 .ENDIF ;AN000;
222 .ENDIF ;AN000;
223 INC_VAR N_WORD_2 ;AN000;
224 .UNTIL ;AN000;
225 INC_VAR N_WORD_1 ;AN000;
226 .UNTIL < N_WORD_1 gt 2> near ;AN000;
227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
228;
229;
230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
231 GET_TIME N_HOUR, N_MINUTE, N_SECOND ;AN000; get system time
232 GET_DATE N_YEAR, N_MONTH, N_DAY ;AN000; get system date
233;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
234;
235; Update date/time of CONFIG.340
236; AUTOEXEC.340
237; DOSSHELL.BAT in drive A: ;
238;
239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
240 OPEN_FILE S_CONFIG_NEW, 2, N_HANDLE ;AN000;
241 SET_FILE_DATE_TIME N_HANDLE,N_HOUR,N_MINUTE,N_SECOND,N_YEAR,N_MONTH,N_DAY ;AN000;
242 CLOSE_FILE N_HANDLE ;AN000;
243 .IF c ;AN000;
244 GOTO INSTALL_ERROR ;AN000;
245 .ENDIF ;AN000;
246 ;
247 OPEN_FILE S_AUTO_NEW, 2, N_HANDLE ;AN000;
248 SET_FILE_DATE_TIME N_HANDLE,N_HOUR,N_MINUTE,N_SECOND,N_YEAR,N_MONTH,N_DAY ;AN000;
249 CLOSE_FILE N_HANDLE ;AN000;
250 .IF c ;AN000;
251 GOTO INSTALL_ERROR ;AN000;
252 .ENDIF ;AN000;
253 ;
254 OPEN_FILE S_SHELL_NEW, 2, N_HANDLE ;AN009;DT
255 SET_FILE_DATE_TIME N_HANDLE,N_HOUR,N_MINUTE,N_SECOND,N_YEAR,N_MONTH,N_DAY ;AN009;DT
256 CLOSE_FILE N_HANDLE ;AN009;DT
257 .IF < c > ;AN009;DT
258 GOTO INSTALL_ERROR ;AN009;DT
259 .ENDIF ;AN009;DT
260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
261;
262; Make sure any previous AUTOEXEC.340 or CONFIG.340
263; are not READ-ONLY !
264; Copy CONFIG.340 & AUTOEXEC.340 from A: to root of C:
265;
266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
267 CHMOD_FILE S_AUTO_REN ;AN017;
268 CHMOD_FILE S_CONFIG_REN ;AN017;
269 COPY_FILES2 I_DEST_DRIVE,S_CONFIG_AUTO,E_FILES,S_DEST_DRIVE ;AC111;JW
270 .IF < c > ;AN000;
271 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
272 .ENDIF ;AN000;
273;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
274;
275; If the user selected to replace files throughout the fixed disk:
276; 1) Copy COMMAND.COM to root of C:
277; 2) Check if OS/2 is installed. If it is, rename CONFIG.SYS and
278; AUTOEXEC.BAT (OS2'S) to CONFIG.OS2 and AUTOEXEC.OS2. Then
279; rename CONFIG.400 and AUTOEXEC.400 to CONFIG.SYS and
280; AUTOEXEC.BAT.
281; 3) Try to locate C:\CONFIG.SYS & C:\AUTOEXEC.BAT (if OS/2 not installed)
282; If either one is already present, then leave the names
283; of the new files as CONFIG.400 and AUTOEXEC.400!
284; Otherwise, the CONFIG.400 and AUTOEXEC.400 become the
285; new user's SYS and BAT files.
286;
287;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
288 .IF < I_DESTINATION eq E_ENTIRE_DISK > near ;AN010;JW
289 ;
290 .IF < MEM_SIZE eq 256 > ;AN048;SEH memory must be freed up
291 DEALLOCATE_MEMORY ;AN048;SEH before reading COMMAND.COM
292 .ENDIF ;AN048;SEH
293 CHMOD_FILE S_COMMAND_COM ;AN017;
294 COPY_FILES2 I_DEST_DRIVE,COPY_SEL_SHEL,E_SEL_SHEL,S_DEST_DRIVE ;AC010;JW
295 .IF < c > ;AN000;
296 MOV EXEC_ERR,TRUE ;AN000;
297 .ENDIF ;AN000;
298 .IF < MEM_SIZE eq 256 > near ;AN000;DT
299 CALL GET_OVERLAY ;AC048;SEH replaced code with this proc call
300 INSERT_DISK SUB_INSTALL_COPY, S_DOS_COM_360 ;AN000;JW Insert INSTALL COPY diskette
301 CALL DEALLOCATE_HELP ;AN072;Help no longer needed
302 .ENDIF ;AN000;DT
303 .IF < EXEC_ERR eq TRUE > ;AN000;
304 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
305 .ENDIF ;AN000;
306 INIT_VAR N_WORD_1,1 ;AN065;SEH set disk no. = 1
307 INIT_VAR N_WORD_2,1 ;AN065;SEH set index into disk table = 1
308 SCAN_DISK_TABLE N_WORD_1,N_WORD_2,N_RETCODE ;AN065;SEH get version number
309 .IF < N_RETCODE eq 0 > near and ;AN065;SEH
310 .IF < N_LEVEL2_PART ne '4' > near ;AN065;SEH is it OS/2? 1st byte of DOS version number = blank; for OS/2 it's 1
311 RENAME_FILE S_CONFIG_C, S_OS2_CONFIG_C ;AN065;SEH rename OS/2's CONFIG.SYS to CONFIG.OS2
312 RENAME_FILE S_AUTO_C, S_OS2_AUTO_C ;AN065;SEH rename OS/2's AUTOEXEC.BAT to AUTOEXEC.OS2
313 RENAME_FILE S_CONFIG_REN, S_CONFIG_NEW_C ;AN065;SEH rename CONFIG.400 to CONFIG.SYS
314 .IF < c > ;AN065;SEH
315 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN065;SEH
316 .ENDIF ;AN065;SEH
317 RENAME_FILE S_AUTO_REN, S_AUTO_NEW_C ;AN065;SEH rename AUTOEXEC.400 to AUTOEXEC.BAT
318 .IF < c > near ;AN065;SEH
319 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN065;SEH
320 .ENDIF ;AN065;SEH
321 .ELSE near ;AN065;SEH
322 FIND_FILE S_CONFIG_C, E_FILE_ATTR ;AN000;GHG
323 .IF < c > ;AN000;GHG
324 FIND_FILE S_AUTO_C, E_FILE_ATTR ;AN000;GHG
325 .IF < c > ;AN000;GHG
326 RENAME_FILE S_CONFIG_REN, S_CONFIG_NEW_C;AN000;GHG new CONFIG *******
327 .IF < c > ;AN000;GHG
328 HANDLE_ERROR ERR_COPY_DISK, E_RETURN;AN000;GHG
329 .ENDIF ;AN000;GHG
330 RENAME_FILE S_AUTO_REN, S_AUTO_NEW_C ;AN000;GHG new AUTOEXEC *******
331 .IF < c > ;AN000;GHG
332 HANDLE_ERROR ERR_COPY_DISK, E_RETURN;AN000;GHG
333 .ENDIF ;AN000;GHG
334 .ENDIF ;AN000;GHG
335 .ENDIF ;AN000;GHG
336 .ENDIF ;AN065;SEH
337 .ENDIF ;AN010;JW
338;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
339;
340; Create install path directory always !
341;
342;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
343 MAKE_DIR_PATHS S_INSTALL_PATH ;AN000;
344 .IF c ;AN000;
345 GOTO INSTALL_ERROR ;AN000;
346 .ENDIF ;AN000;
347;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
348;
349; Make sure any previous DOSSHELL.BAT is not READ-ONLY !
350; Copy DOSSHELL.BAT from A: to subdirectory of C:
351;
352;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
353 .IF < S_DOS_LOC eq 0 > ;AN058;SEH
354 MERGE_STRING S_STR120_1,M_STR120_1,S_DEST_DRIVE,S_SHELL_NEW ;AN058;SEH
355 .ELSE ;AN058;SEH
356 MERGE_STRING S_STR120_1,M_STR120_1,S_INSTALL_PATH,S_SLASH ;AN017;
357 APPEND_STRING S_STR120_1,M_STR120_1,S_SHELL_NEW ;AN017;
358 .ENDIF ;AN058;SEH
359 CHMOD_FILE S_STR120_1 ;AN017;
360 COPY_FILES2 I_DEST_DRIVE,S_SHELL2,SH_FILES,S_INSTALL_PATH ;AC111;JW
361 .IF c ;AN009;
362 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN009;
363 .ENDIF ;AN009;
364 ;
365;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
366;
367; Erase: AUTOEXEC.340 CONFIG.340
368; DOSSHELL.BAT SELECT.TMP from drive A:
369;
370; Then perform cleanup of AUTOEXEC.BAT on INSTALL (source)
371; diskette - ie. change to SELECT MENU!!!
372;
373;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
374 ERASE_FILE S_AUTO_NEW ;AN000;
375 ERASE_FILE S_CONFIG_NEW ;AN000;
376 ERASE_FILE S_SHELL_NEW ;AN000;
377 ERASE_FILE S_SELECT_TMP ;AN000; only present if reboot after FDISK
378 ;
379 CHANGE_AUTOEXEC S_AUTO_REBOOT, S_AUTO_MENU ;AN000;
380 .IF c ;AN000;
381 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
382 .ENDIF ;AN000;
383
384;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
385;
386; If 256KB machine, shrink SELECT memory below the parser
387; and pcinput code. This frees about another 11KB.
388;
389;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
390
391 .IF < MEM_SIZE eq 256 > ;AN072;
392 ;
393 DEALLOCATE_MEMORY ;AN072;
394 MOV AH,62H ;AN072;Get the PSP segment
395 INT 21H ;AN072;
396 MOV AX,BX ;AN072;save the PSP segment of SELECT
397 MOV BX,PARSER ;AN072;get last address of code
398 MOV ES,AX ;AN072;set PSP segment in ES
399 SUB BX,AX ;AN072;calc # of paragraphs in the program
400 MOV AH,SET_BLOCK ;AN072;setblock function number
401 DOSCALL ;AN072;free used memory
402
403 .IF < c > ;AN000;
404 CALL GET_OVERLAY ;AC048;SEH replaced code with this proc call
405 INSERT_DISK SUB_INSTALL_COPY, S_DOS_COM_360 ;AN000;JW Insert INSTALL COPY diskette
406 GOTO INSTALL_ERROR ;AN072;If error, exit
407 .ENDIF ;AN000;
408
409 .ENDIF
410
411;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
412;
413; If install is to entire disk, Exec SYS to the drive C:
414;
415;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
416
417 .IF < I_DESTINATION eq E_ENTIRE_DISK > near ;AN010;
418 ;
419 ;;;copy system files from Startup diskette to drive C:
420
421 EXEC_PROGRAM S_SYS_C,S_DRIVE_C,PARM_BLOCK,EXEC_DIR ;AN000;
422 .IF < c > ;AN000;
423 MOV EXEC_ERR,TRUE ;AN000;
424 .ENDIF ;AN000;
425
426 .ENDIF ;AN010;JW
427
428 .IF < MEM_SIZE eq 256 > near ;AN000;DT
429 CALL GET_OVERLAY ;AC048;SEH replaced code with this proc call
430 INSERT_DISK SUB_INSTALL_COPY, S_DOS_COM_360 ;AN000;JW Insert INSTALL COPY diskette
431 CALL DEALLOCATE_HELP ;AN072;DT
432 .ENDIF ;AN000;DT
433 .IF < EXEC_ERR eq TRUE > ;AN000;
434 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
435 .ENDIF ;AN000;
436 ;
437;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
438;;;;720KB;;;;720KB;;;;720KB;;;;720KB;;;;720KB;;;;720KB;;;;720KB;;
439;
440; Display copying files from INSTALL diskette
441;
442;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
443 .IF < N_DISKETTE_A eq E_DISKETTE_720 > near or ;AN000;GHG
444 .IF < N_DISKETTE_A eq E_DISKETTE_1440 > near ;AN000;GHG
445 ;
446 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
447 PREPARE_PANEL PAN_DSKCPY_CPY ;AN000; prepare copying
448 DISPLAY_PANEL ;AN000; from diskette 2 msg
449 ;
450 ;;;S_STR120_1 = "a:*.* c:\path /a parameter for REPLACE
451 MERGE_STRING S_STR120_1,M_STR120_1,S_A_STARS,S_INSTALL_PATH ;AN000;
452 APPEND_STRING S_STR120_1,M_STR120_1,S_SLASH_A ;AN000;
453 ;
454; .IF < I_DESTINATION eq E_ENTIRE_DISK > ;AN006;JW
455; .THEN ;AN006;
456; ;;;S_STR120_3 = "a:*.* c:\ /s parameter for REPLACE
457; COPY_STRING S_STR120_3,M_STR120_3,S_REPLACE_PAR1 ;AN006;JW
458; .ELSE ;AN006;
459 ;;;S_STR120_3 = "a:*.* c:\<path> /r parameter for REPLACE
460 MERGE_STRING S_STR120_3,M_STR120_3,S_A_STARS,S_INSTALL_PATH ;AN006;JW
461 APPEND_STRING S_STR120_3,M_STR120_3,S_SLASH_R ;AN000;JW
462; .ENDIF ;AN006;
463 ;
464 ;;;change attributes of some files so they are not copied
465 CHANGE_ATTRIBUTE HIDE_SEL, E_HIDE_SEL ;AN000;
466 ;
467 ;;;replace files in drive C: with new files on INSTALL diskette
468 EXEC_PROGRAM S_REPLACE,S_STR120_3,PARM_BLOCK,EXEC_DIR ;AN006;JW
469 .IF c ;AN000;
470 RESTORE_ATTRIBUTE HIDE_SEL,E_HIDE_SEL ;AN000;
471 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
472 .ENDIF ;AN000;
473 ;
474 ;;;S_STR120_1 = "a:*.* C:\<path> /A" ;
475 ;;;copy new files on SELECT diskette to install path ;
476 EXEC_PROGRAM S_REPLACE,S_STR120_1,PARM_BLOCK,EXEC_DIR ;AN000; copy new files
477 .IF c ;AN000;
478 RESTORE_ATTRIBUTE HIDE_SEL,E_HIDE_SEL ;AN000;
479 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
480 .ENDIF ;AN000;
481 ;
482 ;;;restore attributes of files ;
483 RESTORE_ATTRIBUTE HIDE_SEL,E_HIDE_SEL ;AN000;
484 ;
485
486;-------------------------------------------------------------
487; copy files from 720k Operate diskette
488;-------------------------------------------------------------
489; NOTE: The REPLACE command is now issued from the hard disk
490; (since it is not found on any other disk)
491
492 COMPARE_STRINGS S_INSTALL_PATH, S_DEST_DRIVE ;AN000; compare to C:\
493 .IF < nc > ;AN000; if the same
494 MERGE_STRING S_STR120_2,M_STR120_2,S_INSTALL_PATH,S_REPLACE ;AN000;
495 .ELSE ;AN000;
496 MERGE_STRING S_STR120_2,M_STR120_2,S_INSTALL_PATH,S_SLASH ;AN000;
497 APPEND_STRING S_STR120_2,M_STR120_2,S_REPLACE;AN000;
498 .ENDIF ;AN000;
499
500 INSERT_DISK SUB_REM_SEL_A, S_DOS_UTIL1_DISK ;AN000;JW Insert Operating diskette
501 ;
502 ;;;display copying files from diskette 1 screen ;
503 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
504 PREPARE_PANEL PAN_DSKCPY_CPY ;AN000; prepare copying from diskette 1 message
505 DISPLAY_PANEL ;AN000;
506 ;
507 ;;;replace files in drive C: with new files on DOS diskette
508 EXEC_PROGRAM S_STR120_2,S_STR120_3,PARM_BLOCK,EXEC_DIR ;AN006;JW
509 .IF c ;AN000;
510 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
511 .ENDIF ;AN000;
512 ;
513 ;;;S_STR120_1 = "a:*.* C:\<path> /A " ;
514 ;;;copy new files on DOS diskette to install path ;
515 EXEC_PROGRAM S_STR120_2,S_STR120_1,PARM_BLOCK,EXEC_DIR ;AN000; copy new files
516 .IF c ;AN000;
517 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
518 .ENDIF ;AN000;
519;-------------------------------------------------------------
520; copy files from 720k Shell diskette
521;-------------------------------------------------------------
522
523 .IF < f_shell eq e_shell_yes > near
524 ;
525 INSERT_DISK SUB_INS_MSSHELL_A, S_DOS_SHEL_DISK ;AN000;JW Insert Operating diskette
526 ;
527 ;;;display copying files from diskette 1 screen ;
528 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
529 PREPARE_PANEL PAN_DSKCPY_CPY ;AN000; prepare copying from diskette 1 message
530 DISPLAY_PANEL ;AN000;
531 ;
532 ;;;replace files in drive C: with new files on DOS diskette
533 EXEC_PROGRAM S_STR120_2,S_STR120_3,PARM_BLOCK,EXEC_DIR ;AN006;JW
534 .IF c ;AN000;
535 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
536 .ENDIF ;AN000;
537 ;
538 ;;;S_STR120_1 = "a:*.* C:\<path> /A " ;
539 ;;;copy new files on DOS diskette to install path ;
540 EXEC_PROGRAM S_STR120_2,S_STR120_1,PARM_BLOCK,EXEC_DIR ;AN000; copy new files
541 .IF c ;AN000;
542 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
543 .ENDIF ;AN000;
544
545 .ENDIF ; IF shell supported
546
547
548 .ENDIF ;AN000;GHG
549;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
550;;;;720KB;;;;720KB;;;;720KB;;;;720KB;;;;720KB;;;;720KB;;;;720KB;;
551;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
552; End of 720KB support
553;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
554 GOTO CONTINUE_360 ;AN000;
555;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
556;
557;
558;
559;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
560SELECT ENDS ;AN000;
561 END ;AN000;
diff --git a/v4.0/src/SELECT/SELECT7.ASM b/v4.0/src/SELECT/SELECT7.ASM
new file mode 100644
index 0000000..5882cd0
--- /dev/null
+++ b/v4.0/src/SELECT/SELECT7.ASM
@@ -0,0 +1,464 @@
1
2
3PAGE 55,132 ;AN000;
4NAME SELECT ;AN000;
5TITLE SELECT - DOS - SELECT.EXE ;AN000;
6SUBTTL SELECT7.asm ;AN000;
7.ALPHA ;AN000;
8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9;
10; SELECT7.ASM : Copyright 1988 Microsoft
11;
12; DATE: August 8/87
13;
14; COMMENTS: Assemble with MASM 3.0 (using the /A option)
15;
16; Panel flow is defined in the following files:
17;
18; � SELECT1.ASM
19; ;AN000; SELECT2.ASM
20; ;AN000; SELECT3.ASM
21; ;AN000; SELECT4.ASM
22; ;AN000; SELECT5.ASM
23; ;AN000; SELECT6.ASM
24;
25;
26; Module contains code for :
27; - Format the drives
28; - Copy files
29;
30; CHANGE HISTORY:
31;
32; ;AN009; DT added support for creation of the DOSSHELL.BAT as a
33; separately installed file. (D233)
34; ;AN002; GHG for P1146
35; ;AN003; GHG for D234
36; ;AN004; GHG for P65
37; ;AN005; DT for single drive support
38; ;AN006; JW for dos location choice (global or path only)
39; ;AN007; JW fixed deletion of select.* when installation is to the root
40; ;AN072; DT Overlay parser and pcinput if memory = 256KB
41;
42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
43DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
44DATA ENDS ;AN000;
45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
46;
47;
48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
49.XLIST ;AN000;
50 INCLUDE PANEL.MAC ;AN000;
51 INCLUDE SELECT.INC ;AN000;
52 INCLUDE PAN-LIST.INC ;AN000;
53 INCLUDE CASTRUC.INC ;AN000;
54 INCLUDE STRUC.INC ;AN000;
55 INCLUDE MACROS.INC ;AN000;
56 INCLUDE MACROS7.INC ;AN009;DT
57 INCLUDE EXT.INC ;AN000;
58 INCLUDE VARSTRUC.INC ;AN000;
59 INCLUDE ROUT_EXT.INC ;AN000;
60.LIST ;AN000;
61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
62 ;
63 EXTRN DEALLOCATE_HELP:FAR ;AN000;DT
64 EXTRN DEALLOCATE_BLOCK:FAR ;AN000;DT
65 EXTRN ALLOCATE_BLOCK:FAR ;AN000;DT
66 EXTRN DEALLOCATE_MEMORY_CALL:FAR ;AN000;DT
67 EXTRN ALLOCATE_MEMORY_CALL:FAR ;AN000;DT
68 ;
69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
70SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;
71 ASSUME CS:SELECT,DS:DATA ;AN000;
72 ;
73 INCLUDE CASEXTRN.INC ;AN000;
74 ;
75 EXTRN EXIT_SELECT:near ;AN000;
76 EXTRN CREATE_CONFIG_SYS:NEAR ;AN000;
77 EXTRN CREATE_AUTOEXEC_BAT:NEAR ;AN000;
78 EXTRN CREATE_SHELL_BAT:NEAR ;AN009;DT
79 ;
80 EXTRN EXIT_DOS:near ;AN004;GHG
81 EXTRN INSTALL_ERROR:near ;AN004;GHG
82 EXTRN EXIT_SELECT:NEAR ;AN004;GHG
83 EXTRN PROCESS_ESC_F3:near ;AN004;GHG
84 EXTRN EXIT_DOS_CONT:NEAR ;AN004;GHG
85 ;
86 PUBLIC CONTINUE_360 ;AN000;
87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
88;
89; CODE CONTINUES.....
90;
91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
92;;;;;;;;;;INSTALL 360KB DISKETTE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
93;
94; Display copying files from INSTALL diskette
95;
96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
97CONTINUE_360: ;AN000;
98 ;;;
99 ;;;
100 .IF < N_DISKETTE_A eq E_DISKETTE_360 > near ;AN000;
101 ;
102 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
103 PREPARE_PANEL SUB_COPYING ;AN000; prepare copying from diskette 2 message
104 DISPLAY_PANEL ;AN000;
105 ;
106 .IF < MEM_SIZE eq 256 > ;AN000;DT
107 DEALLOCATE_MEMORY ;AN000;DT
108 .ENDIF ;AN000;DT
109 ;
110 ;;;S_STR120_1 = "a:*.* c:\path /a parameter for REPLACE
111 MERGE_STRING S_STR120_1,M_STR120_1,S_A_STARS,S_INSTALL_PATH ;AN000;
112 APPEND_STRING S_STR120_1,M_STR120_1,S_SLASH_A ;AN000;
113 ;
114; .IF < I_DESTINATION eq E_ENTIRE_DISK > ;AN006;JW
115; .THEN ;AN006;
116; ;;;S_STR120_3 = "a:*.* c:\ /s /r parameter for REPLACE
117; COPY_STRING S_STR120_3,M_STR120_3,S_REPLACE_PAR1 ;AN006;JW
118; .ELSE ;AN006;
119 ;;;S_STR120_3 = "a:*.* c:\<path> parameter for REPLACE
120 MERGE_STRING S_STR120_3,M_STR120_3,S_A_STARS,S_INSTALL_PATH ;AN006;JW
121 APPEND_STRING S_STR120_3,M_STR120_3,S_SLASH_R ;AN000;JW
122; .ENDIF ;AN006;
123 ;
124 ;;;change attributes of some files so they are not copied
125 CHANGE_ATTRIBUTE HIDE_STARTUP, E_HIDE_STARTUP ;AN000;
126 ;
127 ;;;replace files in drive C: with new files on INSTALL diskette
128 EXEC_PROGRAM S_REPLACE,S_STR120_3,PARM_BLOCK,EXEC_DIR ;AN006;JW
129 .IF c ;AN000;
130 .IF < MEM_SIZE eq 256 > ;AN000;DT
131 CALL GET_OVERLAY ;AN000;DT Get panels
132 .ENDIF ;AN000;
133 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
134 RESTORE_ATTRIBUTE HIDE_STARTUP,E_HIDE_STARTUP ;AN000;
135 .ENDIF ;AN000;
136 ;
137 ;;;S_STR120_1 = "a:*.* C:\<path> /A" ;
138 ;;;copy NEW files on INSTALL diskette to install path ;
139 EXEC_PROGRAM S_REPLACE,S_STR120_1,PARM_BLOCK,EXEC_DIR ;AN000; copy new files
140 .IF c ;AN000;
141 .IF < MEM_SIZE eq 256 > ;AN000;DT
142 CALL GET_OVERLAY ;AN000;DT Get panels
143 .ENDIF ;AN000;
144 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
145 RESTORE_ATTRIBUTE HIDE_STARTUP,E_HIDE_STARTUP ;AN000;
146 .ENDIF ;AN000;
147 ;
148 RESTORE_ATTRIBUTE HIDE_STARTUP,E_HIDE_STARTUP ;AN000;
149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
150;
151; Prompt the user to remove the INSTALL (source) diskette
152; and insert the OPERATING 1 (source) diskette.
153;
154;;;;;;;;;;SHELL 360KB DISKETTE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
156 ;
157 .IF < MEM_SIZE eq 256 > ;AN000;DT
158 CALL GET_OVERLAY ;AN000;DT Get panels
159 .ENDIF ;AN000;
160 ;
161 ;;;insert OPERATING 1 diskette in drive A: ;
162 INSERT_DISK SUB_REM_SELECT_360, S_DOS_UTIL1_DISK ;AN000;JW
163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
164;
165; Display copying files
166;
167; NOTE: The REPLACE command is now issued from the hard disk
168; (since it is not found on any other disk)
169;
170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
171 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
172 PREPARE_PANEL SUB_COPYING ;AN000; prepare copying from diskette 2 message
173 DISPLAY_PANEL ;AN000;
174 ;
175 .IF < MEM_SIZE eq 256 > ;AN000;DT
176 DEALLOCATE_MEMORY ;AN000;DT
177 .ENDIF ;AN000;DT
178 ;
179 ;;;S_STR120_1 = "a:*.* c:\path /a parameter for REPLACE
180 MERGE_STRING S_STR120_1,M_STR120_1,S_A_STARS,S_INSTALL_PATH ;AN000;
181 APPEND_STRING S_STR120_1,M_STR120_1,S_SLASH_A ;AN000;
182 ;
183 COMPARE_STRINGS S_INSTALL_PATH, S_DEST_DRIVE ;AN000; compare to C:\
184 .IF < nc > ;AN000; if the same
185 MERGE_STRING S_STR120_2,M_STR120_2,S_INSTALL_PATH,S_REPLACE ;AN000;
186 .ELSE ;AN000;
187 MERGE_STRING S_STR120_2,M_STR120_2,S_INSTALL_PATH,S_SLASH ;AN000;
188 APPEND_STRING S_STR120_2,M_STR120_2,S_REPLACE;AN000;
189 .ENDIF ;AN000;
190 ;
191 ;;;replace files in drive C: with new files on OPERATING 1 diskette
192 EXEC_PROGRAM S_STR120_2,S_STR120_3,PARM_BLOCK,EXEC_DIR ;AN006;JW
193 .IF c ;AN000;
194 .IF < MEM_SIZE eq 256 > ;AN000;DT
195 CALL GET_OVERLAY ;AN000;DT Get panels
196 .ENDIF ;AN000;
197 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
198 .ENDIF ;AN000;
199 ;
200 ;;;S_STR120_1 = "a:*.* C:\<path> /A" ;
201 ;;;copy NEW files on OPERATING 1 diskette to install path
202 EXEC_PROGRAM S_STR120_2,S_STR120_1,PARM_BLOCK,EXEC_DIR ;AN000; copy new files
203 .IF c ;AN000;
204 .IF < MEM_SIZE eq 256 > ;AN000;DT
205 CALL GET_OVERLAY ;AN000;DT Get panels
206 .ENDIF ;AN000;
207 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
208 .ENDIF ;AN000;
209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
210;
211; insert the OPERATING #2 diskette.
212;
213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
214 ;
215 .IF < MEM_SIZE eq 256 > ;AN000;DT
216 CALL GET_OVERLAY ;AN000;DT Get panels
217 .ENDIF ;AN000;DT
218 ;
219 ;;; insert OPERATING #2 diskette in drive A: ;
220 INSERT_DISK SUB_INS_OPER2, S_DOS_UTIL2_DISK ;AN000;JW
221;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
222;
223; Display copying files from OPERATING #2
224;
225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
226 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
227 PREPARE_PANEL SUB_COPYING ;AN000; prepare copying from diskette 1 message
228 DISPLAY_PANEL ;AN000;
229 ;
230 .IF < MEM_SIZE eq 256 > ;AN000;DT
231 DEALLOCATE_MEMORY ;AN000;DT
232 .ENDIF ;AN000;DT
233 ;
234 ;;;replace files in drive C: with new files on OPERATING 2 diskette
235 EXEC_PROGRAM S_STR120_2,S_STR120_3,PARM_BLOCK,EXEC_DIR ;AN006;JW
236 .IF c ;AN000;
237 .IF < MEM_SIZE eq 256 > ;AN000;DT
238 CALL GET_OVERLAY ;AN000;DT Get panels
239 .ENDIF ;AN000;
240 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
241 .ENDIF ;AN000;
242 ;
243 ;;;S_STR120_1 = "a:*.* C:\<path> /A " ;
244 ;;;copy NEW files on OPERATING 2 diskette to install path
245 EXEC_PROGRAM S_STR120_2,S_STR120_1,PARM_BLOCK,EXEC_DIR ;AN000; copy new files
246 .IF c ;AN000;
247 .IF < MEM_SIZE eq 256 > ;AN000;DT
248 CALL GET_OVERLAY ;AN000;DT Get panels
249 .ENDIF ;AN000;
250 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
251 .ENDIF ;AN000;
252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
253;
254; insert the OPERATING #3 diskette.
255;
256;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
257 ;
258 .IF < MEM_SIZE eq 256 > ;AN000;DT
259 CALL GET_OVERLAY ;AN000;DT Get panels
260 .ENDIF ;AN000;DT
261 ;
262 ;;; insert OPERATING #3 diskette in drive A: ;
263 INSERT_DISK SUB_REM_UTIL1_360, S_DOS_UTIL3_DISK ;AN000;JW
264;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
265;
266; Display copying files from OPERATING #3
267;
268;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
269 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
270 PREPARE_PANEL SUB_COPYING ;AN000; prepare copying from diskette 1 message
271 DISPLAY_PANEL ;AN000;
272 ;
273 .IF < MEM_SIZE eq 256 > ;AN000;DT
274 DEALLOCATE_MEMORY ;AN000;DT
275 .ENDIF ;AN000;DT
276 ;
277 ;;;replace files in drive C: with new files on OPERATING 2 diskette
278 EXEC_PROGRAM S_STR120_2,S_STR120_3,PARM_BLOCK,EXEC_DIR ;AN006;JW
279 .IF c ;AN000;
280 .IF < MEM_SIZE eq 256 > ;AN000;DT
281 CALL GET_OVERLAY ;AN000;DT Get panels
282 .ENDIF ;AN000;
283 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
284 .ENDIF ;AN000;
285 ;
286 ;;;S_STR120_1 = "a:*.* C:\<path> /A " ;
287 ;;;copy NEW files on OPERATING 2 diskette to install path
288 EXEC_PROGRAM S_STR120_2,S_STR120_1,PARM_BLOCK,EXEC_DIR ;AN000; copy new files
289 .IF c ;AN000;
290 .IF < MEM_SIZE eq 256 > ;AN000;DT
291 CALL GET_OVERLAY ;AN000;DT Get panels
292 .ENDIF ;AN000;
293 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
294 .ENDIF ;AN000;
295;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
296;
297; insert the SELECT diskette.
298;
299;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
300 ;
301 .IF < MEM_SIZE eq 256 > ;AN000;DT
302 CALL GET_OVERLAY ;AN000;DT Get panels
303 .ELSE ;AN000;DT
304 ;;; insert the SELECT diskette in drive A ;
305 INSERT_DISK SUB_REM_SHELL_360, S_DOS_SEL_360 ;AN000;JW
306 .ENDIF ;AN000;DT
307;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
308;
309; Display copying files from SELECT diskette
310;
311;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
312 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
313 PREPARE_PANEL SUB_COPYING ;AN000; prepare copying from diskette 1 message
314 DISPLAY_PANEL ;AN000;
315 ;
316 .IF < MEM_SIZE eq 256 > ;AN000;DT
317 DEALLOCATE_MEMORY ;AN000;DT
318 .ENDIF ;AN000;DT
319 ;
320 ;;;replace files in drive C: with new files on SELECT diskette
321 EXEC_PROGRAM S_STR120_2,S_STR120_3,PARM_BLOCK,EXEC_DIR ;AN006;JW
322 .IF c ;AN000;
323 .IF < MEM_SIZE eq 256 > ;AN000;DT
324 CALL GET_OVERLAY ;AN000;DT Get panels
325 .ENDIF ;AN000;
326 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
327 .ENDIF ;AN000;
328 ;
329 ;;;S_STR120_1 = "a:*.* C:\<path> /A " ;
330 ;;;copy new files on SELECT diskette to install path ;
331 EXEC_PROGRAM S_STR120_2,S_STR120_1,PARM_BLOCK,EXEC_DIR;AN000; copy new files
332 .IF c ;AN000;
333 .IF < MEM_SIZE eq 256 > ;AN000;DT
334 CALL GET_OVERLAY ;AN000;DT Get panels
335 .ENDIF ;AN000;
336 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
337 .ENDIF ;AN000;
338 ;
339;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
340;
341; maybe insert the SHELL diskette.
342;
343;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
344
345 .IF < f_shell eq e_shell_yes > near
346 ;
347 .IF < MEM_SIZE eq 256 > ;AN000;DT
348 CALL GET_OVERLAY ;AN000;DT Get panels
349 .ENDIF ;AN000;DT
350 ;
351 INSERT_DISK SUB_INS_MSSHELL_A, S_DOS_SHEL_DISK ;AN000;JW
352;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
353;
354; Display copying files from SHELL diskette
355;
356;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
357 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
358 PREPARE_PANEL SUB_COPYING ;AN000; prepare copying from diskette 1 message
359 DISPLAY_PANEL ;AN000;
360 ;
361 .IF < MEM_SIZE eq 256 > ;AN000;DT
362 DEALLOCATE_MEMORY ;AN000;DT
363 .ENDIF ;AN000;DT
364 ;
365 ;;;replace files in drive C: with new files on SHELL diskette
366 EXEC_PROGRAM S_STR120_2,S_STR120_3,PARM_BLOCK,EXEC_DIR ;AN006;JW
367 .IF c ;AN000;
368 .IF < MEM_SIZE eq 256 > ;AN000;DT
369 CALL GET_OVERLAY ;AN000;DT Get panels
370 .ENDIF ;AN000;
371 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
372 .ENDIF ;AN000;
373 ;
374 ;;;S_STR120_1 = "a:*.* C:\<path> /A " ;
375 ;;;copy NEW files on SHELL diskette to install path
376 EXEC_PROGRAM S_STR120_2,S_STR120_1,PARM_BLOCK,EXEC_DIR;AN000; copy new files
377 .IF c ;AN000;
378 .IF < MEM_SIZE eq 256 > ;AN000;DT
379 CALL GET_OVERLAY ;AN000;DT Get panels
380 .ENDIF ;AN000;
381 HANDLE_ERROR ERR_COPY_DISK, E_RETURN ;AN000;
382 .ENDIF ;AN000;
383
384 .endif ; optional shell support
385
386
387 ;Delete select files from C: drive ;
388 COMPARE_STRINGS S_INSTALL_PATH, S_DEST_DRIVE ;AN007; compare to C:\
389 .IF < nc > ;AN007; if installed to the root
390 MERGE_STRING S_STR120_1,M_STR120_1,S_C_DRIVE,S_SELDAT_C ;AN000;
391 ERASE_FILE S_STR120_1 ;AN000;DT
392 MERGE_STRING S_STR120_1,M_STR120_1,S_C_DRIVE,S_SELEXE_C ;AN000;
393 ERASE_FILE S_STR120_1 ;AN000;DT
394 .ELSE near ;AN007; else installed to a directory
395 MERGE_STRING S_STR120_1,M_STR120_1,S_INSTALL_PATH,S_SELDAT_C ;AN000;
396 ERASE_FILE S_STR120_1 ;AN000;DT
397 MERGE_STRING S_STR120_1,M_STR120_1,S_INSTALL_PATH,S_SELEXE_C ;AN000;
398 ERASE_FILE S_STR120_1 ;AN000;DT
399 MERGE_STRING S_STR120_1,M_STR120_1,S_INSTALL_PATH,S_AUTOEX_C ;AN000;
400 ERASE_FILE S_STR120_1 ;AN000;DT
401 MERGE_STRING S_STR120_1,M_STR120_1,S_INSTALL_PATH,S_CONSYS_C ;AN000;
402 ERASE_FILE S_STR120_1 ;AN000;DT
403 .ENDIF ;AN007;
404 ;
405 .ENDIF ;AN000;
406;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
407;;;;360KB;;;;360KB;;;;360KB;;;;360KB;;;;360KB;;;;360KB;;;;360KB;;
408;
409; End of 360KB support
410;
411; Installation completed. inform user to reboot
412;
413; Search for the installed CONFIG.340 , and
414; we issue a different panel to describe the '.340' files.
415;
416;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
417 ;
418 .IF < MEM_SIZE eq 256 > ;AN000;DT
419 ALLOCATE_MEMORY ;AN000;DT
420 CALL INITIALIZE ;AN000;DT and read them in
421 .ENDIF ;AN000;DT
422 ;
423 INIT_PQUEUE PAN_COMPLETE1 ;AN000; initialize queue
424 .IF < I_DESTINATION ne E_ENTIRE_DISK > ;AN010;JW
425 PREPARE_PANEL PAN_PARTIAL ;AN010;JW
426 .ELSE ;AN010;JW
427 FIND_FILE S_CONFIG_REN, E_FILE_ATTR ;AN003;GHG Look for '.340' files
428 .IF < c > ;AN003;GHG
429 PREPARE_PANEL SUB_COMP_VER ;AN003;GHG prepare DOS install message
430 .ELSE ;AN003;GHG
431 PREPARE_PANEL SUB_COMP_REP ;AN003;GHG prepare DOS Replace message
432 .ENDIF ;AN003;GHG
433 .ENDIF ;AN010;
434 ;
435 PREPARE_PANEL SUB_COMP_KYS_1 ;AN000;
436 DISPLAY_PANEL ;AN000;
437 SAVE_PANEL_LIST ;AN000;
438 ;
439 GET_FUNCTION FK_REBOOT ;AN000; User has to reboot
440;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
441;
442;
443;
444;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
445PUBLIC GET_OVERLAY ;AN000;
446GET_OVERLAY PROC NEAR ;AN000;
447 .IF < N_DISKETTE_A ne E_DISKETTE_720 > ;AN063;SEH
448 CLEAR_SCREEN ;AN000;
449 DISPLAY_MESSAGE 12 ;AN000;DT Insert SELECT diskette
450 .REPEAT ;AN000;
451 GET_FUNCTION FK_ENT ;AN000; get user entered function
452 FIND_FILE S_DOS_SEL_360, E_FILE_ATTR ;AN000;
453 .LEAVE < nc > ;AN000;
454 DISPLAY_MESSAGE 11 ;AN000;DT Beep
455 .UNTIL ;AN000;
456 .ENDIF ;AN063;SEH
457 ALLOCATE_MEMORY ;AN000;DT
458 CALL INITIALIZE ;AN000;DT and read them in
459 RET ;AN000;
460GET_OVERLAY ENDP ;AN000;
461 ;
462SELECT ENDS ;AN000;
463 END ;AN000;
464 \ No newline at end of file
diff --git a/v4.0/src/SELECT/SELECT8.ASM b/v4.0/src/SELECT/SELECT8.ASM
new file mode 100644
index 0000000..effac33
--- /dev/null
+++ b/v4.0/src/SELECT/SELECT8.ASM
@@ -0,0 +1,453 @@
1
2
3PAGE 55,132 ;AN000;
4NAME SELECT ;AN000;
5TITLE SELECT - DOS - SELECT.EXE ;AN000;
6SUBTTL SELECT8.asm ;AN000;
7.ALPHA ;AN000;
8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9;
10; SELECT8.ASM : Copyright 1988 Microsoft
11;
12; DATE: August 8/87
13;
14; COMMENTS: Assemble with MASM 3.0 (using the /A option)
15;
16;
17; CHANGE HISTORY:
18;
19; ;AN000; DT added support for creation of the DOSSHELL.BAT as a
20; separately installed file. (D233)
21; ;AN002; GHG for P1146
22; ;AN003; GHG for D234
23; ;AN004; GHG for P65
24; ;AN005; DT for single drive support
25; ;AN006; JW correct critical error problems during format/copy
26;
27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
28DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
29 EXTRN EXEC_ERR:BYTE ;AN063;SEH
30 EXTRN BCHAR:BYTE ;AN000;DT
31 EXTRN DSKCPY_ERR:BYTE ;AN000;DT
32 EXTRN DSKCPY_WHICH:BYTE ;AN000;DT
33 EXTRN DSKCPY_OPTION:BYTE ;AN000;DT
34 EXTRN DSKCPY_PAN1:WORD ;AN000;DT
35 EXTRN DSKCPY_PAN2:WORD ;AN000;DT
36 EXTRN DSKCPY_PAN3:WORD ;AN000;DT
37 EXTRN DSKCPY_SOURCE:WORD ;AN000;DT
38DATA ENDS ;AN000;
39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
40;
41;
42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
43.XLIST ;AN000;
44 INCLUDE PANEL.MAC ;AN000;
45 INCLUDE SELECT.INC ;AN000;
46 INCLUDE PAN-LIST.INC ;AN000;
47 INCLUDE CASTRUC.INC ;AN000;
48 INCLUDE STRUC.INC ;AN000;
49 INCLUDE MACROS.INC ;AN000;
50 INCLUDE EXT.INC ;AN000;
51 INCLUDE VARSTRUC.INC ;AN000;
52 INCLUDE ROUT_EXT.INC ;AN000;
53.LIST ;AN000;
54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
55;
56;
57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
58 EXTRN ALLOCATE_MEMORY_CALL:FAR ;AN063;SEH
59 EXTRN DEALLOCATE_MEMORY_CALL:FAR ;AN063;SEH
60 EXTRN ALLOCATE_BLOCK:FAR ;AN000;DT
61 EXTRN PM_BASECHAR:BYTE ;AN000;
62 EXTRN PM_BASEATTR:BYTE ;AN000;
63 EXTRN CRD_CCBVECOFF:WORD ;AN000;
64 EXTRN CRD_CCBVECSEG:WORD ;AN000;
65SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;
66 ASSUME CS:SELECT,DS:DATA ;AN000;
67 ;
68 INCLUDE CASEXTRN.INC ;AN000;
69 ;
70 EXTRN EXIT_SELECT:near ;AN000;
71 EXTRN CREATE_CONFIG_SYS:NEAR ;AN000;
72 EXTRN CREATE_AUTOEXEC_BAT:NEAR ;AN000;
73 EXTRN CREATE_SHELL_BAT:NEAR ;AN000;DT
74 EXTRN DEALLOCATE_HELP:FAR ;AN007;JW
75 ;
76 EXTRN INSTALL_TO_360_DRIVE:NEAR ;AN000;DT
77 EXTRN INSTALL_ERROR:NEAR ;AN000;
78 EXTRN EXIT_DOS:NEAR ;AN000;
79 EXTRN PROCESS_ESC_F3:NEAR ;AN000;
80 EXTRN EXIT_DOS_CONT:NEAR ;AN000;
81 EXTRN GET_ENTER_KEY:NEAR ;AN063;SEH
82 EXTRN GET_OVERLAY:NEAR ;AN063;SEH
83 extrn Free_Parser:near
84 PUBLIC DISKETTE_INSTALL ;AN111;JW
85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
86;
87; Install is to drive B: or drive A:
88;
89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
90DISKETTE_INSTALL: ;AC111;JW
91 ;
92 INIT_VAR F_PATH, E_PATH_NO ;AN000;
93 INIT_VAR F_APPEND, E_APPEND_NO ;AN000;
94 INIT_VAR F_PROMPT, E_PROMPT_NO ;AN000;
95 INIT_VAR F_XMA, E_XMA_NO ;AN000;
96 INIT_VAR F_FASTOPEN, E_FASTOPEN_NO ;AN000;
97 INIT_VAR F_SHARE, E_SHARE_NO ;AN000;
98 INIT_VAR S_INSTALL_PATH,0 ;AN000;set install path field = 0
99 ;
100 .IF < N_DISKETTE_A eq E_DISKETTE_360 > ;AN111;JW
101 GOTO INSTALL_TO_360_DRIVE ;AN111;JW
102 .ENDIF ;AN111;JW
103 ;
104 .IF < N_DISKETTE_A eq E_DISKETTE_720 > ;AN111;JW
105 GOTO INSTALL_TO_720_DRIVE ;AN111;JW
106 .ENDIF ;AN111;JW
107 ;
108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
109;
110; install is to 1.44M drives
111;
112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
113 ;;;Introduction to 1440KB install ;
114 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
115 PREPARE_PANEL PAN_START1440 ;AN000;
116 PREPARE_PANEL PAN_HBAR ;AN000;
117 PREPARE_CHILDREN ;AN000; prepare child panels
118 DISPLAY_PANEL ;AN000;
119 ;
120 GET_FUNCTION FK_ENT ;AN000;
121 ;
122 .IF < I_DEST_DRIVE eq E_DEST_DRIVE_B > near ;AN111;JW
123 ;;;insert startup diskette in drive B: ;
124 INIT_PQUEUE PAN_INST_PROMPT ;AN000; initialize queue
125 PREPARE_PANEL SUB_INS_START_B ;AN000; insert startup diskette in drive B:
126 PREPARE_PANEL PAN_HBAR ;AN000; prepare horizontal bar
127 PREPARE_CHILDREN ;AN000; prepare child panels
128 DISPLAY_PANEL ;AN000; display panel
129 ;
130 GET_FUNCTION FK_ENT ;AN000;
131 ;
132 ;;;formatting disk screen ;
133 INIT_PQUEUE FORMAT_DISKET ;AN000; initialize queue
134 DISPLAY_PANEL ;AN000;
135 ;
136 ;;;format startup diskette in drive B: ;
137 .REPEAT ;AN006;JW
138 EXEC_PROGRAM S_FORMAT,S_FORMAT_B,PARM_BLOCK,EXEC_NO_DIR;AN000; format startup disket & copy system files
139 .LEAVE nc ;AN006;JW
140 HANDLE_FORMAT_ERROR ;AN000;JW
141 .UNTIL ;AN006;JW
142 ;
143 ;;;create config and autoexec files on startup diskette ;
144 CREATE_CONFIG S_CONFIG_NEW_B, N_RETCODE ;AN000; create CONFIG.SYS file
145 .IF c ;AN000;
146 GOTO INSTALL_ERROR ;AN000;
147 .ENDIF ;AN000;
148 CREATE_AUTOEXEC S_AUTO_NEW_B,E_DEST_SHELL,N_RETCODE;AN000; create AUTOEXEC.BAT file with SHELL pars
149 .IF < c > near ;AN000;
150 GOTO INSTALL_ERROR ;AN000;
151 .ENDIF ;AN000;
152 ;
153 .ELSE near ;AN111; install is to 1.44 meg A: drive JW
154 ;
155 ;;;format startup diskette in drive A: ;
156 ;;;use format int2f call to display panels ;
157 INIT_VAR FORMAT_WHICH,STARTUP ;AN111;JW
158 .REPEAT ;AN006;JW
159 HOOK_2F_FORMAT ;AN111;JW
160 EXEC_PROGRAM S_FORMAT,S_FORMAT_A,PARM_BLOCK,EXEC_NO_DIR ;AN000; format startup disket & copy system files
161 .LEAVE nc ;AN006;JW
162 UNHOOK_2F ;AN111;JW
163 HANDLE_FORMAT_ERROR ;AN000;JW
164 INSERT_DISK SUB_REM_DOS_A, S_DOS_SEL_360 ;AN000;
165 .UNTIL ;AN006;JW
166 UNHOOK_2F ;AN111;JW
167 ;
168 ;;;create config and autoexec files on startup diskette ;
169 CREATE_CONFIG S_CONSYS_C, N_RETCODE ;AN000; create CONFIG.SYS file
170 .IF c ;AN000;
171 GOTO INSTALL_ERROR ;AN000;
172 .ENDIF ;AN000;
173 CREATE_AUTOEXEC S_AUTOEX_C,E_DEST_SHELL,N_RETCODE ;AN000; create AUTOEXEC.BAT file with SHELL pars
174 .IF c ;AN000;
175 GOTO INSTALL_ERROR ;AN000;
176 .ENDIF ;AN000;
177 ;
178 ;;; insert the INSTALL diskette in drive A: ;
179 INSERT_DISK SUB_REM_DOS_A, S_DOS_SEL_360 ;AN000;
180 ;
181 .ENDIF ;AN000;
182 ;
183 ;;;copying files screen ;
184 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
185 PREPARE_PANEL SUB_COPYING ;AN111; prepare copying files message JW
186 DISPLAY_PANEL ;AN000;
187 ;
188 .IF < I_DEST_DRIVE eq E_DEST_DRIVE_A > ;AN111;JW
189 INIT_VAR SOURCE_PANEL, SUB_REM_DOS_A ;AN000;
190 INIT_VAR DEST_PANEL, SUB_INS_STARTT_S360 ;AN000;
191 .ENDIF ;AN000;
192 ;
193 ;;;copy all files from INSTALL diskette to STARTUP diskette
194 COPY_FILES I_DEST_DRIVE,COPY_INST_1200_1440,E_INST_1200_1440;AN000;
195 .IF c ;AN000;
196 GOTO INSTALL_ERROR ;AN000;
197 .ENDIF ;AN000;
198 ;
199 ;;; insert OPERATING diskette in A: ;
200 INSERT_DISK SUB_REM_SEL_A, S_DOS_UTIL1_DISK ;AN000;
201 ;
202 ;;;copying files screen ;
203 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
204 PREPARE_PANEL SUB_COPYING ;AN000; prepare copying files message
205 DISPLAY_PANEL ;AN000;
206 ;
207 .IF < I_DEST_DRIVE eq E_DEST_DRIVE_A > ;AN111;JW
208 INIT_VAR SOURCE_PANEL, SUB_REM_SEL_A ;AN111;JW
209 INIT_VAR DEST_PANEL, SUB_INS_STARTT_S360 ;AN111;JW
210 .ENDIF ;AN000;
211 ;
212 ;;;copy all files from OPERATING diskette to STARTUP diskette;
213 COPY_FILES I_DEST_DRIVE,COPY_OPER_1200_1440,E_OPER_1200_1440;AN000;
214 .IF c ;AN000;
215 GOTO INSTALL_ERROR ;AN000;
216 .ENDIF ;AN000;
217
218 .if < f_shell eq e_shell_yes > near ; install the shell?
219
220 ;;; insert MS-SHELL diskette in A: ;
221 INSERT_DISK SUB_INS_MSSHELL_A, S_DOS_SHEL_DISK ;AN000;
222 ;
223 ;;;copying files screen ;
224 INIT_PQUEUE PAN_INSTALL_DOS ;AN000; initialize queue
225 PREPARE_PANEL SUB_COPYING ;AN000; prepare copying files message
226 DISPLAY_PANEL ;AN000;
227 ;
228 .IF < I_DEST_DRIVE eq E_DEST_DRIVE_A > ;AN111;JW
229 INIT_VAR SOURCE_PANEL, SUB_INS_MSSHELL_A ;AN111;JW
230 INIT_VAR DEST_PANEL, SUB_INS_STARTT_S360 ;AN111;JW
231 .ENDIF ;AN000;
232 ;
233 ;;;copy all files from OPERATING diskette to STARTUP diskette;
234 COPY_FILES I_DEST_DRIVE,COPY_SHELL_1200_1440,E_SHELL_1200_1440;AN000;
235 .IF c ;AN000;
236 GOTO INSTALL_ERROR ;AN000;
237 .ENDIF ;AN000;
238
239 .endif ; installing the shell
240 ;
241 .IF < I_DEST_DRIVE eq E_DEST_DRIVE_B > ;AN111;JW
242 CREATE_SHELL S_SHELL_NEW_B, N_RETCODE ;AN000;DT
243 .IF c ;AN000;DT
244 GOTO INSTALL_ERROR ;AN000;DT
245 .ENDIF ;AN000;DT
246 .ELSE ;AN000;
247 CREATE_SHELL S_SHELL_NEW, N_RETCODE ;AN000;DT
248 .IF c ;AN000;DT
249 GOTO INSTALL_ERROR ;AN000;DT
250 .ENDIF ;AN000;DT
251 .ENDIF ;AN000;
252 ;
253 ;;;installation complete screen ;
254 INIT_PQUEUE PAN_COMPLETE2 ;AN000; initialize queue
255 PREPARE_PANEL SUB_COMP_KYS_1C ;AN000;
256 DISPLAY_PANEL ;AN000;
257 SAVE_PANEL_LIST ;AN000;
258 ;
259 GET_FUNCTION FK_REBOOT ;AN000;
260;;;;;;;;control will not return here. user has to reboot;;;;;;;;; end of install to 1.44M drive
261;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
262;
263; Install to 720K drive
264;
265;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
266INSTALL_TO_720_DRIVE:
267 .IF < MEM_SIZE eq 256 >
268 DEALLOCATE_MEMORY
269 call Free_Parser
270 .IF < C >
271 GOTO INSTALL_ERROR
272 .ENDIF
273 CALL GET_OVERLAY
274 INSERT_DISK SUB_REM_DOS_A, S_DOS_COM_360
275 .ENDIF
276
277 ;;;Introduction to 720KB install
278 INIT_PQUEUE PAN_INSTALL_DOS
279 PREPARE_PANEL PAN_START720
280 PREPARE_PANEL PAN_HBAR
281 PREPARE_CHILDREN
282 DISPLAY_PANEL
283
284 GET_FUNCTION FK_ENT
285
286 CALL DEALLOCATE_HELP
287
288 .IF < I_DEST_DRIVE eq E_DEST_DRIVE_A > near
289
290 ;;;diskcopy INSTALL diskette to STARTUP diskette
291 DISKCOPY_TO DSKCPY_TO_A_360,NO_SOURCE1,S_DOS_SEL_360
292 DISKCOPY_PANELS SUB_REM_DOS_A,SUB_COPYING,SUB_INS_STARTT_S360
293 .REPEAT
294 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
295 CALL HOOK_INT_2F
296 EXEC_PROGRAM S_DISKCOPY,S_DISKCOPY_PARM,PARM_BLOCK,EXEC_NO_DIR
297 CALL RESTORE_INT_2F
298 .IF < c >
299 GOTO INSTALL_ERROR
300 .ENDIF
301 .UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
302 ; delete unneeded files
303 ERASE_FILE S_AUTOEX_C
304 ERASE_FILE S_CONSYS_C
305 ERASE_FILE S_SELEXE_C
306 ERASE_FILE S_SELHLP_C
307 ERASE_FILE S_SELPRT_C
308 ERASE_FILE S_SELDAT_C
309 ; make config.sys and autoexec.bat
310 create_config s_consys_c, n_retcode
311 .if c
312 goto install_error
313 .endif
314 create_autoexec s_autoex_c, e_dest_dos, n_retcode
315 .if c
316 goto install_error
317 .endif
318
319 ;;; diskcopy OPERATE diskette to WORKING diskette
320 .REPEAT
321 DISKCOPY_TO DSKCPY_TO_A_360,SOURCE1,S_DOS_UTIL1_DISK
322 DISKCOPY_PANELS SUB_REM_SEL_A,SUB_COPYING,SUB_INS_WORKING_A
323 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
324 CALL HOOK_INT_2F
325 EXEC_PROGRAM S_DISKCOPY,S_DISKCOPY_PARM,PARM_BLOCK,EXEC_NO_DIR
326 CALL RESTORE_INT_2F
327 .IF < c >
328 GOTO INSTALL_ERROR
329 .ENDIF
330 .LEAVE < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
331 INSERT_DISK SUB_REM_DOS_A, S_DOS_SEL_360
332 .UNTIL
333
334 ;;;perhaps diskcopy MS-SHELL to SHELL
335 .IF < f_shell eq e_shell_yes > near
336 .REPEAT
337 INSERT_DISK SUB_REM_DOS_A, S_DOS_SEL_360
338 DISKCOPY_TO DSKCPY_TO_A_360,SOURCE1,S_DOS_SHEL_DISK
339 DISKCOPY_PANELS SUB_INS_MSSHELL_A,SUB_COPYING,SUB_INS_SHELL_S360
340 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
341 CALL HOOK_INT_2F
342 EXEC_PROGRAM S_DISKCOPY,S_DISKCOPY_PARM,PARM_BLOCK,EXEC_NO_DIR
343 CALL RESTORE_INT_2F
344 .IF < c >
345 GOTO INSTALL_ERROR
346 .ENDIF
347 .UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
348 ; make config.sys and autoexec.bat
349 create_config s_consys_c, n_retcode
350 .if c
351 goto install_error
352 .endif
353 create_autoexec s_autoex_c, e_dest_shell, n_retcode
354 .if c
355 goto install_error
356 .endif
357 create_shell s_shell_new, n_retcode
358 .IF c near
359 goto install_error
360 .ENDIF
361 .ENDIF
362
363 .ELSE near ; This is a two floppy system. Install from A to B.
364
365 ;;;diskcopy INSTALL diskette to STARTUP diskette
366 DISKCOPY_TO DSKCPY_TO_B,SOURCE1,S_DOS_SEL_360
367 DISKCOPY_PANELS SUB_INS_START_B,SUB_COPYING,NOPANEL
368 .REPEAT
369 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
370 CALL HOOK_INT_2F
371 EXEC_PROGRAM S_DISKCOPY,S_DSKCPY_TO_B,PARM_BLOCK,EXEC_NO_DIR
372 CALL RESTORE_INT_2F
373 .IF < c >
374 GOTO INSTALL_ERROR
375 .ENDIF
376 .UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
377 ; delete unneeded files
378 ERASE_FILE S_AUTO_NEW_B
379 ERASE_FILE S_CONFIG_NEW_B
380 ERASE_FILE S_SELEXE_NEW_B
381 ERASE_FILE S_SELHLP_NEW_B
382 ERASE_FILE S_SELPRT_NEW_B
383 ERASE_FILE S_SELDAT_NEW_B
384 ; make config.sys and autoexec.bat
385 create_config s_config_new_b, n_retcode
386 .if c
387 goto install_error
388 .endif
389 create_autoexec s_auto_new_b, e_dest_dos, n_retcode
390 .if c
391 goto install_error
392 .endif
393
394 ;;; diskcopy OPERATE diskette to WORKING diskette
395 .REPEAT
396 DISKCOPY_TO DSKCPY_TO_B,SOURCE1,S_DOS_UTIL1_DISK
397 DISKCOPY_PANELS SUB_INS_OP_WORK,SUB_COPYING,NOPANEL
398 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
399 CALL HOOK_INT_2F
400 EXEC_PROGRAM S_DISKCOPY,S_DSKCPY_TO_B,PARM_BLOCK,EXEC_NO_DIR
401 CALL RESTORE_INT_2F
402 .IF < c >
403 GOTO INSTALL_ERROR
404 .ENDIF
405 .LEAVE < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
406 INSERT_DISK SUB_REM_DOS_A, S_DOS_SEL_360
407 .UNTIL
408
409 ;;;perhaps diskcopy MS-SHELL to SHELL
410 .IF < f_shell eq e_shell_yes > near
411 .REPEAT
412 INSERT_DISK SUB_REM_DOS_A, S_DOS_SEL_360
413 DISKCOPY_TO DSKCPY_TO_B,SOURCE1,S_DOS_SHEL_DISK
414 DISKCOPY_PANELS SUB_INS_SHELL_DISKS,SUB_COPYING,NOPANEL
415 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
416 CALL HOOK_INT_2F
417 EXEC_PROGRAM S_DISKCOPY,S_DSKCPY_TO_B,PARM_BLOCK,EXEC_NO_DIR
418 CALL RESTORE_INT_2F
419 .IF < c >
420 GOTO INSTALL_ERROR
421 .ENDIF
422 .UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
423 ; make config.sys and autoexec.bat
424 create_config s_config_new_b, n_retcode
425 .if c
426 goto install_error
427 .endif
428 create_autoexec s_auto_new_b, e_dest_shell, n_retcode
429 .if c
430 goto install_error
431 .endif
432 create_shell s_shell_new_b, n_retcode
433 .if c
434 goto install_error
435 .endif
436 .ENDIF
437 .ENDIF ; end if two drive 720 installation
438
439
440 ;;;installation complete and change diskettes screen
441 INIT_PQUEUE PAN_COMPLETE2
442 PREPARE_PANEL SUB_COMP_KYS_2
443 DISPLAY_PANEL
444 SAVE_PANEL_LIST
445 GET_FUNCTION FK_REBOOT
446;;;;;;;;control will not return here. user has to reboot
447;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
448;
449;
450;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
451SELECT ENDS
452 END
453 \ No newline at end of file
diff --git a/v4.0/src/SELECT/SELECT9.ASM b/v4.0/src/SELECT/SELECT9.ASM
new file mode 100644
index 0000000..e294c6c
--- /dev/null
+++ b/v4.0/src/SELECT/SELECT9.ASM
@@ -0,0 +1,518 @@
1
2
3PAGE 55,132
4NAME SELECT
5TITLE SELECT - DOS - SELECT.EXE
6SUBTTL SELECT9.asm
7.ALPHA
8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9;
10; SELECT9.ASM : Copyright 1988 Microsoft
11;
12; DATE: August 8/87
13;
14; COMMENTS: Assemble with MASM 3.0 (using the /A option)
15;
16; Panel flow is defined in the following files:
17;
18; � SELECT1.ASM
19; � SELECT2.ASM
20; � SELECT3.ASM
21; � SELECT4.ASM
22; � SELECT5.ASM
23; � SELECT6.ASM
24;
25;
26; Module contains code for :
27; - Format the drives
28; - Copy files
29;
30; CHANGE HISTORY:
31;
32;
33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
34DATA SEGMENT BYTE PUBLIC 'DATA'
35 EXTRN DSKCPY_ERR:BYTE
36 EXTRN DSKCPY_WHICH:BYTE
37 EXTRN DSKCPY_OPTION:BYTE
38 EXTRN DSKCPY_PAN1:WORD
39 EXTRN DSKCPY_PAN2:WORD
40 EXTRN DSKCPY_PAN3:WORD
41 EXTRN DSKCPY_SOURCE:WORD
42DATA ENDS
43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
44;
45; Define dummy segment to calculate end of program
46;
47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
48PARSER SEGMENT PARA PUBLIC 'PARSER'
49PARSER ENDS
50
51SET_BLOCK equ 4AH
52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
53;
54;
55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
56.XLIST
57 INCLUDE PANEL.MAC
58 INCLUDE SELECT.INC
59 INCLUDE PAN-LIST.INC
60 INCLUDE CASTRUC.INC
61 INCLUDE STRUC.INC
62 INCLUDE MACROS.INC
63 INCLUDE MACROS7.INC
64 INCLUDE MACROS8.INC
65 INCLUDE EXT.INC
66 INCLUDE VARSTRUC.INC
67 INCLUDE ROUT_EXT.INC
68.LIST
69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
70;
71;
72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
73SELECT SEGMENT PARA PUBLIC 'SELECT'
74 ASSUME CS:SELECT,DS:DATA
75
76 INCLUDE CASEXTRN.INC
77
78 EXTRN EXIT_SELECT:near
79 EXTRN CREATE_CONFIG_SYS:NEAR
80 EXTRN CREATE_AUTOEXEC_BAT:NEAR
81 EXTRN CREATE_SHELL_BAT:NEAR
82 EXTRN DEALLOCATE_HELP:FAR
83 EXTRN DEALLOCATE_MEMORY_CALL:FAR
84 EXTRN ALLOCATE_BLOCK:FAR
85 EXTRN ALLOCATE_LVB:FAR
86 EXTRN GET_OVERLAY:NEAR
87 EXTRN ALLOCATE_MEMORY_CALL:FAR
88
89 PUBLIC INSTALL_TO_360_DRIVE
90 PUBLIC INSTALL_ERROR
91 PUBLIC EXIT_DOS,PROCESS_ESC_F3
92 PUBLIC EXIT_DOS_CONT
93 public Free_Parser
94
95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
96
97INSTALL_TO_360_DRIVE:
98 .IF < MEM_SIZE eq 256 >
99 DEALLOCATE_MEMORY
100 call Free_Parser
101 .IF < C >
102 GOTO INSTALL_ERROR
103 .ENDIF
104 CALL GET_OVERLAY
105 INSERT_DISK SUB_REM_DOS_A, S_DOS_COM_360
106 .ENDIF
107
108 ;;;Introduction to 360KB install
109 INIT_PQUEUE PAN_INSTALL_DOS
110 PREPARE_PANEL PAN_START360
111 PREPARE_PANEL PAN_HBAR
112 PREPARE_CHILDREN
113 DISPLAY_PANEL
114
115 GET_FUNCTION FK_ENT
116
117 CALL DEALLOCATE_HELP
118
119 .IF < I_DEST_DRIVE eq E_DEST_DRIVE_A > near
120
121 ;;;diskcopy INSTALL diskette to WORKING1
122 DISKCOPY_TO DSKCPY_TO_A_360,NO_SOURCE1,S_DOS_COM_360
123 DISKCOPY_PANELS SUB_REM_DOS_A,SUB_COPYING,SUB_INS_WORK1_S360
124 .REPEAT
125 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
126 CALL HOOK_INT_2F
127 EXEC_PROGRAM S_DISKCOPY,S_DISKCOPY_PARM,PARM_BLOCK,EXEC_NO_DIR
128 CALL RESTORE_INT_2F
129 .IF < c >
130 GOTO INSTALL_ERROR
131 .ENDIF
132 .UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
133 ERASE_FILE S_AUTOEX_C
134 ERASE_FILE S_CONSYS_C
135 ERASE_FILE S_SELCOM_C
136 ERASE_FILE S_SELHLP_C
137 ERASE_FILE S_SELPRT_C
138
139 ;;;diskcopy OPERATING1 diskette to WORKING2
140 DISKCOPY_TO DSKCPY_TO_A_360,SOURCE1,S_DOS_UTIL1_DISK
141 DISKCOPY_PANELS SUB_REM_SELECT_360,SUB_COPYING,SUB_INS_WORK2_S360
142 .REPEAT
143 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
144 CALL HOOK_INT_2F
145 EXEC_PROGRAM S_DISKCOPY,S_DISKCOPY_PARM,PARM_BLOCK,EXEC_NO_DIR
146 CALL RESTORE_INT_2F
147 .IF c
148 .THEN
149 GOTO INSTALL_ERROR
150 .ENDIF
151 .LEAVE < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
152 INSERT_DISK SUB_REM_DOS_A, S_DOS_COM_360
153 .UNTIL
154
155 ;;;diskcopy OPERATING 2 diskette to WORKING3
156 .REPEAT
157 INSERT_DISK SUB_REM_DOS_A, S_DOS_COM_360
158 DISKCOPY_TO DSKCPY_TO_A_360,NO_SOURCE1,S_DOS_UTIL2_DISK
159 DISKCOPY_PANELS SUB_INS_OPER2,SUB_COPYING,SUB_INS_WORK3_A
160 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
161 CALL HOOK_INT_2F
162 EXEC_PROGRAM S_DISKCOPY,S_DISKCOPY_PARM,PARM_BLOCK,EXEC_NO_DIR
163 CALL RESTORE_INT_2F
164 .IF c
165 .THEN
166 GOTO INSTALL_ERROR
167 .ENDIF
168 .UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY > near
169
170 ;;;diskcopy OPERATING 3 diskette to STARTUP
171 .REPEAT
172 INSERT_DISK SUB_REM_DOS_A, S_DOS_COM_360
173 DISKCOPY_TO DSKCPY_TO_A_360,SOURCE1,S_DOS_UTIL3_DISK
174 DISKCOPY_PANELS SUB_REM_UTIL1_360,SUB_COPYING,SUB_INS_STARTT_S360
175 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
176 CALL HOOK_INT_2F
177 EXEC_PROGRAM S_DISKCOPY,S_DISKCOPY_PARM,PARM_BLOCK,EXEC_NO_DIR
178 CALL RESTORE_INT_2F
179 .IF c
180 .THEN
181 GOTO INSTALL_ERROR
182 .ENDIF
183 .UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY > near
184 ERASE_FILE S_RECOVER_C
185 ERASE_FILE S_FASTOPEN_C
186 ;;;create config and autoexec files on startup diskette
187 CREATE_CONFIG S_CONSYS_C, N_RETCODE
188 .IF c
189 GOTO INSTALL_ERROR
190 .ENDIF
191 CREATE_AUTOEXEC S_AUTOEX_C,E_DEST_DOS,N_RETCODE
192 .IF c near
193 GOTO INSTALL_ERROR
194 .ENDIF
195
196 .IF < ACTIVE eq EGA > or
197 .IF < ALTERNATE eq EGA > or
198 .IF < ACTIVE eq LCD > or
199 .IF < ALTERNATE eq LCD > near
200 .THEN
201 .IF < F_VDISK eq E_VDISK_NO >
202 ERASE_FILE S_VDISK_C
203 .IF c
204 GOTO INSTALL_ERROR
205 .ENDIF
206 .ENDIF
207 .IF < F_ANSI eq E_ANSI_NO >
208 ERASE_FILE S_ANSI_C
209 .IF c
210 GOTO INSTALL_ERROR
211 .ENDIF
212 .ENDIF
213 .IF < F_APPEND eq E_APPEND_NO >
214 ERASE_FILE S_APPEND_C
215 .IF c
216 GOTO INSTALL_ERROR
217 .ENDIF
218 .ENDIF
219 .IF < F_GRAFTABL eq E_GRAFTABL_NO > or
220 .IF < F_GRAFTABL eq E_GRAFTABL_NA >
221 ERASE_FILE S_GRAFTABL_C
222 .IF c
223 GOTO INSTALL_ERROR
224 .ENDIF
225 .ENDIF
226 .IF < F_GRAPHICS eq E_GRAPHICS_NO >
227 ERASE_FILE S_GRAPHICS_C
228 ERASE_FILE S_GRAPHPRO_C
229 .IF c
230 GOTO INSTALL_ERROR
231 .ENDIF
232 .ENDIF
233 ;;;Insert SELECT diskette in drive A:
234 INSERT_DISK SUB_REM_SHELL_360, S_DOS_SEL_360
235
236 ;;;copying files from INSTALL diskette screen
237 INIT_PQUEUE PAN_INSTALL_DOS
238 PREPARE_PANEL SUB_COPYING
239 DISPLAY_PANEL
240
241 INIT_VAR SOURCE_PANEL, SUB_REM_SHELL_360
242 INIT_VAR DEST_PANEL, SUB_INS_STARTT_S360
243
244 .IF < ACTIVE eq EGA > or
245 .IF < ALTERNATE eq EGA > near
246 .THEN
247 .IF < MEM_SIZE eq 256 >
248 DEALLOCATE_MEMORY
249 .ENDIF
250 COPY_FILES2 I_DEST_DRIVE,COPY_SEL_EGA,E_SEL_EGA,S_INSTALL_PATH
251 .IF c near
252 .IF < MEM_SIZE eq 256 >
253 ALLOCATE_MEMORY
254 CALL INITIALIZE
255 .ENDIF
256 HANDLE_ERROR ERR_COPY_DISK, E_RETURN
257 .ENDIF
258 .IF < MEM_SIZE eq 256 > near
259 ALLOCATE_MEMORY
260 CALL INITIALIZE
261 .ENDIF
262 .ELSE near
263 COPY_FILES2 I_DEST_DRIVE,COPY_SEL_LCD,E_SEL_LCD,S_INSTALL_PATH ;AC111; copy files to f-disk JW
264 .IF c near
265 HANDLE_ERROR ERR_COPY_DISK, E_RETURN
266 .ENDIF
267 .ENDIF
268 .ENDIF
269
270 ;;;diskcopy MS-SHELL diskette to SHELL
271 .if <f_shell eq e_shell_yes > near
272 .REPEAT
273 INSERT_DISK SUB_REM_DOS_A, S_DOS_COM_360
274 DISKCOPY_TO DSKCPY_TO_A_360,SOURCE1,S_DOS_SHEL_DISK
275 DISKCOPY_PANELS SUB_INS_MSSHELL_A,SUB_COPYING,SUB_INS_SHELL_S360
276 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
277 CALL HOOK_INT_2F
278 EXEC_PROGRAM S_DISKCOPY,S_DISKCOPY_PARM,PARM_BLOCK,EXEC_NO_DIR
279 CALL RESTORE_INT_2F
280 .IF c
281 .THEN
282 GOTO INSTALL_ERROR
283 .ENDIF
284 .UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY > near
285 CREATE_SHELL S_SHELL_NEW, N_RETCODE
286 .IF c near
287 GOTO INSTALL_ERROR
288 .ENDIF
289 .endif
290
291 .ELSE near
292
293 ;;;diskcopy INSTALL diskette to WORKING 1
294 DISKCOPY_TO DSKCPY_TO_B,SOURCE1,S_DOS_COM_360
295 DISKCOPY_PANELS SUB_INS_WORK1_360,SUB_COPYING,NOPANEL
296 .REPEAT
297 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
298 CALL HOOK_INT_2F
299 EXEC_PROGRAM S_DISKCOPY,S_DSKCPY_TO_B,PARM_BLOCK,EXEC_NO_DIR
300 CALL RESTORE_INT_2F
301 .IF c
302 .THEN
303 GOTO INSTALL_ERROR
304 .ENDIF
305 .UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
306 ERASE_FILE S_AUTO_NEW_B
307 ERASE_FILE S_CONFIG_NEW_B
308 ERASE_FILE S_SELCOM_NEW_B
309 ERASE_FILE S_SELHLP_NEW_B
310 ERASE_FILE S_SELPRT_NEW_B
311
312 ;;;diskcopy OPERATING 1 diskette to WORKING 2
313 DISKCOPY_TO DSKCPY_TO_B,SOURCE1,S_DOS_UTIL1_DISK
314 DISKCOPY_PANELS SUB_INS_WORK2_360,SUB_COPYING,NOPANEL
315 .REPEAT
316 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
317 CALL HOOK_INT_2F
318 EXEC_PROGRAM S_DISKCOPY,S_DSKCPY_TO_B,PARM_BLOCK,EXEC_NO_DIR
319 CALL RESTORE_INT_2F
320 .IF c
321 .THEN
322 GOTO INSTALL_ERROR
323 .ENDIF
324 .LEAVE < N_DSKCPY_ERR ne E_DSKCPY_RETRY >
325 INSERT_DISK SUB_REM_DOS_A, S_DOS_COM_360
326 .UNTIL
327
328 ;;;diskcopy OPERATING 2 diskette to WORKING3
329 .REPEAT
330 INSERT_DISK SUB_REM_DOS_A, S_DOS_COM_360
331 DISKCOPY_TO DSKCPY_TO_B,SOURCE1,S_DOS_UTIL2_DISK
332 DISKCOPY_PANELS SUB_INS_WORK3_360,SUB_COPYING,NOPANEL
333 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
334 CALL HOOK_INT_2F
335 EXEC_PROGRAM S_DISKCOPY,S_DSKCPY_TO_B,PARM_BLOCK,EXEC_NO_DIR
336 CALL RESTORE_INT_2F
337 .IF c
338 .THEN
339 GOTO INSTALL_ERROR
340 .ENDIF
341 .UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY > near
342
343 ;;;diskcopy OPERATING 3 diskette to STARTUP
344 .REPEAT
345 INSERT_DISK SUB_REM_DOS_A, S_DOS_COM_360
346 DISKCOPY_TO DSKCPY_TO_B,SOURCE1,S_DOS_UTIL3_DISK
347 DISKCOPY_PANELS SUB_INS_START_360,SUB_COPYING,NOPANEL
348 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
349 CALL HOOK_INT_2F
350 EXEC_PROGRAM S_DISKCOPY,S_DSKCPY_TO_B,PARM_BLOCK,EXEC_NO_DIR
351 CALL RESTORE_INT_2F
352 .IF c
353 .THEN
354 GOTO INSTALL_ERROR
355 .ENDIF
356 .UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY > near
357 ERASE_FILE S_RECOVER_B
358 ERASE_FILE S_FASTOPEN_B
359 ;;;create config and autoexec files on startup diskette
360 CREATE_CONFIG S_CONFIG_NEW_B, N_RETCODE
361 .IF c
362 GOTO INSTALL_ERROR
363 .ENDIF
364 CREATE_AUTOEXEC S_AUTO_NEW_B,E_DEST_DOS,N_RETCODE
365 .IF c
366 GOTO INSTALL_ERROR
367 .ENDIF
368 .IF < ACTIVE eq EGA > or
369 .IF < ALTERNATE eq EGA > or
370 .IF < ACTIVE eq LCD > or
371 .IF < ALTERNATE eq LCD > near
372 .THEN
373 .IF < F_VDISK eq E_VDISK_NO >
374 ERASE_FILE S_VDISK_B
375 .IF c
376 GOTO INSTALL_ERROR
377 .ENDIF
378 .ENDIF
379 .IF < F_ANSI eq E_ANSI_NO >
380 ERASE_FILE S_ANSI_B
381 .IF c
382 GOTO INSTALL_ERROR
383 .ENDIF
384 .ENDIF
385 .IF < F_APPEND eq E_APPEND_NO >
386 ERASE_FILE S_APPEND_B
387 .IF c
388 GOTO INSTALL_ERROR
389 .ENDIF
390 .ENDIF
391 .IF < F_GRAFTABL eq E_GRAFTABL_NO > or
392 .IF < F_GRAFTABL eq E_GRAFTABL_NA >
393 ERASE_FILE S_GRAFTABL_B
394 .IF c
395 GOTO INSTALL_ERROR
396 .ENDIF
397 .ENDIF
398 .IF < F_GRAPHICS eq E_GRAPHICS_NO >
399 ERASE_FILE S_GRAPHICS_B
400 ERASE_FILE S_GRAPHPRO_B
401 .IF c
402 GOTO INSTALL_ERROR
403 .ENDIF
404 .ENDIF
405 ;;;Insert SELECT diskette in drive A:
406 INSERT_DISK SUB_INS_INSTALL_360, S_DOS_SEL_360
407 ;;;copying files from INSTALL diskette screen
408 INIT_PQUEUE PAN_INSTALL_DOS
409 PREPARE_PANEL SUB_COPYING
410 DISPLAY_PANEL
411 .IF < ACTIVE eq EGA > or
412 .IF < ALTERNATE eq EGA > near
413 .IF < MEM_SIZE eq 256 >
414 DEALLOCATE_MEMORY
415 .ENDIF
416 COPY_FILES2 I_DEST_DRIVE,COPY_SEL_EGA,E_SEL_EGA,S_INSTALL_PATH ;AC111; copy files to f-disk JW
417 .IF c near
418 .IF < MEM_SIZE eq 256 >
419 ALLOCATE_MEMORY
420 CALL INITIALIZE
421 .ENDIF
422 HANDLE_ERROR ERR_COPY_DISK, E_RETURN
423 .ENDIF
424 .IF < MEM_SIZE eq 256 >
425 ALLOCATE_MEMORY
426 CALL INITIALIZE
427 .ENDIF
428 .ELSEIF < ACTIVE eq LCD > or
429 .IF < ALTERNATE eq LCD >
430 COPY_FILES2 I_DEST_DRIVE,COPY_SEL_LCD,E_SEL_LCD,S_INSTALL_PATH ;AC111; copy files to f-disk JW
431 .IF c near
432 HANDLE_ERROR ERR_COPY_DISK, E_RETURN
433 .ENDIF
434 .ENDIF
435 .ENDIF
436
437 .if <f_shell eq e_shell_yes > near
438 ;;;diskcopy MS-SHELL to SHELL
439 .REPEAT
440 INSERT_DISK SUB_REM_DOS_A, S_DOS_COM_360
441 DISKCOPY_TO DSKCPY_TO_B,SOURCE1,S_DOS_SHEL_DISK
442 DISKCOPY_PANELS SUB_INS_SHELL_DISKS,SUB_COPYING,NOPANEL
443 INIT_VAR N_DSKCPY_ERR,E_DSKCPY_OK
444 CALL HOOK_INT_2F
445 EXEC_PROGRAM S_DISKCOPY,S_DSKCPY_TO_B,PARM_BLOCK,EXEC_NO_DIR
446 CALL RESTORE_INT_2F
447 .IF c
448 .THEN
449 GOTO INSTALL_ERROR
450 .ENDIF
451 .UNTIL < N_DSKCPY_ERR ne E_DSKCPY_RETRY > near
452 CREATE_SHELL S_SHELL_NEW_B, N_RETCODE
453 .IF c
454 GOTO INSTALL_ERROR
455 .ENDIF
456 .endif ; copy to shell
457
458 .ENDIF
459
460 ;;;installation complete and change diskettes screen
461 INIT_PQUEUE PAN_COMPLETE3
462 PREPARE_PANEL SUB_COMP_KYS_3
463 DISPLAY_PANEL
464 SAVE_PANEL_LIST
465 GET_FUNCTION FK_REBOOT
466
467;;;;;;;;control will not return here. user has to reboot;;;;;;;;; end of install to 1.2M or 1.44M drive
468;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
469;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
470;
471; Process the ESC/F3 keys.
472;
473;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
474PROCESS_ESC_F3:
475 .IF < N_USER_FUNC eq E_ESCAPE >
476 POP_HEADING
477 .ENDIF
478EXIT_DOS:
479 CLEAR_SCREEN2
480EXIT_DOS_CONT:
481 .IF < I_DEST_DRIVE eq E_DEST_DRIVE_C > and
482 .IF < N_HOUSE_CLEAN eq E_CLEAN_YES >
483 ERASE_FILE S_AUTO_NEW
484 ERASE_FILE S_CONFIG_NEW
485 ERASE_FILE S_SHELL_NEW
486 ERASE_FILE S_SELECT_TMP
487 CHANGE_AUTOEXEC S_AUTO_REBOOT, S_AUTO_MENU
488 .ENDIF
489
490 GOTO EXIT_SELECT
491
492INSTALL_ERROR:
493
494 .IF < DSKCPY_ERR ne DSKCPY_EXIT >
495 HANDLE_ERROR ERR_EXIT, E_QUIT
496 .ENDIF
497
498 GOTO EXIT_DOS
499
500Free_Parser:
501 MOV AH,62H
502 INT 21H
503 MOV AX,BX
504 MOV BX,PARSER
505 MOV ES,AX
506 SUB BX,AX
507 MOV AH,SET_BLOCK
508 DOSCALL
509 ret
510
511;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
512;
513;
514;
515;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
516SELECT ENDS
517 END
518 \ No newline at end of file
diff --git a/v4.0/src/SELECT/SELQUIT.ASM b/v4.0/src/SELECT/SELQUIT.ASM
new file mode 100644
index 0000000..e92a619
--- /dev/null
+++ b/v4.0/src/SELECT/SELQUIT.ASM
@@ -0,0 +1,313 @@
1
2
3PAGE 55,132 ;AN000;
4NAME SELQUIT ;AN000;
5TITLE SELQUIT - Exit Panel support for SELECT.EXE;AN000;
6SUBTTL selquit.asm ;AN000;
7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8;
9;
10; SELQUIT.ASM
11;
12; DATE: July 6/87
13;
14; COMMENTS:
15;
16; This files must be compiled with MASM 3.0 (using /A option)
17;
18; Copyright 1988 Microsoft
19;
20; ;AN001; Added flag to indicate error processing was in effect.
21;
22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
23.LFCOND ;AN000;
24.XLIST ;AN000;
25 INCLUDE PANEL.MAC ;AN000;
26 INCLUDE PCEQUATE.INC ;AN000;
27 INCLUDE PAN-LIST.INC ;AN000;
28 INCLUDE CASTRUC.INC ;AN000;
29 INCLUDE EXT.INC ;AN000;
30 INCLUDE STRUC.INC ;AN000;
31 INCLUDE MACROS.INC ;AN000;
32.LIST ;AN000;
33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
34;
35; Setup Environment
36;
37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
38 EXTRN QM_ACTIVEPAN:WORD ;AN000;
39 ;
40 EXTRN GET_KEY:NEAR ;AN000;
41 EXTRN CURSOROFF:NEAR ;AN000;
42 EXTRN PCINPUT_CALL:NEAR ;AN000;
43 EXTRN PCDISPQ_CALL:NEAR ;AN000;
44 ;
45 EXTRN WR_DRETLEN:WORD ;AN000;
46 EXTRN WR_DRETOFF:WORD ;AN000;
47 EXTRN WR_DRETSEG:WORD ;AN000;
48 EXTRN GET_PCB:NEAR ;AN000;
49 EXTRN QM_OPT1:WORD ;AN000;
50 EXTRN QM_ID:WORD ;AN000;
51 EXTRN INC_KS:WORD ;AN000;
52 ;
53 EXTRN HANDLE_CHILDREN:NEAR ;AN000;
54 EXTRN ADJUST_UP:NEAR ;AN000;
55 EXTRN ADJUST_DOWN:NEAR ;AN000;
56 EXTRN INIT_PQUEUE_CALL:NEAR ;AN000;
57 EXTRN PREPARE_PANEL_CALL:NEAR ;AN000;
58 EXTRN DISPLAY_PANEL_CALL:NEAR ;AN000;
59 EXTRN GET_FUNCTION_CALL:NEAR ;AN000;
60 EXTRN QM_OPT2:WORD ;AN000;
61 EXTRN WR_REFIELDCNT:WORD ;AN000;
62 EXTRN ERROR_KEYS:BYTE ;AN000;
63 EXTRN ERROR_KEYS_LEN:ABS ;AN000;
64 EXTRN PCMBEEP_CALL:NEAR ;AN000;
65 EXTRN BIN_TO_CHAR_ROUTINE:FAR ;AN000;
66 ;
67TRUE EQU 1 ;AN000;
68FALSE EQU 0 ;AN000;
69 ;
70SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine
71 ASSUME CS:SELECT ;AN000;
72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
73;
74; HANDLE_F3
75;
76;
77; CLC = return to SELECT
78; STC = quit SELECT.....
79;
80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
81F3_ACTIVE DB FALSE ;AN001;DT
82 ;
83 PUBLIC HANDLE_F3 ;AN000;
84HANDLE_F3 PROC ;AN000;
85 PUSHH <AX,BX,DI,ES,WR_DRETLEN> ;AN000;
86 PUSHH <WR_DRETOFF,WR_DRETSEG> ;AN000;
87 PUSHH <WR_REFIELDCNT> ;AN000;
88 ;
89 .IF < F3_ACTIVE eq FALSE > near ;AN000;
90 CALL CURSOROFF ;;AN000;;;
91 ;
92 MOV AX,QM_PUSHPQU ;AN000;save parent queue
93 OR AX,QM_PUSHCQU ;AN000;save child queue
94 MOV QM_OPT1,AX ;AN000;
95 CALL PCDISPQ_CALL ;AN000;update display queue
96 ;
97 MOV QM_OPT1,QM_CLSPAN ;AN000;clear parent panel queue
98 OR QM_OPT1,QM_CLSCHD ;AN000;clear parent panel queue
99 CALL PCDISPQ_CALL ;AN000;update display queue
100 MOV QM_ACTIVEPAN,PAN_CONFIRM;AN000;current active parent panel
101 MOV AX,PAN_CONFIRM ;AN000;
102 MOV QM_OPT1,QM_PUSHPAN ;AN000;push parent panels
103 CALL PREPARE_PANEL_CALL ;AN000;add panel to display queue
104
105 MOV WR_REFIELDCNT,0 ;AN000;set for break = off
106 PREPARE_PANEL PAN_HBAR ;AN000;
107 PREPARE_CHILDREN ;AN000;
108 DISPLAY_PANEL ;AN000;push parent panels
109 ;
110 MOV CX,FK_ENT_F3_LEN ;AN000;
111 LEA DX,FK_ENT_F3 ;AN000;
112 MOV WR_DRETLEN,CX ;AN000;get return string length
113 MOV AX,DX ;AN000;get return string offset
114 MOV WR_DRETOFF,AX ;AN000;
115 MOV AX,DS ;AN000;get return string segment
116 MOV WR_DRETSEG,AX ;AN000;
117 CALL GET_KEY ;AN000;
118 MOV AX,INC_KS ;AN003;GHG
119 MOV N_USER_FUNC,AX ;AN003;GHG
120 ;
121 MOV AX,QM_POPPQU ;AN000;
122 OR AX,QM_POPCQU ;AN000;
123 MOV QM_OPT1,AX ;AN000;
124 CALL PCDISPQ_CALL ;AN000;
125 MOV AX,I_USER_INDEX ;AN000;get last current element
126 ;
127 .IF < N_USER_FUNC eq F3*256 > ;AN000;
128 .THEN ;AN000;
129 STC ;AN000;
130 MOV F3_ACTIVE,TRUE ;AN000;DT Indicate exit selected
131 .ELSE ;AN000;
132 POP WR_REFIELDCNT ;AN000;
133 PUSH WR_REFIELDCNT ;AN000;
134 DISPLAY_PANEL ;AN000;
135 CLC ;AN000;
136 .ENDIF ;AN000;;;
137 ;
138 .ELSE ;AN027;SEH Set carry flag to avoid
139 STC ;AN027;SEH endless loop in Get_Function_call
140 .ENDIF ;AN000;
141 ;
142 POPP <WR_REFIELDCNT,WR_DRETSEG> ;AN000;
143 POPP <WR_DRETOFF,WR_DRETLEN,ES> ;AN000;
144 POPP <DI,BX,AX> ;AN000;
145 RET ;AN000;
146HANDLE_F3 ENDP ;AN000;
147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
148;
149; AX,input
150; BX,action
151;
152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
153ERROR_PANEL DW ? ;AN000;
154ERROR_TYPE DW ? ;AN000;
155ERROR_CODE DW ? ;AN000;
156ERROR_STRING DB 5 DUP(0) ;AN000;
157 ;
158 PUBLIC ERROR_ACTIVE ;AN001;JW
159ERROR_ACTIVE DB 0 ;AN001;JW
160 ;
161 PUBLIC HANDLE_ERROR_CALL ;AN000;
162HANDLE_ERROR_CALL PROC FAR ;AN000;
163 PUSHH <AX,BX,DI,ES,WR_DRETLEN> ;AN000;
164 PUSHH <WR_DRETOFF,WR_DRETSEG> ;AN000;
165 PUSHH <WR_REFIELDCNT> ;AN000;
166 ;
167 MOV ERROR_CODE,AX ;AN000;
168 MOV ERROR_PANEL,BX ;AN000;
169 MOV ERROR_TYPE,CX ;AN000;
170 MOV ERROR_ACTIVE,1 ;AN001;JW
171 ;
172 MOV BX,ERR_BORDER ;AN000;DT current active parent panel
173 CALL GET_PCB ;AN000;DT get the PCB for this
174 MOV ES:[DI].PCB_CHILDNUM,CX ;AN000;DT set the number of children
175 ;
176 CALL CURSOROFF ;AN000;
177 ;
178 MOV QM_OPT1,QM_PUSHPQU ;AN000;save parent queue
179 OR QM_OPT1,QM_PUSHCQU ;AN000;save child queue
180 CALL PCDISPQ_CALL ;AN000;update display queue
181 ;
182 .IF < F3_ACTIVE eq TRUE > ;AN000;
183 MOV QM_OPT1,QM_CLSPAN ;AN000;clear parent panel queue
184 OR QM_OPT1,QM_CLSCHD ;AN000;clear parent panel queue
185 CALL PCDISPQ_CALL ;AN000;update display queue
186 .ENDIF ;AN000;
187
188 MOV QM_OPT1,QM_PUSHPAN ;AN000;push parent panels
189 OR QM_OPT2,QM_BREAKON ;AN000;break on
190
191 MOV BX,ERR_BORDER ;AN000;current active parent panel
192 MOV QM_ID,BX ;AN000;current active parent panel
193 MOV QM_ACTIVEPAN,BX ;AN000;current active parent panel
194 MOV AX,BX ;AN000;
195 CALL PREPARE_PANEL_CALL ;AN000;add panel to display queue
196 ;
197 MOV QM_OPT2,0 ;AN000;
198 ;
199;;;;;;;;MOV WR_REFIELDCNT,0 ;set for break = off
200 PREPARE_PANEL ERROR_PANEL ;AN000;
201 PREPARE_CHILDREN ;AN000;
202 DISPLAY_PANEL ;AN000;push parent panels
203 ;
204 CALL PCMBEEP_CALL ;AN000;
205 ;
206 MOV CX,ERROR_TYPE ;AN000;
207 INC CX ;AN000;JW
208 LEA DX,ERROR_KEYS ;AN000;
209 CALL GET_FUNCTION_CALL ;AN000;
210 MOV ERROR_ACTIVE,0 ;AN001;JW
211 ;
212 MOV QM_OPT1,QM_POPPQU ;AN000;
213 OR QM_OPT1,QM_POPCQU ;AN000;
214 CALL PCDISPQ_CALL ;AN000;
215 MOV AX,I_USER_INDEX ;AN000;get last current element
216 ;
217 .IF < N_USER_FUNC eq F3*256 > or ;AC000;DT F3 to exit SELECT
218 .IF < F3_ACTIVE eq TRUE > ;AN000;DT or already selected
219 .THEN ;AN000;
220 STC ;AN000;
221 .ELSE ;AN000;
222 POP WR_REFIELDCNT ;AN000;
223 PUSH WR_REFIELDCNT ;AN000;
224 DISPLAY_PANEL ;AN000;
225 CLC ;AN000;
226 .ENDIF ;AN000;
227 ;
228 POPP <WR_REFIELDCNT,WR_DRETSEG>;AN000;
229 POPP <WR_DRETOFF,WR_DRETLEN,ES>;AN000;
230 POPP <DI,BX,AX> ;AN000;
231 RET ;AN000;
232HANDLE_ERROR_CALL ENDP ;AN000;
233;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
234;
235; AX,input
236; BX,action
237;
238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
239 PUBLIC HANDLE_PANEL_CALL ;AN000;
240HANDLE_PANEL_CALL PROC FAR ;AN000;
241 PUSH AX ;AN000;
242 PUSH AX ;AN000;
243 PUSH AX ;AN000;
244 MOV AX,PAN_INSTALL_DOS ;AN000;
245 CALL INIT_PQUEUE_CALL ;AN000;
246 POP AX ;AN000;
247 CALL PREPARE_PANEL_CALL ;AN000;
248 POP AX ;AN000;
249 .IF < AX ne PAN_DSKCPY_CPY > ;AN000;
250 MOV AX,PAN_HBAR ;AN000;
251 CALL PREPARE_PANEL_CALL ;AN000;
252 CALL HANDLE_CHILDREN ;AN000;
253 .ENDIF ;AN000;
254 CALL DISPLAY_PANEL_CALL ;AN000;
255 POP AX ;AN000;
256 RET ;AN000;
257HANDLE_PANEL_CALL ENDP ;AN000;
258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
259;
260; AX,input
261; BX,action
262;
263;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
264 PUBLIC HANDLE_PANEL_CALL2 ;AN000;
265HANDLE_PANEL_CALL2 PROC FAR ;AN000;
266 PUSH AX ;AN000;
267 PUSH AX ;AN000;
268 MOV AX,BX ;AN000;DT
269 CALL INIT_PQUEUE_CALL ;AN000;DT
270 POP AX ;AN000;
271 CALL PREPARE_PANEL_CALL ;AN000;
272 POP AX ;AN000;
273 PUSH AX ;AN000;DT
274 .IF < AX ne SUB_COPYING > ;AN000;
275 MOV AX,PAN_HBAR ;AN000;
276 CALL PREPARE_PANEL_CALL ;AN000;
277 CALL HANDLE_CHILDREN ;AN000;
278 .ENDIF ;AN000;
279 CALL DISPLAY_PANEL_CALL ;AN000;
280 POP AX ;AN000;
281 RET ;AN000;
282HANDLE_PANEL_CALL2 ENDP ;AN000;
283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
284;
285; AX,input
286;
287;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
288 PUBLIC HANDLE_PANEL_CALL3 ;AN111;JW
289HANDLE_PANEL_CALL3 PROC FAR ;AN111;JW
290 CALL INIT_PQUEUE_CALL ;AN111;JW
291 CALL DISPLAY_PANEL_CALL ;AN111;JW
292 RET ;AN111;JW
293HANDLE_PANEL_CALL3 ENDP ;AN111;JW
294;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
295;
296; AX,input
297; BX,action
298;
299;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
300 PUBLIC HANDLE_KEYSTROKE ;AN000;
301HANDLE_KEYSTROKE PROC FAR ;AN000;
302 MOV CX,FK_ENT_LEN ;AN000;
303 LEA DX,FK_ENT ;AN000;
304 CALL GET_FUNCTION_CALL ;AN000;
305 RET ;AN000;
306HANDLE_KEYSTROKE ENDP ;AN000;
307;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
308;
309; End of program code
310;
311;;;;;;;;;;;;;;;;;;;;;;;;;
312SELECT ENDS ;AN000;
313 END ;AN000;
diff --git a/v4.0/src/SELECT/SELSERV.ASM b/v4.0/src/SELECT/SELSERV.ASM
new file mode 100644
index 0000000..db547ba
--- /dev/null
+++ b/v4.0/src/SELECT/SELSERV.ASM
@@ -0,0 +1,108 @@
1
2
3PAGE 55,132 ;AN000;
4NAME SELSERV ;AN000;
5TITLE SELSERV - SELECT Services ;AN000;
6SUBTTL selserv.asm ;AN000;
7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8;
9; ADJUST_CURELE
10;
11;
12; Entry:
13; AX = index on entry
14;
15; Exit:
16; AX = adjusted index
17;
18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
19SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine
20 ASSUME CS:SELECT ;AN000;
21 ;
22 EXTRN WR_SCBID:WORD ;AN000;
23 ;
24SCROLL_ADJUST LABEL BYTE ;AN000;
25 DB 1 ;AN000;SCR_DOS_SUPPORT
26 DB 1 ;AN000;SCR_CTY_KYB
27 DB 0 ;AN000;SCR_CTY_1
28 DB 0 ;AN000;SCR_CTY_2
29 DB 0 ;AN000;SCR_KYB_1
30 DB 0 ;AN000;SCR_KYB_2
31 DB 1 ;AN000;SCR_FR_KYB
32 DB 1 ;AN000;SCR_IT_KYB
33 DB 1 ;AN000;SCR_UK_KYB
34 DB 1 ;AN000;SCR_DEST_DRIVE
35 DB 0 ;AN000;SCR_PRT_TYPE
36 DB 1 ;AN000;SCR_PARALLEL
37 DB 0 ;AN000;SCR_SERIAL
38 DB 0 ;AN000;SCR_PRT_REDIR
39 DB 1 ;AN000;SCR_REVIEW
40 DB 0 ;AN000;SCR_FUNC_DISK
41 DB 0 ;AN000;SCR_FUNC_DISKET
42 DB 1 ;AN000;SCR_FIXED_FIRST
43 DB 1 ;AN000;SCR_FIXED_BOTH
44 DB 1 ;AN000;SCR_FORMAT
45 DB 0 ;AC000;SCR_CONTEXT_HLP / SCR_INDEX_HLP JW
46 DB 0 ;AN000;SCR_TITLE_HLP
47 DB 0 ;AN000;SCR_ACC_CTY JW
48 DB 0 ;AN000;SCR_ACC_KYB JW
49 DB 0 ;AN000;SCR_ACC_PRT JW
50 DB 1 ;AC035;SCR_COPY_DEST SEH
51 DB 0 ;AN035;SCR_DEST_A_C; SEH
52 DB 1 ;mrw ;scr_choose_shell
53SCROLL_ADJUST_LEN EQU ($-SCROLL_ADJUST);AN000;
54ADJUST_ON EQU 1 ;AN000;
55ADJUST_OFF EQU 0 ;AN000;
56 ;
57 PUBLIC ADJUST_UP,ADJUST_DOWN ;AN000;
58 ;
59ADJUST_UP PROC ;AN000;
60 PUSH BX ;AN000;
61 PUSH CX ;AN000;
62 OR AX,AX ;AN000;
63 JZ AC_1 ;AN000;
64 ;
65 MOV CL,ADJUST_ON ;AN000;
66 CMP CS:[BX-1]+SCROLL_ADJUST,CL;AN000;
67 JNE AC_1 ;AN000;
68 ;
69 SHL AX,1 ;AN000;
70 DEC AX ;AN000;
71AC_1: POP CX ;AN000;
72 POP BX ;AN000;
73 RET ;AN000;
74ADJUST_UP ENDP ;AN000;
75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
76;
77; ADJUST_INDEX
78;
79; AX = index on entry
80;
81; AX = adjusted index
82;
83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
84ADJUST_DOWN PROC ;AN000;
85 PUSH BX ;AN000;
86 PUSH CX ;AN000;
87 OR AX,AX ;AN000;
88 JZ AI_1 ;AN000;
89 ;
90 MOV CL,ADJUST_ON ;AN000;
91 CMP CS:[BX-1]+SCROLL_ADJUST,CL;AN000;
92 JNE AC_1 ;AN000;
93 ;
94 SHR AX,1 ;AN000;
95 INC AX ;AN000;
96AI_1: POP CX ;AN000;
97 POP BX ;AN000;
98 RET ;AN000;
99ADJUST_DOWN ENDP ;AN000;
100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
101;
102;
103;
104;
105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
106SELECT ENDS ;AN000;
107 END ;AN000;
108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/v4.0/src/SELECT/SEL_FILE.INC b/v4.0/src/SELECT/SEL_FILE.INC
new file mode 100644
index 0000000..b52b586
--- /dev/null
+++ b/v4.0/src/SELECT/SEL_FILE.INC
@@ -0,0 +1,578 @@
1
2
3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4
5;
6; SEL_FILE.INC : Copyright 1988 Microsoft
7;
8; DATE: August 8/87
9;
10; COMMENT: Module contains variables used by SELECT.
11;
12; CHANGE HISTORY:
13;
14; ;AN002; Removal of SHELL.BAT from copying from SHELL (Source)
15; diskette (D233)!
16;
17; ;AN004; 360KB support (D65)
18;
19; ;AN005;JW - P2145, Had to move chkdsk to shell due to growth of dos files
20;
21; ;AN006;JW - P2261, Removal of unused utilities on startup disk
22;
23; ;AN007;JW - D354, Removal of FASTOPEN and RECOVER from startup disk
24;
25; ;AN008;JW - P , SELECT.HLP was not being hidden before copy
26;
27;
28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29;
30; Files found on INSTALL diskette
31;
32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
33 ;
34 PUBLIC COPY_SEL_EGA,E_SEL_EGA ;AN000;
35COPY_SEL_EGA LABEL BYTE ;AN000;
36 DB 'EGA.CPI ' ;AN000;
37E_SEL_EGA EQU ( $ - COPY_SEL_EGA ) / 12 ;AN000;
38 ;
39 PUBLIC COPY_SEL_LCD,E_SEL_LCD ;AN000;
40COPY_SEL_LCD LABEL BYTE ;AN000;
41 DB 'LCD.CPI ' ;AN000;
42E_SEL_LCD EQU ( $ - COPY_SEL_LCD ) / 12 ;AN000;
43 ;
44 PUBLIC COPY_SEL_SHEL,E_SEL_SHEL ;AN000;
45COPY_SEL_SHEL LABEL BYTE ;AN000;
46 DB 'COMMAND.COM ' ;AN000;
47E_SEL_SHEL EQU ( $ - COPY_SEL_SHEL) / 12 ;AN000;
48 ;
49 PUBLIC COPY_INST_1200_1440,E_INST_1200_1440 ;AN000;
50COPY_INST_1200_1440 LABEL BYTE ;AN000; this will copy files for 1.44M diskettes
51 ;
52 DB 'ANSI.SYS ' ;AN000;
53 DB 'COMMAND.COM ' ;AN000;
54 DB 'COUNTRY.SYS ' ;AN000;
55 DB 'DISKCOPY.COM' ;AN001;GHG
56 DB 'DISPLAY.SYS ' ;AN000;
57 DB 'DRIVER.SYS ' ;AN000;
58 DB 'EGA.CPI '
59 DB 'FORMAT.COM ' ;AN000;
60 DB 'GRAFTABL.COM'
61 DB 'GRAPHICS.COM'
62 DB 'GRAPHICS.PRO'
63 DB 'KEYB.COM ' ;AN000;
64 DB 'KEYBOARD.SYS' ;AN000;
65 DB 'LCD.CPI '
66 DB 'MODE.COM ' ;AN000;
67 DB 'NLSFUNC.EXE '
68 DB 'PRINT.COM '
69 DB 'PRINTER.SYS ' ;AN000;
70 DB 'RAMDRIVE.SYS' ;AN000;
71 DB '4201.CPI ' ;AN000;
72 DB '5202.CPI ' ;AN000;
73 DB '4208.CPI ' ;AN000
74 DB 'REPLACE.EXE '
75 DB 'SHARE.EXE ' ;AC055
76 DB 'SYS.COM ' ;AN000;
77 ;
78E_INST_1200_1440 EQU ( $ - COPY_INST_1200_1440 ) / 12 ;AN000; end of list for 1.44M diskettes
79 ;
80 ;
81 PUBLIC HIDE_SEL,E_HIDE_SEL ;AN000;
82HIDE_SEL DB 'AUTOEXEC.BAT',?,? ;AN000;
83 DB 'CONFIG.SYS ',?,? ;AN000;
84 DB 'SELECT.PRT ',?,? ;AN000;
85 DB 'SELECT.EXE ',?,? ;AN000;
86 DB 'SELECT.DAT ',?,? ;AN000;
87 DB 'SELECT.HLP ',?,? ;AN008;JW
88E_HIDE_SEL EQU ($ - HIDE_SEL) / 14 ;AN000;
89 ;
90 PUBLIC HIDE_STARTUP,E_HIDE_STARTUP ;AN000;
91HIDE_STARTUP DB 'AUTOEXEC.BAT',?,? ;AN000;
92 DB 'CONFIG.SYS ',?,? ;AN000;
93 DB 'SELECT.COM ',?,? ;AN000;
94 DB 'SELECT.HLP ',?,? ;AN000;
95 DB 'SELECT.PRT ',?,? ;AN000;
96E_HIDE_STARTUP EQU ($ - HIDE_STARTUP) / 14 ;AN000;
97 ;
98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
99;
100; Files found on OPERATE diskette
101;
102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
103 ;
104 PUBLIC COPY_OPER_1200_1440,E_OPER_1200_1440 ;AN000;
105COPY_OPER_1200_1440 LABEL BYTE ;AN000; this will copy files to 1.2M $ 1.44M diskettes
106 ;
107 DB 'APPEND.EXE ' ;AN000;
108 DB 'ASSIGN.COM ' ;AN000;
109 DB 'ATTRIB.EXE ' ;AN000;
110 DB 'BACKUP.COM '
111 DB 'CHKDSK.COM '
112 DB 'COMP.COM ' ;AN000;
113 DB 'DEBUG.COM ' ;AN000;
114 DB 'DISKCOMP.COM' ;AN000;
115 DB 'EDLIN.COM ' ;AN000;
116 DB 'EXE2BIN.EXE '
117 DB 'FC.EXE '
118 DB 'FILESYS.EXE '
119 DB 'FIND.EXE ' ;AN000;
120 DB 'GWBASIC.EXE '
121 DB 'IFSFUNC.EXE '
122 DB 'JOIN.EXE ' ;AN000;
123 DB 'LABEL.COM ' ;AN000;
124 DB 'LINK.EXE '
125 DB 'MEM.EXE ' ;AN000;
126 DB 'MODE.COM ' ;AN000;
127 DB 'MORE.COM ' ;AN000;
128 DB 'RECOVER.COM ' ;AN000;
129 DB 'RESTORE.COM '
130 DB 'SORT.EXE ' ;AN000;
131 DB 'SUBST.EXE ' ;AN000;
132 DB 'TREE.COM ' ;AN000;
133 DB 'XCOPY.EXE '
134E_OPER_1200_1440 EQU ( $ - COPY_OPER_1200_1440 ) / 12 ;AN000;
135
136
137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
138;
139; Files found on MS-SHELL diskette
140;
141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
142 ;
143 PUBLIC COPY_SHELL_1200_1440,E_SHELL_1200_1440 ;AN000;
144COPY_SHELL_1200_1440 LABEL BYTE ;AN000; this will copy files to 1.2M $ 1.44M diskettes
145 ;
146 DB 'SHELL.CLR ' ;AN000;
147 DB 'SHELL.HLP ' ;AN000;
148 DB 'SHELL.MEU ' ;AN000;
149 DB 'SHELLB.COM ' ;AN000;
150 DB 'SHELLC.EXE ' ;AN000;
151 DB 'DOSUTIL.MEU ' ;AN000;DT
152E_SHELL_1200_1440 EQU ( $ - COPY_SHELL_1200_1440 ) / 12 ;AN000;
153 ;
154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
155;
156; Files which will be unique on ship/install diskettes
157;
158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
159 PUBLIC S_DOS_SHEL_DISK ;AN000;
160S_DOS_SHEL_DISK DW M_DOS_SHEL_DISK ;AN000;
161P_DOS_SHEL_DISK DB 'SHELLC.EXE ' ;AN000;
162M_DOS_SHEL_DISK EQU $ - P_DOS_SHEL_DISK - 1 ;AN000;
163 ;
164 PUBLIC S_DOS_SEL_360 ;AN000;GHG
165S_DOS_SEL_360 DW M_DOS_SEL_360 ;AN000;GHG
166P_DOS_SEL_360 DB 'SELECT.EXE ' ;AN000;GHG
167M_DOS_SEL_360 EQU $ - P_DOS_SEL_360 - 1 ;AN000;GHG
168 ;GHG
169 PUBLIC S_DOS_UTIL1_DISK ;AN000;GHG
170S_DOS_UTIL1_DISK DW M_DOS_UTIL1_DISK ;AN000;GHG
171P_DOS_UTIL1_DISK DB 'ATTRIB.EXE ' ;AN000;GHG
172M_DOS_UTIL1_DISK EQU $ - P_DOS_UTIL1_DISK - 1 ;AN000;GHG
173 ;GHG
174 PUBLIC S_DOS_UTIL2_DISK ;AN000;GHG
175S_DOS_UTIL2_DISK DW M_DOS_UTIL2_DISK ;AN000;GHG
176P_DOS_UTIL2_DISK DB 'GWBASIC.EXE ' ;AN000;GHG
177M_DOS_UTIL2_DISK EQU $ - P_DOS_UTIL2_DISK - 1 ;AN000;GHG
178 ;GHG
179 PUBLIC S_DOS_UTIL3_DISK ;AN000;GHG
180S_DOS_UTIL3_DISK DW M_DOS_UTIL3_DISK ;AN000;GHG
181P_DOS_UTIL3_DISK DB 'DRIVER.SYS ' ;AN000;GHG
182M_DOS_UTIL3_DISK EQU $ - P_DOS_UTIL3_DISK - 1 ;AN000;GHG
183
184 PUBLIC S_DOS_COM_360 ;AN000;GHG
185S_DOS_COM_360 DW M_DOS_COM_360 ;AN000;GHG
186P_DOS_COM_360 DB 'SELECT.COM ' ;AN000;GHG
187M_DOS_COM_360 EQU $ - P_DOS_COM_360 - 1 ;AN000;GHG
188 ;GHG
189 PUBLIC E_FILE_ATTR ;AN000;
190E_FILE_ATTR EQU 00H ;AN000; attribute not important
191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
192;
193;
194;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
195 PUBLIC S_COMMAND_COM ;AN017;
196S_COMMAND_COM DW M_COMMAND_COM ;AN017;
197P_COMMAND_COM DB 'C:\COMMAND.COM ' ;AN017;
198M_COMMAND_COM EQU $ - P_COMMAND_COM - 1 ;AN017;
199 ;
200 PUBLIC S_SELECT_TMP ;AN000;
201S_SELECT_TMP DW M_SELECT_TMP ;AN000;
202P_SELECT_TMP DB 'SELECT.TMP ' ;AN000;
203M_SELECT_TMP EQU $ - P_SELECT_TMP - 1 ;AN000; space for ASCII-Z conversion
204 ;
205 PUBLIC S_PRINT_FILE,M_PRINT_FILE ;AN000;
206S_PRINT_FILE DW M_PRINT_FILE ;AN000;GHG NAME OF THE SELECT PRINTER
207P_PRINT_FILE DB 'SELECT.PRT ' ;AN000;GHG PROFILE. - space for ASCII-Z conversion
208M_PRINT_FILE EQU $-P_PRINT_FILE-1 ;AN000;GHG
209 ;
210 PUBLIC S_AUTO_NEW, S_CONFIG_NEW ;AN000;
211S_AUTO_NEW DW M_AUTO_NEW ;AN000;
212P_AUTO_NEW DB 'AUTOEXEC.400 ' ;AN003;GHG Temporary
213M_AUTO_NEW EQU $ - P_AUTO_NEW - 1 ;AN003;GHG AUTOEXEC.BAT
214 ;
215S_CONFIG_NEW DW M_CONFIG_NEW ;AN000;
216P_CONFIG_NEW DB 'CONFIG.400 ' ;AN003;GHG Temporary
217M_CONFIG_NEW EQU $ - P_CONFIG_NEW - 1 ;AN003;GHG CONFIG
218 ;
219 PUBLIC S_OS2_CONFIG_C, S_OS2_AUTO_C ;AN065;SEH
220S_OS2_CONFIG_C DW M_OS2_CONFIG_C ;AN065;SEH rename OS2's config.sys
221P_OS2_CONFIG_C DB 'C:\CONFIG.OS2 ' ;AN065;SEH
222M_OS2_CONFIG_C EQU $ - P_OS2_CONFIG_C - 1 ;AN065;SEH
223 ;
224S_OS2_AUTO_C DW M_OS2_AUTO_C ;AN065;SEH rename OS2's autoexec.bat
225P_OS2_AUTO_C DB 'C:\AUTOEXEC.OS2 ' ;AN065;SEH
226M_OS2_AUTO_C EQU $ - P_OS2_AUTO_C - 1 ;AN065;SEH
227 ;
228 PUBLIC S_SHELL_NEW ;AN000;DT
229S_SHELL_NEW DW M_SHELL_NEW ;AN000;DT
230P_SHELL_NEW DB 'DOSSHELL.BAT ' ;AC019;SEH ;AN000;DT space for ASCII-Z conversion
231M_SHELL_NEW EQU $ - P_SHELL_NEW - 1 ;AN000;DT
232 ;
233 PUBLIC S_SHELL_NEW_B ;AN000;DT
234S_SHELL_NEW_B DW M_SHELL_NEW_B ;AN000;DT
235P_SHELL_NEW_B DB 'B:\DOSSHELL.BAT ' ;AC019;SEH ;AN000;DT space for ASCII-Z conversion
236M_SHELL_NEW_B EQU $ - P_SHELL_NEW_B - 1 ;AN000;DT
237 ;
238 PUBLIC S_AUTO_NEW_B, S_CONFIG_NEW_B ;AN000;
239S_AUTO_NEW_B DW M_AUTO_NEW_B ;AN000;
240P_AUTO_NEW_B DB 'B:\AUTOEXEC.BAT ' ;AN000; space for ASCII-Z conversion
241M_AUTO_NEW_B EQU $ - P_AUTO_NEW_B - 1 ;AN000;
242 ;
243S_CONFIG_NEW_B DW M_CONFIG_NEW_B ;AN000;
244P_CONFIG_NEW_B DB 'B:\CONFIG.SYS ' ;AN000; space for ASCII-Z conversion
245M_CONFIG_NEW_B EQU $ - P_CONFIG_NEW_B - 1 ;AN000;
246 ;
247 PUBLIC S_AUTO_REN, S_CONFIG_REN ;AN000;
248S_AUTO_REN DW M_AUTO_REN ;AN000;
249P_AUTO_REN DB 'C:\AUTOEXEC.400 ' ;AN003;GHG
250M_AUTO_REN EQU $ - P_AUTO_REN - 1 ;AN000;
251 ;
252S_CONFIG_REN DW M_CONFIG_REN ;AN000;
253P_CONFIG_REN DB 'C:\CONFIG.400 ' ;AN003;GHG
254M_CONFIG_REN EQU $ - P_CONFIG_REN - 1 ;AN000;
255 ;
256 PUBLIC S_AUTO_C, S_CONFIG_C ;AN000;
257S_AUTO_C DW M_AUTO_C ;AN000;
258P_AUTO_C DB 'C:\AUTOEXEC.BAT ' ;AN000; space for ASCII-Z conversion
259M_AUTO_C EQU $ - P_AUTO_C - 1 ;AN000;
260 ;
261S_CONFIG_C DW M_CONFIG_C ;AN000;
262P_CONFIG_C DB 'C:\CONFIG.SYS ' ;AN000; space for ASCII-Z conversion
263M_CONFIG_C EQU $ - P_CONFIG_C - 1 ;AN000;
264 ;
265 PUBLIC S_AUTO_NEW_C, S_CONFIG_NEW_C ;AN000;
266S_AUTO_NEW_C DW M_AUTO_NEW_C ;AN000;
267P_AUTO_NEW_C DB 'C:AUTOEXEC.BAT ' ;AN000; space for ASCII-Z conversion
268M_AUTO_NEW_C EQU $ - P_AUTO_NEW_C - 1 ;AN000;
269 ;
270S_CONFIG_NEW_C DW M_CONFIG_NEW_C ;AN000;
271P_CONFIG_NEW_C DB 'C:CONFIG.SYS ' ;AN000; space for ASCII-Z conversion
272M_CONFIG_NEW_C EQU $ - P_CONFIG_NEW_C - 1 ;AN000;
273 ;
274 PUBLIC S_AUTO_REBOOT ;AN000;
275S_AUTO_REBOOT DW M_AUTO_REBOOT ;AN000;
276P_AUTO_REBOOT DB 'AUTOEXEC.BAT ' ;AN000;
277M_AUTO_REBOOT EQU $ - P_AUTO_REBOOT - 1 ;AN000;
278 ;
279 PUBLIC S_AUTO_MENU ;AN000;
280S_AUTO_MENU DW M_AUTO_MENU ;AN000;
281P_AUTO_MENU DB 'MENU' ;AN000;
282M_AUTO_MENU EQU $ - P_AUTO_MENU ;AN000;
283 ;
284 PUBLIC S_AUTO_FDISK ;AN000;
285S_AUTO_FDISK DW M_AUTO_FDISK ;AN000;
286P_AUTO_FDISK DB 'FDISK' ;AN000;
287M_AUTO_FDISK EQU $ - P_AUTO_FDISK ;AN000;
288 ;
289 PUBLIC S_CONFIG_AUTO, E_FILES ;AN000;
290S_CONFIG_AUTO DB 'CONFIG.400 ' ;AN000;
291 DB 'AUTOEXEC.400' ;AN000;
292E_FILES EQU ($ - S_CONFIG_AUTO) / 12 ;AN000;
293 ;
294 PUBLIC S_SHELL2, SH_FILES ;AN000;
295S_SHELL2 DB 'DOSSHELL.BAT' ;AC019;SEH ;AN000;
296SH_FILES EQU ($ - S_SHELL2) / 12 ;AN000;
297 ;
298 PUBLIC S_KEYB ;AN000;
299S_KEYB DW M_KEYB ;AN000;
300P_KEYB DB 'KEYB.COM ' ;AN000; KEYB command - space at end for ASCII-Z
301M_KEYB EQU $ - P_KEYB - 1 ;AN000;
302 ;
303 PUBLIC S_FDISK ;AN000;
304S_FDISK DW M_FDISK ;AN000;
305P_FDISK DB 'FDISK.EXE ' ;AC042;SEH ;AN000; FDISK command - space at end for ASCII-Z
306M_FDISK EQU $ - P_FDISK - 1 ;AN000;
307 ;
308 PUBLIC S_DISKCOPY ;AN000;
309S_DISKCOPY DW M_DISKCOPY ;AN000;
310P_DISKCOPY DB 'DISKCOPY.COM ' ;AN000; DISKCOPY command - space at end for ASCII-Z
311M_DISKCOPY EQU $ - P_DISKCOPY - 1 ;AN000;
312 ;
313 PUBLIC S_DISKCOPY_PARM ;AN000;
314S_DISKCOPY_PARM DW M_DISKCOPY_PARM ;AN000;
315P_DISKCOPY_PARM DB ' A: A:' ;AN000;
316M_DISKCOPY_PARM EQU $ - P_DISKCOPY_PARM ;AN000;
317 ;
318 PUBLIC SC_1, SC_2 ;AN000;
319SC_1 DW MC_1 ;AN000; disk number 1
320PC_1 DB '1 ' ;AN000;
321MC_1 EQU $ - PC_1 ;AN000;
322SC_2 DW MC_2 ;AN000; disk number 2
323PC_2 DB '2 ' ;AN000;
324MC_2 EQU $ - PC_2 ;AN000;
325 ;
326 PUBLIC SC_PRI,SC_EXT,SC_LOG ;AN000;
327SC_PRI DW MC_PRI ;AN000; DOS parameter for FDSIK command
328PC_PRI DB ' /PRI:' ;AN000;
329MC_PRI EQU $ - PC_PRI ;AN000;
330SC_EXT DW MC_EXT ;AN000;
331PC_EXT DB ' /EXT:' ;AN000;
332MC_EXT EQU $ - PC_EXT ;AN000;
333SC_LOG DW MC_LOG ;AN000;
334PC_LOG DB ' /LOG:' ;AN000;
335MC_LOG EQU $ - PC_LOG ;AN000;
336 ;
337 PUBLIC S_FORMAT ;AN000;
338S_FORMAT DW M_FORMAT ;AN000;
339P_FORMAT DB 'FORMAT.COM ' ;AN000; FORMAT command - space at end for ASCII-Z
340M_FORMAT EQU $ - P_FORMAT - 1 ;AN000;
341 ;
342 PUBLIC S_DRIVE_C ;AN000;
343S_DRIVE_C DW M_DRIVE_C ;AN000;
344P_DRIVE_C DB 'C:' ;AN000;
345M_DRIVE_C EQU $ - P_DRIVE_C ;AN000;
346 ;
347 PUBLIC S_FORMAT_B ;AN000;
348S_FORMAT_B DW M_FORMAT_B ;AN000;
349P_FORMAT_B DB 'B: /S /V:DOS400 /SELECT ' ;AN000;
350M_FORMAT_B EQU $ - P_FORMAT_B ;AN000;
351 ;
352 PUBLIC S_FORMAT_A ;AN111;JW
353S_FORMAT_A DW M_FORMAT_A ;AN111;JW
354P_FORMAT_A DB 'A: /S /V:DOS400 /SELECT ' ;AN111;JW
355M_FORMAT_A EQU $ - P_FORMAT_A ;AN111;JW
356 ;
357 PUBLIC S_REPLACE ;AN000;
358S_REPLACE DW M_REPLACE ;AN000;
359P_REPLACE DB 'REPLACE.EXE ' ;AN000; space at end for ASCIII-Z string
360M_REPLACE EQU $ - P_REPLACE - 1 ;AN000;
361 ;
362 PUBLIC S_REPLACE_PAR1 ;AN000;
363S_REPLACE_PAR1 DW M_REPLACE_PAR1 ;AN000;
364P_REPLACE_PAR1 DB 'A:*.* C:\ /S /R ' ;AC000;JW
365M_REPLACE_PAR1 EQU $ - P_REPLACE_PAR1 ;AN000;
366 ;
367 PUBLIC S_SLASH_R ;AN000;JW
368S_SLASH_R DW M_SLASH_R ;AN000;JW
369P_SLASH_R DB ' /R' ;AN000;JW
370M_SLASH_R EQU $ - P_SLASH_R ;AN000;JW
371 ;
372 PUBLIC S_A_STARS ;AN000;
373S_A_STARS DW M_A_STARS ;AN000;
374P_A_STARS DB 'A:*.* ' ;AN000;
375M_A_STARS EQU $ - P_A_STARS ;AN000;
376 ;
377 PUBLIC S_SLASH_A ;AN000;
378S_SLASH_A DW M_SLASH_A ;AN000;
379P_SLASH_A DB ' /A' ;AN000;
380M_SLASH_A EQU $ - P_SLASH_A ;AN000;
381 ;
382 PUBLIC S_SLASH_S ;AN000;
383S_SLASH_S DW M_SLASH_S ;AN000;
384P_SLASH_S DB ' /S' ;AN000;
385M_SLASH_S EQU $ - P_SLASH_S ;AN000;
386 ;
387 PUBLIC S_SLASH_Q ;AN000;
388S_SLASH_Q DW M_SLASH_Q ;AN000;
389P_SLASH_Q DB ' /Q' ;AN000;
390M_SLASH_Q EQU $ - P_SLASH_Q ;AN000;
391 ;
392 PUBLIC S_COLON ;AN000;
393S_COLON DW M_COLON ;AN000;
394P_COLON DB ':' ;AN000;
395M_COLON EQU $ - P_COLON ;AN000;
396 ;
397 PUBLIC S_SYS_C ;AN000;
398S_SYS_C DW M_SYS_C ;AN000;
399P_SYS_C DB 'SYS.COM ' ;AN000; space dor ASCII-Z conversion
400M_SYS_C EQU $ - P_SYS_C - 1 ;AN000;
401 ;
402 PUBLIC S_VOL_SEL ;AN000;
403S_VOL_SEL DW M_VOL_SEL ;AN000;
404P_VOL_SEL DB ' /V:DOS400 /SELECT ' ;AN000;
405M_VOL_SEL EQU $ - P_VOL_SEL ;AN000;
406 ;
407 PUBLIC S_PREP_EGA ;AN000;
408S_PREP_EGA DW M_PREP_EGA ;AN000;
409P_PREP_EGA DB 'CON CP PREP=((850) EGA.CPI)' ;AN000;
410M_PREP_EGA EQU $ - P_PREP_EGA ;AN000;
411 ;
412 PUBLIC S_PREP_LCD ;AN000;
413S_PREP_LCD DW M_PREP_LCD ;AN000;
414P_PREP_LCD DB 'CON CP PREP=((850) LCD.CPI)' ;AN000;
415M_PREP_LCD EQU $ - P_PREP_LCD ;AN000;
416 ;
417 PUBLIC S_CP_SEL ;AN000;
418S_CP_SEL DW M_CP_SEL ;AN000;
419P_CP_SEL DB 'CON CP SEL=850' ;AN000;
420M_CP_SEL EQU $ - P_CP_SEL ;AN000;
421 ;
422 PUBLIC S_MODE ;AN000;
423S_MODE DW M_MODE ;AN000;
424P_MODE DB 'MODE.COM ' ;AN000; Space at end of ASCII-Z conversion
425M_MODE EQU $ - P_MODE-1 ;AN000;
426 ;
427 PUBLIC S_SLASH ;AN000;DT
428S_SLASH DW M_SLASH ;AN000;DT
429P_SLASH DB '\' ;AN000;DT
430M_SLASH EQU $ - P_SLASH ;AN000;DT
431 ;AN000;DT
432 PUBLIC S_DSKCPY_TO_B ;AN000;
433S_DSKCPY_TO_B DW M_DSKCPY_TO_B ;AN000;
434P_DSKCPY_TO_B DB ' A: B:' ;AN000;
435M_DSKCPY_TO_B EQU $ - P_DSKCPY_TO_B ;AN000;
436 ;
437 PUBLIC S_SELCOM_NEW_B ;AN004;DT
438S_SELCOM_NEW_B DW M_SELCOM_NEW_B ;AN004;DT
439P_SELCOM_NEW_B DB 'B:\SELECT.COM ' ;AN004;DT space for ASCII-Z conversion
440M_SELCOM_NEW_B EQU $ - P_SELCOM_NEW_B - 1 ;AN004;DT
441 ;AN004;DT
442 PUBLIC S_SELHLP_NEW_B ;AN004;DT
443S_SELHLP_NEW_B DW M_SELHLP_NEW_B ;AN004;DT
444P_SELHLP_NEW_B DB 'B:\SELECT.HLP ' ;AN004;DT space for ASCII-Z conversion
445M_SELHLP_NEW_B EQU $ - P_SELHLP_NEW_B - 1 ;AN004;DT
446 ;AN004;DT
447 PUBLIC S_SELPRT_NEW_B ;AN004;DT
448S_SELPRT_NEW_B DW M_SELPRT_NEW_B ;AN004;DT
449P_SELPRT_NEW_B DB 'B:\SELECT.PRT ' ;AN004;DT space for ASCII-Z conversion
450M_SELPRT_NEW_B EQU $ - P_SELPRT_NEW_B - 1 ;AN004;DT
451 ;
452 PUBLIC S_SELEXE_NEW_B ;AN004;DT
453S_SELEXE_NEW_B DW M_SELEXE_NEW_B ;AN004;DT
454P_SELEXE_NEW_B DB 'B:\SELECT.EXE ' ;AN004;DT space for ASCII-Z conversion
455M_SELEXE_NEW_B EQU $ - P_SELEXE_NEW_B - 1 ;AN004;DT
456 ;
457 PUBLIC S_SELDAT_NEW_B ;AN004;DT
458S_SELDAT_NEW_B DW M_SELDAT_NEW_B ;AN004;DT
459P_SELDAT_NEW_B DB 'B:\SELECT.DAT ' ;AN004;DT space for ASCII-Z conversion
460M_SELDAT_NEW_B EQU $ - P_SELDAT_NEW_B - 1 ;AN004;DT
461 ;
462 PUBLIC S_SELDAT_C ;AN004;DT Used to erase from C: after 360KB install
463S_SELDAT_C DW M_SELDAT_C ;AN004;DT
464P_SELDAT_C DB '\SELECT.DAT ' ;AN004;DT space for ASCII-Z conversion
465M_SELDAT_C EQU $ - P_SELDAT_C - 1 ;AN004;DT
466 ;
467 PUBLIC S_SELCOM_C ;AN004;DT
468S_SELCOM_C DW M_SELCOM_C ;AN004;DT
469P_SELCOM_C DB '\SELECT.COM ' ;AN004;DT space for ASCII-Z conversion
470M_SELCOM_C EQU $ - P_SELCOM_C - 1 ;AN004;DT
471 ;
472 PUBLIC S_SELHLP_C ;AN004;DT
473S_SELHLP_C DW M_SELHLP_C ;AN004;DT
474P_SELHLP_C DB '\SELECT.HLP ' ;AN004;DT space for ASCII-Z conversion
475M_SELHLP_C EQU $ - P_SELHLP_C - 1 ;AN004;DT
476 ;
477 PUBLIC S_SELPRT_C ;AN004;DT
478S_SELPRT_C DW M_SELPRT_C ;AN004;DT
479P_SELPRT_C DB '\SELECT.PRT ' ;AN004;DT space for ASCII-Z conversion
480M_SELPRT_C EQU $ - P_SELPRT_C - 1 ;AN004;DT
481 ;
482 PUBLIC S_SELEXE_C ;AN004;DT
483S_SELEXE_C DW M_SELEXE_C ;AN004;DT
484P_SELEXE_C DB '\SELECT.EXE ' ;AN004;DT space for ASCII-Z conversion
485M_SELEXE_C EQU $ - P_SELEXE_C - 1 ;AN004;DT
486 ;
487 PUBLIC S_AUTOEX_C ;AN004;DT
488S_AUTOEX_C DW M_AUTOEX_C ;AN004;DT
489P_AUTOEX_C DB '\AUTOEXEC.BAT ' ;AN004;DT space for ASCII-Z conversion
490M_AUTOEX_C EQU $ - P_AUTOEX_C - 1 ;AN004;DT
491 ;
492 PUBLIC S_CONSYS_C ;AN004;DT
493S_CONSYS_C DW M_CONSYS_C ;AN004;DT
494P_CONSYS_C DB '\CONFIG.SYS ' ;AN004;DT space for ASCII-Z conversion
495M_CONSYS_C EQU $ - P_CONSYS_C - 1 ;AN004;DT
496 ;
497 PUBLIC S_VDISK_B ;AN006;JW
498S_VDISK_B DW M_VDISK_B ;AN006;JW
499P_VDISK_B DB 'B:\RAMDRIVE.SYS ' ;AN006;JW space for ASCII-Z conversion
500M_VDISK_B EQU $ - P_VDISK_B - 1 ;AN006;JW
501 ;
502 PUBLIC S_ANSI_B ;AN006;JW
503S_ANSI_B DW M_ANSI_B ;AN006;JW
504P_ANSI_B DB 'B:\ANSI.SYS ' ;AN006;JW space for ASCII-Z conversion
505M_ANSI_B EQU $ - P_ANSI_B - 1 ;AN006;JW
506 ;
507 PUBLIC S_APPEND_B ;AN006;JW
508S_APPEND_B DW M_APPEND_B ;AN006;JW
509P_APPEND_B DB 'B:\APPEND.EXE ' ;AN006;JW space for ASCII-Z conversion
510M_APPEND_B EQU $ - P_APPEND_B - 1 ;AN006;JW
511 ;
512 PUBLIC S_GRAFTABL_B ;AN006;JW
513S_GRAFTABL_B DW M_GRAFTABL_B ;AN006;JW
514P_GRAFTABL_B DB 'B:\GRAFTABL.COM ' ;AN006;JW space for ASCII-Z conversion
515M_GRAFTABL_B EQU $ - P_GRAFTABL_B - 1 ;AN006;JW
516 ;
517 PUBLIC S_GRAPHICS_B ;AN006;JW
518S_GRAPHICS_B DW M_GRAPHICS_B ;AN006;JW
519P_GRAPHICS_B DB 'B:\GRAPHICS.COM ' ;AN006;JW space for ASCII-Z conversion
520M_GRAPHICS_B EQU $ - P_GRAPHICS_B - 1 ;AN006;JW
521 ;
522 PUBLIC S_GRAPHPRO_B ;AN006;JW
523S_GRAPHPRO_B DW M_GRAPHPRO_B ;AN006;JW
524P_GRAPHPRO_B DB 'B:\GRAPHICS.PRO ' ;AN006;JW space for ASCII-Z conversion
525M_GRAPHPRO_B EQU $ - P_GRAPHPRO_B - 1 ;AN006;JW
526 ;
527 PUBLIC S_RECOVER_B ;AN007;JW
528S_RECOVER_B DW M_RECOVER_B ;AN007;JW
529P_RECOVER_B DB 'B:\RECOVER.COM ' ;AN007;JW space for ASCII-Z conversion
530M_RECOVER_B EQU $ - P_RECOVER_B - 1 ;AN007;JW
531 ;
532 PUBLIC S_FASTOPEN_B ;AN007;JW
533S_FASTOPEN_B DW M_FASTOPEN_B ;AN007;JW
534P_FASTOPEN_B DB 'B:\FASTOPEN.EXE ' ;AN007;JW space for ASCII-Z conversion
535M_FASTOPEN_B EQU $ - P_FASTOPEN_B - 1 ;AN007;JW
536 ;
537 PUBLIC S_VDISK_C ;AN006;JW
538S_VDISK_C DW M_VDISK_C ;AN006;JW
539P_VDISK_C DB '\RAMDRIVE.SYS ' ;AN006;JW space for ASCII-Z conversion
540M_VDISK_C EQU $ - P_VDISK_C - 1 ;AN006;JW
541 ;
542 PUBLIC S_ANSI_C ;AN006;JW
543S_ANSI_C DW M_ANSI_C ;AN006;JW
544P_ANSI_C DB '\ANSI.SYS ' ;AN006;JW space for ASCII-Z conversion
545M_ANSI_C EQU $ - P_ANSI_C - 1 ;AN006;JW
546 ;
547 PUBLIC S_APPEND_C ;AN006;JW
548S_APPEND_C DW M_APPEND_C ;AN006;JW
549P_APPEND_C DB '\APPEND.EXE ' ;AN006;JW space for ASCII-Z conversion
550M_APPEND_C EQU $ - P_APPEND_C - 1 ;AN006;JW
551 ;
552 PUBLIC S_GRAFTABL_C ;AN006;JW
553S_GRAFTABL_C DW M_GRAFTABL_C ;AN006;JW
554P_GRAFTABL_C DB '\GRAFTABL.COM ' ;AN006;JW space for ASCII-Z conversion
555M_GRAFTABL_C EQU $ - P_GRAFTABL_C - 1 ;AN006;JW
556 ;
557 PUBLIC S_GRAPHICS_C ;AN006;JW
558S_GRAPHICS_C DW M_GRAPHICS_C ;AN006;JW
559P_GRAPHICS_C DB '\GRAPHICS.COM ' ;AN006;JW space for ASCII-Z conversion
560M_GRAPHICS_C EQU $ - P_GRAPHICS_C - 1 ;AN006;JW
561 ;
562 PUBLIC S_GRAPHPRO_C ;AN006;JW
563S_GRAPHPRO_C DW M_GRAPHPRO_C ;AN006;JW
564P_GRAPHPRO_C DB '\GRAPHICS.PRO ' ;AN006;JW space for ASCII-Z conversion
565M_GRAPHPRO_C EQU $ - P_GRAPHPRO_C - 1 ;AN006;JW
566 ;
567 PUBLIC S_RECOVER_C ;AN007;JW
568S_RECOVER_C DW M_RECOVER_C ;AN007;JW
569P_RECOVER_C DB '\RECOVER.COM ' ;AN007;JW space for ASCII-Z conversion
570M_RECOVER_C EQU $ - P_RECOVER_C - 1 ;AN007;JW
571 ;
572 PUBLIC S_FASTOPEN_C ;AN007;JW
573S_FASTOPEN_C DW M_FASTOPEN_C ;AN007;JW
574P_FASTOPEN_C DB '\FASTOPEN.EXE ' ;AN007;JW space for ASCII-Z conversion
575M_FASTOPEN_C EQU $ - P_FASTOPEN_C - 1 ;AN007;JW
576 ;
577;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
578 \ No newline at end of file
diff --git a/v4.0/src/SELECT/SERVICES.ASM b/v4.0/src/SELECT/SERVICES.ASM
new file mode 100644
index 0000000..851c1bd
--- /dev/null
+++ b/v4.0/src/SELECT/SERVICES.ASM
@@ -0,0 +1,899 @@
1
2
3PAGE 60,132 ;AN000;
4NAME SERVICES ;AN000;
5TITLE SERVICES - DOS - SELECT.EXE ;AN000;
6SUBTTL services.asm ;AN000;
7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8;
9;
10; SERVICES.ASM: Copyright 1988 Microsoft
11;
12;
13; CHANGE HISTORY:
14;
15; AN000
16; AN003 - DCR 225
17;
18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
19 EXTRN INC_KS:WORD ;AN000;
20 EXTRN IN_ICBID:WORD ;AN000;
21 EXTRN CRD_CCBVECOFF:WORD ;AN000;
22 EXTRN CRD_CCBVECSEG:WORD ;AN000;
23 EXTRN IN_CCBVECSEG:WORD ;AN000;
24 EXTRN IN_CCBVECOFF:WORD ;AN000;
25 EXTRN WR_HLPOPT:WORD ;AN000;
26 EXTRN WR_HLPROW:WORD ;AN000;
27 EXTRN WR_HCBCONT:WORD ;AN000;
28 EXTRN WR_SCBID:WORD ;AN000;
29 EXTRN WR_DRETLEN:WORD ;AN000;
30 EXTRN WR_DRETOFF:WORD ;AN000;
31 EXTRN WR_DRETSEG:WORD ;AN000;
32 EXTRN QM_ID:WORD ;AN000;
33 EXTRN QM_OPT1:WORD ;AN000;
34 EXTRN QM_ACTIVEPAN:WORD ;AN000;
35 EXTRN S_USER_STRING:WORD ;AN000;
36 EXTRN P_USER_STRING:BYTE ;AN000;
37 EXTRN I_USER_INDEX:WORD ;AN000;
38 EXTRN N_USER_FUNC:WORD ;AN000;
39 EXTRN WR_REFBUF:WORD ;AN000;
40 EXTRN WR_REFIELDCNT:WORD ;AN000;
41 EXTRN WR_REFID:WORD ;AN000;
42 EXTRN QM_OPT2:WORD ;AN000;
43 EXTRN WR_MAXREFID:ABS ;AN000;
44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
45;
46;
47;
48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
49SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine
50 ASSUME CS:SELECT ;AN000;
51 ;
52 INCLUDE MACROS.INC ;AN000;
53 INCLUDE PCEQUATE.INC ;AN000;
54 INCLUDE CASTRUC.INC ;AN000;
55 INCLUDE CASVAR.INC ;AN000;
56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
57;
58; INIT_PQUEUE_CALL
59;
60; Entry:
61; AX = panel id
62;
63;
64; Exit:
65; none
66;
67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
68 EXTRN PCDISPQ_CALL:NEAR ;AN000;
69 ;
70 PUBLIC INIT_PQUEUE_CALL ;AN000;
71INIT_PQUEUE_CALL PROC ;AN000;
72 MOV QM_OPT1,QM_CLSPAN ;AN000;clear parent panel queue
73 OR QM_OPT1,QM_CLSCHD ;AN000;clear parent panel queue
74 CALL PCDISPQ_CALL ;AN000;update display queue
75 MOV QM_ACTIVEPAN,AX ;AN000;current active parent panel
76 MOV QM_OPT1,QM_PUSHPAN ;AN000;push parent panels
77 OR QM_OPT2,QM_BREAKON ;AN000;break on
78 CALL PREPARE_PANEL_CALL ;AN000;add panel to display queue
79 MOV WR_REFBUF,AX ;AN000;update the field refresh buffer!
80 XOR AX,AX ;AN000;
81 MOV WR_REFIELDCNT,AX ;AN000;
82 MOV QM_OPT2,AX ;AN000;set options back off...
83 RET ;AN000;
84INIT_PQUEUE_CALL ENDP ;AN000;
85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
86;
87; AX=panel
88;
89;
90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
91 ;
92 PUBLIC PREPARE_PANEL_CALL ;AN000;
93PREPARE_PANEL_CALL PROC ;AN000;
94 PUSH AX ;AN000;
95 PUSH BX ;AN000;
96 MOV BX,AX ;AN000;
97 MOV QM_ID,AX ;AN000;parent PCB number
98 MOV AX, 0ADC0H ;AN000; SELECT PANEL INTERFACE
99 INT 2FH ;AN000;
100 CALL PCDISPQ_CALL ;AN000;update display queue
101 POP BX ;AN000;
102 POP AX ;AN000;
103 RET ;AN000;
104PREPARE_PANEL_CALL ENDP ;AN000;
105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
106;
107; AX=input
108; BX=index
109; CX=f_keys&_LEN
110; DX=offset f_keys
111;
112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
113 ;
114 EXTRN GET_SCB:NEAR ;AN000;
115 EXTRN ADJUST_UP:NEAR ;AN000;
116 EXTRN ADJUST_DOWN:NEAR ;AN000;
117 EXTRN GET_SCROLL_CALL:NEAR ;AN000;
118 EXTRN HANDLE_F3:NEAR ;AN000;
119 ;
120 PUBLIC EXEC_SCROLL_CALL ;AN000;
121EXEC_SCROLL_CALL PROC ;AN000;
122 PUSH ES ;AN000;
123 MOV WR_SCBID,AX ;AN000;get current scrolling field ID
124 ;
125 MOV WR_DRETLEN,CX ;AN000;get dynamic return string length
126 MOV WR_DRETOFF,DX ;AN000;
127 MOV CX,DS ;AN000;*********;get dynamic return string segment
128 MOV WR_DRETSEG,CX ;AN000;
129 ;
130 PUSH BX ;AN000;
131 MOV BX,WR_SCBID ;AN000;
132 CALL GET_SCB ;AN000;
133 POP BX ;AN000;
134 ;
135 MOV AX,BX ;AN000;initialize at list top
136 PUSH BX ;AN000;
137 MOV BX,WR_SCBID ;AN000;
138 CALL ADJUST_UP ;AN000;
139 POP BX ;AN000;
140 ;
141ESC_0: PUSH ES:[DI]+SCB_OPT1 ;AN000;
142 PUSH ES:[DI]+SCB_OPT2 ;AN000;
143 PUSH ES:[DI]+SCB_OPT3 ;AN000;
144 PUSH ES:[DI]+SCB_NUMLINE ;AN000;
145 ;
146 CALL GET_SCROLL_CALL ;AN000;display and process scroll field
147 ;
148 POP ES:[DI]+SCB_NUMLINE ;AN000;GHG CAS BUG.............
149 POP ES:[DI]+SCB_OPT3 ;AN000;
150 POP ES:[DI]+SCB_OPT2 ;AN000;
151 POP ES:[DI]+SCB_OPT1 ;AN000;
152 MOV AX,ES:[DI]+SCB_CURELE ;AN000;
153 ;
154 CMP ES:[DI]+SCB_KS,F3*256 ;AN000;get last keystroke
155 JNE ESC_1 ;AN000;
156 ;
157 CALL HANDLE_F3 ;AN000;
158 JNC ESC_0 ;AN000;
159 ;
160ESC_1: PUSH BX ;AN000;
161 MOV BX,WR_SCBID ;AN000;
162 CALL ADJUST_DOWN ;AN000;
163 POP BX ;AN000;
164 MOV I_USER_INDEX,AX ;AN000;
165 ;
166 MOV AX,ES:[DI]+SCB_KS ;AN000;get last keystroke
167 MOV N_USER_FUNC,AX ;AN000;
168 POP ES ;AN000;
169 RET ;AN000;
170EXEC_SCROLL_CALL ENDP ;AN000;
171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
172;
173;
174; AX=input
175; BX=index
176;
177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
178 EXTRN PCSLCTP_CALL:NEAR ;AN000;
179 EXTRN GET_PCB:NEAR ;AN000;
180 ;
181 PUBLIC INIT_SCROLL_CALL ;AN000;
182INIT_SCROLL_CALL PROC ;AN000;
183 PUSH ES ;AN000;
184 MOV WR_SCBID,AX ;AN000;get current scrolling field ID
185 ;
186 PUSH BX ;AN000;
187 MOV BX,AX ;AN000;
188 CALL GET_SCB ;AN000;
189 POP BX ;AN000;
190 ;
191 MOV AX,BX ;AN000;
192 OR AX,AX ;AN000;
193 JNZ ISC_0 ;AN000;
194 OR ES:[DI]+SCB_OPT2,SCB_ROTN ;AN000;
195 ;
196ISC_0: PUSH BX ;AN000;
197 MOV BX,WR_SCBID ;AN000;
198 CALL ADJUST_UP ;AN000;
199 POP BX ;AN000;
200 MOV ES:[DI]+SCB_TOPELE,1 ;AN000;intialize parameters
201 MOV ES:[DI]+SCB_CURELE,AX ;AN000;
202 MOV BX,QM_ACTIVEPAN ;AN000;get the active panel number
203 CALL GET_PCB ;AN000;ES:DI address of panel PCB
204 ;
205 PUSH ES:[DI]+PCB_UROW ;AN000; ;get active panel row
206 PUSH ES:[DI]+PCB_UCOL ;AN000; ;get active panel column
207 PUSH ES:[DI]+PCB_CCBID ;AN000;get active panel color index
208 ;
209 MOV BX,WR_SCBID ;AN000;get PCSLCTP field
210 CALL GET_SCB ;AN000;ES:DI points to SCB
211 ;
212 POP ES:[DI]+SCB_CCBID ;AN000;get the panel's current color ind
213 POP ES:[DI]+SCB_RELCOL ;AN000;set the panel's relative column
214 POP ES:[DI]+SCB_RELROW ;AN000;set the panel's relative row
215 ;
216 MOV AX,SCROLLOBJID ;AN000; scroll_object type
217 MOV BX,WR_SCBID ;AN000; scroll_id
218 CALL ADD_REFRESH ;AN000;
219 POP ES ;AN000;
220 RET ;AN000;
221INIT_SCROLL_CALL ENDP ;AN000;
222;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
223;
224;
225; AX=input
226; BX=index
227;
228;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
229 PUBLIC INIT_SCROLL_W_LIST_CALL ;AN000;
230INIT_SCROLL_W_LIST_CALL PROC ;AN000;
231 PUSH ES ;AN000;
232 PUSH BX ;AN000;
233 PUSH CX ;AN000;
234 PUSH DX ;AN000;
235 PUSH SI ;AN000;
236 PUSH DI ;AN000;
237 ;
238 MOV WR_SCBID,AX ;AN000;get current scrolling field ID
239 MOV BX,AX ;AN000;
240 CALL GET_SCB ;AN000;
241 ;
242 POP ES:[DI]+SCB_OAPOFF ;AN000;
243 POP ES:[DI]+SCB_OAPSEG ;AN000;
244 POP ES:[DI]+SCB_OASLEN ;AN000;
245 POP ES:[DI]+SCB_NUMELE ;AN000;
246 POP ES:[DI]+SCB_WIDTH ;AN000;
247 ;
248 PUSH ES:[DI]+SCB_OAPSEG ;AN000;
249 POP ES:[DI]+SCB_OASSEG ;AN000;
250 POP ES ;AN000;
251 RET ;AN000;
252INIT_SCROLL_W_LIST_CALL ENDP ;AN000;
253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
254;
255;
256; AX=input
257; CX=num_ele
258;
259;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
260 PUBLIC INIT_SCROLL_W_NUM_CALL ;AN000;
261INIT_SCROLL_W_NUM_CALL PROC ;AN000;
262 PUSH ES ;AN000;
263 PUSH AX ;AN000;save current scroll field ID
264 MOV BX,AX ;AN000;
265 MOV AX,CX ;AN000;initialize at list top
266 CALL ADJUST_UP ;AN000;
267 ;
268 POP BX ;AN000;restore scroll field ID
269 PUSH AX ;AN000;
270 CALL GET_SCB ;AN000;
271 POP ES:[DI]+SCB_NUMELE ;AN000;
272 POP ES ;AN000;
273 RET ;AN000;
274INIT_SCROLL_W_NUM_CALL ENDP ;AN000;
275;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
276;
277;
278; AX=input
279; BX=index
280;
281;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
282 PUBLIC SET_SCROLL_COLOUR ;AN000;
283SET_SCROLL_COLOUR PROC ;AN000;
284 PUSH ES ;AN000;
285 CALL GET_SCB ;AN000;ES:DI points to SCB
286 MOV ES:[DI]+SCB_CCBID,AX ;AN000;set the panel's current color ind
287 POP ES ;AN000;
288 RET ;AN000;
289SET_SCROLL_COLOUR ENDP ;AN000;
290;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
291;
292;
293; AX=input
294; BX=index
295;
296;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
297 ;
298 PUBLIC SET_SCROLL_CALL ;AN000;
299SET_SCROLL_CALL PROC ;AN000;
300 PUSH ES ;AN000;
301 MOV WR_SCBID,AX ;AN000;get current scrolling field ID
302 ;
303 PUSH BX ;AN000;
304 MOV BX,AX ;AN000;
305 CALL GET_SCB ;AN000;
306 POP BX ;AN000;
307 ;
308 PUSH ES:[DI]+SCB_OPT1 ;AN000;
309 PUSH ES:[DI]+SCB_OPT2 ;AN000;
310 ;
311 OR ES:[DI]+SCB_OPT1,SCB_RD ;AN000;
312 MOV AX,BX ;AN000;
313 OR AX,AX ;AN000;
314 JNZ SSC_0 ;AN000;
315 OR ES:[DI]+SCB_OPT2,SCB_ROTN ;AN000;
316 ;
317SSC_0: PUSH BX ;AN000;
318 MOV BX,WR_SCBID ;AN000;
319 CALL ADJUST_UP ;AN000;
320 POP BX ;AN000;
321 MOV ES:[DI]+SCB_TOPELE,1 ;AN000;intialize parameters
322 MOV ES:[DI]+SCB_CURELE,AX ;AN000;
323 MOV BX,QM_ACTIVEPAN ;AN000;get the active panel number
324 CALL GET_PCB ;AN000;ES:DI address of panel PCB
325 ;
326 PUSH ES:[DI]+PCB_UROW ;AN000; ;get active panel row
327 PUSH ES:[DI]+PCB_UCOL ;AN000; ;get active panel column
328 PUSH ES:[DI]+PCB_CCBID ;AN000;get active panel color index
329 ;
330 MOV BX,WR_SCBID ;AN000;get PCSLCTP field
331 CALL GET_SCB ;AN000;ES:DI points to SCB
332 ;
333 POP ES:[DI]+SCB_CCBID ;AN000;get the panel's current color ind
334 POP ES:[DI]+SCB_RELCOL ;AN000;set the panel's relative column
335 POP ES:[DI]+SCB_RELROW ;AN000;set the panel's relative row
336 INC ES:[DI]+SCB_CCBID ;AN000;INCREMENT COLOUR INDEX TO MAKE IT DIFFERENT **************
337 ;
338 AND ES:[DI]+SCB_OPT1,NOT SCB_UKS;AN000;
339 CALL PCSLCTP_CALL ;AN000;display scroll field
340 ;
341 POP ES:[DI]+SCB_OPT2 ;AN000;
342 POP ES:[DI]+SCB_OPT1 ;AN000;
343 POP ES ;AN000;
344 RET ;AN000;
345SET_SCROLL_CALL ENDP ;AN000;
346;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
347;
348;
349;
350;
351;
352;
353;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
354 EXTRN PCPANEL_CALL:NEAR ;AN000;
355 ;
356 PUBLIC DISPLAY_PANEL_CALL ;AN000;
357DISPLAY_PANEL_CALL PROC ;AN000;
358 MOV BX,0 ;AN000;
359 MOV AX,0ADC0H ;AN000;
360 INT 2FH ;AN000;
361 XOR AX,AX ;AN000;turn break option OFF
362 CMP WR_REFIELDCNT,0 ;AN000;
363 JE DP_10 ;AN000;
364 INC AX ;AN000;turn break option ON
365DP_10: CALL PCPANEL_CALL ;AN000;display panel
366 RET ;AN000;
367DISPLAY_PANEL_CALL ENDP ;AN000;
368;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
369;
370;
371;
372;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
373 EXTRN GET_KEY:NEAR ;AN000;
374 ;
375 PUBLIC GET_FUNCTION_CALL ;AN000;
376GET_FUNCTION_CALL PROC ;AN000;
377 MOV WR_DRETLEN,CX ;AN000;get return string length
378 MOV AX,DX ;AN000;get return string offset
379 MOV WR_DRETOFF,AX ;AN000;
380 MOV AX,DS ;AN000;get return string segment
381 MOV WR_DRETSEG,AX ;AN000;
382GFC_0: CALL GET_KEY ;AN000;
383 ;
384 MOV AX,INC_KS ;AN003;GHG
385 MOV N_USER_FUNC,AX ;AN003;GHG
386 ;GHG ;AN003;
387 CMP AX,F3*256 ;AN003;GHG
388 JNE GFC_1 ;AN003;GHG
389 ;GHG ;AN003;
390 CALL HANDLE_F3 ;AN003;GHG
391 JNC GFC_0 ;AN003;GHG
392 MOV N_USER_FUNC,F3*256 ;AN003;GHG set last keystroke to exit!
393 ;
394GFC_1: RET ;AN000;
395GET_FUNCTION_CALL ENDP ;AN000;
396;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
397;
398; AX,input
399; BX,string
400; CX,fkeys&_LEN
401; DX,fkeys
402; SI,field_length
403;
404;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
405 EXTRN CURSOROFF:NEAR ;AN000;
406 EXTRN GET_ICB:NEAR ;AN000;
407 EXTRN GET_INPUT_CALL:NEAR ;AN000;
408 ;
409 PUBLIC GET_STRING_CALL ;AN000;
410GET_STRING_CALL PROC ;AN000;
411 PUSH ES ;AN000;
412 CALL CLEAR_USER_STRING ;AN000;
413 ;
414 MOV IN_ICBID,AX ;AN000; process input field x
415 ;
416 PUSH BX ;AN000;
417 MOV BX,AX ;AN000;
418 CALL GET_ICB ;AN000;
419 POP BX ;AN000;
420 ;
421 MOV WR_DRETLEN,CX ;AN000; SET RETURN KEYS
422 MOV WR_DRETOFF,DX ;AN000;
423 MOV AX,DS ;AN000;
424 MOV WR_DRETSEG,AX ;AN000;
425 ;
426 MOV ES:[DI]+ICB_WIDTH,SI ;AN000;GHG
427 MOV AX,SI ;AN000;GHG
428 ADD AX,ES:[DI]+ICB_COL ;AN000;GHG
429 CMP AX,75 ;AN000;GHG
430 JB GSC_10 ;AN000;GHG
431 MOV AX,70 ;AN000;GHG
432 SUB AX,ES:[DI]+ICB_COL ;AN000;GHG
433 MOV ES:[DI]+ICB_WIDTH,AX ;AN000;GHG
434GSC_10: ;AN000;
435 MOV ES:[DI]+ICB_FIELDLEN,SI ;AN000; size specified by si
436 MOV AX,[BX] ;AN000;
437 MOV ES:[DI]+ICB_DEFLEN,AX ;AN000;
438 INC AX ;AN000;
439 MOV ES:[DI]+ICB_CURCHAR,AX ;AN000;
440 MOV AX,BX ;AN000;
441 INC AX ;AN000;
442 INC AX ;AN000;
443 MOV ES:[DI]+ICB_DEFOFF,AX ;AN000;
444 MOV AX,DS ;AN000;
445 MOV ES:[DI]+ICB_DEFSEG,AX ;AN000;
446 ;
447 LEA AX,P_USER_STRING ;AN000;
448 MOV ES:[DI]+ICB_FIELDOFF,AX ;AN000;
449 MOV AX,DS ;AN000;
450 MOV ES:[DI]+ICB_FIELDSEG,AX ;AN000;
451 ;
452 PUSH CRD_CCBVECOFF ;AN000;
453 PUSH CRD_CCBVECSEG ;AN000;
454 POP IN_CCBVECSEG ;AN000;
455 POP IN_CCBVECOFF ;AN000;
456 ;
457GSC_0: CALL GET_INPUT_CALL ;AN000;
458 MOV AX,ES:[DI]+ICB_KEYRET ;AN000;
459 MOV N_USER_FUNC,AX ;AN000;
460 ;
461 CMP AX,F3*256 ;AN000;get last keystroke
462 JNE GSC_1 ;AN000;
463 ;
464 CALL HANDLE_F3 ;AN000;
465 JNC GSC_0 ;AN000;
466 MOV N_USER_FUNC,F3*256 ;AN000;set last keystroke to exit!
467 ;
468GSC_1:;;AN000;MOV AX,ES:[DI]+ICB_ENDBYTE ;
469 ;
470 MOV ax,ES:[DI]+ICB_FIELDLEN ;AN000; size specified by si
471 MOV S_USER_STRING,AX ;AN000;
472 call unpad_user_string ;AN000;
473 ;
474 CALL CURSOROFF ;AN000;
475 POP ES ;AN000;
476 RET ;AN000;
477GET_STRING_CALL ENDP ;AN000;
478;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
479;
480;
481; AX,input
482; BX,string
483;
484;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
485 PUBLIC INIT_STRING_CALL ;AN000;
486INIT_STRING_CALL PROC ;AN000;
487 PUSH ES ;AN000;
488 CALL CLEAR_USER_STRING ;AN000;
489 ;
490 MOV IN_ICBID,AX ;AN000; process input field x
491 ;
492 PUSH BX ;AN000;
493 MOV BX,AX ;AN000;
494 CALL GET_ICB ;AN000;
495 POP BX ;AN000;
496 ;
497 MOV ES:[DI]+ICB_WIDTH,SI ;AN000;GHG
498 MOV AX,SI ;AN000;GHG
499 ADD AX,ES:[DI]+ICB_COL ;AN000;GHG
500 CMP AX,75 ;AN000;GHG
501 JB ISC_10 ;AN000;GHG
502 MOV AX,70 ;AN000;GHG
503 SUB AX,ES:[DI]+ICB_COL ;AN000;GHG
504 MOV ES:[DI]+ICB_WIDTH,AX ;AN000;GHG
505 ;
506ISC_10: MOV ES:[DI]+ICB_FIELDLEN,SI ;AN000; size specified by si
507 MOV AX,[BX] ;AN000; SETUP TO DISPLAY DEFAULT STRING
508 MOV ES:[DI]+ICB_DEFLEN,AX ;AN000;
509 INC AX ;AN000;
510 MOV ES:[DI]+ICB_CURCHAR,AX ;AN000;
511 MOV AX,BX ;AN000;
512 INC AX ;AN000;
513 INC AX ;AN000;
514 MOV ES:[DI]+ICB_DEFOFF,AX ;AN000;
515 MOV AX,DS ;AN000;
516 MOV ES:[DI]+ICB_DEFSEG,AX ;AN000;
517 ;
518 LEA AX,P_USER_STRING ;AN000; SETUP RETURN STRING ADDRESS
519 MOV ES:[DI]+ICB_FIELDOFF,AX ;AN000;
520 MOV AX,DS ;AN000;
521 MOV ES:[DI]+ICB_FIELDSEG,AX ;AN000;
522 ;
523 PUSH CRD_CCBVECOFF ;AN000;
524 PUSH CRD_CCBVECSEG ;AN000;
525 POP IN_CCBVECSEG ;AN000;
526 POP IN_CCBVECOFF ;AN000;
527 ;
528 MOV AX,INPUTOBJID ;AN000; input_object type
529 MOV BX,IN_ICBID ;AN000; scroll_id
530 CALL ADD_REFRESH ;AN000;
531 POP ES ;AN000;
532 RET ;AN000;
533INIT_STRING_CALL ENDP ;AN000;
534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
535;
536;
537; AX,input
538; BX,string
539;
540;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
541ENTER_KEY DB 13 ;AN000;
542ENTER_KEY_LEN EQU ($-ENTER_KEY) ;AN000;
543 ;
544 PUBLIC SET_STRING_CALL ;AN000;
545SET_STRING_CALL PROC ;AN000;
546 PUSH ES ;AN000;
547 CALL CLEAR_USER_STRING ;AN000;
548 ;
549 MOV IN_ICBID,AX ;AN000; process input field x
550 ;
551 PUSH BX ;AN000;
552 MOV BX,AX ;AN000;
553 CALL GET_ICB ;AN000;
554 POP BX ;AN000;
555 ;
556 MOV ES:[DI]+ICB_WIDTH,SI ;AN000;GHG
557 MOV AX,SI ;AN000;GHG
558 ADD AX,ES:[DI]+ICB_COL ;AN000;GHG
559 CMP AX,75 ;AN000;GHG
560 JB SSC_10 ;AN000;GHG
561 MOV AX,70 ;AN000;GHG
562 SUB AX,ES:[DI]+ICB_COL ;AN000;GHG
563 MOV ES:[DI]+ICB_WIDTH,AX ;AN000;GHG
564 ;
565SSC_10: MOV ES:[DI]+ICB_FIELDLEN,SI ;AN000; size specified by si
566 MOV AX,[BX] ;AN000; SETUP TO DISPLAY DEFAULT STRING
567 MOV ES:[DI]+ICB_DEFLEN,AX ;AN000;
568 INC AX ;AN000;
569 MOV ES:[DI]+ICB_CURCHAR,AX ;AN000;
570 MOV AX,BX ;AN000;
571 INC AX ;AN000;
572 INC AX ;AN000;
573 MOV ES:[DI]+ICB_DEFOFF,AX ;AN000;
574 MOV AX,DS ;AN000;
575 MOV ES:[DI]+ICB_DEFSEG,AX ;AN000;
576 ;
577 LEA AX,P_USER_STRING ;AN000; SETUP RETURN STRING ADDRESS
578 MOV ES:[DI]+ICB_FIELDOFF,AX ;AN000;
579 MOV AX,DS ;AN000;
580 MOV ES:[DI]+ICB_FIELDSEG,AX ;AN000;
581 ;
582 MOV WR_DRETLEN,ENTER_KEY_LEN;AN000; SET AUTO RETURN KEYS
583 LEA AX,ENTER_KEY ;AN000;
584 MOV WR_DRETOFF,AX ;AN000;
585 MOV AX,CS ;AN000;
586 MOV WR_DRETSEG,AX ;AN000;
587 ;
588 PUSH CRD_CCBVECOFF ;AN000;
589 PUSH CRD_CCBVECSEG ;AN000;
590 POP IN_CCBVECSEG ;AN000;
591 POP IN_CCBVECOFF ;AN000;
592 ;
593 PUSH ES:[DI]+ICB_OPT2 ;AN000;
594 OR ES:[DI]+ICB_OPT2,ICB_UFK;AN000;
595 MOV ES:[DI]+ICB_KEYRET,ENTER;AN000;
596 ;
597 CALL GET_INPUT_CALL ;AN000;
598 ;
599 POP ES:[DI]+ICB_OPT2 ;AN000;
600 ;
601 CALL CURSOROFF ;AN000;
602 POP ES ;AN000;
603 RET ;AN000;
604SET_STRING_CALL ENDP ;AN000;
605;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
606;
607;
608; AX,input
609; SI,status_id
610;
611;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
612 PUBLIC INIT_SCROLL_STATUS_CALL ;AN000;
613INIT_SCROLL_STATUS_cALL PROC ;AN000;
614 PUSH ES ;AN000;
615 MOV BX,AX ;AN000;
616 CALL GET_SCB ;AN000;
617 ;
618 MOV ES:[DI]+SCB_SELOFF,SI ;AN000;
619 MOV AX,DS ;AN000;
620 MOV ES:[DI]+SCB_SELSEG,AX ;AN000;
621 POP ES ;AN000;
622 RET ;AN000;
623INIT_SCROLL_STATUS_CALL ENDP ;AN000;
624;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
625;
626; BX,index
627; DX,table
628;
629;
630;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
631 EXTRN PCMBEEP_CALL:NEAR ;AN000;
632 ;
633 PUBLIC TOGGLE_SUPPORT_CALL ;AN000;
634TOGGLE_SUPPORT_CALL PROC ;AN000;
635 PUSH SI ;AN000;
636 DEC BX ;AN000;
637 SHL BX,1 ;AN000;
638 MOV SI,DX ;AN000;
639 MOV AX,[SI+BX] ;AN000;
640 CMP AX,SCB_ACTIVEON ;AN000;
641 JNE TS_1 ;AN000;
642 MOV AX,SCB_SELECTON ;AN000;
643 MOV [SI+BX],AX ;AN000;
644 JMP TS_4 ;AN000;
645 ;
646TS_1: CMP AX,SCB_SELECTON ;AN000;
647 JNE TS_3 ;AN000;
648 MOV AX,SCB_ACTIVEON ;AN000;
649 MOV [SI+BX],AX ;AN000;
650 JMP TS_4 ;AN000;
651 ;
652TS_3: CALL PCMBEEP_CALL ;AN000;
653TS_4: POP SI ;AN000;
654 RET ;AN000;
655TOGGLE_SUPPORT_CALL ENDP ;AN000;
656;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
657;
658;
659;
660;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
661 PUBLIC UNPAD_USER_STRING ;AN000;
662UNPAD_USER_STRING PROC ;AN000;
663 PUSH SI ;AN000;
664 PUSH CX ;AN000;
665 LEA SI,P_USER_STRING ;AN000;
666 MOV CX,S_USER_STRING ;AN000;
667 ADD SI,CX ;AN000;
668 DEC SI ;AN000;
669 MOV AL,20H ;AN000;
670 ;
671UUS_1: CMP [SI],AL ;AN000;
672 JA UUS_3 ;AN000;
673 DEC SI ;AN000;
674 LOOP UUS_1 ;AN000;
675 ;
676UUS_3: MOV S_USER_STRING,CX ;AN000;
677 POP CX ;AN000;
678 POP SI ;AN000;
679 RET ;AN000;
680UNPAD_USER_STRING ENDP ;AN000;
681;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
682;
683;
684;
685;
686;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
687 PUBLIC CLEAR_USER_STRING ;AN000;
688CLEAR_USER_STRING PROC ;AN000;
689 PUSH SI ;AN000;
690 PUSH CX ;AN000;
691 PUSH AX ;AN000;
692 LEA SI,P_USER_STRING ;AN000;
693 MOV CX,110 ;AN000;
694 MOV AL,20H ;AN000;
695 ;
696CUS_1: MOV [SI],AL ;AN000;
697 INC SI ;AN000;
698 LOOP CUS_1 ;AN000;
699 ;
700 POP AX ;AN000;
701 POP CX ;AN000;
702 POP SI ;AN000;
703 RET ;AN000;
704CLEAR_USER_STRING ENDP ;AN000;
705;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
706;
707; BX,minimum
708; CX,maximum
709; AX=input
710;
711;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
712 PUBLIC CHECK_MIN_MAX ;AN000;
713CHECK_MIN_MAX PROC ;AN000;
714 CMP AX,BX ;AN000;
715 JB CMM_3 ;AN000;
716 CMP AX,CX ;AN000;
717 JA CMM_3 ;AN000;
718 CLC ;AN000;
719 JMP CMM_5 ;AN000;
720CMM_3: CALL PCMBEEP_CALL ;AN000;
721 STC ;AN000;
722CMM_5: RET ;AN000;
723CHECK_MIN_MAX ENDP ;AN000;
724;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
725;
726;
727; MOV AX,value
728; LEA BX,P_USER_STRING
729; CALL CONVERT_ASCII
730; MOV S_USER_STRING,AX
731;
732;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
733TEN DW 10 ;AN000;
734 ;
735 PUBLIC CONVERT_ASCII ;AN000;
736CONVERT_ASCII PROC ;AN000;
737 PUSH BX ;AN000;
738 PUSH CX ;AN000;
739 XOR CX,CX ;AN000;
740 ;
741 OR AX,AX ;AN000;test if input value is 0
742 JNE CA_1 ;AN000;
743 ;
744 MOV CX,1 ;AN000;
745 MOV AX,1 ;AN000;
746 MOV DX,'0' ;AN000;if input=0, then put '0' on stack
747 PUSH DX ;AN000;
748 JMP CA_6 ;AN000;
749 ;
750CA_1: OR AX,AX ;AN000;
751 JE CA_5 ;AN000;
752 ;
753 XOR DX,DX ;AN000;
754 DIV TEN ;AN000;
755 ADD DX,'0' ;AN000;
756 PUSH DX ;AN000;
757 INC CX ;AN000;
758 JMP CA_1 ;AN000;
759 ;
760CA_5: MOV AX,CX ;AN000;
761 OR AX,AX ;AN000;
762 JZ CA_8 ;AN000;
763 ;
764CA_6: POP [BX] ;AN000;
765 INC BX ;AN000;
766 LOOP CA_6 ;AN000;
767 ;
768CA_8: POP CX ;AN000;
769 POP BX ;AN000;
770 RET ;AN000;
771CONVERT_ASCII ENDP ;AN000;
772;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
773;
774; LEA BX,P_USER_STRING
775; MOV CX,S_USER_STRING
776; CALL CONVERT_NUMERIC
777;
778;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
779 PUBLIC CONVERT_NUMERIC ;AN000;
780CONVERT_NUMERIC PROC ;AN000;
781 PUSH SI ;AN000;
782 PUSH CX ;AN000;
783 PUSH DX ;AN000;
784 XOR DX,DX ;AN000;
785 XOR AX,AX ;AN000;
786 ;
787 OR CX,CX ;AN000;
788 JZ CN_8 ;AN000;
789 ;
790CN_3: MUL TEN ;AN000;
791 PUSH CX ;AN000;
792 MOV CL,[BX] ;AN000;
793 CMP CL,'0' ;AN000;
794 JB CN_4 ;AN000;
795 CMP CL,'9' ;AN000;
796 JA CN_4 ;AN000;
797 JMP CN_5 ;AN000;
798CN_4: MOV CL,'0' ;AN000;
799CN_5: SUB CL,'0' ;AN000;
800 XOR CH,CH ;AN000;
801 ADD AX,CX ;AN000;
802 POP CX ;AN000;
803 INC BX ;AN000;
804 LOOP CN_3 ;AN000;
805 ;
806CN_8: POP DX ;AN000;
807 POP CX ;AN000;
808 POP SI ;AN000;
809 RET ;AN000;
810CONVERT_NUMERIC ENDP ;AN000;
811;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
812;
813; AX = OBJECT ID
814; BX = FIELD ID
815;
816;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
817 PUBLIC ADD_REFRESH ;AN000;
818ADD_REFRESH PROC ;AN000;
819 PUSH SI ;AN000;
820 LEA SI,WR_REFID ;AN000;
821 ADD SI,WR_REFIELDCNT ;AN000;
822 ADD SI,WR_REFIELDCNT ;AN000;
823 ADD SI,WR_REFIELDCNT ;AN000;
824 ADD SI,WR_REFIELDCNT ;AN000;
825 MOV [SI],AX ;AN000;
826 MOV [SI+2],BX ;AN000;
827 CMP WR_REFIELDCNT,WR_MAXREFID;AN000;
828 JAE AD_10 ;AN000;
829 INC WR_REFIELDCNT ;AN000;
830AD_10: POP SI ;AN000;
831 RET ;AN000;
832ADD_REFRESH ENDP ;AN000;
833;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
834;
835; AX,input
836; DX,maximum DESTINATION buffer size
837; SI,field_length
838;
839;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
840 PUBLIC RETURN_STRING_CALL ;AN000;
841RETURN_STRING_CALL PROC ;AN000;
842 PUSHH <ES,DI,DS,SI,BX,CX> ;AN000;
843 ;
844 MOV BX,AX ;AN000;
845 CALL GET_ICB ;AN000;
846 ;
847 PUSH ES:[DI]+ICB_DEFSEG ;AN000;
848 MOV CX,ES:[DI]+ICB_DEFLEN ;AN000;
849 CMP DX,CX ;AN000;check if DEFAULT string > buffer
850 JAE RS_10 ;AN000;
851 MOV CX,DX ;AN000;only copy as much as possible
852RS_10: MOV DI,ES:[DI]+ICB_DEFOFF ;AN000;
853 POP ES ;AN000;
854 ;
855 PUSH DS ;AN000;
856 PUSH SI ;AN000;
857 PUSH ES ;AN000;
858 PUSH DI ;AN000;
859 POP SI ;AN000;
860 POP DS ;AN000;
861 POP DI ;AN000;
862 POP ES ;AN000;
863 CLD ;AN000;
864 REP MOVSB ;AN000;
865 ;
866 POPP <CX,BX,SI,DS,DI,ES> ;AN000;
867 RET ;AN000;
868RETURN_STRING_CALL ENDP ;AN000;
869;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
870;
871; AX,row
872; BX,panid
873; CX,col
874; DL,character
875;
876;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
877PUBLIC INIT_CHAR_CALL ;AN000;JW
878INIT_CHAR_CALL PROC ;AN000;JW
879; ;AN000;JW
880 PUSH DX ;AN000;JW
881 CALL GET_PCB ;AN000;JW
882 MUL ES:[DI]+PCB_WIDTH ;AN000;JW
883 ADD AX,CX ;AN000;JW
884 MOV SI,ES:[DI]+PCB_EXPANDOFF ;AN000;JW
885 ADD SI,AX ;AN000;JW
886 PUSH ES:[DI]+PCB_EXPANDSEG ;AN000;JW
887 POP ES ;AN000;JW
888 POP DX ;AN000;JW
889 MOV ES: BYTE PTR [SI],DL ;AN000;JW
890; ;AN000;JW
891 RET ;AN000;JW
892INIT_CHAR_CALL ENDP ;AN000;JW
893;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
894 ;
895 ;
896;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
897;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
898SELECT ENDS ;AN000;
899 END ;AN000;
diff --git a/v4.0/src/SELECT/SSTUB.ASM b/v4.0/src/SELECT/SSTUB.ASM
new file mode 100644
index 0000000..b62fdbc
--- /dev/null
+++ b/v4.0/src/SELECT/SSTUB.ASM
@@ -0,0 +1,209 @@
1
2
3TITLE SELECT Stub ;AN000;
4SUBTTL SELSTUB.ASM ;AN000;
5
6PAGE 60,132 ;AN000;
7
8 INCLUDE SYSMSG.INC ;AN000;
9 MSG_UTILNAME <SELECT> ;AN000;
10
11CODE SEGMENT PARA PUBLIC 'CODE' ;AN000;
12 ASSUME CS:code ;AN000;
13 ASSUME DS:code ;AN000;
14 ASSUME ES:NOTHING ;AN000;
15 ASSUME SS:NOTHING ;AN000;
16
17 ORG 100H ;AN000;
18MAIN PROC FAR ;AN000;
19BEGIN: JMP A0 ;AN000;
20
21prognm DB "SELECT.EXE",0 ;AN000; EXEC this program
22
23execparm DW 0 ;AN000; environment string
24 DW 80H ;AN000; command string offset
25comseg DW (?) ;AN000; command string segment
26 DW 5CH ;AN000; use the FCB's from this program
27seg1 DW (?) ;AN000; .
28 DW 6CH ;AN000; use the FCB's from this program
29seg2 DW (?) ;AN000; .
30
31enter equ 13 ;AN000;ENTER key
32escape equ 27 ;AN000;ESC key
33
34 EVEN ;AN000;
35stck DB 255 DUP(0) ;AN000;stack
36stck_beg DB 0 ;AN000;
37
38A0: ;AN000;
39 MOV SP,OFFSET stck_beg ;AN000;setup local stack
40
41 CALL LOAD_MSG ;AN000;
42 MOV AX,10 ;AN000;insert SELECT diskette in drive A:
43 CALL DISPLAY_MSG ;AN000;
44
45AGN: ;AN000;
46 XOR AH,AH ;AN000;get ENTER key
47 INT 16H ;AN000;
48 CMP AL,ESCAPE ;AN000;if ESC, then exit
49 JE EXIT ;AN000;
50 CMP AL,ENTER ;AN000;if ENTER
51 JE INPOK ;AN000; then continue
52 MOV AX,11 ;AN000;else, sound BELL
53 CALL DISPLAY_MSG ;AN000;
54 JMP AGN ;AN000;try again
55INPOK: ;AN000;
56 CALL CHECK_DISKETTE ;AN000;ensure INSTALL diskette in drive
57 JNC DSKTOK ;AN000;if so, continue
58 CALL CLEAR_SCREEN ;AN032;SEH
59 MOV AX,11 ;AN000;else, sound BELL
60 CALL DISPLAY_MSG ;AN000;
61 MOV AX,10 ;AN032;SEH flash msg on screen to insert SELECT diskette
62 CALL DISPLAY_MSG ;AN032; if user has not inserted it
63 JMP AGN ;AN000;try again
64DSKTOK: ;AN000;
65 CALL CLEAR_SCREEN ;AN000;
66
67; Issue SETBLOCK to free memory
68
69 PUSH CS ;AN000; restore ES pointing to this segment
70 POP ES ;AN000; .
71 LEA AX,endofcode ;AN000; get the address of the program end
72 MOV BL,16 ;AN000; get the paragraph size
73 DIV BL ;AN000; get the number of paragraphs
74 INC AL ;AN000; round up to next paragraph
75 SUB AH,AH ;AN000; clear high remainder
76 MOV BX,AX ;AN000; set up call
77 MOV AH,4AH ;AN000; setblock function code
78 INT 21H ;AN000; issue function to free memory
79
80; EXEC the main program
81
82 MOV AX,CS ;AN000; get our segment
83 MOV DS,AX ;AN000;
84 MOV comseg,AX ;AN000; put in parameter blocks
85 MOV seg1,AX ;AN000; .
86 MOV seg2,AX ;AN000; .
87 MOV DX,OFFSET prognm ;AN000; get a pointer to the program name
88 MOV BX,OFFSET execparm ;AN000; get a pointer to the program parms
89 MOV AX,4BH*256 ;AN000; get function code - load & execute
90 INT 21H ;AN000; exec SELECT
91EXIT: ;AN000;
92 MOV AX,4C00H ;AN000;
93 INT 21H ;AN000;
94 RET ;AN000;
95
96endofcode DB ? ;AN000;
97
98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
99; Message Retriever code inserted at this point....
100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
101MSG_SERVICES <MSGDATA> ;AN000;
102MSG_SERVICES <NOVERCHECKmsg, DISPLAYmsg, LOADmsg>;AN000;
103MSG_SERVICES <SELECT.CLA,SELECT.CLB>;AN000;
104MSG_SERVICES <SELECT.CL1,SELECT.CL2>;AN000;
105
106;****************************************************************************
107;
108; DISPLAY_MSG: Call the message retriever to display a message.
109;
110; INPUT:
111; AX = message number
112;
113; OUTPUT:
114; If CY = 1, there was an error displaying the message.
115; If CY = 0, there were no errors.
116;
117; OPERATION:
118;
119;****************************************************************************
120DISPLAY_MSG PROC NEAR ;AN000;
121 MOV BX, -1 ;AN000; HANDLE -1 ==> USE ONLY DOS FUNCTION 1-12
122 MOV SI, 0 ;AN000; SUBSTITUTION LIST
123 MOV CX, 0 ;AN000; SUBSTITUTION COUNT
124 MOV DL, 00 ;AN000; DOS INT21H FUNCTION FOR INPUT 0==> NO INPUT
125 MOV DI, 0 ;AN000; INPUT BUFFER IF DL = 0AH
126 MOV DH, -1 ;AN000; MESSAGE CALL -1==> UTILITY MESSAGE
127 CALL SYSDISPMSG ;AN000;
128 RET ;AN000;
129DISPLAY_MSG ENDP ;AN000;
130
131;****************************************************************************
132;
133; LOAD_MSG: Load the message
134;
135; INPUT:
136; None
137;
138; OUTPUT:
139; None
140;
141;****************************************************************************
142LOAD_MSG PROC NEAR ;AN000;
143 CALL SYSLOADMSG ;AN000;
144 RET ;AN000;
145LOAD_MSG ENDP ;AN000;
146
147;****************************************************************************
148;
149; CLEAR_SCREEN: Clear the screen and move cursor to top of display
150;
151; INPUT:
152; None
153;
154; OUTPUT:
155; None
156;
157;****************************************************************************
158CLEAR_SCREEN PROC NEAR ;AN000;
159
160 MOV CX,0000H ;AN000;0,0 upper left of scroll
161 MOV DX,184FH ;AC032;SEH 24,79 lower right of screen
162 MOV BH,07H ;AN000;normal attribute
163 MOV AX,600H ;AN000;scroll screen
164 INT 10H ;AN000;
165
166 MOV DX,0000H ;AN000;move cursor to 0,0
167 XOR BH,BH ;AN000;display page
168 MOV AH,2 ;AN000;move cursor
169 INT 10H ;AN000;
170
171 RET ;AN000;
172
173CLEAR_SCREEN ENDP ;AN000;
174
175;****************************************************************************
176;
177; CHECK_DISKETTE: Check for INSTALL diskette in drive A:
178;
179; INPUT:
180; None
181;
182; OUTPUT:
183; CY = 0 correct diskette in drive
184; CY = 1 incorrect diskette in drive
185;
186;****************************************************************************
187CHECK_DISKETTE PROC NEAR ;AN000;
188 PUSH DS ;AN000;
189 PUSH CS ;AN000;
190 POP DS ;AN000;
191 MOV DX,OFFSET dta ;AN000;set new dta
192 MOV AH,1AH ;AN000;
193 INT 21H ;AN000;
194 MOV DX,OFFSET prognm ;AN000;search for this file
195 XOR CX,CX ;AN000;search attribute
196 MOV AH,4EH ;AN000;find first matching file
197 INT 21H ;AN000;
198 POP DS ;AN000;
199 RET ;AN000;
200CHECK_DISKETTE ENDP ;AN000;
201
202DTA DB ? ;AN000;start of dummy DTA for find first
203
204include msgdcl.inc
205
206MAIN ENDP ;AN000;
207CODE ENDS ;AN000;
208 END BEGIN ;AN000;
209
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 @@
1;********************************************************************************
2; File: S_DISPLY.ASM
3;
4; This module contains a subroutine for setting the mode of the display to
5; 80X25 text mode.
6;
7; If ANSI.SYS is loaded, then the calls to change the mode go through it,
8; otherwise standard BIOS calls are performed.
9;
10; If ANSI.SYS is to be used, then a version dated July 15, 1987 or later must
11; be used.
12;
13;********************************************************************************
14.ALPHA ;AN000;
15.XLIST ;AN000;
16INCLUDE STRUC.INC ;AN000;
17.LIST ;AN000;
18
19DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
20
21
22; Buffer for IOCTL calls
23BUFFER LABEL BYTE ;AN000;
24 DB 0 ;AN000; INFO LEVEL
25 DB 0 ;AN000; RESERVED
26 DW 14 ;AN000; SIZE
27FLAGS DW 0 ;AN000;
28D_MODE DB 0 ;AN000; 1 = TEXT, 2 = APA
29 DB 0 ;AN000; RESERVED
30COLORS DW 0 ;AN000;
31B_WIDTH DW 0 ;AN000; PELS ==> -1 FOR TEXT
32B_LENGTH DW 0 ;AN000; PELS ==> -1 FOR TEXT
33COLS DW 0 ;AN000;
34ROWS DW 0 ;AN000;
35
36DATA ENDS ;AN000;
37
38CODE_FAR SEGMENT BYTE PUBLIC 'CODE' ;AN000;
39
40 ASSUME CS:CODE_FAR, DS:DATA ;AN000;
41
42;********************************************************************************
43; SET_DISPLAY_MODE_ROUTINE: Set the display mode to 80X25 text mode.
44;
45; INPUT:
46; None.
47;
48; OUTPUT:
49; If CY = 1, then an error was encountered making a IOCTL call.
50; If CY = 0, there were no errors.
51;
52; Operation: If ANSY.SYS is loaded, then the mode is set by calls to it,
53; otherwise BIOS calls are used.
54;
55;********************************************************************************
56PUBLIC SET_DISPLAY_MODE_ROUTINE ;AN000;
57SET_DISPLAY_MODE_ROUTINE PROC FAR ;AN000;
58
59 ;**********************************************************************
60 ; See if ANSI.SYS is loaded
61 ;**********************************************************************
62 MOV AX, 1A00H ;AC086;SEH changed from 1600h to avoid MICROSOFT collision ;AN000; Fn. for determining ANSI.SYS state
63 INT 2FH ;AN000; Returns AL = 0FFh if it is loaded
64 .IF < AL NE 0FFH > ;AN000; Is it loaded?
65 MOV AH, 15 ;AN000; No! Fn. number for getting the current video state
66 INT 10H ;AN000; Get the video state
67 .IF < AL EQ 07H > OR ;AN000; If in monochrome mode,
68 .IF < AL EQ 0FH> ;AN000; or monochrome graphics mode,
69 MOV AX, 07H ;AN000; Set monochrome mode
70 .ELSE ;AN000; Otherwise...
71 MOV AX, 03H ;AN000; Set mode 3: 80 column, color enabled
72 .ENDIF ;AN000;
73 INT 10H ;AN000; Set the mode
74 .ELSE ;AN000;
75 MOV AX, 440CH ;AN000; Get the info from ANSI.
76 MOV BX, 0 ;AN000;
77 MOV CX, 037FH ;AN000;
78 MOV DX, OFFSET BUFFER ;AN000;
79 INT 21H ;AN000;
80 .IF < C > ;AN000; Was there an error?
81 JMP ERROR_SETTING ;AN000; Yes! Exit the subroutine.
82 .ENDIF ;AN000;
83 MOV D_MODE, 1 ;AN000; Set to text mode
84 MOV B_WIDTH, -1 ;AN000; -1 for text mode
85 MOV B_LENGTH, -1 ;AN000; -1 for text mode
86 MOV COLS, 80 ;AN000; Number of columns
87 MOV ROWS, 25 ;AN000; Number of rows
88 .IF < COLORS NE 0 > ;AN000; If colors = 0, monochrome
89 MOV COLORS, 16 ;AN000; Otherwise set 16 color mode
90 .ENDIF ;AN000;
91 MOV AX, 440CH ;AN000; Set the new mode
92 MOV BX, 0 ;AN000;
93 MOV CX, 035FH ;AN000;
94 MOV DX, OFFSET BUFFER ;AN000;
95 INT 21H ;AN000;
96 .IF < C > ;AN000; Was there en error?
97 JMP ERROR_SETTING ;AN000; Yes! Exit the subroutine
98 .ENDIF ;AN000;
99 CLC ;AN000; Indicate there were no errors
100 .ENDIF ;AN000;
101 JMP EXIT_SET ;AN000;
102ERROR_SETTING: ;AN000;
103 STC ;AN000; Indicate that there were errors
104EXIT_SET: ;AN000;
105 RET ;AN000;
106
107SET_DISPLAY_MODE_ROUTINE ENDP ;AN000;
108
109
110CODE_FAR ENDS ;AN000;
111
112END ;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 @@
1This file lists the changes to USA.INF which need to be included
2in the translated versions.
3
4SCROLL TEXT # CHANGE
5ÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄ
627 Changed text
7
8PANEL # CHANGE
9ÄÄÄÄÄÄÄ ÄÄÄÄÄÄ
1038 Changed text
1159 Changed text
12105 Changed text
1321 Changed text
1422 Changed text
1524 Changed text
1625 Changed text
1726 Changed text
1827 Changed text
1928 Changed text
20108 Changed text
21
22
23ID should also be consulted for any changes to the help text (USAHELP.TXT).
24 \ 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 @@
1false = 0
2IF SCROLL ;A000;
3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4;
5; SCROLL TEXT INFORMATION FILE
6;
7; RULES: There are a number of rules and regulations that
8; MUST be followed in order to translated properly.
9; For each entry there are detailed instructions to
10; help facilitate any changes.
11;
12; The information in this file is destined for the
13; 'SELECT.DAT' file. The panels and scrollable lists
14; are contained in this file.
15; There are two sections to this file, one for the
16; SCROLL fields and one for the PANELS.
17;
18; Each rules is marked by '<R#>' and a brief description.
19; The detailed description is contained in the header of
20; this file (just below). In order to successfully
21; translate SELECT, all of these rules have to be obeyed.
22;
23;
24; <R1> The quotation marks have to left-right justified
25; ���������������������������������������������Ŀ
26; � The quotation marks (') tell SELECT where �
27; � to start wrapping the text onto the next �
28; � line. The assembler line immediately after �
29; � the first text line automatically calculates�
30; � the length of this field. The right border �
31; � of the text can be adjusted freely - a ruler�
32; � is drawn for each entry to help in centering�
33; � text. �
34; �����������������������������������������������
35;
36; <R2> The '[' and ']' input field markers cannot be moved
37; ���������������������������������������������Ŀ
38; � These characters must remain in the same �
39; � position. They define the boundries of �
40; � input fields. �
41; �����������������������������������������������
42;
43; <R3> The panel will be centered in an 80 column screen
44; ���������������������������������������������Ŀ
45; � This panel will be centered on the screen �
46; � when it is displayed. Please translate �
47; � accordingly. �
48; �����������������������������������������������
49;
50; <R4> The number of lines for the entry MUST be maintained
51; ���������������������������������������������Ŀ
52; � The number of lines (from top to bottom) �
53; � must not change. Translated text must �
54; � conform to the existing number of lines. �
55; �����������������������������������������������
56;
57; <R5> The width of the entry must not exceed the RULER provided.
58; ���������������������������������������������Ŀ
59; � Translated text should remain the same �
60; � width (do not exceed the ruler). Otherwise �
61; � the text will not fit within the panel. �
62; �����������������������������������������������
63;
64; <R9> DO NOT TRANSLATE OR CHANGE!!!!
65; ���������������������������������������������Ŀ
66; � The information contained in the quotations �
67; � should NEVER be changed. These fields are �
68; � established for the size of the help text �
69; � or error panels. �
70; �����������������������������������������������
71;
72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
73;
74;
75;
76;
77; <R1> The quotation marks have to left-right justified
78; <R4> The number of lines for the entry MUST be maintained
79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
80; |---------1---------2---------3---------4---------5---------6---------7---------8
81
82SCB_LIST1 DB ' 1. Minimum DOS function; maximum program workspace ';AN000;
83SCB_LIST1_W EQU ($-SCB_LIST1) ;AN000;
84 DB ' ';AN000;
85 DB ' 2. Balance DOS function with program workspace ';AN000;
86 DB ' ';AN000;
87 DB ' 3. Maximum DOS function; minimum program workspace ';AN000;
88SCB_LIST1_N EQU ($-SCB_LIST1)/SCB_LIST1_W ;AN000;
89
90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
91;
92;
93;
94;
95; <R1> The quotation marks have to left-right justified
96; <R4> The number of lines for the entry MUST be maintained
97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
98; |---------1---------2---------3---------4---------5---------6---------7---------8
99
100SCB_LIST2 DB ' 1. Accept predefined country and keyboard ';AN000;
101SCB_LIST2_W EQU ($-SCB_LIST2) ;AN000;
102 DB ' ';AN000;
103 DB ' 2. Specify a different country and keyboard ';AN000;
104SCB_LIST2_N EQU ($-SCB_LIST2)/SCB_LIST2_W ;AN000;
105
106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
107;
108;
109;
110;
111; <R1> The quotation marks have to left-right justified
112; <R4> The number of lines for the entry MUST be maintained
113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
114; |---------1---------2---------3---------4---------5---------6---------7---------8
115
116SCB_LIST23 LABEL BYTE ;AN000;
117SCB_LIST3 DB ' United States (001) ';AN000;
118SCB_LIST3_W EQU ($-SCB_LIST3) ;AN000;
119SCB_LIST23_W EQU ($-SCB_LIST23) ;AN000;
120 DB ' Canada (French Speaking) (002) ';AN000;
121 DB ' Latin America (003) ';AN000;
122 DB ' Netherlands (031) ';AN000;
123 DB ' Belgium (032) ';AN000;
124 DB ' France (033) ';AN000;
125 DB ' Spain (034) ';AN000;
126 DB ' Italy (039) ';AN000;
127 DB ' Switzerland (041) ';AN000;
128 DB ' United Kingdom (044) ';AN000;
129 DB ' Denmark (045) ';AN000;
130 DB ' Sweden (046) ';AN000;
131SCB_LIST3_N EQU ($-SCB_LIST3)/SCB_LIST3_W ;AN000;
132SCB_LIST4 DB ' Norway (047) ';AN000;
133SCB_LIST4_W EQU ($-SCB_LIST4) ;AN000;
134 DB ' Germany (049) ';AN000;
135 DB ' Australia (061) ';AN000;
136 DB ' Japan (081) ';AN000;
137 DB ' Korea (082) ';AN000;
138 DB ' Peoples Republic of China (086) ';AN000;
139 DB ' Taiwan (088) ';AN000;
140 DB ' Portugal (351) ';AN000;
141 DB ' Finland (358) ';AN000;
142 DB ' Arabic Speaking (785) ';AN000;
143 DB ' Hebrew Speaking (972) ';AN000;
144SCB_LIST4_N EQU ($-SCB_LIST4)/SCB_LIST4_W ;AN000;
145SCB_LIST23_N EQU ($-SCB_LIST23)/SCB_LIST23_W ;AN000;
146
147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
148;
149;
150;
151;
152; <R1> The quotation marks have to left-right justified
153; <R4> The number of lines for the entry MUST be maintained
154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
155; |---------1---------2---------3---------4---------5---------6---------7---------8
156
157SCB_LIST24 LABEL BYTE ;AN000;
158SCB_LIST5 DB ' Belgian (BE) ';AN000;
159SCB_LIST5_W EQU ($-SCB_LIST5) ;AN000;
160SCB_LIST24_W EQU ($-SCB_LIST24) ;AN000;
161 DB ' Canadian French (CF) ';AN000;
162 DB ' Danish (DK) ';AN000;
163 DB ' French (FR) ';AN000;
164 DB ' German (GR) ';AN000;
165 DB ' Italian (IT) ';AN000;
166 DB ' Latin American Speaking (LA) ';AN000;
167 DB ' Dutch (NE) ';AN000;
168 DB ' Norwegian (NO) ';AN000;
169SCB_LIST5_N EQU ($-SCB_LIST5)/SCB_LIST5_W ;AN000;
170SCB_LIST6 DB ' Portuguese (PO) ';AN000;
171SCB_LIST6_W EQU ($-SCB_LIST6) ;AN000;
172 DB ' Swiss (French) (SF) ';AN000;
173 DB ' Swiss (German) (SG) ';AN000;
174 DB ' Spanish (SP) ';AN000;
175 DB ' Finnish (SU) ';AN000;
176 DB ' Swedish (SV) ';AN000;
177 DB ' UK English (UK) ';AN000;
178 DB ' US English (US) ';AN000;
179 DB ' None ';AN000;
180SCB_LIST6_N EQU ($-SCB_LIST6)/SCB_LIST6_W ;AN000;
181 DB ' French 120 (120) ';AN000;
182 DB ' French (FR) ';AN000;
183 DB ' Italian 142 (142) ';AC090;
184 DB ' Italian (IT) ';AN000;
185 DB ' UK English 168 (168) ';AN000;
186 DB ' UK English (UK) ';AN000;
187SCB_LIST24_N EQU ($-SCB_LIST24)/SCB_LIST24_W ;AN000;
188
189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
190;
191;
192;
193;
194; <R1> The quotation marks have to left-right justified
195; <R4> The number of lines for the entry MUST be maintained
196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
197; |---------1---------2---------3---------4---------5---------6---------7---------8
198
199SCB_LIST7 DB ' 1. French 120 (120) ';AN000;
200SCB_LIST7_W EQU ($-SCB_LIST7) ;AN000;
201 DB ' ';AN000;
202 DB ' 2. French (FR) ';AN000;
203SCB_LIST7_N EQU ($-SCB_LIST7)/SCB_LIST7_W ;AN000;
204
205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
206;
207;
208;
209;
210; <R1> The quotation marks have to left-right justified
211; <R4> The number of lines for the entry MUST be maintained
212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
213; |---------1---------2---------3---------4---------5---------6---------7---------8
214
215SCB_LIST8 DB ' 1. Italian 142 (142) ';AC090;
216SCB_LIST8_W EQU ($-SCB_LIST8) ;AN000;
217 DB ' ';AN000;
218 DB ' 2. Italian (IT) ';AN000;
219SCB_LIST8_N EQU ($-SCB_LIST8)/SCB_LIST8_W ;AN000;
220
221;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
222;
223;
224;
225;
226; <R1> The quotation marks have to left-right justified
227; <R4> The number of lines for the entry MUST be maintained
228;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
229; |---------1---------2---------3---------4---------5---------6---------7---------8
230
231SCB_LIST9 DB ' 1. UK English 168 (168) ';AN000;
232SCB_LIST9_W EQU ($-SCB_LIST9) ;AN000;
233 DB ' ';AN000;
234 DB ' 2. UK English (UK) ';AN000;
235SCB_LIST9_N EQU ($-SCB_LIST9)/SCB_LIST9_W ;AN000;
236
237;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
238;
239;
240;
241;
242; <R1> The quotation marks have to left-right justified
243; <R4> The number of lines for the entry MUST be maintained
244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
245; |---------1---------2---------3---------4---------5---------6---------7---------8
246
247SCB_LIST10 DB ' 1. C ' ;AN000;
248SCB_LIST10_W EQU ($-SCB_LIST10) ;AN000;
249 DB ' ' ;AN000;
250 DB ' 2. B ' ;AN000;
251SCB_LIST10_N EQU ($-SCB_LIST10)/SCB_LIST10_W ;AN000;
252
253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
254;
255;
256;
257;
258; <R1> The quotation marks have to left-right justified
259; <R4> The number of lines for the entry MUST be maintained
260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
261; |---------1---------2---------3---------4---------5---------6---------7---------8
262
263SCB_LIST11 DB ' ' ;AN000;
264SCB_LIST11_W EQU ($-SCB_LIST11) ;AN000;
265SCB_LIST11_N EQU ($-SCB_LIST11)/SCB_LIST11_W ;AN000;
266
267;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
268;
269;
270;
271;
272; <R1> The quotation marks have to left-right justified
273; <R4> The number of lines for the entry MUST be maintained
274;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
275; |---------1---------2---------3---------4---------5---------6---------7---------8
276
277SCB_LIST12 DB ' 1. LPT1 - First port ' ;AN000;
278SCB_LIST12_W EQU ($-SCB_LIST12) ;AN000;
279 DB ' ' ;AN000;
280 DB ' 2. LPT2 - Second port ' ;AN000;
281 DB ' ' ;AN000;
282 DB ' 3. LPT3 - Third port ' ;AN000;
283SCB_LIST12_N EQU ($-SCB_LIST12)/SCB_LIST12_W ;AN000;
284
285;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
286;
287;
288;
289;
290; <R1> The quotation marks have to left-right justified
291; <R4> The number of lines for the entry MUST be maintained
292;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
293; |---------1---------2---------3---------4---------5---------6---------7---------8
294
295SCB_LIST13 DB ' 1. COM1 - First port ' ;AN000;
296SCB_LIST13_W EQU ($-SCB_LIST13) ;AN000;
297 DB ' 2. COM2 - Second port ' ;AN000;
298 DB ' 3. COM3 - Third port ' ;AN000;
299 DB ' 4. COM4 - Fourth port ' ;AN000;
300SCB_LIST13_N EQU ($-SCB_LIST13)/SCB_LIST13_W ;AN000;
301
302;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
303;
304;
305;
306;
307; <R1> The quotation marks have to left-right justified
308; <R4> The number of lines for the entry MUST be maintained
309;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
310; |---------1---------2---------3---------4---------5---------6---------7---------8
311
312SCB_LIST14 DB ' 1. None ' ;AN000;
313SCB_LIST14_W EQU ($-SCB_LIST14) ;AN000;
314 DB ' 2. LPT1 - First port ' ;AN000;
315 DB ' 3. LPT2 - Second port ' ;AN000;
316 DB ' 4. LPT3 - Third port ' ;AN000;
317SCB_LIST14_N EQU ($-SCB_LIST14)/SCB_LIST14_W ;AN000;
318
319;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
320;
321;
322;
323;
324; <R1> The quotation marks have to left-right justified
325; <R4> The number of lines for the entry MUST be maintained
326;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
327; |---------1---------2---------3---------4---------5---------6---------7---------8
328
329SCB_LIST15 DB ' 1. Accept configuration and continue with installation ';AC079;SEH ;AN000;
330SCB_LIST15_W EQU ($-SCB_LIST15) ;AN000;
331 DB ' ';AN000;
332 DB ' 2. Review, change, or add installation choices ';AC079;SEH ;AN000;
333SCB_LIST15_N EQU ($-SCB_LIST15)/SCB_LIST15_W ;AN000;
334
335;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
336;
337;
338;
339;
340; <R1> The quotation marks have to left-right justified
341; <R4> The number of lines for the entry MUST be maintained
342;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
343; |---------1---------2---------3---------4---------5---------6---------7---------8
344
345SCB_LIST16 DB ' Code Page Switching ';AN000;
346SCB_LIST16_W EQU ($-SCB_LIST16) ;AN000;
347 DB ' Expanded Memory support ';AN000;
348 DB ' Extended display support (ANSI.SYS) ';AN000;
349 DB ' File performance enhancements (FASTOPEN) ';AN000;
350 DB ' GRAFTABL display support ';AN000;
351 DB ' GRAPHICS PrtSc support ';AN000;
352 DB ' DOS SHARE support ';AN000;
353 DB ' DOS SHELL ';AN000;
354 DB ' Virtual Disk support (RAMDRIVE.SYS) ';AN000;
355SCB_LIST16_N EQU ($-SCB_LIST16)/SCB_LIST16_W ;AN000;
356
357;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
358;
359;
360;
361;
362; <R1> The quotation marks have to left-right justified
363; <R4> The number of lines for the entry MUST be maintained
364;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
365; |---------1---------2---------3---------4---------5---------6---------7---------8
366
367SCB_LIST17 DB ' Code Page Switching ';AN000;
368SCB_LIST17_W EQU ($-SCB_LIST17) ;AN000;
369 DB ' Extended display support (ANSI.SYS) ';AN000;
370 DB ' GRAFTABL display support ';AN000;
371 DB ' GRAPHICS PrtSc support ';AN000;
372 DB ' DOS SHELL ';AN000;
373 DB ' Virtual Disk support (RAMDRIVE.SYS) ';AN000;
374SCB_LIST17_N EQU ($-SCB_LIST17)/SCB_LIST17_W ;AN000;
375
376;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
377;
378;
379;
380;
381; <R1> The quotation marks have to left-right justified
382; <R4> The number of lines for the entry MUST be maintained
383;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
384; |---------1---------2---------3---------4---------5---------6---------7---------8
385
386SCB_LIST18 DB ' 1. Let SELECT define partition sizes ';AN000;
387SCB_LIST18_W EQU ($-SCB_LIST18) ;AN000;
388 DB ' ';AN000;
389 DB ' 2. Define your own partition sizes ';AN000;
390SCB_LIST18_N EQU ($-SCB_LIST18)/SCB_LIST18_W ;AN000;
391
392;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
393;
394;
395;
396;
397; <R1> The quotation marks have to left-right justified
398; <R4> The number of lines for the entry MUST be maintained
399;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
400; |---------1---------2---------3---------4---------5---------6---------7---------8
401
402SCB_LIST19 DB ' 1. Leave disk unchanged ';AN000;
403SCB_LIST19_W EQU ($-SCB_LIST19) ;AN000;
404 DB ' ';AN000;
405 DB ' 2. Define your own partition sizes ';AN000;
406SCB_LIST19_N EQU ($-SCB_LIST19)/SCB_LIST19_W ;AN000;
407
408;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
409;
410;
411;
412;
413; <R1> The quotation marks have to left-right justified
414; <R4> The number of lines for the entry MUST be maintained
415;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
416; |---------1---------2---------3---------4---------5---------6---------7---------8
417
418SCB_LIST20 DB ' 1. Format fixed disk partition ';AN000;
419SCB_LIST20_W EQU ($-SCB_LIST20) ;AN000;
420 DB ' ';AN000;
421 DB ' 2. Do not format fixed disk partition ';AN000;
422SCB_LIST20_N EQU ($-SCB_LIST20)/SCB_LIST20_W ;AN000;
423
424;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000;JW
425;
426;
427;
428;
429; <R1> The quotation marks have to left-right justified ;AN000;JW
430; <R4> The number of lines for the entry MUST be maintained ;AN000;JW
431;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000;JW
432; |---------1---------2---------3---------4---------5---------6---------7---------8 ;AN000;JW
433
434SCB_LIST26 DB ' 1. Install all DOS files on fixed disk ' ;AC000;JW
435SCB_LIST26_W EQU ($-SCB_LIST26) ;AN000;JW
436 DB ' ' ;AN000;JW
437 DB ' 2. Copy only non-system files to directory specified ' ;AC038;SEH Let user know hidden files not copied ;AC000;JW
438SCB_LIST26_N EQU ($-SCB_LIST26)/SCB_LIST26_W ;AN000;JW
439
440;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN111;JW
441;
442;
443;
444;
445; <R1> The quotation marks have to left-right justified ;AN111;JW
446; <R4> The number of lines for the entry MUST be maintained ;AN111;JW
447;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN111;JW
448; |---------1---------2---------3---------4---------5---------6---------7---------8 ;AN111;JW
449
450SCB_LIST27 DB ' 1. C ' ;AN111;JW
451SCB_LIST27_W EQU ($-SCB_LIST27) ;AN111;JW
452 DB ' ' ;AN111;JW
453 DB ' 2. A ' ;AN111;JW
454SCB_LIST27_N EQU ($-SCB_LIST27)/SCB_LIST27_W ;AN111;JW
455
456;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
457;
458;
459;
460;
461; <R1> The quotation marks have to left-right justified
462; <R4> The number of lines for the entry MUST be maintained
463;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
464; |---------1---------2---------3---------4---------5---------6---------7---------8
465
466SCB_LIST28 DB ' 1. Install the MS-DOS Shell '
467SCB_LIST28_W EQU ($-SCB_LIST28) ;AN000;
468 DB ' '
469 DB ' 2. Do not install the MS-DOS Shell '
470SCB_LIST28_N EQU ($-SCB_LIST28)/SCB_LIST28_W ;AN000;
471
472;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN111;JW
473;
474; <R*> Translate text inside ' '
475;
476;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN111;JW
477
478WR_NOIND DB 'No' ;AN000;selection pointer indicator buff
479WR_NOINDLEN EQU ($-WR_NOIND) ;AN000;
480
481WR_YESIND DB 'Yes' ;AN000;check mark string indicator buff
482WR_YESINDLEN EQU ($-WR_YESIND) ;AN000;
483
484
485ENDIF
486
487
488
489IF PANEL
490;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
491;
492;
493; <R1> The quotation marks have to left-right justified
494; <R3> The panel will be centered in an 80 column screen
495;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
496
497PANEL1 LABEL BYTE ;AN000;
498 DB ' Welcome ' ;AN000;
499PANEL1_W EQU ($-PANEL1) ;AN000;
500 DB ' ' ;AN000;
501 DB 'Welcome to DOS 4.0 and the SELECT program. SELECT ' ;AN000;
502 DB 'will install DOS 4.0 on your fixed disk or diskette.' ;AN000;
503 DB 'If you install DOS 4.0 on a diskette, the number of ' ;AN000;
504 DB 'blank diskettes you need depends on the type and ' ;AN000;
505 DB 'capacity of your diskette drive: ' ;AN000;
506 DB ' ' ;AN000;
507 DB ' Drive Type (Capacity) Number of Diskettes ' ;AN000;
508 DB ' ' ;AN000;
509 DB ' 5.25-Inch Drive (360KB) five 5.25 (360KB) ' ;AC050;SEH ;AN000;
510 DB ' 5.25-Inch Drive (1.2MB) five 5.25 (360KB) ' ;AC050;SEH ;AN000;
511 DB ' 3.5-Inch Drive (720KB) three 3.5 (720KB) ' ;AC050;SEH;AC000;JW
512 DB ' 3.5-Inch Drive (1.44MB) three 3.5 (720KB) ' ;AC050;SEH;AC000;JW
513 DB ' ' ;AN000;
514 DB 'If you install DOS 4.0 onto a fixed disk, you need ' ;AN000;
515 DB 'one blank diskette: ' ;AN000;
516 DB ' ' ;AN000;
517 DB ' 5.25-Inch Drive one 5.25 (360KB) ' ;AC050;SEH ;AN000;
518 DB ' 3.5-Inch Drive one 3.5 (1 or 2MB) ' ;AC050;SEH ;AC022;SEH ;AC000;JW
519PANEL1_L EQU ($-PANEL1)/PANEL1_W ;AN000;
520
521;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
522;
523;
524;
525; <R1> The quotation marks have to left-right justified
526;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
527; |---------1---------2---------3---------4---------5---------6---------7---------8
528
529PANEL2 LABEL BYTE ;AN000;
530 DB ' Introduction ';AN000;
531PANEL2_W EQU ($-PANEL2) ;AN000;
532 DB ' ';AN000;
533 DB ' ';AN000;
534 DB 'As you view the SELECT displays, you will be asked to make a choice ';AN000;
535 DB 'or type an entry. If you are uncertain about what to choose or type,';AN000;
536 DB 'you can accept the predefined choice or press the F1 help key for ';AN000;
537 DB 'more information about an item. ';AN000;
538 DB ' ';AN000;
539 DB 'You will be using these keys in the SELECT program: ';AN000;
540 DB ' ';AN000;
541 DB ' Enter To proceed to the next step. ';AN000;
542 DB ' Esc To cancel the current display. ';AN000;
543 DB ' Tab To move to the next entry field. ';AN000;
544 DB ' PgUp/PgDn To scroll information one page at a time. ';AN000;
545 DB ' Up/Down Arrow To move the highlight bar to the next item. ';AN000;
546 DB ' F1 To view the help information. ';AN000;
547 DB ' F3 To exit SELECT. ';AN000;
548 DB ' F9 To view key assignments while viewing help. ';AN000;
549 DB ' Left/Right Arrow To scroll data fields horizontally ';AN000;
550 DB ' to the left or right. ';AN000;
551 DB ' ';AN000;
552 DB 'You can press Enter, Esc and F1 keys when they appear on the display.';AN000;
553PANEL2_L EQU ($-PANEL2)/PANEL2_W ;AN000;
554
555;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
556;
557;
558;
559;
560; <R1> The quotation marks have to left-right justified
561; <R3> The panel will be centered in an 80 column screen
562;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
563
564PANEL3 LABEL BYTE ;AN000;
565 DB ' Exit ' ;AN000;
566PANEL3_W EQU ($-PANEL3) ;AN000;
567 DB ' ' ;AN000;
568 DB ' ' ;AN000;
569 DB ' ' ;AN000;
570 DB ' ' ;AN000;
571 DB ' ' ;AN000;
572 DB ' ' ;AN000;
573 DB 'You have chosen to end SELECT. ' ;AN000;
574 DB ' ' ;AN000;
575 DB ' ' ;AN000;
576 DB 'If you are sure you want to end DOS ' ;AN000;
577 DB 'installation, press F3. ' ;AN000;
578 DB ' ' ;AN000;
579 DB ' ' ;AN000;
580 DB 'If not, press Enter to continue installation.' ;AN000;
581PANEL3_L EQU ($-PANEL3)/PANEL3_W ;AN000;
582
583;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
584;
585;
586;
587;
588; <R1> The quotation marks have to left-right justified
589;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
590; |---------1---------2---------3---------4---------5---------6---------7---------8
591
592PANEL4 LABEL BYTE ;AN000;
593 DB ' Specify Function and Workspace ';AN000;
594PANEL4_W EQU ($-PANEL4) ;AN000;
595 DB ' ';AN000;
596 DB 'SELECT sets up your computer to run DOS and your programs';AN000;
597 DB 'most efficiently based on the option you choose. ';AN000;
598 DB ' ';AN000;
599 DB 'Note: You can review the results of your choice later ';AN000;
600 DB 'in this program. ';AN000;
601 DB ' ';AN000;
602 DB 'Choose an option: ';AN000;
603PANEL4_L EQU ($-PANEL4)/PANEL4_W ;AN000;
604
605;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
606;
607;
608;
609;
610; <R1> The quotation marks have to left-right justified
611;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
612; |---------1---------2---------3---------4---------5---------6---------7---------8
613
614PANEL5 LABEL BYTE ;AN000;
615 DB ' Select Country and Keyboard' ;AN000;
616PANEL5_W EQU ($-PANEL5) ;AN000;
617 DB ' ' ;AN000;
618 DB ' ' ;AN000;
619 DB 'Predefined country . . . . .: ' ;AN000;
620 DB 'Predefined keyboard. . . . .: ' ;AN000;
621 DB ' ' ;AN000;
622 DB ' ' ;AN000;
623 DB ' ' ;AN000;
624 DB ' ' ;AN000;
625 DB ' ' ;AN000;
626 DB 'Choose an option: ' ;AN000;
627PANEL5_L EQU ($-PANEL5)/PANEL5_W ;AN000;
628
629;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
630;
631;
632;
633;
634; <R1> The quotation marks have to left-right justified
635;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
636; |---------1---------2---------3---------4---------5---------6---------7---------8
637
638PANEL6 LABEL BYTE ;AN000;
639 DB ' Country Selection' ;AN000;
640PANEL6_W EQU ($-PANEL6) ;AN000;
641 DB ' ' ;AN000;
642 DB ' ' ;AN000;
643 DB 'Choose a country: ' ;AN000;
644PANEL6_L EQU ($-PANEL6)/PANEL6_W ;AN000;
645
646;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
647;
648;
649;
650;
651; <R1> The quotation marks have to left-right justified
652;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
653; |---------1---------2---------3---------4---------5---------6---------7---------8
654
655PANEL7 LABEL BYTE ;AN000;
656 DB ' Keyboard Selection' ;AN000;
657PANEL7_W EQU ($-PANEL7) ;AN000;
658 DB ' ' ;AN000;
659 DB ' ' ;AN000;
660 DB 'Choose a keyboard: ' ;AN000;
661PANEL7_L EQU ($-PANEL7)/PANEL7_W ;AN000;
662
663;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
664;
665;
666;
667;
668; <R1> The quotation marks have to left-right justified
669;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
670; |---------1---------2---------3---------4---------5---------6---------7---------8
671
672PANEL8 LABEL BYTE ;AN000;
673 DB ' Keyboard Layout Selection ';AN000;
674PANEL8_W EQU ($-PANEL8) ;AN000;
675 DB ' ';AN000;
676 DB ' ';AN000;
677 DB 'If your keyboard has a number in the top left corner that matches';AN000;
678 DB 'the one shown in option 1, choose option 1; otherwise choose ';AN000;
679 DB 'option 2. ';AN000;
680 DB ' ';AN000;
681 DB 'Choose a keyboard: ';AN000;
682PANEL8_L EQU ($-PANEL8)/PANEL8_W ;AN000;
683
684;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
685;
686;
687;
688;
689; <R1> The quotation marks have to left-right justified
690;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
691; |---------1---------2---------3---------4---------5---------6---------7---------8
692
693PANEL9 LABEL BYTE ;AN000;
694 DB ' Select Installation Drive';AN000;
695PANEL9_W EQU ($-PANEL9) ;AN000;
696 DB ' ';AN000;
697 DB ' ';AN000;
698 DB ' ';AN000;
699 DB ' ';AN000;
700 DB 'Choose the drive to install DOS on: ';AN000;
701PANEL9_L EQU ($-PANEL9)/PANEL9_W ;AN000;
702
703;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
704;
705;
706;
707;
708; <R1> The quotation marks have to left-right justified
709;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
710; |---------1---------2---------3---------4---------5---------6---------7---------8
711
712PANEL10 LABEL BYTE ;AN000;
713 DB ' Specify DOS Location ';AN000;
714PANEL10_W EQU ($-PANEL10) ;AN000;
715 DB ' ';AN000;
716 DB ' ';AN000;
717 DB 'You can accept the DOS directory name shown or type a new';AC053;SEH ;AN000;
718 DB 'directory name. ';AC053;SEH ;AN000;
719 DB ' ';AN000;
720 DB ' ';AN000;
721 DB 'DOS Directory . . . .C:\ ';AN000;
722 DB ' '
723 DB ' '
724 DB ' '
725 DB 'To select option 1 below, press Enter. To change your ';AN053;SEH
726 DB 'option, press the tab key, highlight your choice and then';AN053;SEH
727 DB 'press Enter. ';AN053;SEH
728 DB ' ';AN053;SEH
729 DB ' ';AN053;SEH
730PANEL10_L EQU ($-PANEL10)/PANEL10_W ;AN000;
731
732;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
733;
734;
735;
736;
737; <R1> The quotation marks have to left-right justified
738;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
739; |---------1---------2---------3---------4---------5---------6---------7---------8
740
741PANEL11 LABEL BYTE ;AN000;
742 DB ' Number of Printers ';AN000;
743PANEL11_W EQU ($-PANEL11) ;AN000;
744 DB ' ';AN000;
745 DB ' ';AN000;
746 DB ' ';AN000;
747 DB ' ';AN000;
748 DB 'How many printers do you have? . . . . (0-7)';AN000;
749PANEL11_L EQU ($-PANEL11)/PANEL11_W ;AN000;
750
751;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
752;
753;
754;
755;
756; <R1> The quotation marks have to left-right justified
757;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
758; |---------1---------2---------3---------4---------5---------6---------7---------8
759
760PANEL12 LABEL BYTE ;AN000;
761 DB ' Printer Selection ';AN000;
762PANEL12_W EQU ($-PANEL12) ;AN000;
763 DB ' ';AN000;
764 DB ' ';AN000;
765 DB ' ';AN000;
766 DB ' ';AN000;
767 DB ' ';AN000;
768 DB ' ';AN000;
769 DB 'Choose a printer: ';AN000;
770 DB ' More:';AN000;
771PANEL12_L EQU ($-PANEL12)/PANEL12_W ;AN000;
772
773;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
774;
775;
776;
777;
778; <R1> The quotation marks have to left-right justified
779;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
780; |---------1---------2---------3---------4---------5---------6---------7---------8
781
782PANEL13 LABEL BYTE ;AN000;
783 DB ' Parallel Printer Port';AN000;
784PANEL13_W EQU ($-PANEL13) ;AN000;
785 DB ' ';AN000;
786 DB ' ';AN000;
787 DB ' ';AN000;
788 DB ' ';AN000;
789 DB ' ';AN000;
790 DB 'Choose a parallel printer port: ';AN000;
791PANEL13_L EQU ($-PANEL13)/PANEL13_W ;AN000;
792
793;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
794;
795;
796;
797;
798; <R1> The quotation marks have to left-right justified
799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
800; |---------1---------2---------3---------4---------5---------6---------7---------8
801
802PANEL14 LABEL BYTE ;AN000;
803 DB ' Serial Printer Port ';AN000;
804PANEL14_W EQU ($-PANEL14) ;AN000;
805 DB ' ';AN000;
806 DB ' ';AN000;
807 DB ' ';AN000;
808 DB ' ';AN000;
809 DB 'Choose a serial printer port: ';AN000;
810 DB ' ';AN000;
811 DB ' ';AN000;
812 DB ' ';AN000;
813 DB ' ';AN000;
814 DB ' ';AN000;
815 DB ' ';AN000;
816 DB ' ';AN000;
817 DB 'To refer to this serial printer as a parallel printer,';AN000;
818 DB 'choose a parallel port. If not, choose None. ';AN000;
819PANEL14_L EQU ($-PANEL14)/PANEL14_W ;AN000;
820
821;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
822;
823;
824;
825;
826; <R1> The quotation marks have to left-right justified
827;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
828; |---------1---------2---------3---------4---------5---------6---------7---------8
829
830PANEL15 LABEL BYTE ;AN000;
831 DB ' Installation Options ';AN000;
832PANEL15_W EQU ($-PANEL15) ;AN000;
833 DB ' ';AN000;
834 DB ' ';AN000;
835 DB 'SELECT defined a configuration based on the options';AC079;SEH ;AN000;
836 DB 'you chose for DOS functions and program workspace. ';AC079;SEH ;AN000;
837 DB ' ';AC079;SEH ;AN000;
838 DB ' ';AC079;SEH ;AN000;
839 DB 'Choose an option: ';AN000;
840PANEL15_L EQU ($-PANEL15)/PANEL15_W ;AN000;
841
842;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
843;
844;
845;
846;
847; <R1> The quotation marks have to left-right justified
848;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
849; |---------1---------2---------3---------4---------5---------6---------7---------8
850
851PANEL16 LABEL BYTE ;AN000;
852 DB ' Review Selections ';AN000;
853PANEL16_W EQU ($-PANEL16) ;AN000;
854 DB ' ';AN000;
855 DB 'SELECT made these selections for you. You can accept ';AN000;
856 DB 'these selections or change any of them. If you change ';AN000;
857 DB 'an item from No to Yes, it will increase the amount of ';AN000;
858 DB 'memory DOS uses. ';AN000;
859 DB ' ';AN000;
860 DB 'To change a selection, use the up and down arrow keys to ';AN000;
861 DB 'highlight your choice, then press the spacebar. To accept';AN000;
862 DB 'all the selections, press the Enter key. ';AN000;
863 DB ' Choice: ';AN000;
864PANEL16_L EQU ($-PANEL16)/PANEL16_W ;AN000;
865
866;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
867;
868;
869;
870;
871; <R1> The quotation marks have to left-right justified
872;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
873; |---------1---------2---------3---------4---------5---------6---------7---------8
874
875PANEL17 LABEL BYTE ;AN028;
876 DB 'The printer you chose is not supported. ';AN028;
877PANEL17_W EQU ($-PANEL17) ;AN028;
878 DB ' ';AN028;
879 DB 'Press Enter to return to the Printer Selection';AN028;
880 DB 'screen and choose another printer, or Press F3';AN028;
881 DB 'to exit the SELECT program. ';AN028;
882PANEL17_L EQU ($-PANEL17)/PANEL17_W ;AN028;
883
884;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
885;
886;
887;
888;
889; <R1> The quotation marks have to left-right justified
890;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
891; |---------1---------2---------3---------4---------5---------6---------7---------8
892
893PANEL18 LABEL BYTE ;AN000;
894 DB ' DOS Parameters ' ;AN000;
895PANEL18_W EQU ($-PANEL18) ;AN000;
896 DB ' ' ;AN000;
897 DB ' ' ;AN000;
898 DB 'SELECT has set these values for you (if any). Press' ;AC000;JW
899 DB 'Enter to accept these values or type in new values. ' ;AC000;JW
900 DB ' ' ;AN000;
901 DB ' ' ;AN000;
902 DB 'DOS PATH . . . . . . ' ;AN000;
903 DB ' ' ;AN000;
904 DB ' ' ;AN000;
905 DB 'APPEND PARAMETERS . ' ;AN000;JW
906 DB 'APPEND PATH . . . . ' ;AN000;
907 DB ' ' ;AN000;
908 DB ' ' ;AN000;
909 DB 'PROMPT . . . . . . . ' ;AN000;
910PANEL18_L EQU ($-PANEL18)/PANEL18_W ;AN000;
911
912;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
913;
914;
915;
916;
917; <R1> The quotation marks have to left-right justified
918;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
919; |---------1---------2---------3---------4---------5---------6---------7---------8
920
921PANEL19 LABEL BYTE ;AN000;
922 DB ' DOS SHELL Parameters ' ;AN000;
923PANEL19_W EQU ($-PANEL19) ;AN000;
924 DB ' ' ;AN000;
925 DB ' ' ;AN000;
926 DB 'SELECT has set these values for you (if any). Press' ;AC000;JW
927 DB 'Enter to accept these values or type in new values. ' ;AC000;JW
928 DB ' ' ;AN000;
929 DB ' ' ;AN000;
930 DB 'SHELL parameters . . ' ;AN000;
931PANEL19_L EQU ($-PANEL19)/PANEL19_W ;AN000;
932
933;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
934;
935;
936;
937;
938; <R1> The quotation marks have to left-right justified
939;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
940; |---------1---------2---------3---------4---------5---------6---------7---------8
941
942PANEL20 LABEL BYTE ;AN000;
943 DB 'An unrecoverable error occurred while installing' ;AN000;
944PANEL20_W EQU ($-PANEL20) ;AN000;
945 DB 'DOS. Press F3 to exit SELECT. ' ;AN000;
946PANEL20_L EQU ($-PANEL20)/PANEL20_W ;AN000;
947
948;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
949;
950;
951;
952;
953; <R1> The quotation marks have to left-right justified
954;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
955; |---------1---------2---------3---------4---------5---------6---------7---------8
956
957PANEL21 LABEL BYTE ;AN000;
958 DB ' FASTOPEN Parameters ' ;AN000;
959PANEL21_W EQU ($-PANEL21) ;AN000;
960 DB ' ' ;AN000;
961 DB ' ' ;AN000;
962 DB 'SELECT has set these values for you (if any). Press' ;AC000;JW
963 DB 'Enter to accept these values or type in new values. ' ;AC000;JW
964 DB ' ' ;AN000;
965 DB ' ' ;AN000;
966 DB 'FASTOPEN parameters . . . ' ;AN000;
967PANEL21_L EQU ($-PANEL21)/PANEL21_W ;AN000;
968
969;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
970;
971;
972;
973;
974; <R1> The quotation marks have to left-right justified
975;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
976; |---------1---------2---------3---------4---------5---------6---------7---------8
977
978PANEL22 LABEL BYTE ;AN000;
979 DB ' SHARE Parameters ' ;AN000;
980PANEL22_W EQU ($-PANEL22) ;AN000;
981 DB ' ' ;AN000;
982 DB ' ' ;AN000;
983 DB 'SELECT has set these values for you (if any). Press' ;AC000;JW
984 DB 'Enter to accept these values or type in new values. ' ;AC000;JW
985 DB ' ' ;AN000;
986 DB ' ' ;AN000;
987 DB 'SHARE parameters . . . . ' ;AN000;
988PANEL22_L EQU ($-PANEL22)/PANEL22_W ;AN000;
989
990;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
991;
992;
993;
994;
995; <R1> The quotation marks have to left-right justified
996;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
997; |---------1---------2---------3---------4---------5---------6---------7---------8
998
999PANEL23 LABEL BYTE ;AN000;
1000 DB ' GRAPHICS Parameters ' ;AN000;
1001PANEL23_W EQU ($-PANEL23) ;AN000;
1002 DB ' ' ;AN000;
1003 DB ' ' ;AN000;
1004 DB 'SELECT has set these values for you (if any). Press' ;AC000;JW
1005 DB 'Enter to accept these values or type in new values. ' ;AC000;JW
1006 DB ' ' ;AN000;
1007 DB ' ' ;AN000;
1008 DB 'GRAPHICS parameters . . ' ;AN000;
1009PANEL23_L EQU ($-PANEL23)/PANEL23_W ;AN000;
1010
1011;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1012;
1013;
1014;
1015;
1016; <R1> The quotation marks have to left-right justified
1017;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1018; |---------1---------2---------3---------4---------5---------6---------7---------8
1019
1020PANEL24 LABEL BYTE ;AN000;
1021 DB ' Expanded Memory Parameters ' ;AN000;
1022PANEL24_W EQU ($-PANEL24) ;AN000;
1023 DB ' ' ;AN000;
1024 DB ' ' ;AN000;
1025 DB 'SELECT has set these values for you (if any). Press' ;AC000;JW
1026 DB 'Enter to accept these values or type in new values. ' ;AC000;JW
1027 DB ' ' ;AN000;
1028 DB ' ' ;AN000;
1029 DB 'XMAEM parameters . . . . ' ;AN000;
1030 DB ' ' ;AN000;
1031 DB ' ' ;AN000;
1032 DB 'XMA2EMS parameters . . . ' ;AN000;
1033PANEL24_L EQU ($-PANEL24)/PANEL24_W ;AN000;
1034
1035;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1036;
1037;
1038;
1039;
1040; <R1> The quotation marks have to left-right justified
1041;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1042; |---------1---------2---------3---------4---------5---------6---------7---------8
1043
1044PANEL25 LABEL BYTE ;AN000;
1045 DB ' RAMDRIVE Parameters ' ;AN000;
1046PANEL25_W EQU ($-PANEL25) ;AN000;
1047 DB ' ' ;AN000;
1048 DB ' ' ;AN000;
1049 DB 'SELECT has set these values for you (if any). Press' ;AC000;JW
1050 DB 'Enter to accept these values or type in new values. ' ;AC000;JW
1051 DB ' ' ;AN000;
1052 DB ' ' ;AN000;
1053 DB 'RAMDRIVE parameters . . . . ' ;AN000;
1054PANEL25_L EQU ($-PANEL25)/PANEL25_W ;AN000;
1055
1056;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1057;
1058;
1059;
1060;
1061; <R1> The quotation marks have to left-right justified
1062;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1063; |---------1---------2---------3---------4---------5---------6---------7---------8
1064
1065PANEL26 LABEL BYTE ;AN000;
1066 DB ' Configuration Parameters' ;AN000;
1067PANEL26_W EQU ($-PANEL26) ;AN000;
1068 DB ' ' ;AN000;
1069 DB 'SELECT has set these values for you. Press ' ;AN000;
1070 DB 'Enter to accept the values shown or type in ' ;AN000;
1071 DB 'new values. ' ;AN000;
1072 DB ' ' ;AN000;
1073 DB ' ' ;AN000;
1074 DB 'BREAK. . . . . . (ON/OFF) ' ;AN000;
1075 DB 'BUFFERS . . . . (1-99,1-8) ' ;AN000;
1076 DB 'FCBS . . . . . . (1-255,0-255) ' ;AN000;
1077 DB 'FILES . . . . . (8-255) ' ;AN000;
1078 DB 'LASTDRIVE . . . (A-Z) ' ;AN000;
1079 DB 'STACKS . . . . . (8-64,32-512) ' ;AN000;
1080 DB 'VERIFY . . . . . (ON/OFF) ' ;AN000;
1081PANEL26_L EQU ($-PANEL26)/PANEL26_W ;AN000;
1082
1083;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1084;
1085;
1086;
1087;
1088; <R1> The quotation marks have to left-right justified
1089;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1090; |---------1---------2---------3---------4---------5---------6---------7---------8
1091
1092PANEL27 LABEL BYTE ;AN000;
1093 DB ' Partition Fixed Disk ';AN000;
1094PANEL27_W EQU ($-PANEL27) ;AN000;
1095 DB ' ';AN000;
1096 DB ' ';AN000;
1097 DB ' ';AN000;
1098 DB ' ';AN000;
1099 DB ' ';AN000;
1100 DB 'This fixed disk must be set up before you can use it. Setting up ';AN000;
1101 DB 'involves separating the disk into areas called partitions. SELECT';AN000;
1102 DB 'can define the partition sizes for you, or you can define your ';AN000;
1103 DB 'own partition sizes. ';AN000;
1104 DB ' ';AN000;
1105 DB ' ';AN000;
1106 DB 'Choose an option: ';AN000;
1107PANEL27_L EQU ($-PANEL27)/PANEL27_W ;AN000;
1108
1109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1110;
1111;
1112;
1113;
1114; <R1> The quotation marks have to left-right justified
1115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1116; |---------1---------2---------3---------4---------5---------6---------7---------8
1117
1118PANEL28 LABEL BYTE ;AN000;
1119 DB ' Partition Fixed Disk ';AN000;
1120PANEL28_W EQU ($-PANEL28) ;AN000;
1121 DB ' ';AN000;
1122 DB ' ';AN000;
1123 DB ' ';AN000;
1124 DB ' ';AN000;
1125 DB ' ';AN000;
1126 DB 'This fixed disk is not completely set up. The fixed disk has space';AN000;
1127 DB 'that needs to be divided into areas called partitions. You can ';AN000;
1128 DB 'leave the fixed disk as it is, or you can define your own ';AN000;
1129 DB 'partition sizes. ';AN000;
1130 DB ' ';AN000;
1131 DB ' ';AN000;
1132 DB 'Choose an option: ';AN000;
1133PANEL28_L EQU ($-PANEL28)/PANEL28_W ;AN000;
1134
1135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1136;
1137;
1138;
1139;
1140; <R1> The quotation marks have to left-right justified
1141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1142; |---------1---------2---------3---------4---------5---------6---------7---------8
1143
1144PANEL29 LABEL BYTE ;AN000;
1145 DB 'You must restart your computer to continue.' ;AN000;
1146PANEL29_W EQU ($-PANEL29) ;AN000;
1147PANEL29_L EQU ($-PANEL29)/PANEL29_W ;AN000;
1148
1149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1150;
1151;
1152;
1153;
1154; <R1> The quotation marks have to left-right justified
1155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1156; |---------1---------2---------3---------4---------5---------6---------7---------8
1157
1158PANEL30 LABEL BYTE ;AN000;
1159 DB ' Date and Time' ;AN000;
1160PANEL30_W EQU ($-PANEL30) ;AN000;
1161 DB ' ' ;AN000;
1162 DB ' ' ;AN000;
1163 DB 'Current date: ' ;AN000;
1164 DB ' ' ;AN000;
1165 DB ' Year . . . . (1980-2079) ' ;AN000;
1166 DB ' ' ;AN000;
1167 DB ' Month . . . (1-12) ' ;AN000;
1168 DB ' ' ;AN000;
1169 DB ' Day . . . . (1-31) ' ;AN000;
1170 DB ' ' ;AN000;
1171 DB ' ' ;AN000;
1172 DB ' ' ;AN000;
1173 DB 'Current time: ' ;AN000;
1174 DB ' ' ;AN000;
1175 DB ' Hour . . . . (00-23) ' ;AN000;
1176 DB ' ' ;AN000;
1177 DB ' Minute . . . (00-59) ' ;AN000;
1178 DB ' ' ;AN000;
1179 DB ' Second . . . (00-59) ' ;AN000;
1180PANEL30_L EQU ($-PANEL30)/PANEL30_W ;AN000;
1181
1182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1183;
1184;
1185;
1186;
1187; <R1> The quotation marks have to left-right justified
1188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1189; |---------1---------2---------3---------4---------5---------6---------7---------8
1190
1191PANEL31 LABEL BYTE ;AN000;
1192 DB ' Format Fixed Disk Drive' ;AN000;
1193PANEL31_W EQU ($-PANEL31) ;AN000;
1194 DB ' ' ;AN000;
1195 DB ' ' ;AN000;
1196 DB ' ' ;AN000;
1197 DB ' ' ;AN000;JW added line
1198 DB ' ' ;AN000;
1199 DB 'Choose an option: ' ;AN000;
1200PANEL31_L EQU ($-PANEL31)/PANEL31_W ;AN000;
1201
1202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1203;
1204;
1205;
1206;
1207; <R1> The quotation marks have to left-right justified
1208;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1209; |---------1---------2---------3---------4---------5---------6---------7---------8
1210
1211PANEL32 LABEL BYTE ;AN000;
1212 DB ' Continuing Installation' ;AN000;
1213PANEL32_W EQU ($-PANEL32) ;AN000;
1214PANEL32_L EQU ($-PANEL32)/PANEL32_W ;AN000;
1215
1216;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1217;
1218; **************
1219;
1220;
1221; <R1> The quotation marks have to left-right justified
1222;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1223; |---------1---------2---------3---------4---------5---------6---------7---------8
1224
1225PANEL33 LABEL BYTE ;AN028;
1226 DB 'System does not support selected keyboard. ';AN028;
1227PANEL33_W EQU ($-PANEL33) ;AN028;
1228 DB ' ';AN028;
1229 DB 'Press Enter to return to the Keyboard Selection';AN028;
1230 DB 'screen and choose another keyboard, or Press F3';AN028;
1231 DB 'to exit the SELECT program. ';AN028;
1232PANEL33_L EQU ($-PANEL33)/PANEL33_W ;AN028;
1233
1234;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1235;
1236;
1237;
1238;
1239; <R1> The quotation marks have to left-right justified
1240;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1241; |---------1---------2---------3---------4---------5---------6---------7---------8
1242
1243PANEL34 LABEL BYTE ;AN000;
1244 DB ' Installation Complete' ;AN000;
1245PANEL34_W EQU ($-PANEL34) ;AN000;
1246PANEL34_L EQU ($-PANEL34)/PANEL34_W ;AN000;
1247
1248;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1249;
1250;
1251;
1252;
1253; <R1> The quotation marks have to left-right justified
1254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1255; |---------1---------2---------3---------4---------5---------6---------7---------8
1256
1257PANEL35 LABEL BYTE ;AN028;
1258 DB 'Installation of MS-DOS 4.0 is complete. ';AN028;
1259PANEL35_W EQU ($-PANEL35) ;AN028;
1260 DB ' ';AN028;
1261 DB ' ';AN028;
1262 DB 'Place the new STARTUP diskette in drive A and ';AC028;
1263 DB 'press Ctrl+Alt+Del to start DOS. ';AC028;
1264 DB ' ';AN028;
1265 DB 'FOR INFORMATION ON USING THE DOS SHELL, REFER TO';AC076;SEH ;AN028;
1266 DB 'THE "MS-DOS 4.0 USERS GUIDE" BOOK. ';AC076;SEH ;AN028; ;AC049;SEH
1267PANEL35_L EQU ($-PANEL35)/PANEL35_W ;AN028;
1268
1269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1270;
1271;
1272;
1273;
1274; <R9> DO NOT TRANSLATE OR CHANGE!!!!
1275;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1276; |---------1---------2---------3---------4---------5----|
1277
1278PANEL36 LABEL BYTE ;AN000;
1279 DB '������������������������������������������������������Ŀ';AN000;
1280PANEL36_W EQU ($-PANEL36) ;AN000;
1281 DB '� �';AN000;
1282 DB '� �';AN000;
1283 DB '� �';AN000;
1284 DB '� �';AN000;
1285 DB '� �';AN000;
1286 DB '� �';AN000;
1287 DB '� �';AN000;
1288 DB '� �';AN000;
1289 DB '� �';AN000;
1290 DB '������������������������������������������������������Ĵ';AN000;
1291 DB '� �';AN000;
1292 DB '��������������������������������������������������������';AN000;
1293PANEL36_L EQU ($-PANEL36)/PANEL36_W ;AN000;
1294
1295;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1296;
1297;
1298;
1299;
1300; <R9> DO NOT TRANSLATE OR CHANGE!!!!
1301;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1302
1303PANEL37 LABEL BYTE ;AN000;
1304 DB '��������������������������������������������������������������������������������';AN000;
1305PANEL37_W EQU ($-PANEL37) ;AN000;
1306PANEL37_L EQU ($-PANEL37)/PANEL37_W ;AN000;
1307
1308;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1309;
1310;
1311;
1312;
1313; <R1> The quotation marks have to left-right justified
1314; <R3> The panel will be centered in an 80 column screen
1315;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1316; |---------1---------2---------3---------4---------5---------6---------7---------8
1317
1318PANEL38 LABEL BYTE ;AN000;
1319 DB 'Press Enter (��) to continue or Esc to Cancel' ;AN000;
1320PANEL38_W EQU ($-PANEL38) ;AN000;
1321PANEL38_L EQU ($-PANEL38)/PANEL38_W ;AN000;
1322
1323;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1324;
1325;
1326;
1327;
1328; <R1> The quotation marks have to left-right justified
1329;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1330; |---------1---------2---------3---------4---------5---------6---------7---------8
1331
1332PANEL39 LABEL BYTE ;AN000;
1333 DB 'Printer........... ' ;AN000;
1334PANEL39_W EQU ($-PANEL39) ;AN000;
1335PANEL39_L EQU ($-PANEL39)/PANEL39_W ;AN000;
1336
1337;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1338;
1339;
1340;
1341;
1342; <R1> The quotation marks have to left-right justified
1343;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1344; |---------1---------2---------3---------4---------5---------6---------7---------8
1345
1346PANEL40 LABEL BYTE ;AN000;
1347 DB ' F3=Exit ' ;AN000;
1348PANEL40_W EQU ($-PANEL40) ;AN000;
1349PANEL40_L EQU ($-PANEL40)/PANEL40_W ;AN000;
1350
1351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1352;
1353;
1354;
1355;
1356; <R1> The quotation marks have to left-right justified
1357;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1358; |---------1---------2---------3---------4---------5---------6---------7---------8
1359
1360PANEL41 LABEL BYTE ;AN000;
1361 DB 'Fixed Disk........ ' ;AC000;JW
1362PANEL41_W EQU ($-PANEL41) ;AN000;
1363PANEL41_L EQU ($-PANEL41)/PANEL41_W ;AN000;
1364
1365;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1366;
1367;
1368;
1369;
1370; <R1> The quotation marks have to left-right justified
1371;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1372; |---------1---------2---------3---------4---------5---------6---------7---------8
1373
1374PANEL42 LABEL BYTE ;AN000;
1375 DB 'Logical Drive..... :' ;AC000;JW
1376PANEL42_W EQU ($-PANEL42) ;AN000;
1377PANEL42_L EQU ($-PANEL42)/PANEL42_W ;AN000;
1378
1379;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1380;
1381;
1382;
1383;
1384; <R1> The quotation marks have to left-right justified
1385;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1386; |---------1---------2---------3---------4---------5---------6---------7---------8
1387
1388PANEL43 LABEL BYTE ;AN000;
1389 DB 'Press Ctrl+Alt+Del to continue with DOS installation.';AN000;
1390PANEL43_W EQU ($-PANEL43) ;AN000;
1391PANEL43_L EQU ($-PANEL43)/PANEL43_W ;AN000;
1392
1393;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1394;
1395;
1396;
1397;
1398; <R1> The quotation marks have to left-right justified
1399;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1400; |---------1---------2---------3---------4---------5---------6---------7---------8
1401
1402PANEL44 LABEL BYTE ;AN000;
1403 DB 'Copying from OPERATING diskette . . .';AN000;
1404PANEL44_W EQU ($-PANEL44) ;AN000;
1405PANEL44_L EQU ($-PANEL44)/PANEL44_W ;AN000;
1406
1407;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1408;
1409;
1410;
1411;
1412; <R1> The quotation marks have to left-right justified
1413;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1414; |---------1---------2---------3---------4---------5---------6---------7---------8
1415
1416PANEL45 LABEL BYTE ;AN000;
1417 DB 'Copying from INSTALL diskette . . .' ;AN000;
1418PANEL45_W EQU ($-PANEL45) ;AN000;
1419PANEL45_L EQU ($-PANEL45)/PANEL45_W ;AN000;
1420
1421;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1422;
1423;
1424;
1425;
1426; <R1> The quotation marks have to left-right justified
1427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1428; |---------1---------2---------3---------4---------5---------6---------7---------8
1429
1430PANEL46 LABEL BYTE ;AN000;
1431 DB 'Installation of MS-DOS 4.0 is complete. ';AN000;
1432PANEL46_W EQU ($-PANEL46) ;AN000;
1433 DB ' ';AN076;SEH
1434 DB ' ';AN076;SEH
1435 DB 'REFER TO THE "MS-DOS 4.0 USERS GUIDE" BOOK';AC076;SEH ;AC049;SEH ;AN028;
1436 DB 'FOR INFORMATION ON USING THE DOS SHELL. ';AC076;SEH ;AN028;
1437PANEL46_L EQU ($-PANEL46)/PANEL46_W ;AN000;
1438
1439;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1440;
1441;
1442;
1443;
1444; <R1> The quotation marks have to left-right justified
1445;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1446; |---------1---------2---------3---------4---------5---------6---------7---------8
1447
1448PANEL47 LABEL BYTE ;AN000;
1449 DB 'Remove all diskettes. Press Ctrl+Alt+Del to start DOS.';AN000;
1450PANEL47_W EQU ($-PANEL47) ;AN000;
1451PANEL47_L EQU ($-PANEL47)/PANEL47_W ;AN000;
1452
1453;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1454;
1455;
1456;
1457; <R1> The quotation marks have to left-right justified
1458;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1459; |---------1---------2---------3---------4---------5---------6---------7---------8
1460
1461PANEL48 LABEL BYTE ;AN000;
1462 DB 'Installation of MS-DOS 4.0 is complete. ';AN000;
1463PANEL48_W EQU ($-PANEL48) ;AN000;
1464 DB ' ';AN000;
1465 DB ' ';AN000;
1466 DB 'To start DOS, place the STARTUP diskette in drive A';AC064;SEH;AC056;SEH ;AC000;JW
1467 DB 'and press Ctrl+Alt+Del. ';AC064;SEH;AC056;SEH ;AC000;JW
1468 DB ' ';AN000;
1469 DB 'or ';AN064;SEH;AN000;
1470 DB ' ';AN000;
1471 DB 'To start the DOS Shell, place the SHELL diskette ';AC064;SEH;AC056;SEH ;AC028;
1472 DB 'in drive A, and press Ctrl+Alt+Del. ';AC064;SEH;AC056;SEH ;AC028;
1473 DB ' ';AN064;SEH
1474 DB 'FOR INFORMATION ON USING THE DOS SHELL, REFER TO ';AC076;SEH ;AC064;SEH;AC056;SEH ;AN028;
1475 DB 'THE "MS-DOS 4.0 USERS GUIDE" BOOK. ';AC076;SEH ;AC056;SEH ;AC049;SEH ;AN028;
1476PANEL48_L EQU ($-PANEL48)/PANEL48_W ;AN000;
1477
1478;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1479;
1480;
1481;
1482;
1483; <R1> The quotation marks have to left-right justified
1484;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1485; |---------1---------2---------3---------4---------5---------6---------7---------8
1486
1487PANEL49 LABEL BYTE ;AN000;
1488 DB ' F1=Help ' ;AN000;
1489PANEL49_W EQU ($-PANEL49) ;AN000;
1490PANEL49_L EQU ($-PANEL49)/PANEL49_W ;AN000;
1491
1492;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1493;
1494;
1495;
1496;
1497; <R1> The quotation marks have to left-right justified
1498;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1499; |---------1---------2---------3---------4---------5---------6---------7---------8
1500
1501PANEL50 LABEL BYTE ;AN000;
1502 DB ' F9=Keys ' ;AN000;
1503PANEL50_W EQU ($-PANEL50) ;AN000;
1504PANEL50_L EQU ($-PANEL50)/PANEL50_W ;AN000;
1505
1506;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1507;
1508;
1509;
1510;
1511; <R1> The quotation marks have to left-right justified
1512;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1513; |---------1---------2---------3---------4---------5---------6---------7---------8
1514
1515PANEL51 LABEL BYTE ;AN000;
1516 DB ' Esc=Cancel ' ;AN000;
1517PANEL51_W EQU ($-PANEL51) ;AN000;
1518PANEL51_L EQU ($-PANEL51)/PANEL51_W ;AN000;
1519
1520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1521;
1522;
1523;
1524;
1525; <R1> The quotation marks have to left-right justified
1526;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1527; |---------1---------2---------3---------4---------5---------6---------7---------8
1528
1529PANEL52 LABEL BYTE ;AN000;
1530 DB ' Enter ' ;AN000;
1531PANEL52_W EQU ($-PANEL52) ;AN000;
1532PANEL52_L EQU ($-PANEL52)/PANEL52_W ;AN000;
1533
1534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1535;
1536; ************
1537;
1538;
1539; <R1> The quotation marks have to left-right justified
1540;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1541; |---------1---------2---------3---------4---------5---------6---------7---------8
1542PANEL53 LABEL BYTE ;AN000;
1543 DB 'Installation of MS-DOS 4.0 is complete. ';AN000;
1544PANEL53_W EQU ($-PANEL53) ;AN000;
1545 DB ' ';AN000;
1546 DB 'The files AUTOEXEC.400 and CONFIG.400 have been ';AC057;SEH ;AN000;
1547 DB 'copied to your fixed disk. The files contain the';AC057;SEH ;AN000;
1548 DB 'options selected for DOS 4.0. To get the options';AC057;SEH ;AN000;
1549 DB 'selected, update your AUTOEXEC.BAT and CONFIG.SYS';AC057;SEH ;AN000;
1550 DB 'files. Refer to the "MS-DOS 4.0 Users Guide" ';AC057;SEH ;AN000;
1551 DB 'book for information on updating these files. ';AC057;SEH ;AN000;
1552 DB ' ';AC057;SEH ;AC049;SEH ;AN000;
1553 DB 'FOR INFORMATION ON USING THE DOS SHELL, REFER TO ';AC076;SEH ;AC057;SEH ;AC028;
1554 DB 'THE "MS-DOS 4.0 USERS GUIDE" BOOK. ';AC076;SEH ;AC057;SEH ;AN028;
1555PANEL53_L EQU ($-PANEL53)/PANEL53_W ;AN000;
1556
1557;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1558;
1559;
1560;
1561;
1562; <R1> The quotation marks have to left-right justified
1563; <R5> The width of the entry must not exceed the RULER provided.
1564;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1565; |---------1---------2---------3---------4---------5-|
1566
1567PANEL54 LABEL BYTE ;AN028;
1568 DB 'Disk write-protected ' ;AN028;
1569PANEL54_W EQU ($-PANEL54) ;AN028;
1570 DB ' ' ;AN028;
1571 DB 'Use a non-protected diskette or remove' ;AN028;
1572 DB 'the write-protection on the diskette. ' ;AN028;
1573PANEL54_L EQU ($-PANEL54)/PANEL54_W ;AN028;
1574
1575;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1576;
1577;
1578;
1579;
1580; <R1> The quotation marks have to left-right justified
1581; <R5> The width of the entry must not exceed the RULER provided.
1582;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1583; |---------1---------2---------3---------4---------5-|
1584
1585PANEL55 LABEL BYTE ;AN028;
1586 DB 'Drive not ready ';AN028;
1587PANEL55_W EQU ($-PANEL55) ;AN028;
1588 DB ' ';AN028;
1589 DB 'Reinsert the diskette and close the drive door.';AN028;
1590 DB 'Press Enter to continue. ';AN028;
1591PANEL55_L EQU ($-PANEL55)/PANEL55_W ;AN028;
1592
1593;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1594;
1595;
1596;
1597;
1598; <R1> The quotation marks have to left-right justified
1599; <R5> The width of the entry must not exceed the RULER provided.
1600;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1601; |---------1---------2---------3---------4---------5-|
1602
1603PANEL56 LABEL BYTE ;AN000;
1604 DB 'Defective diskette ';AN000;
1605PANEL56_W EQU ($-PANEL56) ;AN000;
1606 DB ' ';AN028;
1607 DB 'Press Enter to retry, or Press F3 to exit SELECT.';AN000;
1608PANEL56_L EQU ($-PANEL56)/PANEL56_W ;AN000;
1609
1610;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1611;
1612;
1613;
1614;
1615; <R1> The quotation marks have to left-right justified
1616; <R5> The width of the entry must not exceed the RULER provided.
1617;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1618; |---------1---------2---------3---------4---------5-|
1619
1620PANEL57 LABEL BYTE ;AN000;
1621 DB 'An error occurred while installing DOS. ';AN000;
1622PANEL57_W EQU ($-PANEL57) ;AN000;
1623 DB 'Press Enter to continue, or F3 to exit SELECT.';AN000;
1624PANEL57_L EQU ($-PANEL57)/PANEL57_W ;AN000;
1625
1626;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1627;
1628;
1629;
1630;
1631; <R1> The quotation marks have to left-right justified
1632;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1633; |---------1---------2---------3---------4---------5---------6---------7---------8
1634
1635PANEL58 LABEL BYTE ;AN000;
1636 DB 'Insert STARTUP diskette in drive B' ;AC000;JW
1637PANEL58_W EQU ($-PANEL58) ;AN000;
1638PANEL58_L EQU ($-PANEL58)/PANEL58_W ;AN000;
1639
1640;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1641;
1642;
1643;
1644;
1645; <R1> The quotation marks have to left-right justified
1646;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1647; |---------1---------2---------3---------4---------5---------6---------7---------8
1648
1649PANEL59 LABEL BYTE ;AN000;
1650 DB 'Insert OPERATING diskette in drive A' ;AC000;JW
1651PANEL59_W EQU ($-PANEL59) ;AN000;
1652PANEL59_L EQU ($-PANEL59)/PANEL59_W ;AN000;
1653
1654;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1655;
1656;
1657;
1658;
1659; <R1> The quotation marks have to left-right justified
1660;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1661; |---------1---------2---------3---------4---------5---------6---------7---------8
1662
1663PANEL60 LABEL BYTE ;AN000;
1664 DB 'Insert SHELL diskette in drive B' ;AC000;JW
1665PANEL60_W EQU ($-PANEL60) ;AN000;
1666PANEL60_L EQU ($-PANEL60)/PANEL60_W ;AN000;
1667
1668;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1669;
1670;
1671;
1672;
1673; <R1> The quotation marks have to left-right justified
1674;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1675; |---------1---------2---------3---------4---------5---------6---------7---------8
1676
1677PANEL61 LABEL BYTE ;AN000;
1678 DB 'Insert INSTALL diskette in drive A' ;AC000;JW
1679PANEL61_W EQU ($-PANEL61) ;AN000;
1680PANEL61_L EQU ($-PANEL61)/PANEL61_W ;AN000;
1681
1682;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1683;
1684;
1685;
1686;
1687; <R1> The quotation marks have to left-right justified
1688; <R5> The width of the entry must not exceed the RULER provided.
1689;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1690; |---------1---------2---------3---------4---------5-|
1691
1692PANEL62 LABEL BYTE ;AN000;
1693 DB 'Incorrect path ';AN000;
1694PANEL62_W EQU ($-PANEL62) ;AN000;
1695 DB ' ';AN028;
1696 DB 'The path specified cannot be found. ';AN000;
1697 DB ' ';AN000;
1698 DB 'Correct the path and retry the command.';AN000;
1699PANEL62_L EQU ($-PANEL62)/PANEL62_W ;AN000;
1700
1701;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1702;
1703;
1704;
1705;
1706; <R1> The quotation marks have to left-right justified
1707; <R5> The width of the entry must not exceed the RULER provided.
1708;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1709; |---------1---------2---------3---------4---------5-|
1710
1711PANEL63 LABEL BYTE ;AN028;
1712 DB 'Missing or unreadable SELECT.PRT file ';AN028;
1713PANEL63_W EQU ($-PANEL63) ;AN028;
1714 DB ' ';AN028;
1715 DB 'Press Enter to continue SELECT and no printers';AN028;
1716 DB 'will be defined, or Press F3 to exit SELECT. ';AN028;
1717PANEL63_L EQU ($-PANEL63)/PANEL63_W ;AN028;
1718
1719;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1720;
1721;
1722;
1723;
1724; <R1> The quotation marks have to left-right justified
1725; <R5> The width of the entry must not exceed the RULER provided.
1726;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1727; |---------1---------2---------3---------4---------5-|
1728
1729PANEL64 LABEL BYTE ;AN000;
1730 DB 'Printer profile information invalid ';AN000;
1731PANEL64_W EQU ($-PANEL64) ;AN000;
1732 DB ' ';AN000;
1733 DB 'Press Enter to return to the Printer Selection';AN000;
1734 DB 'screen and choose another printer, or Press F3';AN000;
1735 DB 'to exit SELECT. ';AN000;
1736PANEL64_L EQU ($-PANEL64)/PANEL64_W ;AN000;
1737
1738;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1739;
1740;
1741;
1742;
1743; <R1> The quotation marks have to left-right justified
1744;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1745; |---------1---------2---------3---------4---------5---------6---------7---------8
1746
1747PANEL65 LABEL BYTE ;AN000;
1748 DB 'Formatting disk . . .' ;AN000;
1749PANEL65_W EQU ($-PANEL65) ;AN000;
1750PANEL65_L EQU ($-PANEL65)/PANEL65_W ;AN000;
1751
1752;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1753;
1754;
1755;
1756;
1757; <R1> The quotation marks have to left-right justified
1758;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1759; |---------1---------2---------3---------4---------5---------6---------7---------8
1760
1761PANEL66 LABEL BYTE ;AN000;
1762 DB 'Formatting diskette in drive B . . .';AC000;JW
1763PANEL66_W EQU ($-PANEL66) ;AN000;
1764PANEL66_L EQU ($-PANEL66)/PANEL66_W ;AN000;
1765
1766;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1767;
1768;
1769;
1770;
1771; <R9> DO NOT TRANSLATE OR CHANGE!!!!
1772; <R5> The width of the entry must not exceed the RULER provided.
1773;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1774; |---------1---------2---------3---------4---------5-|
1775
1776PANEL67 LABEL BYTE ;AN000;
1777 DB '���������������������������������������������������Ŀ';AN000;
1778PANEL67_W EQU ($-PANEL67) ;AN000;
1779 DB '� �';AN000;
1780 DB '� �';AN000;
1781 DB '� �';AN000;
1782 DB '� �';AN000;
1783 DB '� �';AN000;
1784 DB '���������������������������������������������������Ĵ';AN000;
1785 DB '� �';AN000;
1786 DB '�����������������������������������������������������';AN000;
1787PANEL67_L EQU ($-PANEL67)/PANEL67_W ;AN000;
1788
1789;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1790;
1791;
1792;
1793;
1794; <R1> The quotation marks have to left-right justified
1795; <R5> The width of the entry must not exceed the RULER provided.
1796;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1797; |---------1---------2---------3---------4---------5-|
1798
1799PANEL68 LABEL BYTE ;AN000;
1800 DB 'Incorrect diskette ';AC030;
1801PANEL68_W EQU ($-PANEL68) ;AN000;
1802 DB ' ';AN030;
1803 DB 'Press Enter and follow instructions on screen,';AN030;
1804 DB 'or press F3 to exit SELECT. ';AN030;
1805PANEL68_L EQU ($-PANEL68)/PANEL68_W ;AN000;
1806
1807;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1808;
1809;
1810;
1811;
1812; <R1> The quotation marks have to left-right justified
1813; <R5> The width of the entry must not exceed the RULER provided.
1814;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1815; |---------1---------2---------3---------4---------5-|
1816
1817PANEL69 LABEL BYTE ;AN000;
1818 DB 'An unrecoverable error occurred while installing ';AN000;
1819PANEL69_W EQU ($-PANEL69) ;AN000;
1820 DB 'DOS. Press Enter to retry, or F3 to exit SELECT.';AN000;
1821PANEL69_L EQU ($-PANEL69)/PANEL69_W ;AN000;
1822
1823;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1824;
1825;
1826;
1827;
1828; <R1> The quotation marks have to left-right justified
1829;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1830; |---------1---------2---------3---------4---------5---------6---------7---------8
1831
1832PANEL70 LABEL BYTE ;AN000;
1833 DB 'Before proceeding, SELECT needs to make a copy of ';AN000;
1834PANEL70_W EQU ($-PANEL70) ;AN000;
1835 DB 'the INSTALL diskette. ';AN000;
1836 DB ' ';AN000;
1837 DB 'During installation to a fixed disk, SELECT records';AN000;
1838 DB 'information to a diskette for later use in the ';AN000;
1839 DB 'installation process. Have your blank diskette, ';AN000;
1840 DB 'labeled "SELECT COPY", ready for this purpose. ';AC075;SEH
1841 DB ' ';AN000;
1842 DB 'For now, leave the INSTALL diskette in drive A and ';AC000;JW
1843 DB 'press ENTER to continue. ';AN000;
1844PANEL70_L EQU ($-PANEL70)/PANEL70_W ;AN000;
1845
1846;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1847;
1848;
1849;
1850;
1851; <R1> The quotation marks have to left-right justified
1852;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1853; |---------1---------2---------3---------4---------5---------6---------7---------8
1854
1855PANEL71 LABEL BYTE ;AN000;
1856 DB 'Remove the INSTALL diskette from drive A ' ;AN000;
1857PANEL71_W EQU ($-PANEL71) ;AN000;
1858 DB ' ' ;AN000;
1859 DB 'Insert the SELECT COPY diskette in drive A' ;AC075;SEH
1860PANEL71_L EQU ($-PANEL71)/PANEL71_W ;AN000;
1861
1862;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1863;
1864;
1865;
1866;
1867; <R1> The quotation marks have to left-right justified
1868;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1869; |---------1---------2---------3---------4---------5---------6---------7---------8
1870
1871PANEL72 LABEL BYTE ;AN000;
1872 DB 'Remove the SELECT COPY diskette from drive A' ;AC075;SEH ;AC000;JW
1873PANEL72_W EQU ($-PANEL72) ;AN000;
1874 DB ' ' ;AC000;JW
1875 DB 'Insert the INSTALL diskette in drive A ' ;AC000;JW
1876PANEL72_L EQU ($-PANEL72)/PANEL72_W ;AN000;
1877
1878;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1879;
1880;
1881;
1882;
1883; <R1> The quotation marks have to left-right justified
1884;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1885; |---------1---------2---------3---------4---------5---------6---------7---------8
1886
1887PANEL73 LABEL BYTE ;AN000;
1888 DB 'Copying diskette . . .' ;AN000;
1889PANEL73_W EQU ($-PANEL73) ;AN000;
1890PANEL73_L EQU ($-PANEL73)/PANEL73_W ;AN000;
1891
1892;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1893;
1894;
1895;
1896;
1897;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1898PANEL74 LABEL BYTE ;AN010;
1899 DB 'Installation of MS-DOS 4.0 is complete. ';AN010;
1900PANEL74_W EQU ($-PANEL74) ;AN010;
1901 DB ' ';AN010;
1902 DB 'The files AUTOEXEC.400 and CONFIG.400 have been';AN010;
1903 DB 'copied to your fixed disk. These files reflect';AN010;
1904 DB 'the options selected for DOS 4.0. ';AN010;
1905 DB ' ';AN010;
1906 DB 'To get the options selected for DOS 4.0: ';AN010;
1907 DB ' 1. Update your AUTOEXEC.BAT and CONFIG.SYS ';AN010;
1908 DB ' files ';AN010;
1909 DB ' 2. Copy DOS 4.0 system files to drive C ';AN010;
1910 DB ' ';AN010;
1911 DB 'REFER TO THE "MS-DOS 4.0 USERS GUIDE" BOOK FOR ';AC076;SEH ;AC049;SEH ;AN010;
1912 DB 'INFORMATION ON UPDATING THESE FILES AND ON ';AC076;SEH ;AN010;
1913 DB 'USING THE DOS SHELL. ';AC076;SEH ;AN028;
1914PANEL74_L EQU ($-PANEL74)/PANEL74_W ;AN010;
1915;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1916;
1917;
1918;
1919;
1920;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1921PANEL75 LABEL BYTE ;AN000;
1922 DB 'Formatting SHELL diskette . . .' ;AN000;
1923PANEL75_W EQU ($-PANEL75) ;AN000;
1924PANEL75_L EQU ($-PANEL75)/PANEL75_W ;AN000;
1925;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1926;
1927;
1928;
1929;
1930;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1931PANEL76 LABEL BYTE ;AN000;
1932 DB 'Formatting STARTUP diskette . . .' ;AN000;
1933PANEL76_W EQU ($-PANEL76) ;AN000;
1934PANEL76_L EQU ($-PANEL76)/PANEL76_W ;AN000;
1935
1936;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1937;
1938;
1939;
1940;
1941; <R1> The quotation marks have to left-right justified
1942;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1943; |---------1---------2---------3---------4---------5---------6---------7---------8
1944
1945PANEL77 LABEL BYTE ;AN000;
1946 DB 'Insert SELECT diskette in drive A' ;AC000;JW
1947PANEL77_W EQU ($-PANEL77) ;AN000;
1948PANEL77_L EQU ($-PANEL77)/PANEL77_W ;AN000;
1949
1950;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1951;
1952;
1953;
1954;
1955; <R1> The quotation marks have to left-right justified
1956;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1957; |---------1---------2---------3---------4---------5---------6---------7---------8
1958
1959PANEL78 LABEL BYTE ;AN000;
1960 DB 'Insert OPERATING 1 diskette in drive A' ;AC000;JW
1961PANEL78_W EQU ($-PANEL78) ;AN000;
1962PANEL78_L EQU ($-PANEL78)/PANEL78_W ;AN000;
1963
1964;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1965;
1966;
1967;
1968;
1969; <R1> The quotation marks have to left-right justified
1970;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1971; |---------1---------2---------3---------4---------5---------6---------7---------8
1972
1973PANEL79 LABEL BYTE ;AN000;
1974 DB 'Insert OPERATING 3 diskette in drive A' ;AC000;JW
1975PANEL79_W EQU ($-PANEL79) ;AN000;
1976PANEL79_L EQU ($-PANEL79)/PANEL79_W ;AN000;
1977
1978;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1979;
1980;
1981;
1982;
1983; <R1> The quotation marks have to left-right justified
1984;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1985; |---------1---------2---------3---------4---------5---------6---------7---------8
1986
1987PANEL80 LABEL BYTE ;AN000;
1988 DB 'Copying files . . .' ;AN000;
1989PANEL80_W EQU ($-PANEL80) ;AN000;
1990PANEL80_L EQU ($-PANEL80)/PANEL80_W ;AN000;
1991
1992;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1993;
1994;
1995;
1996;
1997; <R1> The quotation marks have to left-right justified
1998;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1999; |---------1---------2---------3---------4---------5---------6---------7---------8
2000
2001PANEL81 LABEL BYTE ;AN000;
2002 DB 'Insert WORKING 1 diskette in drive B' ;AC000;JW
2003PANEL81_W EQU ($-PANEL81) ;AN000;
2004PANEL81_L EQU ($-PANEL81)/PANEL81_W ;AN000;
2005
2006;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2007;
2008;
2009;
2010;
2011; <R1> The quotation marks have to left-right justified
2012;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2013; |---------1---------2---------3---------4---------5---------6---------7---------8
2014
2015PANEL82 LABEL BYTE ;AN000;
2016 DB 'Insert OPERATING 1 diskette in drive A' ;AC000;JW
2017PANEL82_W EQU ($-PANEL82) ;AN000;
2018 DB ' ' ;AC000;JW
2019 DB 'Insert WORKING 2 diskette in drive B ' ;AC000;JW
2020PANEL82_L EQU ($-PANEL82)/PANEL82_W ;AN000;
2021
2022;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2023;
2024;
2025;
2026;
2027; <R1> The quotation marks have to left-right justified
2028;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2029; |---------1---------2---------3---------4---------5---------6---------7---------8
2030
2031PANEL83 LABEL BYTE ;AN000;
2032 DB 'Insert OPERATING 2 diskette in drive A' ;AC000;JW
2033PANEL83_W EQU ($-PANEL83) ;AN000;
2034 DB ' ' ;AC000;JW
2035 DB 'Insert WORKING 3 diskette in drive B ' ;AC000;JW
2036PANEL83_L EQU ($-PANEL83)/PANEL83_W ;AN000;
2037
2038;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2039;
2040;
2041;
2042;
2043; <R1> The quotation marks have to left-right justified
2044;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2045; |---------1---------2---------3---------4---------5---------6---------7---------8
2046
2047PANEL84 LABEL BYTE ;AN000;
2048 DB 'Insert OPERATING 3 diskette in drive A' ;AC000;JW
2049PANEL84_W EQU ($-PANEL84) ;AN000;
2050 DB ' ' ;AC000;JW
2051 DB 'Insert STARTUP diskette in drive B ' ;AC000;JW
2052PANEL84_L EQU ($-PANEL84)/PANEL84_W ;AN000;
2053
2054;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2055;
2056;
2057;
2058;
2059; <R1> The quotation marks have to left-right justified
2060;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2061; |---------1---------2---------3---------4---------5---------6---------7---------8
2062
2063PANEL85 LABEL BYTE ;AN000;
2064 DB 'Insert SELECT diskette in drive A' ;AC000;JW
2065PANEL85_W EQU ($-PANEL85) ;AN000;
2066 DB ' ' ;AC000;JW
2067 DB 'Leave STARTUP diskette in drive B' ;AC000;JW
2068PANEL85_L EQU ($-PANEL85)/PANEL85_W ;AN000;
2069
2070;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2071;
2072;
2073;
2074;
2075; <R1> The quotation marks have to left-right justified
2076;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2077; |---------1---------2---------3---------4---------5---------6---------7---------8
2078
2079PANEL86 LABEL BYTE ;AN000;
2080 DB 'Insert WORKING 1 diskette in drive A';AC000;JW
2081PANEL86_W EQU ($-PANEL86) ;AN000;
2082PANEL86_L EQU ($-PANEL86)/PANEL86_W ;AN000;
2083
2084;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2085;
2086;
2087;
2088;
2089; <R1> The quotation marks have to left-right justified
2090;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2091; |---------1---------2---------3---------4---------5---------6---------7---------8
2092
2093PANEL87 LABEL BYTE ;AN000;
2094 DB 'Insert WORKING 2 diskette in drive A' ;AC000;JW
2095PANEL87_W EQU ($-PANEL87) ;AN000;
2096PANEL87_L EQU ($-PANEL87)/PANEL87_W ;AN000;
2097
2098;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2099;
2100;
2101;
2102;
2103; <R1> The quotation marks have to left-right justified
2104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2105; |---------1---------2---------3---------4---------5---------6---------7---------8
2106
2107PANEL88 LABEL BYTE ;AN000;
2108 DB 'Insert SHELL diskette in drive A' ;AC000;JW
2109PANEL88_W EQU ($-PANEL88) ;AN000;
2110PANEL88_L EQU ($-PANEL88)/PANEL88_W ;AN000;
2111
2112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2113;
2114;
2115;
2116;
2117; <R1> The quotation marks have to left-right justified
2118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2119; |---------1---------2---------3---------4---------5---------6---------7---------8
2120
2121PANEL89 LABEL BYTE ;AN000;
2122 DB 'Insert STARTUP diskette in drive A' ;AC000;JW
2123PANEL89_W EQU ($-PANEL89) ;AN000;
2124PANEL89_L EQU ($-PANEL89)/PANEL89_W ;AN000;
2125
2126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2127;
2128;
2129;
2130;
2131; <R1> The quotation marks have to left-right justified
2132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2133; |---------1---------2---------3---------4---------5---------6---------7---------8
2134
2135PANEL90 LABEL BYTE ;AN000;
2136 DB 'SELECT will create the following diskettes:';AN000;
2137PANEL90_W EQU ($-PANEL90) ;AN000;
2138 DB ' (You will need 5 blank 360KB diskettes) ';AN000;
2139 DB ' ';AN000;
2140 DB ' STARTUP Starting DOS ';AN000;
2141 DB ' WORKING 1 DOS Utilities ';AC000;JW
2142 DB ' WORKING 2 More DOS Utilities ';AC000;JW
2143 DB ' WORKING 3 Other DOS Utilities '
2144 DB ' SHELL Starting SHELL (Optional)';AN000;
2145 DB ' ';AN000;
2146 DB 'Label the blank diskettes as shown, and ';AN000;
2147 DB 'then follow the display prompts. ';AN000;
2148PANEL90_L EQU ($-PANEL90)/PANEL90_W ;AN000;
2149
2150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2151;
2152;
2153;
2154; <R1> The quotation marks have to left-right justified
2155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2156; |---------1---------2---------3---------4---------5---------6---------7---------8
2157
2158PANEL91 LABEL BYTE ;AN000;
2159 DB 'Installation of MS-DOS 4.0 is complete. ';AN000;
2160PANEL91_W EQU ($-PANEL91) ;AN000;
2161 DB ' ';AN000;
2162 DB ' ';AN000;
2163 DB 'Place the STARTUP diskette in drive A and press ';AC064;SEH;AC000;JW
2164 DB 'Ctrl+Alt+Del to start DOS. ';AC064;SEH;AC000;JW
2165 DB ' ';AN064;SEH
2166 DB 'If you want to use the DOS Shell, place the SHELL';AC064;SEH;AC028;
2167 DB 'diskette in drive A and type DOSSHELL to start ';AC064;SEH;AC028;
2168 DB 'the Shell. ';AC064;SEH;AN000;
2169 DB ' ';AN064;SEH
2170 DB 'FOR INFORMATION ON USING THE DOS SHELL, REFER TO ';AC076;SEH;AC064;SEH;AN028;
2171 DB 'THE "MS-DOS 4.0 USERS GUIDE" BOOK. ';AC076;SEH;AC064;SEH;AC049;SEH ;AN028;
2172PANEL91_L EQU ($-PANEL91)/PANEL91_W ;AN000;
2173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2174;
2175;
2176;
2177;
2178; <R1> The quotation marks have to left-right justified
2179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2180; |---------1---------2---------3---------4---------5---------6---------7---------8
2181
2182PANEL92 LABEL BYTE ;AN000;
2183 DB 'Insert SELECT COPY diskette in drive A' ;AC075;SEH ;AC000;JW
2184PANEL92_W EQU ($-PANEL92) ;AN000;
2185PANEL92_L EQU ($-PANEL92)/PANEL92_W ;AN000;
2186
2187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2188;
2189;
2190;
2191;
2192; <R1> The quotation marks have to left-right justified
2193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2194; |---------1---------2---------3---------4---------5---------6---------7---------8
2195
2196PANEL93 LABEL BYTE ;AN000;
2197 DB 'Insert OPERATING 2 diskette in drive A' ;AC000;JW
2198PANEL93_W EQU ($-PANEL93) ;AN000;
2199PANEL93_L EQU ($-PANEL93)/PANEL93_W ;AN000;
2200
2201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2202;
2203;
2204; PAN_EXP_MEMORY2 EQU 108 ;AN000;JW
2205;
2206; <R1> The quotation marks have to left-right justified
2207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2208; |---------1---------2---------3---------4---------5---------6---------7---------8
2209PANEL94 LABEL BYTE ;AN000;
2210 DB ' Expanded Memory Parameters ';AN000;
2211PANEL94_W EQU ($-PANEL94) ;AN000;
2212 DB ' ';AN000;
2213 DB ' ';AN000;
2214 DB 'SELECT has set these values for you (if any). Press';AC000;JW
2215 DB 'Enter to accept these values or type in new values. ';AC000;JW
2216 DB ' ';AN000;
2217 DB ' ';AN000;
2218 DB ' ';AN000;
2219 DB ' ';AN000;
2220 DB ' ';AN000;
2221 DB 'XMA2EMS parameters . . . ';AN000;
2222PANEL94_L EQU ($-PANEL94)/PANEL94_W ;AN000;
2223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2224;
2225;
2226;
2227;
2228; <R1> The quotation marks have to left-right justified
2229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2230; |---------1---------2---------3---------4---------5---------6---------7---------8
2231
2232PANEL95 LABEL BYTE ;AN000;
2233 DB 'SELECT will create the following diskettes:' ;AN000;
2234PANEL95_W EQU ($-PANEL95) ;AN000;
2235 DB ' (You will need 3 blank 1MB diskettes) ' ;AN000;
2236 DB ' ' ;AN000;
2237 DB ' STARTUP Starting DOS, ' ;AN000;
2238 DB ' DOS Utilities ' ;AN000;
2239 DB ' ' ;AN000;
2240 DB ' WORKING Other DOS Utilities '
2241 DB ' ' ;AN000;
2242 DB ' SHELL Starting SHELL, ' ;AN000;
2243 DB ' More DOS Utilities ' ;AN000;
2244 DB ' (Optional) ' ;AN000;
2245 DB ' ' ;AN000;
2246 DB 'Label the blank diskettes as shown, and ' ;AN000;
2247 DB 'then follow the display prompts. ' ;AN000;
2248PANEL95_L EQU ($-PANEL95)/PANEL95_W ;AN000;
2249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2250;
2251;
2252;
2253;
2254; <R1> The quotation marks have to left-right justified
2255;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2256; |---------1---------2---------3---------4---------5---------6---------7---------8
2257
2258PANEL96 LABEL BYTE ;AN000;
2259 DB 'SELECT will create the following diskette:' ;AN000;
2260PANEL96_W EQU ($-PANEL96) ;AN000;
2261 DB ' (You will need 1 blank 2MB diskette) ' ;AC052;SEH ;AN000;
2262 DB ' ' ;AN000;
2263 DB ' STARTUP Starting DOS and SHELL, ' ;AC000;JW
2264 DB ' DOS Utilities ' ;AN000;
2265 DB ' ' ;AN000;
2266 DB 'Label the blank diskette as shown, and ' ;AN000;
2267 DB 'then follow the display prompts. ' ;AN000;
2268PANEL96_L EQU ($-PANEL96)/PANEL96_W ;AN000;
2269
2270;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2271;
2272;
2273;
2274;
2275; <R1> The quotation marks have to left-right justified
2276; <R5> The width of the entry must not exceed the RULER provided.
2277;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2278; |---------1---------2---------3---------4---------5-|
2279
2280PANEL97 LABEL BYTE ;AN060;
2281 DB 'Incorrect diskette ';AC060;
2282PANEL97_W EQU ($-PANEL97) ;AN060;
2283 DB ' ';AN060;
2284 DB 'Insert the INSTALL diskette in drive A. Press';AN060;
2285 DB 'Enter to continue or F3 to exit SELECT. ';AN060;
2286PANEL97_L EQU ($-PANEL97)/PANEL97_W ;AN060;
2287
2288;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2289;
2290;
2291;
2292;
2293; <R1> The quotation marks have to left-right justified
2294;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2295; |---------1---------2---------3---------4---------5---------6---------7---------8
2296
2297PANEL98 LABEL BYTE
2298 DB ' MS-DOS Shell Option '
2299PANEL98_W EQU ($-PANEL98)
2300 DB ' '
2301 DB ' '
2302 DB 'SELECT can install the MS-DOS Shell on the system '
2303 DB 'being set up. Indicate whether you want to do this.'
2304 DB ' '
2305 DB ' '
2306 DB 'Choose an option: '
2307PANEL98_L EQU ($-PANEL98)/PANEL98_W
2308;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2309;
2310;
2311;
2312;
2313; <R1> The quotation marks have to left-right justified
2314;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2315; |---------1---------2---------3---------4---------5---------6---------7---------8
2316
2317PANEL99 LABEL BYTE ;AN000;
2318 DB 'Insert WORKING diskette in drive A' ;AC000;JW
2319PANEL99_W EQU ($-PANEL99) ;AN000;
2320PANEL99_L EQU ($-PANEL99)/PANEL99_W ;AN000;
2321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2322;
2323;
2324;
2325;
2326; <R1> The quotation marks have to left-right justified
2327;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2328; |---------1---------2---------3---------4---------5---------6---------7---------8
2329
2330PANEL100 LABEL BYTE ;AN000;
2331 DB 'Insert MS-DOS SHELL diskette in drive A' ;AC000;JW
2332PANEL100_W EQU ($-PANEL100) ;AN000;
2333PANEL100_L EQU ($-PANEL100)/PANEL100_W ;AN000;
2334;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2335;
2336;
2337;
2338;
2339; <R1> The quotation marks have to left-right justified
2340;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2341; |---------1---------2---------3---------4---------5---------6---------7---------8
2342
2343PANEL101 LABEL BYTE
2344 DB 'Insert MS-DOS SHELL diskette in drive A'
2345PANEL101_W EQU ($-PANEL101)
2346 DB ' '
2347 DB 'Insert SHELL diskette in drive B '
2348PANEL101_L EQU ($-PANEL101)/PANEL101_W
2349;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2350;
2351;
2352;
2353;
2354; <R1> The quotation marks have to left-right justified
2355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2356; |---------1---------2---------3---------4---------5---------6---------7---------8
2357
2358PANEL102 LABEL BYTE ;AN000;
2359 DB 'Insert OPERATING diskette in drive A' ;AC000;JW
2360PANEL102_W EQU ($-PANEL102) ;AN000;
2361 DB ' ' ;AC000;JW
2362 DB 'Insert WORKING diskette in drive B ' ;AC000;JW
2363PANEL102_L EQU ($-PANEL102)/PANEL102_W ;AN000;
2364;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2365;
2366;
2367;
2368;
2369; <R1> The quotation marks have to left-right justified
2370;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2371; |---------1---------2---------3---------4---------5---------6---------7---------8
2372
2373PANEL103 LABEL BYTE ;AN000;
2374 DB 'Insert WORKING 3 diskette in drive A' ;AC000;JW
2375PANEL103_W EQU ($-PANEL103) ;AN000;
2376PANEL103_L EQU ($-PANEL103)/PANEL103_W ;AN000;
2377
2378
2379
2380ENDIF
2381 \ 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 @@
125
2P IBM 3852 Ink Jet Printer
3
4P IBM 4201 Proprinter
5CDP 4201,437
6CPP 4201.CPI
7GP GRAPHICS
8
9P IBM 4201 Proprinter II
10CDP 4201,437
11CPP 4201.CPI
12GP GRAPHICS
13
14P IBM 4202 Proprinter XL
15CDP 4201,437
16CPP 4201.CPI
17GP GRAPHICS
18
19P IBM 4207 Proprinter X24
20CDP 4208,437
21CPP 4208.CPI
22GP GRAPHICS
23
24P IBM 4208 Proprinter XL24
25CDP 4208,437
26CPP 4208.CPI
27GP GRAPHICS
28
29P IBM 5152 Graphics Printer Model 2
30GP GRAPHICS
31
32P IBM 5182 Color Printer
33GP COLOR1
34
35P IBM 5201 Quietwriter Printer
36
37P IBM 5201 Quietwriter Printer Model 2
38GP GRAPHICS
39
40P IBM 5202 Quietwriter III Printer
41CDP 5202,437
42CPP 5202.CPI
43GP GRAPHICS
44
45P IBM 5204 Quickwriter Printer
46CDP 5202,437
47CPP 5202.CPI
48GP GRAPHICS
49
50P IBM 5216 Wheelprinter
51
52P IBM 5223 Wheelprinter E
53
54P Other IBM Parallel Printer
55
56P Other Parallel Printer
57
58S IBM 3812 Pageprinter
59SP BAUD=96 PARITY=E DATA=8 STOP=1 RETRY=P
60GP GRAPHICS
61
62S IBM 4201 Proprinter (Serial)
63SP BAUD=96 PARITY=E DATA=8 STOP=1
64GP GRAPHICS
65
66S IBM 4201 Proprinter II (Serial)
67SP BAUD=96 PARITY=E DATA=8 STOP=1
68GP GRAPHICS
69
70S IBM 4202 Proprinter XL (Serial)
71SP BAUD=96 PARITY=E DATA=8 STOP=1
72GP GRAPHICS
73
74S IBM 4207 Proprinter X24 (Serial)
75SP BAUD=96 PARITY=E DATA=8 STOP=1
76GP GRAPHICS
77
78S IBM 4208 Proprinter XL24 (Serial)
79SP BAUD=96 PARITY=E DATA=8 STOP=1
80GP GRAPHICS
81
82S IBM 5204 Quickwriter Printer (Serial)
83SP BAUD=96 PARITY=E DATA=8 STOP=1
84GP GRAPHICS
85
86S Other IBM Serial Printer
87
88S 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 @@
1.TOPICLEN. 53
2.MAXNUMHLP. 57
3.HELPID. 1
4.TOPICTEXT.Key Assignments Help
5.HELPTEXT. Key Assignments Help&
6&
7Enter Places into memory the information&
8 you select or type.&
9&
10Esc Cancels the current screen and returns&
11 you to the previous screen. Information&
12 on the current screen is not saved.&
13&
14Tab Moves the selection cursor to the next&
15 choice or entry on a screen.&
16&
17 Moves the cursor in the direction of the&
18 arrow.&
19&
20F1 Displays help information.&
21&
22F3 Exits the SELECT program. The information&
23 you selected or typed is not saved.&
24
25&
26F9 Displays the key assignments and their&
27 functions.&
28.HELPTEND.
29
30
31.HELPID. 2
32.TOPICTEXT.Help Facility Help
33.HELPTEXT. @ Help Facility Help
34&
35Help is available whenever F1=Help appears on a screen.
36To get help for an item, highlight the item and press F1.&
37&
38From a help panel you can press the F9 key to view the
39key assignments.@
40.HELPTEND.
41
42
43.HELPID. 3
44.TOPICTEXT.Minimum DOS Function Help
45.HELPTEXT. @ Minimum DOS Function Help
46&
47Select this option to allocate more memory for
48running programs than for using DOS
49functions. This option is useful if you
50use a large number of files or you calculate large
51amounts of data. Database and spreadsheet programs,
52for example, require large amounts of memory.
53Select this option if your system has 256K of memory
54installed.@
55.HELPTEND.
56
57
58.HELPID. 4
59.TOPICTEXT.Balance DOS Function Help
60.HELPTEXT. @ Balance DOS Function Help
61&
62Select this option to balance the memory between the
63DOS functions and the programs you use.
64This option provides sufficient memory for programs
65such as word processors or text editors.
66Select this option if your system has 512K of memory installed.@
67.HELPTEND.
68
69
70.HELPID. 5
71.TOPICTEXT.Maximum DOS Function Help
72.HELPTEXT. @ Maximum DOS Function Help
73&
74Select this option if you want to allocate the
75maximum amount of memory for DOS functions.&
76Select this option if your system has more than
77512K of memory installed.@
78.HELPTEND.
79
80
81.HELPID. 6
82.TOPICTEXT.Accept Country and Keyboard Help
83.HELPTEXT. @ Accept Country and Keyboard Help
84&
85Select this option to accept the country and
86keyboard shown. The SELECT program assigns
87the appropriate monetary symbol, decimal
88separator, date and time format, and keyboard
89layout.@
90.HELPTEND.
91
92
93.HELPID. 7
94.TOPICTEXT.Specify Country and Keyboard Help
95.HELPTEXT. @ Specify Country and Keyboard Help
96&
97Select this option to choose a different country
98and keyboard layout.@
99.HELPTEND.
100
101
102.HELPID. 8
103.TOPICTEXT.Country Help
104.HELPTEXT. @ Country Help
105&
106Use the Up or Down arrow keys to select a country,
107then press Enter. The SELECT program assigns the
108appropriate monetary symbol, decimal separator,
109and date and time format for the country.@
110.HELPTEND.
111
112
113.HELPID. 9
114.TOPICTEXT.Keyboard Help
115.HELPTEXT. @ Keyboard Help
116&
117Use the Up or Down arrow keys to select a keyboard,
118then press Enter.&
119&
120Select "None" if you do not want to change the
121keyboard layout.&
122&
123The SELECT program assigns the appropriate keyboard
124layout.@
125.HELPTEND.
126
127
128.HELPID. 10
129.TOPICTEXT.Keyboard Layout Help
130.HELPTEXT. @ Keyboard Layout Help
131&
132The keyboard you selected has two versions.&
133&
134Use the Up or Down arrow key to select the
135keyboard version you want, then press Enter.@
136.HELPTEND.
137
138
139.HELPID. 11
140.TOPICTEXT.Installation Drive Help
141.HELPTEXT. Installation Drive Help
142&
143Use the Up or Down arrow key to select&
144the drive you want to install DOS on,&
145then press Enter.&
146&
147Option 1 installs DOS on a fixed disk,&
148drive C.&
149&
150Option 2 installs DOS on a diskette.&
151.HELPTEND.
152
153
154.HELPID. 12
155.TOPICTEXT.DOS Location Help
156.HELPTEXT. @ DOS Location Help
157&
158Accept or change the directory name shown.&
159&
160If you accept the directory name, DOS utilities
161are placed in the DOS directory.&
162&
163If you change the directory name, DOS utilities
164are placed in the directory you specify.
165The directory name can have up to eight characters.
166A backslash (\) must precede the directory name.&
167&
168Example : C:\MINE&
169&
170 C: specifies the drive and \MINE is&
171 the new directory name.&
172&
173You can specify a directory path. The directory path can
174have up to 40 characters. Use the backslash (\) to separate
175the directory names in a path.
176&
177Example: C:\DOS\DIR1\DIR2&
178&
179 C: specifies the drive and&
180 \DOS\DIR1\DIR2 is the directory path.@
181.HELPTEND.
182
183
184.HELPID. 13
185.TOPICTEXT.Printer Selection Help
186.HELPTEXT. @ Printer Selection Help
187&
188Type in a number from 0 through 7 to show the number of
189printers attached to your system.@
190.HELPTEND.
191
192
193.HELPID. 14
194.TOPICTEXT.Printer Type Help
195.HELPTEXT. @ Printer Type Help
196&
197Use the Up or Down arrow keys to select the name of your
198printer, then press Enter. If the printer attached to your
199system is not listed, select "Other" to identify the type
200of printer you are using. When more than one printer is
201attached, this list reappears for each printer.
202If you do not know the name or type of printer you have,
203check the printer label or the manual that came with the
204printer.@
205.HELPTEND.
206
207
208
209.HELPID. 15
210.TOPICTEXT.Parallel Printer Port Help
211.HELPTEXT. @ Parallel Printer Port Help
212&
213If you have one printer, press Enter to accept LPT1.&
214&
215If you have two printers, select LPT1 for your primary
216printer and LPT2 for your secondary printer. If you
217have three printers, select LPT3 for the third one.&
218&
219You can assign only one printer to each port.@
220.HELPTEND.
221
222
223.HELPID. 16
224.TOPICTEXT.Serial Printer Port Help
225.HELPTEXT. @ Serial Printer Port Help
226&
227If you have one printer, press Enter to accept COM1.&
228&
229If you have two printers, select COM1 for your primary
230printer and COM2 for you secondary printer. If you
231have three printers, select COM3 for the third one.
232If you have four printers, select COM4 for the fourth
233printer.&
234&
235You can assign only one printer to each port.&
236&
237Note: Other devices, such as modems, lightpens, or a
238mouse, attach to serial ports. If you have one of these
239devices, refer to the manual that came with the device
240to determine which serial port to use.&
241&
242If you refer to your serial printer by a parallel port
243name, press the Tab key to move to the options at the
244bottom of the screen.@
245.HELPTEND.
246
247
248.HELPID. 17
249.TOPICTEXT.Serial Printer/Parallel Port Help
250.HELPTEXT. @ Serial Printer/Parallel Port Help
251&
252This option allows you to refer to your serial printer
253as a parallel printer. This option is useful if your
254programs require that printer output be sent to a
255parallel port.&
256&
257Select "None" if you use your printer only as a serial
258printer.&
259&
260If you have one serial printer that you use as a
261parallel printer select LPT1.&
262&
263If you have more than one serial printer that you
264use as a parallel printer, select LPT 1 for your
265primary printer, LPT2 for your secondary printer,
266and LPT3 for your third printer.&
267&
268Do not select a parallel port for a serial printer if
269that port has a parallel printer attached.@
270.HELPTEND.
271
272
273.HELPID. 18
274.TOPICTEXT.Update DOS Files Help
275.HELPTEXT. @ Update DOS Files Help
276&
277Select this option to replace previous DOS files. This
278option replaces previous DOS files in the directory specified,
279and installs the read-only system files in the root directory. &
280&
281This option does not replace DOS files in subdirectories
282other than that specified.@
283.HELPTEND.
284
285
286.HELPID. 19
287.TOPICTEXT.Update DOS Help
288.HELPTEXT. @ Update DOS Help
289&
290Select this option to replace previous DOS files in the directory
291you specify on drive C. This option is useful if you want
292DOS 4.0 to co-exist with a previous version of DOS or
293another operating system, or when your system is a
294network server.&
295&
296This option does not replace system files on an existing
297system or DOS files in subdirectories across multiple
298logical drives.&
299&
300For further information on replacing system files, refer to
301the "MS-DOS 4.0 Users Guide" book.@
302.HELPTEND.
303
304
305
306.HELPID. 20
307.TOPICTEXT.Continue Installation Help
308.HELPTEXT. @ Continue Installation Help
309&
310Select this option to continue installing DOS without
311reviewing the selections you made for your CONFIG.SYS
312and AUTOEXEC.BAT files.@
313.HELPTEND.
314
315
316.HELPID. 21
317.TOPICTEXT.Change Options Help
318.HELPTEXT. @ Change Options Help
319&
320Select this option to review, change, or add values to
321your CONFIG.SYS and AUTOEXEC.BAT files.&
322&
323Depending on the hardware installed on your system, you
324can change or add options, such as expanded memory
325support, FASTOPEN, and SHARE.&
326&
327When you change a selection from NO to YES, it increases
328the amount of memory DOS uses.&
329&
330Refer to the "MS-DOS 4.0 Users Guide" book for additional
331information.@
332.HELPTEND.
333
334
335.HELPID. 22
336.TOPICTEXT.Code Page Switching Help
337.HELPTEXT. @ Code Page Switching Help
338&
339Accept or change the choice shown.&
340&
341If you selected Denmark, Portugal, Norway,
342or French-speaking Canada on a previous
343display, set this choice to Yes.
344&
345Code Page Switching allows you
346to change from one character set to
347another so you can display or
348print characters in different
349languages.@
350.HELPTEND.
351
352
353.HELPID. 23
354.TOPICTEXT.Expanded Memory Support Help
355.HELPTEXT. @ Expanded Memory Support Help
356&
357Accept or change the choice shown.&
358&
359DOS uses expanded memory to hold part
360of the operating system. This provides
361more memory for running programs that
362require expanded memory support.&
363&
364Expanded Memory is available on the IBM
365Personal System/2 (registered trademark of International
366Business Machines) and on other IBM
367PC/AT family and compatible computers with expanded
368memory cards.@
369.HELPTEND.
370
371
372.HELPID. 24
373.TOPICTEXT.Extended Display Support Help
374.HELPTEXT. @ Extended Display Support Help
375&
376Accept or change the choice shown.&
377&
378Extended display support (ANSI.SYS)
379replaces the standard
380input and output support on your
381system. ANSI.SYS provides extended
382features, such as redefining keys,
383manipulating the cursor, and displaying
384color attributes.@
385.HELPTEND.
386
387
388.HELPID. 25
389.TOPICTEXT.FASTOPEN Support Help
390.HELPTEXT. @ FASTOPEN Support Help
391&
392Accept or change the choice shown.&
393&
394FASTOPEN allows quick access to
395recently opened files.@
396.HELPTEND.
397
398
399.HELPID. 26
400.TOPICTEXT.GRAFTABL Display Support Help
401.HELPTEXT. @ GRAFTABL Display Support Help
402&
403Accept or change the choice shown.&
404&
405GRAFTABL (Graphics Table) allows you
406to display additional characters from
407the National Language Code Page when
408you use a color/graphics display adapter in
409graphics mode.@
410.HELPTEND.
411
412
413
414.HELPID. 27
415.TOPICTEXT.GRAPHICS Support Help
416.HELPTEXT. @ GRAPHICS PrtSc Support Help
417&
418Accept or change the choice shown.&
419&
420GRAPHICS allows you to print the
421contents of a graphics display.
422This option prints graphics, such as
423drawings, graphs, or charts.
424Without GRAPHICS, you can print
425text characters only.@
426.HELPTEND.
427
428.HELPID. 28
429.TOPICTEXT.SHARE Support Help
430.HELPTEXT. @ DOS SHARE Support Help
431&
432Accept or change the choice shown.&
433&
434SHARE provides support for file sharing and
435diskette change protection.@
436.HELPTEND.
437
438
439.HELPID. 29
440.TOPICTEXT.SHELL Support Help
441.HELPTEXT. @ DOS SHELL Support Help
442&
443Accept or change the choice shown.&
444&
445The Shell program allows you to make selections
446from menus instead of typing DOS commands.&
447&
448For additional information on the Shell program,
449refer to the "MS-DOS 4.0 Users Guide"
450book.@
451.HELPTEND.
452
453
454.HELPID. 30
455.TOPICTEXT.Virtual Disk (RAMDRIVE) Support Help
456.HELPTEXT. @ Virtual Disk Support Help
457&
458Accept or change the choice shown.&
459&
460RAMDRIVE allows you to use part of your
461system memory to simulate a fixed disk
462drive. A virtual drive permits quick
463access to files, but it is temporary,
464and data stored on the virtual drive
465is lost when you turn off the system.@
466.HELPTEND.
467
468
469.HELPID. 31
470.TOPICTEXT.DOS PATH Help
471.HELPTEXT. @ DOS PATH Help
472&
473Accept or change the choice shown.&
474&
475DOS uses a path to search for files that
476are not located in the current directory.&
477DOS PATH searches only for files with the extensions
478.COM, .EXE, or .BAT. The (;) separates the pathnames.&
479&
480You can type up to 120 characters in this field.
481If your typing scrolls out of view, use the right
482or left arrow keys to see it.&
483&
484Example: C:\DOS;C:\DIR1;C:\DIR2&
485&
486 PATH searches and locates files&
487 in the DOS, DIR1, and DIR2&
488 directories on drive C.@
489.HELPTEND.
490
491
492.HELPID. 32
493.TOPICTEXT.APPEND Path Help
494.HELPTEXT. @ APPEND Path Help
495&
496Accept or change the choice shown.&
497&
498DOS uses a path to search for files that are
499not in the current directory. APPEND searches
500only for data files with extensions other than .COM,
501.EXE, or .BAT. The (;) separates the pathnames.&
502&
503You can type up to 120 characters in this field.
504If your typing scrolls out of view, use the right
505or left arrow keys to see it.&
506&
507Example: C:\DOS;C:\DIR1;C:\DIR2&
508&
509 APPEND searches and locates files&
510 in the DOS, DIR1, and DIR2&
511 directories on drive C.@
512.HELPTEND.
513
514
515.HELPID. 33
516.TOPICTEXT.PROMPT Help
517.HELPTEXT. @ PROMPT Help
518&
519Accept or change the choice shown.&
520&
521Use the following list as a guide. You can type
522up to 120 characters in this field. If your
523typing scrolls out of view, use the right or
524left arrow keys to see it.&
525&
526The default DOS prompt is C:\>.&
527&
528PROMPT entries :&
529&
530$B for the : character&
531&
532$D for the current date&
533&
534$E for the Esc character&
535&
536$G for the > character&
537&
538$H for backspace; the previous&
539 character is erased&
540&
541$N for the current drive&
542&
543$P for the current directory&
544&
545$Q for the = character&
546&
547$T for the current time&
548&
549$V for the DOS version&
550&
551$1 for the < character&
552&
553$$ for the $ character&
554&
555$_ for advance a line&
556&
557Example: C>prompt HELLO&
558&
559 Sets the DOS prompt to&
560 the message HELLO.@
561.HELPTEND.
562
563
564.HELPID. 34
565.TOPICTEXT.SHELL Parameters Help
566.HELPTEXT. @ SHELL Parameters Help
567&
568Accept or change the choices shown.&
569&
570Use the following list as a guide. You can type up
571to 115 characters in this field. If your typing
572scrolls out of view, use the right or left arrow
573keys to see it.&
574&
575The Shell program uses menus that allow you to make
576selections instead of typing DOS commands.&
577&
578SHELL entries:&
579&
580 /B:xxx Specifies a buffer size&
581&
582 /CLR:SHELL.CLR&
583 Identifies the filename for the Shell&
584 color setup. SHELL.CLR is the default.&
585&
586 /CO1&
587 Displays the Shell in 16-color,&
588 high-resolution 640 x 350 graphics&
589&
590 /CO2&
591 Displays the Shell in 2-color,&
592 high resolution graphics&
593&
594 /CO3&
595 Displays the Shell in 16-color,&
596 high-resolution 640 x 480 graphics&
597&
598 /COLOR&
599 Activates the "Change colors" option&
600&
601 /COM2&
602 Identifies a serial mouse installed on the&
603 second serial port (installation default&
604 is COM1)&
605&
606 /DATE&
607 Displays the date and time&
608&
609 /DOS&
610 Activates the File System in the Shell&
611&
612 /EXIT&
613 Activates the "Exit Shell" option&
614&
615 /LF&
616 Enables a mouse for left-handed use&
617&
618 /MAINT&
619 Activates the ability to do&
620 maintenance in Start Programs&
621&
622 /MENU&
623 Activates the Start Programs in the&
624 Shell&
625&
626 /MEU:SHELL.MEU&
627 Identifies the filename of the Main Group&
628 structure for the Start Programs&
629&
630 /MOS:PCIBMDRV.MOS&
631 Identifies the filename of the IBM mouse&
632 driver&
633&
634 /MOS:PCMSDRV.MOS&
635 Identifies the filename of the Microsoft&
636 serial mouse driver&
637&
638 /MOS:PCMSPDRV.MOS&
639 Identifies the filename of the Microsoft&
640 parallel mouse driver&
641&
642 /MUL&
643 Provides multiple directory and file&
644 buffers in the File System&
645&
646 /PROMPT&
647 Activates the Shell command prompt&
648&
649 /SND&
650 Enables the speaker for sound&
651&
652 /SWAP&
653 Activates saving (swapping) files and&
654 directories to a disk file while&
655 performing tasks at the Shell command&
656 prompt&
657&
658 /TEXT&
659 Displays the Shell in text mode&
660&
661 /TRAN&
662 Operates the Shell in transient mode@
663.HELPTEND.
664
665
666.HELPID. 35
667.TOPICTEXT.FASTOPEN Parameters Help
668.HELPTEXT. @ FASTOPEN Parameters Help
669&
670Accept or change the choice shown.&
671&
672Use the following list as a guide. You can type
673up to 60 characters in this field. If your typing
674scrolls out of view, use the left or right arrow
675keys to see it.&
676&
677FASTOPEN allows quick access to recently
678opened files.&
679&
680FASTOPEN entries:&
681&
682C:&
683 Specifies the drive&
684&
685N = 10 to 999&
686 Specifies the number of directories or&
687 file entry buffers allocated in memory&
688&
689M = 1 to 999&
690 Specifies the number of continuous&
691 space buffers allocated in memory&
692&
693/X&
694 Used when expanded memory support is&
695 available. When using the /X option&
696 the value of "N" or "M" should not&
697 exceed 150.&
698&
699Example: C:=(50,25)&
700&
701 Specifies FASTOPEN on drive C with&
702 50 file and directory entry buffers and&
703 25 continuous space buffers.@
704.HELPTEND.
705
706
707.HELPID. 36
708.TOPICTEXT.SHARE Parameters Help
709.HELPTEXT. @ SHARE Parameters Help
710&
711Accept or change the choice shown.&&
712Use the following list as a guide.&
713&
714SHARE provides support for file sharing and
715diskette change protection.&
716&
717SHARE Parameters:&
718&
719 /F: Allocates file space in bytes for the&
720 area used to record information for file&
721 sharing&
722&
723 /L: Allocates space for the number of locks&
724 you want. Lock denies read/write access&
725 to regions of a file.&
726&
727Example: /F:2048 /L:20&
728&
729 Specifies a filespace of 2048 bytes and&
730 20 locks.@
731.HELPTEND.
732
733
734.HELPID. 37
735.TOPICTEXT.GRAPHICS Parameters Help
736.HELPTEXT. @ GRAPHICS Parameters Help
737&
738Accept or change the choice shown.&
739&
740Use the following list as a guide. You can type
741up to 80 characters in this field. If your typing
742scrolls out of view, use the left or right arrow
743keys to see it.&
744&
745GRAPHICS prints the contents of a graphics display.
746This is useful, if you print charts, tables, or
747drawings.&
748&
749GRAPHICS Parameters:&
750&
751 COLOR1&
752 IBM 5182 Color Printer with black ribbon&
753&
754 COLOR4&
755 IBM 5182 Color Printer with red, green,&
756 blue, and black ribbon&
757&
758 COLOR8&
759 IBM 5182 Color Printer with black, cyan,&
760 magenta, and yellow ribbon&
761&
762 GRAPHICS&
763 IBM 5152 Graphics Printer&
764 IBM Proprinters&
765 IBM 3812 Pageprinter&
766 IBM 5202 Quietwriter (registered&
767 trademark of International Business&
768 Machines) III Printer&
769 IBM 5204 Quickwriter (trademark of&
770 International Business Machines) Printer&
771&
772 GRAPHICSWIDE&
773 IBM 5152 Graphics Printer&
774 IBM Proprinters (both are set for wide&
775 paper)&
776&
777 THERMAL&
778 IBM 5140 Convertible Printer&
779&
780 /B&
781 Specifies background color printing for&
782 COLOR4 and COLOR8 printers&
783&
784 /LCD&
785 Prints data as it appears on a liquid&
786 crystal display&
787&
788 /R&
789 Prints black and white as it appears on&
790 the display&
791&
792Example: COLOR8 /B/R&
793&
794 Specifies black, white, and background&
795 color printing for the 5182 Color Printer.&
796&
797 /PB:ID&
798 Prints data using the print box size&
799 specified by the ID. The ID should match&
800 the first operand of a Printbox statement&
801 in the printer profile. You may use&
802 /PRINTBOX:ID in place of /PB:ID.&
803&
804Supported IDS:&
805&
806LCD&
807 Specifies the LCD printbox. When used&
808 with an LCD display, the data is printed&
809 as it appears on the LCD display.&
810 This entry has the same effect as /LCD.&
811&
812STD&
813 Specifies standard printbox, which is the&
814 default value.@
815.HELPTEND.
816
817
818.HELPID. 38
819.TOPICTEXT.XMAEM Parameters Help
820.HELPTEXT. @ XMAEM Parameters Help
821&
822Accept or change the choice shown. Type, in 16KB
823increments, the amount of memory you want to allocate.
824If you do not specify an amount, the system allocates
825all memory above 1MB.&
826&
827XMAEM enables your system to access the extended memory
828available as expanded memory.&
829&
830Example: DEVICE=XMAEM.SYS 64&
831&
832 Allocates 1 megabyte of extended memory.&
833&
834For additional information, refer
835to the "MS-DOS 4.0 Users Guide" book.@
836.HELPTEND.
837
838
839.HELPID. 39
840.TOPICTEXT.XMA2EMS Parameters Help
841.HELPTEXT. @ XMA2EMS Parameters Help
842&
843Accept or change the choice shown. If you change
844the segment address values, you must
845define unused 64KB contiguous space for the FRAME and
846unused 16KB contiguous space for the Pxxx pages.&
847&
848Example: FRAME=D000 P254=C000 P255=C400&
849&
850Note: These values are sample defaults only and&
851 may not reflect actual free segments in your&
852 system.&
853&
854For additional information, refer to the "MS-DOS 4.0
855Users Guide" book.@
856.HELPTEND.
857
858
859.HELPID. 40
860.TOPICTEXT.RAMDRIVE Parameters Help
861.HELPTEXT. @ RAMDRIVE Parameters Help
862&
863Accept or change the choice shown. Use the
864following list as a guide.&
865&
866RAMDRIVE allows you to use part of the system
867memory to simulate a fixed disk drive. A
868virtual drive permits quick access to files,
869but it is temporary, and data stored on a
870virtual drive is lost when you turn off
871the system.&
872&
873RAMDRIVE Parameters:&
874&
875 Buffer:&
876 Buffer size in kilobytes;&
877 16KB is the minimum buffer size&
878&
879 Sector:&
880 Sector size in bytes;&
881 128, 256, 512, or 1024 bytes&
882&
883 Directory entries:&
884 Number of root directory entries;&
885 3 to 1024&
886&
887 /E&
888 Used when extended memory support&
889 is available&
890&
891 /A&
892 Used when expanded memory support&
893 is available&
894&
895Example: 160 512 64&
896&
897 Specifies the size of the buffers,&
898 sectors, and the number of directories.@
899.HELPTEND.
900
901
902.HELPID. 41
903.TOPICTEXT.BREAK Help
904.HELPTEXT. BREAK (Control Break) Help
905&
906Accept or change the choice shown.&
907&
908ON: DOS always checks for a Ctrl+Break key&
909 sequence and permits input or output to&
910 a device to be canceled.&
911&
912OFF: DOS checks for a Ctrl+Break key sequence only&
913 during standard input, output, print, and&
914 auxiliary device operations.&
915.HELPTEND.
916
917
918.HELPID. 42
919.TOPICTEXT.BUFFERS Help
920.HELPTEXT. @ BUFFERS Help
921&
922Accept or change the choice shown. Use the
923following list as a guide.&
924&
925The value shown specifies the number of disk buffers
926DOS allocates in memory. If a second value is shown,
927this value specifies the number of sectors the system
928can read or write when processing an input or output
929operation.&
930&
931If you do not specify a buffer, DOS sets a value
932based on the amount of system memory.&
933&
934BUFFERS Values:&
935&
9361 to 99 Number of buffers the system uses&
937&
9381 to 8 Number of sectors the system can&
939 read or write in processing an input&
940 or output operation@
941.HELPTEND.
942
943
944.HELPID. 43
945.TOPICTEXT.APPEND Parameter Help
946.HELPTEXT. @ APPEND Parameter Help
947&
948Accept or change the choice shown. Use the
949following list as a guide.&
950&
951APPEND locates data files outside of the current
952directory that have extensions other then .COM,
953.EXE, or .BAT.&
954&
955APPEND Parameters:&
956&
957/X:ON or /X&
958 Tells APPEND to search and process&
959 executable files&
960&
961 /X:OFF (default value)&
962 Tells APPEND not to search and&
963 process executable files.&
964&
965/PATH:ON (default value)&
966 Tells APPEND to search for files that have&
967 a drive or a path specified&
968&
969/PATH:OFF&
970 Tells APPEND not to search for files that&
971 have a drive or a path specified&
972&
973/E&
974 Keeps the APPEND paths in the DOS&
975 environment. APPEND searches the&
976 environment on each call to find the path.&
977&
978;&
979 Separates the APPEND paths, or cancels the&
980 APPEND paths if the semi-colon is the only&
981 parameter used.&
982&
983Example: /E /X&
984 APPEND is in the DOS environment&
985 where it searches and processes&
986 executable files with extensions of&
987 .COM, .EXE, or .BAT.@
988.HELPTEND.
989
990
991.HELPID. 44
992.TOPICTEXT.FCBS Help
993.HELPTEXT. @ FCBS Help
994&
995Accept or change the choice shown. Use the
996following list as a guide.&
997&
998FCBS allows you to specify the number of file
999control blocks that DOS can open concurrently.&
1000&
1001FCBS Values:&
1002&
1003 1 to 255 Number of file control blocks&
1004&
1005 0 to 255 Number of protected file control blocks&
1006&
1007Example: 20,10&
1008&
1009 Specifies 20 FCBS open and 10 protected&
1010 from being automatically closed by DOS.@
1011.HELPTEND.
1012
1013
1014.HELPID. 45
1015.TOPICTEXT.FILES Help
1016.HELPTEXT. @ FILES Help
1017&
1018Accept or change the choice shown.&
1019&
1020If you do not specify a value, DOS uses a value of 8.&
1021&
1022The value specifies the number of files that&
1023can be open at any one time. The value can be&
1024from 8 through 255.@
1025.HELPTEND.
1026
1027
1028.HELPID. 46
1029.TOPICTEXT.LASTDRIVE Help
1030.HELPTEXT. @ LASTDRIVE Help
1031&
1032Accept or change the choice shown.&
1033&
1034If you do not specify a value, DOS uses a value of E.&
1035&
1036This value identifies the last drive installed on
1037your system. The value can be a letter from A through
1038Z, and it must represent the last valid drive letter
1039that DOS can accept.@
1040.HELPTEND.
1041
1042
1043.HELPID. 47
1044.TOPICTEXT.STACKS Help
1045.HELPTEXT. @ STACKS Help
1046&
1047Accept or change the choice shown.&
1048&
1049This value (if any) specifies stack resources.
1050Use the following list as a guide. You must
1051specify a number for each frame and a size,
1052in bytes, for each frame.&
1053&
1054STACKS Values:&
1055&
10568 to 64 Number of stack frames&
1057&
105832 to 512 Size of each stack frame&
1059&
1060Example: 8 128&
1061&
1062 Specifies 8 stack frames of 128 bytes&
1063 each.@
1064.HELPTEND.
1065
1066
1067.HELPID. 48
1068.TOPICTEXT.VERIFY Help
1069.HELPTEXT. @ VERIFY Help
1070&
1071Accept or change the choice shown.&
1072&
1073VERIFY confirms that data is correctly
1074written to a disk.&
1075&
1076ON: DOS confirms the data can be read&
1077 without error.&
1078&
1079OFF: DOS does not verify the data.@
1080.HELPTEND.
1081
1082
1083.HELPID. 49
1084.TOPICTEXT.Use SELECT Partition Sizes Help
1085.HELPTEXT. @ Use SELECT Partition Sizes Help
1086&
1087Select this option to partition your fixed
1088disk into one partition.&
1089&
1090Note: If you have a Personal System/2 with a&
1091 partition greater than 32MB and want to&
1092 install a keyboard password, refer to the&
1093 "MS-DOS 4.0 Users Guide" book for&
1094 additional information.@
1095.HELPTEND.
1096
1097
1098.HELPID. 50
1099.TOPICTEXT.Define Your Own Partitions Sizes Help
1100.HELPTEXT. @ Define Your Own Partitions Sizes Help
1101&
1102Select this option if you want to use FDISK to partition
1103your fixed disk.&
1104&
1105Note: If you have a Personal System/2 with a&
1106 partition greater than 32MB and want to&
1107 install a keyboard password, refer to the&
1108 "MS-DOS 4.0 Users Guide" book for&
1109 additional information.@
1110.HELPTEND.
1111
1112
1113.HELPID. 51
1114.TOPICTEXT.Leave Disk Unchanged Help
1115.HELPTEXT. @ Leave Disk Unchanged Help
1116&
1117Select this option if you do not want to change
1118the non-allocated partition space on your fixed disk.@
1119.HELPTEND.
1120
1121
1122.HELPID. 52
1123.TOPICTEXT.Define Your Own Sizes Help
1124.HELPTEXT. @ Define Your Own Sizes Help
1125&
1126Select this option if you want to partition the non-allocated
1127space on your fixed disk. Refer to the "MS-DOS 4.0 Users
1128Guide" book for information on using FDISK.@
1129.HELPTEND.
1130
1131.HELPID. 53
1132.TOPICTEXT.Date and Time Help
1133.HELPTEXT. @ Date and Time Help
1134&
1135Type the date and time in the fields provided. The system clock
1136keeps an accurate record of the date and time.@
1137.HELPTEND.
1138
1139
1140.HELPID. 54
1141.TOPICTEXT.Format Fixed Disk Help
1142.HELPTEXT. @ Format Fixed Disk Help
1143&
1144Select this option to format your fixed disk.
1145A partition must be formatted before data can
1146be placed on it.&
1147&
1148Warning :
1149If your fixed disk is already formatted, this option will
1150reformat the disk and destroy all information on
1151the disk. Refer to the "MS-DOS 4.0 Users Guide"
1152book for additional information.@
1153.HELPTEND.
1154
1155
1156.HELPID. 55
1157.TOPICTEXT.Do Not Format Fixed Disk Help
1158.HELPTEXT. @ Do Not Format Fixed Disk Help
1159&
1160Select this option if you do not want to format
1161your fixed disk.@
1162.HELPTEND.
1163
1164
1165.HELPID. 56
1166.TOPICTEXT.Install the MS-DOS Shell Help
1167.HELPTEXT. @ Install the MS-DOS Shell Help
1168&
1169Select this option if you want the MS-DOS Shell
1170to be installed by SELECT onto the target system.&
1171&
1172The MS-DOS Shell lets you choose options from
1173menus instead of typing DOS commands.@
1174.HELPTEND.
1175
1176
1177.HELPID. 57
1178.TOPICTEXT.Do not install the MS-DOS Shell Help
1179.HELPTEXT. @ Do not install the MS-DOS Shell Help
1180&
1181Select this option if you do not want the MS-DOS
1182Shell to be installed by SELECT onto the target
1183system.@
1184.HELPTEND.
1185 \ 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 @@
1PAGE 60,132 ;AN000;
2NAME SELECT ;AN000;
3TITLE VARIABLES - DOS - SELECT.EXE ;AN000;
4SUBTTL var.asm ;AN000;
5.ALPHA ;AN000;
6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7;
8; VAR.ASM: Copyright 1988 Microsoft
9;
10; DATE: August 8/87
11;
12; COMMENTS: Assemble with MASM 3.0 (using the /A option)
13;
14; Module contains variables used by SELECT.
15;
16; CHANGE HISTORY:
17;
18;
19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
20 ;
21 INCLUDE SYSMSG.INC ;AN000;
22 MSG_UTILNAME <SELECT> ;AN000;
23 ;
24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
25;
26;
27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
28DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
29 INCLUDE VARSTRUC.INC ;AN000;
30 INCLUDE SEL_FILE.INC ;AN000;
31 ;
32 PUBLIC E_ENTER,E_TAB,E_ESCAPE ;AN000;
33 ;
34ESCAPE EQU 27 ;AN000;
35ENTER EQU 13 ;AN000;
36TAB EQU 9 ;AN000;
37F1 EQU 59 ;AN000;
38F3 EQU 61 ;AN000;
39SPACE EQU 32 ;AN000;
40 ;
41 PUBLIC DRIVE_A,DRIVE_B ;AN000;JW
42DRIVE_A EQU 0 ;AN000;JW
43DRIVE_B EQU 1 ;AN000;JW
44 ;
45MSG_SERVICES <MSGDATA> ;AN000;
46 ;
47 PUBLIC SUPPORT_STATUS ;AN000;
48SUPPORT_STATUS DW ? ;AN000;
49 DW ? ;AN000;
50 DW ? ;AN000;
51 DW ? ;AN000;
52 DW ? ;AN000;
53 DW ? ;AN000;
54 DW ? ;AN000;
55 DW ? ;AN000;
56 DW ? ;AN000;
57 DW ? ;AN000;
58 ;
59 PUBLIC I_USER_INDEX ;AN000;
60I_USER_INDEX DW ? ;AN000; Index value for scroll list
61 ;
62 PUBLIC N_USER_NUMERIC,MIN_INPUT_VAL,MAX_INPUT_VAL;AN000;
63N_USER_NUMERIC DW ? ;AN000; Input value for numeric fields
64MIN_INPUT_VAL DW ? ;AN000; Minimum value of input
65MAX_INPUT_VAL DW ? ;AN000; Maximum value of input
66 ;
67 PUBLIC S_USER_STRING,P_USER_STRING,M_USER_STRING;AN000;
68S_USER_STRING DW M_USER_STRING ;AN000; Length of string
69P_USER_STRING DB 120 DUP(?) ;AN000; Actual string
70M_USER_STRING EQU $ - P_USER_STRING ;AN000;
71 ;
72 PUBLIC N_VALID_KEYS ;AN000;
73N_VALID_KEYS DW ? ;AN000; Valid keys for current input
74 ;
75 PUBLIC N_USER_FUNC, E_ENTER, E_ESCAPE, E_TAB, E_F3, E_SPACE ;AN000;
76N_USER_FUNC DW ? ;AN000; Function type entered by user
77E_ENTER = ENTER ;AN000; Enter key
78E_ESCAPE = ESCAPE ;AN000; Escape key
79E_TAB = TAB ;AN000; Tab key
80E_F3 = F3*256 ;AN000; Function key 3 (F3,0)
81E_SPACE = SPACE ;AN000; ;
82 ;
83 PUBLIC FK_ENT_F3, FK_ENT_F3_LEN ;AN000;
84FK_ENT_F3 DB ENTER,0,F3 ;AN000; Enter, F3
85FK_ENT_F3_LEN EQU ($-FK_ENT_F3) ;AN000;
86 ;
87 PUBLIC FK_ENT_ESC, FK_ENT_ESC_LEN ;AN000;
88FK_ENT_ESC DB ENTER,ESCAPE ;AN000; Enter, Esc
89FK_ENT_ESC_LEN EQU ($-FK_ENT_ESC) ;AN000;
90 ;
91 PUBLIC FK_ENT_ESC_F3, FK_ENT_ESC_F3_LEN ;AN000;
92FK_ENT_ESC_F3 DB ENTER,ESCAPE,0,F3 ;AN000; Enter, Esc
93FK_ENT_ESC_F3_LEN EQU ($-FK_ENT_ESC_F3) ;AN000;
94 ;
95 PUBLIC FK_ENT, FK_ENT_LEN ;AN000;
96FK_ENT DB ENTER ;AN000; Enter
97FK_ENT_LEN EQU ($-FK_ENT) ;AN000;
98 ;
99 PUBLIC FK_TEXT, FK_TEXT_LEN ;AN000;
100FK_TEXT DB ENTER,ESCAPE,0,F1,0,F3 ;AN000; Enter, ESC, F1, F3
101FK_TEXT_LEN EQU ($-FK_TEXT) ;AN000;
102 ;
103 PUBLIC FK_SCROLL, FK_SCROLL_LEN ;AN000;
104FK_SCROLL DB ENTER,ESCAPE,0,F1,0,F3 ;AN000; Enter,ESC, F1, F3
105FK_SCROLL_LEN EQU ($-FK_SCROLL) ;AN000;
106 ;
107 PUBLIC FK_TAB, FK_TAB_LEN ;AN000;
108FK_TAB DB TAB,ENTER,ESCAPE,0,F1,0,F3 ;AN000;Enter, ESC, F1, F3, Tab
109FK_TAB_LEN EQU ($-FK_TAB) ;AN000;
110 ;
111 PUBLIC FK_REVIEW, FK_REVIEW_LEN ;AN000;
112FK_REVIEW DB ENTER,SPACE,ESCAPE,0,F1,0,F3 ;AN000;Enter,ESC,F1,F3,SPACE
113FK_REVIEW_LEN EQU ($-FK_REVIEW) ;AN000;
114 ;
115 PUBLIC FK_DATE, FK_DATE_LEN ;AN000;
116FK_DATE DB TAB,ENTER,0,F1 ;AN000; Enter, ESC, F1, Tab
117FK_DATE_LEN EQU ($-FK_DATE) ;AN000;
118 ;
119 PUBLIC FK_FORMAT, FK_FORMAT_LEN ;AN000;
120FK_FORMAT DB ENTER,0,F1 ;AN000;
121FK_FORMAT_LEN EQU ($-FK_FORMAT) ;AN000;
122 ;
123 PUBLIC FK_REBOOT, FK_REBOOT_LEN ;AN000;
124FK_REBOOT DB ? ;AN000; only CTRL+ALT+DEL keys valid
125FK_REBOOT_LEN EQU 0 ;AN000;
126 ;
127 PUBLIC ERROR_KEYS,ERROR_KEYS_LEN,E_QUIT,E_RETURN ;AN000;
128ERROR_KEYS DB 0,F3,ENTER ;AN000;
129ERROR_KEYS_LEN EQU $-ERROR_KEYS ;AN000;
130E_QUIT EQU 1 ;AN000;
131E_RETURN EQU 2 ;AN000;
132 ;
133 PUBLIC E_YES, E_NO, E_NA ;AN000;
134E_YES EQU 1 ;AN000;
135E_NO EQU 2 ;AN000;
136E_NA EQU 6 ;AN000;
137 ;
138 PUBLIC N_SELECT_MODE, E_SELECT_MENU, E_SELECT_FDISK, E_SELECT_INV ;AN000;
139N_SELECT_MODE DW ? ;AN000; SELECT command line mode
140E_SELECT_MENU EQU 0 ;AN000; MENU mode
141E_SELECT_FDISK EQU 1 ;AN000; FDISK mode
142E_SELECT_INV EQU 0FFH ;AN000; Invalid parameter
143 ;
144 PUBLIC N_FORMAT_MODE,E_FORMAT_SELECT,E_FORMAT_NEW,E_FORMAT_USED ;AN000;
145N_FORMAT_MODE DW ? ;AN000; FORMAT mode specified on command line
146E_FORMAT_SELECT EQU 1 ;AN000; new disk - select to format all partitions
147E_FORMAT_NEW EQU 2 ;AN000; new disk - user to format all partitions
148E_FORMAT_USED EQU 3 ;AN000; used disk - user to format all partitions
149 ;
150 PUBLIC S_SPACE ;AN000;
151S_SPACE DW M_SPACE ;AN000;
152P_SPACE DB ' ' ;AN000;
153M_SPACE EQU $ - P_SPACE ;AN000;
154 ;
155 PUBLIC S_OFF ;AN000;
156S_OFF DW M_OFF ;AN000; OFF parameter
157P_OFF DB 'OFF' ;AN000;
158M_OFF EQU $ - P_OFF ;AN000;
159 ;
160 PUBLIC S_ON ;AN000;
161S_ON DW M_ON ;AN000; ON parameter
162P_ON DB 'ON' ;AN000;
163M_ON EQU $ - P_ON ;AN000;
164 ;
165 PUBLIC I_WORKSPACE,N_WORK_PREV,E_WORKSPACE_BAL,E_WORKSPACE_MIN,E_WORKSPACE_MAX ;AN000;
166I_WORKSPACE DW ? ;AN000; user workspace option
167N_WORK_PREV DW ? ;AN000; previous workspace option
168E_WORKSPACE_MIN EQU 1 ;AN000; minimize DOS functions
169E_WORKSPACE_BAL EQU 2 ;AN000; balance DOS function
170E_WORKSPACE_MAX EQU 3 ;AN000; maximize DOS functions
171 ;
172 PUBLIC S_ANSI,M_ANSI,F_ANSI,E_ANSI_YES,D_ANSI_1,E_ANSI_B,E_ANSI_C,E_ANSI_NO ;AN000;
173S_ANSI DW M_ANSI ;AN000; ANSI command
174P_ANSI DB 2 DUP(?) ;AN000;
175M_ANSI EQU $ - P_ANSI ;AN000;
176D_ANSI_1 DW 2 ;AN000;
177 DB '/X' ;AN000;
178F_ANSI DW ? ;AN000; ANSI support required indicator
179E_ANSI_NO = E_NO ;AN000; ANSI support not required
180E_ANSI_YES = E_YES ;AN000; include ANSI.SYS command
181E_ANSI_B EQU 2 ;AN000;
182E_ANSI_C EQU 3 ;AN000;
183 ;
184 PUBLIC S_APPEND, F_APPEND, E_APPEND_YES, E_APPEND_NO, M_APPEND ;AN000;
185 PUBLIC S_APPEND_P, M_APPEND_P ;AN000;JW
186S_APPEND DW M_APPEND ;AN000; APPEND command
187P_APPEND DB 120 DUP(?) ;AN000;
188M_APPEND EQU $ - P_APPEND ;AN000;
189S_APPEND_P DW 2 ;AN000; APPEND command paramters JW
190P_APPEND_P DB '/E' ;AN000; Default parameter JW
191 DB 38 DUP(' ') ;AN000; JW
192M_APPEND_P EQU $ - P_APPEND_P ;AN000; JW
193F_APPEND DW ? ;AN000; APPEND support indicator
194E_APPEND_NO = E_NO ;AN000; APPEND support not required
195E_APPEND_YES = E_YES ;AN000; include APPEND command
196 ;
197 PUBLIC S_BREAK, M_BREAK, ST_BREAK, MT_BREAK ;AN000;
198S_BREAK DW M_BREAK ;AN000; BREAK command
199P_BREAK DB 3 DUP(?) ;AN000;
200M_BREAK EQU $ - P_BREAK ;AN000;
201ST_BREAK DW MT_BREAK ;AN000; temp location for BREAK command
202PT_BREAK DB M_BREAK DUP(?) ;AN000;
203MT_BREAK EQU $ - PT_BREAK ;AN000;
204 ;
205 PUBLIC S_BUFFERS,M_BUFFERS,D_BUFFERS_1,D_BUFFERS_2,ST_BUFFERS,MT_BUFFERS ;AN000;
206S_BUFFERS DW M_BUFFERS ;AN000; BUFFERS command
207P_BUFFERS DB 7 DUP(?) ;AN000;
208M_BUFFERS EQU $ - P_BUFFERS ;AN000;
209D_BUFFERS_1 DW 2 ;AN000;
210 DB '20' ;AN000;
211D_BUFFERS_2 DW 4 ;AN000;
212 DB '25,8' ;AC041;SEH for optimal performance
213ST_BUFFERS DW MT_BUFFERS ;AN000; temp location for BUFFERS parameters
214PT_BUFFERS DB M_BUFFERS DUP(?) ;AN000;
215MT_BUFFERS EQU $ - PT_BUFFERS ;AN000;
216 ;
217 PUBLIC S_CPSW, M_CPSW, F_CPSW, E_CPSW_YES, E_CPSW_NO, E_CPSW_NA ;AN000;
218 PUBLIC E_CPSW_B, E_CPSW_C, ST_CPSW, MT_CPSW ;AN000;
219 PUBLIC N_CPSW, E_CPSW_NOT_VAL, E_CPSW_NOT_REC, E_CPSW_VALID ;AN000;
220S_CPSW DW M_CPSW ;AN000; CPSW command
221P_CPSW DB 3 DUP(?) ;AN000;
222M_CPSW EQU $ - P_CPSW ;AN000;
223F_CPSW DW ? ;AN000; CPSW support indicator
224E_CPSW_NO = E_NO ;AN000; CPSW support not required
225E_CPSW_YES = E_YES ;AN000; include CPSW command
226E_CPSW_NA = E_NA ;AN000; CPSW not available
227E_CPSW_B EQU 1 ;AN000;
228E_CPSW_C EQU 1 ;AN000;
229ST_CPSW DW MT_CPSW ;AN000; temp location for CPSW command
230PT_CPSW DB M_CPSW DUP(?) ;AN000;
231MT_CPSW EQU $ - PT_CPSW ;AN000;
232N_CPSW DW ? ;AN000; code page switching indicator for country
233E_CPSW_NOT_VAL EQU 0 ;AN000; code page switching not allowed
234E_CPSW_NOT_REC EQU 1 ;AN000; code page switching not recommended
235E_CPSW_VALID EQU 2 ;AN000; code page switching recommended
236 ;
237 PUBLIC S_FASTOPEN, M_FASTOPEN, F_FASTOPEN, E_FASTOPEN_YES ;AN000;
238 PUBLIC E_FASTOPEN_NO, D_FASTOPEN_1, D_FASTOPEN_2, E_FASTOPEN_C ;AN000;
239S_FASTOPEN DW M_FASTOPEN ;AN000; FASTOPEN command
240P_FASTOPEN DB 60 DUP(?) ;AN000;
241M_FASTOPEN EQU $ - P_FASTOPEN ;AN000;
242D_FASTOPEN_1 DW 10 ;AN000;
243 DB 'C:=(50,25)' ;AN000;
244D_FASTOPEN_2 DW 12 ;AN000;
245 DB 'C:=(150,150)' ;AC078; SEH changed from 200,200 to 150,150 due to expanded mem problems ;AC041; SEH for optimal performance
246F_FASTOPEN DW ? ;AN000; FASTOPEN support indicator
247E_FASTOPEN_NO = E_NO ;AN000; FASTOPEN support not required
248E_FASTOPEN_YES = E_YES ;AN000; include FASTOPEN command
249E_FASTOPEN_C EQU 4 ;AN000;
250 ;
251 PUBLIC S_FCBS, M_FCBS, D_FCBS_1, ST_FCBS, MT_FCBS ;AN000;
252S_FCBS DW M_FCBS ;AN000; FCBS command
253P_FCBS DB 7 DUP(?) ;AN000;
254M_FCBS EQU $ - P_FCBS ;AN000;
255D_FCBS_1 DW 4 ;AN000;
256 DB '20,8' ;AN000;
257ST_FCBS DW MT_FCBS ;AN000; temp location for FCBS command
258PT_FCBS DB M_FCBS DUP(?) ;AN000;
259MT_FCBS EQU $ - PT_FCBS ;AN000;
260 ;
261 PUBLIC S_FILES, M_FILES, D_FILES_1, D_FILES_2, ST_FILES, MT_FILES ;AN000;
262S_FILES DW M_FILES ;AN000; FILES command
263P_FILES DB 3 DUP(?) ;AN000;
264M_FILES EQU $ - P_FILES ;AN000;
265D_FILES_1 DW 2 ;AN000;
266 DB '20' ;AN000;
267D_FILES_2 DW 1 ;AN000;
268 DB '8' ;AN000;
269ST_FILES DW MT_FILES ;AN000; temp location for FILES command
270PT_FILES DB M_FILES DUP(?) ;AN000;
271MT_FILES EQU $ - PT_FILES ;AN000;
272 ;
273 PUBLIC S_GRAPHICS, M_GRAPHICS, F_GRAPHICS, E_GRAPHICS_YES ;AN000;
274 PUBLIC E_GRAPHICS_NO, E_GRAPHICS_B, E_GRAPHICS_C ;AN000;
275S_GRAPHICS DW M_GRAPHICS ;AN000; GRAPHICS command
276P_GRAPHICS DB 80 DUP(?) ;AN000;
277M_GRAPHICS EQU $ - P_GRAPHICS ;AN000;
278F_GRAPHICS DW ? ;AN000; GRAPHICS support indicator
279E_GRAPHICS_NO = E_NO ;AN000; GRAPHICS support not required
280E_GRAPHICS_YES = E_YES ;AN000; include GRAPHICS command
281E_GRAPHICS_B EQU 4 ;AN000;
282E_GRAPHICS_C EQU 6 ;AN000;
283 ;
284 PUBLIC F_GRAFTABL, E_GRAFTABL_YES, E_GRAFTABL_NO, E_GRAFTABL_NA ;AN000;
285 PUBLIC E_GRAFTABL_B, E_GRAFTABL_C ;AN000;
286F_GRAFTABL DW ? ;AN000; GRAFTABL support indicator
287E_GRAFTABL_NO = E_NO ;AN000; GRAFTABL support not required
288E_GRAFTABL_YES = E_YES ;AN000; include GRAFTABL command
289E_GRAFTABL_NA = E_NA ;AN000; GRAFTABL not available
290E_GRAFTABL_B EQU 3 ;AN000;
291E_GRAFTABL_C EQU 5 ;AN000;
292 ;
293 PUBLIC S_LASTDRIVE,M_LASTDRIVE,D_LASTDRIVE_1,ST_LASTDRIVE,MT_LASTDRIVE ;AN000;
294S_LASTDRIVE DW M_LASTDRIVE ;AN000; LASTDRIVE command
295P_LASTDRIVE DB 1 DUP(?) ;AN000;
296M_LASTDRIVE EQU $ - P_LASTDRIVE ;AN000;
297D_LASTDRIVE_1 DW 1 ;AN000;
298 DB 'E' ;AN000;
299ST_LASTDRIVE DW MT_LASTDRIVE ;AN000; temp location for LASTDRIVE command
300PT_LASTDRIVE DB M_LASTDRIVE DUP(?) ;AN000;
301MT_LASTDRIVE EQU $ - PT_LASTDRIVE ;AN000;
302 ;
303 PUBLIC S_PATH, M_PATH, F_PATH, E_PATH_YES, E_PATH_NO ;AN000;
304S_PATH DW M_PATH ;AN000; PATH command
305P_PATH DB 120 DUP(?) ;AN000;
306M_PATH EQU $ - P_PATH ;AN000;
307F_PATH DW ? ;AN000; PATH support indicator
308E_PATH_NO = E_NO ;AN000; PATH support not required
309E_PATH_YES = E_YES ;AN000; include PATH command
310 ;
311 PUBLIC S_PROMPT,M_PROMPT,F_PROMPT,E_PROMPT_YES,E_PROMPT_NO,D_PROMPT_1 ;AN000;
312S_PROMPT DW M_PROMPT ;AN000; PROMPT command
313P_PROMPT DB 120 DUP(?) ;AN000;
314M_PROMPT EQU $ - P_PROMPT ;AN000;
315D_PROMPT_1 DW 4 ;AN000;
316 DB '$P$G' ;AN000;
317F_PROMPT DW ? ;AN000; PROMPT command indicator
318E_PROMPT_NO = E_NO ;AN000; PROMPT command not to be included
319E_PROMPT_YES = E_YES ;AN000; include PROMPT command
320 ;
321 PUBLIC S_SHARE,M_SHARE,F_SHARE,E_SHARE_YES,E_SHARE_NO,E_SHARE_C ;AN000;
322S_SHARE DW M_SHARE ;AN000; SHARE command
323P_SHARE DB 15 DUP(?) ;AN000;
324M_SHARE EQU $ - P_SHARE ;AN000;
325F_SHARE DW ? ;AN000; SHARE support indicator
326E_SHARE_NO = E_NO ;AN000; SHARE support not required
327E_SHARE_YES = E_YES ;AN000; include SHARE command
328E_SHARE_C EQU 7 ;AN000;
329 ;
330 PUBLIC S_SHELL, M_SHELL, F_SHELL, E_SHELL_YES, E_SHELL_NO ;AN000;
331 PUBLIC D_SHELL_1, D_SHELL_2, E_SHELL_B, E_SHELL_C ;AC018;SEH ;AC000;JW
332S_SHELL DW M_SHELL ;AN000; SHELL command
333P_SHELL DB 115 DUP(?) ;AN000;
334M_SHELL EQU $ - P_SHELL ;AN000;
335D_SHELL_1 DW M_SHELL_1 ;AN000;
336P_SHELL_1 DB '/TRAN/MAINT/MENU/EXIT/SND/PROMPT' ;AC077;SEH ;AC000;JW
337M_SHELL_1 EQU $ - P_SHELL_1 ;AN000;
338D_SHELL_2 DW M_SHELL_2 ;AN000;
339P_SHELL_2 DB '/TRAN/COLOR/DOS/MENU/MUL' ;AC071;SEH ;AC016;SEH ;AC000;JW
340 DB '/SND/MEU:SHELL.MEU/CLR:SHELL.CLR/PROMPT/MAINT/EXIT/SWAP/DATE' ;AC012;SEH ;AC000;JW
341M_SHELL_2 EQU $ - P_SHELL_2 ;AN000;
342F_SHELL DW ? ;AN000; SHELL support indicator
343E_SHELL_NO = E_NO ;AN000; SHELL support not required
344E_SHELL_YES = E_YES ;AN000; include SHELL command
345E_SHELL_B = 5
346E_SHELL_C = 8
347 ;
348 PUBLIC MACHINE_TYPE, PS2_FLAG, MOD25_OR_MOD30 ;AN000;JW
349MACHINE_TYPE DB ? ;AN000;JW
350PS2_FLAG DB ? ;AN000;JW
351MOD25_OR_MOD30 EQU 0FAH ;AN000;JW
352 ;
353 PUBLIC S_STACKS,M_STACKS,ST_STACKS,MT_STACKS ;AN000;
354S_STACKS DW M_STACKS ;AN000; STACKS command
355P_STACKS DB 6 DUP(?) ;AN000;
356M_STACKS EQU $ - P_STACKS ;AN000;
357ST_STACKS DW MT_STACKS ;AN000; temp location for STACKS command
358PT_STACKS DB M_STACKS DUP(?) ;AN000;
359MT_STACKS EQU $ - PT_STACKS ;AN000;
360 ;
361 PUBLIC S_VDISK,M_VDISK,F_VDISK,E_VDISK_YES,E_VDISK_NO,E_VDISK_B,E_VDISK_C ;AN000;
362S_VDISK DW M_VDISK ;AN000; VDISK command
363P_VDISK DB 20 DUP(?) ;AN000;
364M_VDISK EQU $ - P_VDISK ;AN000;
365F_VDISK DW ? ;AN000; VDISK support indicator
366E_VDISK_NO = E_NO ;AN000; VDISK support not required
367E_VDISK_YES = E_YES ;AN000; include VDISK command
368E_VDISK_B EQU 6 ;AN000;
369E_VDISK_C EQU 9 ;AN000;
370 ;
371 PUBLIC S_VERIFY, M_VERIFY, ST_VERIFY, MT_VERIFY ;AN000;
372S_VERIFY DW M_VERIFY ;AN000; VERIFY command
373P_VERIFY DB 3 DUP(?) ;AN000;
374M_VERIFY EQU $ - P_VERIFY ;AN000;
375ST_VERIFY DW MT_VERIFY ;AN000; temp location for VERIFY command
376PT_VERIFY DB M_VERIFY DUP(?) ;AN000;
377MT_VERIFY EQU $ - PT_VERIFY ;AN000;
378 ;
379 PUBLIC S_XMAEM, M_XMAEM ;AN000;
380S_XMAEM DW M_XMAEM ;AN000; XMAEM command
381P_XMAEM DB 40 DUP(?) ;AN000;
382M_XMAEM EQU $ - P_XMAEM ;AN000;
383 ;
384 PUBLIC S_XMA2EMS, M_XMA2EMS, D_XMA2EMS_1, F_XMA, E_XMA_NO, E_XMA_NA ;AN000;
385 PUBLIC E_XMA_YES, E_XMA_C, N_XMA, E_XMA_ABSENT, E_XMA_PRESENT ;AN000;
386S_XMA2EMS DW M_XMA2EMS ;AN000; XMA2EMS command
387P_XMA2EMS DB 40 DUP(?) ;AN000;
388M_XMA2EMS EQU $ - P_XMA2EMS ;AN000;
389D_XMA2EMS_1 DW 30 ;AN000;
390 DB 'FRAME=D000 P254=C000 P255=C400' ;AC044;SEH ;AC040;SEH ;AN000;JW
391F_XMA DW ? ;AN000; Expanded Memory support indicator
392E_XMA_NO = E_NO ;AN000; Expanded Memory support not required
393E_XMA_YES = E_YES ;AN000; include XMAEM, XMA2EMS commands
394E_XMA_NA = E_NA ;AN000; Expanded memory not available
395E_XMA_C EQU 2 ;AN000;
396N_XMA DW ? ;AN000; Expanded memory presence indicator
397E_XMA_ABSENT EQU 0 ;AN000; expanded memory not present
398E_XMA_PRESENT EQU 1 ;AN000; expanded memory is present
399 ;
400 PUBLIC N_MOD80, E_IS_MOD80, E_NOT_MOD80 ;AN000;JW
401N_MOD80 DW ? ;AN000; Model 80 indicator
402E_NOT_MOD80 EQU 0 ;AN000; is not a model 80
403E_IS_MOD80 EQU 1 ;AN000; is a model 80
404 ;
405 PUBLIC I_DEST_DRIVE, E_DEST_DRIVE_A, E_DEST_DRIVE_B, E_DEST_DRIVE_C ;AN111;JW
406I_DEST_DRIVE DW ? ;AN000; Install destination drive - set by CHECK_VALID_MEDIA
407E_DEST_DRIVE_C EQU 1 ;AN000; drive C:
408E_DEST_DRIVE_B EQU 2 ;AN000; drive B:
409E_DEST_DRIVE_A EQU 3 ;AN111; drive A:
410 ;
411 PUBLIC N_DRIVE_OPTION, E_OPTION_B_C, E_OPTION_A_C ;AN111;JW
412N_DRIVE_OPTION DW ? ;AN111; Which options to choose from JW
413E_OPTION_B_C EQU 1 ;AN111; install to B or C JW
414E_OPTION_A_C EQU 2 ;AN111; install to A or C JW
415 ;
416 PUBLIC N_DEST_DRIVE, E_DEST_SELECT, E_DEST_USER ;AN000;
417N_DEST_DRIVE DB ? ;AN000; destination drive determined by user or SELECT
418E_DEST_SELECT EQU 0 ;AN000; SELECT will determine default drive
419E_DEST_USER EQU 1 ;AN000; user will select destination drive
420 ;
421 PUBLIC N_DISKETTE_TOT, N_ZERO_DISKETTE, N_DISKETTE_A, N_DISKETTE_B ;AN000;
422 PUBLIC E_DISKETTE_INV, E_DISKETTE_360, E_DISKETTE_720, E_DISKETTE_1200, E_DISKETTE_1440 ;AN000;
423N_DISKETTE_TOT DB ? ;AN000; number of diskette drives
424N_ZERO_DISKETTE EQU 0 ;AN000;
425N_DISKETTE_A DB ? ;AN000; drive A: diskette status
426N_DISKETTE_B DB ? ;AN000; drive B: diskette status
427E_DISKETTE_INV EQU 0FFH ;AN000; diskette not present
428E_DISKETTE_360 EQU 0 ;AN000; diskette media is 360K (5.25 inch)
429E_DISKETTE_1200 EQU 1 ;AN000; diskette media is 1.2M (5.25 inch)
430E_DISKETTE_720 EQU 2 ;AN000; diskette media is 720K (3.5 inch)
431E_DISKETTE_1440 EQU 7 ;AN000; diskette media is 1.44M (3.5 inch)
432 ;
433 PUBLIC S_DEST_DRIVE,M_DEST_DRIVE,S_DRIVE_A ;AN000;
434S_DEST_DRIVE DW M_DEST_DRIVE ;AN000; Destination drive to install DOS
435P_DEST_DRIVE DB 'C:\' ;AN000;
436M_DEST_DRIVE EQU $ - P_DEST_DRIVE ;AN000;
437S_DRIVE_A DW M_DRIVE_A ;AN000;
438P_DRIVE_A DB 'A:\' ;AN000;
439M_DRIVE_A EQU $ - P_DRIVE_A ;AN000;
440 ;
441 PUBLIC S_C_DRIVE,S_A_DRIVE,S_B_DRIVE ;AC039;SEH;AN000;JW
442S_C_DRIVE DW M_C_DRIVE ;AN000; Destination drive w/o backslash JW
443P_C_DRIVE DB 'C:' ;AN000;
444M_C_DRIVE EQU $ - P_C_DRIVE ;AN000;
445S_A_DRIVE DW M_A_DRIVE ;AN039;SEH Destination drive w/o backslash
446P_A_DRIVE DB 'A:' ;AN039;SEH
447M_A_DRIVE EQU $ - P_A_DRIVE ;AN039;SEH
448S_B_DRIVE DW M_B_DRIVE ;AN039;SEH Destination drive w/o backslash
449P_B_DRIVE DB 'B:' ;AN039;SEH
450M_B_DRIVE EQU $ - P_B_DRIVE ;AN039;SEH
451 ;
452 PUBLIC S_DOS_LOC, M_DOS_LOC, D_DOS_LOC_1 ;AN000;
453S_DOS_LOC DW M_DOS_LOC ;AN000; user defined DOS location path for drive C:
454P_DOS_LOC DB 37 DUP(?) ;AN000;
455M_DOS_LOC EQU $ - P_DOS_LOC ;AN000;
456D_DOS_LOC_1 DW 3 ;AN000;
457 DB 'DOS' ;AN000;
458 ;
459 PUBLIC S_INSTALL_PATH, M_INSTALL_PATH ;AN000;
460S_INSTALL_PATH DW M_INSTALL_PATH ;AN000; install path including drive
461P_INSTALL_PATH DB 40 DUP( ) ;AN000;
462M_INSTALL_PATH EQU $ - P_INSTALL_PATH ;AN000;
463 ;
464 PUBLIC I_CTY_KYBD, E_CTY_KB_PREDEF, E_CTY_KB_USER ;AN000;
465I_CTY_KYBD DW ? ;AN000; index for country and keyboard screen
466E_CTY_KB_PREDEF EQU 1 ;AN000; Use predefined country/keyboard
467E_CTY_KB_USER EQU 2 ;AN000; user specified country/keyboard to be used
468 ;
469 PUBLIC N_CTY_LIST, E_CTY_LIST_1, E_CTY_LIST_2 ;AN000;
470N_CTY_LIST DW ? ;AN000; Country code scroll list identifier
471E_CTY_LIST_1 EQU 1 ;AN000; code 001 - 046
472E_CTY_LIST_2 EQU 2 ;AN000; code 047 - 972
473 ;
474 PUBLIC I_COUNTRY, N_COUNTRY ;AN000;
475I_COUNTRY DW ? ;AN000; Index into country code list
476N_COUNTRY DW ? ;AN000; Country Code
477 ;
478 PUBLIC N_KYBD_LIST, E_KYBD_LIST_1, E_KYBD_LIST_2 ;AN000;
479N_KYBD_LIST DW ? ;AN000; Keyboard code scroll list identifier
480E_KYBD_LIST_1 EQU 1 ;AN000; code BE - NO
481E_KYBD_LIST_2 EQU 2 ;AN000; code PO - none
482 ;
483 PUBLIC I_KEYBOARD ;AN000;
484I_KEYBOARD DW ? ;AN000; Index into keyboard code list
485 ;
486 PUBLIC S_KEYBOARD,N_KYBD_VAL,E_KYBD_VAL_YES,E_KYBD_VAL_NO ;AN000;
487 PUBLIC M_KEYBOARD,E_KYBD_VAL_DEF ;AN000;
488S_KEYBOARD DW M_KEYBOARD ;AN000;
489P_KEYBOARD DB 2 DUP(?) ;AN000; Keyboard code
490M_KEYBOARD EQU $ - P_KEYBOARD ;AN000;
491N_KYBD_VAL DB ? ;AN000; Keyboard code valid indicator
492E_KYBD_VAL_NO EQU 0 ;AN000; Keyboard code is not valid
493E_KYBD_VAL_YES EQU 1 ;AN000; Keyboard code is valid
494E_KYBD_VAL_DEF EQU 2 ;AN000; Default keyboard (US) is to be used
495 ; This state is defined so that keyboard screen
496 ; will be displayed with "None" option
497 ;
498 PUBLIC N_DESIGNATES, N_CP_PRI, N_CP_SEC, N_CTY_RES ;AN000;
499N_DESIGNATES DW ? ;AN000; number of designates
500N_CP_PRI DW ? ;AN000; Primary code page
501N_CP_SEC DW ? ;AN000; Secondary code page
502N_CTY_RES DB ? ;AN000; reserved byte from country table
503 ;
504 PUBLIC I_KYBD_ALT, S_KYBD_ALT, M_KYBD_ALT, N_KYBD_ALT ;AN000;
505 PUBLIC E_KYBD_ALT_NO, E_KYBD_ALT_YES ;AN000;
506I_KYBD_ALT DW ? ;AN000; Index into alternate keyboard code list
507S_KYBD_ALT DW M_KYBD_ALT ;AN000;
508P_KYBD_ALT DB 2 DUP(?) ;AN000; Keyboard code
509M_KYBD_ALT EQU $ - P_KYBD_ALT ;AN000;
510N_KYBD_ALT DB ? ;AN000; Alternate keyboards present indicator
511E_KYBD_ALT_NO EQU 0 ;AN000; no alternate keyboards
512E_KYBD_ALT_YES EQU 1 ;AN000; are alternate keyboards are present
513 ;
514 PUBLIC N_KYB_LOAD,E_KYB_LOAD_SUC,E_KYB_LOAD_ERR,E_KYB_LOAD_US,E_KYB_LOAD_UND ;AN000;
515N_KYB_LOAD DW ? ;AN000; KEYB load status
516E_KYB_LOAD_SUC EQU 1 ;AN000; no error from KEYB
517E_KYB_LOAD_ERR EQU 2 ;AN000; error from KEYB
518E_KYB_LOAD_US EQU 3 ;AN000; US keyboard loaded
519E_KYB_LOAD_UND EQU 4 ;AN000; undefined keyboard loaded
520 ;
521; Country code association with Keyboard code & Code Page
522 PUBLIC CTY_TAB_A,CTY_TAB_A_1,CTY_A_ITEMS ;AN000;
523CTY_TAB_A DB CTY_A_ITEMS ;AN000; no of entries in table
524CTY_TAB_A_1 CTY_DEF < 001,E_KYBD_VAL_DEF,' ',437,850,1,E_CPSW_NOT_REC,0> ;AN000; (01) United States
525 CTY_DEF < 002,E_KYBD_VAL_YES,'CF',863,850,2,E_CPSW_VALID ,0> ;AN000; (02) Canada (French)
526 CTY_DEF < 003,E_KYBD_VAL_YES,'LA',850,437,1,E_CPSW_VALID ,0> ;AC070;SEH ;AN000; (03) Latin America
527 CTY_DEF < 031,E_KYBD_VAL_YES,'NL',437,850,1,E_CPSW_VALID ,0> ;AN000; (04) Netherlands
528 CTY_DEF < 032,E_KYBD_VAL_YES,'BE',850,437,1,E_CPSW_VALID ,0> ;AN000; (05) Belgium
529 CTY_DEF < 033,E_KYBD_VAL_YES,'FR',437,850,1,E_CPSW_VALID ,1> ;AN000; (06) France
530 CTY_DEF < 034,E_KYBD_VAL_YES,'SP',850,437,1,E_CPSW_VALID ,0> ;AN000; (07) Spain
531 CTY_DEF < 039,E_KYBD_VAL_YES,'IT',437,850,1,E_CPSW_VALID ,2> ;AN000; (08) Italy
532 CTY_DEF < 041,E_KYBD_VAL_YES,'SF',850,437,1,E_CPSW_VALID ,0> ;AN000; (09) Switzerland
533 CTY_DEF < 044,E_KYBD_VAL_YES,'UK',437,850,1,E_CPSW_VALID ,3> ;AN000; (10) United Kingdom
534 CTY_DEF < 045,E_KYBD_VAL_YES,'DK',850,865,2,E_CPSW_VALID ,0> ;AN000; (11) Denmark
535 CTY_DEF < 046,E_KYBD_VAL_YES,'SV',437,850,1,E_CPSW_VALID ,0> ;AN000; (12) Sweden
536CTY_A_ITEMS EQU ($ - CTY_TAB_A_1) / TYPE CTY_DEF ;AN000; no of items
537 ;
538 PUBLIC CTY_TAB_B,CTY_TAB_B_1,CTY_B_ITEMS ;AN000;
539CTY_TAB_B DB CTY_B_ITEMS ;AN000; no of entries in table
540CTY_TAB_B_1 CTY_DEF < 047,E_KYBD_VAL_YES,'NO',850,865,2,E_CPSW_VALID ,0 > ;AN000; (01) Norway
541 CTY_DEF < 049,E_KYBD_VAL_YES,'GR',437,850,1,E_CPSW_VALID ,0 > ;AN000; (02) Germany
542 CTY_DEF < 061,E_KYBD_VAL_YES,'US',437,850,1,E_CPSW_VALID ,0 > ;AN000; (03) Australia
543 CTY_DEF < 081,E_KYBD_VAL_NO ,' ',000,000,0,E_CPSW_NOT_VAL,0 > ;AN000; (04) Japan
544 CTY_DEF < 082,E_KYBD_VAL_NO ,' ',000,000,0,E_CPSW_NOT_VAL,0 > ;AN000; (05) Korea
545 CTY_DEF < 086,E_KYBD_VAL_NO ,' ',000,000,0,E_CPSW_NOT_VAL,0 > ;AN000; (06) Republic of China
546 CTY_DEF < 088,E_KYBD_VAL_NO ,' ',000,000,0,E_CPSW_NOT_VAL,0 > ;AN000; (07) Taiwan
547 CTY_DEF < 351,E_KYBD_VAL_YES,'PO',850,860,2,E_CPSW_VALID ,0 > ;AN000; (08) Portugal
548 CTY_DEF < 358,E_KYBD_VAL_YES,'SU',850,437,1,E_CPSW_VALID ,0 > ;AN000; (09) Finland
549 CTY_DEF < 785,E_KYBD_VAL_NO ,' ',000,000,0,E_CPSW_NOT_VAL,0 > ;AN000; (10) Arabic Speaking
550 CTY_DEF < 972,E_KYBD_VAL_NO ,' ',000,000,0,E_CPSW_NOT_VAL,0 > ;AN000; (11) Hebrew Speaking
551CTY_B_ITEMS EQU ($ - CTY_TAB_B_1) / TYPE CTY_DEF ;AN000; no of items
552 ;
553; Keyboard Codes supported
554 PUBLIC KYBD_TAB_A,KYBD_TAB_A_1,KYBD_A_ITEMS ;AN000;
555KYBD_TAB_A DB KYBD_A_ITEMS ;AN000; no of entries in table
556KYBD_TAB_A_1 KYB_DEF < 'BE', E_KYBD_ALT_NO > ;AN000; (01) Flemish
557 KYB_DEF < 'CF', E_KYBD_ALT_NO > ;AN000; (02) Canadian French
558 KYB_DEF < 'DK', E_KYBD_ALT_NO > ;AN000; (03) Danish
559 KYB_DEF < 'FR', E_KYBD_ALT_YES> ;AN000; (04) French
560 KYB_DEF < 'GR', E_KYBD_ALT_NO > ;AN000; (05) German
561 KYB_DEF < 'IT', E_KYBD_ALT_YES> ;AN000; (06) Italian
562 KYB_DEF < 'LA', E_KYBD_ALT_NO > ;AN000; (07) Latin American (Spanish)
563 KYB_DEF < 'NL', E_KYBD_ALT_NO > ;AN000; (08) Dutch
564 KYB_DEF < 'NO', E_KYBD_ALT_NO > ;AN000; (09) Norwegian
565KYBD_A_ITEMS EQU ($ - KYBD_TAB_A_1) / TYPE KYB_DEF ;AN000; no of items in table
566 ;
567 PUBLIC KYBD_TAB_B,KYBD_TAB_B_1,KYBD_B_ITEMS ;AN000;
568KYBD_TAB_B DB KYBD_B_ITEMS ;AN000; no of entries in table
569KYBD_TAB_B_1 KYB_DEF < 'PO', E_KYBD_ALT_NO > ;AN000; (01) Portuguese
570 KYB_DEF < 'SF', E_KYBD_ALT_NO > ;AN000; (02) Swiss (French)
571 KYB_DEF < 'SG', E_KYBD_ALT_NO > ;AN000; (03) Swiss (German)
572 KYB_DEF < 'SP', E_KYBD_ALT_NO > ;AN000; (04) Spanish
573 KYB_DEF < 'SU', E_KYBD_ALT_NO > ;AN000; (05) Finnish
574 KYB_DEF < 'SV', E_KYBD_ALT_NO > ;AN000; (06) Swedish
575 KYB_DEF < 'UK', E_KYBD_ALT_YES> ;AN000; (07) UK English
576 KYB_DEF < 'US', E_KYBD_ALT_NO > ;AN000; (08) US English
577 KYB_DEF < ' ', E_KYBD_ALT_NO > ;AN000; (09) none of the above
578KYBD_B_ITEMS EQU ($ - KYBD_TAB_B_1) / TYPE KYB_DEF ;AN000; no of items in table
579 ;
580 PUBLIC ALT_TAB_PTR ;AN000;
581ALT_TAB_PTR DW ? ;AN000; pointer keyboard table
582 ;
583 PUBLIC ALT_KYB_ID, ALT_FRENCH, ALT_ITALIAN, ALT_UK, ALT_KYB_ID_PREV ;AN000;
584ALT_KYB_ID DB ? ;AN000; keyboard code identifier
585ALT_KYB_ID_PREV DB ? ;AN000; previous keyboard code identifier
586ALT_FRENCH EQU 1 ;AN000; French keyboard
587ALT_ITALIAN EQU 2 ;AN000; Italian keyboard
588ALT_UK EQU 3 ;AN000; UK English keyboard
589 ;
590 PUBLIC ALT_KYB_TABLE, ALT_KYB_TAB_1, ALT_KYB_ITEMS ;AN000;
591ALT_KYB_TABLE DB ALT_KYB_ITEMS ;AN000; no of items in table
592ALT_KYB_TAB_1 ALT_KYB_DEF < 'FR', ALT_KYBD_FR, ALT_FRENCH > ;AN000; French keyboard
593 ALT_KYB_DEF < 'IT', ALT_KYBD_IT, ALT_ITALIAN > ;AN000; Italian keyboard
594 ALT_KYB_DEF < 'UK', ALT_KYBD_UK, ALT_UK > ;AN000; UK English
595ALT_KYB_ITEMS EQU ($ - ALT_KYB_TAB_1) / TYPE ALT_KYB_DEF ;AN000; no of items
596 ;
597 PUBLIC ALT_KYBD_FR, ALT_KYBD_FR_1, ALT_FR_ITEMS ;AN000;
598ALT_KYBD_FR DB ALT_FR_ITEMS ;AN000; Alternate French Keyboard-no of entries in table
599ALT_KYBD_FR_1 FR_STRUC <'120'> ;AN000;
600 FR_STRUC <'189'> ;AC000;JW
601ALT_FR_ITEMS EQU ($ - ALT_KYBD_FR_1) / TYPE FR_STRUC ;AN000;
602 ;
603 PUBLIC ALT_KYBD_IT, ALT_KYBD_IT_1, ALT_IT_ITEMS ;AN000;
604ALT_KYBD_IT DB ALT_IT_ITEMS ;AN000; Alternate Italian keyboard-no of entries in table
605ALT_KYBD_IT_1 IT_STRUC <'142'> ;AC090;JW Switched with '141
606 IT_STRUC <'141'> ;AC090;JW
607ALT_IT_ITEMS EQU ($ - ALT_KYBD_IT_1) / TYPE IT_STRUC ;AN000;
608 ;
609 PUBLIC ALT_KYBD_UK, ALT_KYBD_UK_1, ALT_UK_ITEMS ;AN000;
610ALT_KYBD_UK DB ALT_UK_ITEMS ;AN000; no of entries in table
611ALT_KYBD_UK_1 UK_STRUC <'168'> ;AN000;
612 UK_STRUC <'166'> ;AC000;JW
613ALT_UK_ITEMS EQU ($ - ALT_KYBD_UK_1) / TYPE UK_STRUC ;AN000;
614 ;
615 PUBLIC ALT_ID_DEF ;AN000;
616ALT_ID_DEF DB 0 ;AN000;DT
617 ;
618 PUBLIC S_US ;AN000;
619S_US DW M_US ;AN000;
620P_US DB 'US' ;AN000;
621M_US EQU $ - P_US ;AN000;
622 ;
623 PUBLIC S_SWISS ;AN000;
624S_SWISS DW M_SWISS ;AN000;
625P_SWISS DB 'SF' ;AN000;
626M_SWISS EQU $ - P_SWISS ;AN000;
627 ;
628 PUBLIC PRINTER_TABLES ;AN000;
629PRINTER_TABLES EQU $ ;AN000;
630 PRINTER_DEF < > ;AN000; LPT1
631 PRINTER_DEF < > ;AN000; LPT2
632 PRINTER_DEF < > ;AN000; LPT3
633 PRINTER_DEF < > ;AN000; COM1
634 PRINTER_DEF < > ;AN000; COM2
635 PRINTER_DEF < > ;AN000; COM3
636 PRINTER_DEF < > ;AN000; COM4
637 ;
638 PUBLIC N_NUMPRINT, MIN_NUMPRINT, MAX_NUMPRINT ;AN000;
639N_NUMPRINT DW ? ;AN000; No. of printers to install
640MIN_NUMPRINT EQU 0 ;AN000;
641MAX_NUMPRINT EQU 7 ;AN000;
642 ;
643 PUBLIC N_SERIAL, N_PARALLEL ;AN000;
644N_PARALLEL DW ? ;AN000;
645N_SERIAL DW ? ;AN000;
646 ;
647 PUBLIC I_PORT, I_REDIRECT, I_PRINTER ;AN000;
648I_PORT DW ? ;AN000; port number
649I_REDIRECT DW ? ;AN000; serial port redirection
650I_PRINTER DW ? ;AN000; index into printer list
651 ;
652 PUBLIC N_PRINTER_TYPE, E_SERIAL, E_PARALLEL ;AN000;
653N_PRINTER_TYPE DB ? ;AN000; printer type
654E_SERIAL EQU 53H ;AN000; Serial 'S'
655E_PARALLEL EQU 50H ;AN000; Parallel 'P'
656 ;
657 PUBLIC S_MODE_PARM, M_MODE_PARM ;AN000;
658S_MODE_PARM DW M_MODE_PARM ;AN000;
659P_MODE_PARM DB 40 DUP(?) ;AN000;
660M_MODE_PARM EQU $ - P_MODE_PARM ;AN000;
661 ;
662 PUBLIC S_CP_DRIVER, M_CP_DRIVER ;AN000;
663S_CP_DRIVER DW M_CP_DRIVER ;AN000;
664P_CP_DRIVER DB 22 DUP(?) ;AN000;
665M_CP_DRIVER EQU $ - P_CP_DRIVER ;AN000;
666 ;
667 PUBLIC S_CP_PREPARE, M_CP_PREPARE ;AN000;
668S_CP_PREPARE DW M_CP_PREPARE ;AN000;
669P_CP_PREPARE DB 12 DUP(?) ;AN000;
670M_CP_PREPARE EQU $ - P_CP_PREPARE ;AN000;
671 ;
672 PUBLIC S_GRAPH_PARM, M_GRAPH_PARM ;AN000;
673S_GRAPH_PARM DW M_GRAPH_PARM ;AN000;
674P_GRAPH_PARM DB 20 DUP(?) ;AN000;
675M_GRAPH_PARM EQU $ - P_GRAPH_PARM ;AN000;
676 ;
677 PUBLIC F_REVIEW, E_REVIEW_ACCEPT, E_REVIEW_VIEW ;AN000;
678F_REVIEW DW ? ;AN000; Review selection screen index
679E_REVIEW_ACCEPT EQU 1 ;AN000; user will accept selections made by SELECT
680E_REVIEW_VIEW EQU 2 ;AN000; user wants to view/change selections made by SELECT
681 ;
682 PUBLIC N_DISPLAY, E_CPSW_DISP, E_NOCPSW_DISP ;AN000;
683N_DISPLAY DB ? ;AN000; display type indicator
684E_CPSW_DISP EQU 0 ;AN000; display type will support CPSW
685E_NOCPSW_DISP EQU 1 ;AN000; display type will not support CPSW
686 ;
687 PUBLIC N_YEAR, MIN_YEAR, MAX_YEAR ;AN000;
688N_YEAR DW ? ;AN000; calender year
689MIN_YEAR EQU 1980 ;AN000;
690MAX_YEAR EQU 2079 ;AN000;
691 ;
692 PUBLIC N_MONTH, MIN_MONTH, MAX_MONTH ;AN000;
693N_MONTH DW ? ;AN000; calender month
694MIN_MONTH EQU 1 ;AN000;
695MAX_MONTH EQU 12 ;AN000;
696 ;
697 PUBLIC N_DAY, MIN_DAY, MAX_DAY ;AN000;
698N_DAY DW ? ;AN000; calender day
699MIN_DAY EQU 1 ;AN000;
700MAX_DAY EQU 31 ;AN000;
701 ;
702 PUBLIC N_HOUR, MIN_HOUR, MAX_HOUR ;AN000;
703N_HOUR DW ? ;AN000; hour
704MIN_HOUR EQU 0 ;AN000;
705MAX_HOUR EQU 23 ;AN000;
706 ;
707 PUBLIC N_MINUTE, MIN_MINUTE, MAX_MINUTE ;AN000;
708N_MINUTE DW ? ;AN000; minute
709MIN_MINUTE EQU 0 ;AN000;
710MAX_MINUTE EQU 59 ;AN000;
711 ;
712 PUBLIC N_SECOND, MIN_SECOND, MAX_SECOND ;AN000;
713N_SECOND DW ? ;AN000; second
714MIN_SECOND EQU 0 ;AN000;
715MAX_SECOND EQU 59 ;AN000;
716 ;
717 PUBLIC PARM_BLOCK, CMD_BUFF ;AN000;
718PARM_BLOCK LABEL WORD ;AN000; parameter block for EXEC_PROGRAM
719 DW 0 ;AN000; use parent environment
720 DW OFFSET CMD_BUFF ;AN000; pointer to commnad line
721 DW ? ;AN000; segment for command line
722 DW 5CH ;AN000; default FCB
723 DW ? ;AN000; segment for FCB
724 DW 6CH ;AN000; default FCB
725 DW ? ;AN000; segment for FCB
726PARM_BLOCK_END EQU $ ;AN000;
727 ;
728CMD_BUFF LABEL BYTE ;AN000; command line passed to EXEC_PROGRAM
729 DB ? ;AN000; length of command line - excluding carrier return
730 DB 80 DUP(?) ;AN000;
731CMD_BUFF_END EQU $ ;AN000;
732 ;
733 PUBLIC S_STR40, P_STR40, M_STR40 ;AN000;JW
734S_STR40 DW M_STR40 ;AN000; Temporary variable for string field
735P_STR40 DB 40 DUP(?) ;AN000;JW
736M_STR40 EQU $ - P_STR40 ;AN000;JW
737 ;
738 PUBLIC S_STR120_1, P_STR120_1, M_STR120_1 ;AN000;
739S_STR120_1 DW M_STR120_1 ;AN000; Temporary variable for string field
740P_STR120_1 DB 120 DUP(?) ;AN000;
741M_STR120_1 EQU $ - P_STR120_1 ;AN000;
742 ;
743 PUBLIC S_STR120_2, M_STR120_2 ;AN000;
744S_STR120_2 DW M_STR120_2 ;AN000; Temporary variable for string field
745P_STR120_2 DB 120 DUP(?) ;AN000;
746M_STR120_2 EQU $ - P_STR120_2 ;AN000;
747 ;
748 PUBLIC S_STR120_3, M_STR120_3 ;AN000;
749S_STR120_3 DW M_STR120_3 ;AN000; Temporary variable for string field
750P_STR120_3 DB 120 DUP(?) ;AN000;
751M_STR120_3 EQU $ - P_STR120_3 ;AN000;
752 ;
753 PUBLIC S_STR120_4, M_STR120_4 ;AN039;SEH
754S_STR120_4 DW M_STR120_4 ;AN039;SEH Temporary variable for string field
755P_STR120_4 DB 120 DUP(?) ;AN039;SEH
756M_STR120_4 EQU $ - P_STR120_4 ;AN039;SEH
757 ;
758 PUBLIC SC_LINE, MC_LINE ;AN000;
759SC_LINE DW MC_LINE ;AN000; Temporary variable for string field
760PC_LINE DB 130 DUP(?) ;AN000;
761MC_LINE EQU $ - PC_LINE - 2 ;AN000;
762 ;
763 PUBLIC N_HANDLE ;AN000;
764N_HANDLE DW ? ;AN000; save location for file handle
765 ;
766 PUBLIC N_WRITE_HANDLE, N_WRITE_ERR_CODE ;AN000;
767N_WRITE_HANDLE DW ? ;AN000; File handle for prepared file
768N_WRITE_ERR_CODE DW ? ;AN000; error code for prepared file
769 ;
770 PUBLIC N_RETCODE, N_COUNTER ;AN000;
771N_RETCODE DW ? ;AN000; Return code if execution not a success
772N_COUNTER DW ? ;AN000; Loop counter
773 ;
774 PUBLIC N_WORD_1, N_WORD_2, N_WORD_3, N_WORD_4, N_WORD_5, N_WORD_6,N_BYTE_1 ;AN000;
775N_WORD_1 DW ? ;AN000; temp variable
776N_WORD_2 DW ? ;AN000; temp variable
777N_WORD_3 DW ? ;AN000; temp variable
778N_WORD_4 DW ? ;AN000; temp variable
779N_WORD_5 DW ? ;AN000; temp variable
780N_WORD_6 DW ? ;AN000; temp variable
781N_BYTE_1 DB ? ;AN025; temp variable
782 ;
783 PUBLIC SAVE_AREA ;AN000;
784SAVE_AREA DB 4 DUP(?) ;AN000; save area for stack pointer before EXEC program
785 ;
786 PUBLIC N_HOUSE_CLEAN,E_CLEAN_YES,E_CLEAN_NO ;AN000;
787N_HOUSE_CLEAN DB ? ;AN000;
788E_CLEAN_YES EQU 1 ;AN000; erase temp files
789E_CLEAN_NO EQU 0 ;AN000; no temp files to erase
790 ;
791 PUBLIC N_DSKCPY_ERR,E_DSKCPY_RETRY,E_DSKCPY_OK ;AN000;JW
792N_DSKCPY_ERR DB 0 ;AN000;JW
793E_DSKCPY_RETRY EQU 1 ;AN000; retry diskcopy
794E_DSKCPY_OK EQU 0 ;AN000; diskcopy successful
795 ;
796 PUBLIC E_CR, E_LF ;AN000;
797E_CR EQU 0DH ;AN000;
798E_LF EQU 0AH ;AN000;
799 ;
800; EQUATES FOR FIELD TYPES DEFINED IN DISK STATUS STRUCTURE
801; EQUATES FOR N_PART_NAME ; Partition name
802 PUBLIC E_PART_PRI_DOS, E_PART_EXT_DOS, E_PART_LOG_DRI ;AN000;
803 PUBLIC E_FREE_MEM_EDOS, E_FREE_MEM_DISK, E_PART_OTHER ;AN000;
804E_PART_PRI_DOS EQU 1 ;AN000; Primary DOS partition
805E_PART_EXT_DOS EQU 2 ;AN000; Extended DOS partition
806E_PART_LOG_DRI EQU 3 ;AN000; Logical Drive
807E_FREE_MEM_EDOS EQU 4 ;AN000; Free space in Extended DOS partition
808E_FREE_MEM_DISK EQU 5 ;AN000; Free disk space - undefined partition
809E_PART_OTHER EQU 6 ;AN000; other partition types i.e not DOS or EDOS
810
811; EQUATES FOR N_PART_STATUS ; Partition status
812 PUBLIC E_PART_UNFORMAT, E_PART_FORMAT ;AN000;
813E_PART_UNFORMAT EQU 0 ;AN000; partition is unformatted
814E_PART_FORMAT EQU 1 ;AN000; partition is formatted
815 ;
816; EQUATES FOR N_PART_TYPE ; Partition type
817 PUBLIC E_PART_FAT, E_PART_KSAM, E_PART_UNDEF, E_PART_IGNORE ;AN000;
818E_PART_FAT EQU 1 ;AN000; FAT
819E_PART_KSAM EQU 2 ;AN000; KSAM
820E_PART_UNDEF EQU 3 ;AN000; not assigned
821E_PART_IGNORE EQU 4 ;AN000; other partition types i.e not FAT or KSAM
822 ;
823 PUBLIC N_DISK_1, E_DISK_1, N_DISK_2, E_DISK_2 ;AN000;
824 PUBLIC E_DISK_INV, E_DISK_NO_PART, E_DISK_VAL_PART ;AN000;
825N_DISK_1 DW ? ;AN000; first fixed disk status
826N_DISK_2 DW ? ;AN000; second fixed disk status
827E_DISK_1 EQU 1 ;AN000;
828E_DISK_2 EQU 2 ;AN000;
829E_DISK_INV EQU 0 ;AN000; fixed disk not present
830E_DISK_NO_PART EQU 1 ;AN000; fixed disk present : no DOS or EDOS partitions
831E_DISK_VAL_PART EQU 2 ;AN000; fixed disk present : DOS or EDOS partitions exist
832 ;
833 PUBLIC N_DISK_1_S1,N_DISK_2_S1,E_DISK_PRI,E_DISK_EXT_DOS ;AN000;
834 PUBLIC E_DISK_LOG_DRI,E_DISK_EDOS_MEM,E_DISK_FREE_MEM ;AN000;
835N_DISK_1_S1 DW ? ;AN000; detailed status of first fixed drive
836N_DISK_2_S1 DW ? ;AN000; detailed status or second fixed drive
837E_DISK_PRI EQU 01H ;AN000; Primary DOS partition exists
838E_DISK_EXT_DOS EQU 02H ;AN000; Extended DOS partitions exists
839E_DISK_LOG_DRI EQU 04H ;AN000; Logical drives exist in Extended Dos partitions
840E_DISK_EDOS_MEM EQU 08H ;AN000; Free space exists in Extended DOS partition
841E_DISK_FREE_MEM EQU 10H ;AN000; Free disk space exists
842 ;
843 PUBLIC N_DISK_1_S2, N_DISK_2_S2,E_SPACE_NONE,E_SPACE_EDOS,E_SPACE_DISK ;AN000;
844N_DISK_1_S2 DW 0 ;AN000;
845N_DISK_2_S2 DW 0 ;AN000;
846E_SPACE_NONE EQU 0 ;AN000; no free space in EDOS and DISK
847E_SPACE_EDOS EQU 1 ;AN000; free space in EDOS
848E_SPACE_DISK EQU 2 ;AN000; no EDOS but free space in disk
849 ;
850 PUBLIC F_PARTITION, E_PART_DEFAULT, E_PART_USER ;AN000;
851F_PARTITION DW 1 ;AN000; partition size division option
852E_PART_DEFAULT EQU 1 ;AN000; default partition sizes are to be used
853E_PART_USER EQU 2 ;AN000; user will define partition sizes
854 ;
855 PUBLIC I_DESTINATION, E_ENTIRE_DISK, E_PATH_ONLY ;AN000;JW
856I_DESTINATION DW 1 ;AN000; destination on c: disk option JW
857E_ENTIRE_DISK EQU 1 ;AN000; replace files across entire disk JW
858E_PATH_ONLY EQU 2 ;AN000; replace files in dos path only JW
859 ;
860 PUBLIC F_FORMAT, E_FORMAT_FAT, E_FORMAT_NO ;AN000;
861F_FORMAT DW ? ;AN000;
862E_FORMAT_FAT EQU 1 ;AN000; format partition with FAT
863E_FORMAT_NO EQU 2 ;AN000; do not format partition
864 ;
865 PUBLIC N_DISK1_MODE, E_DISK1_INSTALL, E_DISK1_REPLACE ;AN000;
866N_DISK1_MODE DW ? ;AN000; install mode for fixed disk
867E_DISK1_INSTALL EQU 1 ;AN000; install DOS-no partitions
868E_DISK1_REPLACE EQU 2 ;AN000; replace DOS-partitions exist
869 ;
870 PUBLIC DISK_1_TABLE,DISK_1_VAL_ITEM,DISK_1_START,M_DISK_1_ITEMS ;AN000;
871DISK_1_TABLE DB M_DISK_1_ITEMS ;AN000; maximum no of items in table
872DISK_1_VAL_ITEM DB 0 ;AN000; number of valid entries in table
873DISK_1_START DB (100*TYPE DISK_STATUS) DUP (0) ;AN000;
874M_DISK_1_ITEMS EQU ($ - DISK_1_START) / TYPE DISK_STATUS ;AN000;
875 ;
876 PUBLIC DISK_2_TABLE,DISK_2_VAL_ITEM,DISK_2_START,M_DISK_2_ITEMS ;AN000;
877DISK_2_TABLE DB M_DISK_2_ITEMS ;AN000; maximum no of items in table
878DISK_2_VAL_ITEM DB 0 ;AN000; number of valid entries in table
879DISK_2_START DB (100*TYPE DISK_STATUS) DUP (0) ;AN000;
880M_DISK_2_ITEMS EQU ($ - DISK_2_START) / TYPE DISK_STATUS ;AN000;
881 ;
882 PUBLIC N_NAME_PART,N_SIZE_PART,N_STATUS_PART,P_DRIVE_PART,N_TYPE_PART,N_LEVEL1_PART,N_LEVEL2_PART,N_LEVEL3_PART,N_LEVEL4_PART ;AC065;SEH add check for version number ;AN000;
883N_NAME_PART DB 0 ;AN000; partition name
884N_SIZE_PART DW 0 ;AN000; partition size
885N_STATUS_PART DB 0 ;AN000; partition status
886N_TYPE_PART DB 0 ;AN000; partition type
887P_DRIVE_PART DB ' ' ;AN000; drive letter assigned
888N_LEVEL1_PART DB 0 ;AN065; SEH version number (1st part) for DOS 4.00 1st part = blank
889N_LEVEL2_PART DB 0 ;AN065; SEH version number (2nd part) for DOS 4.00 2nd part = 4
890N_LEVEL3_PART DB 0 ;AN065; SEH version number (3rd part) for DOS 4.00 3rd part = .
891N_LEVEL4_PART DB 0 ;AN065; SEH version number (4th part) for DOS 4.00 4th part = 0
892 ;
893 PUBLIC N_DISK_NUM,E_DISK_ROW,E_DISK_COL,E_DRIVE_ROW,E_DRIVE_COL ;AN000;
894N_DISK_NUM DB ? ;AN000; holder for ascii disk number
895E_DISK_ROW EQU 0 ;AN000; row for fixed disk number (0 based)
896E_DISK_COL EQU 19 ;AN000; column for fixed disk number
897E_DRIVE_ROW EQU 0 ;AN000; row for logical drive letter (0 based)
898E_DRIVE_COL EQU 19 ;AN000; column for logical drive letter
899 ;
900 PUBLIC STACK_INDEX, SELECT_STACK, STACK_SIZE ;AN000;
901STACK_INDEX DB 00H ;AN000; no. of entries in stack
902SELECT_STACK DW 50 DUP(?) ;AN000; stack entries
903STACK_SIZE EQU $ - SELECT_STACK ;AN000; size of SELECT stack
904 ;
905 PUBLIC N_DEST,E_DEST_DOS,E_DEST_SHELL ;AN000;
906N_DEST DB ? ;AN000;
907E_DEST_DOS EQU 1 ;AN000;
908E_DEST_SHELL EQU 2 ;AN000;
909 ;
910; Variables which return information if a critical error occurs.
911; INT_24_ERROR returns the error code from the critical error routine
912; INT_24_FLAG is set if a critical error occurs. It is not enough
913; to check if INT_24_ERROR is non-zero, since a value of zero is a critical error.
914PUBLIC INT_24_ERROR, INT_24_FLAG ;AN000;
915INT_24_ERROR DW 0 ;AN000;
916INT_24_FLAG DB 0 ;AN000;
917 ;
918; Area to save the old interrupt 23h vector for restoration when the program is done.
919PUBLIC OLD_INT_23 ;AN074;SEH ctrl-break
920OLD_INT_23 DD 0 ;AN074;SEH
921; Area to save the old interrupt 24h vector for restoration when the program is done.
922PUBLIC OLD_INT_24 ;AN000;
923OLD_INT_24 DD 0 ;AN000;
924; Area to save the old interrupt 2Fh vector for restoration when the program is done.
925PUBLIC OLD_INT_2F ;AN000;
926OLD_INT_2F DD 0 ;AN000;
927 ;
928PUBLIC MEM_SIZE ;AN000;
929MEM_SIZE DW 0 ;AN000;DT installed memory in machine
930 ;
931 PUBLIC FORMAT_WHICH, STARTUP, SHELL ;AN000;
932FORMAT_WHICH DB ? ;AN111; indicator for which disk (720) to format JW
933STARTUP EQU 0 ;AN111; format startup
934SHELL EQU 1 ;AN111; format shell
935 ;
936 PUBLIC DISK_PANEL, SEARCH_FILE ;AN000;JW
937DISK_PANEL DW ? ;AN000;JW Holds panel number for INSERT_DISK
938SEARCH_FILE DW ? ;AN000;JW Holds offset of file to search for
939
940 PUBLIC SUB_ERROR ;AN000;JW Holds error code of sub process
941SUB_ERROR DB ? ;AN000;JW
942
943include msgdcl.inc
944 ;
945DATA ENDS ;AN000;
946 END ;AN000;
diff --git a/v4.0/src/SELECT/VARSTRUC.INC b/v4.0/src/SELECT/VARSTRUC.INC
new file mode 100644
index 0000000..302fdb9
--- /dev/null
+++ b/v4.0/src/SELECT/VARSTRUC.INC
@@ -0,0 +1,65 @@
1CTY_DEF STRUC ;AN000;
2COUNTRY_CODE DW 0 ;AN000; Country Code
3KEYBOARD_VALID DB 0 ;AN000; =0 Keyboard code is not valid
4 ; =1 Keyboard code is valid
5KEYBOARD_CODE DB ' ' ;AN000; Keyboard Code
6PRI_CODEPAGE DW 0 ;AN000; Primary Code Page
7SEC_CODEPAGE DW 0 ;AN000; Secondary Code Page
8NUM_DESIGNATES DW 0 ;AN000; number of designates
9CPSW_STAT DW 0 ;AN000; code page switching recommendation for country
10RESERVED_1 DW 0 ;AN000; reserved byte
11CTY_DEF ENDS ;AN000;
12
13KYB_DEF STRUC ;AN000;
14KEYB_CODE DB ' ' ;AN000; Keyboard code
15KEYB_ALT_VALID DB 0 ;AN000; =0 No alternate Keyboard code
16 ; =1 Alternate Keyboard code present
17KYB_DEF ENDS ;AN000;
18
19ALT_KYB_DEF STRUC ;AN000;
20ALT_KYB DB ' ' ;AN000; keyboard codes which have alternate keyboards
21ALT_KYB_PTR DW 0 ;AN000; pointer to list of alternate keyboards
22ALT_KYB_IDENT DB 0 ;AN000; keyboard code identifier
23ALT_KYB_DEF ENDS ;AN000;
24
25FR_STRUC STRUC ;AN000; Alternate French Keyboard
26FR_KYB DB ' ' ;AN000;
27FR_STRUC ENDS ;AN000;
28
29IT_STRUC STRUC ;AN000; Alternate Italian Keyboard
30IT_KYB DB ' ' ;AN000;
31IT_STRUC ENDS ;AN000;
32
33UK_STRUC STRUC ;AN000; Alternate UK English Keyboard
34UK_KYB DB ' ' ;AN000;
35UK_STRUC ENDS ;AN000;
36
37DISK_STATUS STRUC ;AN000;
38N_PART_NAME DB 0 ;AN000; Partition name
39N_PART_SIZE DW 0 ;AN000; size of above partition in MBytes
40N_PART_STATUS DB 0 ;AN000; Partition status
41P_PART_DRIVE DB ? ;AN000; drive letter assigned to the partition (ASCII)
42N_PART_TYPE DB 0 ;AN000;
43N_PART_LEVEL1 DB 0 ;AN065; SEH version number (1st part) for DOS 4.00 1st part = blank
44N_PART_LEVEL2 DB 0 ;AN065; SEH version number (2nd part) for DOS 4.00 2nd part = 4
45N_PART_LEVEL3 DB 0 ;AN065; SEH version number (3rd part) for DOS 4.00 3rd part = .
46N_PART_LEVEL4 DB 0 ;AN065; SEH version number (4th part) for DOS 4.00 4th part = 0
47DISK_STATUS ENDS ;AN000;
48
49PRINTER_DEF STRUC ;AN000;
50PRINTER_INDEX DW 0 ;AN000; index into SELECT.PRT
51PRINTER_TYPE DB 0 ;AN000; printer type serial/parallel
52PRINTER_DATA_VALID DB 0 ;AN000;
53MODE_PARMS DW 0 ;AN000;
54 DB 40 DUP(?) ;AC000;JW
55CODE_DRIVER DW 0 ;AN000;
56 DB 22 DUP(?) ;AN000;
57CODE_PREPARE DW 0 ;AN000;
58 DB 12 DUP(?) ;AN000;
59GRAPHICS_PARMS DW 0 ;AN000;
60 DB 20 DUP(?) ;AN000;
61PORT_NUMBER DW 0 ;AN000;
62REDIRECTION_PORT DW 0 ;AN000;
63PRINTER_TAB_NUM DW 0 ;AN000; indicates 1st, 2nd, 3rd, etc. printer selected
64PRINTER_DEF ENDS ;AN000;
65
diff --git a/v4.0/src/SELECT/XCOPY.EQU b/v4.0/src/SELECT/XCOPY.EQU
new file mode 100644
index 0000000..d3f932d
--- /dev/null
+++ b/v4.0/src/SELECT/XCOPY.EQU
@@ -0,0 +1,144 @@
1;
2;
3;REVISION HISTORY
4;
5; A005 DCR0201 10/9/87 Incorperate new format for EXTENDED
6; ATTRIBUTES.
7;
8;
9;Equates used for flags
10;
11;*** MY_FLAG ****
12 find_first_flag equ 01h ;AN000;set MY_FLAG by "OR"
13 findfile_flag equ 02h ;AN000;
14 no_more_file equ 04h ;AN000;
15 single_copy_flag equ 08h ;AN000;single copy instead of multi copy
16 visit_parent_flag equ 10h ;AN000;visit parent node
17 found_flag equ 20h ;AN000;found flag - for find subdir
18 missing_link_flag equ 40h ;AN000;
19 is_source_flag equ 80h ;AN000;if set, dealing with source
20 reset_find_first equ 0FEh ;AN000;reset by AND
21 reset_findfile equ 0FDh ;AN000;
22 reset_no_more equ 0FBh ;AN000;
23 reset_visit_parent equ 0EFh ;AN000;
24 reset_found equ 0DFh ;AN000;
25 reset_missing_link equ 0BFh ;AN000;
26 reset_is_source equ 07Fh ;AN000;
27
28;*** FILE_FLAG ***
29 cont_flag equ 01h ;AN000;
30 eof_flag equ 02h ;AN000;
31 big_file_flag equ 04h ;AN000;
32 file_bigger_flag equ 08h ;AN000;
33 created_flag equ 10h ;AN000;
34 reset_cont equ 0FEh ;AN000;
35 reset_eof equ 0FDh ;AN000;
36 reset_big_file equ 0FBh ;AN000;
37 reset_file_bigger equ 0F7h ;AN000;
38 reset_created equ 0EFh ;AN000;
39 reset_readfile equ 0F0h ;AN000;reset FILE_FLAG for read a file
40
41;*** COPY_STATUS ***
42 open_error_flag equ 01h ;AN000;
43 read_error_flag equ 02h ;AN000;
44 create_error_flag equ 04h ;AN000;
45 write_error_flag equ 08h ;AN000;
46 mkdir_error_flag equ 10h ;AN000;
47 chdir_error_flag equ 20h ;AN000;
48 maybe_itself_flag equ 40h ;AN000;source, target starting drv, directory is same.
49 disk_full_flag equ 80h ;AN000;
50 reset_open_error equ 0FEh ;AN000;
51 reset_read_error equ 0FDh ;AN000;
52 reset_create_error equ 0FBh ;AN000;
53 reset_write_error equ 0F7h ;AN000;
54 reset_close_error equ 0EFh ;AN000;
55 reset_chdir_error equ 0DFh ;AN000;
56
57
58;*** ACTION_FLAG ***
59
60 reading_flag equ 01h ;AN000;display "Reading source files..."
61 reset_reading equ 0FEh ;AN000;do not display.
62
63;*** SYS_FLAG ***
64
65 one_disk_copy_flag equ 01h ;AN000;
66 default_drv_set_flag equ 02h ;AN000;default drive has been changed by this program
67 default_s_dir_flag equ 04h ;AN000;source current directory saved.
68 default_t_dir_flag equ 08h ;AN000;target current directory saved.
69 removalble_drv_flag equ 10h ;AN000;
70 sharing_source_flag equ 20h ;AN000;source shared
71 sharing_target_flag equ 40h ;AN000;
72 turn_verify_off_flag equ 80h ;AN000;turn the verify off when exit to dos.
73 reset_default_s_dir equ 0FBh ;AN000;reset default_s_dir_flag
74
75;*** OPTION_FLAG ***
76
77 slash_a equ 01h ;AN000;soft archieve ?
78 slash_d equ 02h ;AN000;date?
79 slash_e equ 04h ;AN000;create empty dir?
80 slash_m equ 08h ;AN000;hard archieve ? (turn off source archieve bit)
81 slash_p equ 10h ;AN000;prompt?
82 slash_s equ 20h ;AN000;walk the tree?
83 slash_v equ 40h ;AN000;verify on?
84 slash_w equ 80h ;AN000;show "Press any key to begin copying" msg)
85 reset_slash_a equ 0FEh ;AN000;turn off soft archieve
86 reset_slash_m equ 0F7h ;AN000;turn off hard archieve
87
88;*** PARM_FLAG ***
89
90 first_parm_flag equ 01h ;AN000;first parm entered in input parm
91 second_parm_flag equ 02h ;AN000;second parm entered.
92 end_of_parm_flag equ 04h ;AN000;end of parm reached
93 copy_onto_itself_flag equ 08h ;AN000;copy onto itself flag
94 cyclic_flag equ 10h ;AN000;cyclic copy flag
95 inv_time_flag equ 20h ;AN000;invalid time
96 inv_date_flag equ 40h ;AN000;invalid date
97 init_error_flag equ 80h ;AN000;critical initialization error. Should abort.
98
99;*** PARM1_FLAG ***
100
101 inv_s_path_flag equ 01h ;AN000;invalid source path (path not found)
102 inv_t_path_flag equ 02h ;AN000;invalid target path
103 s_file_flag equ 04h ;AN000;source filename entered
104 t_file_flag equ 08h ;AN000;target filename entered
105
106;general equates
107
108COLON EQU ":" ;AN000;FOLLOWS DRV LTR IN FULL FILESPEC
109NUL EQU 0 ;AN000;DELIMITER FOR ASCIIZ STRINGS
110SPACE EQU " " ;AN000;TEST FOR DBCS IN 'F D ' MESSAGE
111PARAGRAPH EQU 4 ;AN005;TO CONVERT TO/FROM BYTES/PARA.
112PARA_BOUND EQU 15 ;AN005;BYTES TO ADD FOR PARA. CALCULAT
113FIXD_HD_SIZ EQU 2 ;AN005;PARA COUNT MINIMUM FOR FILE HDR
114SYSPRM_EX_MANY EQU 1 ;AN000;TOO MANY OPERANDS ERR FROM PARSE
115SYSPRM_MISSING_OP EQU 2 ;AN000;MISSING OPERANDS ERR FROM PARSE
116SYSPRM_DUP_SW EQU 3 ;AN004;INVALID SWITCH R-CODE FROM PARSE
117F_APPEND EQU 8000H ;AN000; /X status bit in Append
118NOT_X_APPEND EQU 0 ;AN000; /X NOT ACTIVE
119ACT_APPEND EQU 0 ;AN000;ACTIVE STATUS OF APPEND
120D_V_APPEND EQU 0FFH ;AN000;DOS VERSION OF APPEND
121PSPFCB1_DRV EQU 5Ch ;AN000;
122PSPFCB2_DRV EQU 6Ch ;AN000;
123PSPDTA_PARMLEN EQU 80h ;AN000;
124PSPDTA_PARRSTR EQU 81h ;AN000;
125BASE_OF_ALPHA_DRV EQU 64 ;AN000;1 => A, 2 => B for drive letter
126BASE_UPPER_CASE EQU 11011111B ;AN000;"AND"ed will make it to upper case chr
127ALPHA_A EQU 'A' ;AN000;
128;ALPHA_D EQU 'D' ;moved to XCPYINT.MSG file for translation.
129ALPHA_E EQU 'E' ;AN000;
130;ALPHA_F EQU 'F' ;moved to XCPYINT.MSG file for translation.
131ALPHA_M EQU 'M' ;AN000;
132ALPHA_S EQU 'S' ;AN000;
133ALPHA_P EQU 'P' ;AN000;
134ALPHA_T EQU 'T' ;AN000;
135ALPHA_V EQU 'V' ;AN000;
136ALPHA_W EQU 'W' ;AN000;
137ALPHA_Z EQU 'Z' ;AN000;
138A_dot EQU '.' ;AN000;
139path_delim equ '\' ;AN000;
140drv_delim equ ':' ;AN000;
141;**********************************************************************
142;DOS_LEVEL EQU 0314h ;VERSION 3.20
143;*************************END OF XCOPY.EQU ****************************
144 \ No newline at end of file
diff --git a/v4.0/src/SELECT/XMAINMSG.EQU b/v4.0/src/SELECT/XMAINMSG.EQU
new file mode 100644
index 0000000..b16913b
--- /dev/null
+++ b/v4.0/src/SELECT/XMAINMSG.EQU
@@ -0,0 +1,44 @@
1;*****************************************************************************
2; Message equates
3;*****************************************************************************
4CR equ 13 ;AN000;
5LF equ 10 ;AN000;
6BELL equ 7 ;AN000;
7END_OF_MESSAGE equ 0 ;AN000;
8ALPHA_D equ 'D' ;AN000;
9ALPHA_F equ 'F' ;AN000;
10PARM_SUBST_ONE EQU 01H ;AN000;MSG PARAMETER SUBSTITUTION = 1
11MSG_SER_CLASS EQU 00H ;AN000;MESSAGE SERVICE CLASS (RESERVED)
12EXT_ERR_CLASS EQU 01H ;AN000;DOS EXTENDED ERROR CLASS
13PARSE_ERR_CLASS EQU 02H ;AN000;PARSE ERROR CLASS
14UTILITY_MSG_CLASS EQU 0FFH ;AN000;UTILITY MESSAGE CLASS
15NO_INPUT EQU 00H ;AN000;NO INPUT CHARACTERS
16DOS_KEYB_INP EQU 01H ;AN000;KEYBOARD INPUT EXPECTED
17;******************************************************************************
18; XCOPY (MAIN) messages
19;*****************************************************************************
20; ERROR MESSAGES DEFINITION
21;
22MSG_ACCESS_DENIED EQU 13 ;AN000;
23MSG_TOO_MANY_OPEN EQU 14 ;AN000;
24MSG_GENERAL_FAIL EQU 15 ;AN000;
25MSG_SHARING_VIOL EQU 16 ;AN000;
26MSG_LOCK_VIOL EQU 17 ;AN000;
27MSG_PATH_NOT EQU 18 ;AN000;
28MSG_DISK_FULL EQU 19 ;AN000;
29MSG_COPY_ITSELF EQU 20 ;AN000;
30MSG_UNABLE_CREATE EQU 10 ;AN000;
31MSG_RES_T_NAME EQU 22 ;AN000;
32MSG_FILE_NOT_ERR EQU 23 ;AN000;
33MSG_FILE_CREATE_ERR EQU 24 ;AN000;
34MSG_READING_SOURCE EQU 25 ;AN000;
35MSG_CR_LF_STR EQU 26 ;AN000;
36MSG_FILES_COPIED EQU 27 ;AN000;
37MSG_FILE_NOT_FOUND EQU 28 ;AN000;
38S_PATH_FILE0 EQU 30 ;AN000;
39S_PATH_FILE1 EQU 31 ;AN000;
40DISPLAY_S_PATH EQU 32 ;AN000;
41P_S_PATH_FILE0 EQU 33 ;AN000;
42P_S_PATH_FILE1 EQU 34 ;AN000;
43;******************** END OF XCPYMAIN.MSG **************************************
44 \ No newline at end of file