summaryrefslogtreecommitdiff
path: root/v4.0/src/SELECT/SELECT2.ASM
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/SELECT/SELECT2.ASM')
-rw-r--r--v4.0/src/SELECT/SELECT2.ASM589
1 files changed, 589 insertions, 0 deletions
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;