@@ -17,6 +17,8 @@ | |||||
*.BAS text eol=crlf | *.BAS text eol=crlf | ||||
*.bat text eol=crlf | *.bat text eol=crlf | ||||
*.BAT text eol=crlf | *.BAT text eol=crlf | ||||
*.cmd text eol=crlf | |||||
*.CMD text eol=crlf | |||||
*.doc text eol=crlf | *.doc text eol=crlf | ||||
*.DOC text eol=crlf | *.DOC text eol=crlf | ||||
*.txt text eol=crlf | *.txt text eol=crlf | ||||
@@ -1,12 +1,12 @@ | |||||
# compile artifcats | |||||
# compile artifcats | |||||
*.o | *.o | ||||
/bwbasic | /bwbasic | ||||
/renum | /renum | ||||
# maintainer artifacts | |||||
editfl | |||||
editfl.bas | |||||
*.geany | |||||
*.orig | |||||
*.rej | |||||
/autom4te.cache/ | |||||
# maintainer artifacts | |||||
editfl | |||||
editfl.bas | |||||
*.geany | |||||
*.orig | |||||
*.rej |
@@ -0,0 +1,5 @@ | |||||
100 rem ABS.BAS -- Test ABS() function | |||||
110 X = -1.23456789 | |||||
120 ABSX = ABS( X ) | |||||
130 print "The absolute value of "; X; " is"; ABSX | |||||
140 print "Is that correct?" |
@@ -0,0 +1,2 @@ | |||||
ao | |||||
x |
@@ -0,0 +1,9 @@ | |||||
1 | |||||
20 | |||||
1 | |||||
7 | |||||
1 | |||||
112 | |||||
1 | |||||
115 | |||||
x |
@@ -0,0 +1,81 @@ | |||||
5 PRINT TAB(33);"BAGELS" | |||||
10 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY":PRINT:PRINT | |||||
15 REM *** BAGLES NUMBER GUESSING GAME | |||||
20 REM *** ORIGINAL SOURCE UNKNOWN BUT SUSPECTED TO BE | |||||
25 REM *** LAWRENCE HALL OF SCIENCE, U.C. BERKELY | |||||
30 DIM A1(6),A(3),B(3) | |||||
40 Y=0:T=255 | |||||
50 PRINT:PRINT:PRINT | |||||
70 INPUT "WOULD YOU LIKE THE RULES (YES OR NO)";A$ | |||||
90 IF LEFT$(A$,1)="N" THEN 150 | |||||
100 PRINT:PRINT "I AM THINKING OF A THREE-DIGIT NUMBER. TRY TO GUESS" | |||||
110 PRINT "MY NUMBER AND I WILL GIVE YOU CLUES AS FOLLOWS:" | |||||
120 PRINT " PICO - ONE DIGIT CORRECT BUT IN THE WRONG POSITION" | |||||
130 PRINT " FERMI - ONE DIGIT CORRECT AND IN THE RIGHT POSITION" | |||||
140 PRINT " BAGELS - NO DIGITS CORRECT" | |||||
150 FOR I=1 TO 3 | |||||
160 A(I)=INT(10*RND(1)) | |||||
165 IF I-1=0 THEN 200 | |||||
170 FOR J=1 TO I-1 | |||||
180 IF A(I)=A(J) THEN 160 | |||||
190 NEXT J | |||||
200 NEXT I | |||||
210 PRINT:PRINT "O.K. I HAVE A NUMBER IN MIND." | |||||
220 FOR I=1 TO 20 | |||||
230 PRINT "GUESS #";I, | |||||
240 INPUT A$ | |||||
245 IF LEN(A$)<>3 THEN 630 | |||||
250 FOR Z=1 TO 3:A1(Z)=ASC(MID$(A$,Z,1)):NEXT Z | |||||
260 FOR J=1 TO 3 | |||||
270 IF A1(J)<48 THEN 300 | |||||
280 IF A1(J)>57 THEN 300 | |||||
285 B(J)=A1(J)-48 | |||||
290 NEXT J | |||||
295 GOTO 320 | |||||
300 PRINT "WHAT?" | |||||
310 GOTO 230 | |||||
320 IF B(1)=B(2) THEN 650 | |||||
330 IF B(2)=B(3) THEN 650 | |||||
340 IF B(3)=B(1) THEN 650 | |||||
350 C=0:D=0 | |||||
360 FOR J=1 TO 2 | |||||
370 IF A(J)<>B(J+1) THEN 390 | |||||
380 C=C+1 | |||||
390 IF A(J+1)<>B(J) THEN 410 | |||||
400 C=C+1 | |||||
410 NEXT J | |||||
420 IF A(1)<>B(3) THEN 440 | |||||
430 C=C+1 | |||||
440 IF A(3)<>B(1) THEN 460 | |||||
450 C=C+1 | |||||
460 FOR J=1 TO 3 | |||||
470 IF A(J)<>B(J) THEN 490 | |||||
480 D=D+1 | |||||
490 NEXT J | |||||
500 IF D=3 THEN 680 | |||||
505 IF C=0 THEN 545 | |||||
520 FOR J=1 TO C | |||||
530 PRINT "PICO "; | |||||
540 NEXT J | |||||
545 IF D=0 THEN 580 | |||||
550 FOR J=1 TO D | |||||
560 PRINT "FERMI "; | |||||
570 NEXT J | |||||
580 IF C+D<>0 THEN 600 | |||||
590 PRINT "BAGELS"; | |||||
600 PRINT | |||||
605 NEXT I | |||||
610 PRINT "OH WELL." | |||||
615 PRINT "THAT'S TWNETY GUESSES. MY NUMBER WAS";100*A(1)+10*A(2)+A(3) | |||||
620 GOTO 700 | |||||
630 PRINT "TRY GUESSING A THREE-DIGIT NUMBER.":GOTO 230 | |||||
650 PRINT "OH, I FORGOT TO TELL YOU THAT THE NUMBER I HAVE IN MIND" | |||||
660 PRINT "HAS NO TWO DIGITS THE SAME.":GOTO 230 | |||||
680 PRINT "YOU GOT IT!!!":PRINT | |||||
690 Y=Y+1 | |||||
700 INPUT "PLAY AGAIN (YES OR NO)";A$ | |||||
720 IF LEFT$(A$,1)="YES" THEN 150 | |||||
730 IF Y=0 THEN 750 | |||||
740 PRINT:PRINT "A";Y;"POINT BAGELS BUFF!!" | |||||
750 PRINT "HOPE YOU HAD FUN. BYE." | |||||
999 END |
@@ -0,0 +1,24 @@ | |||||
10 CALL SHELL("cls") | |||||
100 LET P = 0 | |||||
: LET S = 0 | |||||
110 INPUT "Enter binary number: ";N$ | |||||
120 L = LEN (N$) | |||||
: IF L=0 GOTO 300 | |||||
130 FOR I=1 TO L | |||||
135 IF (N$ = "0") GOTO 1000 | |||||
140 LET B$ = MID$(N$, L-I+1, 1) | |||||
150 IF NOT (B$ = "0" OR B$ = "1") GOTO 300 | |||||
160 LET K = VAL(B$) | |||||
170 IF (K > 0) THEN | |||||
: S = S + 2 ^ P | |||||
: END IF | |||||
180 LET P = P + 1 | |||||
190 NEXT | |||||
200 GOTO 310 | |||||
300 PRINT "Error, invalid binary entered" | |||||
: GOTO 100 | |||||
310 PRINT | |||||
315 PRINT "Equals decimal ";S | |||||
320 PRINT | |||||
1000 END | |||||
@@ -0,0 +1,16 @@ | |||||
5 REM input a number, output its binary representation | |||||
10 CALL SHELL("cls") | |||||
30 LET X = 0 | |||||
40 LET P = 1 | |||||
50 INPUT "Enter an integer from 1 to 63: ";a | |||||
60 IF (A < 0 OR A<>INT(A)) GOTO 50 | |||||
65 IF (A > 63) GOTO 30 | |||||
70 LET B = A - INT (A/2) * 2 | |||||
80 REM PRINT B | |||||
90 LET X = B * P + X | |||||
100 LET P = P * 10 | |||||
110 LET A = (A - B) / 2 | |||||
120 IF (A > 0) GOTO 70 | |||||
130 PRINT "As binary: ";X | |||||
140 END | |||||
@@ -0,0 +1,39 @@ | |||||
10 REM BUBBLESORT NUMBERS | |||||
80 CALL SHELL("cls") | |||||
90 DIM A(8) | |||||
: REM ARRAY WITH MAX 8 ELEMENTS | |||||
100 REM ASK FOR 8 NUMBERS | |||||
105 PRINT "You will be asked for 8 numbers" | |||||
110 FOR I = 1 TO 8 | |||||
120 PRINT "TYPE NUMBER ";I;" : "; | |||||
130 INPUT A (I) | |||||
140 NEXT I | |||||
150 REM PASS THROUGH 8 NUMBERS, TESTING BY PAIRS | |||||
160 F = 0 | |||||
: REM RESET THE ORDER INDICATOR | |||||
170 FOR I = 1 TO 7 | |||||
: REM NOTE THAT ENDING INDEX IS 8 MINUS 1 | |||||
180 IF A(I) <= A(I+1) THEN | |||||
: GOTO 240 | |||||
: END IF | |||||
190 REM SWAP A (I) AND A (I+1) | |||||
200 T = A(I) | |||||
210 A(I) = A(I+1) | |||||
220 A(I+1) = T | |||||
230 F = 1 | |||||
: REM ORDER WAS NOT PERFECT | |||||
240 NEXT I | |||||
250 REM F = 0 MEANS ORDER IS PERFECT | |||||
260 IF F = 1 THEN | |||||
: GOTO 160 | |||||
: END IF | |||||
: REM TRY AGAIN | |||||
270 PRINT | |||||
: REM PRINT EMPTY LINE | |||||
280 REM PRINT ORDERED NUMBERS | |||||
290 FOR I = 1 TO 8 | |||||
300 PRINT A (I) | |||||
310 NEXT I | |||||
315 PRINT | |||||
320 END | |||||
@@ -0,0 +1,37 @@ | |||||
10 REM BUBBLESORT FOR STRINGS | |||||
80 CALL SHELL("cls") | |||||
90 DIM A$(8) | |||||
: REM ARRAY WITH 8 STRINGS | |||||
100 REM ASK FOR 8 STRINGS | |||||
105 PRINT "You will be asked for 8 strings" | |||||
110 FOR I = 1 TO 8 | |||||
120 PRINT "Type string ";I;" : "; | |||||
130 INPUT A$ (I) | |||||
140 NEXT I | |||||
150 REM PASS THROUGH 8 STRINGS, TESTING BY PAIRS | |||||
160 F = 0 | |||||
: REM RESET THE ORDER INDICATOR | |||||
170 FOR I = 1 TO 7 | |||||
180 IF A$(I) <= A$(I+1) THEN | |||||
: GOTO 240 | |||||
: END IF | |||||
190 REM SWAP A$(I) AND A$(I+1) | |||||
200 T$ = A$(I) | |||||
210 A$(I) = A$(I+1) | |||||
220 A$(I+1) = T$ | |||||
230 F = 1 | |||||
: REM ORDER WAS NOT PERFECT | |||||
240 NEXT I | |||||
250 REM F = 0 MEANS ORDER IS PERFECT | |||||
260 IF F = 1 THEN | |||||
: GOTO 160 | |||||
: END IF | |||||
: REM TRY AGAIN | |||||
270 PRINT | |||||
: REM PRINT EMPTY LINE | |||||
280 REM PRINT ORDERED STRINGS | |||||
290 FOR I = 1 TO 8 | |||||
300 PRINT A$ (I) | |||||
310 NEXT I | |||||
320 print | |||||
@@ -0,0 +1,30 @@ | |||||
10 REM PERPETUAL GREGORIAN CALENDAR | |||||
12 REM 4-13-2020 changed line 28 IF Y<100 1900 to 2000 | |||||
14 DIM C$(42), D$(31), E(12) | |||||
16 FOR I=1 TO 31: READ D$(I): NEXT I | |||||
18 FOR I=1 TO 12: READ E(I): NEXT I | |||||
20 DATA " 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9"," 10" | |||||
22 DATA " 11"," 12"," 13"," 14"," 15"," 16"," 17"," 18"," 19"," 20" | |||||
24 DATA " 21"," 22"," 23"," 24"," 25"," 26"," 27"," 28"," 29"," 30"," 31" | |||||
26 DATA 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 | |||||
28 PRINT: INPUT "MONTH, 4 DIGIT YEAR";M,Y: IF Y<100 THEN Y=Y+2000 | |||||
30 PRINT: PRINT " SU MO TU WE TH FR SA": PRINT | |||||
32 J=367*Y-INT(7*(Y+INT((M+9)/12))/4)+INT(275*M/9)+1721031 | |||||
34 K=0: IF M<=2 THEN K=-1 | |||||
36 J=J-INT(3*(INT((Y+K)/100)+1)/4) | |||||
38 K=E(M): IF M<>2 THEN 48 | |||||
40 W=INT(Y-100*INT(Y/100)): X=INT(Y-4*INT(Y/4)): Z=INT(Y-400*INT(Y/400)) | |||||
42 IF X<>0 THEN 48 | |||||
44 IF W=0 AND Z<>0 THEN 48 | |||||
46 K=29 | |||||
48 X=J-7*INT(J/7) | |||||
50 FOR I=1 TO 42: C$(I)=" ": NEXT I | |||||
52 FOR I=1 TO K: C$(I+X)=D$(I): NEXT I | |||||
54 FOR I=1 TO 6: J=7*I | |||||
56 PRINT C$(J-6);C$(J-5);C$(J-4);C$(J-3);C$(J-2);C$(J-1);C$(J) | |||||
58 NEXT I | |||||
60 PRINT: INPUT "ANOTHER";A$: IF (A$="Y" or A$="y") THEN 28 | |||||
62 END | |||||
63 REM --------------------------------------------------------------- | |||||
64 REM APPEARED IN ASTRONOMICAL COMPUTING, SKY & TELESCOPE, JULY, 1985 | |||||
65 REM --------------------------------------------------------------- |
@@ -0,0 +1,18 @@ | |||||
5 REM find greatest common divisor (Euclidean Algorithm) | |||||
10 CALL SHELL("cls") | |||||
20 LET A = 1071 | |||||
: LET B = 462 | |||||
30 IF A < B THEN | |||||
: C = A | |||||
: A=B | |||||
: B=C | |||||
: END IF | |||||
40 PRINT A,B | |||||
50 LET C = A - INT(A/B)*B | |||||
: REM C = A MOD B (A modulo B) | |||||
60 LET A = B | |||||
: B = C | |||||
70 IF B > 0 GOTO 40 | |||||
80 PRINT "GCG is ";A | |||||
90 END | |||||
@@ -0,0 +1,12 @@ | |||||
100 REM PLOT A NORMAL DISTRIBUTION CURVE | |||||
120 DEF FNN(X) = EXP(-(X^2/2))/SQR(2*3.14159265) | |||||
140 FOR X = -2 TO 2 STEP .1 | |||||
150 LET Y = FNN(X) | |||||
160 LET Y = INT(100*Y) | |||||
170 FOR Z = 1 TO Y | |||||
180 PRINT " "; | |||||
190 NEXT Z | |||||
200 PRINT "*" | |||||
210 NEXT X | |||||
220 END | |||||
@@ -1,4 +1,5 @@ | |||||
50 rem 12/13/2019 Ken curve | 50 rem 12/13/2019 Ken curve | ||||
60 SHELL "cls" | |||||
100 REM PLOT A NORMAL DISTRIBUTION CURVE | 100 REM PLOT A NORMAL DISTRIBUTION CURVE | ||||
120 DEF FNN(X) = EXP(-(X^2/2))/SQR(2*3.14159265) | 120 DEF FNN(X) = EXP(-(X^2/2))/SQR(2*3.14159265) | ||||
140 FOR X = -2 TO 2 STEP .1 | 140 FOR X = -2 TO 2 STEP .1 |
@@ -0,0 +1,30 @@ | |||||
5 CALL SHELL("cls") | |||||
10 ON ERROR GOSUB 80 | |||||
20 C = 0 | |||||
: REM C will hold the number of data items | |||||
25 PRINT "Reading data elements" | |||||
30 READ N | |||||
40 PRINT N | |||||
50 C = C + 1 | |||||
70 GOTO 30 | |||||
80 print "Error line #, error number # ";erl;err | |||||
90 PRINT "Read ";C;" data elements" | |||||
: INPUT "Press enter :";w | |||||
100 DIM A(C) | |||||
: REM now we can allocate the array to hold all data | |||||
110 RESTORE | |||||
: REM MOVE data pointer to start | |||||
120 FOR I=1 TO C | |||||
130 READ A(I) | |||||
140 NEXT | |||||
150 print | |||||
160 PRINT "Array:" | |||||
170 FOR I=1 TO C | |||||
180 PRINT A(I);" "; | |||||
190 NEXT | |||||
195 PRINT | |||||
200 END | |||||
1000 DATA 12,107,0,20,443,218,232,468,561 | |||||
1010 DATA 71,187,936,436,4,50,110,320,120 | |||||
@@ -0,0 +1,15 @@ | |||||
100 CALL SHELL("cls") | |||||
110 on error gosub 170 | |||||
120 C = 0 | |||||
: REM C will hold the number of data items | |||||
130 READ N | |||||
140 PRINT N | |||||
150 C = C + 1 | |||||
160 GOTO 130 | |||||
170 print "Error number #, line # "; err; " , ";erl | |||||
180 PRINT "Read ";C;" data elements" | |||||
185 end | |||||
190 DATA 12,107,0,20,443,218,232,468,561 | |||||
200 DATA 273,187,936,436,4,50,110,320,120 | |||||
210 DATA 45,670,87 | |||||
@@ -0,0 +1,14 @@ | |||||
5 REM input a number, output its binary representation | |||||
10 CALL SHELL("cls") | |||||
50 INPUT "Enter an integer greater than zero : ";A | |||||
60 IF (A < 0 OR A<>INT(A)) GOTO 50 | |||||
65 IF (A = 0) GOTO 140 | |||||
70 LET B = A - INT (A/2) * 2 | |||||
90 LET X$ = STR$(B) + X$ | |||||
110 LET A = (A - B) / 2 | |||||
120 IF (A > 0) GOTO 70 | |||||
125 PRINT | |||||
130 PRINT "As binary: ";X$ | |||||
135 PRINT | |||||
140 END | |||||
@@ -0,0 +1,39 @@ | |||||
10 CALL SHELL("cls") | |||||
30 PRINT "DECIMAL","HEX" | |||||
40 PRINT "-------","---" | |||||
50 FOR I = 0 TO 20 | |||||
60 LET A = I | |||||
70 GOSUB 200 | |||||
80 PRINT I, X$ | |||||
90 NEXT I | |||||
100 END | |||||
200 LET X$ = "" | |||||
210 LET B = A - INT (A/16) * 16 | |||||
220 IF B < 10 THEN | |||||
: H$ = STR$(B) | |||||
: END IF | |||||
230 IF B = 10 THEN | |||||
: H$ = " A" | |||||
: END IF | |||||
240 IF B = 11 THEN | |||||
: H$ = " B" | |||||
: END IF | |||||
250 IF B = 12 THEN | |||||
: H$ = " C" | |||||
: END IF | |||||
260 IF B = 13 THEN | |||||
: H$ = " D" | |||||
: END IF | |||||
270 IF B = 14 THEN | |||||
: H$ = " E" | |||||
: END IF | |||||
280 IF B = 15 THEN | |||||
: H$ = " F" | |||||
: END IF | |||||
290 LET X$ = H$ + X$ | |||||
300 LET A = (A - B) / 16 | |||||
310 IF (A > 0) THEN | |||||
: GOTO 210 | |||||
: END IF | |||||
320 RETURN | |||||
@@ -0,0 +1,30 @@ | |||||
10 REM this program prints decimal and corresponding hexadecimal numbers. | |||||
15 REM it shows 20 numbers per page. To show the next page press any key. | |||||
20 CALL SHELL("cls") | |||||
30 LET S = 4095 | |||||
50 PRINT "Decimal","Hex" | |||||
60 PRINT "-------","---" | |||||
70 FOR I = S to (20 + S) | |||||
80 LET A = I | |||||
90 GOSUB 200 | |||||
100 PRINT I, X$ | |||||
110 NEXT I | |||||
130 LET S = S + 20 | |||||
140 END | |||||
150 END | |||||
200 LET X$ = "" | |||||
210 LET B = A - INT (A/16) * 16 | |||||
: REM B = A MOD 16 | |||||
220 IF B < 10 THEN | |||||
: H$ = STR$(B) | |||||
: END IF | |||||
230 IF (B >= 10 AND B <= 15) THEN | |||||
: H$ = " " + CHR$(65 + B - 10) | |||||
: END IF | |||||
240 LET X$ = H$ + X$ | |||||
250 LET A = (A - B) / 16 | |||||
260 IF (A > 0) THEN | |||||
: GOTO 210 | |||||
: END IF | |||||
270 RETURN | |||||
@@ -0,0 +1,13 @@ | |||||
5 REM Fibonacci numbers 4-13-2020 Ken | |||||
7 CALL SHELL("cls") | |||||
10 LET M = 5000 | |||||
20 LET X = 1 : LET Y = 1 | |||||
30 IF (X > M) GOTO 100 | |||||
40 PRINT X | |||||
50 X = X + Y | |||||
60 IF (Y > M) GOTO 100 | |||||
70 PRINT Y | |||||
80 Y = X + Y | |||||
90 GOTO 30 | |||||
100 STOP | |||||
@@ -0,0 +1,191 @@ | |||||
10 L1=9 | |||||
20 DEF FNR(X)=INT(X*100+.5)/100 | |||||
30 CL$=CHR$(26):REM SCREEN CLEAR CHAR. | |||||
40 REM ******************************************************** | |||||
50 REM | |||||
60 PRINT CL$;"THIS PROGRAM IS A COLLECTION OF BUSINESS" | |||||
70 PRINT "APPLICATIONS. HERE IS A LIST OF THE VALUES THAT" | |||||
80 PRINT "CAN BE COMPUTED GIVEN SUPPORTING DATA:" | |||||
90 PRINT | |||||
100 PRINT "1) FUTURE VALUE OF AN INVESTMENT" | |||||
110 PRINT "2) FUTURE VALUE OF REGULAR DEPOSITS (ANNUITY)" | |||||
120 PRINT "3) REGULAR DEPOSITS" | |||||
130 PRINT "4) REGULAR DEPOSITS FROM AN INVESTMENT" | |||||
140 PRINT "5) INITIAL INVESTMENT" | |||||
150 PRINT "6) MINIMUM INVESTMENT FOR WITHDRAWALS" | |||||
160 PRINT "7) NOMINAL INTEREST RATE ON INVESTMENTS" | |||||
170 PRINT "8) EFFECTIVE INTEREST RATE ON INVESTMENTS" | |||||
180 PRINT "9) EARNED INTEREST TABLE" | |||||
190 PRINT | |||||
200 PRINT "WHICH OF THE ABOVE VALUES WOULD YOU LIKE" | |||||
210 PRINT "TO COMPUTE ( 1 TO";L1;", OR 0 TO END RUN )"; | |||||
220 INPUT X | |||||
230 PRINT CL$ | |||||
240 IF X=0 THEN 1860 | |||||
250 ON X GOSUB 270,360,470,590,690,800,910,1010,1150 | |||||
260 GOTO 90 | |||||
270 PRINT "FUTURE VALUE OF AN INVESTMENT" | |||||
280 PRINT:INPUT "INITIAL INVESTMENT (0 TO STOP) ";P:IF P=0 THEN RETURN | |||||
290 GOSUB 1130 | |||||
300 GOSUB 1140 | |||||
310 GOSUB 1110 | |||||
320 I=I/N/100 | |||||
330 T=P*(I+1)^(N*Y) | |||||
340 GOSUB 1100 | |||||
350 GOTO 280 | |||||
360 PRINT "FUTURE VALUE OF REGULAR DEPOSITS (ANNUITY)" | |||||
370 PRINT | |||||
380 INPUT "AMOUNT OF REGULAR DEPOSITS (0 TO STOP)";R | |||||
390 IF R=0 THEN RETURN | |||||
400 GOSUB 1130 | |||||
410 INPUT "NUMBER OF DEPOSITS PER YEAR";N | |||||
420 GOSUB 1110 | |||||
430 I=I/N/100 | |||||
440 T=R*((I+1)^(N*Y)-1)/I | |||||
450 GOSUB 1100 | |||||
460 GOTO 370 | |||||
470 PRINT "REGULAR DEPOSITS" | |||||
480 PRINT | |||||
490 INPUT "TOTAL VALUE AFTER Y YEARS (0 TO STOP) ";T | |||||
500 IF T=0 THEN RETURN | |||||
510 GOSUB 1130 | |||||
520 DEF FNR(X)=INT(X*100+.5)/100 | |||||
530 INPUT "NUMBER OF DEPOSITS PER YEAR";N | |||||
540 GOSUB 1110 | |||||
550 I=I/N/100 | |||||
560 R=T*I/((I+1)^(N+Y)-1) | |||||
570 PRINT "REGULAR DEPOSITS: $";INT(R*100+.5)/100 | |||||
580 GOTO 480 | |||||
590 PRINT "REGULAR WITHDRAWALS FROM AN INVESTMENT" | |||||
600 PRINT:INPUT"INITIAL INVESTMENT (0 TO STOP) ";P | |||||
610 IF P=0 THEN RETURN | |||||
620 GOSUB 1130 | |||||
630 INPUT "NUMBER OF WITHDRAWALS PER YEAR";N | |||||
640 GOSUB 1110 | |||||
650 I=I/N/100 | |||||
660 R=P*(I/((I+1)^(N*Y)-1)+I) | |||||
670 PRINT "AMOUNT OF EACH WITHDRAWAL = $";INT(R*100+.5)/100 | |||||
680 GOTO 600 | |||||
690 PRINT "INITIAL INVESTMENT" | |||||
700 PRINT | |||||
710 INPUT "TOTAL VALUE AFTER Y YEARS (0 TO STOP) ";T | |||||
720 IF T=0 THEN RETURN | |||||
730 GOSUB 1140 | |||||
740 GOSUB 1110 | |||||
750 GOSUB 1130 | |||||
760 I=I/N/100 | |||||
770 P=T/(I+1)^(N*Y) | |||||
780 PRINT "INITIAL INVESTMENT = $";INT(P*100+.5)/100 | |||||
790 GOTO 700 | |||||
800 PRINT "MINIMUM INVESTMENT FOR WITHDRAWALS" | |||||
810 PRINT | |||||
820 INPUT "AMOUNT OF WITHDRAWALS (0 TO STOP) ";R | |||||
830 IF R=0 THEN RETURN | |||||
840 GOSUB 1130 | |||||
850 INPUT "NUMBER OF WITHDRAWALS PER YEAR";N | |||||
860 GOSUB 1110 | |||||
870 I=I/100 | |||||
880 P=R*N/I*(1-1/((1+I/N)^(N*Y))) | |||||
890 PRINT "MINIMUM INVESTMENT = $";INT(100*P+.5)/100 | |||||
900 GOTO 810 | |||||
910 PRINT "NOMINAL INTEREST RATE ON INVESTMENTS" | |||||
920 PRINT | |||||
930 INPUT "PRINCIPAL (0 TO STOP)";P | |||||
940 IF P=0 THEN RETURN | |||||
950 INPUT "TOTAL VALUE";T | |||||
960 GOSUB 1110 | |||||
970 GOSUB 1140 | |||||
980 I2=N*((T/P)^(1/(N*Y))-1)*100 | |||||
990 PRINT "NOMINAL INTEREST RATE = ";I2;"%" | |||||
1000 GOTO 920 | |||||
1010 PRINT "EFFECTIVE INTEREST RATE ON INVESTMENTS" | |||||
1020 PRINT | |||||
1030 INPUT "INITIAL INVESTMENT (0 TO STOP) ";P | |||||
1040 IF P=0 THEN RETURN | |||||
1050 INPUT "TOTAL VALUE AFTER Y YEARS";T | |||||
1060 GOSUB 1110 | |||||
1070 PRINT "ANNUAL INTEREST RATE = ";((T/P)^(1/Y)-1)*100;"%" | |||||
1080 GOTO 1020 | |||||
1090 REM ******* | |||||
1100 PRINT "FUTURE VALUE = $"; INT(T*100+.5)/100:RETURN | |||||
1110 INPUT "NUMBER OF YEARS AND MONTHS (2 NUMBERS WITH A COMMA BETWEEN THEM)";Y0,M | |||||
1120 Y=(12*Y0+M)/12:RETURN | |||||
1130 INPUT "NOMINAL INTEREST RATE (0 TO 100) ";I:RETURN | |||||
1140 INPUT "NUMBER OF COMPOUNDING PERIODS PER YEAR";N:RETURN | |||||
1150 PRINT "**** EARNED INTEREST TABLE GENERATOR ***" | |||||
1160 PRINT | |||||
1170 INPUT "PRINCIPAL";P | |||||
1180 GOSUB 1130 | |||||
1190 I=I/100 | |||||
1200 INPUT "NUMBER OF DEPOSITS/WITHDRAWALS PER YEAR";N1 | |||||
1210 IF N1=0 THEN 1260 | |||||
1220 INPUT "AMOUNT OF DEPOSIT/WITHDRAWAL";R | |||||
1230 N=360 | |||||
1240 L2=N1 | |||||
1250 GOTO 1290 | |||||
1260 GOSUB 1140 | |||||
1270 N1=0 | |||||
1280 L2=4 | |||||
1290 INPUT "START WITH WHAT YEAR (WHERE 1 MEANS THE FIRST, 2 THE SECOND, ETC.) ";X | |||||
1300 INPUT "END WITH WHAT YEAR";Y | |||||
1310 X=INT(X) | |||||
1320 B0=P:I1=0:I2=0:I3=0:K=66:P1=4 | |||||
1330 FOR J0=1 TO INT(Y)+1 | |||||
1340 IF J0<X THEN 1510 | |||||
1350 IF K<55 THEN 1500 | |||||
1360 REM SPACE TO NEXT PAGE, PRINT HEADINGS (ASSUMING 66 LINES/PAGE) | |||||
1370 FOR K1=K TO 66 | |||||
1380 PRINT | |||||
1390 NEXT K1 | |||||
1400 K=6 | |||||
1410 PRINT " EARNED INTEREST TABLE" | |||||
1420 PRINT " PRINCIPAL= $";P;" AT ";I*100;"% NOMINAL FOR ";Y;"YEARS" | |||||
1430 IF N1=0 THEN 1460 | |||||
1440 PRINT "REGULAR DEPOSIT/WITHDRAWAL $";R;". ";N1;" TIMES PER YEAR" | |||||
1450 K=K+1 | |||||
1460 PRINT " EFFECTIVE INTEREST RATE";FNR(100*((1+I/N)^N-1));"% PER YEAR" | |||||
1470 PRINT | |||||
1480 PRINT "YEAR","BALANCE","INTEREST","ACCUM. INTEREST" | |||||
1490 PRINT | |||||
1500 PRINT J0, | |||||
1510 L1=1 | |||||
1520 N2=1 | |||||
1530 P2=1 | |||||
1540 FOR J1=1 TO N | |||||
1550 IF N2>N1 THEN 1590 | |||||
1560 IF N2/N1>J1/N THEN 1590 | |||||
1570 B0=B0+R | |||||
1580 N2=N2+1 | |||||
1590 B2=B0*(1+I/N) | |||||
1600 I1=B2-B0 | |||||
1610 I3=I3+I1 | |||||
1620 I2=I2+I1 | |||||
1630 IF P2/P1>J1/N THEN 1670 | |||||
1640 I2=FNR(I2) | |||||
1650 B2=FNR(B2) | |||||
1660 P2=P2+1 | |||||
1670 IF J0<X THEN 1750 | |||||
1680 IF J1/N<L1/L2 THEN 1750 | |||||
1690 L1=L1+1 | |||||
1700 PRINT TAB(17); | |||||
1710 PRINT FNR(B2),FNR(I3),FNR(I2) | |||||
1720 I3=0 | |||||
1730 K=K+1 | |||||
1740 REM | |||||
1750 B0=B2 | |||||
1760 IF J0+J1/N-1>=Y THEN 1820 | |||||
1770 NEXT J1 | |||||
1780 IF J0<X THEN 1810 | |||||
1790 PRINT | |||||
1800 K=K+1 | |||||
1810 NEXT J0 | |||||
1820 PRINT | |||||
1830 PRINT "CHANGE DATA AND RECOMPUTE "; | |||||
1840 INPUT A$:IF LEFT$(A$,1)="Y" THEN 1160 | |||||
1850 RETURN | |||||
1860 REM RUN "DIR" | |||||
1870 END | |||||
2000 REM ------------------------------- | |||||
2010 REM commented out line 1860 | |||||
2020 REM added space after IF stmts | |||||
2999 END |
@@ -16,7 +16,7 @@ | |||||
134 IF c$ = "X" then end | 134 IF c$ = "X" then end | ||||
140 GOTO 10 | 140 GOTO 10 | ||||
150 END | 150 END | ||||
160 REM subroutine to clear screen | |||||
160 REM subroutine to cls screen | |||||
170 PRINT | 170 PRINT | ||||
180 PRINT | 180 PRINT | ||||
190 PRINT | 190 PRINT |
@@ -0,0 +1,20 @@ | |||||
100 REM GUESSING GAME | |||||
120 PRINT "GUESS THE NUMBER BETWEEN 1 AND 100." | |||||
140 LET X = INT(100*RND(0)+1) | |||||
150 LET N = 0 | |||||
160 PRINT "YOUR GUESS"; | |||||
170 INPUT G | |||||
180 LET N = N+1 | |||||
190 IF G = X THEN 300 | |||||
200 IF G < X THEN 250 | |||||
210 PRINT "TOO LARGE, GUESS AGAIN" | |||||
220 GOTO 160 | |||||
250 PRINT "TOO SMALL, GUESS AGAIN" | |||||
260 GOTO 160 | |||||
300 PRINT "YOU GUESSED IT, IN"; N; "TRIES" | |||||
310 PRINT "ANOTHER GAME (YES = 1, NO = 0)"; | |||||
320 INPUT A | |||||
330 IF A = 1 THEN 140 | |||||
340 PRINT "THANKS FOR PLAYING" | |||||
350 END | |||||
@@ -1,5 +1,6 @@ | |||||
10 rem 12/13/2019 Ken guess a number game | 10 rem 12/13/2019 Ken guess a number game | ||||
100 REM GUESSING GAME | 100 REM GUESSING GAME | ||||
110 SHELL "cls" | |||||
120 PRINT "GUESS THE NUMBER BETWEEN 1 AND 100." | 120 PRINT "GUESS THE NUMBER BETWEEN 1 AND 100." | ||||
140 LET X = INT(100*RND(0)+1) | 140 LET X = INT(100*RND(0)+1) | ||||
150 LET N = 0 | 150 LET N = 0 |
@@ -0,0 +1,83 @@ | |||||
2 PRINT TAB(33);"HELLO" | |||||
4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" | |||||
6 PRINT: PRINT: PRINT | |||||
10 PRINT "HELLO. MY NAME IS CREATIVE COMPUTER." | |||||
20 PRINT: PRINT: INPUT "WHAT'S YOUR NAME";N$: PRINT | |||||
30 PRINT "HI THERE, ";N$;", ARE YOU ENJOYING YOURSELF HERE"; | |||||
40 INPUT B$: PRINT | |||||
50 IF B$="YES" THEN 70 | |||||
55 IF B$="NO" THEN 80 | |||||
60 PRINT N$;", I DON'T UNDERSTAND YOUR ANSWER OF '";B$;"'." | |||||
65 PRINT "PLEASE ANSWER 'YES' OR 'NO'. DO YOU LIKE IT HERE";: GOTO 40 | |||||
70 PRINT "I'M GLAD TO HEAR THAT, ";N$;".": PRINT | |||||
75 GOTO 100 | |||||
80 PRINT "OH, I'M SORRY TO HEAR THAT, ";N$;". MAYBE WE CAN" | |||||
85 PRINT "BRIGHTEN UP YOUR VISIT A BIT." | |||||
100 PRINT | |||||
105 PRINT "SAY, ";N$;", I CAN SOLVE ALL KINDS OF PROBLEMS EXCEPT" | |||||
110 PRINT "THOSE DEALING WITH GREECE. WHAT KIND OF PROBLEMS DO" | |||||
120 PRINT "YOU HAVE (ANSWER SEX, HEALTH, MONEY, OR JOB)"; | |||||
125 INPUT C$ | |||||
126 PRINT | |||||
130 IF C$="SEX" THEN 200 | |||||
132 IF C$="HEALTH" THEN 180 | |||||
134 IF C$="MONEY" THEN 160 | |||||
136 IF C$="JOB" THEN 145 | |||||
138 PRINT "OH, ";N$;", YOUR ANSWER OF ";C$;" IS GREEK TO ME." | |||||
140 GOTO 250 | |||||
145 PRINT "I CAN SYMPATHIZE WITH YOU ";N$;". I HAVE TO WORK" | |||||
148 PRINT "VERY LONG HOURS FOR NO PAY -- AND SOME OF MY BOSSES" | |||||
150 PRINT "REALLY BEAT ON MY KEYBOARD. MY ADVICE TO YOU, ";N$;"," | |||||
153 PRINT "IS TO OPEN A RETAIL COMPUTER STORE. IT'S GREAT FUN." | |||||
155 GOTO 250 | |||||
160 PRINT "SORRY, ";N$;", I'M BROKE TOO. WHY DON'T YOU SELL" | |||||
162 PRINT "ENCYCLOPEADIAS OR MARRY SOMEONE RICH OR STOP EATING" | |||||
164 PRINT "SO YOU WON'T NEED SO MUCH MONEY?" | |||||
170 GOTO 250 | |||||
180 PRINT "MY ADVICE TO YOU ";N$;" IS:" | |||||
185 PRINT " 1. TAKE TWO ASPRIN" | |||||
188 PRINT " 2. DRINK PLENTY OF FLUIDS (ORANGE JUICE, NOT BEER!)" | |||||
190 PRINT " 3. GO TO BED (ALONE)" | |||||
195 GOTO 250 | |||||
200 INPUT "IS YOUR PROBLEM TOO MUCH OR TOO LITTLE";D$: PRINT | |||||
210 IF D$="TOO MUCH" THEN 220 | |||||
212 IF D$="TOO LITTLE" THEN 230 | |||||
215 PRINT "DON'T GET ALL SHOOK, ";N$;", JUST ANSWER THE QUESTION" | |||||
217 INPUT "WITH 'TOO MUCH' OR 'TOO LITTLE'. WHICH IS IT";D$:GOTO 210 | |||||
220 PRINT "YOU CALL THAT A PROBLEM?!! I SHOULD HAVE SUCH PROBLEMS!" | |||||
225 PRINT "IF IT BOTHERS YOU, ";N$;", TAKE A COLD SHOWER." | |||||
228 GOTO 250 | |||||
230 PRINT "WHY ARE YOU HERE IN SUFFERN, ";N$;"? YOU SHOULD BE" | |||||
235 PRINT "IN TOKYO OR NEW YORK OR AMSTERDAM OR SOMEPLACE WITH SOME" | |||||
240 PRINT "REAL ACTION." | |||||
250 PRINT | |||||
255 PRINT "ANY MORE PROBLEMS YOU WANT SOLVED, ";N$; | |||||
260 INPUT E$: PRINT | |||||
270 IF E$="YES" THEN 280 | |||||
273 IF E$="NO" THEN 300 | |||||
275 PRINT "JUST A SIMPLE 'YES' OR 'NO' PLEASE, ";N$;"." | |||||
277 GOTO 255 | |||||
280 PRINT "WHAT KIND (SEX, MONEY, HEALTH, JOB)"; | |||||
282 GOTO 125 | |||||
300 PRINT | |||||
302 PRINT "THAT WILL BE $5.00 FOR THE ADVICE, ";N$;"." | |||||
305 PRINT "PLEASE LEAVE THE MONEY ON THE TERMINAL." | |||||
307 FOR I=1 TO 2000: NEXT I | |||||
310 PRINT: PRINT: PRINT | |||||
315 PRINT "DID YOU LEAVE THE MONEY"; | |||||
320 INPUT G$: PRINT | |||||
325 IF G$="YES" THEN 350 | |||||
330 IF G$="NO" THEN 370 | |||||
335 PRINT "YOUR ANSWER OF '";G$;"' CONFUSES ME, ";N$;"." | |||||
340 PRINT "PLEASE RESPOND WITH 'YES' OR 'NO'.": GOTO 315 | |||||
350 PRINT "HEY, ";N$;"??? YOU LEFT NO MONEY AT ALL!" | |||||
355 PRINT "YOU ARE CHEATING ME OUT OF MY HARD-EARNED LIVING." | |||||
360 PRINT:PRINT "WHAT A RIP OFF, ";N$;"!!!":PRINT | |||||
365 GOTO 385 | |||||
370 PRINT "THAT'S HONEST, ";N$;", BUT HOW DO YOU EXPECT" | |||||
375 PRINT "ME TO GO ON WITH MY PSYCHOLOGY STUDIES IF MY PATIENTS" | |||||
380 PRINT "DON'T PAY THEIR BILLS?" | |||||
385 PRINT:PRINT "TAKE A WALK, ";N$;".":PRINT:PRINT:GOTO 999 | |||||
390 PRINT "NICE MEETING YOU, ";N$;", HAVE A NICE DAY." | |||||
400 REM | |||||
999 END |
@@ -0,0 +1,39 @@ | |||||
2 PRINT TAB(30);"INTEREST" | |||||
4 PRINT | |||||
8 PRINT | |||||
9 PA=0 | |||||
10 REM -PROGRAM TO COMPUTE INTEREST PAYMENTS | |||||
20 PRINT "INTEREST IN PERCENT"; | |||||
25 INPUT J | |||||
26 J=J/100 | |||||
30 PRINT "AMOUNT OF LOAN"; | |||||
35 INPUT A | |||||
40 PRINT "NUMBER OF YEARS"; | |||||
45 INPUT N | |||||
50 PRINT "NUMBER OF PAYMENTS PER YEAR"; | |||||
55 INPUT M | |||||
60 N=N*M | |||||
65 I=J/M | |||||
70 B=1+I | |||||
75 R=A*I/(1-1/B^N) | |||||
78 PRINT | |||||
80 PRINT "AMOUNT PER PAYMENT=";INT(R*100)/100 | |||||
85 PRINT "TOTAL INTEREST =";INT((R*N-A)*100)/100 | |||||
90 B=A | |||||
95 PRINT "PAYMENT NO.";TAB(15);"INTEREST";TAB(30);"PRINCIPAL";TAB(45);"BALANCE" | |||||
100 L=B*I | |||||
110 P=R-L | |||||
120 B=B-P | |||||
122 L=INT(L*100)/100 | |||||
124 P=INT(P*100)/100 | |||||
126 B=INT(B*100)/100 | |||||
128 PA=PA+1 | |||||
130 PRINT PA;TAB(15);"$";L;TAB(30);"$";P;TAB(45);"$";B | |||||
140 IF B>=R THEN 100 | |||||
150 PRINT TAB(30);"$";INT((B*1)*100)/100;TAB(45);"$";INT((R-B*I)*100)/100 | |||||
155 PRINT | |||||
160 PRINT PA+1;"LAST PAYMENT =";TAB(30);"$";INT((B*I+B)*100)/100 | |||||
170 PRINT | |||||
180 PRINT | |||||
190 PRINT | |||||
200 END |
@@ -0,0 +1,60 @@ | |||||
5 REM 12/16/2919 MINOR CORRECTIONS Ken intrate | |||||
10 K=0:T0=0:T1=0 | |||||
20 INPUT "INTEREST RATE (%) ",I2 | |||||
30 J=I2/1200 | |||||
40 INPUT "TERM IN MONTHS " ,N | |||||
50 D=1-(1+J)^(-N) | |||||
60 R=1000*J/D | |||||
70 P=9.9995E-03 | |||||
80 F=R+P | |||||
90 F=(INT(F*100)/100) | |||||
100 PRINT "RATE PER $1000 = $", | |||||
110 PRINT USING "#####.##";F ' %7F2 | |||||
120 INPUT "AMOUNT OF MORTGAGE ",Z | |||||
130 INPUT "PAYMENT IF KNOWN, ELSE 0 ",B | |||||
140 IF B>0 THEN 190 | |||||
150 B=(Z/1000)*F | |||||
160 INPUT "DO YOU WANT PAYMENT IN EVEN DOLLARS ",Y$ | |||||
170 IF Y$="N" THEN 190 ' IF Y$(1,1) ="N" THEN 190 | |||||
175 IF Y$="n" THEN 190 ' IF Y$(1,1) ="n" THEN 190 | |||||
180 B=INT (B+.99) | |||||
190 PRINT "MONTHLY PAYMENT = $", | |||||
200 PRINT USING "#####.##";B ' %7F2 | |||||
210 INPUT "DO YOU WANT TO AMORTIZE THIS LOAN ",Y$ | |||||
220 IF Y$="N" THEN 10 ' IF Y$(1,1)="N" THEN 10 | |||||
225 IF Y$="n" THEN 10 ' IF Y$(1,1)="n" THEN 10 | |||||
230 INPUT "DO YOU WANT DETAIL DISPLAYED ",Y$ | |||||
240 IF Y$="N" THEN S=1 ELSE S=0 ' IF Y$(1,1) ="N" THEN S=1 ELSE S=0 | |||||
245 IF Y$="n" THEN S=1 ELSE S=0 ' IF Y$(1,1) ="n" THEN S=1 ELSE S=0 | |||||
250 IF S=1 THEN 280 | |||||
260 INPUT "DISPLAY INTERVAL ",D1 | |||||
270 INPUT "DISPLAY START PERIOD ",D2 | |||||
280 PRINT "PMT# BALANCE INT PRIN RED PER INT TOT INT" | |||||
290 I1=J*Z | |||||
300 I1=I1+5E-03:I1=(INT(I1*100)/100) | |||||
310 T0=T0+I1:T1=T1+I1 | |||||
320 P1=Z | |||||
330 Q=B-I1 | |||||
340 Z=Z-Q | |||||
350 X=P1:Y=Q:X=X-Y | |||||
360 IF X>0 THEN 380 | |||||
370 Z=0:B=P1+I1:Q=B-I1 | |||||
380 K=K+1 | |||||
390 IF S=1 THEN 460 | |||||
400 IF K<>D1+D2 THEN 420 | |||||
410 PRINT USING "###";K, ' %3I | |||||
420 IF K<D1 THEN 460 | |||||
430 IF D1+D2<> K THEN 460 ELSE D2=D2+D1 | |||||
440 PRINT USING "#######.##";Z,I1,Q,T0,T1 ' %9F2 | |||||
450 T0=0 | |||||
460 IF Z>0 THEN 290 | |||||
470 PRINT:PRINT "FINAL TOTALS":PRINT | |||||
480 PRINT USING "###";K, ' %3I | |||||
490 PRINT USING "#######.##";Z,I1,Q,T0,T1 ' %9F2 | |||||
500 PRINT "LAST PAYMENT = $",: PRINT USING "#####.##";B ' %7F2 | |||||
510 STOP | |||||
600 REM --------------------------------------------------- | |||||
610 REM Changed %... to PRINT USING "#" | |||||
620 REM Changed Y$(1,1) to Y$ | |||||
699 END | |||||
@@ -0,0 +1,311 @@ | |||||
5 REM - COMPACTED:6/08/84 | |||||
7 REM - Removed LPRINT references 4-13-2020 Ken | |||||
10 PRINT " -=*OHM'S LAW*=-" | |||||
40 PRINT " MENU" | |||||
50 PRINT:PRINT TAB(10);"(1) Find I, given VOLTAGE and RESISTANCE (E and R)" | |||||
70 PRINT TAB(10);"(2) Find R, given VOLTAGE and CURRENT (V and I)" | |||||
90 PRINT TAB(10);"(3) Find E, given CURRENT and RESISTANCE (I and R)" | |||||
110 PRINT TAB(10);"(4) Find P (POWER), given VOLTAGE and CURRENT (E and I)" | |||||
130 PRINT TAB(10);"(5) Find P (POWER), given CURRENT and RESISTANCE (I and R)" | |||||
150 PRINT TAB(10);"(6) Find P (POWER), given VOLTAGE and RESISTANCE (E and R)" | |||||
170 PRINT TAB(10);"(7) Find two resistances in parallel, given R1 and R2" | |||||
190 PRINT TAB(10);"(8) Find RT, given unequal R1, R2, R3, R4 in parallel" | |||||
270 PRINT TAB(10);"(9) Find RT, given R1,R2,R3,R4 in SERIES-PARALLEL" | |||||
290 PRINT TAB(10);"(10) Find TOTAL CAPACITANCE (CT), in series circuit" | |||||
310 PRINT TAB(10);"(11) Find TOTAL CAPACITANCE (CT), 2 caps, parallel circuit" | |||||
330 PRINT TAB(10);"(12) Find TOTAL CAPACITANCE (CT), 3 caps in parallel" | |||||
350 PRINT TAB(10);"(13) Find PEAK AC VOLTAGE, given RMS value" | |||||
370 PRINT TAB(10);"(14) Find RMS VOLTAGE, given PEAK value" | |||||
390 PRINT TAB(10);"(15) Find INDUCTIVE REACTANCE (XL)" | |||||
410 PRINT TAB(10);"(16) Find CAPACITIVE REACTANCE (XC)" | |||||
430 PRINT TAB(10);"(17) Find IMPEDANCE (Z) of a series circuit" | |||||
445 PRINT TAB(10);"(18) Find IMPEDANCE (Z) of a parallel circuit" | |||||
447 PRINT | |||||
450 PRINT " Select the number you require from the menu and press 'RETURN'" | |||||
485 PRINT | |||||
490 INPUT "Caps Lock ON. Enter choice from above or -1 to exit :",C | |||||
515 IF C = -1 THEN END | |||||
517 PRINT "Choice is:";C | |||||
520 IF C= 0 OR C> 18 THEN 10 | |||||
530 ON C GOTO 540,710,880,1050,1220,1380,1540,1700,1930,2190,2360,2560,2770,2930,3070,3260,3430,3680 | |||||
540 PRINT "Calculate CURRENT (I), given VOLTAGE and RESISTANCE (E and R)" | |||||
555 PRINT | |||||
560 INPUT "What is the value of E, in volts:",V | |||||
580 INPUT "Now enter the value of R, in ohms:",R | |||||
600 LET I= (V/R) | |||||
610 PRINT " I= ";(V/R);"amperes" | |||||
630 PRINT | |||||
640 PRINT " Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
660 IF ANS$="Y" THEN 540 | |||||
670 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
690 IF ANS$="Y" THEN 10 | |||||
700 GOTO 10020 | |||||
710 PRINT "Calculate RESISTANCE (R), given VOLTAGE and CURRENT (E and I)" | |||||
730 PRINT:PRINT | |||||
740 INPUT "Input the value of E, in volts:",V | |||||
760 INPUT "Now enter the value of I, in amperes:",I | |||||
780 LET R=(V/I):PRINT "R= ";(V/I);"ohms" | |||||
800 PRINT | |||||
810 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
830 IF ANS$="Y" THEN 710 | |||||
835 PRINT | |||||
840 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
860 IF ANS$="Y" THEN 10 | |||||
870 GOTO 10020 | |||||
875 PRINT | |||||
880 PRINT "Calculate VOLTAGE (E), given CURRENT and RESISTANCE (I and R)" | |||||
895 PRINT | |||||
900 INPUT "Enter the value for I, in amperes:",I | |||||
920 INPUT "Now enter the value for R, in ohms:",R | |||||
940 LET E=(I*R):PRINT "E= ";(I*R);"volts" | |||||
960 PRINT | |||||
970 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
990 IF ANS$="Y" THEN 880 | |||||
995 PRINT | |||||
1000 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
1020 IF ANS$="Y" THEN 10 | |||||
1030 GOTO 10020 | |||||
1040 PRINT | |||||
1050 PRINT "Calculate POWER(P), given VOLTAGE(E) and CURRENT(I)" | |||||
1065 PRINT | |||||
1070 INPUT "Input the value for E, in volts:",V | |||||
1090 INPUT "Now enter the value for I, in amperes:",I | |||||
1110 LET P=V*I:PRINT "I= ";(V*I);"watts" | |||||
1130 PRINT | |||||
1140 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
1160 IF ANS$="Y" THEN 1050 | |||||
1175 PRINT | |||||
1180 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
1200 IF ANS$="Y" THEN 10 | |||||
1210 GOTO 10020 | |||||
1220 PRINT "Calculate POWER(P), given CURRENT(I) and RESISTANCE(R)" | |||||
1235 PRINT | |||||
1240 INPUT "Enter the value for I, in amperes:",I | |||||
1260 INPUT "Now enter the value for R, in ohms:",R | |||||
1280 LET P=(I*I)*R:PRINT "P= ";(I*I)*R;"watts" | |||||
1300 PRINT | |||||
1310 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
1330 IF ANS$="Y" THEN 1220 | |||||
1335 PRINT | |||||
1340 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
1360 IF ANS$="Y" THEN 10 | |||||
1370 GOTO 10020 | |||||
1380 PRINT "Calculate POWER(P), given VOLTAGE(E) and RESISTANCE(R)" | |||||
1385 PRINT | |||||
1400 INPUT "Enter the value for E, in volts:",V | |||||
1420 INPUT "Now enter the value for R, in ohms:",R | |||||
1440 LET P=(V*V)/(R):PRINT "P= ";(V*V)/(R);"watts" | |||||
1460 PRINT | |||||
1470 PRINT "Do you wish to do this calculation again ? (Y/N)":INPUT ANS$ | |||||
1490 IF ANS$="Y" THEN 1380 | |||||
1495 PRINT | |||||
1500 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
1520 IF ANS$="Y" THEN 10 | |||||
1530 GOTO 10020 | |||||
1535 PRINT | |||||
1540 PRINT "Calculate TOTAL RESISTANCE(RT) in parallel, given R1,R2" | |||||
1555 PRINT | |||||
1560 INPUT "Input the value for R1:",R1 | |||||
1580 INPUT "Now input the value for R2:",R2 | |||||
1600 LET RT= (R1*R2)/(R1+R2):PRINT "RT= ";(R1*R2)/(R1+R2);"ohms" | |||||
1620 PRINT | |||||
1630 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
1650 IF ANS$="Y" THEN 1540 | |||||
1655 PRINT | |||||
1660 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
1680 IF ANS$="Y" THEN 10 | |||||
1690 GOTO 10020 | |||||
1695 PRINT | |||||
1700 PRINT "Calculate TOTAL RESISTANCE(RT), given unequal R1,R2,R3,R4 values" | |||||
1715 PRINT | |||||
1720 PRINT "Enter the values for R1,R2,R3 and R4, in ohms" | |||||
1740 INPUT "R1=",R1 | |||||
1750 INPUT "R2=",R2 | |||||
1760 INPUT "R3=",R3 | |||||
1770 INPUT "R4=",R4 | |||||
1780 PRINT "R1=";R1;"ohms" | |||||
1790 PRINT "R2=";R2;"ohms" | |||||
1800 PRINT "R3=";R3;"ohms" | |||||
1810 PRINT "R4=";R4;"ohms" | |||||
1820 LET RT=(1)/(1/R1+1/R2+1/R3+1/R4) | |||||
1830 PRINT "RT= ";(1)/(1/R1+1/R2+1/R3+1/R4);"ohms" | |||||
1850 PRINT | |||||
1860 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
1880 IF ANS$="Y" THEN 1700 | |||||
1885 PRINT | |||||
1890 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
1910 IF ANS$="Y" THEN 10 | |||||
1920 GOTO 10020 | |||||
1925 PRINT | |||||
1930 PRINT "Calculate TOTAL RESISTANCE(RT), in series-parallel," | |||||
1940 PRINT "given R1, R2, R3 and R4" | |||||
1965 PRINT | |||||
1970 PRINT "Enter the values for R1, R2, R3 and R4" | |||||
1990 INPUT "R1=",R1 | |||||
2000 INPUT "R2=",R2 | |||||
2010 INPUT "R3=",R3 | |||||
2020 INPUT "R4=",R4 | |||||
2030 PRINT "R1=";R1;"ohms" | |||||
2040 PRINT "R2=";R2;"ohms" | |||||
2050 PRINT "R3=";R3;"ohms" | |||||
2060 PRINT "R4=";R4;"ohms" | |||||
2070 PRINT | |||||
2080 LET RT=(1)/(1/(R1+R2))+(1/(R3+R4)) | |||||
2090 PRINT "RT=";(1)/(1/(R1+R2))+(1/(R3+R4));"ohms" | |||||
2110 PRINT | |||||
2120 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
2140 IF ANS$="Y" THEN 1930 | |||||
2145 PRINT | |||||
2150 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
2170 IF ANS$="Y" THEN 10 | |||||
2180 GOTO 10020 | |||||
2185 PRINT | |||||
2190 PRINT "Calculate TOTAL CAPACITANCE(CT), in series circuit, given C1 and C2" | |||||
2205 PRINT | |||||
2210 INPUT "Enter value for C1, in MFD:",C1 | |||||
2220 INPUT "Now enter the value for C2, in MFD:",C2 | |||||
2240 PRINT "C1=";C1;"mfd" | |||||
2250 PRINT "C2=";C2;"mfd" | |||||
2260 LET CT=(C1*C2)/(C1+C2):PRINT "CT=";(C1*C2)/(C1+C2);"mfd" | |||||
2280 PRINT | |||||
2290 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
2310 IF ANS$="Y" THEN 2190 | |||||
2315 PRINT | |||||
2320 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
2340 IF ANS$="Y" THEN 10 | |||||
2350 GOTO 10020 | |||||
2355 PRINT | |||||
2360 PRINT "Calculate TOTAL CAPACITANCE(CT), parallel circuit, given C1 and C2" | |||||
2395 PRINT | |||||
2400 INPUT "Enter the value for C1, in mfd:",C1 | |||||
2420 INPUT "Now enter the value for C2, in mfd:",C2 | |||||
2440 PRINT "C1=";C1;"mfd" | |||||
2450 PRINT "C2=";C2;"mfd" | |||||
2460 LET CT=(C1*C2)/(C1+C2):PRINT "CT=";(C1*C2)/(C1+C2);"mfd" | |||||
2480 PRINT | |||||
2490 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
2510 IF ANS$="Y" THEN 2360 | |||||
2515 PRINT | |||||
2520 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
2540 IF ANS$="Y" THEN 10 | |||||
2550 GOTO 10020 | |||||
2555 PRINT | |||||
2560 PRINT "Calculate TOTAL CAPACITANCE(CT) for a parallel circuit," | |||||
2570 PRINT "given C1, C2 and C3, in mfd" | |||||
2595 PRINT | |||||
2600 INPUT "C1=",C1 | |||||
2610 INPUT "C2=",C2 | |||||
2620 INPUT "C3=",C3 | |||||
2630 PRINT "C1=";C1;"mfd" | |||||
2640 PRINT "C2=";C2;"mfd" | |||||
2650 PRINT "C3=";C3;"mfd" | |||||
2660 PRINT | |||||
2670 LET CT=(C1+C2+C3):PRINT "CT=";(C1+C2+C3);"mfd" | |||||
2690 PRINT | |||||
2700 PRINT "D0 you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
2720 IF ANS$="Y" THEN 2560 | |||||
2725 PRINT | |||||
2730 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
2750 IF ANS$="Y" THEN 10 | |||||
2760 GOTO 10020 | |||||
2765 PRINT | |||||
2770 PRINT "Calculate PEAK AC VOLTAGE, given RMS value" | |||||
2785 PRINT | |||||
2790 INPUT "Enter the RMS value, in volts:",RMS | |||||
2810 PRINT "RMS=";RMS;"volts" | |||||
2820 LET PEAK=(RMS*1.414):PRINT "PEAK=";(RMS*1.414);"volts" | |||||
2840 PRINT | |||||
2850 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
2870 IF ANS$="Y" THEN 2770 | |||||
2875 PRINT | |||||
2880 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
2900 IF ANS$="Y" THEN 10 | |||||
2910 GOTO 10020 | |||||
2920 PRINT | |||||
2930 PRINT "Calculate RMS VOLTAGE, given a value in PEAK VOLTS" | |||||
2945 PRINT | |||||
2950 INPUT "Enter the PEAK value, in volts AC:",PEAK | |||||
2960 PRINT "PEAK VOLTS=";PEAK | |||||
2970 LET RMS=(.707*PEAK):PRINT "RMS=";(.707*PEAK);"volts AC" | |||||
3000 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
3020 IF ANS$="Y" THEN 2930 | |||||
3025 PRINT | |||||
3030 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
3050 IF ANS$="Y" THEN 10 | |||||
3060 GOTO 10020 | |||||
3065 PRINT | |||||
3070 PRINT "Calculate INDUCTIVE REACTANCE (XL), given FREQUENCY and INDUCTANCE" | |||||
3090 PRINT | |||||
3100 INPUT "Enter FREQUENCY (F), in Hertz:",FREQ | |||||
3120 PRINT "FREQUENCY=";FREQ;"Hertz | |||||
3130 INPUT "Now enter the value for INDUCTANCE (L), in henrys:",L | |||||
3150 PRINT "INDUCTANCE=";L;"henrys" | |||||
3160 LET XL=(2*3.1416)*FREQ*L:PRINT "XL=";(2*3.1416)*FREQ*L;"ohms" | |||||
3180 PRINT | |||||
3190 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
3210 IF ANS$="Y" THEN 3070 | |||||
3215 PRINT | |||||
3220 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
3240 IF ANS$="Y" THEN 10 | |||||
3245 GOTO 10020 | |||||
3250 PRINT | |||||
3260 PRINT "Calculate CAPACITIVE REACTANCE (XC), given FREQ(F) and CAP(C)" | |||||
3275 PRINT | |||||
3280 INPUT "Enter the value for FREQ(F), in Hertz:",F | |||||
3290 PRINT "FREQ(F)=";F;"Hertz" | |||||
3300 INPUT "Now enter the value for CAP(C), in mfd:",C | |||||
3310 PRINT "CAP(C)=";C;"mfd" | |||||
3320 PRINT | |||||
3330 LET XC=(1)/((2*3.1416)*F*C):PRINT "XC=";(1)/((2*3.1416)*F*C);"ohms" | |||||
3350 PRINT | |||||
3360 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
3380 IF ANS$="Y" THEN 3260 | |||||
3385 PRINT | |||||
3390 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
3410 IF ANS$="Y" THEN 10 | |||||
3415 GOTO 10020 | |||||
3420 PRINT | |||||
3430 PRINT "Calculate IMPEDANCE(Z) of a series circuit, given values of" | |||||
3435 PRINT "RES(R), CAPACITIVE REACTANCE(XC) and INDUCTIVE REACTANCE(XL)" | |||||
3446 PRINT | |||||
3450 INPUT "Enter the value for RESISTANCE(R), in ohms:",R | |||||
3470 INPUT "Enter the value for CAPACITIVE REACTANCE(XC), in ohms:",XC | |||||
3490 INPUT "Enter the value for INDUCTIVE REACTANCE(XL), in ohms:",XL | |||||
3510 PRINT | |||||
3520 PRINT "RESISTANCE(R)=";R;"ohms" | |||||
3530 PRINT "CAPACITIVE REACTANCE(XC)=";XC;"ohms" | |||||
3540 PRINT "INDUCTIVE REACTANCE(XL)=";XL;"ohms" | |||||
3550 PRINT | |||||
3560 LET Z=SQR(R^2+((XL-XC)^2)) | |||||
3570 PRINT "IMPEDANCE(Z)=";SQR(R^2+((XL-XC)^2));"ohms" | |||||
3590 PRINT | |||||
3600 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
3620 IF ANS$="Y" THEN 3430 | |||||
3625 PRINT | |||||
3630 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
3650 IF ANS$="Y" THEN 10 | |||||
3660 GOTO 10020 | |||||
3670 PRINT | |||||
3680 PRINT "Calculate IMPEDANCE (Z) of a parallel circuit" | |||||
3700 PRINT | |||||
3710 INPUT "Enter the value of L, in henrys:",L | |||||
3730 INPUT "Enter the value for FREQ (F), in Hertz:",F | |||||
3750 INPUT "Now enter the value for RESISTANCE (R) in ohms:",R | |||||
3765 PRINT "INDUCTANCE (L)=";L;"henrys" | |||||
3770 PRINT "FREQ (F)=";F;" Hertz" | |||||
3775 PRINT "RESISTANCE (R)=";R;"ohms" | |||||
3776 PRINT | |||||
3780 LET Z=((2*3.1416*F*L)^2)/(R) | |||||
3790 PRINT "IMPEDANCE (Z)=";((2*3.1416*F*L)^2)/(R);"ohms" | |||||
3810 PRINT "Do you wish to do this calculation again? (Y/N)":INPUT ANS$ | |||||
3830 IF ANS$="Y" THEN 3680 | |||||
3840 PRINT | |||||
3850 PRINT "Do you wish to return to the menu? (Y/N)":INPUT ANS$ | |||||
3870 IF ANS$="Y" THEN 10 | |||||
3880 GOTO 10020 | |||||
3890 PRINT | |||||
10020 PRINT "Glad to have been of service! BYE!! | |||||
12000 REM -------------------------------------------------------------------------- | |||||
12010 REM Change line number 0 to line number 5 | |||||
12020 REM For automated testing, added 515 IF C = -1 THEN END | |||||
12999 END |
@@ -0,0 +1,11 @@ | |||||
20 PRINT "LIMIT"; | |||||
30 INPUT L | |||||
40 FOR N = 3 TO L | |||||
50 FOR D = 2 TO (N-1) | |||||
60 IF N/D=INT(N/D) THEN GOTO 100 | |||||
70 NEXT D | |||||
80 PRINT N; | |||||
90 GOTO 110 | |||||
100 PRINT "."; | |||||
110 NEXT N | |||||
120 END |
@@ -0,0 +1,5 @@ | |||||
OPTION TERMINAL ANSI | |||||
OPTION EDIT "nano" | |||||
OPTION DISABLE COMMAND "renum" | |||||
OPTION RENUM "" | |||||
@@ -0,0 +1,250 @@ | |||||
2 rem Relays control program in bwbasic 3.2 4-18-2020 ken.at.github@gmail.com | |||||
3 rem 4-18-2020 Added hardware check. Error traps and help. | |||||
4 rem As of 4-13-2020 Debian apt get install bwbasic installs an old 2.2. | |||||
5 rem Assumes bwbasic 3.2. bwbasic 2.2 has issues see changelog. | |||||
6 rem Download bwbasic-3.2a.tar file. Untar then cd bwbasic-3.2a then | |||||
7 rem make then sudo make install to uninstall sudo make remove | |||||
8 rem Set terminal to ANSI mode. Linux and Windows. Only 3.2 or newer | |||||
10 option terminal ANSI | |||||
11 call cls | |||||
: rem Clear screen on initial startup. Only 3.2 or newer | |||||
12 call close | |||||
: rem Close any open files. Again 3.2 or newer. | |||||
13 rem Trap errors | |||||
14 on error gosub 10000 | |||||
15 gosub 9000 | |||||
: rem Get Dogtag & Model & see if it's allowable hardware. | |||||
16 print | |||||
: print "=== Relay games on ";DATE$;" at ";TIME$;" ===" | |||||
: print " ";d$ | |||||
17 print " ";o$ | |||||
18 print | |||||
24 rem b$ = Base address as of Beaglebone Black Debian 10.3 3-26-2020 | |||||
25 let b$="/sys/class/gpio/gpio" | |||||
50 print "0 Off, 1 On, s State, sa State All,"; | |||||
52 print " ao All Off, l Label, h for Help or x Exit "; | |||||
: input m$ | |||||
60 IF m$ = "0" or m$ = "1" or m$ = "l" or m$ = "s" then | |||||
: goto 70 | |||||
: END IF | |||||
63 IF m$ = "x" or m$ = "e" then | |||||
: system | |||||
: END IF | |||||
: rem Stop program. Exit to system. | |||||
64 IF m$ = "sa" then | |||||
: print "Currently:" | |||||
: gosub 500 | |||||
: goto 16 | |||||
: END IF | |||||
: rem State all | |||||
65 IF m$ = "ao" then | |||||
: print "Was:" | |||||
: gosub 500 | |||||
: print "Now:" | |||||
: gosub 600 | |||||
: goto 16 | |||||
: END IF | |||||
66 IF m$ = "q" then | |||||
: print "Bye" | |||||
: stop | |||||
: END IF | |||||
: rem Stop program | |||||
67 IF m$ = "h" then | |||||
: gosub 1000 | |||||
: goto 16 | |||||
: END IF | |||||
68 print "Mode error. Only 0, 1, s, l, ao All Off, sa State All "; | |||||
69 print "h Help or x allowed" | |||||
: goto 50 | |||||
70 print "Relay # = gpio: 1 = 20, 2 = 7, 3 = 112, 4 = 115 or r to Return. "; | |||||
71 input "Enter gpio # ";s$ | |||||
75 IF s$ = "20" or s$ = "7" or s$ = "112" or s$ = "115" then | |||||
: goto 80 | |||||
: END IF | |||||
76 IF s$ = "r" then | |||||
: goto 16 | |||||
: END IF | |||||
: rem Start over | |||||
78 print "Relay gpio number error. Only 20, 7, 112, 115 or r" | |||||
: goto 70 | |||||
80 print | |||||
82 IF m$ = "l" then | |||||
: gosub 400 | |||||
: goto 16 | |||||
: END IF | |||||
: rem l = Label | |||||
84 IF m$ = "s" then | |||||
: gosub 300 | |||||
: goto 16 | |||||
: END IF | |||||
: rem s = State | |||||
86 IF m$ = "0" or m$ = "1" then | |||||
: gosub 100 | |||||
: goto 16 | |||||
: END IF | |||||
: rem Change Relay state | |||||
90 print | |||||
: print "Error. Code fall through at line 90" | |||||
: stop | |||||
100 rem Change state of a Relay. | |||||
101 rem p$ = Complete address to gpio. b$ is the Base + gpio# + end of string | |||||
102 let p$=b$ + s$ + "/value" | |||||
110 call open("O",#1,p$) | |||||
: rem Open for Output and write m$ | |||||
150 print #1,m$ | |||||
: rem Print to gpio string m$ | |||||
160 call close(#1) | |||||
210 call open("I",#1,p$) | |||||
: rem Open for Input | |||||
250 read #1,x | |||||
: rem Read numeric result | |||||
255 call close(#1) | |||||
256 IF s$ = "20" then | |||||
: print "#1 "; | |||||
: END IF | |||||
257 IF s$ = "7" then | |||||
: print "#2 "; | |||||
: END IF | |||||
258 IF s$ = "112" then | |||||
: print "#3 "; | |||||
: END IF | |||||
259 IF s$ = "115" then | |||||
: print "#4 "; | |||||
: END IF | |||||
260 gosub 700 | |||||
299 return | |||||
300 rem p$ = Complete address to gpio. b$ is the Base + gpio# + end of string | |||||
304 let p$=b$ + s$ + "/value" | |||||
310 call open("I",#1,p$) | |||||
: rem Open for Input | |||||
350 read #1,x | |||||
: rem Read numeric result | |||||
355 call close(#1) | |||||
360 gosub 700 | |||||
396 return | |||||
: rem Start over | |||||
400 rem p$ = Complete address to gpio. b$ is the Base + gpio# + end of string | |||||
404 let p$=b$ + s$ + "/label" | |||||
410 call open("I",#1,p$) | |||||
420 read #1,l$ | |||||
425 call close(#1) | |||||
430 print "Label for gpio ";s$;" is ";l$ | |||||
440 return | |||||
500 rem Display the state of all Relays 'sa' | |||||
510 let s$ = "20" | |||||
: print "#1 "; | |||||
: gosub 300 | |||||
520 let s$ = "7" | |||||
: print "#2 "; | |||||
: gosub 300 | |||||
530 let s$ = "112" | |||||
: print "#3 "; | |||||
: gosub 300 | |||||
540 let s$ = "115" | |||||
: print "#4 "; | |||||
: gosub 300 | |||||
550 return | |||||
600 rem Turn all Relays off 'ao' | |||||
612 let m$ = "0" | |||||
: rem Set mode to '0' off | |||||
620 let s$ = "20" | |||||
: gosub 100 | |||||
624 let s$ = "7" | |||||
: gosub 100 | |||||
626 let s$ = "112" | |||||
: gosub 100 | |||||
628 let s$ = "115" | |||||
: gosub 100 | |||||
630 return | |||||
700 rem Print relay state gathered from 'read' | |||||
704 print "Relay gpio ";s$," state is now = ";x; | |||||
770 IF x = 0 then | |||||
: print " Off" | |||||
: END IF | |||||
780 IF x = 1 then | |||||
: print " On" | |||||
: END IF | |||||
790 IF x > 1 or x < 0 then | |||||
: print " Error" | |||||
: END IF | |||||
799 return | |||||
1000 rem Give them some help | |||||
1010 print | |||||
: print "Information" | |||||
1020 print "To change the state of a relay use 0 for Off or 1 for On" | |||||
1022 print " Then enter the gpio number 20, 7, 112 or 115" | |||||
1024 print "To check the state of a single relay use s" | |||||
1026 print " Then enter the gpio number" | |||||
1028 print "To get the associated label (header pin) use l" | |||||
1030 print " Then enter the gpio number" | |||||
1032 print "To get the state of all relays use sa" | |||||
1034 print "To turn all relays off use ao" | |||||
1035 print "For the latest updates goto:" | |||||
1036 print "https://github.com/kenmartin-unix/Bwbasic-3.2a-for-BeagleBone" | |||||
1038 print "ken.at.github@gmail.com" | |||||
1040 print | |||||
: input "Press enter ? ",h | |||||
1099 return | |||||
9000 rem Get Model & Dogtag d$ = Dogtag 0$ = MOdel. Check for Beaglebone 'Black' | |||||
9002 rem If we fail here we should not. This only runs once at startup. | |||||
9004 call open("I",#1,"/etc/dogtag") | |||||
: rem Open dogtag file | |||||
9008 read #1,d$ | |||||
: call close(#1) | |||||
9014 call open("I",#1,"/proc/device-tree/model") | |||||
: rem Open model info | |||||
9018 read #1,o$ | |||||
: call close(#1) | |||||
9020 rem Lets see if it's a 'Black' | |||||
9025 IF (instr(1,o$,"Black") > 0) then | |||||
: return | |||||
: END IF | |||||
9055 print | |||||
: print "Warning: It appears this is not a BeagleBone 'Black'" | |||||
9056 print "It appears to be : ";o$ | |||||
9057 print "Running : ";d$ | |||||
9058 system | |||||
10000 rem Trap errors here. Hopefuly you will not get here. | |||||
10020 print | |||||
: print "Error code ";err;" Error line ";erl | |||||
10040 print | |||||
10041 IF (err = 2) then | |||||
: print "A program syntax error." | |||||
: system | |||||
: END IF | |||||
10042 IF (err = 5) then | |||||
: print "Trouble working with files." | |||||
: system | |||||
: END IF | |||||
10043 IF (erl > 9000) then | |||||
: print "Trouble during initial setup." | |||||
: system | |||||
: END IF | |||||
10044 IF (err = 62) then | |||||
: print "Reading past the end of file attempted." | |||||
: END IF | |||||
10048 IF (err = 64) then | |||||
: print "Invalid path. Verify open paths." | |||||
: system | |||||
: END IF | |||||
10060 rem CLOSE will fail on 2.2 and loop but not 3.2+ | |||||
10070 call close | |||||
: rem Just in case something is open. | |||||
11100 system | |||||
: rem Stop program | |||||
@@ -0,0 +1,4 @@ | |||||
OPTION STDERR "relays-stderr.txt" | |||||
OPTION STDOUT "relays-stdout.txt" | |||||
OPTION TERMINAL NONE | |||||
@@ -1,7 +1,7 @@ | |||||
100 for j = 1 to 22 | |||||
100 for j = 1 to 20 | |||||
200 print j | 200 print j | ||||
300 next j | 300 next j | ||||
400 for j = 1 to 80 | |||||
400 for j = 1 to 79 | |||||
500 print "I"; | 500 print "I"; | ||||
600 next j | 600 next j | ||||
650 print "#" |
@@ -0,0 +1,10 @@ | |||||
50 CALL shell("cls") | |||||
75 print "res.bas 4-13-2020 Ken run as bwbasic res.bas" | |||||
100 for j = 1 to 22 | |||||
200 print j | |||||
300 next j | |||||
400 for j = 1 to 79 | |||||
500 print "I"; | |||||
600 next j | |||||
610 print "#" | |||||
@@ -0,0 +1,21 @@ | |||||
100 rem SelCase.bas -- test SELECT CASE | |||||
110 SHELL "cls" | |||||
210 Print "SelCase.bas -- test SELECT CASE statement" | |||||
220 Input "Enter a number (0 to quit) "; d | |||||
225 If (d = 0) then end | |||||
230 Select Case d | |||||
240 Case 3 to 5 | |||||
250 Print "The number is between 3 and 5." | |||||
260 Case 6 | |||||
270 Print "The number you entered is 6." | |||||
280 Case 7 to 9 | |||||
290 Print "The number is between 7 and 9." | |||||
300 Case If > 10 | |||||
310 Print "The number is greater than 10" | |||||
320 Case If < 0 | |||||
330 Print "The number is less than 0" | |||||
340 Case Else | |||||
350 Print "The number is 1, 2 or 10." | |||||
360 End Select | |||||
365 Print | |||||
370 Goto 220 |
@@ -0,0 +1,13 @@ | |||||
10 REM compute the sum of integers from 1 to 10 with GOTO loop | |||||
20 CALL SHELL("cls") | |||||
30 LET N=1 | |||||
40 LET S = S + N | |||||
50 PRINT N,S | |||||
60 LET N = N + 1 | |||||
70 IF N <= 10 GOTO 40 | |||||
80 PRINT | |||||
: REM print empty line | |||||
90 PRINT "Final sum:";S | |||||
95 PRINT | |||||
100 END | |||||
@@ -0,0 +1,12 @@ | |||||
10 REM compute the sum of numbers with FOR loop. | |||||
20 CALL SHELL("cls") | |||||
30 FOR N=0.5 TO 10.1 STEP 0.75 | |||||
40 LET S = S + N | |||||
50 PRINT N,S | |||||
70 NEXT N | |||||
80 PRINT | |||||
: REM print empty line | |||||
90 PRINT "Final sum:";S | |||||
95 PRINT | |||||
100 END | |||||
@@ -0,0 +1,14 @@ | |||||
10 REM compute the sum of integers with FOR loop. Early exit. | |||||
20 CALL SHELL("cls") | |||||
30 FOR N=1 TO 10 | |||||
35 IF (S + N > 25) GOTO 80 | |||||
: REM exit the loop when S gets large enough | |||||
40 LET S = S + N | |||||
50 PRINT N,S | |||||
70 NEXT N | |||||
80 PRINT | |||||
: REM print empty line | |||||
90 PRINT "Final sum:";S | |||||
95 PRINT | |||||
100 END | |||||
@@ -0,0 +1,12 @@ | |||||
10 REM compute the sum of integers from 1 to 10 with FOR and negative STEP | |||||
20 CALL SHELL("cls") | |||||
30 FOR N=10 TO 1 STEP -2 | |||||
40 LET S = S + N | |||||
50 PRINT N,S | |||||
70 NEXT N | |||||
80 PRINT | |||||
: REM print empty line | |||||
90 PRINT "Final sum:";S | |||||
95 PRINT | |||||
100 END | |||||
@@ -0,0 +1,174 @@ | |||||
2 PRINT TAB(30);"TIC-TAC-TOE" | |||||
4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" | |||||
6 PRINT | |||||
8 PRINT "THE BOARD IS NUMBERED:" | |||||
10 PRINT " 1 2 3" | |||||
12 PRINT " 4 5 6" | |||||
14 PRINT " 7 8 9" | |||||
16 PRINT | |||||
20 DIM SS(9) | |||||
50 INPUT"DO YOU WANT 'X' OR 'O'";C$ | |||||
55 IF C$="X"THEN 475 | |||||
57 IF C$="x" THEN 475 | |||||
60 P$="O" | |||||
: Q$="X" | |||||
100 G=-1 | |||||
: H=1 | |||||
: IF SS(5)<>0 THEN 103 | |||||
102 SS(5)=-1 | |||||
: GOTO 195 | |||||
103 IF SS(5)<>1 THEN 106 | |||||
104 IF SS(1)<>0 THEN 110 | |||||
105 SS(1)=-1 | |||||
: GOTO 195 | |||||
106 IF SS(2)=1 AND SS(1)=0 THEN 181 | |||||
107 IF SS(4)=1 AND SS(1)=0 THEN 181 | |||||
108 IF SS(6)=1 AND SS(9)=0 THEN 189 | |||||
109 IF SS(8)=1 AND SS(9)=0 THEN 189 | |||||
110 IF G=1 THEN 112 | |||||
111 GOTO 118 | |||||
112 J=3*INT((M-1)/3)+1 | |||||
113 IF 3*INT((M-1)/3)+1=M THEN | |||||
: K=1 | |||||
: END IF | |||||
114 IF 3*INT((M-1)/3)+2=M THEN | |||||
: K=2 | |||||
: END IF | |||||
115 IF 3*INT((M-1)/3)+3=M THEN | |||||
: K=3 | |||||
: END IF | |||||
116 GOTO 120 | |||||
118 FOR J=1 TO 7 STEP 3 | |||||
: FOR K=1 TO 3 | |||||
120 IF SS(J)<>G THEN 130 | |||||
122 IF SS(J+2)<>G THEN 135 | |||||
126 IF SS(J+1)<>0 THEN 150 | |||||
128 SS(J+1)=-1 | |||||
: GOTO 195 | |||||
130 IF SS(J)=H THEN 150 | |||||
131 IF SS(J+2)<>G THEN 150 | |||||
132 IF SS(J+1)<>G THEN 150 | |||||
133 SS(J)=-1 | |||||
: GOTO 195 | |||||
135 IF SS(J+2)<>0 THEN 150 | |||||
136 IF SS(J+1)<>G THEN 150 | |||||
138 SS(J+2)=-1 | |||||
: GOTO 195 | |||||
150 IF SS(K)<>G THEN 160 | |||||
152 IF SS(K+6)<>G THEN 165 | |||||
156 IF SS(K+3)<>0 THEN 170 | |||||
158 SS(K+3)=-1 | |||||
: GOTO 195 | |||||
160 IF SS(K)=H THEN 170 | |||||
161 IF SS(K+6)<>G THEN 170 | |||||
162 IF SS(K+3)<>G THEN 170 | |||||
163 SS(K)=-1 | |||||
: GOTO 195 | |||||
165 IF SS(K+6)<>0 THEN 170 | |||||
166 IF SS(K+3)<>G THEN 170 | |||||
168 SS(K+6)=-1 | |||||
: GOTO 195 | |||||
170 GOTO 450 | |||||
171 IF SS(3)=G AND SS(7)=0 THEN 187 | |||||
172 IF SS(9)=G AND SS(1)=0 THEN 181 | |||||
173 IF SS(7)=G AND SS(3)=0 THEN 183 | |||||
174 IF SS(9)=0 AND SS(1)=G THEN 189 | |||||
175 IF G=-1 THEN | |||||
: G=1 | |||||
: H=-1 | |||||
: GOTO 110 | |||||
: END IF | |||||
176 IF SS(9)=1 AND SS(3)=0 THEN 182 | |||||
177 FOR I=2 TO 9 | |||||
: IF SS(I)<>0 THEN 179 | |||||
178 SS(I)=-1 | |||||
: GOTO 195 | |||||
179 NEXT I | |||||
181 SS(1)=-1 | |||||
: GOTO 195 | |||||
182 IF SS(1)=1 THEN 177 | |||||
183 SS(3)=-1 | |||||
: GOTO 195 | |||||
187 SS(7)=-1 | |||||
: GOTO 195 | |||||
189 SS(9)=-1 | |||||
195 PRINT | |||||
: PRINT"THE COMPUTER MOVES TO..." | |||||
202 GOSUB 1000 | |||||
205 GOTO 500 | |||||
450 IF G=1 THEN 465 | |||||
455 IF J=7 AND K=3 THEN 465 | |||||
460 NEXT K | |||||
: NEXT J | |||||
465 IF SS(5)=G THEN 171 | |||||
467 GOTO 175 | |||||
475 P$="X" | |||||
: Q$="O" | |||||
500 PRINT | |||||
: INPUT"WHERE DO YOU MOVE";M | |||||
502 IF M=0 THEN | |||||
: PRINT"THANKS FOR THE GAME." | |||||
: GOTO 2000 | |||||
: END IF | |||||
503 IF M>9 THEN 506 | |||||
505 IF SS(M)=0 THEN 510 | |||||
506 PRINT"THAT SQUARE IS OCCUPIED." | |||||
: GOTO 500 | |||||
510 G=1 | |||||
: SS(M)=1 | |||||
520 GOSUB 1000 | |||||
530 GOTO 100 | |||||
1000 PRINT | |||||
: FOR I=1 TO 9 | |||||
: PRINT" "; | |||||
: IF SS(I)<>-1 THEN 1014 | |||||
1012 PRINT Q$;" "; | |||||
: GOTO 1020 | |||||
1014 IF SS(I)<>0 THEN 1018 | |||||
1016 PRINT" "; | |||||
: GOTO 1020 | |||||
1018 PRINT P$;" "; | |||||
1020 IF I<>3 AND I<>6 THEN 1050 | |||||
1030 PRINT | |||||
: PRINT"---+---+---" | |||||
1040 GOTO 1080 | |||||
1050 IF I=9 THEN 1080 | |||||
1060 PRINT"!"; | |||||
1080 NEXT I | |||||
1095 FOR I=1 TO 7 STEP 3 | |||||
1100 IF SS(I)<>SS(I+1)THEN 1115 | |||||
1105 IF SS(I)<>SS(I+2)THEN 1115 | |||||
1110 IF SS(I)=-1 THEN 1350 | |||||
1112 IF SS(I)=1 THEN 1200 | |||||
1115 NEXT I | |||||
: FOR I=1 TO 3 | |||||
: IF SS(I)<>SS(I+3)THEN 1150 | |||||
1130 IF SS(I)<>SS(I+6)THEN 1150 | |||||
1135 IF SS(I)=-1 THEN 1350 | |||||
1137 IF SS(I)=1 THEN 1200 | |||||
1150 NEXT I | |||||
: FOR I=1 TO 9 | |||||
: IF SS(I)=0 THEN 1155 | |||||
1152 NEXT I | |||||
: GOTO 1400 | |||||
1155 IF SS(5)<>G THEN 1170 | |||||
1160 IF SS(1)=G AND SS(9)=G THEN 1180 | |||||
1165 IF SS(3)=G AND SS(7)=G THEN 1180 | |||||
1170 RETURN | |||||
1180 IF G=-1 THEN 1350 | |||||
1200 PRINT"YOU BEAT ME!! GOOD GAME." | |||||
: GOTO 2000 | |||||
1350 PRINT"I WIN, TURKEY!!!" | |||||
: GOTO 2000 | |||||
1400 PRINT"IT'S A DRAW. THANK YOU." | |||||
2000 END | |||||
@@ -1,441 +0,0 @@ | |||||
Bywater BASIC Interpreter/Shell, version 1.10 | |||||
--------------------------------------------- | |||||
Copyright (c) 1992, Ted A. Campbell | |||||
for bwBASIC version 1.10, 1 November 1992 | |||||
CONTENTS: | |||||
1. DESCRIPTION | |||||
2. TERMS OF USE | |||||
3. COMMANDS AND FUNCTIONS IMPLEMENTED | |||||
4. SOME NOTES ON USAGE | |||||
5. UNIMPLEMENTED COMMANDS AND FUNCTIONS | |||||
6. SOME NOTES ON COMPILATION | |||||
7. THE STORY OF BYWATER BASIC | |||||
8. COMMUNICATIONS | |||||
1. DESCRIPTION | |||||
The Bywater BASIC Interpreter (bwBASIC) implements a large | |||||
superset of the ANSI Standard for Minimal BASIC (X3.60-1978) | |||||
in ANSI C and offers shell program facilities as an extension | |||||
of BASIC. | |||||
The set of BASIC commands and functions implemented is fairly | |||||
limited (see section three below), although more commands and | |||||
functions are implemented than appear in the specification | |||||
for Minimal BASIC. There are no commands that are terminal- or | |||||
hardware specific. (Seriously -- CLS may work under bwBASIC | |||||
on your DOS-based pc, but that is because bwBASIC shells | |||||
out to DOS when it does not recognize CLS and executes CLS there.) | |||||
The interpreter is slow. Whenever faced with a choice between | |||||
conceptual clarity and speed, I have consistently chosen | |||||
the former. The interpreter is the simplest design available, | |||||
and utilizes no system of intermediate code, which would speed | |||||
up considerably its operation. As it is, each line is interpreted | |||||
afresh as the interpreter comes to it. | |||||
bwBASIC implements one feature not available in previous BASIC | |||||
interpreters: a shell command can be entered interactively at the | |||||
bwBASIC prompt, and the interpreter will execute it under a | |||||
command shell. For instance, the command "dir *.bas" can be | |||||
entered in bwBASIC (under DOS, or "ls -l *.bas" under UNIX) and | |||||
it will be executed as from the operating system command line. | |||||
Shell commands can also be given on numbered lines in a bwBASIC | |||||
program, so that bwBASIC can be used as a shell programming | |||||
language. bwBASIC's implementation of the RMDIR, CHDIR, MKDIR, | |||||
NAME, KILL, ENVIRON, and ENVIRON$() commands and functions | |||||
offer further shell-processing capabilities. | |||||
2. TERMS OF USE: | |||||
The bwBASIC source code and executables produced from it can be | |||||
used subject to the following statement which is included in | |||||
the header to all the source code files: | |||||
All U.S. and international copyrights are claimed by the | |||||
author. The author grants permission to use this code | |||||
and software based on it under the following conditions: | |||||
(a) in general, the code and software based upon it may be | |||||
used by individuals and by non-profit organizations; (b) it | |||||
may also be utilized by governmental agencies in any country, | |||||
with the exception of military agencies; (c) the code and/or | |||||
software based upon it may not be sold for a profit without | |||||
an explicit and specific permission from the author, except | |||||
that a minimal fee may be charged for media on which it is | |||||
copied, and for copying and handling; (d) the code must be | |||||
distributed in the form in which it has been released by the | |||||
author; and (e) the code and software based upon it may not | |||||
be used for illegal activities. | |||||
3. BASIC COMMANDS AND FUNCTIONS IMPLEMENTED: | |||||
ABS( number ) | |||||
ASC( string$ ) | |||||
ATN( number ) | |||||
CHAIN [MERGE] file-name [, line-number] [, ALL] | |||||
CHR$( number ) | |||||
CINT( number ) | |||||
CLEAR | |||||
CLOSE [[#]file-number]... | |||||
COMMON variable [, variable...] | |||||
COS( number ) | |||||
CSNG( number ) | |||||
CVD( string$ ) | |||||
CVI( string$ ) | |||||
CVS( string$ ) | |||||
DATA constant[,constant]... | |||||
DATE$ | |||||
DEF FNname(arg...)] = expression | |||||
DEFDBL letter[-letter](, letter[-letter])... | |||||
DEFINT letter[-letter](, letter[-letter])... | |||||
DEFSNG letter[-letter](, letter[-letter])... | |||||
DEFSTR letter[-letter](, letter[-letter])... | |||||
DELETE line[-line] | |||||
DIM variable(elements...)[variable(elements...)]... | |||||
END | |||||
ENVIRON variable-string = string | |||||
ENVIRON$( variable-string ) | |||||
EOF( device-number ) | |||||
ERASE variable[, variable]... | |||||
ERL | |||||
ERR | |||||
ERROR number | |||||
EXP( number ) | |||||
FIELD [#] device-number, number AS string-variable [, number AS string-variable...] | |||||
FOR counter = start TO finish [STEP increment] | |||||
GET [#] device-number [, record-number] | |||||
GOSUB line | |||||
GOTO line | |||||
HEX$( number ) | |||||
IF expression THEN statement [ELSE statement] | |||||
INPUT [# device-number]|[;]["prompt string";]list of variables | |||||
INSTR( [start-position,] string-searched$, string-pattern$ ) | |||||
INT( number ) | |||||
KILL file-name | |||||
LEFT$( string$, number-of-spaces ) | |||||
LEN( string$ ) | |||||
LET variable = expression | |||||
LINE INPUT [[#] device-number,]["prompt string";] string-variable$ | |||||
LIST line[-line] | |||||
LOAD file-name | |||||
LOC( device-number ) | |||||
LOF( device-number ) | |||||
LOG( number ) | |||||
LSET string-variable$ = expression | |||||
MERGE file-name | |||||
MID$( string$, start-position-in-string[, number-of-spaces ] ) | |||||
MKD$( double-value# ) | |||||
MKI$( integer-value% ) | |||||
MKS$( single-value! ) | |||||
NAME old-file-name AS new-file-name | |||||
NEW | |||||
NEXT counter | |||||
OCT$( number ) | |||||
ON variable GOTO|GOSUB line[,line,line,...] | |||||
ON ERROR GOSUB line | |||||
OPEN O|I|R, [#]device-number, file-name [,record length] | |||||
file-name FOR INPUT|OUTPUT|APPEND AS [#]device-number [LEN = record-length] | |||||
OPTION BASE number | |||||
POS | |||||
PRINT [# device-number,][USING format-string$;] expressions... | |||||
PUT [#] device-number [, record-number] | |||||
RANDOMIZE number | |||||
READ variable[, variable]... | |||||
REM string | |||||
RESTORE line | |||||
RETURN | |||||
RIGHT$( string$, number-of-spaces ) | |||||
RND( number ) | |||||
RSET string-variable$ = expression | |||||
RUN [line][file-name] | |||||
SAVE file-name | |||||
SGN( number ) | |||||
SIN( number ) | |||||
SPACE$( number ) | |||||
SPC( number ) | |||||
SQR( number ) | |||||
STOP | |||||
STR$( number ) | |||||
STRING$( number, ascii-value|string$ ) | |||||
SWAP variable, variable | |||||
SYSTEM | |||||
TAB( number ) | |||||
TAN( number ) | |||||
TIME$ | |||||
TIMER | |||||
TROFF | |||||
TRON | |||||
VAL( string$ ) | |||||
WEND | |||||
WHILE expression | |||||
WIDTH [# device-number,] number | |||||
WRITE [# device-number,] element [, element ].... | |||||
If DIRECTORY_CMDS is set to TRUE when the program is compiled, | |||||
then the following commands will be available: | |||||
CHDIR pathname | |||||
MKDIR pathname | |||||
RMDIR pathname | |||||
If DEBUG is set to TRUE when the program is compiled then | |||||
the following debugging commands (unique to bwBASIC) will | |||||
be available: | |||||
VARS (prints a list of all variables) | |||||
CMDS (prints a list of all commands) | |||||
FNCS (prints a list of all functions) | |||||
If COMMAND_SHELL is set to TRUE when the program is compiled, | |||||
then the user may enter a shell command at the bwBASIC prompt. | |||||
4. SOME NOTES ON USAGE: | |||||
An interactive environment is provided, so that a line with a | |||||
line number can be entered at the bwBASIC prompt and it will be | |||||
added to the program in memory. | |||||
Line numbers are not strictly required, but are useful if the | |||||
interactive enviroment is used for programming. For longer | |||||
program entry one might prefer to use an ASCII text editor, and | |||||
in this case lines can be entered without numbers. In this case, | |||||
however, one will not be able to alter the numberless lines | |||||
within the interactive environment. | |||||
Command names and function names are not case sensitive, | |||||
so that "Run" and "RUN" and "run" are equivalent and "abs()" | |||||
and "ABS()" and "Abs()" are equivalent. HOWEVER: variable | |||||
names ARE case sensitive in bwbASIC, so that "d$" and "D$" | |||||
are different variables. This differs from some BASIC | |||||
implementations where variable names are not case sensitive. | |||||
A filename can be specified on the command line and will be | |||||
LOADed and RUN immediately, so that the command line | |||||
bwbasic prog.bas | |||||
will load and execute "prog.bas". | |||||
All programs are stored as ASCII text files. | |||||
TRUE is defined as -1 and FALSE is defined as 0 in the default | |||||
distribution of bwBASIC. These definitions can be changed by | |||||
those compiling bwBASIC (see file BWBASIC.H). | |||||
Assignment must be made to variables. This differs from some | |||||
implementations of BASIC where assignment can be made to a | |||||
function. Implication: "INSTR( 3, x$, y$ ) = z$" will not | |||||
work under bwBASIC. | |||||
Notes on the implementation of specific commands: | |||||
CVI(), CVD(), CVS(), MKI$(), MKD$(), MKS$(): These functions | |||||
are implemented, but are dependent on a) the sizes for integer, | |||||
float, and double values on particular systems, and b) how | |||||
particular versions of C store these numerical values. The | |||||
implication is that data files created using these functions | |||||
on a DOS-based microcomputer may not be translated correctly | |||||
by bwBASIC running on a Unix-based computer. Similarly, data | |||||
files created by bwBASIC compiled by one version of C may not be | |||||
readable by bwBASIC compiled by another version of C (even under | |||||
the same operating system). So be careful with these. | |||||
ENVIRON: The ENVIRON command requires BASIC strings on either | |||||
side of the equals sign. Thus: | |||||
environ "PATH" = "/usr/bin" | |||||
It might be noted that this differs from the implementation | |||||
of ENVIRON in some versions of BASIC, but bwBASIC's ENVIRON | |||||
allows BASIC variables to be used on either side of the equals | |||||
sign. Note that the function ENVIRON$() is different from the | |||||
command, and be aware of the fact that in some operating systems | |||||
an environment variable set within a program will not be passed | |||||
to its parent shell. | |||||
ERR: Note that if PROG_ERRORS has been defined when bwBASIC is | |||||
compiled, the ERR variable will not be set correctly upon | |||||
errors. It only works when standard error messages are used. | |||||
FOR and NEXT: In this implementation of bwBASIC, a NEXT | |||||
statement must appear in the first position in a program | |||||
line; it cannot appear in a line segment beyond a colon. | |||||
INPUT: bwBASIC cannot support the optional feature of INPUT | |||||
that suppresses the carriage-return and line-feed at the end | |||||
of the input. This is because ANSI C does not provide for any | |||||
means of input other than CR-LF-terminated strings. | |||||
5. UNIMPLEMENTED COMMANDS AND FUNCTIONS | |||||
There are a few items not implemented that have been so long | |||||
a part of standard BASICs that their absence will seem surprising. | |||||
In each case, though, their implementation would require opera- | |||||
ting-system-specific functions or terminal-specific functions | |||||
that ANSI C cannot provide. Some specific examples: | |||||
CALL In some versions of BASIC, CALL is used to call a | |||||
machine language subroutine, but machine language | |||||
routines are highly system-specific. In other | |||||
BASICs (conforming to the more complete ANSI | |||||
definition of BASIC), CALL is used to call a | |||||
named subroutine. Although it's possible that | |||||
bwBASIC could develop as a numberless BASIC | |||||
with named subroutine calls, these features | |||||
are not implemented in this earliest released | |||||
version. | |||||
CLOAD See CALL above (machine language subroutines). | |||||
CONT See RESUME below (programmer ignorance?). | |||||
DEF USR See CALL above (machine language subroutines). | |||||
EDIT EDIT would be especially nice, but requires some | |||||
specific knowledge of how particular computers | |||||
handle interaction between the screen and the | |||||
keyboard. This knowledge isn't available within | |||||
the bounds of ANSI C alone ("innerhalb die Grenzen | |||||
der reinen Vernunft," with apologies to Immanuel | |||||
Kant). | |||||
FRE() The ability to report the amount of free memory | |||||
remaining is system-specific due to varying patterns | |||||
of memory allocation and access; consequently this | |||||
ability is not present in ANSI C and this function | |||||
is not available in bwBASIC. | |||||
FILES The FILES command requires a list of files conforming | |||||
to a specifier; ANSI C does not provide this. When | |||||
COMMAND_SHELL is defined as TRUE, users might want | |||||
to issue operating-system commands such as "DIR" | |||||
(DOS) or "ls -l" (Unix) to get a list of files. | |||||
INKEY$ This function requires a keyboard scan to indicate | |||||
whether a key is pending. Although this facility | |||||
is easily available on microcomputers (it is part | |||||
of the minimal CP/M Operating System), it is not | |||||
easily available on some more complex systems. | |||||
Consequently, it's not part of the C standard and | |||||
bwBASIC has not implemented INKEY$. | |||||
INPUT$() Similar to INKEY$ above, ANSI C by itself is not | |||||
able to read unechoed keyboard input, and can read | |||||
keyboard input only after a Carriage-Return has | |||||
been entered. | |||||
INP Calls to hardware ports, like machine-language | |||||
routines, are highly system-specific and cannot | |||||
be implemented in ANSI C alone. | |||||
LLIST See LPRINT below. | |||||
LPOS See LPRINT below. | |||||
LPRINT and LLIST, etc., require access to a printer device, | |||||
and this varies from one system to another. Users | |||||
might try OPENing the printer device on their own | |||||
operating system (e.g., "/dev/lp" on Unix systems, | |||||
or "PRN" under DOS) and see if printing can be done | |||||
from bwBASIC in this way. | |||||
NULL In this case, I am convinced that NULL is no longer | |||||
necessary, since very few printers now require NULLs | |||||
at the end of lines. | |||||
OUT See INP above (calls to hardware ports). | |||||
PEEK() PEEK and POKE enabled earlier BASICs to address | |||||
particular memory locations. Although bwBASIC | |||||
could possibly implement this command (POKE) and | |||||
this function (PEEK()), the limitation would be | |||||
highly limited by the different systems for | |||||
memory access in different systems. | |||||
POKE see PEEK() above. | |||||
RENUM Since unnumbered lines can be entered and | |||||
executed under bwBASIC, it would not be | |||||
possible to implement a RENUM routine. | |||||
RESUME Is this possible under ANSI C? If so, I | |||||
simply have failed to figure it out yet. | |||||
Mea culpa (but not maxima). | |||||
USR See CALL and DEF USR above (machine language | |||||
subroutines). | |||||
VARPTR See PEEK and POKE above. | |||||
WAIT See INP and OUT above. | |||||
6. SOME NOTES ON COMPILATION | |||||
bwBASIC is written in ANSI C and takes advantage of some of the | |||||
enhancements of ANSI C over the older K&R standard. The program | |||||
expects to find standard ANSI C include files (such as ). | |||||
Because there is nothing terminal- or hardware-specific about it, | |||||
I should hope that it would compile correctly under any ANSI C | |||||
compiler, but you may have to construct your own makefile. | |||||
Two makefiles are currently provided: "makefile.qcl" will compile | |||||
the program utilizing the Microsoft QuickC (tm) line-oriented | |||||
compiler on DOS-based p.c.'s, and "makefile.gcc" will compile | |||||
the program utilizing the ANSI option of Gnu C++. I have also | |||||
compiled the program utilizing Borland's Turbo C++ (tm) on DOS- | |||||
based machines. | |||||
No alterations to flags are necessary for varied environments, | |||||
but the beginning of file allows the user to set | |||||
some debugging flags and to control some program defaults. | |||||
The file has a number of language-specific message | |||||
sets that can be controlled by setting the appropriate language | |||||
flag. | |||||
7. THE STORY OF BYWATER BASIC | |||||
This program was originally begun in 1982 by my grandmother, Mrs. | |||||
Verda Spell of Beaumont, TX. She was writing the program using | |||||
an ANSI C compiler on an Osborne I CP/M computer and although my | |||||
grandfather (Lockwood Spell) had bought an IBM PC with 256k of | |||||
RAM my grandmother would not use it, paraphrasing George Herbert | |||||
to the effect that "He who cannot in 64k program, cannot in 512k." | |||||
She had used Microsoft BASIC and although she had nothing against | |||||
it she said repeatedly that she didn't understand why Digital | |||||
Research didn't "sue the socks off of Microsoft" for version 1.0 | |||||
of MSDOS and so I reckon that she hoped to undercut Microsoft's | |||||
entire market and eventually build a new software empire on | |||||
the North End of Beaumont. Her programming efforts were cut | |||||
tragically short when she was thrown from a Beaumont to Port | |||||
Arthur commuter train in the summer of 1986. I found the source | |||||
code to bwBASIC on a single-density Osborne diskette in her knitting | |||||
bag and eventually managed to have it all copied over to a PC | |||||
diskette. I have revised it slightly prior to this release. You | |||||
should know, though, that I myself am an historian, not a programmer. | |||||
8. COMMUNICATIONS: | |||||
Ted A. Campbell | |||||
Bywater Software | |||||
P.O. Box 4023 | |||||
Duke Station | |||||
Durham, NC 27706 | |||||
USA | |||||
email: tcamp@acpub.duke.edu | |||||
@@ -1,35 +0,0 @@ | |||||
@echo off | |||||
rem Filename: DMCDOS32.CMD | |||||
rem Purpose: Build Bywater BASIC for MS-DOS (32-bit) using Digital Mars Compiler Version 8.42n | |||||
rem Author: Howard Wulf, AF5NE | |||||
rem Date: 2015-01-29 | |||||
rem Uasage: implementation defined | |||||
rem Example: | |||||
rem cd \sdcard\Download\BASIC\bwbasic3\ | |||||
rem DMCDOS32.CMD | |||||
rem | |||||
rem This is the location of DMC.EXE | |||||
rem | |||||
set BINDIR=C:\DOS\dm\bin; | |||||
rem | |||||
rem Cleanup before compile | |||||
rem | |||||
DEL BW*.EXE 1> NUL 2> NUL | |||||
DEL BW*.OBJ 1> NUL 2> NUL | |||||
DEL BW*.MAP 1> NUL 2> NUL | |||||
rem | |||||
rem Compile | |||||
rem | |||||
set OLDPATH=%PATH% | |||||
set PATH=%BINDIR%;%PATH% | |||||
dmc.exe > DMCDOS32.TXT | |||||
dmc.exe -mx -A89 -oBWBASIC.EXE -DHAVE_MSDOS=1 bwbasic.c bwb_cmd.c bwb_cnd.c bwb_dio.c bwb_exp.c bwb_fnc.c bwb_inp.c bwb_int.c bwb_prn.c bwb_stc.c bwb_str.c bwb_tbl.c bwb_var.c bwd_cmd.c bwd_fun.c bwx_tty.c X32.LIB >> DMCDOS32.TXT | |||||
set PATH=%OLDPATH% | |||||
set OLDPATH= | |||||
set BINDIR= | |||||
rem | |||||
rem Cleanup after compile | |||||
rem | |||||
DEL BW*.OBJ 1> NUL 2> NUL | |||||
DEL BW*.MAP 1> NUL 2> NUL | |||||
rem EOF |
@@ -1,35 +0,0 @@ | |||||
@echo off | |||||
rem Filename: DMCWIN32.CMD | |||||
rem Purpose: Build Bywater BASIC for MS-WINDOWS (32-bit) using Digital Mars Compiler Version 8.42n | |||||
rem Author: Howard Wulf, AF5NE | |||||
rem Date: 2015-01-29 | |||||
rem Uasage: implementation defined | |||||
rem Example: | |||||
rem cd \sdcard\Download\BASIC\bwbasic3\ | |||||
rem DMCWIN32.CMD | |||||
rem | |||||
rem This is the location of DMC.EXE | |||||
rem | |||||
set BINDIR=C:\DOS\dm\bin | |||||
rem | |||||
rem Cleanup before compile | |||||
rem | |||||
DEL BW*.EXE 1> NUL 2> NUL | |||||
DEL BW*.OBJ 1> NUL 2> NUL | |||||
DEL BW*.MAP 1> NUL 2> NUL | |||||
rem | |||||
rem Compile | |||||
rem | |||||
set OLDPATH=%PATH% | |||||
set PATH=%BINDIR%;%PATH% | |||||
dmc.exe > DMCWIN32.TXT | |||||
dmc.exe -mn -A89 -oBWBASIC.EXE -DHAVE_MSDOS=1 bwbasic.c bwb_cmd.c bwb_cnd.c bwb_dio.c bwb_exp.c bwb_fnc.c bwb_inp.c bwb_int.c bwb_prn.c bwb_stc.c bwb_str.c bwb_tbl.c bwb_var.c bwd_cmd.c bwd_fun.c bwx_tty.c >> DMCWIN32.TXT | |||||
set PATH=%OLDPATH% | |||||
set OLDPATH= | |||||
set BINDIR= | |||||
rem | |||||
rem Cleanup after compile | |||||
rem | |||||
DEL BW*.OBJ 1> NUL 2> NUL | |||||
DEL BW*.MAP 1> NUL 2> NUL | |||||
rem EOF |
@@ -4,8 +4,8 @@ Encoding=UTF-8 | |||||
Name=Bywater BASIC | Name=Bywater BASIC | ||||
GenericName=Bywater BASIC | GenericName=Bywater BASIC | ||||
Type=Application | Type=Application | ||||
Exec=bwbasic | |||||
Icon=/usr/share/pixmaps/bwbasic.png | |||||
Exec=<File Location Example /home/username/bin/>bwbasic.sh | |||||
Icon=<File Location Example /home/username/png/>bwbasic.png | |||||
StartupNotify=true | StartupNotify=true | ||||
Terminal=true | Terminal=true | ||||
Categories=Development | Categories=Development |
@@ -0,0 +1,7 @@ | |||||
# 12/14/2019 Ken | |||||
trap 'echo " "; echo "PROGRAM INTERRUPTED"; echo "Press Enter "; read j; exit 1' INT | |||||
cd /home/$USER/source/bwbasic-3.2a/BAS-EXAMPLES | |||||
bwbasic | |||||
# -n = no newline -e interpret special octel numbers \007 = Bell | |||||
/bin/echo -n -e "Bwbasic terminated. Press Enter \007" | |||||
read j |
@@ -0,0 +1,481 @@ | |||||
README file for | |||||
Bywater BASIC Interpreter, version 3.20 | |||||
--------------------------------------------- | |||||
Copyright (c) 1993, Ted A. Campbell | |||||
for bwBASIC version 2.10, 11 October 1993 | |||||
Version 2.20 modifications by Jon B. Volkoff, | |||||
25 November 1995 | |||||
Patch level 1 release by Jon B. Volkoff, | |||||
15 March 1996 | |||||
Patch level 2 release by Jon B. Volkoff, | |||||
11 October 1997 | |||||
Version 2.30 modifications by Paul Edwards, | |||||
5 March 2008 | |||||
Version 2.40 modifications by Paul Edwards, | |||||
26 Jan 2009 | |||||
Version 2.50 modifications by Paul Edwards, | |||||
4 June 2009 | |||||
Version 2.60 modifications by Paul Edwards, | |||||
6 November 2012 | |||||
Version 2.61 modifications by Paul Edwards, | |||||
4 August 2014 | |||||
Version 3.00 modifications by Howard Wulf, AF5NE | |||||
12 May 2015 | |||||
Version 3.10 modifications by Howard Wulf, AF5NE | |||||
27 July 2016 | |||||
Version 3.20 modifications by Howard Wulf, AF5NE | |||||
4 June 2017 | |||||
DESCRIPTION: | |||||
The Bywater BASIC Interpreter (bwBASIC) implements a large | |||||
superset of the ANSI Standard for Minimal BASIC (X3.60-1978), | |||||
a significant subset of the ANSI Standard for Full BASIC | |||||
(X3.113-1987), and many classic BASIC dialects in C. bwBASIC | |||||
seeks to be as portable as possible. | |||||
This version of Bywater BASIC is released under the terms of the | |||||
GNU General Public License (GPL), which is distributed with this | |||||
software in the file "COPYING". The GPL specifies the terms | |||||
under which users may copy and use the software in this distribution. | |||||
A separate license is available for commercial distribution, | |||||
for information on which you should contact the author. | |||||
OBTAINING THE SOURCE CODE: | |||||
The source code for bwBASIC is available from | |||||
http://bwbasic.sourceforge.net | |||||
COMMUNICATIONS: | |||||
email: tcamp@delphi.com (for Ted Campbell) | |||||
eidetics@cerf.net (for Jon Volkoff) | |||||
mutazilah@gmail.com (for Paul Edwards) | |||||
A LIST OF BASIC COMMANDS AND FUNCTIONS IMPLEMENTED in bwBASIC: | |||||
The complete list of over 500 commands, functions and operators is | |||||
in the file "ALL.txt" in the DOCS directory. Documentation for each | |||||
dialect is also in the DOCS directory. Be aware that the commands, | |||||
functions and operators available depend upon the particular BASIC | |||||
dialect selected using the OPTION VERSION command. | |||||
CHANGE HISTORY | |||||
CHANGES FROM 3.10 to 3.20 | |||||
* Implements most of the following BASIC dialects: | |||||
OPTION VERSION "BYWATER" ' Bywater BASIC 3 | |||||
OPTION VERSION "BYWATER-2" ' Bywater BASIC 2 | |||||
OPTION VERSION "CALL/360" ' SBC CALL/360 Mainframe BASIC | |||||
OPTION VERSION "CBASIC-II" ' CBASIC-II for CP/M | |||||
OPTION VERSION "DARTMOUTH" ' Dartmouth DTSS BASIC | |||||
OPTION VERSION "ECMA-55" ' ANSI Minimal BASIC | |||||
OPTION VERSION "ECMA-116" ' ANSI Full BASIC | |||||
OPTION VERSION "GCOS" ' GE 600 Mainframe BASIC | |||||
OPTION VERSION "HAARDT" ' bas 2.4 by Michael Haardt | |||||
OPTION VERSION "HANDBOOK1" ' The BASIC Handbook, 1st Edition | |||||
OPTION VERSION "HANDBOOK2" ' The BASIC Handbook, 2nd Edition | |||||
OPTION VERSION "HEATH" ' Heath Benton Harbor BASIC | |||||
OPTION VERSION "MARK-I" ' GE 265 Mainframe BASIC | |||||
OPTION VERSION "MARK-II" ' GE 435 Mainframe BASIC | |||||
OPTION VERSION "MBASIC" ' Microsoft BASIC-80 for Xenix | |||||
OPTION VERSION "PDP-8" ' DEC PDP-8 BASIC | |||||
OPTION VERSION "PDP-11" ' DEC PDP-11 BASIC | |||||
OPTION VERSION "RBASIC" ' Micronics RBASIC for 6809 FLEX | |||||
OPTION VERSION "RSTS-11" ' DEC RSTS-11 BASIC-PLUS | |||||
OPTION VERSION "SYSTEM/360" ' IBM System/360 Mainframe BASIC | |||||
OPTION VERSION "SYSTEM/370" ' IBM System/370 Mainframe BASIC | |||||
OPTION VERSION "TRS-80" ' TRS-80 Model I/III/4 LBASIC | |||||
OPTION VERSION "VINTAGE" ' Vintage BASIC 1.0.1 | |||||
OPTION VERSION "XBASIC" ' TSC XBASIC for 6800 FLEX | |||||
* CONST variable [, ...] = value | |||||
Assigns the value to variable. | |||||
Any later assignment to the variable causus a VARIABLE NOT DECLARED error. | |||||
* DIM now supports lower and upper bounds. | |||||
OPTION BASE 1 | |||||
DIM X( 9 ) ' lower bound is 1 | |||||
DIM Y( 5 TO 9 ) ' lower bound is 5 | |||||
* DIM now supports virtual variables. | |||||
OPTION BASE 1 | |||||
OPEN "VIRTUAL.DAT" FOR VIRTUAL AS # 3 ' virtual data file | |||||
DIM # 3, A( 1000 ) ' array is virtual | |||||
LET A( 1000 ) = 0 ' value is written to the file | |||||
LET X = A( 1000 ) ' value is read from the file | |||||
CLOSE # 3 ' array is no longer valid | |||||
* ERROR 27, "Bad DATA" | |||||
Occurs when the READ command detects garbage in a DATA command. | |||||
* INPUT LINE | |||||
Same as LINE INPUT. | |||||
* MAT now supports lower and upper bounds. | |||||
OPTION BASE 1 | |||||
MAT X( 9 ) = ZER ' lower bound is 1 | |||||
MAT Y( 5 TO 9 ) = ZER ' lower bound is 5 | |||||
MAT X = ZER( 9 ) ' lower bound is 1 | |||||
MAT Y - ZER( 5 TO 9 ) ' lower bound is 5 | |||||
* MAXLEN() | |||||
Returns the maximum string length. | |||||
* OPTION DIGITS integer | |||||
Sets the number of significant digits for PRINT. | |||||
Setting the value to zero restores the default. | |||||
* OPTION EDIT string$ | |||||
Sets the program name used by the EDIT command. | |||||
Setting this to "" disables EDIT command. | |||||
* OPTION FILES string$ | |||||
Sets the program name used by the FILES command. | |||||
Setting this to "" disables FILES command. | |||||
* OPTION PROMPT string$ | |||||
Sets the prompt. | |||||
* OPTION PUNCT AT char$ | |||||
Sets the PRINT AT character, commonly "@". | |||||
Setting this to "" disables PRINT AT. | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT BYTE char$ | |||||
Sets the BYTE type suffix, commonly "~". | |||||
Setting this to "" disables BYTE suffix. | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT COMMENT char$ | |||||
Sets the trailing COMMENT character, commonly "'". | |||||
Setting this to "" disables trailing comments. | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT CURRENCY char$ | |||||
Sets the CURRENCY type suffix, commonly "@". | |||||
Setting this to "" disables CURRENCY suffix. | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT DOUBLE char$ | |||||
Sets the DOUBLE type suffix, commonly "#". | |||||
Setting this to "" disables DOUBLE suffix. | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT FILENUM char$ | |||||
Sets the FILE NUMBER prefix, commonly "#". | |||||
Setting this to "" disables the FILE NUMBER prefix. | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT IMAGE char$ | |||||
Sets the shortcut IMAGE character, commonly ":". | |||||
Setting this to "" disables the shortcut IMAGE character. | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT INPUT char$ | |||||
Sets the shortcut INPUT character, commonly "!". | |||||
Setting this to "" disables the shortcut INPUT character. | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT INTEGER char$ | |||||
Sets the INTEGER type suffix, commonly "%". | |||||
Setting this to "" disables INTEGER suffix. | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT LONG char$ | |||||
Sets the LONG type suffix, commonly "&". | |||||
Setting this to "" disables LONG suffix. | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT LPAREN char$ | |||||
Sets the LEFT PARENTHESIS character, commonly "(". | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT PRINT char$ | |||||
Sets the shortcut PRINT character, commonly "?". | |||||
Setting this to "" disables the shortcut PRINT character. | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT QUOTE char$ | |||||
Sets the QUOTE character, commonly """". | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT RPAREN char$ | |||||
Sets the RIGHT PARENTHESIS character, commonly ")". | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT SINGLE char$ | |||||
Sets the SINGLE type suffix, commonly "!". | |||||
Setting this to "" disables SINGLE suffix. | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT STATEMENT char$ | |||||
Sets the shortcut STATEMENT seperator character, commonly ":". | |||||
Setting this to "" disables the STATEMENT seperator. | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION PUNCT STRING char$ | |||||
Sets the STRING type suffix, commonly "$". | |||||
Setting this to "" disables STRING suffix. | |||||
Setting this to a non-punctuation character is not supported. | |||||
* OPTION RECLEN integer | |||||
Sets the default record length for RANDOM files, commonly 128. | |||||
Setting thisto zero means there is no default RANDOM record | |||||
length, so the record length must be specified in the OPEN | |||||
statement. | |||||
With OPTION RECLEN 128: | |||||
OPEN "FILE.DAT" FOR RANDOM AS #3 | |||||
is considered to be the same as | |||||
OPEN "FILE.DAT" FOR RANDOM AS #3 LEN 128 | |||||
With OPTION RECLEN 0: | |||||
OPEN "FILE.DAT" FOR RANDOM AS #3 | |||||
causes an error. | |||||
* OPTION RENUM string$ | |||||
Sets the program name used by the RENUM command. | |||||
Setting this to "" disables RENUM command. | |||||
* OPTION SCALE integer | |||||
Sets the number of digits to round after the decimal point for PRINT. | |||||
Setting the value to zero disables rounding. | |||||
* OPTION USING DIGIT | |||||
* OPTION USING COMMA | |||||
* OPTION USING PERIOD | |||||
* OPTION USING PLUS | |||||
* OPTION USING MINUS | |||||
* OPTION USING EXRAD | |||||
* OPTION USING DOLLAR | |||||
* OPTION USING FILLER | |||||
* OPTION USING LITERAL | |||||
* OPTION USING FIRST | |||||
* OPTION USING ALL | |||||
* OPTION USING LENGTH | |||||
Sets the characters recognized by PRINT USING. | |||||
Setting these to a non-punctuation character is not supported. | |||||
* OPTION VERSION now requires a string instead of a literal. | |||||
Some version names have changed. | |||||
* OPTION VERSION "PDP-8" | |||||
Added LPT, PTP, PTR, TTY, TTY IN and TTY OUT commands. | |||||
Added GET() and PUT() functions. | |||||
* OPTION VERSION "CALL/360" | |||||
* OPTION VERSION "SYSTEM/360" | |||||
* OPTION VERSION "SYSTEM/370" | |||||
Added alphabet extenders. $ is a string variable. | |||||
* OPTION ZONE integer | |||||
Sets the PRINT zone width. | |||||
Setting the value to zero restores the default. | |||||
* REPEAT - UNTIL added | |||||
REPEAT | |||||
... | |||||
EXIT REPEAT | |||||
... | |||||
UNTIL expression ' exits when expression != 0 | |||||
* SPC( X ) and TAB( X ) | |||||
No longer use control codes. | |||||
* UNTIL - UEND removed (to add REPEAT - UNTIL) | |||||
Here is a work-around for existin code using UNTIL-UEND: | |||||
UNITL expression -->> WHILE NOT expression | |||||
... ... | |||||
EXIT UNTIL -->> EXIT WHILE | |||||
... ... | |||||
UEND -->> WEND | |||||
* from Howard Wulf, AF5NE | |||||
CHANGES FROM 3.00 to 3.10 | |||||
* Implements most of the following BASIC dialects: | |||||
OPTION VERSION DARTMOUTH ' Dartmouth DTSS BASIC | |||||
OPTION VERSION MARK-I ' GE 265 Mainframe BASIC | |||||
OPTION VERSION MARK-II ' GE 435 Mainframe BASIC | |||||
OPTION VERSION SYSTEM-360 ' IBM System/360 BASIC | |||||
OPTION VERSION SYSTEM-370 ' IBM System/370 BASIC | |||||
OPTION VERSION CBASIC-II ' CBASIC-II for CP/M | |||||
OPTION VERSION ECMA-55 ' ANSI Minimal BASIC | |||||
OPTION VERSION HANDBOOK1 ' The BASIC Handbook, 1st Edition | |||||
OPTION VERSION HANDBOOK2 ' The BASIC Handbook, 2nd Edition | |||||
OPTION VERSION TRS-80 ' TRS-80 Model I/III/4 LBASIC | |||||
OPTION VERSION BASIC-80 ' Microsoft BASIC-80 for Xenix | |||||
OPTION VERSION ECMA-116 ' ANSI Full BASIC | |||||
* from Howard Wulf, AF5NE | |||||
CHANGES FROM 2.61 to 3.00 | |||||
* Code redesign from Howard Wulf, AF5NE | |||||
CHANGES FROM 2.60 to 2.61 | |||||
* Bug fix from Matthias Rustler | |||||
CHANGES FROM 2.50 to 2.60 | |||||
* New maths functions and append mode support from Edmond Orignac | |||||
* Bug fixes | |||||
CHANGES FROM 2.40 to 2.50 | |||||
* Bug fixes | |||||
* New compilation procedure for MVS and CMS | |||||
CHANGES FROM 2.30 to 2.40 | |||||
* Bug fixes from Bill Chatfield | |||||
* Updated documentation | |||||
* Added support for compiling on CMS (another IBM mainframe OS) | |||||
CHANGES FROM 2.20pl2 to 2.30 | |||||
* Minor bug fixes, cosmetic improvements and portability improvements | |||||
* Added support for compiling on MVS (IBM mainframe) | |||||
CHANGES FROM 2.20pl1 to 2.20pl2 | |||||
bwb_cmd.c | |||||
Fixed calling stack level logic in RETURN statement to prevent erroneous | |||||
"RETURN without GOSUB" messages. | |||||
bwb_cnd.c | |||||
bwb_stc.c | |||||
Changed continuation condition for WHILE, ELSEIF, and LOOP UNTIL | |||||
to be != FALSE, not == TRUE. More in line with common commercial | |||||
BASIC implementations. | |||||
bwb_mth.c | |||||
Fixed initialization in VAL function so that old results are not later | |||||
returned as values. | |||||
bwb_var.c | |||||
Added parenthesis level checking to dim_getparams. Using multi-level | |||||
expressions as array subscripts was causing the program to bomb. | |||||
bwx_iqc.c | |||||
bwx_tty.c | |||||
bwb_mes.h | |||||
Added second copyright notice. | |||||
bwb_dio.c | |||||
bwb_str.c | |||||
Added support for strings longer than 255 characters. | |||||
bwb_prn.c | |||||
Disabled tab expansion and print width checks when not printing to a file. | |||||
bwb_inp.c | |||||
Fixed LINE INPUT file reads to accommodate strings of length MAXSTRINGSIZE. | |||||
bwx_ncu.h | |||||
bwx_ncu.c | |||||
New files. Code for UNIX ncurses interface, compliments of L.C. Benschop, | |||||
Eindhoven, The Netherlands. | |||||
Makefile.ncu | |||||
New files. Sample makefile for ncurses implementation. | |||||
bwbasic.h | |||||
Revised defines for MININTSIZE and MAXINTSIZE from 16-bit to 32-bit limits. | |||||
Revised define for MAXSTRINGSIZE from 255 to 5000 characters. | |||||
Changed string length from unsigned char to unsigned int to support strings | |||||
longer than 255 characters. | |||||
Added support for new ncurses package. | |||||
Revised VERSION define to reflect above changes. | |||||
CHANGES FROM 2.20 to 2.20pl1 | |||||
bwb_cnd.c | |||||
Moved init routine for bwb_while so that it would be initialized regardless | |||||
of expression value, not just if TRUE. This was causing some segmentation | |||||
faults in WHILE-WEND loops. | |||||
bwb_elx.c | |||||
Plugged gaping memory leak. Temp variable space for expression evaluation | |||||
was being allocated but not freed when done (oops!). | |||||
bwb_fnc.c | |||||
Added check for NULL return from getenv to prevent segmentation faults. | |||||
bwbasic.h | |||||
Revised VERSION define to reflect above changes. | |||||
CHANGES FROM 2.10 to 2.20: | |||||
* Plugged numerous memory leaks, resolved memory overruns and allocation | |||||
difficulties. | |||||
* General cleanup and bug fixes, too many to list in detail here. | |||||
The major problem areas addressed were: | |||||
- RUN command with file name argument | |||||
- nested and cascaded FOR-NEXT loops | |||||
- PRINT USING | |||||
- EOF, LOF functions | |||||
- string concatenation | |||||
- operator hierarchy | |||||
- multi-level expression evaluation | |||||
- hex constant interpretation | |||||
- hex and octal constants in INPUT and DATA statements | |||||
* Added a CLOSE all files feature (when no argument supplied). | |||||
* Added a unary minus sign operator. | |||||
* Added a MID$ command to complement the MID$ function. | |||||
* Added a RENUM facility in a standalone program. | |||||
* Added checking in configure for unistd.h (important on Sun systems). |
@@ -0,0 +1,14 @@ | |||||
04-14-2020 Ken | |||||
Since Linux does not have a "cls" command that Windows/DOS | |||||
does have do this once | |||||
sudo ln /usr/bin/clear /usr/bin/cls | |||||
Then in your bwbasic 3.20b program to clear the screen use | |||||
SHELL "cls" | |||||
Or at the start of you bwbasic 3.20b program include | |||||
OPTION TERMINAL ANSI | |||||
then CLS will work | |||||
@@ -1,341 +0,0 @@ | |||||
GNU GENERAL PUBLIC LICENSE | |||||
Version 2, June 1991 | |||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc. | |||||
675 Mass Ave, Cambridge, MA 02139, USA | |||||
Everyone is permitted to copy and distribute verbatim copies | |||||
of this license document, but changing it is not allowed. | |||||
Preamble | |||||
The licenses for most software are designed to take away your | |||||
freedom to share and change it. By contrast, the GNU General Public | |||||
License is intended to guarantee your freedom to share and change free | |||||
software--to make sure the software is free for all its users. This | |||||
General Public License applies to most of the Free Software | |||||
Foundation's software and to any other program whose authors commit to | |||||
using it. (Some other Free Software Foundation software is covered by | |||||
the GNU Library General Public License instead.) You can apply it to | |||||
your programs, too. | |||||
When we speak of free software, we are referring to freedom, not | |||||
price. Our General Public Licenses are designed to make sure that you | |||||
have the freedom to distribute copies of free software (and charge for | |||||
this service if you wish), that you receive source code or can get it | |||||
if you want it, that you can change the software or use pieces of it | |||||
in new free programs; and that you know you can do these things. | |||||
To protect your rights, we need to make restrictions that forbid | |||||
anyone to deny you these rights or to ask you to surrender the rights. | |||||
These restrictions translate to certain responsibilities for you if you | |||||
distribute copies of the software, or if you modify it. | |||||
For example, if you distribute copies of such a program, whether | |||||
gratis or for a fee, you must give the recipients all the rights that | |||||
you have. You must make sure that they, too, receive or can get the | |||||
source code. And you must show them these terms so they know their | |||||
rights. | |||||
We protect your rights with two steps: (1) copyright the software, and | |||||
(2) offer you this license which gives you legal permission to copy, | |||||
distribute and/or modify the software. | |||||
Also, for each author's protection and ours, we want to make certain | |||||
that everyone understands that there is no warranty for this free | |||||
software. If the software is modified by someone else and passed on, we | |||||
want its recipients to know that what they have is not the original, so | |||||
that any problems introduced by others will not reflect on the original | |||||
authors' reputations. | |||||
Finally, any free program is threatened constantly by software | |||||
patents. We wish to avoid the danger that redistributors of a free | |||||
program will individually obtain patent licenses, in effect making the | |||||
program proprietary. To prevent this, we have made it clear that any | |||||
patent must be licensed for everyone's free use or not licensed at all. | |||||
The precise terms and conditions for copying, distribution and | |||||
modification follow. | |||||
GNU GENERAL PUBLIC LICENSE | |||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | |||||
0. This License applies to any program or other work which contains | |||||
a notice placed by the copyright holder saying it may be distributed | |||||
under the terms of this General Public License. The "Program", below, | |||||
refers to any such program or work, and a "work based on the Program" | |||||
means either the Program or any derivative work under copyright law: | |||||
that is to say, a work containing the Program or a portion of it, | |||||
either verbatim or with modifications and/or translated into another | |||||
language. (Hereinafter, translation is included without limitation in | |||||
the term "modification".) Each licensee is addressed as "you". | |||||
Activities other than copying, distribution and modification are not | |||||
covered by this License; they are outside its scope. The act of | |||||
running the Program is not restricted, and the output from the Program | |||||
is covered only if its contents constitute a work based on the | |||||
Program (independent of having been made by running the Program). | |||||
Whether that is true depends on what the Program does. | |||||
1. You may copy and distribute verbatim copies of the Program's | |||||
source code as you receive it, in any medium, provided that you | |||||
conspicuously and appropriately publish on each copy an appropriate | |||||
copyright notice and disclaimer of warranty; keep intact all the | |||||
notices that refer to this License and to the absence of any warranty; | |||||
and give any other recipients of the Program a copy of this License | |||||
along with the Program. | |||||
You may charge a fee for the physical act of transferring a copy, and | |||||
you may at your option offer warranty protection in exchange for a fee. | |||||
2. You may modify your copy or copies of the Program or any portion | |||||
of it, thus forming a work based on the Program, and copy and | |||||
distribute such modifications or work under the terms of Section 1 | |||||
above, provided that you also meet all of these conditions: | |||||
a) You must cause the modified files to carry prominent notices | |||||
stating that you changed the files and the date of any change. | |||||
b) You must cause any work that you distribute or publish, that in | |||||
whole or in part contains or is derived from the Program or any | |||||
part thereof, to be licensed as a whole at no charge to all third | |||||
parties under the terms of this License. | |||||
c) If the modified program normally reads commands interactively | |||||
when run, you must cause it, when started running for such | |||||
interactive use in the most ordinary way, to print or display an | |||||
announcement including an appropriate copyright notice and a | |||||
notice that there is no warranty (or else, saying that you provide | |||||
a warranty) and that users may redistribute the program under | |||||
these conditions, and telling the user how to view a copy of this | |||||
License. (Exception: if the Program itself is interactive but | |||||
does not normally print such an announcement, your work based on | |||||
the Program is not required to print an announcement.) | |||||
These requirements apply to the modified work as a whole. If | |||||
identifiable sections of that work are not derived from the Program, | |||||
and can be reasonably considered independent and separate works in | |||||
themselves, then this License, and its terms, do not apply to those | |||||
sections when you distribute them as separate works. But when you | |||||
distribute the same sections as part of a whole which is a work based | |||||
on the Program, the distribution of the whole must be on the terms of | |||||
this License, whose permissions for other licensees extend to the | |||||
entire whole, and thus to each and every part regardless of who wrote it. | |||||
Thus, it is not the intent of this section to claim rights or contest | |||||
your rights to work written entirely by you; rather, the intent is to | |||||
exercise the right to control the distribution of derivative or | |||||
collective works based on the Program. | |||||
In addition, mere aggregation of another work not based on the Program | |||||
with the Program (or with a work based on the Program) on a volume of | |||||
a storage or distribution medium does not bring the other work under | |||||
the scope of this License. | |||||
3. You may copy and distribute the Program (or a work based on it, | |||||
under Section 2) in object code or executable form under the terms of | |||||
Sections 1 and 2 above provided that you also do one of the following: | |||||
a) Accompany it with the complete corresponding machine-readable | |||||
source code, which must be distributed under the terms of Sections | |||||
1 and 2 above on a medium customarily used for software interchange; or, | |||||
b) Accompany it with a written offer, valid for at least three | |||||
years, to give any third party, for a charge no more than your | |||||
cost of physically performing source distribution, a complete | |||||
machine-readable copy of the corresponding source code, to be | |||||
distributed under the terms of Sections 1 and 2 above on a medium | |||||
customarily used for software interchange; or, | |||||
c) Accompany it with the information you received as to the offer | |||||
to distribute corresponding source code. (This alternative is | |||||
allowed only for noncommercial distribution and only if you | |||||
received the program in object code or executable form with such | |||||
an offer, in accord with Subsection b above.) | |||||
The source code for a work means the preferred form of the work for | |||||
making modifications to it. For an executable work, complete source | |||||
code means all the source code for all modules it contains, plus any | |||||
associated interface definition files, plus the scripts used to | |||||
control compilation and installation of the executable. However, as a | |||||
special exception, the source code distributed need not include | |||||
anything that is normally distributed (in either source or binary | |||||
form) with the major components (compiler, kernel, and so on) of the | |||||
operating system on which the executable runs, unless that component | |||||
itself accompanies the executable. | |||||
If distribution of executable or object code is made by offering | |||||
access to copy from a designated place, then offering equivalent | |||||
access to copy the source code from the same place counts as | |||||
distribution of the source code, even though third parties are not | |||||
compelled to copy the source along with the object code. | |||||
4. You may not copy, modify, sublicense, or distribute the Program | |||||
except as expressly provided under this License. Any attempt | |||||
otherwise to copy, modify, sublicense or distribute the Program is | |||||
void, and will automatically terminate your rights under this License. | |||||
However, parties who have received copies, or rights, from you under | |||||
this License will not have their licenses terminated so long as such | |||||
parties remain in full compliance. | |||||
5. You are not required to accept this License, since you have not | |||||
signed it. However, nothing else grants you permission to modify or | |||||
distribute the Program or its derivative works. These actions are | |||||
prohibited by law if you do not accept this License. Therefore, by | |||||
modifying or distributing the Program (or any work based on the | |||||
Program), you indicate your acceptance of this License to do so, and | |||||
all its terms and conditions for copying, distributing or modifying | |||||
the Program or works based on it. | |||||
6. Each time you redistribute the Program (or any work based on the | |||||
Program), the recipient automatically receives a license from the | |||||
original licensor to copy, distribute or modify the Program subject to | |||||
these terms and conditions. You may not impose any further | |||||
restrictions on the recipients' exercise of the rights granted herein. | |||||
You are not responsible for enforcing compliance by third parties to | |||||
this License. | |||||
7. If, as a consequence of a court judgment or allegation of patent | |||||
infringement or for any other reason (not limited to patent issues), | |||||
conditions are imposed on you (whether by court order, agreement or | |||||
otherwise) that contradict the conditions of this License, they do not | |||||
excuse you from the conditions of this License. If you cannot | |||||
distribute so as to satisfy simultaneously your obligations under this | |||||
License and any other pertinent obligations, then as a consequence you | |||||
may not distribute the Program at all. For example, if a patent | |||||
license would not permit royalty-free redistribution of the Program by | |||||
all those who receive copies directly or indirectly through you, then | |||||
the only way you could satisfy both it and this License would be to | |||||
refrain entirely from distribution of the Program. | |||||
If any portion of this section is held invalid or unenforceable under | |||||
any particular circumstance, the balance of the section is intended to | |||||
apply and the section as a whole is intended to apply in other | |||||
circumstances. | |||||
It is not the purpose of this section to induce you to infringe any | |||||
patents or other property right claims or to contest validity of any | |||||
such claims; this section has the sole purpose of protecting the | |||||
integrity of the free software distribution system, which is | |||||
implemented by public license practices. Many people have made | |||||
generous contributions to the wide range of software distributed | |||||
through that system in reliance on consistent application of that | |||||
system; it is up to the author/donor to decide if he or she is willing | |||||
to distribute software through any other system and a licensee cannot | |||||
impose that choice. | |||||
This section is intended to make thoroughly clear what is believed to | |||||
be a consequence of the rest of this License. | |||||
8. If the distribution and/or use of the Program is restricted in | |||||
certain countries either by patents or by copyrighted interfaces, the | |||||
original copyright holder who places the Program under this License | |||||
may add an explicit geographical distribution limitation excluding | |||||
those countries, so that distribution is permitted only in or among | |||||
countries not thus excluded. In such case, this License incorporates | |||||
the limitation as if written in the body of this License. | |||||
9. The Free Software Foundation may publish revised and/or new versions | |||||
of the General Public License from time to time. Such new versions will | |||||
be similar in spirit to the present version, but may differ in detail to | |||||
address new problems or concerns. | |||||
Each version is given a distinguishing version number. If the Program | |||||
specifies a version number of this License which applies to it and "any | |||||
later version", you have the option of following the terms and conditions | |||||
either of that version or of any later version published by the Free | |||||
Software Foundation. If the Program does not specify a version number of | |||||
this License, you may choose any version ever published by the Free Software | |||||
Foundation. | |||||
10. If you wish to incorporate parts of the Program into other free | |||||
programs whose distribution conditions are different, write to the author | |||||
to ask for permission. For software which is copyrighted by the Free | |||||
Software Foundation, write to the Free Software Foundation; we sometimes | |||||
make exceptions for this. Our decision will be guided by the two goals | |||||
of preserving the free status of all derivatives of our free software and | |||||
of promoting the sharing and reuse of software generally. | |||||
NO WARRANTY | |||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY | |||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN | |||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES | |||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED | |||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS | |||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE | |||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, | |||||
REPAIR OR CORRECTION. | |||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | |||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR | |||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, | |||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING | |||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED | |||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY | |||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER | |||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE | |||||
POSSIBILITY OF SUCH DAMAGES. | |||||
END OF TERMS AND CONDITIONS | |||||
Appendix: How to Apply These Terms to Your New Programs | |||||
If you develop a new program, and you want it to be of the greatest | |||||
possible use to the public, the best way to achieve this is to make it | |||||
free software which everyone can redistribute and change under these terms. | |||||
To do so, attach the following notices to the program. It is safest | |||||
to attach them to the start of each source file to most effectively | |||||
convey the exclusion of warranty; and each file should have at least | |||||
the "copyright" line and a pointer to where the full notice is found. | |||||
<one line to give the program's name and a brief idea of what it does.> | |||||
Copyright (C) 19yy <name of author> | |||||
This program is free software; you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation; either version 2 of the License, or | |||||
(at your option) any later version. | |||||
This program is distributed in the hope that it will be useful, | |||||
but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
GNU General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with this program; if not, write to the Free Software | |||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
Also add information on how to contact you by electronic and paper mail. | |||||
If the program is interactive, make it output a short notice like this | |||||
when it starts in an interactive mode: | |||||
Gnomovision version 69, Copyright (C) 19yy name of author | |||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. | |||||
This is free software, and you are welcome to redistribute it | |||||
under certain conditions; type `show c' for details. | |||||
The hypothetical commands `show w' and `show c' should show the appropriate | |||||
parts of the General Public License. Of course, the commands you use may | |||||
be called something other than `show w' and `show c'; they could even be | |||||
mouse-clicks or menu items--whatever suits your program. | |||||
You should also get your employer (if you work as a programmer) or your | |||||
school, if any, to sign a "copyright disclaimer" for the program, if | |||||
necessary. Here is a sample; alter the names: | |||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program | |||||
`Gnomovision' (which makes passes at compilers) written by James Hacker. | |||||
<signature of Ty Coon>, 1 April 1989 | |||||
Ty Coon, President of Vice | |||||
This General Public License does not permit incorporating your program into | |||||
proprietary programs. If your program is a subroutine library, you may | |||||
consider it more useful to permit linking proprietary applications with the | |||||
library. If this is what you want to do, use the GNU Library General | |||||
Public License instead of this License. | |||||