home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / enterprs / c128 / text / pwrcmods.lnx / library.i.seq < prev    next >
Text File  |  1993-03-25  |  2KB  |  121 lines

  1. (* LIBRARY OF SOURCE EXTENSIONS FOR THE ADVANCED KYAN PASCAL COMPILER. *)
  2.  
  3. FUNCTION GETKEY:CHAR;
  4. BEGIN
  5. #A
  6.       TXA
  7.       PHA
  8. WAIT  JSR $FFE4 ; GETIN
  9.       BEQ WAIT
  10.       LDY #3
  11.       STA (SP),Y
  12.       PLA
  13.       TAX
  14. #
  15. END; (* GETKEY *)
  16.  
  17.  
  18. (*
  19. TRUE IF ANY KEY PRESSED
  20.  
  21. FALSE IF NO KEY PRESSED *)
  22.  
  23. FUNCTION ANYKEY:BOOLEAN;
  24. BEGIN
  25. #A
  26.       TXA
  27.       PHA
  28.       JSR $FFE4; GETIN
  29.       BEQ ANY1;  FALSE
  30.       LDA #1;    TRUE
  31. ANY1  LDY #3
  32.       STA (SP),Y
  33.       PLA
  34.       TAX
  35. #
  36. END; (* ANYKEY *)
  37.  
  38. (* SET CURSOR TO SCREEN ROW/COL *)
  39.  
  40. PROCEDURE SETCUR(X,Y:INTEGER);
  41. BEGIN
  42. #A
  43.        TXA; SAVE POINTER
  44.        PHA
  45.        LDY #5
  46.        LDA (SP),Y
  47.        CMP #25
  48.        BCS CUREND; ROW > 24
  49.        TAX
  50.        DEY
  51.        DEY
  52.        LDA (SP),Y
  53.        CMP #40
  54.        BCS CUREND; COL > 39
  55.        TAY
  56.        CLC; SET CURSOR POSITION
  57.        JSR $FFF0; PLOT
  58. CUREND PLA; RESTORE POINTER
  59.        TAX
  60. #
  61. END; (* SETCUR *)
  62.  
  63. (* CONST MAXSTR AND TYPE STRING MUST BE DEFINED IN USING PROGRAM *)
  64.  
  65. FUNCTION LEN(LSTR:STRING):INTEGER;
  66. VAR LCH:CHAR;
  67. BEGIN
  68.  LCH:=CHR(MAXSTR);
  69. #A
  70.       TXA
  71.       PHA
  72.       LDY #3
  73.       LDA (SP),Y; MAXSTR
  74.       TAX
  75.       ADC #4
  76.       TAY; END OF STRING
  77.       CLC
  78. LENLP LDA (SP),Y
  79.       CMP #32; FIND NON-SPACE CHAR
  80.       BNE LEN1
  81.       DEX
  82.       DEY
  83.       JMP LENLP
  84. LEN1  TXA
  85.       LDY #3
  86.       STA (SP),Y
  87.       PLA
  88.       TAX
  89. #
  90.  LEN:=ORD(LCH)
  91. END; (* LEN *)
  92.  
  93. (*
  94. GENERATES A PSEUDO RANDOM NUMBER IN THE RANGE 0..255 WITHOUT REPEATING UNTIL ALL NUMBERS IN THE SET HAVE BEEN USED.
  95.  
  96. THE VARIABLE X = THE SEED VALUE AND MUST BE INITIALIZED TO A NUMBER IN THE ABOVE RANGE BEFORE CALLING THIS FUNCTION. *)
  97.  
  98. FUNCTION RND(VAR X:INTEGER):INTEGER;
  99. BEGIN
  100.  X:=(125 * X + 767) MOD 256;
  101.  RND:=X
  102. END; (* RND *)
  103.  
  104. (* CENTERS A STRING OF LESS THAN 41 CHAR IN LENGTH ON A SCREEN ROW.
  105.  
  106. TYPE STRING MUST BE DEFINED IN THE USING PROGRAM WITH  FUNCTIONS LEN AND SETCUR INCLUDED.
  107.  
  108. EXAMPLE: SETCUR(ROW,CENTER(STRING));
  109.          WRITELN(STRING);
  110. *)
  111.  
  112. FUNCTION CENTER(CSTR:STRING):INTEGER;
  113. VAR CEN:INTEGER;
  114. BEGIN
  115.  CEN:=LEN(CSTR);
  116.  IF (CEN < 40) THEN
  117.   CENTER:=(40 - CEN) DIV 2
  118.  ELSE
  119.   CENTER:=0
  120. END; (* CENTER *)
  121.