Prev: 10418 Up: Map Next: 10646
10577: THE 'STACK FUNCTION ARGUMENT' SUBROUTINE
This subroutine is called by LOOK_VARS when DEFADD-hi is non-zero, to make a search of the arguments area of a DEF FN statement, before searching in the variables area. If the variable is found in the DEF FN statement, then the parameters of a string variable are stacked and a signal is given that there is no need to call STK_VAR. But it is left to S_LETTER to stack the value of a numerical variable at 9946 in the usual way.
STK_F_ARG 10577 LD HL,(23563) Point to the first character in the arguments area (DEFADD) and put it into A.
10580 LD A,(HL)
10581 CP ")" Is it a ')'?
10583 JP Z,V_RUN_SYN Jump to search the variables area.
SFA_LOOP 10586 LD A,(HL) Get the next argument in the loop.
10587 OR 96 Set bits 5 and 6, assuming a simple numeric variable; copy it to B.
10589 LD B,A
10590 INC HL Point to the next code.
10591 LD A,(HL) Put it into the A register.
10592 CP 14 Is it the 'number marker' code, 14?
10594 JR Z,SFA_CP_VR Jump if so: numeric variable.
10596 DEC HL Ensure that HL points to the character, not to a space or control code.
10597 CALL FN_SKPOVR
10600 INC HL HL now points to the 'number marker'.
10601 RES 5,B Reset bit 5 of B: string variable.
SFA_CP_VR 10603 LD A,B Get the variable name into A.
10604 CP C Is it the one we are looking for?
10605 JR Z,SFA_MATCH Jump if it matches.
10607 INC HL Now pass over the 5 bytes of the floating-point number or string parameters to get to the next argument.
10608 INC HL
10609 INC HL
10610 INC HL
10611 INC HL
10612 CALL FN_SKPOVR Pass on to the next character.
10615 CP ")" Is it a ')'?
10617 JP Z,V_RUN_SYN If so, jump to search the variables area.
10620 CALL FN_SKPOVR Point to the next argument.
10623 JR SFA_LOOP Jump back to consider it.
A match has been found. The parameters of a string variable are stacked, avoiding the need to call STK_VAR.
SFA_MATCH 10625 BIT 5,C Test for a numeric variable.
10627 JR NZ,SFA_END Jump if the variable is numeric; SCANNING will stack it.
10629 INC HL Point to the first of the 5 bytes to be stacked.
10630 LD DE,(23653) Point DE to STKEND.
10634 CALL duplicate Stack the 5 bytes.
10637 EX DE,HL Point HL to the new position of STKEND, and reset the system variable.
10638 LD (23653),HL
SFA_END 10641 POP DE Discard the LOOK_VARS pointers (second and first character pointers).
10642 POP DE
10643 XOR A Return from the search with both the carry and zero flags reset - signalling that a call STK_VAR is not required.
10644 INC A
10645 RET Finished.
Prev: 10418 Up: Map Next: 10646