' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2023.08.08.01.01]) on 2023.08.26 at 05:38 (Coordinated Universal Time)
' "Amazing", by Jack Hauber of Windsor, Connecticut
' Port to BASIC Anywhere Machine by Charlie Veniot
' based on the "modern version" found at https://archive.org/details/amazing.qb64
' *** Changes ***
' - BAM does not allow variables and arrays with the same identifier, "V" array renamed "Varray"
' - TAB replaced by SPC


5 CLS: COLOR 12
10 PRINT SPC(32); "Amazing Program" ' 🟠
20 PRINT SPC(31); "Creative Computing" ' 🟠
25 PRINT SPC(29); "Morristown, New Jersey" ' 🟠
30 PRINT: PRINT: PRINT: RANDOMIZE TIMER
COLOR 2: PRINT "(enter the width, followed by a comma, followed by the height)" ' 🟠: added
100 COLOR 10: INPUT "What are your width and length? "; H, V: COLOR 15
102 IF H <> 1 AND V <> 1 THEN 110
104 PRINT "Meaningless dimensions.  Try again.": GOTO 100
110 DIM W(H, V), Varray(H, V) ' 🟠
SCREEN _NEWIMAGE((H*3 + 2)*8, (V*2 + 2 + 1)*8, 0) : COLOR 0, 15: CLS ' 🟠: added
150 PRINT
160 Q = 0: Z = 0: X = INT(RND(1) * H + 1)
165 FOR I = 1 TO H
170 IF I = X THEN 173
171 PRINT STRING$(3, 178);: GOTO 180 
173 PRINT CHR$(178); "  "; 
180 NEXT I
190 PRINT CHR$(178)
195 C = 1: W(X, 1) = C: C = C + 1
200 R = X: S = 1: GOTO 260
210 IF R <> H THEN 240
215 IF S <> V THEN 230
220 R = 1: S = 1: GOTO 250
230 R = 1: S = S + 1: GOTO 250
240 R = R + 1
250 IF W(R, S) = 0 THEN 210
260 IF R - 1 = 0 THEN 530
265 IF W(R - 1, S) <> 0 THEN 530
270 IF S - 1 = 0 THEN 390
280 IF W(R, S - 1) <> 0 THEN 390
290 IF R = H THEN 330
300 IF W(R + 1, S) <> 0 THEN 330
310 X = INT(RND(1) * 3 + 1)
320 ON X GOTO 790, 820, 860
330 IF S <> V THEN 340
334 IF Z = 1 THEN 370
338 Q = 1: GOTO 350
340 IF W(R, S + 1) <> 0 THEN 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 470
400 IF W(R + 1, S) <> 0 THEN 470
405 IF S <> V THEN 420
410 IF Z = 1 THEN 450
415 Q = 1: GOTO 430
420 IF W(R, S + 1) <> 0 THEN 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 490
480 IF Z = 1 THEN 520
485 Q = 1: GOTO 500
490 IF W(R, S + 1) <> 0 THEN 520
500 X = INT(RND(1) * 2 + 1)
510 ON X GOTO 790, 910
520 GOTO 790
530 IF S - 1 = 0 THEN 670
540 IF W(R, S - 1) <> 0 THEN 670
545 IF R = H THEN 610
547 IF W(R + 1, S) <> 0 THEN 610
550 IF S <> V THEN 560
552 IF Z = 1 THEN 590
554 Q = 1: GOTO 570
560 IF W(R, S + 1) <> 0 THEN 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 630
620 IF Z = 1 THEN 660
625 Q = 1: GOTO 640
630 IF W(R, S + 1) <> 0 THEN 660
640 X = INT(RND(1) * 2 + 1)
650 ON X GOTO 820, 910
660 GOTO 820
670 IF R = H THEN 740
680 IF W(R + 1, S) <> 0 THEN 740
685 IF S <> V THEN 700
690 IF Z = 1 THEN 730
695 Q = 1: GOTO 830
700 IF W(R, S + 1) <> 0 THEN 730
710 X = INT(RND(1) * 2 + 1)
720 ON X GOTO 860, 910
730 GOTO 860
740 IF S <> V THEN 760
750 IF Z = 1 THEN 780
755 Q = 1: GOTO 770
760 IF W(R, S + 1) <> 0 THEN 780
770 GOTO 910
780 GOTO 1000
790 W(R - 1, S) = C
800 C = C + 1: Varray(R - 1, S) = 2: R = R - 1 ' 🟠
810 IF C = H * V + 1 THEN 1010
815 Q = 0: GOTO 260
820 W(R, S - 1) = C
830 C = C + 1
840 Varray(R, S - 1) = 1: S = S - 1: IF C = H * V + 1 THEN 1010 ' 🟠
850 Q = 0: GOTO 260
860 W(R + 1, S) = C
870 C = C + 1: IF Varray(R, S) = 0 THEN 880 ' 🟠
875 Varray(R, S) = 3: GOTO 890 ' 🟠
880 Varray(R, S) = 2 ' 🟠
890 R = R + 1
900 IF C = H * V + 1 THEN 1010
905 GOTO 530
910 IF Q = 1 THEN 960
920 W(R, S + 1) = C: C = C + 1: IF Varray(R, S) = 0 THEN 940 ' 🟠
930 Varray(R, S) = 3: GOTO 950 ' 🟠
940 Varray(R, S) = 1 ' 🟠
950 S = S + 1: IF C = H * V + 1 THEN 1010
955 GOTO 260
960 Z = 1
970 IF Varray(R, S) = 0 THEN 980 ' 🟠
975 Varray(R, S) = 3: Q = 0: GOTO 1000 ' 🟠
980 Varray(R, S) = 1: Q = 0: R = 1: S = 1: GOTO 250 ' 🟠
1000 GOTO 210
1010 FOR J = 1 TO V
1011 PRINT CHR$(178); 
1012 FOR I = 1 TO H
1013 IF Varray(I, J) < 2 THEN 1030 ' 🟠
1020 PRINT "   ";
1021 GOTO 1040
1030 PRINT "  "; CHR$(178); 
1040 NEXT I
1041 PRINT
1043 FOR I = 1 TO H
1045 IF Varray(I, J) = 0 THEN 1060 ' 🟠
1050 IF Varray(I, J) = 2 THEN 1060 ' 🟠
1051 PRINT CHR$(178); "  "; 
1052 GOTO 1070
1060 PRINT STRING$(3, 178);
1070 NEXT I
1071 PRINT CHR$(178) 
1072 NEXT J
1073 END