summaryrefslogtreecommitdiff
path: root/v4.0/src/SELECT/SERVICES.ASM
diff options
context:
space:
mode:
authorGravatar Mark Zbikowski2024-04-25 21:24:10 +0100
committerGravatar Microsoft Open Source2024-04-25 22:32:27 +0000
commit2d04cacc5322951f187bb17e017c12920ac8ebe2 (patch)
tree80ee017efa878dfd5344b44249e6a241f2a7f6e2 /v4.0/src/SELECT/SERVICES.ASM
parentMerge pull request #430 from jpbaltazar/typoptbr (diff)
downloadms-dos-main.tar.gz
ms-dos-main.tar.xz
ms-dos-main.zip
MZ is back!HEADmain
Diffstat (limited to 'v4.0/src/SELECT/SERVICES.ASM')
-rw-r--r--v4.0/src/SELECT/SERVICES.ASM899
1 files changed, 899 insertions, 0 deletions
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;