;TYPE ;$STRING80 = STRING 80; ;$STRING0 = STRING 0; ;$STRING255 = STRING 255; ;BYTE = 0..255; ;VAR ;DATA:$STRING255; ;NUMBER:INTEGER; ; ;function length(x:$string255):INTEGER;external; EXTD L168,LENGTH ;PROCEDURE setlength(var x:$string0; y : INTEGER); external; EXTD L169,SETLENGT ; ;{function to return the "y" left most characters of a string "x" ;where y is an integer value up to 255, and x is a string of maximum ;length 255 characters. Corresponds to BASIC command LEFT$(A$,x).. ;requires pascal/z's external functions setlength and length.. } ; ;FUNCTION LEFT(X:$STRING255; Y:BYTE):$STRING255; ; ;{returns the first or left-most y characters in a string x} ; ;LABEL 1; ;VAR ;LEN,I:INTEGER; ;L:$STRING255; ; ;BEGIN L170 NAME LEFT ENTRY LEFT LEFT: ENTR D,2,260 ;SETLENGTH(L,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,264 DADD B SPSH S,255 CALL L168 STMT M,2 MOV -2(IX),D MOV -3(IX),E ; ;IF (LEN = 0) OR (Y < 1) THEN GOTO 1; STMT D,3 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) MOV A,L CMPI D,1 MOV A,H JNC L197 L196 L198 EQU L196 STMT D,4 CTRL M,4 JMP L171 L197 ;IF Y >= LEN THEN STMT D,5 MOV H,A MOV L,8(IX) MOV E,-3(IX) MOV D,-2(IX) GE D,0 ; BEGIN JNC L218 STMT D,6 ; L:=X; STMT D,7 PUSH IX POP H LXI B,264 DADD B RCHK S,255 XCHG PUSH IX POP H LXI B,-4 DADD B XCHG LXI B,256 LDDR ; GOTO 1; STMT D,8 CTRL M,8 JMP L171 ; END; STMT D,9 L218 ; ;{IF Y = 1 THEN ; BEGIN ; L:=X[1]; ; GOTO 1; ; END;} ; ;FOR I:= 1 TO Y DO APPEND(L,X[I]); STMT D,10 MOV 0(IX),A MVI -1(IX),1 PUSH IX MOV H,A MOV L,8(IX) XTHL L245 MOV D,M DCX H MOV E,M XTHL PUSH H GE D,0 JNC L246 STMT D,11 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,264 ADDR IX MOV D,A MOV E,M INR D PUSH D LXI H,2 PUSH H CALL L137 CTRL M,11 POP H XTHL INR M INX H JRNZ L271 INR M JV L272 L271 JMP L245 L246 POP D L272 POP D ; ;1: STMT D,12 L171 ;LEFT:=L; STMT D,13 PUSH IX POP H LXI B,-4 DADD B RCHK S,255 XCHG PUSH IX POP H LXI B,520 DADD B XCHG LXI B,256 LDDR ;END; STMT D,14 EXIT D,257 .