;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 "x" number of spaces to a write command or statement..
;corresponds to BASIC commands such as SPACE$(X) or TAB(x)...
;although in structured programming, it is stylistically better to format
;output using format commands such as x:9:2 for a real number or 
;name:30 for a string, this function is often useful in designing a layout,
;and certainly is more "readable" in a program...}
;
;
;FUNCTION SPACE(X:BYTE):$STRING255; 
;VAR
;I:INTEGER;
;S:$STRING255;
;
;BEGIN
L170
	NAME SPACE
	ENTRY SPACE
SPACE:
	ENTR	D,2,258
;SETLENGTH(S,0);
	STMT	D,1
	PUSH	IX
	POP	H
	DCX	H
	DCX	H
	PUSH	H
	MOV	H,A
	MOV	L,A
	PUSH	H
	CALL	L169
;IF (X > 0) AND (X < 256) THEN FOR I:=1 TO X DO APPEND(S,' ');
	STMT	D,2
	MOV	H,A
	MOV	L,8(IX)
	MVI	A,0
	CMP	L
	MOV	A,H
	JNC	L187
	MOV	H,A
	MOV	L,8(IX)
	LXI	D,256
	LESS	D,0
	JNC	L184
	STMT	D,3
	MOV	0(IX),A
	MVI	-1(IX),1
	PUSH	IX
	MOV	H,A
	MOV	L,8(IX)
	XTHL
L209
	MOV	D,M
	DCX	H
	MOV	E,M
	XTHL
	PUSH	H
	GE	D,0
	JNC	L210
	STMT	D,4
	PUSH	IX
	POP	H
	DCX	H
	DCX	H
	PUSH	H
	LXI	H,255
	PUSH	H
	LXI	H,288
	PUSH	H
	LXI	H,2
	PUSH	H
	CALL	L137
	CTRL	M,4
	POP	H
	XTHL
	INR	M
	INX	H
	JRNZ	L229
	INR	M
	JV	L230
L229
	JMP	L209
L210
	POP	D
L230
	POP	D
L184
L186	EQU	L184
L187	EQU	L186
;
;SPACE:=S;
	STMT	D,5
	PUSH	IX
	POP	H
	DCX	H
	DCX	H
	RCHK	S,255
	XCHG
	PUSH	IX
	POP	H
	LXI	B,264
	DADD	B
	XCHG
	LXI	B,256
	LDDR
;END;
	STMT	D,6
	EXIT	D,1
