Compucolor.org – Virtual Media

Listing of file='TTRL7.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 CLEAR 1000:ADR= 256* PEEK (32941)+ PEEK (32940)
120 POKE ADR+ 41,2:POKE ADR+ 42,2
130 LN= PEEK (ADR+ 44):IF LN< > PEEK (ADR+ 45)OR LN= 0THEN 1000
140 ON LNGOTO 1002,1200,1400
1000 POKE ADR+ 44,1:POKE ADR+ 45,1
1002 PLOT 29,6,2,12,15,27,11,3,10,9:PRINT " USER FUNCTIONS, ARRAYS, AND DISK FEATURES 
1004 PRINT :PRINT "   AS DESCRIBED EARLIER, THE COMPUCOLOR HAS MANY PRE-DEFINED
1006 PRINT "  NUMERIC FUNCTIONS. IN ADDITION, THE USER CAN DEFINE HIS OWN
1008 PRINT " NUMERIC FUNCTIONS TO DO OPERATIONS THAT MAY BE TOO COMPLEX OR
1010 PRINT " TOO LONG TO DE DEFINED REPEATEDLY. THESE USER FUNCTIONS ARE IN
1012 PRINT "PURPOSE SIMILAR TO ARRAYS, WHICH MAKES IT POSSIBLE TO STORE MANY
1014 PRINT "  DIFFERENT VALUES UNDER ONE VARIABLE NAME. AND, WE WILL START
1016 PRINT "  TO DISCUSS SOME OF THE DISK FEATURES AVAILABLE THAT MAKE THE
1018 PRINT TAB( 15)"COMPUCOLOR A VERY DYNAMIC MACHINE.
1020 GOSUB 10006
1022 PLOT 3,5,7:PRINT "SUPPOSE THAT DURING A PROGRAM YOU WILL NEED TO COMPUTE
1024 PRINT TAB( 4)"THE VALUE OF AN EXPRESSION WITH MANY DIFFERENT VARIABLES,
1026 PRINT "  SUCH AS A=(S/E^2)+((M*SQR(D+4)-M)+(AB=2)). IF YOU USED THIS
1028 PRINT " EXPRESSION IN MANY PLACES IN YOUR PROGRAM, YOU CAN SEE THAT IT
1030 PRINT TAB( 6)"WOULD BE EASIER TO HAVE IT IN ONE PLACE AND CALL THAT
1032 PRINT TAB( 5)"ROUTINE WHEN NEEDED. A GOSUB COULD BE USED, BUT A USER
1034 PRINT ,,"FUNCTION WOULD WORK EVEN BETTER.
1036 PRINT :PRINT "  A USER FUNCTION IS A NUMERIC FUNCTION THAT IS DEFINED BY THE
1038 PRINT "USER TO PERFORM A CERTAIN TASK. USER FUNCTIONS ARE IN THE FORM:
1040 PRINT ,,"DEF FN X([ARGUMENT]) = [EXPRESSION]
1042 PRINT "  X IS THE NAME ASSIGNED TO THE FUNCTION. IT CAN BE ONE OR TWO
1044 PRINT " LETTERS, OR A LETTER AND A NUMBER. EXPRESSION IS THE FUNCTION
1046 PRINT ,"THAT IS TO BE PERFORMED. ARGUMENT IS A VARIABLE.
1048 PRINT "   WHEN THE FUNCTION IS TO BE USED, IT IS CALLED IN THIS FORM:
1050 PRINT ,,,"FN X [ARGUMENT]
1052 GOSUB 10006
1054 PLOT 3,6,6:PRINT " IF THE FUNCTION IS DEFINED WITH THE ARGUMENT IN THE
1056 PRINT "  EXPRESSION, THEN THE FUNCTION CAN BE CALLED WITH THE VALUE OF
1058 PRINT "   ARGUMENT. FOR EXAMPLE, SAY WE DEFINE A FUNCTION LIKE THIS:
1060 PRINT "100 DEF FN A(X)= X+ 2
1062 PRINT "   SINCE THE ARGUMENT X IS ALSO IN THE EXPRESSION, WE CAN CALL
1064 PRINT TAB( 20)"THE FUNCTION LIKE THIS:
1066 PRINT "200 B= FN A(10)
1068 PRINT "   X WOULD BE ASSIGNED THE VALUE 10, AND SO B WOULD EQUAL 12.
1070 PRINT :PRINT "   IF THE ARGUMENT IS NOT IN THE EXPRESSION WHEN THE FUNCTION
1072 PRINT " IS DEFINED, THEN THE ARGUMENT USED IN THE CALL OF THE FUNCTION
1074 PRINT "DOES NOT AFFECT THE VALUE OF THE FUNCTION. SAY OUR FUNCTION WAS:
1076 PRINT "100 DEF FN A(Z)= X+ 2:X= 7
1078 PRINT "200 B= FN A(1000)
1080 PRINT "    BECAUSE Z WAS NOT DEFINED IN THE FUNCTION, B WILL EQUAL 9
1082 PRINT TAB( 18)"IN LINE 200 SINCE X EQUALS 7.
1084 GOSUB 10006
1086 PLOT 3,4,12:PRINT "NOW, WITH THE USER FUNCTION, WE CAN DEFINE OUR FUNCTION.
1088 PRINT "100 DEF FN A(X)= (S/ E^ 2)+ ((M* SQR (D+ 4)- M)+ (AB= 2))
1090 PRINT "   ONCE IT IS DEFINED, IT NEVER NEEDS TO BE DEFINED AGAIN. AND
1092 PRINT TAB( 4)"NOW WHENEVER YOU NEED TO USE THE FUNCTION, JUST CALL IT.
1094 GOSUB 10006
1096 PRINT TAB( 5)"AGAIN IT IS TIME TO STOP THE TUTORIAL AND DO SOME MORE
1098 PRINT TAB( 5)"PROGRAMMING. WHEN YOU'RE READY TO GO ON, JUST HIT AUTO.
1100 POKE ADR+ 44,2:POKE ADR+ 45,2:GOTO 1532
1200 PLOT 15,6,2,12,27,11,3,4,7:PRINT "ARRAYS ARE VARIABLES THAT CAN CONTAIN MORE THAN ONE VALUE.
1202 PRINT " THIS IS DONE THROUGH THE USE OF A SUBSCRIPT, WHICH IS A NUMBER
1204 PRINT " THAT REFERS TO A CERTAIN VALUE OF THE VARIABLE. TO MAKE THIS A
1206 PRINT TAB( 6)"LITTLE EASIER TO UNDERSTAND, LET'S USE THIS EXAMPLE.
1208 PRINT TAB( 3)"SUPPOSE IN A PROGRAM YOU NEED TO KNOW THE NUMBER OF DAYS IN
1210 PRINT TAB( 7)"EACH MONTH OF THE YEAR. YOU COULD DO IT LIKE THIS:
1212 PRINT "100 A= 31:REM JANUARY
1214 PRINT "110 B= 28:REM FEBRUARY
1216 PRINT "120 C= 31:REM MARCH
1218 PRINT "130 D= 30:REM APRIL
1220 PRINT "":PRINT TAB( 3)"AND SO ON. YOU CAN SEE THAT THIS IS A MESS, ESPECIALLY WHEN
1222 PRINT TAB( 3)"YOU START TRYING TO FIND DIFFERENT MONTHS FOR ONE REASON OR
1224 PRINT TAB( 3)"ANOTHER. BUT WITH AN ARRAY, YOU COULD SET IT UP LIKE THIS:
1226 PRINT "100 FOR X= 1TO 12:READ A(X):NEXT X
1228 PRINT "110 DATA 31,28,31,30,31,30,31,31,30,31,30,31
1230 GOSUB 10006:PLOT 3,0,7:PRINT "100 FOR X= 1TO 12:READ A(X):NEXT X
1232 PRINT "110 DATA 31,28,31,30,31,30,31,31,30,31,30,31
1234 PRINT TAB( 3)"EACH VARIABLE IN THE ARRAY IS CALLED A SUBSCRIPED VARIABLE.
1236 PRINT "THIS IS HOW THE ARRAY WORKS. THE FIRST VALUE OF X EQUALS 1. THE
1238 PRINT "READ STATEMENT READS THE FIRST DATA VALUE (31), AND ASSIGNS IT
1240 PRINT "  TO THE VARIABLE A(1) (REMEMBER: X IS 1). ON THE NEXT LOOP, X
1242 PRINT "  EQUALS 2, SO THE VARIABLE A(2) IS ASSIGNED THE VALUE 28. THIS
1244 PRINT "CONTINUES UNTIL THE FOR-NEXT LOOP IS DONE, AND ALL 12 VARIABLES
1246 PRINT TAB( 5)"HAVE BEEN ASSIGNED A VALUE. THE ARRAY LOOKS LIKE THIS:
1248 PRINT :PRINT "	A(1)=31	A(2)=28	A(3)=31	A(4)=30	A(5)=31	A(6)=30
1250 PRINT "	A(7)=31	A(8)=31	A(9)=30	A(10)=31 A(11)=30 A(12)=31
1252 PRINT TAB( 3)"NOW IT IS MUCH SIMPLER TO FIND A VALUE: THE NUMBER OF DAYS
1254 PRINT TAB( 3)"IN JANUARY (THE 1ST MONTH) ARE IN A(1); FEBRUARY (THE 2ND
1256 PRINT TAB( 17)"MONTH) IS IN A(2); AND SO ON.
1258 GOSUB 10006
1260 PLOT 3,4,7:PRINT "ARRAYS CAN BE CREATED TO ANY SIZE, MEMORY BEING THE ONLY
1262 PRINT "RESTRICTION. HOWEVER, AN ARRAY LIKE THE ONE IN OUR EXAMPLE WOULD
1264 PRINT "NOT BE ALLOWED, BECAUSE ARRAYS ARE SET TO ELEVEN SUBSCRIPTS. IF
1266 PRINT " MORE VARIABLES WERE NEEDED, AS THEY WOULD BE IN OUR EXAMPLE, A
1268 PRINT "  DIM STATEMENT WOULD BE NEEDED. A DIM STATEMENT LETS YOU TELL
1270 PRINT "THE COMPUTER HOW MANY SUBSCRIPTED VARIABLES YOU NEED, AND ENOUGH
1272 PRINT TAB( 5)"MEMORY IS SET ASIDE FOR THEM. A LINE 90 COULD BE ADDED
1274 PRINT TAB( 20)"TO OUR EXAMPLE, STATING:
1276 PRINT "90 DIM A(12)
1278 PRINT " TO TAKE CARE OF OUR NEED. DIM STATEMENTS MUST BE GIVEN BEFORE
1280 PRINT "THE VARIABLE IS USED, AND ONCE A VARIABLE HAS BEEN DIMENSIONED,
1282 PRINT "IT CANNOT BE DIMENSIONED AGAIN UNTIL AFTER A CLEAR STATEMENT. IF
1284 PRINT "NO DIM STATEMENT IS USED, THE ARRAY IS SET FOR ELEVEN ELEMENTS:
1286 PRINT TAB( 22)"A(0) THROUGH A(10).
1288 PRINT "  STRING VARIABLES CAN ALSO BE SUBSCRIPTED, AND ARE USED IN THE
1290 PRINT TAB( 9)"SAME FASHION AS SUBSCRIPTED NUMERIC VARIABLES.
1292 GOSUB 10006
1294 PLOT 3,2,8:PRINT "ARRAYS CAN HAVE MORE THAN ONE SUBSCRIPT. SUPPOSE THAT IN OUR
1296 PRINT " EXAMPLE WE WANTED TO ALSO STORE THE AMOUNT OF RENT YOU PAY FOR
1298 PRINT ,"   THAT MONTH. WE COULD CHANGE OUR PROGRAM TO:
1300 PRINT "90 DIM A(12,2)
1302 PRINT "100 FOR X= 1TO 12:READ A(X,1):NEXT X
1304 PRINT "110 DATA 31,28,31,30,31,30,31,31,30,31,30,31
1306 PRINT "120 FOR X= 1TO 12:PRINT "CHR$ (34)"MONTH #"CHR$ (34)";X;"CHR$ (34)" RENT"CHR$ (34)";:INPUT A
1308 PRINT "130 A(X,2)= A:NEXT X
1310 PRINT "  NOW OUR ARRAY WORKS LIKE THIS. THERE ARE TWO VALUES FOR EACH
1312 PRINT " MONTH. IN LINE 100 THE FIRST VALUE FOR MONTH X, A(X,1), IS THE
1314 PRINT "  NUMBER OF DAYS IN THE MONTH. THE FIRST FOR-NEXT LOOP IS THE
1316 PRINT "SAME AS IN OUR FIRST EXAMPLE. THE SECOND FOR-NEXT LOOP, HOWEVER,
1318 PRINT " ASKS FOR THE AMOUNT OF RENT FOR THAT MONTH, AND ASSIGNS IT TO
1320 PRINT "THE SECOND VALUE FOR MONTH X, A(X,2). NOW WHENEVER THE MONTH OF
1322 PRINT "JUNE IS USED, A(6,1) CONTAINS THE DAYS AND A(6,2) CONTAINS THE
1324 PRINT TAB( 25)"RENT FOR JUNE.
1326 GOSUB 10006:PRINT ,"AND NOW WE'LL STOP THE TUTORIAL AND DO SOME MORE
1328 PRINT TAB( 5)"PROGRAMMING. WHEN YOU'RE READY TO GO ON, JUST HIT AUTO.
1330 POKE ADR+ 44,3:POKE ADR+ 45,3:GOTO 1532
1400 PLOT 6,2,12,15,27,11,3,5,5:PRINT "YOU LEARNED IN THE SECOND TUTORIAL HOW TO SAVE AND LOAD
1402 PRINT "BASIC PROGRAMS. HOWEVER, FROM BASIC YOU CAN ALSO SAVE ARRAYS AS
1404 PRINT " .ARY FILES. THIS IS DONE AFTER THE ARRAY HAS BEEN PREVIOUSLY
1406 PRINT "  REFERRED TO, SUCH AS USING ONE OF THE SUBSCRIPTED VARIABLES
1408 PRINT "   IN THE ARRAY OR DIMENSIONING THE ARRAY. THE ARRAY IS SAVED:
1410 PRINT ,,"   SAVE "CHR$ (34)"[VARIABLE NAME].ARY"CHR$ (34)"
1412 PRINT "  VARIABLE NAME IS THE VARIABLE NAME OF THE ARRAY. SO THE ARRAY
1414 PRINT TAB( 19)"AZ(10) WOULD BE SAVED LIKE:
1416 PRINT "SAVE "CHR$ (34)"AZ.ARY"CHR$ (34)"
1418 PRINT TAB( 5)"THE ARRAY CAN BE LOADED BY FIRST EITHER DIMENSIONING THE
1420 PRINT TAB( 5)"ARRAY OR USING ONE OF ITS VARIABLES. IT IS THEN LOADED:
1422 PRINT ,,"   LOAD "CHR$ (34)"(VARIABLE NAME).ARY"CHR$ (34)"
1424 PRINT TAB( 6)"SO THE ARRAY AZ(10) WOULD BE LOADED WITH THE COMMAND:
1426 PRINT "LOAD "CHR$ (34)"AZ.ARY"CHR$ (34)"
1428 PRINT " SAVING ARRAYS CAN BE USEFUL WHEN LARGE AMOUNTS OF NUMERIC DATA
1430 PRINT TAB( 4)"IS NEEDED EACH TIME A PROGRAM IS RUN, AS OPPOSED TO DATA
1432 PRINT " STATEMENTS THAT WOULD TAKE UP SPACE IN THE PROGRAM. NOTE: ONLY
1434 PRINT ,"NUMERIC ARRAYS CAN BE SAVED, NOT STRING ARRAYS.
1436 GOSUB 10006
1438 PLOT 3,4,9:PRINT "PROGRAMS CAN LOAD AND RUN OTHER PROGRAMS. THIS IS CALLED
1440 PRINT "  PROGRAM CHAINING. IT IS MERELY A LOAD COMMAND, FOLLOWED BY A
1442 PRINT "RUN COMMAND OR A GOTO STATEMENT. THE DIFFERENCE BETWEEN THE TWO
1444 PRINT "IS THAT THE GOTO STATEMENT DOES NOT CLEAR THE VARIABLES FROM THE
1446 PRINT TAB( 3)"PREVIOUS PROGRAM IF THE SECOND PROGRAM IS SMALLER THAN THE
1448 PRINT " FIRST. IN SOME CASES THIS MAY BE DESIRABLE; IN OTHERS IT WOULD
1450 PRINT "   NOT. IN THE GOTO, A LINE NUMBER IN THE NEXT PROGRAM MUST BE
1452 PRINT "   GIVEN. WITH THE RUN COMMAND, ALL VARIABLES ARE CLEARED AND
1454 PRINT TAB( 3)"A LINE NUMBER FOR THE NEXT PROGRAM TO START AT IS OPTIONAL.
1456 GOSUB 10006
1458 PLOT 3,3,12:PRINT "ANOTHER FEATURE IS THE MENU PROGRAM. WHENEVER THE AUTO KEY
1460 PRINT TAB( 3)"IS HIT, THE COMPUCOLOR LOADS A PROGRAM FROM THE DISK CALLED
1462 PRINT "MENU. USUALLY, THE MENU PROGRAM IS ONE THAT LISTS THE PROGRAMS
1464 PRINT "  ON THE DISK. THROUGH USE OF PROGRAM CHAINING, THE PROGRAM OF
1466 PRINT "YOUR CHOICE IS LOADED AND RUN. HOWEVER, ANY PROGRAM CAN BE NAMED
1468 PRINT " MENU AND BE RUN SIMPLY BY HITTING AUTO. IN BASIC, AUTO CAN BE
1470 PRINT TAB( 15)"USED BY GIVING A PLOT 1 STATEMENT.
1472 GOSUB 10006
1474 PLOT 3,3,11:PRINT "THE FILE CONTROL SYSTEM CAN BE RUN FROM BASIC ALSO. A PLOT
1476 PRINT "   27,4 WILL PUT YOU IN THE FCS MODE. FROM HERE ANY PRINTED
1478 PRINT " STATEMENTS ARE TAKEN AS FCS COMMANDS. A PLOT 27,27 WILL RETURN
1480 PRINT TAB( 25)"YOU TO BASIC.
1482 PRINT TAB( 3)"DISPLAYS FROM THE SCREEN CAN ALSO BE SAVED ON DISK. THIS IS
1484 PRINT "DONE FROM THE FCS MODE. FROM BASIC, A PLOT 27,24 SHOULD BE GIVEN
1486 PRINT "  TO SET THE SCREEN IN PAGE MODE. THEN, FROM THE FCS MODE, THE
1488 PRINT "    FILE SHOULD BE SAVED, FROM 7000 HEXIDECIMAL TO 7FFF HEX.
1490 GOSUB 10006
1492 PLOT 3,3,8:PRINT "HERE'S AN EASY WAY TO SAVE SCREEN DISPLAYS, AND AN EXAMPLE
1494 PRINT "   OF USING A MENU PROGRAM, THE FCS MODE, AND SCREEN DISPLAYS.
1496 PRINT ,"  FIRST, WRITE AND SAVE THIS PROGRAM AS "CHR$ (34)"MENU"CHR$ (34)":
1498 PRINT "100 PLOT 27,4:PRINT "CHR$ (34)"SAVE PICTUR.DSP 7000-7FFF"CHR$ (34)":PLOT 27,27
1499 PRINT TAB( 6)"NEXT, DRAW A PICTURE IN THE CRT MODE, THEN HIT AUTO.
1500 PRINT TAB( 3)"THE PROGRAM WILL GO TO THE FCS MODE, SAVE THE DISPLAY AS
1502 PRINT "PICTUR.DSP (7000-7FFF IS THE MEMORY OF THE SCREEN), AND RETURNS
1504 PRINT TAB( 3)"TO BASIC. BECAUSE AUTO LOADS THE MENU PROGRAM, NOTHING IS
1506 PRINT TAB( 11)"PRINTED ON THE SCREEN TO RUIN THE DISPLAY.
1508 PRINT TAB( 5)"TO LOAD THE PROGRAM, GO INTO THE FCS MODE, AND TYPE IN:
1510 PRINT "LOAD PICTUR.DSP
1512 PRINT TAB( 4)"THIS WILL LOAD THE DISPLAY BACK INTO THE SCREEN'S MEMORY.
1513 PRINT TAB( 10)"WARNING: DO NOT DO THIS ON THE TUTORIAL DISK.
1514 PRINT TAB( 4)"WE'LL GO INTO THE FILE CONTROL SYSTEM IN TUTORIAL EIGHT.
1516 GOSUB 10006
1518 PRINT :PRINT TAB( 3)"THIS CONCLUDES TUTORIAL SEVEN. DO YOU WISH TO REVIEW THIS
1520 INPUT " LESSON (YES/NO)? ";ZZ$:GOSUB 10000:IF LEFT$ (ZZ$,1)= "Y"THEN 1002:REM 
1522 IF LEFT$ (ZZ$,1)< > "N"THEN PLOT 28,11:GOTO 1520
1524 PRINT :PRINT TAB( 5)"EXPERIMENT SOME WITH WHAT YOU HAVE LEARNED IN THIS LESSON.
1526 PRINT "WHEN YOU ARE READY TO GO TO TUTORIAL EIGHT HIT THE AUTO KEY.
1528 POKE ADR+ 41,3:POKE ADR+ 42,3:POKE ADR+ 44,0:POKE ADR+ 45,0:PLOT 27,11
1530 PRINT :PRINT "HAVE FUN!"
1532 POKE 33434,0:POKE 33435,0:POKE 33436,0:END
10000 IF ZZ$= "M"THEN LOAD "MENU":RUN 1000
10002 IF PEEK (33278)< > 1THEN RETURN
10004 PLOT 1
10006 PRINT :INPUT "		   HIT RETURN TO CONTINUE: ";ZZ$:PLOT 12:GOTO 10000