; 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