; TSTARG.M68
; PROGRAM TO REPORT THE ARGUMENT PARAMETERS SENT FROM BASIC BY A XCALL
;
; WRITTEN BY JOHN KEYS  1/18/83 FOR AM..../L
;
;       @(A3)   -> COUNT OF ARGUMENTS   (WORD)
; BLOCK 2(A3)   -> TYPE OF ARGUMENT     (WORD)          [14,26,40...]
;       4(A3)   -> ADDRESS OF ARGUMENT  (LONG-WORD)     [16,30,42...]
;       10(A3)  -> SIZE OF ARGUMENT     (LONG-WORD)     [22,34,46...]
;         repeat block for count arguments
;
;       10 MAP1 A,B,1
;       20 MAP1 B,S,10
;       30 MAP1 C,S,20
;       40 MAP1 D,F,6,0
;       50 MAP1 E,X,11
;       60
;       70      ? : XCALL TSTARG
;       80      ? : XCALL TSTARG,A
;       90      ? : XCALL TSTARG,B
;       100     ? : XCALL TSTARG,D
;       110     ? : XCALL TSTARG,E
;       120     ? : XCALL TSTARG,F
;       130     ? : XCALL TSTARG,A,B,C,D,F
;       200 END
;

       SEARCH SYS
       SEARCH SYSSYM
       SEARCH TRM

       OBJNAM  TSTARG.SBR

       VMAJOR=1
       VMINOR=0
       VEDIT=100.

       PHDR    -1,0,PH$REE!PH$REU      ; MUST BE LOGGED IN

       TYPESP  <  COUNT:>              ; DISPALY
       MOVW    @A3,D1                  ; THE COUNT OF ARGUMENTS
       DCVT    6,OT$TRM!OT$ZER         ; OUTPUT FORMAT
       CRLF
       CRLF
       MOVW    D1,D2                   ; STORE COUNT OF ARGUMENTS FOR LOOP
       JEQ     NOARG                   ; IF NO ARGUMENTS SKIP THE REST
       CLR     D4                      ; CLEAR THE INDEX REGISTER = 0

REPEAT: TYPESP  <   TYPE:>              ; DISPLAY
       MOVW    2(A3)[D4],D1            ; TYPE-OFFSET + INDEX[D4] IN A3
                                       ; [     2     +     D4  ]   (A3)
       DCVT    12,OT$TRM!OT$ZER        ; OUTPUT FORMAT
       CALL    CHKTYP                  ; DECODE THE TYPE
       CRLF

       TYPESP  <ADDRESS:>              ; DISPLAY
       MOVL    4(A3)[D4],D1            ; ADDRESS-OFFSET + INDEX[D4] IN A3
                                       ; [     4        +    D4   ]   (A3)
       DCVT    12,OT$TRM!OT$ZER        ; OUTPUT FORMAT
       TYPE    <  (OCTAL:>             ; DISPLAY
       OCVT    13,OT$TRM!OT$ZER        ; OUTPUT FORMAT (  OCTAL  )
       TYPE    )
       CRLF

       TYPESP  <   SIZE:>              ; DISPLAY
       MOVL    10(A3)[D4],D1           ; SIZE-OFFSET + INDEX[D4] IN A3
                                       ; [    10     +    D4   ]   (A3)
       DCVT    12,OT$TRM!OT$ZER        ; OUPUT FORMAT
       CRLF
       CRLF
       ADD     #12,D4                  ; ADD 10 TO INDEX-REGISTER [D4] I.E. THERE ARE
       SOB     D2,REPEAT               ; 10 BYTES/ARGUMENT-BLOCK PASSED BY THE
       RTN                             ; THE PROGRAM

CHKTYP: CMPB    D1,#6                   ; BINARY ARGUMENT TYPE DECODER
       BEQ     BIN                     ; - YES
       CMPB    D1,#4                   ; FLOAT?
       BEQ     FLO                     ; - YES
       CMPB    D1,#2                   ; STRING?
       BEQ     STR                     ; - YES
UNF:    TYPE    <  Unformated>          ; MUST BE UNFORMATED
       RTN
STR:    TYPE    <  String>
       RTN
FLO:    TYPE    <  Foating point>
       RTN
BIN:    TYPE    <  Binary>
       RTN

NOARG:  TYPECR  <%% No arguments were passed %%>
       CRLF
       RTN

       END