home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
enterprs
/
c128
/
text
/
pwrcmods.lnx
/
library.i.seq
< prev
next >
Wrap
Text File
|
1993-03-25
|
2KB
|
121 lines
(* LIBRARY OF SOURCE EXTENSIONS FOR THE ADVANCED KYAN PASCAL COMPILER. *)
FUNCTION GETKEY:CHAR;
BEGIN
#A
TXA
PHA
WAIT JSR $FFE4 ; GETIN
BEQ WAIT
LDY #3
STA (SP),Y
PLA
TAX
#
END; (* GETKEY *)
(*
TRUE IF ANY KEY PRESSED
FALSE IF NO KEY PRESSED *)
FUNCTION ANYKEY:BOOLEAN;
BEGIN
#A
TXA
PHA
JSR $FFE4; GETIN
BEQ ANY1; FALSE
LDA #1; TRUE
ANY1 LDY #3
STA (SP),Y
PLA
TAX
#
END; (* ANYKEY *)
(* SET CURSOR TO SCREEN ROW/COL *)
PROCEDURE SETCUR(X,Y:INTEGER);
BEGIN
#A
TXA; SAVE POINTER
PHA
LDY #5
LDA (SP),Y
CMP #25
BCS CUREND; ROW > 24
TAX
DEY
DEY
LDA (SP),Y
CMP #40
BCS CUREND; COL > 39
TAY
CLC; SET CURSOR POSITION
JSR $FFF0; PLOT
CUREND PLA; RESTORE POINTER
TAX
#
END; (* SETCUR *)
(* CONST MAXSTR AND TYPE STRING MUST BE DEFINED IN USING PROGRAM *)
FUNCTION LEN(LSTR:STRING):INTEGER;
VAR LCH:CHAR;
BEGIN
LCH:=CHR(MAXSTR);
#A
TXA
PHA
LDY #3
LDA (SP),Y; MAXSTR
TAX
ADC #4
TAY; END OF STRING
CLC
LENLP LDA (SP),Y
CMP #32; FIND NON-SPACE CHAR
BNE LEN1
DEX
DEY
JMP LENLP
LEN1 TXA
LDY #3
STA (SP),Y
PLA
TAX
#
LEN:=ORD(LCH)
END; (* LEN *)
(*
GENERATES A PSEUDO RANDOM NUMBER IN THE RANGE 0..255 WITHOUT REPEATING UNTIL ALL NUMBERS IN THE SET HAVE BEEN USED.
THE VARIABLE X = THE SEED VALUE AND MUST BE INITIALIZED TO A NUMBER IN THE ABOVE RANGE BEFORE CALLING THIS FUNCTION. *)
FUNCTION RND(VAR X:INTEGER):INTEGER;
BEGIN
X:=(125 * X + 767) MOD 256;
RND:=X
END; (* RND *)
(* CENTERS A STRING OF LESS THAN 41 CHAR IN LENGTH ON A SCREEN ROW.
TYPE STRING MUST BE DEFINED IN THE USING PROGRAM WITH FUNCTIONS LEN AND SETCUR INCLUDED.
EXAMPLE: SETCUR(ROW,CENTER(STRING));
WRITELN(STRING);
*)
FUNCTION CENTER(CSTR:STRING):INTEGER;
VAR CEN:INTEGER;
BEGIN
CEN:=LEN(CSTR);
IF (CEN < 40) THEN
CENTER:=(40 - CEN) DIV 2
ELSE
CENTER:=0
END; (* CENTER *)