; ;TYPE ;$STRING80=STRING 80; ;$STRING0 = STRING 0; ;$STRING255 = STRING 255; ;BYTE = 0..255; ;VAR ;DATA:$STRING255; ;START,STOP:INTEGER; ; ; ;FUNCTION LENGTH(X:$STRING255):INTEGER;EXTERNAL; EXTD L168,LENGTH ;PROCEDURE SETLENGTH(VAR X:$STRING0;Y:INTEGER);EXTERNAL; EXTD L169,SETLENGT ; ;{function to extract characters from within a string, starting at ;position "y" and ending at position "z".. ;corresponds to BASIC command MID$(A$,X,Y) } ; ;FUNCTION MID(X:$STRING255; Y,Z:BYTE):$STRING255; ; ;{y = starting position and z = the ending position in string x} ; ;LABEL 1; ;VAR ;LEN,I:INTEGER; ;MIDDLE:$STRING255; ; ;BEGIN L170 NAME MID ENTRY MID MID: ENTR D,2,260 ;SETLENGTH(MIDDLE,0); STMT D,1 PUSH IX POP H LXI B,-4 DADD B PUSH H MOV H,A MOV L,A PUSH H CALL L169 ;LEN:=LENGTH(X); STMT D,2 PUSH IX POP H LXI B,265 DADD B SPSH S,255 CALL L168 STMT M,2 MOV -2(IX),D MOV -3(IX),E ; ;IF (Y < 1) OR (Y > Z) OR ( Y > LEN) OR (LEN = 0) OR (Z > 255) THEN GOTO 1; STMT D,3 MOV H,A MOV L,9(IX) MOV A,L CMPI D,1 MOV A,H JC L198 MOV H,A MOV L,9(IX) MOV D,A MOV E,8(IX) GRET D,0 JC L198 MOV H,A MOV L,9(IX) MOV E,-3(IX) MOV D,-2(IX) GRET D,0 JC L198 MOV L,-3(IX) MOV H,-2(IX) MOV D,A MOV E,A DSB1 D,0 JZ L198 MOV H,A MOV L,8(IX) MVI A,255 CMP L MOV A,H JNC L197 L196 L198 EQU L196 STMT D,4 CTRL M,4 JMP L171 L197 ;IF Z > LEN THEN Z:=LEN; STMT D,5 MOV H,A MOV L,8(IX) MOV E,-3(IX) MOV D,-2(IX) GRET D,0 JNC L239 STMT D,6 MOV L,-3(IX) MOV H,-2(IX) RCHK H,0,255 MOV 8(IX),L L239 ; ;FOR I:= Y TO Z DO APPEND(MIDDLE,X[I]); STMT D,7 MOV H,A MOV L,9(IX) MOV 0(IX),H MOV -1(IX),L XCHG PUSH IX MOV H,A MOV L,8(IX) XTHL L260 MOV D,M DCX H MOV E,M XTHL PUSH H GE D,0 JNC L261 STMT D,8 PUSH IX POP H LXI B,-4 DADD B PUSH H LXI H,255 PUSH H MOV L,-1(IX) MOV H,0(IX) RCHK H,1,255 XCHG LXI H,265 ADDR IX MOV D,A MOV E,M INR D PUSH D LXI H,2 PUSH H CALL L137 CTRL M,8 POP H XTHL INR M INX H JRNZ L286 INR M JV L287 L286 JMP L260 L261 POP D L287 POP D ; ;1: STMT D,9 L171 ;MID:=MIDDLE; STMT D,10 PUSH IX POP H LXI B,-4 DADD B RCHK S,255 XCHG PUSH IX POP H LXI B,521 DADD B XCHG LXI B,256 LDDR ;END; STMT D,11 EXIT D,258 .