mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-12 23:54:04 +09:00
basicdoc: major doc update
This commit is contained in:
@@ -1,26 +1,14 @@
|
|||||||
1 OPTIONBASE 1
|
1 OPTIONBASE 1
|
||||||
10 PRINT SPC(28);"AMAZING PROGRAM"
|
10 PRINT SPC(28);"AMAZING PROGRAM"
|
||||||
20 PRINT SPC(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
20 PRINT SPC(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||||
30 PRINT
|
30 PRINT:PRINT:PRINT
|
||||||
31 PRINT
|
100 PRINT "WHAT ARE YOUR WIDTH";:INPUT H
|
||||||
32 PRINT
|
102 PRINT "WHAT ARE YOUR LENGTH";:INPUT V
|
||||||
33 PRINT
|
|
||||||
100 PRINT "WHAT ARE YOUR WIDTH";
|
|
||||||
101 INPUT H
|
|
||||||
102 PRINT "WHAT ARE YOUR LENGTH";
|
|
||||||
103 INPUT V
|
|
||||||
105 IF H<>1 AND V<>1 THEN GOTO 110
|
105 IF H<>1 AND V<>1 THEN GOTO 110
|
||||||
106 PRINT "MEANINGLESS DIMENSIONS. TRY AGAIN."
|
106 PRINT "MEANINGLESS DIMENSIONS. TRY AGAIN.":GOTO 100
|
||||||
107 GOTO 100
|
110 WS=DIM(H,V):VS=DIM(H,V)
|
||||||
110 WS=DIM(H,V)
|
120 PRINT:PRINT:PRINT:PRINT
|
||||||
111 VS=DIM(H,V)
|
160 Q=0:Z=0:X=INT(RND(1)*H+1)
|
||||||
120 PRINT
|
|
||||||
130 PRINT
|
|
||||||
140 PRINT
|
|
||||||
150 PRINT
|
|
||||||
160 Q=0
|
|
||||||
161 Z=0
|
|
||||||
162 X=INT(RND(1)*H+1)
|
|
||||||
165 FOR I=1 TO H
|
165 FOR I=1 TO H
|
||||||
170 IF I==X THEN GOTO 173
|
170 IF I==X THEN GOTO 173
|
||||||
171 PRINT ".--";
|
171 PRINT ".--";
|
||||||
@@ -28,20 +16,13 @@
|
|||||||
173 PRINT ". ";
|
173 PRINT ". ";
|
||||||
180 NEXT
|
180 NEXT
|
||||||
190 PRINT "."
|
190 PRINT "."
|
||||||
195 C=1
|
195 C=1:WS(X,1)=C:C=C+1
|
||||||
196 WS(X,1)=C
|
200 R=X:S=1:GOTO 260
|
||||||
197 C=C+1
|
|
||||||
200 R=X
|
|
||||||
201 S=1
|
|
||||||
202 GOTO 260
|
|
||||||
210 IF R<>H THEN GOTO 240
|
210 IF R<>H THEN GOTO 240
|
||||||
215 IF S<>V THEN GOTO 230
|
215 IF S<>V THEN GOTO 230
|
||||||
220 R=1
|
220 R=1:S=1
|
||||||
221 S=1
|
|
||||||
222 GOTO 250
|
222 GOTO 250
|
||||||
230 R=1
|
230 R=1:S=S+1:GOTO 250
|
||||||
231 S=S+1
|
|
||||||
232 GOTO 250
|
|
||||||
240 R=R+1
|
240 R=R+1
|
||||||
250 IF WS(R,S)==0 THEN GOTO 210
|
250 IF WS(R,S)==0 THEN GOTO 210
|
||||||
260 IF R-1==0 THEN GOTO 530
|
260 IF R-1==0 THEN GOTO 530
|
||||||
@@ -51,45 +32,30 @@
|
|||||||
290 IF R==H THEN GOTO 330
|
290 IF R==H THEN GOTO 330
|
||||||
300 IF WS(R+1,S)<>0 THEN GOTO 330
|
300 IF WS(R+1,S)<>0 THEN GOTO 330
|
||||||
310 X=INT(RND(1)*3+1)
|
310 X=INT(RND(1)*3+1)
|
||||||
320 REM ON X GOTO 790,820,860
|
320 ON X GOTO 790,820,860
|
||||||
321 IF X==1 THEN GOTO 790
|
|
||||||
322 IF X==2 THEN GOTO 820
|
|
||||||
323 IF X==3 THEN GOTO 860
|
|
||||||
330 IF S<>V THEN GOTO 340
|
|
||||||
334 IF Z==1 THEN GOTO 370
|
334 IF Z==1 THEN GOTO 370
|
||||||
338 Q=1
|
338 Q=1:GOTO 350
|
||||||
339 GOTO 350
|
|
||||||
340 IF WS(R,S+1)<>0 THEN GOTO 370
|
340 IF WS(R,S+1)<>0 THEN GOTO 370
|
||||||
350 X=INT(RND(1)*3+1)
|
350 X=INT(RND(1)*3+1)
|
||||||
360 REM ON X GOTO 790,820,910
|
360 ON X GOTO 790,820,910
|
||||||
361 IF X==1 THEN GOTO 790
|
|
||||||
362 IF X==2 THEN GOTO 820
|
|
||||||
363 IF X==3 THEN GOTO 910
|
|
||||||
370 X=INT(RND(1)*2+1)
|
370 X=INT(RND(1)*2+1)
|
||||||
380 REM ON X GOTO 790,820
|
380 ON X GOTO 790,820
|
||||||
390 IF R==H THEN GOTO 470
|
390 IF R==H THEN GOTO 470
|
||||||
400 IF WS(R+1,S)<>0 THEN GOTO 470
|
400 IF WS(R+1,S)<>0 THEN GOTO 470
|
||||||
405 IF S<>V THEN GOTO 420
|
405 IF S<>V THEN GOTO 420
|
||||||
410 IF Z==1 THEN GOTO 450
|
410 IF Z==1 THEN GOTO 450
|
||||||
415 Q=1
|
415 Q=1:GOTO 430
|
||||||
416 GOTO 430
|
|
||||||
420 IF WS(R,S+1)<>0 THEN GOTO 450
|
420 IF WS(R,S+1)<>0 THEN GOTO 450
|
||||||
430 X=INT(RND(1)*3+1)
|
430 X=INT(RND(1)*3+1)
|
||||||
440 REM ON X GOTO 790,860,910
|
440 ON X GOTO 790,860,910
|
||||||
441 IF X==1 THEN GOTO 790
|
|
||||||
442 IF X==2 THEN GOTO 860
|
|
||||||
443 IF X==3 THEN GOTO 910
|
|
||||||
450 X=INT(RND(1)*2+1)
|
450 X=INT(RND(1)*2+1)
|
||||||
460 REM ON X GOTO 790,860
|
460 ON X GOTO 790,860
|
||||||
470 IF S<>V THEN GOTO 490
|
470 IF S<>V THEN GOTO 490
|
||||||
480 IF Z==1 THEN GOTO 520
|
480 IF Z==1 THEN GOTO 520
|
||||||
485 Q=1
|
485 Q=1:GOTO 500
|
||||||
486 GOTO 500
|
|
||||||
490 IF WS(R,S+1)<>0 THEN GOTO 520
|
490 IF WS(R,S+1)<>0 THEN GOTO 520
|
||||||
500 X=INT(RND(1)*2+1)
|
500 X=INT(RND(1)*2+1)
|
||||||
510 REM ON X GOTO 790,910
|
510 ON X GOTO 790,910
|
||||||
511 IF X==1 THEN GOTO 790
|
|
||||||
512 IF X==2 THEN GOTO 910
|
|
||||||
520 GOTO 790
|
520 GOTO 790
|
||||||
530 IF S-1==0 THEN GOTO 670
|
530 IF S-1==0 THEN GOTO 670
|
||||||
540 IF WS(R,S-1)<>0 THEN GOTO 670
|
540 IF WS(R,S-1)<>0 THEN GOTO 670
|
||||||
@@ -97,98 +63,67 @@
|
|||||||
547 IF WS(R+1,S)<>0 THEN GOTO 610
|
547 IF WS(R+1,S)<>0 THEN GOTO 610
|
||||||
550 IF S<>V THEN GOTO 560
|
550 IF S<>V THEN GOTO 560
|
||||||
552 IF Z==1 THEN GOTO 590
|
552 IF Z==1 THEN GOTO 590
|
||||||
554 Q=1
|
554 Q=1:GOTO 570
|
||||||
555 GOTO 570
|
|
||||||
560 IF WS(R,S+1)<>0 THEN GOTO 590
|
560 IF WS(R,S+1)<>0 THEN GOTO 590
|
||||||
570 X=INT(RND(1)*3+1)
|
570 X=INT(RND(1)*3+1)
|
||||||
580 REM ON X GOTO 820,860,910
|
580 ON X GOTO 820,860,910
|
||||||
581 IF X==0 THEN GOTO 820
|
|
||||||
582 IF X==1 THEN GOTO 860
|
|
||||||
583 IF X==2 THEN GOTO 910
|
|
||||||
590 X=INT(RND(1)*2+1)
|
590 X=INT(RND(1)*2+1)
|
||||||
600 REM ON X GOTO 820,860
|
600 ON X GOTO 820,860
|
||||||
601 IF X==1 THEN GOTO 820
|
|
||||||
602 IF X==2 THEN GOTO 860
|
|
||||||
610 IF S<>V THEN GOTO 630
|
610 IF S<>V THEN GOTO 630
|
||||||
620 IF Z==1 THEN GOTO 660
|
620 IF Z==1 THEN GOTO 660
|
||||||
625 Q=1
|
625 Q=1:GOTO 640
|
||||||
626 GOTO 640
|
|
||||||
630 IF WS(R,S+1)<>0 THEN GOTO 660
|
630 IF WS(R,S+1)<>0 THEN GOTO 660
|
||||||
640 X=INT(RND(1)*2+1)
|
640 X=INT(RND(1)*2+1)
|
||||||
650 REM ON X GOTO 820,910
|
650 ON X GOTO 820,910
|
||||||
651 IF X==0 THEN GOTO 820
|
|
||||||
652 IF X==1 THEN GOTO 910
|
|
||||||
660 GOTO 820
|
660 GOTO 820
|
||||||
670 IF R==H THEN GOTO 740
|
670 IF R==H THEN GOTO 740
|
||||||
680 IF WS(R+1,S)<>0 THEN GOTO 740
|
680 IF WS(R+1,S)<>0 THEN GOTO 740
|
||||||
685 IF S<>V THEN GOTO 700
|
685 IF S<>V THEN GOTO 700
|
||||||
690 IF Z==1 THEN GOTO 730
|
690 IF Z==1 THEN GOTO 730
|
||||||
695 Q=1
|
695 Q=1:GOTO 830
|
||||||
696 GOTO 830
|
|
||||||
700 IF WS(R,S+1)<>0 THEN GOTO 730
|
700 IF WS(R,S+1)<>0 THEN GOTO 730
|
||||||
710 X=INT(RND(1)*2+1)
|
710 X=INT(RND(1)*2+1)
|
||||||
720 REM ON X GOTO 860,910
|
720 ON X GOTO 860,910
|
||||||
721 IF X==0 THEN GOTO 860
|
|
||||||
722 IF X==1 THEN GOTO 910
|
|
||||||
730 GOTO 860
|
730 GOTO 860
|
||||||
740 IF S<>V THEN GOTO 760
|
740 IF S<>V THEN GOTO 760
|
||||||
750 IF Z==1 THEN GOTO 780
|
750 IF Z==1 THEN GOTO 780
|
||||||
755 Q=1
|
755 Q=1:GOTO 770
|
||||||
756 GOTO 770
|
|
||||||
760 IF WS(R,S+1)<>0 THEN GOTO 780
|
760 IF WS(R,S+1)<>0 THEN GOTO 780
|
||||||
770 GOTO 910
|
770 GOTO 910
|
||||||
780 GOTO 1000
|
780 GOTO 1000
|
||||||
790 WS(R-1,S)=C
|
790 WS(R-1,S)=C
|
||||||
800 C=C+1
|
800 C=C+1:VS(R-1,S)=2:R=R-1
|
||||||
801 VS(R-1,S)=2
|
|
||||||
802 R=R-1
|
|
||||||
810 IF C==H*V+1 THEN GOTO 1010
|
810 IF C==H*V+1 THEN GOTO 1010
|
||||||
815 Q=0
|
815 Q=0:GOTO 260
|
||||||
816 GOTO 260
|
|
||||||
820 WS(R,S-1)=C
|
820 WS(R,S-1)=C
|
||||||
830 C=C+1
|
830 C=C+1
|
||||||
840 VS(R,S-1)=1
|
840 VS(R,S-1)=1:S=S-1:IF C==H*V+1 THEN GOTO 1010
|
||||||
841 S=S-1
|
850 Q=0:GOTO 260
|
||||||
842 IF C==H*V+1 THEN GOTO 1010
|
|
||||||
850 Q=0
|
|
||||||
851 GOTO 260
|
|
||||||
860 WS(R+1,S)=C
|
860 WS(R+1,S)=C
|
||||||
870 C=C+1
|
870 C=C+1:IF VS(R,S)==0 THEN GOTO 880
|
||||||
871 IF VS(R,S)==0 THEN GOTO 880
|
875 VS(R,S)=3:GOTO 890
|
||||||
875 VS(R,S)=3
|
|
||||||
876 GOTO 890
|
|
||||||
880 VS(R,S)=2
|
880 VS(R,S)=2
|
||||||
890 R=R+1
|
890 R=R+1
|
||||||
900 IF C==H*V+1 THEN GOTO 1010
|
900 IF C==H*V+1 THEN GOTO 1010
|
||||||
905 GOTO 530
|
905 GOTO 530
|
||||||
910 IF Q==1 THEN GOTO 960
|
910 IF Q==1 THEN GOTO 960
|
||||||
920 WS(R,S+1)=C
|
920 WS(R,S+1)=C:C=C+1:IF VS(R,S)==0 THEN GOTO 940
|
||||||
921 C=C+1
|
930 VS(R,S)=3:GOTO 950
|
||||||
922 IF VS(R,S)==0 THEN GOTO 940
|
|
||||||
930 VS(R,S)=3
|
|
||||||
931 GOTO 950
|
|
||||||
940 VS(R,S)=1
|
940 VS(R,S)=1
|
||||||
950 S=S+1
|
950 S=S+1:IF C==H*V+1 THEN GOTO 1010
|
||||||
951 IF C==H*V+1 THEN GOTO 1010
|
|
||||||
955 GOTO 260
|
955 GOTO 260
|
||||||
960 Z=1
|
960 Z=1
|
||||||
970 IF VS(R,S)==0 THEN GOTO 980
|
970 IF VS(R,S)==0 THEN GOTO 980
|
||||||
975 VS(R,S)=3
|
975 VS(R,S)=3:Q=0:GOTO 1000
|
||||||
976 Q=0
|
980 VS(R,S)=1:Q=0:R=1:S=1:GOTO 250
|
||||||
977 GOTO 1000
|
|
||||||
980 VS(R,S)=1
|
|
||||||
981 Q=0
|
|
||||||
982 R=1
|
|
||||||
983 S=1
|
|
||||||
984 GOTO 250
|
|
||||||
1000 GOTO 210
|
1000 GOTO 210
|
||||||
1010 FOR J=1 TO V
|
1010 FOR J=1 TO V
|
||||||
1011 PRINT "I";
|
1011 PRINT "|";
|
||||||
1012 FOR I=1 TO H
|
1012 FOR I=1 TO H
|
||||||
1013 IF VS(I,J)<2 THEN GOTO 1030
|
1013 IF VS(I,J)<2 THEN GOTO 1030
|
||||||
1020 PRINT " ";
|
1020 PRINT " ";
|
||||||
1021 GOTO 1040
|
1021 GOTO 1040
|
||||||
1030 PRINT " I";
|
1030 PRINT " |";
|
||||||
1040 NEXT
|
1040 NEXT
|
||||||
1041 PRINT
|
1041 PRINT
|
||||||
1043 FOR I=1 TO H
|
1043 FOR I=1 TO H
|
||||||
|
|||||||
9
assets/disk0/home/basic/fn.bas
Normal file
9
assets/disk0/home/basic/fn.bas
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
10 DEFUN POW2(N)=2^N
|
||||||
|
20 DEFUN DCOS(N)=COS(PI*N/180)
|
||||||
|
30 FOR X=0 TO 8
|
||||||
|
40 PRINT X,POW2(X)
|
||||||
|
50 NEXT
|
||||||
|
60 PRINT "----------------"
|
||||||
|
70 FOREACH A=0!45!90!135!180!NIL
|
||||||
|
80 PRINT A,DCOS(A)
|
||||||
|
90 NEXT
|
||||||
@@ -1,28 +1,14 @@
|
|||||||
10 PRINT SPC(32);"HAMURABI"
|
10 PRINT SPC(32);"HAMURABI"
|
||||||
20 PRINT SPC(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
20 PRINT SPC(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||||
30 PRINT
|
30 PRINT:PRINT:PRINT
|
||||||
31 PRINT
|
|
||||||
32 PRINT
|
|
||||||
80 PRINT "TRY YOUR HAND AT GOVERNING ANCIENT SUMERIA"
|
80 PRINT "TRY YOUR HAND AT GOVERNING ANCIENT SUMERIA"
|
||||||
90 PRINT "FOR A TEN-YEAR TERM OF OFFICE."
|
90 PRINT "FOR A TEN-YEAR TERM OF OFFICE.":PRINT
|
||||||
91 PRINT
|
95 D1=0:P1=0
|
||||||
95 D1=0
|
100 Z=0:P=95:S=2800:H=3000:E=H-S
|
||||||
96 P1=0
|
110 Y=3:A=H/Y:I=5:Q=1
|
||||||
100 Z=0
|
|
||||||
101 P=95
|
|
||||||
102 S=2800
|
|
||||||
103 H=3000
|
|
||||||
104 E=H-S
|
|
||||||
110 Y=3
|
|
||||||
111 A=H/Y
|
|
||||||
112 I=5
|
|
||||||
113 Q=1
|
|
||||||
210 D=0
|
210 D=0
|
||||||
215 PRINT
|
215 PRINT:PRINT:PRINT "HAMURABI: I BEG TO REPORT TO YOU,":Z=Z+1
|
||||||
216 PRINT
|
217 PRINT "IN YEAR ";Z;", ";D;" PEOPLE STARVED, ";I;" CAME TO THE CITY,"
|
||||||
217 PRINT "HAMURABI: I BEG TO REPORT TO YOU,"
|
|
||||||
218 Z=Z+1
|
|
||||||
219 PRINT "IN YEAR ";Z;", ";D;" PEOPLE STARVED, ";I;" CAME TO THE CITY,"
|
|
||||||
220 P=P+I
|
220 P=P+I
|
||||||
227 IF Q>0 THEN GOTO 230
|
227 IF Q>0 THEN GOTO 230
|
||||||
228 P=INT(P/2)
|
228 P=INT(P/2)
|
||||||
@@ -44,9 +30,7 @@
|
|||||||
324 GOSUB 710
|
324 GOSUB 710
|
||||||
325 GOTO 320
|
325 GOTO 320
|
||||||
330 IF Q==0 THEN GOTO 340
|
330 IF Q==0 THEN GOTO 340
|
||||||
331 A=A+Q
|
331 A=A+Q:S=S-Y*Q:C=0
|
||||||
332 S=S-Y*Q
|
|
||||||
333 C=0
|
|
||||||
334 GOTO 400
|
334 GOTO 400
|
||||||
340 PRINT "HOW MANY ACRES DO YOU WISH TO SELL";
|
340 PRINT "HOW MANY ACRES DO YOU WISH TO SELL";
|
||||||
341 INPUT Q
|
341 INPUT Q
|
||||||
@@ -54,9 +38,7 @@
|
|||||||
343 IF Q<A THEN GOTO 350
|
343 IF Q<A THEN GOTO 350
|
||||||
344 GOSUB 720
|
344 GOSUB 720
|
||||||
345 GOTO 340
|
345 GOTO 340
|
||||||
350 A=A-Q
|
350 A=A-Q:S=S+Y*Q:C=0
|
||||||
351 S=S+Y*Q
|
|
||||||
352 C=0
|
|
||||||
400 PRINT
|
400 PRINT
|
||||||
410 PRINT "HOW MANY BUSHELS DO YOU WISH TO FEED YOUR PEOPLE";
|
410 PRINT "HOW MANY BUSHELS DO YOU WISH TO FEED YOUR PEOPLE";
|
||||||
411 INPUT Q
|
411 INPUT Q
|
||||||
@@ -65,9 +47,7 @@
|
|||||||
420 IF Q<=S THEN GOTO 430
|
420 IF Q<=S THEN GOTO 430
|
||||||
421 GOSUB 710
|
421 GOSUB 710
|
||||||
422 GOTO 410
|
422 GOTO 410
|
||||||
430 S=S-Q
|
430 S=S-Q:C=1:PRINT
|
||||||
431 C=1
|
|
||||||
432 PRINT
|
|
||||||
440 PRINT "HOW MANY ACRES DO YOU WISH TO PLANT WITH SEED";
|
440 PRINT "HOW MANY ACRES DO YOU WISH TO PLANT WITH SEED";
|
||||||
441 INPUT D
|
441 INPUT D
|
||||||
442 IF D==0 THEN GOTO 511
|
442 IF D==0 THEN GOTO 511
|
||||||
@@ -87,9 +67,7 @@
|
|||||||
510 S=S-INT(D/2)
|
510 S=S-INT(D/2)
|
||||||
511 GOSUB 800
|
511 GOSUB 800
|
||||||
512 REM *** A BOUNTIFUL HARVEST!
|
512 REM *** A BOUNTIFUL HARVEST!
|
||||||
515 Y=C
|
515 Y=C:H=D*Y:E=0
|
||||||
516 H=D*Y
|
|
||||||
517 E=0
|
|
||||||
521 GOSUB 800
|
521 GOSUB 800
|
||||||
522 IF INT(C/2)<>C/2 THEN GOTO 530
|
522 IF INT(C/2)<>C/2 THEN GOTO 530
|
||||||
523 REM *** RATS ARE RUNNING WILD!!
|
523 REM *** RATS ARE RUNNING WILD!!
|
||||||
|
|||||||
4
assets/disk0/home/basic/rallycomposition.bas
Normal file
4
assets/disk0/home/basic/rallycomposition.bas
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
10 DEFUN SINC(X)=IF X==0 THEN 1 ELSE SIN(X)/X
|
||||||
|
20 DEFUN THREEDIGITS(X)=ROUND(X*1000)/1000
|
||||||
|
100 K=MAP(THREEDIGITS<~SINC,1 TO 10)
|
||||||
|
110 PRINT K
|
||||||
@@ -1,10 +1,6 @@
|
|||||||
1 REM Calculates a square root using newtonian method
|
10 X=1337
|
||||||
10 INPUT X
|
20 Y=0.5*X
|
||||||
11 IF TYPEOF(X)=="num" THEN GOTO 20
|
30 Z=Y
|
||||||
12 PRINT "Please type in a number, please";
|
40 Y=Y-((Y^2)-X)/(2*Y)
|
||||||
13 GOTO 10
|
50 IF NOT(Z==Y) THEN GOTO 30 : REM 'NOT(Z==Y)' can be rewritten to 'Z<>Y'
|
||||||
20 Y = 0.5 * X
|
|
||||||
30 Z = Y
|
|
||||||
40 Y = Y-(((Y^2)-X)/(2*Y))
|
|
||||||
50 IF Z <> Y THEN GOTO 30
|
|
||||||
100 PRINT "Square root of ";X;" is approximately ";Y
|
100 PRINT "Square root of ";X;" is approximately ";Y
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
10 FOR I = 1 TO 20
|
10 GOTO 1000
|
||||||
20 PRINT SPC(20-I);
|
100 REM subroutine to draw a segment. Size is stored to 'Q'
|
||||||
30 FOR J = 1 TO I*2-1
|
110 PRINT SPC(20-Q);
|
||||||
40 PRINT "*";
|
120 FOR Q1=1 TO Q*2-1
|
||||||
50 NEXT:PRINT
|
130 PRINT "*";
|
||||||
60 NEXT
|
140 NEXT : PRINT
|
||||||
|
150 RETURN
|
||||||
|
1000 FOR Q=1 TO 20
|
||||||
|
1010 GOSUB 100
|
||||||
|
1020 NEXT
|
||||||
|
|||||||
12
assets/disk0/home/basic/tri2.bas
Normal file
12
assets/disk0/home/basic/tri2.bas
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
10 GOTO 1000
|
||||||
|
100 REM subroutine to draw a segment. Size is stored to 'Q'
|
||||||
|
110 PRINT SPC(20-Q);
|
||||||
|
120 Q1=1 : REM loop counter for this subroutine
|
||||||
|
130 PRINT "*";
|
||||||
|
140 Q1=Q1+1
|
||||||
|
150 IF Q1<=Q*2-1 THEN GOTO 130
|
||||||
|
160 PRINT : RETURN : REM this line will take us back from the jump
|
||||||
|
1000 Q=1 : REM this is our loop counter
|
||||||
|
1010 GOSUB 100
|
||||||
|
1020 Q=Q+1
|
||||||
|
1030 IF Q<=20 THEN GOTO 1010
|
||||||
@@ -1239,7 +1239,7 @@ if no arg text were given (e.g. "10 NEXT"), args will have zero length
|
|||||||
if (jmpTarget === undefined)
|
if (jmpTarget === undefined)
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
return bStatus.builtin[jmpFun](lnum, stmtnum, [jmpTarget]);
|
return bStatus.builtin[jmpFun].f(lnum, stmtnum, [jmpTarget]);
|
||||||
}},
|
}},
|
||||||
"MIN" : {f:function(lnum, stmtnum, args) {
|
"MIN" : {f:function(lnum, stmtnum, args) {
|
||||||
return twoArg(lnum, stmtnum, args, (lh,rh) => (lh > rh) ? rh : lh);
|
return twoArg(lnum, stmtnum, args, (lh,rh) => (lh > rh) ? rh : lh);
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
10 DEFUN FAC(N)=IF N==0 THEN 1 ELSE N*FAC(N-1)
|
|
||||||
20 K=MAP FAC, 1 TO 10
|
|
||||||
30 PRINT K
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
10 DEFUN FAC(N)=IF N==0 THEN 1 ELSE N*FAC(N-1)
|
|
||||||
20 FOR K=1 TO 6
|
|
||||||
30 PRINT FAC(K)
|
|
||||||
40 NEXT
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
10 DEFUN FIB(N)=IF N==0 THEN 0 ELSE IF N==1 THEN 1 ELSE FIB(N-1)+FIB(N-2)
|
|
||||||
20 FOR K=1 TO 12
|
|
||||||
30 PRINT FIB(K);" ";
|
|
||||||
40 NEXT
|
|
||||||
@@ -19,36 +19,55 @@ Oh \emph{boy} we just did a computation! It printed out \code{4} which is a corr
|
|||||||
Following program attempts to calculate a square root of the input value, showing how \code{GOTO} can be used in such manner.
|
Following program attempts to calculate a square root of the input value, showing how \code{GOTO} can be used in such manner.
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
10 X = 1337
|
10 X=1337
|
||||||
20 Y = 0.5 * X
|
20 Y=0.5*X
|
||||||
30 Z = Y
|
30 Z=Y
|
||||||
40 Y = Y-(((Y^2)-X)/(2*Y))
|
40 Y=Y-((Y^2)-X)/(2*Y)
|
||||||
50 IF NOT(Z==Y) THEN GOTO 30 : REM 'NOT(Z==Y)' can be rewritten to 'Z<>Y'
|
50 IF NOT(Z==Y) THEN GOTO 30 : REM 'NOT(Z==Y)' can be rewritten to 'Z<>Y'
|
||||||
100 PRINT "Square root of ";X;" is approximately ";Y
|
100 PRINT "Square root of ";X;" is approximately ";Y
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
Here, \code{GOTO} in line 50 is used to perform a loop, which keeps looping until \code{Z} and \code{Y} becomes equal. This is a newtonian method of approximating a square root.
|
Here, \code{GOTO} in line 50 is used to perform a loop, which keeps looping until \code{Z} and \code{Y} becomes equal. This is a newtonian method of approximating a square root.
|
||||||
|
|
||||||
\section[When GOTO Is Bad]{Severe Acute Spaghettification Syndrome}
|
\section[Subroutine with GOSUB]{What If We Wanted to Go Back?}
|
||||||
|
|
||||||
|
But \code{GOTO} only jumps, you can't jump \emph{back}. Well, not with that attitute; you \emph{can} go back with \code{GOSUB} and \code{RETURN} statement.
|
||||||
|
|
||||||
|
This program will draw a triangle, where the actual drawing part is on line 100--160, and only get jumped into it when needed.
|
||||||
|
|
||||||
\section[Subroutine with GOSUB]{GOSUB to the rescue!}
|
\begin{lstlisting}
|
||||||
|
10 GOTO 1000
|
||||||
|
100 REM subroutine to draw a segment. Size is stored to 'Q'
|
||||||
|
110 PRINT SPC(20-Q);
|
||||||
|
120 Q1=1 : REM loop counter for this subroutine
|
||||||
|
130 PRINT "*";
|
||||||
|
140 Q1=Q1+1
|
||||||
|
150 IF Q1<=Q*2-1 THEN GOTO 130
|
||||||
|
160 PRINT : RETURN : REM this line will take us back from the jump
|
||||||
|
1000 Q=1 : REM this is our loop counter
|
||||||
|
1010 GOSUB 100
|
||||||
|
1020 Q=Q+1
|
||||||
|
1030 IF Q<=20 THEN GOTO 1010
|
||||||
|
\end{lstlisting}
|
||||||
|
|
||||||
\section[FOR--NEXT Loop]{FOR ever loop NEXT}
|
\section[FOR--NEXT Loop]{FOR ever loop NEXT}
|
||||||
|
|
||||||
So you can make a loop using \code{GOTO}s here and there, but they \emph{totally suck}, too much spaphetti crashes your cerebral cortex faster than \emph{Crash Bandicoot 2}. Fortunately, there's better way to go about that: the FOR--NEXT loop!
|
As we've just seen, you can make loops using \code{GOTO}s here and there, but they \emph{totally suck}, too much spaphetti crashes your cerebral cortex faster than \emph{Crash Bandicoot 2}. Fortunately, there's a better way to go about that: the FOR--NEXT loop!
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
10 FOR I = 1 TO 20
|
10 GOTO 1000
|
||||||
20 PRINT SPC(20-I);
|
100 REM subroutine to draw a segment. Size is stored to 'Q'
|
||||||
30 FOR J = 1 TO I*2-1
|
110 PRINT SPC(20-Q);
|
||||||
40 PRINT "*";
|
120 FOR Q1=1 TO Q*2-1
|
||||||
50 NEXT:PRINT
|
130 PRINT "*";
|
||||||
60 NEXT
|
140 NEXT : PRINT
|
||||||
|
150 RETURN
|
||||||
|
1000 FOR Q=1 TO 20
|
||||||
|
1010 GOSUB 100
|
||||||
|
1020 NEXT
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
When executed, this program print out triangles of stars. Still not convinced? Try to write a same program with \code{GOTO}s.
|
When executed, this program print out \emph{exactly the same} triangle, but code is much more straightforward thanks to the \code{FOR} statement.
|
||||||
|
|
||||||
\section[Get User INPUT]{Isn't It Nice To Have a Computer That Will Question You?}
|
\section[Get User INPUT]{Isn't It Nice To Have a Computer That Will Question You?}
|
||||||
|
|
||||||
@@ -67,17 +86,22 @@ This short program will ask your name, and then it will greet you by the name yo
|
|||||||
Consider the following code:
|
Consider the following code:
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
(code with many repeating phrases)
|
10 DEFUN POW2(N)=2^N
|
||||||
|
20 DEFUN DCOS(N)=COS(PI*N/180)
|
||||||
|
30 FOR X=0 TO 8
|
||||||
|
40 PRINT X,POW2(X)
|
||||||
|
50 NEXT
|
||||||
|
60 PRINT "----------------"
|
||||||
|
70 FOREACH A=0!45!90!135!180!NIL
|
||||||
|
80 PRINT A,DCOS(A)
|
||||||
|
90 NEXT
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
As you can clearly see, it has way too many repeating phrase: \code{i'm redundant!} Would it be nice to tidy it up, but much cooler and in \emph{one-liner}?
|
Here, we have defined two functions to use in the program: \code{POW2} and \code{DCOS2}. Also observe that functions are defined using variable \code{N}s, but we use them with \code{X} in line 40 and with \code{A} in line 80: yes, functions can have their local name so you don't have to carefully choose which variable name to use in your subroutine.
|
||||||
|
|
||||||
Lo and behold, the \code{DEFUN}! You can define a \emph{function} in a single line using it, and it even re-names the variable so you don't have to worry about unintended name collisions like when you were playing with \code{GOSUB}s!
|
Except a function can't have statements that spans 2- or more BASIC lines; but there are ways to get around that, including \code{DO} statement and \emph{functional currying}.
|
||||||
|
|
||||||
\begin{lstlisting}
|
|
||||||
(same code but better)
|
|
||||||
\end{lstlisting}
|
|
||||||
|
|
||||||
|
This sample program also shows \code{FOREACH} statement, which is same as \code{FOR} but works with arrays.
|
||||||
|
|
||||||
\section[Recursion]{BRB: Bad Recursion BRB: Bad Recursion BRB: Bad Recursion BRB: Bad RecursionBRB: Bad Recursion BRBRangeError: Maximum call stack size exceeded}
|
\section[Recursion]{BRB: Bad Recursion BRB: Bad Recursion BRB: Bad Recursion BRB: Bad RecursionBRB: Bad Recursion BRBRangeError: Maximum call stack size exceeded}
|
||||||
|
|
||||||
@@ -129,7 +153,7 @@ Here, \code{K} will contain the values of $1!$, $2!$ \ldots\ $10!$. We're just p
|
|||||||
\section[Currying]{Haskell Curry Wants to Know Your Location}
|
\section[Currying]{Haskell Curry Wants to Know Your Location}
|
||||||
\label{currying101}
|
\label{currying101}
|
||||||
|
|
||||||
So what the fsck is currying? Consider the following code:
|
Two pages ago there was a mentioning about something called \emph{functional currying}. So what the fsck is currying? Consider the following code:
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
10 DEFUN F(K,T)=ABS(T)==K
|
10 DEFUN F(K,T)=ABS(T)==K
|
||||||
|
|||||||
@@ -251,6 +251,19 @@ Code & Operation & Result \\
|
|||||||
|
|
||||||
\emph{Currying} is an operation that returns new function that has given value applied to the original function's first parameter. See \ref{currying101} for tutorials.
|
\emph{Currying} is an operation that returns new function that has given value applied to the original function's first parameter. See \ref{currying101} for tutorials.
|
||||||
|
|
||||||
|
\section{Constants}
|
||||||
|
|
||||||
|
Some variables are pre-defined on the language itself and cannot be modified; such variables are called \emph{constants}.
|
||||||
|
|
||||||
|
\begin{tabulary}{\textwidth}{rlL}
|
||||||
|
Name & Type & Value \\
|
||||||
|
\hline
|
||||||
|
NIL & Array & Empty Array \\
|
||||||
|
PI & Number & $3.141592653589793$ \\
|
||||||
|
TAU & Number & $6.283185307179586$ \\
|
||||||
|
EULER & Number & $2.718281828459045$
|
||||||
|
\end{tabulary}
|
||||||
|
|
||||||
\section{Syntax In EBNF}
|
\section{Syntax In EBNF}
|
||||||
|
|
||||||
If you're \emph{that} into the language theory of computer science, texts above are just waste of bytes/inks/pixel-spaces/whatever; this little section should be more than enough!
|
If you're \emph{that} into the language theory of computer science, texts above are just waste of bytes/inks/pixel-spaces/whatever; this little section should be more than enough!
|
||||||
|
|||||||
17
assets/disk0/tbas/doc/sample_99.tex
Normal file
17
assets/disk0/tbas/doc/sample_99.tex
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
This is a sample program that prints out the infamous \emph{99 Bottles of Beer}.
|
||||||
|
|
||||||
|
\begin{lstlisting}
|
||||||
|
10 FOR I = 99 TO 1 STEP -1
|
||||||
|
20 MODE = 1
|
||||||
|
30 GOSUB 12
|
||||||
|
40 PRINT I;" bottle";BOTTLES;" of beer on the wall, ";i;" bottle";BOTTLES;" of beer."
|
||||||
|
50 MODE = 2
|
||||||
|
60 GOSUB 12
|
||||||
|
70 PRINT "Take one down and pass it around, ";(I-1);" bottle";BOTTLES;" of beer on the wall."
|
||||||
|
80 NEXT
|
||||||
|
90 PRINT "No more bottles of beer on the wall, no more bottles of beer."
|
||||||
|
100 PRINT "Go to the store and buy some more. 99 bottles of beer on the wall."
|
||||||
|
110 END
|
||||||
|
120 IF I == MODE THEN BOTTLES = "" ELSE BOTTLES = "s"
|
||||||
|
130 RETURN
|
||||||
|
\end{lstlisting}
|
||||||
142
assets/disk0/tbas/doc/sample_amazing.tex
Normal file
142
assets/disk0/tbas/doc/sample_amazing.tex
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
This is a sample program that draw a randomised maze. The original program was on \emph{BASIC Computer Games: Microcomputer Edition} and was translated into \tbas.
|
||||||
|
|
||||||
|
\begin{lstlisting}
|
||||||
|
1 OPTIONBASE 1
|
||||||
|
10 PRINT SPC(28);"AMAZING PROGRAM"
|
||||||
|
20 PRINT SPC(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||||
|
30 PRINT:PRINT:PRINT
|
||||||
|
100 PRINT "WHAT ARE YOUR WIDTH";:INPUT H
|
||||||
|
102 PRINT "WHAT ARE YOUR LENGTH";:INPUT V
|
||||||
|
105 IF H<>1 AND V<>1 THEN GOTO 110
|
||||||
|
106 PRINT "MEANINGLESS DIMENSIONS. TRY AGAIN.":GOTO 100
|
||||||
|
110 WS=DIM(H,V):VS=DIM(H,V)
|
||||||
|
120 PRINT:PRINT:PRINT:PRINT
|
||||||
|
160 Q=0:Z=0:X=INT(RND(1)*H+1)
|
||||||
|
165 FOR I=1 TO H
|
||||||
|
170 IF I==X THEN GOTO 173
|
||||||
|
171 PRINT ".--";
|
||||||
|
172 GOTO 175
|
||||||
|
173 PRINT ". ";
|
||||||
|
180 NEXT
|
||||||
|
190 PRINT "."
|
||||||
|
195 C=1:WS(X,1)=C:C=C+1
|
||||||
|
200 R=X:S=1:GOTO 260
|
||||||
|
210 IF R<>H THEN GOTO 240
|
||||||
|
215 IF S<>V THEN GOTO 230
|
||||||
|
220 R=1:S=1
|
||||||
|
222 GOTO 250
|
||||||
|
230 R=1:S=S+1:GOTO 250
|
||||||
|
240 R=R+1
|
||||||
|
250 IF WS(R,S)==0 THEN GOTO 210
|
||||||
|
260 IF R-1==0 THEN GOTO 530
|
||||||
|
265 IF WS(R-1,S)<>0 THEN GOTO 530
|
||||||
|
270 IF S-1==0 THEN GOTO 390
|
||||||
|
280 IF WS(R,S-1)<>0 THEN GOTO 390
|
||||||
|
290 IF R==H THEN GOTO 330
|
||||||
|
300 IF WS(R+1,S)<>0 THEN GOTO 330
|
||||||
|
310 X=INT(RND(1)*3+1)
|
||||||
|
320 ON X GOTO 790,820,860
|
||||||
|
334 IF Z==1 THEN GOTO 370
|
||||||
|
338 Q=1:GOTO 350
|
||||||
|
340 IF WS(R,S+1)<>0 THEN GOTO 370
|
||||||
|
350 X=INT(RND(1)*3+1)
|
||||||
|
360 ON X GOTO 790,820,910
|
||||||
|
370 X=INT(RND(1)*2+1)
|
||||||
|
380 ON X GOTO 790,820
|
||||||
|
390 IF R==H THEN GOTO 470
|
||||||
|
400 IF WS(R+1,S)<>0 THEN GOTO 470
|
||||||
|
405 IF S<>V THEN GOTO 420
|
||||||
|
410 IF Z==1 THEN GOTO 450
|
||||||
|
415 Q=1:GOTO 430
|
||||||
|
420 IF WS(R,S+1)<>0 THEN GOTO 450
|
||||||
|
430 X=INT(RND(1)*3+1)
|
||||||
|
440 ON X GOTO 790,860,910
|
||||||
|
450 X=INT(RND(1)*2+1)
|
||||||
|
460 ON X GOTO 790,860
|
||||||
|
470 IF S<>V THEN GOTO 490
|
||||||
|
480 IF Z==1 THEN GOTO 520
|
||||||
|
485 Q=1:GOTO 500
|
||||||
|
490 IF WS(R,S+1)<>0 THEN GOTO 520
|
||||||
|
500 X=INT(RND(1)*2+1)
|
||||||
|
510 ON X GOTO 790,910
|
||||||
|
520 GOTO 790
|
||||||
|
530 IF S-1==0 THEN GOTO 670
|
||||||
|
540 IF WS(R,S-1)<>0 THEN GOTO 670
|
||||||
|
545 IF R==H THEN GOTO 610
|
||||||
|
547 IF WS(R+1,S)<>0 THEN GOTO 610
|
||||||
|
550 IF S<>V THEN GOTO 560
|
||||||
|
552 IF Z==1 THEN GOTO 590
|
||||||
|
554 Q=1:GOTO 570
|
||||||
|
560 IF WS(R,S+1)<>0 THEN GOTO 590
|
||||||
|
570 X=INT(RND(1)*3+1)
|
||||||
|
580 ON X GOTO 820,860,910
|
||||||
|
590 X=INT(RND(1)*2+1)
|
||||||
|
600 ON X GOTO 820,860
|
||||||
|
610 IF S<>V THEN GOTO 630
|
||||||
|
620 IF Z==1 THEN GOTO 660
|
||||||
|
625 Q=1:GOTO 640
|
||||||
|
630 IF WS(R,S+1)<>0 THEN GOTO 660
|
||||||
|
640 X=INT(RND(1)*2+1)
|
||||||
|
650 ON X GOTO 820,910
|
||||||
|
660 GOTO 820
|
||||||
|
670 IF R==H THEN GOTO 740
|
||||||
|
680 IF WS(R+1,S)<>0 THEN GOTO 740
|
||||||
|
685 IF S<>V THEN GOTO 700
|
||||||
|
690 IF Z==1 THEN GOTO 730
|
||||||
|
695 Q=1:GOTO 830
|
||||||
|
700 IF WS(R,S+1)<>0 THEN GOTO 730
|
||||||
|
710 X=INT(RND(1)*2+1)
|
||||||
|
720 ON X GOTO 860,910
|
||||||
|
730 GOTO 860
|
||||||
|
740 IF S<>V THEN GOTO 760
|
||||||
|
750 IF Z==1 THEN GOTO 780
|
||||||
|
755 Q=1:GOTO 770
|
||||||
|
760 IF WS(R,S+1)<>0 THEN GOTO 780
|
||||||
|
770 GOTO 910
|
||||||
|
780 GOTO 1000
|
||||||
|
790 WS(R-1,S)=C
|
||||||
|
800 C=C+1:VS(R-1,S)=2:R=R-1
|
||||||
|
810 IF C==H*V+1 THEN GOTO 1010
|
||||||
|
815 Q=0:GOTO 260
|
||||||
|
820 WS(R,S-1)=C
|
||||||
|
830 C=C+1
|
||||||
|
840 VS(R,S-1)=1:S=S-1:IF C==H*V+1 THEN GOTO 1010
|
||||||
|
850 Q=0:GOTO 260
|
||||||
|
860 WS(R+1,S)=C
|
||||||
|
870 C=C+1:IF VS(R,S)==0 THEN GOTO 880
|
||||||
|
875 VS(R,S)=3:GOTO 890
|
||||||
|
880 VS(R,S)=2
|
||||||
|
890 R=R+1
|
||||||
|
900 IF C==H*V+1 THEN GOTO 1010
|
||||||
|
905 GOTO 530
|
||||||
|
910 IF Q==1 THEN GOTO 960
|
||||||
|
920 WS(R,S+1)=C:C=C+1:IF VS(R,S)==0 THEN GOTO 940
|
||||||
|
930 VS(R,S)=3:GOTO 950
|
||||||
|
940 VS(R,S)=1
|
||||||
|
950 S=S+1:IF C==H*V+1 THEN GOTO 1010
|
||||||
|
955 GOTO 260
|
||||||
|
960 Z=1
|
||||||
|
970 IF VS(R,S)==0 THEN GOTO 980
|
||||||
|
975 VS(R,S)=3:Q=0:GOTO 1000
|
||||||
|
980 VS(R,S)=1:Q=0:R=1:S=1:GOTO 250
|
||||||
|
1000 GOTO 210
|
||||||
|
1010 FOR J=1 TO V
|
||||||
|
1011 PRINT "|";
|
||||||
|
1012 FOR I=1 TO H
|
||||||
|
1013 IF VS(I,J)<2 THEN GOTO 1030
|
||||||
|
1020 PRINT " ";
|
||||||
|
1021 GOTO 1040
|
||||||
|
1030 PRINT " |";
|
||||||
|
1040 NEXT
|
||||||
|
1041 PRINT
|
||||||
|
1043 FOR I=1 TO H
|
||||||
|
1045 IF VS(I,J)==0 THEN GOTO 1060
|
||||||
|
1050 IF VS(I,J)==2 THEN GOTO 1060
|
||||||
|
1051 PRINT ": ";
|
||||||
|
1052 GOTO 1070
|
||||||
|
1060 PRINT ":--";
|
||||||
|
1070 NEXT
|
||||||
|
1071 PRINT "."
|
||||||
|
1072 NEXT
|
||||||
|
1073 END
|
||||||
|
\end{lstlisting}
|
||||||
142
assets/disk0/tbas/doc/sample_hamurabi.tex
Normal file
142
assets/disk0/tbas/doc/sample_hamurabi.tex
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
This is a sample program that is the \emph{Hamurabi} game. The original program was on \emph{BASIC Computer Games: Microcomputer Edition} and was translated into \tbas. This game is considered as the great ancestor of the strategy, simulation and city-building games; in fact it's so great it has got its own Wikipedia article.
|
||||||
|
|
||||||
|
\begin{lstlisting}
|
||||||
|
10 PRINT SPC(32);"HAMURABI"
|
||||||
|
20 PRINT SPC(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||||
|
30 PRINT:PRINT:PRINT
|
||||||
|
80 PRINT "TRY YOUR HAND AT GOVERNING ANCIENT SUMERIA"
|
||||||
|
90 PRINT "FOR A TEN-YEAR TERM OF OFFICE.":PRINT
|
||||||
|
95 D1=0:P1=0
|
||||||
|
100 Z=0:P=95:S=2800:H=3000:E=H-S
|
||||||
|
110 Y=3:A=H/Y:I=5:Q=1
|
||||||
|
210 D=0
|
||||||
|
215 PRINT:PRINT:PRINT "HAMURABI: I BEG TO REPORT TO YOU,":Z=Z+1
|
||||||
|
217 PRINT "IN YEAR ";Z;", ";D;" PEOPLE STARVED, ";I;" CAME TO THE CITY,"
|
||||||
|
220 P=P+I
|
||||||
|
227 IF Q>0 THEN GOTO 230
|
||||||
|
228 P=INT(P/2)
|
||||||
|
229 PRINT "A HORRIBLE PLAGUE STRUCK! HALF THE PEOPLE DIED."
|
||||||
|
230 PRINT "POPULATION IS NOW ";P
|
||||||
|
232 PRINT "THE CITY NOW OWNS ";A;" ACRES."
|
||||||
|
235 PRINT "YOU HARVESTED ";Y;" BUSHELS PER ACRE."
|
||||||
|
250 PRINT "THE RATS ATE ";E;" BUSHELS."
|
||||||
|
260 PRINT "YOU NOW HAVE ";S;" BUSHELS IN STORE."
|
||||||
|
261 PRINT
|
||||||
|
270 IF Z==11 THEN GOTO 860
|
||||||
|
310 C=INT(10*RND(1))
|
||||||
|
311 Y=C+17
|
||||||
|
312 PRINT "LAND IS TRADING AT ";Y;" BUSHELS PER ACRE."
|
||||||
|
320 PRINT "HOW MANY ACRES DO YOU WISH TO BUY";
|
||||||
|
321 INPUT Q
|
||||||
|
322 IF Q<0 THEN GOTO 850
|
||||||
|
323 IF Y*Q<=S THEN GOTO 330
|
||||||
|
324 GOSUB 710
|
||||||
|
325 GOTO 320
|
||||||
|
330 IF Q==0 THEN GOTO 340
|
||||||
|
331 A=A+Q:S=S-Y*Q:C=0
|
||||||
|
334 GOTO 400
|
||||||
|
340 PRINT "HOW MANY ACRES DO YOU WISH TO SELL";
|
||||||
|
341 INPUT Q
|
||||||
|
342 IF Q<0 THEN GOTO 850
|
||||||
|
343 IF Q<A THEN GOTO 350
|
||||||
|
344 GOSUB 720
|
||||||
|
345 GOTO 340
|
||||||
|
350 A=A-Q:S=S+Y*Q:C=0
|
||||||
|
400 PRINT
|
||||||
|
410 PRINT "HOW MANY BUSHELS DO YOU WISH TO FEED YOUR PEOPLE";
|
||||||
|
411 INPUT Q
|
||||||
|
412 IF Q<0 THEN GOTO 850
|
||||||
|
418 REM *** TRYING TO USE MORE GRAIN THAN IS IN SILOS?
|
||||||
|
420 IF Q<=S THEN GOTO 430
|
||||||
|
421 GOSUB 710
|
||||||
|
422 GOTO 410
|
||||||
|
430 S=S-Q:C=1:PRINT
|
||||||
|
440 PRINT "HOW MANY ACRES DO YOU WISH TO PLANT WITH SEED";
|
||||||
|
441 INPUT D
|
||||||
|
442 IF D==0 THEN GOTO 511
|
||||||
|
443 IF D<0 THEN GOTO 850
|
||||||
|
444 REM *** TRYING TO PLANT MORE ACRES THAN YOU OWN?
|
||||||
|
445 IF D<=A THEN GOTO 450
|
||||||
|
446 GOSUB 720
|
||||||
|
447 GOTO 440
|
||||||
|
449 REM *** ENOUGH GRAIN FOR SEED?
|
||||||
|
450 IF INT(D/2)<=S THEN GOTO 455
|
||||||
|
452 GOSUB 710
|
||||||
|
453 GOTO 440
|
||||||
|
454 REM *** ENOUGH PEOPLE TO TEND THE CROPS?
|
||||||
|
455 IF D<10*P THEN GOTO 510
|
||||||
|
460 PRINT "BUT YOU HAVE ONLY ";P;" PEOPLE TO TEND THE FIELDS! NOW THEN,"
|
||||||
|
470 GOTO 440
|
||||||
|
510 S=S-INT(D/2)
|
||||||
|
511 GOSUB 800
|
||||||
|
512 REM *** A BOUNTIFUL HARVEST!
|
||||||
|
515 Y=C:H=D*Y:E=0
|
||||||
|
521 GOSUB 800
|
||||||
|
522 IF INT(C/2)<>C/2 THEN GOTO 530
|
||||||
|
523 REM *** RATS ARE RUNNING WILD!!
|
||||||
|
525 E=INT(S/C)
|
||||||
|
530 S=S-E+H
|
||||||
|
531 GOSUB 800
|
||||||
|
532 REM *** LET'S HAVE SOME BABIES
|
||||||
|
533 I=INT(C*(20*A+S)/P/100+1)
|
||||||
|
539 REM *** HOW MANY PEOPLE HAD FULL TUMMIES?
|
||||||
|
540 C=INT(Q/20)
|
||||||
|
541 REM *** HORROS, A 15% CHANCE OF PLAGUE
|
||||||
|
542 Q=INT(10*(2*RND(1)-0.3))
|
||||||
|
550 IF P<C THEN GOTO 210
|
||||||
|
551 REM *** STARVE ENOUGH FOR IMPEACHMENT?
|
||||||
|
552 D=P-C
|
||||||
|
553 IF D>0.45*P THEN GOTO 560
|
||||||
|
554 P1=((Z-1)*P1+D*100/P)/Z
|
||||||
|
555 P=C
|
||||||
|
556 D1=D1+D
|
||||||
|
557 GOTO 215
|
||||||
|
560 PRINT
|
||||||
|
561 PRINT "YOU STARVED ";D;" PEOPLE IN ONE YEAR!!!"
|
||||||
|
565 PRINT "DUE TO THIS EXTREME MISMANAGEMENT YOU HAVE NOT ONLY"
|
||||||
|
566 PRINT "BEEN IMPEACHED AND THROWN OUT OF OFFICE BUT YOU HAVE"
|
||||||
|
567 PRINT "ALSO BEEN DECLARED NATIONAL FINK!!!!"
|
||||||
|
568 GOTO 990
|
||||||
|
710 PRINT "HAMURABI: THINK AGAIN. YOU HAVE ONLY"
|
||||||
|
711 PRINT S;" BUSHELS OF GRAIN. NOW THEN,"
|
||||||
|
712 RETURN
|
||||||
|
720 PRINT "HAMURABI: THINK AGAIN. YOU OWN ONLY ";A;" ACRES. NOW THEN,"
|
||||||
|
730 RETURN
|
||||||
|
800 C=INT(RND(1)*5)+1
|
||||||
|
801 RETURN
|
||||||
|
850 PRINT
|
||||||
|
851 PRINT "HAMURABI: I CANNOT DO WHAT YOU WISH."
|
||||||
|
855 PRINT "GET YOURSELF ANOTHER STEWARD!!!!!"
|
||||||
|
857 GOTO 990
|
||||||
|
860 PRINT "IN YOUR 10-YEAR TERM OF OFFICE, ";P1;" PERCENT OF THE"
|
||||||
|
862 PRINT "POPULATION STARVED PER YEAR ON THE AVERAGE, I.E. A TOTAL OF"
|
||||||
|
865 PRINT D1;"PEOPLE DIED!!"
|
||||||
|
866 L=A/P
|
||||||
|
870 PRINT "YOU STARTED WITH 10 ACRES PER PERSON AND ENDED WITH"
|
||||||
|
875 PRINT L;"ACRES PER PERSON."
|
||||||
|
876 PRINT
|
||||||
|
880 IF P1>33 THEN GOTO 565
|
||||||
|
885 IF L<7 THEN GOTO 565
|
||||||
|
890 IF P1>10 THEN GOTO 940
|
||||||
|
892 IF L<9 THEN GOTO 940
|
||||||
|
895 IF P1>3 THEN GOTO 960
|
||||||
|
896 IF L<10 THEN GOTO 960
|
||||||
|
900 PRINT "A FANTASTIC PERFORMANCE!!! CHARLEMANGE, DISRAELI, AND"
|
||||||
|
905 PRINT "JEFFERSON COMBINED COULD NOT HAVE DONE BETTER!"
|
||||||
|
906 GOTO 990
|
||||||
|
940 PRINT "YOUR HEAVY-HANDED PERFORMANCE SMACKS OF NERO AND IVAN IV."
|
||||||
|
945 PRINT "THE PEOPLE (REMIANING) FIND YOU AN UNPLEASANT RULER, AND,"
|
||||||
|
950 PRINT "FRANKLY, HATE YOUR GUTS!!"
|
||||||
|
951 GOTO 990
|
||||||
|
960 PRINT "YOUR PERFORMANCE COULD HAVE BEEN SOMEWHAT BETTER, BUT"
|
||||||
|
965 PRINT "REALLY WASN'T TOO BAD AT ALL. ";INT(P*0.8*RND(1));" PEOPLE"
|
||||||
|
970 PRINT "WOULD DEARLY LIKE TO SEE YOU ASSASSINATED BUT WE ALL HAVE OUR"
|
||||||
|
975 PRINT "TRIVIAL PROBLEMS."
|
||||||
|
990 PRINT
|
||||||
|
991 FOR N=1 TO 10
|
||||||
|
992 PRINT EMIT(7;)
|
||||||
|
993 NEXT
|
||||||
|
995 PRINT "SO LONG FOR NOW."
|
||||||
|
996 PRINT
|
||||||
|
999 END
|
||||||
|
\end{lstlisting}
|
||||||
@@ -203,8 +203,18 @@
|
|||||||
\chapter{Bibliography}
|
\chapter{Bibliography}
|
||||||
\input{bibliography}
|
\input{bibliography}
|
||||||
|
|
||||||
|
\part{More Goodies}
|
||||||
|
|
||||||
\chapter*{Disclaimers}
|
\chapter{99 Bottles of Beer}
|
||||||
|
\input{sample_99}
|
||||||
|
|
||||||
|
\chapter{Amazing}
|
||||||
|
\input{sample_amazing}
|
||||||
|
|
||||||
|
\chapter{Hamurabi}
|
||||||
|
\input{sample_hamurabi}
|
||||||
|
|
||||||
|
\chapter{Disclaimers}
|
||||||
|
|
||||||
\oreallypress{} is entirely fictional publishing entity; \oreallypress{} has no affiliation whatsoever with any of the real-world publishers.
|
\oreallypress{} is entirely fictional publishing entity; \oreallypress{} has no affiliation whatsoever with any of the real-world publishers.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user