home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / macrosrc.arc / SELECT.ASM < prev    next >
Encoding:
Assembly Source File  |  1983-11-17  |  1.2 KB  |  43 lines

  1.  
  2. *SELECT CASE TO RUN BY MATCHING VALUES
  3. *
  4. *      SELECT A,(V0,V1,V2,...,VN-1),(L0,L1,L2,...,LN)
  5. *      [RETURNS HERE]
  6. *         .
  7. *         .
  8. *         .
  9. *L0    [DO THIS WHEN A=V0]
  10. *      RET
  11. *L1    [DO THIS WHEN A=V1]    V0-VN ARE CONSTANTS
  12. *      RET
  13. *L2    [DO THIS WHEN A=V2]    A IS A USER VARIABLE
  14. *      RET
  15. *         .                   L0-LN ARE LABELS
  16. *         .
  17. *         .
  18. *LN-1  [DO THIS WHEN A=VN-1]
  19. *      RET
  20. *LN    [DO THIS WHEN A NOT ANY VN]
  21. *      RET
  22.  
  23. SELECT $MACRO    A,C,D,B
  24.        $IF  B.L=0             GET TEMP
  25.        $ASG 'XR0' TO B.S
  26.        $ENDIF
  27.        LAC  :A:,0             LOAD SELECT :A:
  28.        CALL SEL$              CALL MATCHR
  29.        REF  SEL$
  30.        DATA :C.V:             NUMBER OF ITEMS
  31.        DATA :C:               ITEM LIST
  32.        SACL :B:,0             SAVE INDEX IN TEMP
  33.        $VAR L
  34.        $ASG '$$LAB' TO L.S
  35.        $ASG L.SV+1 TO L.SV    GET A LABEL
  36.        CALL L$:L.SV:          CALL OVER COMPTD GOTO LIST
  37.        DATA :D:               LABEL LIST
  38. L$:L.SV: POP                  POP LABEL LIST ADDR
  39.        ADD  :B:,0             ADD INDEX
  40.        TBLR :B:               READ LABEL
  41.        LAC  :B:,0             TO AC
  42.        CALA                   GOT TO IT
  43.        $END