Compucolor.org – Virtual Media

Listing of file='TTRL8.BAS;01' on disk='vmedia/BASIC_language_6-10-sector.ccvf'

100 REM COPYRIGHT (C) BY COMPUCOLOR 1979
105 REM BY KLH 11/13/79 REV 1.1
110 AD= 256* PEEK (32941)+ PEEK (32940)
120 POKE ADR+ 41,2:POKE ADR+ 42,2
130 PLOT 27,11,12
140 DATA 245,229,197,1,206,40,205,36,0,202,-1,-1,11
150 DATA 121,176,194,-1,-1,29,194,-1,-1,17,255,255,195
160 DATA -1,-1,95,175,87,175,50,255,129,193,225,241,201
170 TM= 256* PEEK (32941)+ PEEK (32940)
180 RESTORE 140:FOR I= 1TO 39:READ A
190 IF A> = 0AND A< > PEEK (TM+ I)THEN I= 39:A= 999
200 NEXT I:IF A< 256THEN 280
210 RESTORE 140
220 FOR I= 1TO 39:READ A:POKE TM+ I,A- (A< 0):NEXT I
230 Z= TM+ 29:AD= TM+ 11:GOSUB 270
240 Z= TM+ 7:AD= TM+ 17:GOSUB 270
250 Z= TM+ 4:AD= TM+ 21:GOSUB 270
260 Z= TM+ 32:AD= TM+ 27:GOSUB 270:GOTO 280
270 ZZ= INT (Z/ 256):POKE AD,Z- 256* ZZ:POKE AD+ 1,ZZ:RETURN
280 Z= TM+ 1:AD= 33283:GOSUB 270:POKE 33282,195
300 GOTO 1000
800 REM  ********** "THE GREAT FCS SIMULATOR" **********
810 M= CALL (0):IF M< > 27THEN 810
815 N= CALL (0):IF N< > 68THEN 810
820 PLOT 11:PRINT "FCS>";:A$= " "
840 M= CALL (0):IF M= - 1THEN 840
860 IF M< 32OR M> 127THEN 890
870 IF LEN (A$)= > 59THEN 840
880 A$= A$+ CHR$ (M):PRINT CHR$ (M);:GOTO 840
890 IF M< 11AND M> 7THEN PLOT M:PRINT :ON 1+ (A$< > " ")GOTO 820,1529
895 IF M= 26AND PEEK (33227)> 4THEN PLOT 26,32,26:A$= LEFT$ (A$,LEN (A$)- 1):GOTO 840
900 IF M= 25OR M= 13THEN PRINT :ON 1+ (A$< > " ")GOTO 820,1529
910 IF (M= 26OR M= 28)AND A$= " "THEN 840
920 IF M= 12THEN PLOT M:PRINT :ON 1+ ABS (A$< > " ")GOTO 820,970
940 IF M= 28AND A$< > " "THEN PLOT M:GOTO 970
950 IF M= 11THEN 820
960 IF M= 27THEN N= CALL (0):IF N= 69THEN PRINT :PRINT "READY":PRINT :RETURN
965 IF MID$ (A$,2,3)< > B$THEN PRINT "WRONG COMMAND: TRY AGAIN!":GOTO 980
969 IF C$= "R"THEN RETURN
970 IF C$< > "0"THEN PLOT 27,4:PRINT MID$ (A$,2):PLOT 27,27:IF MID$ (A$,2,3)= B$AND B= 1THEN RETURN
980 GOTO 820
1000 CLEAR 1000:PLOT 6,2,12,6,39,14,29,3,16,9:PRINT " THE FILE CONTROL SYSTEM (FCS) 
1002 PLOT 6,2:PRINT :PRINT "   ONCE YOU ARE PROGRAMMING ON YOUR OWN, YOU WILL BECOME MORE
1004 PRINT "  DEPENDENT ON THE DISK SYSTEM FOR SAVING PROGRAMS, ACCESSING
1006 PRINT " FILES, AND SIMPLE OPERATIONS LIKE RENAMING A PROGRAM, DELETING
1008 PRINT "OLD VERSIONS OF PROGRAMS, USING THE DIRECTORY, AND INITIALIZING
1010 PRINT "DISKETTES. ALL THESE OPERATIONS, AND MANY OTHERS, ARE USED FROM
1012 PRINT "THE FILE CONTROL SYSTEM, OR FCS. SINCE THIS IS SUCH AN IMPORTANT
1014 PRINT TAB( 3)"PART OF YOUR FUTURE PROGRAMMING, TUTORIAL EIGHT IS DEVOTED
1016 PRINT TAB( 16)"ENTIRELY TO OPERATING THE FCS.
1018 GOSUB 10030
1020 PLOT 3,4,11:PRINT "BEFORE WE START TALKING ABOUT THE FCS, YOU NEED TO HAVE A
1022 PRINT "IDEA OF THE KIND OF MATHEMATICS IT USES. IF YOU HAVE EVER LOOKED
1024 PRINT TAB( 3)"AT THE DIRECTORY, YOU MAY HAVE NOTICED NUMBERS LIKE 8AD3 OR
1026 PRINT "90CF. THESE NUMBERS DON'T SEEM TO MAKE MUCH SENSE AT FIRST, BUT
1028 PRINT "   THEY DO TO THE COMPUTER. THEY ARE HEXIDECIMAL NUMBERS, AND
1030 PRINT " TO USE THESE NUMBERS YOU MUST USE HEXIDECIMAL ARITHMETIC. THIS
1032 PRINT "MAY SOUND LIKE A VERY COMPLICATED PROCEDURE, BUT IT ISN'T REALLY
1034 PRINT TAB( 22)"AS HARD AS IT SOUNDS.
1035 GOSUB 10030
1036 PLOT 3,4,12:PRINT "THINK OF THE MATH YOU'RE USED TO LIKE THIS: EVERYTHING IS
1038 PRINT "BASED ON THE NUMBERS 0 THROUGH 9 COUNTING SOMETHING. EACH OF THE
1040 PRINT "    INDIVIDUAL NUMERALS IN A NUMBER TELL HOW MANY SETS OF 0
1042 PRINT " THROUGH 9. SINCE THERE ARE TEN DIFFERENT NUMERALS, EACH ONE IS
1048 PRINT TAB( 3)"A POWER OF TEN GREATER THAN THE ONE PRECEEDING IT. SO THE
1050 PRINT " NUMBER 1027 IS ALSO 1*(10^3) + 0*(10^2) + 2*(10^1) + 7*(10^0).
1051 GOSUB 10030
1052 PLOT 3,3,6:PRINT "HEXIDECIMAL MATH IS BASED ON THE NUMBERS 0 THROUGH 15, AND
1054 PRINT TAB( 3)"THE RELATION BETWEEN HEXIDECIMAL AND STANDARD DECIMAL IS:
1056 PRINT :PRINT ,"DEC","HEX",,,"DEC","HEX
1058 FOR X= 0TO 7:PLOT 3,5,X+ 10:PRINT ,X,X:NEXT X
1060 FOR X= 8TO 9:PLOT 3,37,X+ 2:PRINT ,X,X:NEXT X:FOR X= 10TO 15:PLOT 3,37,X+ 2:PRINT ,X," ";CHR$ (X+ 55):NEXT X
1062 PRINT TAB( 4)"BECAUSE THERE ARE NO ONE-CHARACTER SYMBOLS FOR 10-15, THE
1064 PRINT TAB( 3)"LETTERS A-F ARE USED INSTEAD. THIS MEANS THERE ARE SIXTEEN
1066 PRINT "NUMERALS, SO EACH NUMERAL IN A HEX NUMBER IS A POWER OF SIXTEEN
1068 PRINT "  MORE THAN THE PRECEEDING NUMERAL. THE NUMBER 0B26 IS 0*(16^3)
1070 PRINT "   + B[OR 11 IN DECIMAL]*(16^2) + 2*(16^1) + 6*(16^0). IF YOU
1072 PRINT TAB( 6)"FIGURE THIS OUT YOU WILL GET THE DECIMAL EQUIVALENT.
1074 GOSUB 10030
1076 PLOT 3,5,10:PRINT "TO LEARN ABOUT THE FCS MODE, WE'RE GOING TO USE AN FCS
1078 PRINT "SIMULATOR THAT WILL ALLOW YOU TO RUN THE FCS FROM BASIC. TO USE
1080 PRINT TAB( 5)"IT, YOU WILL HAVE TO USE THE ESC D AND ESC E SEQUENCES.
1082 PRINT "   FIRST, WE'LL DO A DIR COMMAND, AS WE DID IN TUTORIAL TWO.
1084 PRINT "THIS WILL LIST THE DIRECTORY OF THE BASIC LANGUAGE DISK, AND IT
1086 PRINT " CONTAINS INFORMATION ON EACH OF THE PROGRAMS ON THE DISK. WHEN
1088 PRINT "THE COMPUTER LOADS A PROGRAM, IT READS INFORMATION FROM HERE TO
1090 PRINT "  KNOW HOW LARGE THE PROGRAM IS, WHERE TO LOAD THE PROGRAM IN
1092 PRINT "MEMORY, AND OTHER SUCH INFORMATION. ONCE YOU HAVE THE DIRECTORY
1094 PRINT TAB( 10)"LISTED, WE'LL EXPLAIN A LITTLE MORE ABOUT IT.
1096 GOSUB 10030
1098 PRINT TAB( 3)"FIRST OF ALL, DO AN ESC D SEQUENCE TO GET YOU INTO THE FCS
1100 PRINT TAB( 11)"MODE. THEN, TYPE IN DIR TO THE FCS> PROMPT.
1102 B= 1:PRINT :B$= "DIR":GOSUB 810:B$= "":B= 0
1104 PRINT " (NOTICE THE HEXIDECIMAL NUMBERS.) TAKE A LOOK AT THE HEADINGS
1106 PRINT " NAME, TYPE, AND VR. THESE THREE CATAGORIES ARE THE ENTIRE NAME
1108 PRINT TAB( 3)"OF EACH PROGRAM. NAME IS THE NAME THE PROGRAM IS SAVED AND
1110 PRINT "LOADED AS; TYPE IS THE TYPE OF PROGRAM; VR IS THE VERSION OF THE
1112 PRINT "  PROGRAM. THERE ARE MANY DIFFERENT TYPES OF PROGRAMS, SUCH AS
1114 PRINT " .BAS, .RND (FOR RANDOM FILES), .LDA AND .PRG (BOTH FOR MACHINE
1116 PRINT TAB( 3)"LANGUAGE PROGRAMS). IF THERE IS MORE THAN ONE VERSION OF A
1118 PRINT TAB( 3)"PROGRAM, EACH VERSION HAS ITS OWN VERSION NUMBER. THE FIRST
1120 PRINT "VERSION IS ;01, THE SECOND ;02, AND SO ON. NOTE THAT THE VERSION
1122 PRINT " NUMBER, ALONG WITH ALL THE OTHER NUMBERS IN THE DIRECTORY, ARE
1124 PRINT TAB( 26)"HEXIDECIMAL.
1126 GOSUB 10030
1128 PLOT 3,17,10:PRINT "THIS IS A TEST!! DO AN ESC D.":M= CALL (0):IF M< > 27THEN 1128
1130 N= CALL (0):IF N< > 68THEN 1128
1132 PLOT 3,21,12:PRINT "GOOD. NOW DO AN ESC E.":M= CALL (0):IF M< > 27THEN 1132
1134 N= CALL (0):IF N< > 69THEN 1132
1136 PRINT :PRINT "     VERY GOOD. YOU DID THAT VERY PROFESSIONALLY. YOU MIGHT
1138 PRINT "  AS WELL GET USED TO DOING IT, BECAUSE THOSE ARE THE SEQUENCES
1140 PRINT "FOR GETTING INTO THE FCS MODE AND THEN BACK INTO BASIC. WHENEVER
1142 PRINT "  THE TUTORIAL TELLS YOU TO TRY AN FCS COMMAND, DO AN ESC D TO
1144 PRINT "  ENTER THE FCS MODE, AND WHEN YOU HAVE DONE THE COMMAND DO AN
1146 PRINT ,"ESC E TO RESTART BASIC AND CONTINUE THE PROGRAM.
1148 GOSUB 10030
1150 PLOT 3,3,8:PRINT "FIRST, LET'S LEARN HOW TO CHANGE THE DEVICE. DEVICE REFERS
1152 PRINT TAB( 5)"TO THE DISK DRIVE. THE COMPUCOLOR'S BUILT-IN DISK DRIVE IS
1154 PRINT "DEVICE 0:. IF YOU HAVE AN EXTERNAL DISK DRIVE, IT IS DEVICE 1:.
1156 PRINT " SOMETIMES AN FCS COMMAND WILL NEED THE DEVICE TO BE SPECIFIED.
1158 PRINT "TO DO THIS, JUST ENTER 0 OR 1 (DEPENDING ON THE DEVICE) FOLLOWED
1160 PRINT TAB( 24)"BY A COLON (:).
1162 PRINT "   TO CHANGE THE DEVICE, ENTER DEV, FOLLOWED EITHER A 0: (FOR
1164 PRINT "  THE INTERNAL DRIVE), 1: (FOR THE EXTERNAL DRIVE), OR FOLLOWED
1166 PRINT "    BY NOTHING (TO FIND OUT THE CURRENT DEVICE). FOR EXAMPLE:
1168 PRINT "FCS>DEV 1:
1170 PRINT ,,"WILL CAUSE THIS TO BE DISPLAYED:
1172 PRINT "DEFAULT DEVICE= CD1:
1174 PRINT TAB( 3)"NOTE THAT FOR AN FCS COMMAND, ONLY THE FIRST THREE LETTERS
1176 PRINT TAB( 15)"OF THE COMMAND NEED TO BE ENTERED.
1178 GOSUB 10030
1180 PRINT "  TRY CHANGING THE DEVICE. REMEMBER THAT YOU HAVE TO USE BOTH
1182 PRINT TAB( 9)"ECSAPE SEQUENCES TO GET IN AND OUT OF THE FCS.
1184 B$= "DEV":NP= PEEK (33010):GOSUB 810:POKE 33010,NP
1186 PRINT TAB( 3)"NEXT WE'LL RENAME A PROGRAM. THIS IS A VERY USEFUL FEATURE
1188 PRINT "  TO HELP KEEP YOUR DISKS ORDERLY, BECAUSE YOU CAN MAKE CHANGES
1190 PRINT " IN A PROGRAM'S NAME WITHOUT PHYSICALLY HAVING TO DEAL WITH THE
1192 PRINT TAB( 5)"PROGRAM ITSELF. THE COMMAND FOR RENAME IS IN THIS FORM:
1194 PRINT TAB( 6)"REN <DEVICE NAME:> (OLD FILE SPEC) TO (NEW FILE SPEC)
1196 PRINT "  OLD AND NEW FILE SPEC ARE THE NAME, TYPE, AND VERSION NUMBER
1198 PRINT "OF THE FILE. DEVICE NAME IS OPTIONAL. FOR EXAMPLE, SUPPOSE THAT
1200 PRINT "YOU WANT TO RENAME PROGRAM TRIAL.BAS;1 TO TEST.BAS;1. YOU WOULD
1202 PRINT ,,,"DO IT LIKE THIS:
1204 PRINT "FCS>REN TRIAL.BAS;1 TO TEST.BAS;1
1206 PRINT "  THE PROGRAM WOULD BE RENAMED TO TEST.BAS;1. NOW, YOU TRY IT.
1207 PRINT ,,"TYPE IN THE TRIAL EXAMPLE ABOVE.
1208 C$= "R":B$= "REN":GOSUB 810:D$= A$:A$= "":FOR X= 1TO LEN (D$):IF MID$ (D$,X,1)< > " "THEN A$= A$+ MID$ (D$,X,1)
1210 NEXT :IF A$< > "RENTRIAL.BAS;1TOTEST.BAS;1"THEN GOSUB 10040:GOSUB 820
1212 C$= "0":FILE "T",1214:FILE "R",1,"T",1
1214 GOSUB 820
1216 GOSUB 10030
1226 PRINT TAB( 3)"INCIDENTALLY, ANYTHING THAT IS BETWEEN <> IN AN EXAMPLE IS
1228 PRINT ,,,"AN OPTIONAL ITEM.
1230 PRINT " NOW ON TO EVEN MORE USEFUL THINGS, SUCH AS THE DELETE COMMAND.
1232 PRINT TAB( 15)"THE DELETE COMMAND IS IN THE FORM:
1234 PRINT ,,"DEL <DEVICE NAME:> (FILE SPECS)
1236 PRINT TAB( 4)"FILE SPECS MUST INCLUDE THE FILE NAME, TYPE, AND VERSION
1238 PRINT TAB( 4)"NUMBER. THIS IS A SAFEGUARD TO KEEP YOU FROM ACCIDENTALLY
1240 PRINT TAB( 4)"DELETING THE WRONG FILE. FOR EXAMPLE, TO DELETE THE FILE
1242 PRINT ,,"TEST.BAS;1, YOU WOULD ENTER THIS:
1244 PRINT "FCS>DEL TEST.BAS;1
1246 PRINT TAB( 5)"FOR THE DELETE COMMAND, THE SCREEN MEMORY IS USED WHILE
1248 PRINT TAB( 3)"UPDATING THE DISK, SO DO NOT BE ALARMED WHEN THIS HAPPENS.
1250 PRINT TAB( 9)"ALL RIGHT, TRY DELETING THE FILE TEST.BAS;1.
1252 C$= "R":B$= "DEL":GOSUB 810:D$= A$:A$= "":FOR X= 1TO LEN (D$):IF MID$ (D$,X,1)< > " "THEN A$= A$+ MID$ (D$,X,1)
1254 NEXT :IF A$< > "DELTEST.BAS;1"THEN GOSUB 10040:GOSUB 820
1256 PLOT 12,27,4:PRINT "REA 3 6000 480":PRINT "WRI 3 6000 480":PLOT 27,27,12
1258 PLOT 27,4:PRINT "REA 0 6000 180":PRINT "WRI 0 6000 180":PLOT 27,27,12
1260 PLOT 27,4:PRINT "DIR":PLOT 27,27:C$= "E":GOSUB 820
1262 GOSUB 10030
1264 PRINT "  NOW WE COME TO DISK INITIALIZATION. WHEN YOU BUY A FORMATTED
1266 PRINT "  COMPUCOLOR DISK, IT IS NOT INITIALIZED; THAT IS, IT DOES NOT
1268 PRINT "  HAVE A DIRECTORY. SO, TO USE THE DISK IT MUST BE INITIALIZED.
1270 PRINT TAB( 6)"THE COMMAND FOR INITIALIZING A DISK IS IN THIS FORM:
1272 PRINT "INI (DEVICE NAME:) (DIRECTORY NAME) <NUMBER OF BLOCKS>
1274 PRINT "  DEVICE NAME MUST BE INCLUDED. DIRECTORY NAME IS THE NAME YOU
1276 PRINT TAB( 3)"WISH TO CALL THE DIRECTORY, AND CAN BE UP TO TEN CHARACTERS
1278 PRINT TAB( 2)"LONG. NUMBER OF BLOCKS REFERS TO THE SIZE OF THE DIRECTORY IN
1280 PRINT "BLOCKS, AND EACH BLOCK WILL HOLD INFORMATION FOR ABOUT 6 FILES.
1282 PRINT TAB( 3)"THE MORE FILES YOU HAVE, THE LARGER THE DIRECTORY MUST BE.
1284 PRINT "FCS>INI 0: TEST 06
1286 PRINT TAB( 4)"WOULD INITIALIZE A DISK WITH THE DIRECTORY NAME TEST, AND
1288 PRINT TAB( 4)"WOULD MAKE THE DIRECTORY SIX BLOCKS LONG. NOW YOU TRY IT:
1290 PRINT TAB( 19)"USE TEST 06 AS AN EXAMPLE.
1292 C$= "R":B$= "INI":GOSUB 810:D$= A$:A$= "":FOR X= 1TO LEN (D$):IF MID$ (D$,X,1)< > " "THEN A$= A$+ MID$ (D$,X,1)
1294 NEXT :IF A$< > "INI0:TEST06"THEN GOSUB 10040:GOSUB 820
1296 FILE "T",1298:FILE "R",1,"T",1
1298 PRINT :PRINT "DIRECTORY CD0:";:FILE "T",1300:FILE "R",1,"T",1
1300 PRINT " TEST       06":PRINT :PRINT "ATR  NAME TYPE VR SBLK SIZE LBC LADR SADR"
1302 PRINT :PRINT " 01 <FREE SPACE>  0006 018A":PRINT :C$= "0":GOSUB 820
1304 GOSUB 10030
1400 PRINT :PRINT TAB( 3)"THIS CONCLUDES TUTORIAL EIGHT. DO YOU WISH TO REVIEW THIS
1402 INPUT " LESSON (YES/NO)? ";ZZ$:GOSUB 10000:IF LEFT$ (ZZ$,1)= "Y"THEN 1000:REM 
1404 IF LEFT$ (ZZ$,1)< > "N"THEN PLOT 28,11:GOTO 1402
1408 PLOT 12:PRINT TAB( 21)"END OF TUTORIAL EIGHT.
1454 AD= 256* PEEK (32941)+ PEEK (32940)
1456 POKE AD+ 41,4:POKE AD+ 42,4:POKE AD+ 44,0:POKE AD+ 45,0:PLOT 1
10000 ZZ$= LEFT$ (ZZ$,1):IF ZZ$= "M"THEN LOAD "MENU":RUN 1000
10010 IF PEEK (33278)< > 1THEN RETURN
10020 PLOT 1
10030 PRINT :INPUT "		    HIT RETURN TO CONTINUE: ";ZZ$:PLOT 12:GOTO 10000
10040 PRINT "ERROR! TRY AGAIN!":RETURN