home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol064
/
left.src
< prev
next >
Wrap
Text File
|
1984-04-29
|
2KB
|
190 lines
;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