home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG044.ARK / SUBS1.BAS < prev   
BASIC Source File  |  1985-02-10  |  5KB  |  145 lines

  1. %NOLIST
  2.  
  3. 210     REMARK    +++++++++++++++++POSITION CURSOR SUBROUTINE++++++++++++++++++++\
  4.            +   THIS POSITIONING SUBROUTINE WAS WRITTEN FOR THE HAZELTINE +\
  5.            +  1400/1500/1510 SERIES TERMINAL.  TO CHANGE ADDRESSING FOR  +\
  6.            +  OTHER CRT DISPLAYS, ALTER THE LINES BELOW.  THE PROGRAM    +\
  7.            +    CURSOR.BAS ASSIGNS VARIABLES THAT CONTAIN ADDRESSING     +\
  8.            +  COMMANDS.  BE SURE TO CHANGE THE CALCULATION OF THE X & Y  +\
  9.            +                          COORDINATES                 +\
  10.            +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  11.     CONSOLE
  12.     NO.OF.LINEFEEDS%=INT(X1/64)+64                    REMARK  DERIVE Y-LOCATION (16 VERTICAL LINES ASSUMED)
  13.     HORIZONTAL.TAB%=X1-(INT(X1/64)*64)                REMARK  DERIVE X-LOCATION (64 COLUMNS ACROSS ASSUMED)
  14.     IF HORIZONTAL.TAB%<31 THEN HORIZONTAL.TAB%=HORIZONTAL.TAB%+96    REMARK  ADD 96 TO X WHERE 0<= X <= 31
  15.  
  16. 211    PRINT ADDR.CURSOR$;CHR$(HORIZONTAL.TAB%);CHR$(NO.OF.LINEFEEDS%);
  17.  
  18.     RETURN
  19.  
  20. 215    REMARK ++++++++++++++++++ADVANCE CURSOR RIGHT SUBROUTINE++++++++++++++++
  21.     PRINT LEFT$(X9$,X1-1);
  22.     RETURN
  23.  
  24.  
  25. 260    REM $$$$$$$$$$$ READ CRT MASK FILE SUBROUTINE $$$$$$$$$$$
  26.     DIM CRTMASK$(16)
  27.     CONSOLE
  28.     READ #19,X0;CRTMASK$(1),CRTMASK$(2),CRTMASK$(3),CRTMASK$(4),\
  29.     CRTMASK$(5),CRTMASK$(6),CRTMASK$(7),CRTMASK$(8),CRTMASK$(9),\
  30.     CRTMASK$(10),CRTMASK$(11),CRTMASK$(12),CRTMASK$(13),CRTMASK$(14),\
  31.     CRTMASK$(15),CRTMASK$(16)
  32. 265    PRINT CLEAR.SCREEN$;
  33.     FOR INDEX% = 1 TO 16
  34.     PRINT CRTMASK$(INDEX%)
  35.     NEXT INDEX%
  36.     PRINT CURSOR.HOME$
  37.     CONSOLE
  38.     RETURN
  39.  
  40.  
  41. 345    REMARK   ++++++++++++++++ALPHABETIC/NUMERIC DATA ENTRY+++++++++++++++
  42.  
  43.  
  44.     X2$="****************************************************************"
  45.     GOSUB 210:PRINT LEFT$(X2$,X2)                    REMARK  POSITION CURSOR AND DISPLAY ENTRY MASK
  46.     CHAR%=LEAD.IN%:GOSUB 801
  47.     CHAR%=ADDR.CURS%:GOSUB 801
  48.     CHAR%=HORIZONTAL.TAB%:GOSUB 801
  49.     CHAR%=NO.OF.LINEFEEDS%:GOSUB 801
  50.     X0$=""
  51. 350    IF CONSTAT% = 0 THEN GOTO 350                    REMARK  WAIT FOR OPERATOR TO ENTER CHARACTER
  52.     X%=CONCHAR%
  53.     IF CTRL.C%=1 AND X%=3 THEN RETURN                REMARK  ENABLE SPECIAL ESCAPE SEQUENCE
  54.     IF X%=9 THEN GOTO 345                        REMARK  RESTART ENTRY IF CONTROL-I
  55.     IF X%=0DH THEN GOTO 370                        REMARK  END DATA ENTRY IF <RETURN> WAS DEPRESSED
  56.     IF X% >= 20H AND X% <= 7AH THEN GOTO 360            REMARK  PROCESS AND VALID ASCII CHARACTER
  57.     IF X% =7EH OR X% = 08H AND LEN(X0$) >= 1\            REMARK  IF BACKSPACE OR RUBOUT, ERASE LAST CHARACTER
  58.     THEN\
  59.      CHAR%=BACKSPACE%:GOSUB 801:\ 
  60.      CHAR%=42:GOSUB 801:\
  61.      CHAR%=BACKSPACE%:GOSUB 801:\     
  62.     Z1%=LEN(X0$)-1:X0$=LEFT$(X0$,Z1%)                REMARK  AND TRUNCATE ENTRY STRING
  63.     GOTO 350
  64. 360    IF LEN(X0$) < X2 THEN X0$=X0$+CHR$(X%)\                REMARK  IF ENTRY LENGTH WITHIN LIMITS, CONCATENATE
  65.     ELSE\
  66.      CHAR%=BACKSPACE%:GOSUB 801:\                             REMARK  IF ENTRY LENGTH EXCEEDED,KEEP WITHIN MASK LIMITS
  67.      CHAR%=32:GOSUB 801:\
  68.      CHAR%=BACKSPACE%:GOSUB 801
  69.     GOTO 350
  70. 370    IF X3=0 AND X4=0 THEN RETURN
  71.     X0 = VAL(X0$)
  72.     IF MATCH("!",X0$,1) = 0 AND X0 >= X3 AND X0 <= X4 THEN RETURN    REMARK  PERFORM RANGE CHECKING:IF INVALID, REJECT
  73.  505    X2$="OUT OF RANGE"
  74.     SCRATCH=X1
  75.     GOSUB 615
  76.     X1=SCRATCH
  77.     GOTO 345
  78.  615    REM $$$$$$$$$$$$$$$$FLASH BULLETIN AT LINE 3$$$$$$$$$$$$$$$$$$$$$$$
  79.     CONSOLE
  80.     FOR INDEX% = 1 TO 3
  81.     X1=192:GOSUB 210
  82.     PRINT TAB((64-LEN(X2$))/2);X2$
  83.         FOR X0%=1 TO 60
  84.         NEXT X0%
  85.         X1=192:GOSUB 210:PRINT TAB(64)
  86.         FOR X0%=1 TO 60
  87.         NEXT X0%
  88.         NEXT INDEX%
  89.     RETURN
  90.  
  91. 665           REM $$$$$$$$$$ NUMERIC/ALPHA DATA ENTRY W/PROMPT $$$$$$$$$$$$$$
  92.     PRINT
  93.     X1=64
  94.     GOSUB 210
  95.     PRINT X2$;TAB(66)
  96.     PRINT TAB(64)
  97.     X1=128
  98.     GOSUB 345
  99.     RETURN
  100.  
  101. 673          REM $$$$$$$$$$ ENTER & DISPLAY DATE AT LOCATION X1 $$$$$$$$$$$$$$
  102.     Z0=X1
  103.     GOSUB 210
  104.     PRINT "          ";
  105.     X2=6
  106.     X3=0
  107.     X4=123199
  108.     GOSUB 345        REM ENTER THAT DATE
  109.     IF LEN(X0$)<5 THEN X1=Z0:GOTO 673
  110. 673.5    IF LEN(X0$) < 6 THEN X0$="0"+X0$:GOTO 673.5
  111.     IF MID$(X0$,1,2)>="01" AND MID$(X0$,1,2)<="12"\
  112.     AND MID$(X0$,3,2)>="01" AND MID$(X0$,3,2) <="31" THEN 675
  113.     X2$="INVALID DATE":GOSUB 615:X1=Z0:GOTO 673
  114. 675    X0=VAL(X0$)
  115. 680    GOSUB 210
  116. 680.5    X0$=STR$(X0)
  117. 680.6    IF LEN(X0$)<6 THEN X0$="0"+X0$:GOTO 680.6
  118. 681    PRINT LEFT$(X0$,2);"/";MID$(X0$,3,2);"/";RIGHT$(X0$,2);
  119.     RETURN
  120. 760    REMARK    $$$$$$$$$$$$$$$$ PRINT TELEPHONE NUMBER SUBROUTINE $$$$$$$$$$$$$$
  121.     GOSUB 210    REMARK POSITION THE CURSOR
  122. 760.5    X0$=STR$(X0)
  123. 761    IF LEN(X0$) < 10 THEN X0$="0"+X0$:GOTO 761\
  124.     ELSE\
  125.     PRINT "(";LEFT$(X0$,3);")";MID$(X0$,4,3);"-";RIGHT$(X0$,4);
  126.     RETURN
  127. 801    REMARK  *************************************************\
  128.         *  DIRECT PRINT ROUTINE     12/1/78    MM       *\
  129.         *  =========================================    *\
  130.         *    THIS SUBROUTINE SENDS THE CHARACTER IN     *\
  131.         *  "CHAR%" TO THE CRT SCREEN I/O PORT (PORT 4), *\
  132.         *  AFTER ASCERTAINING THE SCREEN IS READY VIA   *\
  133.         *  THE SCREEN STATUS PORT (PORT 5).             *\
  134.         *************************************************
  135.  
  136.     IF (INP(3) AND 1) = 0 THEN 801                    REMARK CHECK THE STATUS BIT (BIT 0) FOR CRT SCREEN
  137.     OUT 2, CHAR%
  138.     RETURN
  139.  
  140. %LIST
  141. 675    X0=VAL(X0$)
  142. 680    GOSUB 210
  143. 680.5    X0$=STR$(X0)
  144. 680.6    IF LEN(X0$)<6 THEN X0$="0"+X0$:GOTO 680.6
  145. 681    PRINT LEFT$(X0$,2);"/";