; GETARG: TO RETRIEVE ADDRESSES OR VALUES FROM AN ARGUMENT LIST ; IN A BASIC "CALL" STATEMENT. ; ON ENTRY: R5 POINTS TO A USER TABLE FOR RESULT TO BE PLACED IN ; R1 POINTS TO CURRENT POS IN ARG LIST (MUST BE "," OR "(" ) ; R0 POINTS TO LIST OF BYTE ARG TYPES (TERM. BY 0 OR > 4) ; ON RETURN: R5 POINTS TO THE FIRST WORD PAST THE RETURNED DATA ; R1 POINTS TO NEXT CHAR FOLLOWING LAST ARG JUST RETURNED ; R0 POINTS TO FIRST BYTE AFTER TERMINATING BYTE ; ARG TYPES IN R0 LIST: ; 1 = INPUT NUMERIC EXPRESSION (2-WORD FLOATING POINT) ; ; 2 = OUTPUT NUMERIC TARGET (5 WORDS) ; 2-WORD FP VALUE ; 2-WORD FP OFFSET ; 1-WORD OFFSET TO HEADER ; ; 3 = INPUT STRING EXPRESSION (2 WORDS) LEN, ADDRESS ; 4 = OUTPUT STRING TARGET (5 WORDS) ; 1-WORD ADDRESS ; 1-WORD LENGTH ; 2-WORD FP OFFSET ; 1-WORD HEADER ADDRESS ; ; FOR STANDARD VAR, OFFSET IS OFFSET FROM STUDAT ; FOR VIRTUAL VAR, OFFSET IS OFFSET FROM START OF FILE ; ; 0 OR > 4 = LIST TERMINATOR ; ALL OTHER REGISTERS WILL BE USED AND DESTROYED ; ; ; GTRGPI: ENABLE POSITION INDEPENDENT ARGUMENT RETRIEVAL FOR USER LOADED ; ROUTINES. THE ARGUMENT TYPE LIST FOLLOWS THE CODE IN A JSR R4,GTPRI ; INSTRUCTION. THE ARGUMENT LIST ITSELF IS CONSTRUCTED ON THE STACK ; AND POINTED TO BY SP ON RETURN. ; ; ON ENTRY: ; R4 POINTS TO ARG TYPE LIST (VIA JSR R4,@#GTRGPI) ; OLD R4 ON STACK (WILL BE POPPED) ; ON RETURN: ; SP POINTS TO ARG LIST (ON STACK - TO BE REMOVED BY CALLING ROUTINE) ; OTHER REGISTERS: POTENTIALLY ALL ; ; ; NSTORE: STORE AWAY A VALUE FROM AC0 INTO A LOCATION ; STORED IN A TABLE SUCH AS THAT FILLED IN BY GETARG. ; ON CALL: R5 CONTAINS POINTER TO ADDRESS ; AC0 CONTAINS VALUE TO BE STORED ; ON RETURN: NOTHING CHANGED ; REGISTERS USED: R0, AC1 ; ; SSTORE: TAKE A STRING DESCRIBED BY LEN IN R4 AND ADDRESS IN R3 ; AND STORE IT INTO A STRING VARIABLE WHOSE TABLE ENTRY IS ; POINTED TO BY R5. ; ; ON CALL: R3 = ADDRESS OF STRING TO BE STORED ; R4 = LENGTH OF STRING TO BE STORED ; R5 = POINTER TO OUTPUT STRING TABLE ENTRY ; ; ON RETURN: R3 POINTS PAST END OF STRING ; R4 = 0 ; R5 UNCHANGED ; ; OTHER REGISTERS USED: R0,R2 (ALL BUT R1) ; ARGCNT: COUNT ARGUMENTS ROUTINE ; ON ENTRY: R1 POINTS TO LEADING OPEN PAREN "(" ; ON EXIT: R1 UNCHANGED ; R0 CONTAINS COUNT OF ARGUMENTS UP TO ")" IN THE LIST ; QUOTED STRINGS AND SUBSCRIPTS ARE ACCOUNTED FOR ; OTHER REGISTERS USED: R2 ; NOTE: AN END OF LINE WILL TERMINATE THE SCAN IRRESPECTIVE OF ; ENCLOSING QUOTES AS LONG AS IT IS USED AS THE INTERNAL ; LINE DELIMITER (S.EOL1 OR S.EOL2)