home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / lambda / soundpot / p / reliance.lbr / MODLIB.BZS / MODLIB.BAS
Encoding:
BASIC Source File  |  1993-10-25  |  6.1 KB  |  281 lines

  1. REM --- MODLIB.BAS
  2. COMMENT
  3.     *******************************************************
  4.     *    This Include module contains procedures       *
  5.     *    common to several Reliance Software Services  *
  6.     *       programs                                      *
  7.     *******************************************************
  8. END
  9.  
  10. $MODULE GLOBALS
  11. REM    Global variables and constants
  12.  
  13. VAR    Q$ = STRING        ;String returned by proc GET.STRING
  14. VAR    ANS = BYTE        ;For user answer to Y/N question
  15. VAR    QNEXT,QPREV,QESC = BYTE ;Booleans for whether key was pressed
  16. VAR    MININT = INTEGER    ;Constant -- minimum integer value
  17. VAR    BEL = BYTE        ;Constant
  18.     BEL = CHR$(7)        ;Audible tone
  19.  
  20. $CONSTANT    MAXINT = 32767        ;Maximum integer value
  21.     MININT = MAXINT * -1
  22. $CONSTANT    NEXT.LINE = 0AH        ;Down-arrow key on Kaypro
  23. $CONSTANT    PREV.LINE = 0BH        ;Up-arrow key on Kaypro
  24. $CONSTANT    ESCAPE = 1BH        ;ASCII for Escape
  25. $CONSTANT    CARR.RTN = 0DH        ;ASCII for Carriage Return
  26. $CONSTANT    BKSPACE = 08H        ;ASCII for Backspace
  27. $CONSTANT    DEL = 7FH        ;ASCII for Delete
  28. $END.MODULE
  29.  
  30. $MODULE PUT.CURSOR
  31. PROCEDURE PUT.CURSOR (ROW,COL=INTEGER)
  32.     REM -- Place cursor at row (0 - 23) and column (0 - 79) specified
  33.     PRINT #0; CHR$(27)+"="+CHR$(ROW+32)+CHR$(COL+32);
  34. END
  35. $END.MODULE
  36.  
  37. $MODULE WRITESTR
  38. PROCEDURE WRITESTR (STR = STRING ; ROW, COL = INTEGER)
  39.     PUT.CURSOR ROW,COL
  40.     PRINT #0; STR;
  41. END
  42. $END.MODULE
  43.  
  44. $MODULE CLEAR.SCREEN
  45. PROCEDURE CLEAR.SCREEN
  46.     PRINT #0;CHR$(26);
  47. END
  48. $END.MODULE
  49.  
  50. $MODULE READ.BOOL
  51. PROCEDURE READ.BOOL (ROW, COL = INTEGER)
  52. COMMENT
  53.     Inputs "Y" or "N" to global variable ANS at row & col specified
  54.     Prints "YES" or "NO"
  55. END
  56. $LIST OFF
  57.     PUT.CURSOR ROW, COL
  58.     PRINT #0; SPC(3);
  59.     PUT.CURSOR ROW, COL
  60.     ECHO OFF
  61.     REPEAT
  62.         INPUT3 ANS
  63.     UNTIL ANS = 'Y' OR ANS = 'N' OR ANS = 'y' OR ANS = 'n'
  64.     ECHO ON
  65.     IF ANS THEN
  66.         PRINT #0; "YES";
  67.     ELSE
  68.         PRINT #0; "NO";
  69. END
  70. $LIST ON
  71. $END.MODULE
  72.  
  73. $MODULE PAUSE
  74. PROCEDURE PAUSE
  75.     REM --- Prints message on line 23, waits for user response
  76.     REM     Requires line 23 to be available, uses proc PUT.CURSOR
  77. $LIST OFF
  78.     VAR    P.ANS    = BYTE
  79.  
  80.     PUT.CURSOR 23,20
  81.     PRINT #0; "PRESS <RETURN> TO CONTINUE";
  82.     ECHO OFF
  83.     REPEAT
  84.         INPUT3 P.ANS
  85.     UNTIL P.ANS = 0DH
  86.     ECHO ON
  87.     PUT.CURSOR 23,20
  88.     PRINT #0; SPC(27);
  89.  
  90. END    ; END PROCEDURE PAUSE
  91. $LIST ON
  92. $END.MODULE
  93.  
  94. $MODULE BUILD.UC.STRING
  95. VAR UC.STRING    = STRING:127
  96. DIM BASE BYTE    UC.ARRAY(127)
  97. VAR UC.ADDR    = INTEGER
  98.  
  99. PROCEDURE BUILD.UC.STRING
  100. COMMENT
  101.     This builds a string of all the ASCII codes except where the
  102.     lower case letters should be, put upper case letters.
  103.     This string will be used with the XLATE function to translate
  104.     lower case to upper case.
  105. END
  106.     VAR N = INTEGER        ; LOOP CONTROL
  107.  
  108.     REM --- Position array over string
  109.     LOCATION VAR UC.ADDR = UC.STRING
  110.     LOCATE UC.ARRAY AT UC.ADDR
  111.  
  112.     REM --- Build string of all the ASCII codes except 00H
  113.     FOR N = 1 TO 96
  114.         UC.ARRAY(N) = CHR$(N)
  115.     NEXT N
  116.  
  117.     REM --- Make lower case upper case instead
  118.     FOR N = 97 TO 122
  119.         UC.ARRAY(N) = CHR$(N-20H)
  120.     NEXT N
  121.  
  122.     REM --- Finish up ASCII codes
  123.     FOR N = 123 TO 127
  124.         UC.ARRAY(N) = CHR$(N)
  125.     NEXT N
  126. END    ; END PROC=BUILD.UC.STRING
  127. $END.MODULE
  128.  
  129. $MODULE MAKE.UPPER.CASE
  130. FUNCTION MAKE.UPPER.CASE (SOURCE = STRING) = STRING
  131.     VAR DEST = STRING
  132.     DEST = XLATE (SOURCE,UC.STRING)
  133. END = DEST    ; END FUNCTION=MAKE.UPPER.CASE
  134. $END.MODULE
  135.  
  136. $MODULE GET.STRING
  137. PROCEDURE GET.STRING (ROW,COL,MAXLEN=INTEGER;KIND=BYTE;INITIAL=STRING)
  138.     COMMENT
  139.         This procedure gets input from the keyboard one character
  140.         at a time and edits on the fly, rejecting invalid characters.
  141.         ROW and COL tell where to put beginning of data input line.
  142.         MAXLEN is max length of string to be returned.
  143.         KIND is what kind of input to be returned:
  144.         "S" -- return STRING, Q$
  145.         "N" -- return STRING, Q$ with numeric value
  146.         INITIAL is initial value of string.
  147.     END
  148. $LIST OFF
  149.     REM ----------- LOCAL VARIABLES ---------------------------------
  150.  
  151.     VAR    QIPT=BYTE    ; Input one character at a time
  152.     VAR    QLEN=INTEGER    ; Length of string
  153.     VAR    TMQ$=STRING    ; Work area for adjusting string length
  154.  
  155.     REM ----------- INITIALIZATION ----------------------------------
  156.  
  157.     Q$=INITIAL
  158.     QLEN=LEN(Q$)
  159.     QNEXT='N'
  160.     QPREV='N'
  161.     QESC='N'
  162.  
  163.     PUT.CURSOR ROW,COL
  164.     PRINT Q$;STRING$(MAXLEN-LEN(Q$),2EH)
  165.     PUT.CURSOR ROW,COL+LEN(Q$)
  166.     ECHO OFF
  167.  
  168.     REM ----------- BEGIN MAIN LOOP OF GET.STRING ---------------
  169.  
  170. 0GET1    INPUT3 QIPT
  171.  
  172.     IF QIPT=CARR.RTN THEN 0GET9    ; If carriage return, exit
  173.  
  174.     IF QIPT=NEXT.LINE THEN
  175.         BEGIN
  176.         QNEXT='Y'
  177.         GOTO 0GET9
  178.         END
  179.  
  180.     IF QIPT=PREV.LINE THEN
  181.         BEGIN
  182.         QPREV='Y'
  183.         GOTO 0GET9
  184.         END
  185.  
  186.     IF QIPT=ESCAPE THEN
  187.         BEGIN
  188.         QESC='Y'
  189.         GOTO 0GET9
  190.         END
  191.  
  192.     IF QIPT=BKSPACE OR QIPT=DEL THEN
  193.         BEGIN
  194.         GOSUB 0GET7        ; Subrtn to backspace
  195.         GOTO 0GET1
  196.         END
  197.  
  198.     IF QIPT<' ' OR QIPT>'~' THEN \    ; See if character is printable
  199.         BEGIN
  200.         PRINT BEL;
  201.         GOTO 0GET1
  202.         END
  203.  
  204.     IF QLEN=MAXLEN THEN
  205.         BEGIN
  206.         PRINT BEL;
  207.         GOTO 0GET1
  208.         END
  209.             
  210.     IF KIND='S' THEN
  211.         BEGIN
  212.         GOSUB 0GET8        ; Subrtn to concatenate
  213.         GOTO 0GET1
  214.         END
  215.  
  216.     IF KIND='N' THEN
  217.         BEGIN
  218.         IF QIPT<'0' \
  219.         OR QIPT>'9' THEN
  220.             PRINT BEL;
  221.         ELSE
  222.             GOSUB 0GET8    ; Subrtn to concatenate
  223.         GOTO 0GET1
  224.         END
  225.  
  226. 0GET7
  227.     REM --- Subroutine to process backspace
  228.     IF QLEN = 0 THEN
  229.         PRINT BEL;
  230.     ELSE
  231.         BEGIN
  232.         PRINT CHR$(8);".";CHR$(8);
  233.         QLEN=QLEN-1
  234.         TMQ$=LEFT$(Q$,QLEN)
  235.         Q$=TMQ$
  236.         END
  237.     RETURN
  238.  
  239. 0GET8    Q$=Q$+QIPT            ; Concatenate byte to build string
  240.     QLEN=QLEN+1
  241.     PRINT QIPT;
  242.     RETURN
  243.  
  244. 0GET9   ECHO ON
  245.  
  246. END                    ; END PROCEDURE GET.STRING
  247. $LIST ON
  248. $END.MODULE
  249.  
  250. $MODULE PURGE.CHAR
  251. FUNCTION PURGE.CHAR(INS=STRING;INC=CHAR)=STRING
  252.     REM -- Purges all instances of the character from the string
  253. $LIST OFF
  254.     VAR N1=INTEGER        ;COUNTER
  255.     VAR OUTS=STRING        ;RESULT STRING
  256.     OUTS=""
  257.     FOR N1=1 TO LEN(INS)
  258.         BEGIN
  259.         IF MID$(INS,N1,1)<>INC THEN
  260.             OUTS=OUTS+MID$(INS,N1,1)
  261.         END
  262.     NEXT
  263. END=OUTS
  264. $LIST ON
  265. $END.MODULE
  266.  
  267. $MODULE STRIP.CHAR
  268. FUNCTION STRIP.CHAR(INS=STRING;INC=CHAR)=STRING
  269.     REM -- Strips leading instances of the character from the string
  270. $LIST OFF
  271.     VAR WKS=STRING
  272.     WHILE LEFT$(INS,1)=INC DO
  273.         BEGIN
  274.         WKS=RIGHT$(INS,LEN(INS)-1)
  275.         INS=WKS
  276.         END
  277. END=INS
  278. $LIST ON
  279. $END.MODULE
  280. 0GET7
  281.     REM ---