home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol078
/
bigtime.bas
< prev
next >
Wrap
BASIC Source File
|
1984-04-29
|
15KB
|
486 lines
1 ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 ' ADM-31 ONSCREEN EDITING AND CURSOR CONTROL UTILITY PROGRAM.
3 '
4 ' Version : 1.0
5 ' Composed: R. Berthet. C/O Channel 0/28 SYDNEY. Ph. 02-923-4801.
6 ' Date : 14/03/82
7 ' Language: BASIC
8 '
9 ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10 '
11 ' This program is designed to be added to the top of a BASIC
12 ' program. Its aim is to save the agony of writing tedious
13 ' ESCAPE sequences for the terminals video attributes.
14 '
15 ' Following is a list of abbreviations of common words associated
16 ' with these attributes. The abbreviations are then used to form
17 ' STRING variable names for the ESCAPE sequences.
18 '
19 ' It is advisable to read the appropriate section of the ADM
20 ' Terminal Operators Manual to familiarise yourself with the
21 ' operation of the video attributes.
22 '
23 ' ABBREVIATIONS
24 '
25 ' ALL ALL LIN LINE
26 ' ALT ALTERNATE LD LOAD
27 ' B BOTTOM MOD MODE
28 ' BS BACKSPACE NL NEWLINE
29 ' BEL BELL NUL NULL
30 ' BLA BLANK OFF OFF
31 ' BLI BLINK ON ON
32 ' BOT BOTTOM PGM PROGRAM
33 ' CHR CHARACTER PRT PROTECT(ED)
34 ' CLR CLEAR RD READ
35 ' CSR CURSOR RES RESET
36 ' DEL DELETE RET RETURN
37 ' ERA ERASE REV REVERSE
38 ' ESC ESCAPE R RIGHT
39 ' FF FORMFEED SCR SCREEN
40 ' GRF GRAPH SPC SPACE(S)
41 ' HT HORIZONTAL TAB STD STANDARD
42 ' HOME HOME TP TOP
43 ' INS INSERT VT VERTICAL TAB
44 ' L LEFT VID VIDEO
45 ' LF LINEFEED WRT WRITE
46 '
47 '
48 ' ------ ADM-31 ASCII CONTROL CODES ------
49 '
50 ' ***************************************************************
51 ' FUNCTION NAME STRING NAME ASCII CODE
52 ' ***************************************************************
53 '
54 ' Bell
55 BEL$ = CHR$(7)
56 '
57 ' Back Space
58 BS$ = CHR$(8)
59 '
60 ' Horizontal Tab
61 HT$ = CHR$(9)
62 '
63 ' Line Feed
64 LF$ = CHR$(10)
65 '
66 ' Vertical Tab
67 VT$ = CHR$(11)
68 '
69 ' Form Feed
70 FF$ = CHR$(12)
71 '
72 ' Return
73 RET$ = CHR$(13)
74 '
75 ' Escape
76 ESC$ = CHR$(27)
77 '
78 ' Home
79 HOME$ = CHR$(30)
80 '
81 ' New Line
82 NL$ = CHR$(31)
83 ' Space
84 SP$ = CHR$(32)
85 '
86 '
87 ' ------ DYNAMIC VIDEO ATTRIBUTE CONTROL STRINGS ------
88 '
89 ' ***************************************************************
90 ' FUNCTION NAME STANDARD CHAR. GEN. ALT. CHAR. GEN.
91 ' ***************************************************************
92 '
93 ' Reset to Normal Video
94 RESSTDVID$ = ESC$+"G"+"0"
95 RESALTVID$ = ESC$+"G"+"0"
96 '
97 ' Limited Grahics Mode Enable
98 ALTGRF$ = ESC$+"G"+"8"
99 '
100 ' Blanking or Underlining of Area
101 BLASTD$ = ESC$+"G"+"1"
102 BLAALT$ = ESC$+"G"+"9"
103 '
104 ' Blinking of Area
105 BLISTD$ = ESC$+"G"+"2"
106 BLIALT$ = ESC$+"G"+"A"
107 '
108 ' Blanking or Underlining and Blinking of Area
109 BLABISTD$ = ESC$+"G"+"3"
110 BLABIALT$ = ESC$+"G"+"B"
111 '
112 ' Reversing of Area
113 REVSTD$ = ESC$+"G"+"4"
114 REVALT$ = ESC$+"G"+"C"
115 '
116 ' Blanking or Underlining and Reversing of Area
117 BLAREVSTD$ = ESC$+"G"+"5"
118 BLAREVALT$ = ESC$+"G"+"D"
119 '
120 ' Blinking and Reversing of Area
121 BLIREVSTD$ = ESC$+"G"+"6"
122 BLIREVALT$ = ESC$+"G"+"E"
123 '
124 ' Blanking or Underlining and Reversing of Area
125 BLAREVSTD$ = ESC$+"G"+"7"
126 BLAREVALT$ = ESC$+"G"+"F"
127 '
128 ' ------ DYNAMIC EDITING CONTROL STRINGS ------
129 '
130 ' ***************************************************************
131 ' OPERATION HOW TO EXECUTE DESCRIPTION
132 ' ***************************************************************
133 '
134 ' Clear Screen Clears to SPACES
135 CLRSCRN$ = ESC$+"+"
136 '
137 ' Clear all to NULL
138 CLRNUL$ = ESC$+"*"
139 '
140 ' Clear all to PROTECTED SPACES
141 CLRPRT$ = ESC$+","
142 '
143 ' Set Insert Mode(ON/OFF) See page 4-18
144 INSMODON$ = ESC$+"q"
145 INSMODOFF$ = ESC$+"r"
146 '
147 ' Character Insert(SPACE)
148 CHRINS$ = ESC$+"Q"
149 '
150 ' Character Delete
151 CHRDEL$ = ESC$+"W"
152 '
153 ' Line Insert
154 LININS$ = ESC$+"E"
155 '
156 ' Line Delete
157 LINDEL$ = ESC$+"R"
158 '
159 ' Line Erase
160 LINERA$ = ESC$+"T"
161 '
162 ' Line Erase to NULLS
163 LINERANUL$ = ESC$+"t"
164 '
165 ' Page Erase
166 PAGERA$ = ESC$+"Y"
167 '
168 ' Page Erase to NULLS
169 PAGERANUL$ = ESC$+"y"
170 '
171 ' Set Auto Page
172 SETAUTPAG$ = ESC$+"v"
173 '
174 ' Clear Auto Page
175 CLRAUTPAG$ = ESC$+"w"
176 '
177 ' Page Back
178 PAGBAK$ = ESC$+"J"
179 '
180 ' Page Forward
181 PAGFOR$ = ESC$+"K"
182 '
183 '**********************************************************************
184 '
185 ' ------------- SCREEN ADDRESSES -------------
186 '
187 LHS% = 1
188 RHS% = 80
189 TOP% = 1
190 BOTTOM% = 24
191 '
192 '**********************************************************************
193 '
194 ' Definition of CURSOR LOAD Function. i.e. Pushing the Cursor
Around Onscreen.
195 DEF FNCSRLD$(ROW%,COLUMN%) = ESC$+"="+CHR$(ROW%+31)
+CHR$(COLUMN%+31)
196 '
197 ' Definition of CURSOR READ Function. i.e. Finding Where the
Cursor is On the Screen.
198 DEF FNCSRRD$(ROW%,COLUMN%) = ESC$+"?"+CHR$(ROW%+31)
+CHR$(COLUMN%+31)
199 '
200 '
201 ' ------ FORMAT CONTROL OPERATION STRINGS ------
202 '
203 ' ***************************************************************
204 '
205 ' ***************************************************************
206 '
207 ' Program Mode On
208 PGMON$ = ESC$+"U"
209 '
210 ' Program Mode Off
211 PGMOFF$ = ESC$+"X"
212 '
213 ' Write Protect Mode On
214 WRTPRTON$ = ESC$+")"
215 '
216 ' Write Protect Mode Off
217 WRTPRTOFF$ = ESC$+"("
218 '
219 ' Protect Mode On
220 PRTON$ = ESC$+"&"
221 '
222 ' Protect Mode Off
223 PRTOFF$ = ESC$+"'"
224 '
225 ' Terminal Reset
226 TERMRESET$ = ESC$+"o"+"!"
1000 '**********************************************************************
1001 '
1002 ' THE CLOCK PROGRAM
1003 ' -----------------
1004 ' BY: Richard Berthet
1005 ' 15/5 Cottonwood Cr.
1006 ' North Ryde. 2113.
1007 ' W:(02)-923-4801 H:(02)-88-1640.
1008 ' Thanks to Bill Bolton for the SYSTEM SUPPORT 1 CLOCK ROUTINES.
1009 '
1010 DIM DIGIT$(10,6),TOD(5),DOY(5),LASTIME%(5),COLOFFSET%(6)
1020 '
1030 FOR DIGIT% = 0 TO 9
1040 FOR SEG% = 1 TO 6
1050 READ DIGIT$(DIGIT%,SEG%)
1060 NEXT SEG%
1070 NEXT DIGIT%
1080 '
1090 '----------------------------------------------------------------------
1100 PRINT CLRSCRN$
1110 PRINTLINE$ = "------- THE CLOCK PROGRAM -------"
1120 GOSUB 2450 '[2] CENTRE LINE
1130 PRINT FNCSRLD$(TOP%,LINECOL%);
PRINTLINE$
1150 PRINT FNCSRLD$(TOP%+9,LHS%);
1160 INPUT "Do you want the BELL on(Y/N)?. Just remember it'll probably drive you mad.";BEEP$
1170 '----------------------------------------------------------------------
1180 '
1190 ' Column Offsets for the Digits.
1200 '
1210 COLOFFSET%(0) = RHS%-21 'SECONDS UNITS
1220 COLOFFSET%(1) = COLOFFSET%(0)-7 'SECONDS TENS
1230 COLOFFSET%(2) = COLOFFSET%(0)-18 'MINUTES UNITS
1240 COLOFFSET%(3) = COLOFFSET%(0)-25 'MINUTES TENS
1250 COLOFFSET%(4) = COLOFFSET%(0)-36 'HOURS UNITS
1260 COLOFFSET%(5) = COLOFFSET%(0)-43 'HOURS TENS
1270 '
1280 STARTROW% = TOP%+8 '1st of DIGIT ROWS
1290 '
1300 '----------------------------------------------------------------------
1310 IF BEEP$ <> "Y" THEN BEL$ = CHR$(0)
1320 PRINT CLRSCRN$
1330 PRINT FNCSRLD$(TOP%,10);"THE 0/28 ENGINEERING TIME IS............."
1340 PRINTLINE$ = "CONTROL C to ESCAPE"
1350 GOSUB 2450 '[2] CENTRE LINE
1360 PRINT FNCSRLD$(BOTTOM%-1,LINECOL%)
PRINTLINE$
1370 GOSUB 1890
1380 '----------------------------------------------------------------------
1390 ' DRAW THE SURROUND BOX
1400 PRINT WRTPRTON$;
1410 START% = COLOFFSET%(5)-1
1420 FINISH% = COLOFFSET%(0)+6
1430 FOR LOOP% = START% TO FINISH%
1440 PRINT FNCSRLD$(STARTROW%-1,LOOP%);
"-";
1450 PRINT FNCSRLD$(STARTROW%+8,LOOP%);
"-";
1460 NEXT LOOP%
1470 FOR LOOP% = (STARTROW%+1) TO (STARTROW%+6)
1480 COUNTER% = COLOFFSET%(5)-3
1490 FOR LOOP2% = 1 TO 4
1500 PRINT FNCSRLD$(LOOP%,COUNTER%);
"|";
1510 COUNTER% = COUNTER%+18
1520 NEXT LOOP2%
1530 NEXT LOOP%
1540 PRINT WRTPRTOFF$
1550 '----------------------------------------------------------------------
1560 CHANGE% = 0
1570 FOR DISPLAY% = 1 TO 6
1580 GOSUB 2530 '[3] PRINT DIGIT
1590 CHANGE% = CHANGE%+1
1600 '
1610 NEXT DISPLAY%
1620 FOREVER = 1
1630 WHILE FOREVER
1640 K$ = INKEY$
1650 IF K$ = CHR$(3)
THEN
FOREVER = 0
1660 GOSUB 1890
1670 '
1680 CHANGE% = 0
1690 GOSUB 2530 '[3] PRINT DIGIT
1700 FOR LOOP% = 1 TO 5
1710 '
1720 IF TOD(LOOP%) = LASTIME%(LOOP%)
THEN
1750
1730 CHANGE% = LOOP%
1740 GOSUB 2530 '[3] PRINT DIGIT
1750 NEXT LOOP%
1760 PRINT BEL$+HOME$
1770 OUT CMDPORT,(&H10) 'SET UP FOR CLOCK READ OF SECONDS
1780 WHILE TOD(0) = INP(DATAPORT)
1790 WEND 'LOOP UNTIL SECONDS CHANGE
1800 FOR LOOP% = 1 TO 5
1810 LASTIME%(LOOP%) = TOD(LOOP%)
1820 NEXT LOOP%
1830 WEND
1840 PRINTLINE$ = "Exiting to CP/M"
1850 GOSUB 2450 '[2] CENTRE LINE
1860 PRINT FNCSRLD$(BOTTOM%-1,LHS%);
LINERA$
1870 PRINT FNCSRLD$(BOTTOM%-1,LINECOL%);
PRINTLINE$
1880 END
1890 '******************************************************************
1900 '* *
1910 '* SYSTEM SUPPORT 1 BOARD CLOCK SUBROUTINES *
1920 '* BY BILL BOLTON *
1930 '* VERSION 1.0 JAN 17,1982 INITIAL RELEASE *
1940 '* *
1950 '* VARIABLES USED IN THESE ROUTINES *
1960 '* IN APPROXIMATE ORDER OF APPEARANCE *
1970 '* *
1980 '*TOD STORAGE ARRAY FOR TIME OF DAY (TOD) DIGITS *
1990 '*DOY STORAGE ARRAY FOR DAY OF YEAR (DOY) DIGITS *
2000 '*BASEPORT SYSTEM SUPPORT 1 BOARD BASE PORT ADDRESS *
2010 '*CMDPORT SS1 CLOCK COMMAND PORT ADDRESS *
2020 '*DATAPORT SS1 CLOCK DATA PORT ADDRESS *
2030 '*HOURS10 TENS OF HOURS DIGIT *
2040 '*HOURS1 UNIT HOURS DIGIT *
2050 '*MINUTES10 TENS OF MINUTES DIGIT *
2060 '*MINUTES1 UNIT MINUTES DIGIT *
2070 '*SECONDS10 TENS OF SECONDS DIGIT *
2080 '*SECONDS1 UNIT SECONDS DIGIT *
2090 '*TIME$ TIME OF DAY STRING IN HH:MM:SS FORMAT *
2100 '*WEEKDAY DAY OF WEEK DIGIT *
2110 '*WDAY$ DAY OF WEEK NAME STRING *
2120 '*YEAR YEAR INTEGER *
2130 '*MONTH10 TENS OF MONTHS DIGIT *
2140 '*MONTH1 UNIT MONTHS DIGIT *
2150 '*DAY10 TENS OF DAYS DIGIT *
2160 '*DAY1 UNIT DAYS DIGIT *
2170 '*DATE1$ DATE STRING IN DD/MM/YY FORMAT *
2180 '*MONTH MONTH INTEGER *
2190 '*DATE2$ DATE STRING IN MONTH DD,19YY FORMAT *
2200 '*TDAY$ TEMPORARY DAY STRING *
2210 '* *
2220 '* ###### NOTE ###### *
2230 '* *
2240 '* THE FOLLOWING ARRAYS MUST BE DIMENSIONED IN THE MAIN BODY *
2250 '* THE PROGRAM CALLING THESE SUBROUTINES *
2260 '* *
2270 '* DIM TOD(5) *
2280 '* DIM DOY(5) *
2290 '* *
2300 '******************************************************************
2310 BASEPORT = &H50
2320 CMDPORT = BASEPORT + 10
2330 DATAPORT = CMDPORT + 1
2340 '**********************************************************
2350 '* READ THE TIME DIGITS *
2360 '**********************************************************
2370 FOR DIGIT = 5 TO 0 STEP -1
2380 OUT CMDPORT,(&H10 + DIGIT)
2390 TOD(DIGIT) = INP(DATAPORT)
2400 IF DIGIT = 5 THEN TOD(DIGIT) = TOD(DIGIT) AND 3
2410 NEXT DIGIT
2420 RETURN
2430 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2440 '
2450 ' Subroutine [2]: LINE CENTERING
2460 '
2470 NUMOFCHAR% = LEN(PRINTLINE$)
2480 LINECOL% = (RHS%-NUMOFCHAR%)/2
2490 RETURN
2500 '
2510 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2520 '
2530 ' Subroutine [3]: PRINT DIGIT
2540 '
2550 '
2560 FOR SEG% = 1 TO 6
2570 PRINT FNCSRLD$(STARTROW%+SEG%,COLOFFSET%(CHANGE%));
DIGIT$(TOD(CHANGE%),SEG%);
2580 NEXT SEG%
2590 PRINT HOME$
2600 RETURN
2610 '
2620 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2630 DATA " *** "
2640 DATA "* * "
2650 DATA "* * "
2660 DATA "* * "
2670 DATA "* * "
2680 DATA " *** "
2690 '
2700 DATA " * "
2710 DATA " ** "
2720 DATA " * "
2730 DATA " * "
2740 DATA " * "
2750 DATA " *** "
2760 '
2770 DATA " *** "
2780 DATA "* * "
2790 DATA " * "
2800 DATA " * "
2810 DATA " * "
2820 DATA "***** "
2830 '
2840 DATA "**** "
2850 DATA " * "
2860 DATA " ** "
2870 DATA " * "
2880 DATA "* * "
2890 DATA " *** "
2900 '
2910 DATA " * "
2920 DATA " ** "
2930 DATA " * * "
2940 DATA "* * "
2950 DATA "***** "
2960 DATA " * "
2970 '
2980 DATA "***** "
2990 DATA "* "
3000 DATA "**** "
3010 DATA " * "
3020 DATA " * "
3030 DATA "**** "
3040 '
3050 DATA " *** "
3060 DATA "* "
3070 DATA "**** "
3080 DATA "* * "
3090 DATA "* * "
3100 DATA " *** "
3110 '
3120 DATA "***** "
3130 DATA " * "
3140 DATA " * "
3150 DATA " * "
3160 DATA " * "
3170 DATA " * "
3180 '
3190 DATA " *** "
3200 DATA "* * "
3210 DATA " *** "
3220 DATA "* * "
3230 DATA "* * "
3240 DATA " *** "
3250 '
3260 DATA " *** "
3270 DATA "* * "
3280 DATA " **** "
3290 DATA " * "
3300 DATA "* * "
3310 DATA " *** "
3320 '
3330 '**********************************************************************
3340 END