home *** CD-ROM | disk | FTP | other *** search
-
- *SELECT CASE TO RUN BY MATCHING VALUES
- *
- * SELECT A,(V0,V1,V2,...,VN-1),(L0,L1,L2,...,LN)
- * [RETURNS HERE]
- * .
- * .
- * .
- *L0 [DO THIS WHEN A=V0]
- * RET
- *L1 [DO THIS WHEN A=V1] V0-VN ARE CONSTANTS
- * RET
- *L2 [DO THIS WHEN A=V2] A IS A USER VARIABLE
- * RET
- * . L0-LN ARE LABELS
- * .
- * .
- *LN-1 [DO THIS WHEN A=VN-1]
- * RET
- *LN [DO THIS WHEN A NOT ANY VN]
- * RET
-
- SELECT $MACRO A,C,D,B
- $IF B.L=0 GET TEMP
- $ASG 'XR0' TO B.S
- $ENDIF
- LAC :A:,0 LOAD SELECT :A:
- CALL SEL$ CALL MATCHR
- REF SEL$
- DATA :C.V: NUMBER OF ITEMS
- DATA :C: ITEM LIST
- SACL :B:,0 SAVE INDEX IN TEMP
- $VAR L
- $ASG '$$LAB' TO L.S
- $ASG L.SV+1 TO L.SV GET A LABEL
- CALL L$:L.SV: CALL OVER COMPTD GOTO LIST
- DATA :D: LABEL LIST
- L$:L.SV: POP POP LABEL LIST ADDR
- ADD :B:,0 ADD INDEX
- TBLR :B: READ LABEL
- LAC :B:,0 TO AC
- CALA GOT TO IT
- $END