1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
PAGE 55,132 ;AN000;
NAME SELCHILD ;AN000;
TITLE SELCHILD - CHILD processing for SELECT.EXE;AN000;
SUBTTL selchild.asm ;AN000;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; HANDLE_CHILDREN
;
; Entry:
;
;
;
; Exit:
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EXTRN QM_ID:WORD ;AN000;
EXTRN QM_OPT1:WORD ;AN000;
EXTRN QM_ACTIVEPAN:WORD ;AN000;
;
SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine
ASSUME CS:SELECT ;AN000;
;
EXTRN GET_PCB:NEAR ;AN000;
EXTRN PCDISPQ_CALL:NEAR ;AN000;
;
INCLUDE PCEQUATE.INC ;AN000;
INCLUDE CASTRUC.INC ;AN000;
INCLUDE MACROS.INC ;AN000;
;
PUBLIC HANDLE_CHILDREN ;AN000;
HANDLE_CHILDREN PROC ;AN000;
PUSHH <AX,BX,CX,DI,ES> ;AN000;
MOV QM_OPT1,QM_PUSHCHD ;AN000; push child panels
;
MOV BX,QM_ACTIVEPAN ;AN000;
CALL GET_PCB ;AN000; get panel control block
; for active parent panel
MOV CX,ES:[DI]+PCB_CHILDNUM ;AN000;
OR CX,CX ;AN000;
JZ HC_1 ;AN000;
;
PUSH ES:[DI]+PCB_CHILDSEG ;AN000; get address of first child panel
PUSH ES:[DI]+PCB_CHILDOFF ;AN000;
POP DI ;AN000;
POP ES ;AN000;
;
HC_0: MOV AX,ES:[DI]+CHD_PCB ;AN000;
MOV QM_ID,AX ;AN000;
PUSHH <ES,DI> ;AN000;
CALL PCDISPQ_CALL ;AN000; push next child on the stack
POPP <DI,ES> ;AN000;
;
ADD DI,TYPE CHD_PB ;AN000; get next child control block
LOOP HC_0 ;AN000;
;
HC_1: POPP <ES,DI,CX,BX,AX> ;AN000;
RET ;AN000;
HANDLE_CHILDREN ENDP ;AN000;
SELECT ENDS ;AN000;
END ;AN000;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|