C SET 0 M SET 0 F SET 0 ;TYPE ;$STRING0 = STRING 0; ;$STRING80= STRING 80; ;$STRING255 = STRING 255; ; ;VAR ;NUMBER:INTEGER; ;DATA:$STRING80; ; ;PROCEDURE SETLENGTH(VARX:$STRING0;Y:INTEGER);EXTERNAL; EXTD L156,SETLENGT ;FUNCTION LENGTH(X:$STRING255):INTEGER;EXTERNAL; EXTD L157,LENGTH ; ;{the following function converts a string to an integer. ;as written, the string has a maximum size of 80 char. ;requires pascal/z's external function: length} ; ;FUNCTION STRTOINT (STR:$STRING80):INTEGER; ;LABEL 1; ; ;VAR ;I,LEN,SIGN,VAL:INTEGER; ; ;BEGIN L158 NAME STRTOINT ENTRY STRTOINT STRTOINT: ENTR D,2,8 ;VAL:=0; STMT D,1 MOV -6(IX),A MOV -7(IX),A ;LEN:=LENGTH(STR); STMT D,2 PUSH IX POP H LXI B,88 DADD B SPSH S,255 CALL L157 STMT M,2 MOV -2(IX),D MOV -3(IX),E ;I:=1; STMT D,3 MOV 0(IX),A MVI -1(IX),1 ;SIGN:=1; STMT D,4 MOV -4(IX),A MVI -5(IX),1 ; ;IF LEN = 0 THEN GOTO 1; STMT D,5 MOV L,-3(IX) MOV H,-2(IX) MOV D,A MOV E,A DSB1 D,0 JNZ L191 STMT D,6 CTRL M,6 JMP L159 L191 ; ;REPEAT STMT D,7 ; ; CASE STR[I] OF L201 STMT D,8 MOV L,-1(IX) MOV H,0(IX) RCHK H,1,80 XCHG LXI H,88 ADDR IX ; ; '-' : SIGN:=-1; MOV D,A MOV E,M MOV A,E CMPI D,45 JNZ L216 L218 XRA A STMT D,9 MVI -4(IX),255 MVI -5(IX),255 ; '.' : GOTO 1; JMP L217 L216 CMPI D,46 JNZ L231 L232 XRA A STMT D,10 CTRL M,10 JMP L159 ; ; '0','1','2','3','4','5','6','7','8','9': JMP L217 L231 CMPI D,48 JRZ L242 CMPI D,49 JRZ L242 CMPI D,50 JRZ L242 CMPI D,51 JRZ L242 CMPI D,52 JRZ L242 CMPI D,53 JRZ L242 CMPI D,54 JRZ L242 CMPI D,55 JRZ L242 CMPI D,56 JRZ L242 CMPI D,57 JNZ L241 ; VAL:=(VAL * 10) + (ORD(STR[I]) - 48); {48 = ORD OF 0} L242 XRA A STMT D,11 MOV L,-7(IX) MOV H,-6(IX) LXI D,10 MULT D,0 PUSH H MOV L,-1(IX) MOV H,0(IX) RCHK H,1,80 XCHG LXI H,88 ADDR IX MOV D,A MOV E,M STMT M,11 LXI H,-48 DADD D,0 POP D DADD D,0 MOV -6(IX),H MOV -7(IX),L ; ; END; {OF CASE} L241 XRA A L217 ; ;I:=I+1; STMT D,12 MOV L,-1(IX) MOV H,0(IX) INX H MOV 0(IX),H MOV -1(IX),L ; ;UNTIL I > LEN; STMT D,13 CTRL M,13 MOV L,-1(IX) MOV H,0(IX) MOV E,-3(IX) MOV D,-2(IX) GRET D,0 JNC L201 ; ; ;1: { Exit immediately upon detection of a fatal error.} STMT D,14 L159 ; ;STRTOINT:=SIGN * VAL; STMT D,15 MOV L,-5(IX) MOV H,-4(IX) MOV E,-7(IX) MOV D,-6(IX) MULT D,0 MOV 3(IX),H MOV 2(IX),L ;END; {OF PROCEDURE} STMT D,16 EXIT D,81 .