home *** CD-ROM | disk | FTP | other *** search
- ;
- ;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
-