; 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 ; 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 .