5 TITLE SERVICES
- DOS
- SELECT
.EXE
;AN000;
6 SUBTTL services
.asm
;AN000;
7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
10 ; SERVICES.ASM: Copyright 1988 Microsoft
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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
48 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
49 SELECT
SEGMENT PARA
PUBLIC 'SELECT' ;AN000;segment for far routine
50 ASSUME
CS:SELECT
;AN000;
52 INCLUDE MACROS
.INC ;AN000;
53 INCLUDE PCEQUATE
.INC ;AN000;
54 INCLUDE CASTRUC
.INC ;AN000;
55 INCLUDE CASVAR
.INC ;AN000;
56 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
67 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
68 EXTRN PCDISPQ_CALL
:NEAR ;AN000;
70 PUBLIC INIT_PQUEUE_CALL
;AN000;
71 INIT_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!
81 MOV WR_REFIELDCNT
,AX ;AN000;
82 MOV QM_OPT2
,AX ;AN000;set options back off...
84 INIT_PQUEUE_CALL ENDP
;AN000;
85 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
90 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
92 PUBLIC PREPARE_PANEL_CALL
;AN000;
93 PREPARE_PANEL_CALL PROC
;AN000;
97 MOV QM_ID
,AX ;AN000;parent PCB number
98 MOV AX, 0ADC0H ;AN000; SELECT PANEL INTERFACE
100 CALL PCDISPQ_CALL
;AN000;update display queue
104 PREPARE_PANEL_CALL ENDP
;AN000;
105 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
112 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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;
120 PUBLIC EXEC_SCROLL_CALL
;AN000;
121 EXEC_SCROLL_CALL PROC
;AN000;
123 MOV WR_SCBID
,AX ;AN000;get current scrolling field ID
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;
131 MOV BX,WR_SCBID
;AN000;
135 MOV AX,BX ;AN000;initialize at list top
137 MOV BX,WR_SCBID
;AN000;
138 CALL ADJUST_UP
;AN000;
141 ESC_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;
146 CALL GET_SCROLL_CALL
;AN000;display and process scroll field
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;
154 CMP ES:[DI]+SCB_KS
,F3
*256 ;AN000;get last keystroke
157 CALL HANDLE_F3
;AN000;
160 ESC_1: PUSH BX ;AN000;
161 MOV BX,WR_SCBID
;AN000;
162 CALL ADJUST_DOWN
;AN000;
164 MOV I_USER_INDEX
,AX ;AN000;
166 MOV AX,ES:[DI]+SCB_KS
;AN000;get last keystroke
167 MOV N_USER_FUNC
,AX ;AN000;
170 EXEC_SCROLL_CALL ENDP
;AN000;
171 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
177 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
178 EXTRN PCSLCTP_CALL
:NEAR ;AN000;
179 EXTRN GET_PCB
:NEAR ;AN000;
181 PUBLIC INIT_SCROLL_CALL
;AN000;
182 INIT_SCROLL_CALL PROC
;AN000;
184 MOV WR_SCBID
,AX ;AN000;get current scrolling field ID
194 OR ES:[DI]+SCB_OPT2
,SCB_ROTN
;AN000;
196 ISC_0: PUSH BX ;AN000;
197 MOV BX,WR_SCBID
;AN000;
198 CALL ADJUST_UP
;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
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
209 MOV BX,WR_SCBID
;AN000;get PCSLCTP field
210 CALL GET_SCB
;AN000;ES:DI points to SCB
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
216 MOV AX,SCROLLOBJID
;AN000; scroll_object type
217 MOV BX,WR_SCBID
;AN000; scroll_id
218 CALL ADD_REFRESH
;AN000;
221 INIT_SCROLL_CALL ENDP
;AN000;
222 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
228 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
229 PUBLIC INIT_SCROLL_W_LIST_CALL
;AN000;
230 INIT_SCROLL_W_LIST_CALL PROC
;AN000;
238 MOV WR_SCBID
,AX ;AN000;get current scrolling field ID
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;
248 PUSH ES:[DI]+SCB_OAPSEG
;AN000;
249 POP ES:[DI]+SCB_OASSEG
;AN000;
252 INIT_SCROLL_W_LIST_CALL ENDP
;AN000;
253 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
259 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
260 PUBLIC INIT_SCROLL_W_NUM_CALL
;AN000;
261 INIT_SCROLL_W_NUM_CALL PROC
;AN000;
263 PUSH AX ;AN000;save current scroll field ID
265 MOV AX,CX ;AN000;initialize at list top
266 CALL ADJUST_UP
;AN000;
268 POP BX ;AN000;restore scroll field ID
271 POP ES:[DI]+SCB_NUMELE
;AN000;
274 INIT_SCROLL_W_NUM_CALL ENDP
;AN000;
275 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
281 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
282 PUBLIC SET_SCROLL_COLOUR
;AN000;
283 SET_SCROLL_COLOUR PROC
;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
289 SET_SCROLL_COLOUR ENDP
;AN000;
290 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
296 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
298 PUBLIC SET_SCROLL_CALL
;AN000;
299 SET_SCROLL_CALL PROC
;AN000;
301 MOV WR_SCBID
,AX ;AN000;get current scrolling field ID
308 PUSH ES:[DI]+SCB_OPT1
;AN000;
309 PUSH ES:[DI]+SCB_OPT2
;AN000;
311 OR ES:[DI]+SCB_OPT1
,SCB_RD
;AN000;
315 OR ES:[DI]+SCB_OPT2
,SCB_ROTN
;AN000;
317 SSC_0: PUSH BX ;AN000;
318 MOV BX,WR_SCBID
;AN000;
319 CALL ADJUST_UP
;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
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
330 MOV BX,WR_SCBID
;AN000;get PCSLCTP field
331 CALL GET_SCB
;AN000;ES:DI points to SCB
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 **************
338 AND ES:[DI]+SCB_OPT1
,NOT SCB_UKS
;AN000;
339 CALL PCSLCTP_CALL
;AN000;display scroll field
341 POP ES:[DI]+SCB_OPT2
;AN000;
342 POP ES:[DI]+SCB_OPT1
;AN000;
345 SET_SCROLL_CALL ENDP
;AN000;
346 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
353 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
354 EXTRN PCPANEL_CALL
:NEAR ;AN000;
356 PUBLIC DISPLAY_PANEL_CALL
;AN000;
357 DISPLAY_PANEL_CALL PROC
;AN000;
359 MOV AX,0ADC0H ;AN000;
361 XOR AX,AX ;AN000;turn break option OFF
362 CMP WR_REFIELDCNT
,0 ;AN000;
364 INC AX ;AN000;turn break option ON
365 DP_10: CALL PCPANEL_CALL
;AN000;display panel
367 DISPLAY_PANEL_CALL ENDP
;AN000;
368 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
372 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
373 EXTRN GET_KEY
:NEAR ;AN000;
375 PUBLIC GET_FUNCTION_CALL
;AN000;
376 GET_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;
382 GFC_0: CALL GET_KEY
;AN000;
384 MOV AX,INC_KS
;AN003;GHG
385 MOV N_USER_FUNC
,AX ;AN003;GHG
387 CMP AX,F3
*256 ;AN003;GHG
390 CALL HANDLE_F3
;AN003;GHG
392 MOV N_USER_FUNC
,F3
*256 ;AN003;GHG set last keystroke to exit!
395 GET_FUNCTION_CALL ENDP
;AN000;
396 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
404 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
405 EXTRN CURSOROFF
:NEAR ;AN000;
406 EXTRN GET_ICB
:NEAR ;AN000;
407 EXTRN GET_INPUT_CALL
:NEAR ;AN000;
409 PUBLIC GET_STRING_CALL
;AN000;
410 GET_STRING_CALL PROC
;AN000;
412 CALL CLEAR_USER_STRING
;AN000;
414 MOV IN_ICBID
,AX ;AN000; process input field x
421 MOV WR_DRETLEN
,CX ;AN000; SET RETURN KEYS
422 MOV WR_DRETOFF
,DX ;AN000;
424 MOV WR_DRETSEG
,AX ;AN000;
426 MOV ES:[DI]+ICB_WIDTH
,SI ;AN000;GHG
428 ADD AX,ES:[DI]+ICB_COL
;AN000;GHG
432 SUB AX,ES:[DI]+ICB_COL
;AN000;GHG
433 MOV ES:[DI]+ICB_WIDTH
,AX ;AN000;GHG
435 MOV ES:[DI]+ICB_FIELDLEN
,SI ;AN000; size specified by si
437 MOV ES:[DI]+ICB_DEFLEN
,AX ;AN000;
439 MOV ES:[DI]+ICB_CURCHAR
,AX ;AN000;
443 MOV ES:[DI]+ICB_DEFOFF
,AX ;AN000;
445 MOV ES:[DI]+ICB_DEFSEG
,AX ;AN000;
447 LEA AX,P_USER_STRING
;AN000;
448 MOV ES:[DI]+ICB_FIELDOFF
,AX ;AN000;
450 MOV ES:[DI]+ICB_FIELDSEG
,AX ;AN000;
452 PUSH CRD_CCBVECOFF
;AN000;
453 PUSH CRD_CCBVECSEG
;AN000;
454 POP IN_CCBVECSEG
;AN000;
455 POP IN_CCBVECOFF
;AN000;
457 GSC_0: CALL GET_INPUT_CALL
;AN000;
458 MOV AX,ES:[DI]+ICB_KEYRET
;AN000;
459 MOV N_USER_FUNC
,AX ;AN000;
461 CMP AX,F3
*256 ;AN000;get last keystroke
464 CALL HANDLE_F3
;AN000;
466 MOV N_USER_FUNC
,F3
*256 ;AN000;set last keystroke to exit!
468 GSC_1:;;AN000;MOV AX,ES:[DI]+ICB_ENDBYTE ;
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;
474 CALL CURSOROFF
;AN000;
477 GET_STRING_CALL ENDP
;AN000;
478 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
484 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
485 PUBLIC INIT_STRING_CALL
;AN000;
486 INIT_STRING_CALL PROC
;AN000;
488 CALL CLEAR_USER_STRING
;AN000;
490 MOV IN_ICBID
,AX ;AN000; process input field x
497 MOV ES:[DI]+ICB_WIDTH
,SI ;AN000;GHG
499 ADD AX,ES:[DI]+ICB_COL
;AN000;GHG
503 SUB AX,ES:[DI]+ICB_COL
;AN000;GHG
504 MOV ES:[DI]+ICB_WIDTH
,AX ;AN000;GHG
506 ISC_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;
510 MOV ES:[DI]+ICB_CURCHAR
,AX ;AN000;
514 MOV ES:[DI]+ICB_DEFOFF
,AX ;AN000;
516 MOV ES:[DI]+ICB_DEFSEG
,AX ;AN000;
518 LEA AX,P_USER_STRING
;AN000; SETUP RETURN STRING ADDRESS
519 MOV ES:[DI]+ICB_FIELDOFF
,AX ;AN000;
521 MOV ES:[DI]+ICB_FIELDSEG
,AX ;AN000;
523 PUSH CRD_CCBVECOFF
;AN000;
524 PUSH CRD_CCBVECSEG
;AN000;
525 POP IN_CCBVECSEG
;AN000;
526 POP IN_CCBVECOFF
;AN000;
528 MOV AX,INPUTOBJID
;AN000; input_object type
529 MOV BX,IN_ICBID
;AN000; scroll_id
530 CALL ADD_REFRESH
;AN000;
533 INIT_STRING_CALL ENDP
;AN000;
534 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
540 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
541 ENTER_KEY
DB 13 ;AN000;
542 ENTER_KEY_LEN EQU
($-ENTER_KEY
) ;AN000;
544 PUBLIC SET_STRING_CALL
;AN000;
545 SET_STRING_CALL PROC
;AN000;
547 CALL CLEAR_USER_STRING
;AN000;
549 MOV IN_ICBID
,AX ;AN000; process input field x
556 MOV ES:[DI]+ICB_WIDTH
,SI ;AN000;GHG
558 ADD AX,ES:[DI]+ICB_COL
;AN000;GHG
562 SUB AX,ES:[DI]+ICB_COL
;AN000;GHG
563 MOV ES:[DI]+ICB_WIDTH
,AX ;AN000;GHG
565 SSC_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;
569 MOV ES:[DI]+ICB_CURCHAR
,AX ;AN000;
573 MOV ES:[DI]+ICB_DEFOFF
,AX ;AN000;
575 MOV ES:[DI]+ICB_DEFSEG
,AX ;AN000;
577 LEA AX,P_USER_STRING
;AN000; SETUP RETURN STRING ADDRESS
578 MOV ES:[DI]+ICB_FIELDOFF
,AX ;AN000;
580 MOV ES:[DI]+ICB_FIELDSEG
,AX ;AN000;
582 MOV WR_DRETLEN
,ENTER_KEY_LEN
;AN000; SET AUTO RETURN KEYS
583 LEA AX,ENTER_KEY
;AN000;
584 MOV WR_DRETOFF
,AX ;AN000;
586 MOV WR_DRETSEG
,AX ;AN000;
588 PUSH CRD_CCBVECOFF
;AN000;
589 PUSH CRD_CCBVECSEG
;AN000;
590 POP IN_CCBVECSEG
;AN000;
591 POP IN_CCBVECOFF
;AN000;
593 PUSH ES:[DI]+ICB_OPT2
;AN000;
594 OR ES:[DI]+ICB_OPT2
,ICB_UFK
;AN000;
595 MOV ES:[DI]+ICB_KEYRET
,ENTER;AN000;
597 CALL GET_INPUT_CALL
;AN000;
599 POP ES:[DI]+ICB_OPT2
;AN000;
601 CALL CURSOROFF
;AN000;
604 SET_STRING_CALL ENDP
;AN000;
605 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
611 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
612 PUBLIC INIT_SCROLL_STATUS_CALL
;AN000;
613 INIT_SCROLL_STATUS_cALL PROC
;AN000;
618 MOV ES:[DI]+SCB_SELOFF
,SI ;AN000;
620 MOV ES:[DI]+SCB_SELSEG
,AX ;AN000;
623 INIT_SCROLL_STATUS_CALL ENDP
;AN000;
624 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
630 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
631 EXTRN PCMBEEP_CALL
:NEAR ;AN000;
633 PUBLIC TOGGLE_SUPPORT_CALL
;AN000;
634 TOGGLE_SUPPORT_CALL PROC
;AN000;
639 MOV AX,[SI+BX] ;AN000;
640 CMP AX,SCB_ACTIVEON
;AN000;
642 MOV AX,SCB_SELECTON
;AN000;
643 MOV [SI+BX],AX ;AN000;
646 TS_1: CMP AX,SCB_SELECTON
;AN000;
648 MOV AX,SCB_ACTIVEON
;AN000;
649 MOV [SI+BX],AX ;AN000;
652 TS_3: CALL PCMBEEP_CALL
;AN000;
655 TOGGLE_SUPPORT_CALL ENDP
;AN000;
656 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
660 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
661 PUBLIC UNPAD_USER_STRING
;AN000;
662 UNPAD_USER_STRING PROC
;AN000;
665 LEA SI,P_USER_STRING
;AN000;
666 MOV CX,S_USER_STRING
;AN000;
671 UUS_1: CMP [SI],AL ;AN000;
676 UUS_3: MOV S_USER_STRING
,CX ;AN000;
680 UNPAD_USER_STRING ENDP
;AN000;
681 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
686 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
687 PUBLIC CLEAR_USER_STRING
;AN000;
688 CLEAR_USER_STRING PROC
;AN000;
692 LEA SI,P_USER_STRING
;AN000;
696 CUS_1: MOV [SI],AL ;AN000;
704 CLEAR_USER_STRING ENDP
;AN000;
705 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
711 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
712 PUBLIC CHECK_MIN_MAX
;AN000;
713 CHECK_MIN_MAX PROC
;AN000;
720 CMM_3: CALL PCMBEEP_CALL
;AN000;
723 CHECK_MIN_MAX ENDP
;AN000;
724 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
728 ; LEA BX,P_USER_STRING
730 ; MOV S_USER_STRING,AX
732 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
735 PUBLIC CONVERT_ASCII
;AN000;
736 CONVERT_ASCII PROC
;AN000;
741 OR AX,AX ;AN000;test if input value is 0
746 MOV DX,'0' ;AN000;if input=0, then put '0' on stack
750 CA_1: OR AX,AX ;AN000;
760 CA_5: MOV AX,CX ;AN000;
764 CA_6: POP [BX] ;AN000;
771 CONVERT_ASCII ENDP
;AN000;
772 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
774 ; LEA BX,P_USER_STRING
775 ; MOV CX,S_USER_STRING
776 ; CALL CONVERT_NUMERIC
778 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
779 PUBLIC CONVERT_NUMERIC
;AN000;
780 CONVERT_NUMERIC PROC
;AN000;
790 CN_3: MUL TEN
;AN000;
798 CN_4: MOV CL,'0' ;AN000;
799 CN_5: SUB CL,'0' ;AN000;
810 CONVERT_NUMERIC ENDP
;AN000;
811 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
816 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
817 PUBLIC ADD_REFRESH
;AN000;
818 ADD_REFRESH PROC
;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;
826 MOV [SI+2],BX ;AN000;
827 CMP WR_REFIELDCNT
,WR_MAXREFID
;AN000;
829 INC WR_REFIELDCNT
;AN000;
830 AD_10: POP SI ;AN000;
832 ADD_REFRESH ENDP
;AN000;
833 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
836 ; DX,maximum DESTINATION buffer size
839 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
840 PUBLIC RETURN_STRING_CALL
;AN000;
841 RETURN_STRING_CALL PROC
;AN000;
842 PUSHH
<ES,DI,DS,SI,BX,CX> ;AN000;
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
851 MOV CX,DX ;AN000;only copy as much as possible
852 RS_10: MOV DI,ES:[DI]+ICB_DEFOFF
;AN000;
866 POPP
<CX,BX,SI,DS,DI,ES> ;AN000;
868 RETURN_STRING_CALL ENDP
;AN000;
869 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
876 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
877 PUBLIC INIT_CHAR_CALL
;AN000;JW
878 INIT_CHAR_CALL PROC
;AN000;JW
881 CALL GET_PCB
;AN000;JW
882 MUL ES:[DI]+PCB_WIDTH
;AN000;JW
884 MOV SI,ES:[DI]+PCB_EXPANDOFF
;AN000;JW
886 PUSH ES:[DI]+PCB_EXPANDSEG
;AN000;JW
889 MOV ES: BYTE PTR [SI],DL ;AN000;JW
892 INIT_CHAR_CALL ENDP
;AN000;JW
893 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
896 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
897 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;