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