home *** CD-ROM | disk | FTP | other *** search
- 1 ' T h e S q u a r e (tm)
- 2 ' -------------------
- 3 '
- 4 ' Copyright (c) 1983 by: David N. Smith,
- 5 ' 44 Ole Musket Lane,
- 6 ' Danbury, Ct. 06810
- 7 ' CompuServe: 73145,153
- 8 '
- 9 ' The Square is distributed following the "freeware" concept:
- 10 '
- 11 ' 1) you may copy it freely for personal use but not for profit, nor as
- 12 ' a part of a package which is sold. Give it away and encourage
- 13 ' others to do so also.
- 14 '
- 15 ' 2) contributions of $20 can be made if you find the program
- 16 ' entertaining.
- 17 '
- 18 ' If you send a postage paid, self addressed, diskette mailer to the
- 19 ' address above, the author will send a diskette with the program and
- 20 ' documentation.
- 21 '
- 22 ' If you send a postage paid, self addressed, diskette mailer with your
- 23 ' contribution of $20, the author will send a COMPILED version of The
- 24 ' Square. The compiled version is significantly faster.
- 25 '
- 26 ' See accompanying file SQUARE.SUM for more information.
- 27 '
- 30 CLEAR ,,2048
- 31 DEFINT A-Z
- 32 '
- 33 ' constants
- 34 SCORE=0 ' moves since scrambled
- 35 LEVEL=0 ' level of difficulty (0,1)
- 36 BLOBS$=CHR$(219)+CHR$(219)+CHR$(219)
- 37 CUROFF=0: CURON=1
- 39 SCRAMBLED=0 ' was sqaure scrambled by program?
- 40 RUNNING=0 ' have initialized
- 41 DIR=1 ' direction of move (+1 or -1)
- 43 REDISPLAY=1' redisplay sqaure? (1=yes, 0=no)
- 44 '
- 45 X$=TIME$+"": X=VAL(MID$(X$,7,2)): X=X*100+VAL(MID$(X$,4,2))
- 48 RANDOMIZE X
- 49 '
- 50 DARROW$=CHR$(25)
- 51 DARROW2$=DARROW$+DARROW$
- 52 DARROW3$=DARROW2$+DARROW$
- 53 RARROW$=CHR$(26): RARROW3$=RARROW$+RARROW$+RARROW$
- 54 '
- 56 KEY OFF: CLS
- 59 DEF SEG=0
- 60 IF (PEEK(&H410) AND &H30) <> &H30 THEN MONO=0 ELSE MONO=1
- 62 IF MONO=0 THEN SCREEN 0,1,0,0: COLOR 7,0,0: WIDTH 40: CLS
- 65 IF MONO=1 THEN COLOR 7,0
- 100 '
- 101 ' *******************
- 102 '
- 108 DIM SQ(36) ' sq(6,6)
- 120 DIM CH$(4)
- 122 CH$(1)=CHR$(176): CH$(2)=CHR$(206): CH$(3)=CHR$(221): CH$(4)=CHR$(219)
- 130 MAXNMOVES=100: NMOVES=0: DIM MOVES(100)
- 136 DIM ICOLOR(4): ICOLOR(1)=1: ICOLOR(2)=2: ICOLOR(3)=4: ICOLOR(4)=15
- 138 '
- 139 'saved status
- 140 DIM SAVESQ(36), STATUS(10)
- 142 STATUSSAVED=0
- 197 '
- 290 ' **********************************
- 295 ' initialization
- 300 RUNNING=0
- 305 GOSUB 6000 ' initialize the square
- 310 GOSUB 5000 ' display logo
- 320 GOSUB 6500 ' ask level of difficulty
- 325 REDISPLAY=1
- 330 GOSUB 1000 ' display square
- 360 GOSUB 4100 ' scramble the square
- 370 RUNNING=1
- 380 REDISPLAY=0
- 490 '
- 495 ' **********************************
- 499 ' main loop
- 500 WHILE 1=1
- 510 GOSUB 1000 ' display square
- 520 GOSUB 8000 ' see if it's in solution
- 530 GOSUB 3000 ' read a command
- 540 GOSUB 2000 ' perform operation
- 590 WEND ' loop
- 660 STOP
- 990 ' **********************************
- 998 '
- 999 ' display square
- 1000 IF REDISPLAY=0 THEN RETURN
- 1005 IF MONO=0 THEN GOTO 1500
- 1010 REDISPLAY=0
- 1015 CLS
- 1017 LOCATE 1,70: IF LEVEL=0 THEN PRINT"Hard" ELSE PRINT "Harder"
- 1018 COLOR 7: S$=SPACE$(36)
- 1050 FOR J=1 TO 6
- 1065 IF LEVEL=1 THEN LOCATE J*3-2,15: PRINT STR$(J)+" "+RARROW$
- 1070 FOR I=1 TO 6
- 1080 X$=CH$(SQ(J+I*6-6)): MARK=MARK+1
- 1100 MID$(S$, (I*6)-5,6)=X$+X$+X$+X$+X$+" "
- 1120 NEXT I
- 1135 LOCATE J*3-1, 21: IF LEVEL=0 THEN PRINT S$+STR$(J)+RARROW$ ELSE PRINT S$
- 1145 LOCATE J*3-0, 21: PRINT S$
- 1180 NEXT J
- 1190 IF LEVEL=1 THEN LOCATE 19,16: PRINT "1 "+RARROW$
- 1200 LOCATE 20, 18
- 1210 IF LEVEL=0 THEN PRINT DARROW3$ +" A B C D E F "+DARROW3$
- 1215 IF LEVEL<>0 THEN PRINT DARROW2$+"A B C D E F A "+DARROW2$
- 1220 RETURN
- 1499 ' COLOR DISPLAY ----------------------
- 1500 CLS
- 1502 LOCATE 1,32: IF LEVEL=0 THEN PRINT"Hard" ELSE PRINT "Harder"
- 1505 COLOR 15,0: REDISPLAY=0
- 1550 FOR Y=1 TO 6
- 1570 FOR X=1 TO 6
- 1575 IC=SQ(Y+X*6-6): COLOR ICOLOR(IC),0,0
- 1590 LOCATE Y*3-1,10+X*4-4: PRINT BLOBS$
- 1610 LOCATE Y*3, 10+X*4-4: PRINT BLOBS$
- 1630 NEXT X
- 1640 COLOR 7,0,0
- 1650 IF LEVEL=0 THEN LOCATE Y*3, 5: PRINT STR$(Y) +" "+ RARROW$ ELSE LOCATE Y*3-2,4: PRINT STR$(Y) +" "+ RARROW$
- 1680 NEXT Y
- 1690 IF LEVEL=1 THEN LOCATE 19,5 : PRINT "1 "+RARROW$
- 1700 LOCATE 20, 18
- 1710 IF LEVEL=0 THEN PRINT " "+DARROW3$ +" A B C D E F "+DARROW3$
- 1720 IF LEVEL<>0 THEN PRINT" "+ DARROW3$+" A B C D E F A "+DARROW3$
- 1730 RETURN
- 1990 ' ****************************
- 1996 ' perform operation: +A, -3, -c, d, 6, ...
- 1997 ' inputs: OP$
- 1998 '
- 2000 IF OP$>="A" AND OP$<="Z" THEN OP$=CHR$( ASC(OP$)+ASC("a")-ASC("A") )
- 2005 IF OP$="l" OR OP$="q" OR OP$="r" OR OP$="s" THEN GOSUB 2850 ' doit or not?
- 2010 IF OP$="" THEN RETURN
- 2015 IF OP$="l" THEN GOTO 320
- 2018 IF OP$="m" THEN GOSUB 10000: RETURN
- 2020 IF OP$="q" THEN GOTO 2900
- 2025 IF OP$="r" THEN REDISPLAY=1: GOSUB 6000: GOTO 2600
- 2030 IF OP$="s" THEN REDISPLAY=1: GOSUB 1000: GOSUB 4100: GOTO 2600
- 2040 IF OP$="u" THEN GOTO 2700
- 2100 IF OP$="?" THEN GOSUB 5500: REDISPLAY=1: RETURN
- 2110 IF OP$="/" THEN GOSUB 5500: REDISPLAY=1: RETURN
- 2120 IF OP$="+" THEN DIR=+1: GOTO 2600
- 2130 IF OP$="!" THEN REDISPLAY=1: IF LEVEL=1 THEN LEVEL=0: RETURN ELSE LEVEL=1: RETURN
- 2140 IF OP$="-" THEN DIR=-1: GOTO 2600
- 2150 IF OP$=" " THEN REDISPLAY=1: RETURN
- 2220 ' must be a row or column slide
- 2240 IF (OP$<"1" OR OP$>"6") AND (OP$<"a" OR OP$>"f") THEN BEEP: GOTO 2600
- 2260 IF NMOVES=MAXNMOVES THEN FOR I=1 TO MAXNMOVES/2: MOVES(I)=MOVES(I+MAXNMOVES/2): NEXT I: NMOVES=MAXNMOVES/2
- 2270 NMOVES=NMOVES+1
- 2280 MOVES(NMOVES)=ASC(OP$)*DIR
- 2300 SCORE=SCORE+1
- 2310 REDISPLAY=1
- 2320 GOSUB 7000
- 2330 DIR=1
- 2599 ' see if another character has been typed
- 2600 FOR I=1 TO 10
- 2610 OP$=INKEY$: IF OP$ <> "" GOTO 2000
- 2620 NEXT I
- 2630 RETURN
- 2699 ' undo a move (and unscore it too)
- 2700 IF NMOVES=0 THEN BEEP: GOTO 2600
- 2710 IF NMOVES > MAXNMOVES THEN BEEP: GOTO 2600
- 2720 I=MOVES(NMOVES): IF I<0 THEN DIR=1: I=-I ELSE DIR=-1
- 2740 OP$=CHR$(I): REDISPLAY=1: GOSUB 7000: NMOVES=NMOVES-1: SCORE=SCORE-1: DIR=1
- 2800 GOTO 2600
- 2849 ' ask before doing something drastic
- 2850 IF SCRAMBLED=0 THEN RETURN
- 2855 IF MONO=1 THEN LOCATE 22,1 ELSE LOCATE 23,1
- 2860 PRINT " "+OP$+" resets the game; type `y' or 'n' "
- 2870 X$=INKEY$: IF X$="" THEN GOTO 2870
- 2880 IF X$<>"y" AND X$<>"Y" AND X$<>"n" AND X$<>"N" THEN GOTO 2850
- 2885 IF X$="n" OR X$="N" THEN OP$=""
- 2890 RETURN
- 2898 '
- 2899 ' stopping
- 2900 CLS: LOCATE 12,15: IF MONO=0 THEN COLOR 12+16 ELSE COLOR 15+16
- 2920 PRINT "G O O D B Y E"
- 2925 IF MONO=0 THEN COLOR 12 ELSE COLOR 15
- 2930 LOCATE 15,10: PRINT "Thank you for playing"
- 2945 IF MONO=0 THEN COLOR 15 ELSE COLOR 7
- 2950 LOCATE 22,1: KEY ON
- 2960 STOP
- 2990 ' *********************************
- 2997 '
- 2998 ' enter a command
- 2999 '
- 3000 IF MONO=1 THEN LOCATE 22,1: X$=SPACE$(20) ELSE LOCATE 23,1: X$=" "
- 3010 PRINT " Enter command (or ?)"+X$+" ("+MID$(STR$(SCORE),2)+" moves) "
- 3020 I=1: OP$=""
- 3030 WHILE OP$=""
- 3035 OP$=INKEY$: I=I+1: IF I>(300-NMOVES) THEN GOTO 3052
- 3050 WEND
- 3052 IF LEN(OP$)>=2 THEN STOP
- 3055 IF OP$<>"" THEN RETURN
- 3060 IF RANDOMLY=0 OR SCRAMBLED=0 THEN GOTO 3020
- 3065 I=INT(12*RND)+1: IF I<=6 THEN GOSUB 7800 ELSE J=I-6: GOSUB 7600
- 3070 FOR II=1 TO 2: PLAY "ml t255 l64 n10n12n10n12n10n12n10n12n10n12n10": NEXT
- 3075 GOTO 3020
- 3990 ' *********************************
- 3996 '
- 3998 ' scramble
- 3999 '
- 4000 LOCATE 22,1: PRINT "scramble the square now? ('y' or 'n')"
- 4020 X$=INKEY$: IF X$="" THEN GOTO 4020
- 4025 IF X$="?" THEN GOSUB 5500: CLS: GOTO 4000
- 4030 LOCATE 22,1: PRINT " "
- 4050 IF X$<>"y" AND X$<>"n" AND X$<>"Y" AND X$<>"n" THEN GOTO 4000
- 4060 IF X$="n" OR X$<>"N" THEN RETURN
- 4099 ' entry point here (scramble without prompting)
- 4100 IF MONO=1 THEN LOCATE 22,1 ELSE LOCATE 23,1
- 4105 PRINT " Square being scrambled ... "
- 4107 K=30
- 4110 FOR K=1 TO K
- 4120 I=INT(12*RND)+1: SOUND 100,.2: DIR=-1
- 4125 IF I<=6 THEN GOSUB 7800: IF LEVEL=1 THEN I=I+1: IF I>6 THEN I=1: GOSUB 7800 ELSE GOSUB 7800
- 4130 IF I>6 THEN J=I-6: GOSUB 7600: IF LEVEL=1 THEN J=J+1: IF J>6 THEN J=1: GOSUB 7600 ELSE GOSUB 7600
- 4150 NEXT K
- 4160 'REDISPLAY=1
- 4170 SCORE=0: SCRAMBLED=1: NMOVES=0: DIR=1
- 4195 PLAY "ml t255 l64 ccddeeffggaabb"
- 4200 RETURN
- 4992 ' *********************************
- 4993 ' *********************************
- 4996 ' logo
- 5000 IF MONO=0 THEN 5200
- 5002 CLS
- 5005 LOCATE 3,1
- 5016 PRINT " ***** * * *****"
- 5018 PRINT " * * * * IBM Personal Computer"
- 5020 PRINT " * ***** *** Recreational"
- 5022 PRINT " * * * * Program"
- 5024 PRINT " * * * ***** Version 1.0c"
- 5028 LOCATE 10,1
- 5030 PRINT " ***** ***** * * *** ****** ******* (tm)"
- 5031 PRINT " * * * * * * * * * * *"
- 5032 PRINT " * * * * * * * * * *"
- 5033 PRINT " ***** * * * * * * ****** ****"
- 5034 PRINT " * * * * * ******* * * *"
- 5035 PRINT " * * * * * * * * * * *"
- 5036 PRINT " ***** ******** ***** * * * * *******"
- 5038 LOCATE 18,1
- 5040 PRINT " Copyright (c) 1983 by David N. Smith"
- 5050 LOCATE 21,1
- 5055 PRINT " HIT SPACE BAR TO CONTINUE"
- 5057 PRINT " (Press M to change display type)"
- 5060 PRINT " Hit ? for instructions at ANY time."
- 5065 X$=INKEY$ : IF X$="" THEN GOTO 5065
- 5068 IF X$="?" THEN GOSUB 5500
- 5070 IF X$="m" OR X$="M" THEN GOSUB 10000: GOTO 5000
- 5075 IF X$="r" OR X$="R" THEN RANDOMLY=1: GOTO 5065
- 5090 RETURN
- 5199 'color display (40 column)
- 5200 CLS: LOCATE 5,5: PRINT "T H E"
- 5225 LOCATE 9,5: PRINT "S Q U A R E (tm)"
- 5238 LOCATE 14,5: PRINT "Copyright (c) 1983 by David N. Smith
- 5240 LOCATE 15,5: PRINT "Version 1.0c"
- 5250 LOCATE 18,1: PRINT " HIT SPACE BAR TO CONTINUE"
- 5260 PRINT " (Press M to change display device)
- 5262 PRINT " Hit ? for instructions at ANY time."
- 5265 X$=INKEY$ : IF X$="" THEN GOTO 5265
- 5267 COLOR 7,0,0
- 5268 IF X$="?" THEN GOSUB 5500
- 5270 IF X$="m" OR X$="M" THEN GOSUB 10000: GOTO 5200
- 5290 RETURN
- 5492 ' *********************************
- 5495 '
- 5496 ' help
- 5500 CLS: OP$="": REDISPLAY=1
- 5510 IF MONO=0 THEN INDENT$=" " ELSE INDENT$=SPACE$(20)
- 5902 PRINT INDENT$+" C O M M A N D S U M M A R Y"
- 5903 PRINT " "
- 5904 PRINT INDENT$+"a to f Slide corresponding column(s)"
- 5906 PRINT INDENT$+"1 to 6 Slide corresponding row(s)"
- 5907 PRINT " "
- 5908 PRINT INDENT$+"- Reverse direction of next
- 5909 PRINT INDENT$+" row or column slide command."
- 5910 PRINT INDENT$+" Examples: -b -6 -f -1"
- 5911 PRINT " "
- 5912 PRINT INDENT$+"l Reset level of difficulty."
- 5913 PRINT INDENT$+"m To/From Monochrome Display
- 5914 PRINT INDENT$+"q Quit; Don't play any longer."
- 5915 PRINT INDENT$+"r Reset; put into solution."
- 5916 PRINT INDENT$+"s Scramble again (differently)"
- 5917 PRINT INDENT$+"u Undo the last move."
- 5919 PRINT INDENT$+"/ or ? Display command summary"
- 5920 PRINT " "
- 5924 PRINT INDENT$+"Any other key causes a beep and is"
- 5926 PRINT INDENT$+"otherwise ignored."
- 5928 PRINT INDENT$
- 5929 IF MONO=0 THEN COLOR 12 ELSE COLOR 15
- 5932 PRINT " Hit any key to continue."
- 5933 COLOR 7
- 5934 OP$=INKEY$: IF OP$="" THEN GOTO 5934
- 5940 CLS
- 5980 RETURN
- 5990 ' ********************
- 5995 '
- 5997 ' initialize the square
- 5998 '
- 6000 FOR I=1 TO 3: FOR J=1 TO 3: SQ(I+J*6-6)=1: NEXT J: NEXT I
- 6050 FOR I=4 TO 6: FOR J=1 TO 3: SQ(I+J*6-6)=2: NEXT J: NEXT I
- 6060 FOR I=1 TO 3: FOR J=4 TO 6: SQ(I+J*6-6)=3: NEXT J: NEXT I
- 6070 FOR I=4 TO 6: FOR J=4 TO 6: SQ(I+J*6-6)=4: NEXT J: NEXT I
- 6075 SCORE=0: SCRAMBLED=0: NMOVES=0
- 6100 RETURN
- 6490 ' ******************************
- 6495 ' ask level of difficulty
- 6500 CLS
- 6505 LOCATE 8,10: PRINT " Type a space for a Hard puzzle"
- 6515 LOCATE 12,10: PRINT " Type an 'r' for a race against time"
- 6518 LOCATE 16,10: PRINT " Hit any other key for a Harder puzzle"
- 6523 LOCATE 20,10: PRINT " Hit ? for instructions at ANY time."
- 6530 X$=INKEY$: IF X$="" THEN GOTO 6530
- 6535 GOSUB 6000
- 6540 CLS: LEVEL=1
- 6555 IF X$="m" OR X$="M" THEN GOSUB 10000: GOTO 6500
- 6557 IF X$="r" OR X$="R" THEN RANDOMLY=1: LEVEL=0: RETURN
- 6560 IF X$=" " THEN LEVEL=0
- 6565 IF X$="?" THEN GOSUB 5500: GOTO 6500
- 6570 RETURN
- 6990 '*****************************
- 6995 '
- 6996 ' process command to rotate a column or row
- 6997 '
- 7000 IF OP$ >= "1" AND OP$ <= "6" THEN GOTO 7100 ' row move
- 7010 IF OP$ < "a" OR OP$ > "f" THEN RETURN ' error
- 7050 ' rotate a row
- 7060 J=ASC(OP$)-ASC("a")+1: GOSUB 7600 ' rotate row 'j'
- 7075 J=J-1: IF J=0 THEN J=6
- 7080 IF LEVEL=1 THEN GOSUB 7600 ' rotate row 'j'
- 7090 RETURN
- 7100 ' rotate a column
- 7110 I=ASC(OP$)-ASC("1")+1: GOSUB 7800 ' rotate row 'j'
- 7130 I=I-1: IF I=0 THEN I=6
- 7140 IF LEVEL=1 THEN GOSUB 7800 ' rotate column j
- 7150 RETURN
- 7590 ' ******************************
- 7595 ' rotate a row (7600) or column (7800)
- 7600 IF DIR=-1 THEN X=SQ(1+J*6-6): FOR I=2 TO 6: SQ(I-1+J*6-6)=SQ(I+J*6-6): NEXT I: SQ(6+J*6-6)=X
- 7610 IF DIR=1 THEN X=SQ(6+J*6-6): FOR I=1 TO 5: SQ(7-I+J*6-6)=SQ(6-I+J*6-6): NEXT I: SQ(1+J*6-6)=X
- 7620 ICOL=0: JROW=J: GOSUB 9000 ' redisplay it
- 7650 RETURN
- 7799 ' rotate a column
- 7800 IF DIR=-1 THEN X=SQ(I+1*6-6): FOR J=2 TO 6: SQ(I+(J-1)*6-6)=SQ(I+J*6-6): NEXT J: SQ(I+6*6-6)=X
- 7810 IF DIR=1 THEN X=SQ(I+6*6-6): FOR J=1 TO 5: SQ(I+(7-J)*6-6)=SQ(I+(6-J)*6-6): NEXT J: SQ(I+1*6-6)=X
- 7820 JROW=0: ICOL=I: GOSUB 9000 ' redisplay it
- 7890 RETURN
- 7997 '****
- 7999 ' see if square has been solved and make noise if so.
- 8000 IF SCRAMBLED=0 THEN RETURN
- 8010 II=SQ(1+1*6-6)
- 8020 FOR I=1 TO 3: FOR J=1 TO 3: IF II<>SQ(I+J*6-6) THEN RETURN: ELSE: NEXT J: NEXT I
- 8030 II=SQ(4+1*6-6)
- 8040 FOR I=4 TO 6: FOR J=1 TO 3: IF II<>SQ(I+J*6-6) THEN RETURN: ELSE: NEXT J: NEXT I
- 8050 II=SQ(1+4*6-6)
- 8060 FOR I=1 TO 3: FOR J=4 TO 6: IF II<>SQ(I+J*6-6) THEN RETURN: ELSE: NEXT J: NEXT I
- 8070 II=SQ(4+4*6-6)
- 8080 FOR I=4 TO 6: FOR J=4 TO 6: IF II<>SQ(I+J*6-6) THEN RETURN: ELSE: NEXT J: NEXT I
- 8088 IF MONO=0 THEN COLOR 4
- 8090 PRINT " Y O U W I N ! ! ! "
- 8100 FOR J=1 TO 10
- 8105 FOR I=600 TO 1100 STEP 100: SOUND I,.15: SOUND I-150,.15: NEXT I
- 8125 FOR I=1200 TO 600 STEP -200: SOUND I,.15: SOUND I-150,.15: NEXT I
- 8145 NEXT J
- 8150 SOUND 50,0: CLS
- 8235 IF MONO=1 THEN COLOR 15+16 ELSE COLOR 3+16 ' blinking display
- 8238 IF MONO=0 THEN INDENT$=" " ELSE INDENT$=SPACE$(27)
- 8240 PRINT INDENT$+"Y Y OO U U"
- 8241 PRINT INDENT$+" Y Y O O U U"
- 8242 PRINT INDENT$+" Y O O U U"
- 8243 PRINT INDENT$+" Y O O U U"
- 8244 PRINT INDENT$+" Y OO UU"
- 8245 PRINT ""
- 8246 PRINT ""
- 8247 PRINT INDENT$+"W W III N N !!!"
- 8248 PRINT INDENT$+"W W I NN N !!!"
- 8249 PRINT INDENT$+"W W I N N N !!!"
- 8250 PRINT INDENT$+"W W W I N NN"
- 8251 PRINT INDENT$+" W W III N N !"
- 8252 PRINT ""
- 8253 PRINT ""
- 8255 COLOR 7
- 8260 LOCATE 16,1
- 8265 PRINT "Hit space bar to see square"
- 8270 PRINT "Hit: ? for help"
- 8275 PRINT " s to scramble square again"
- 8280 PRINT " q to quit"
- 8290 SCRAMBLED=0
- 8300 RETURN
- 8995 '****************************
- 8997 ' update one column or rwo
- 9000 'IF RUNNING=0 THEN RETURN
- 9040 REDISPLAY=0: IF MONO=0 THEN GOTO 9200
- 9100 COLOR 7,0: IF ICOL>0 THEN GOTO 9150
- 9103 ' update mono column
- 9105 FOR I=1 TO 6
- 9110 X$=CH$(SQ(I+JROW*6-6)): X$=X$+X$+X$+X$+X$
- 9120 LOCATE I*3-1, 21+JROW*6-6: PRINT X$
- 9130 LOCATE I*3-0, 21+JROW*6-6: PRINT X$
- 9140 NEXT I
- 9145 RETURN
- 9150 ' update mono row
- 9155 FOR J=1 TO 6
- 9160 X$=CH$(SQ(ICOL+J*6-6)): X$=X$+X$+X$+X$+X$
- 9170 LOCATE ICOL*3-1, 21+J*6-6: PRINT X$
- 9180 LOCATE ICOL*3-0, 21+J*6-6: PRINT X$
- 9190 NEXT J
- 9195 RETURN
- 9197 ' ----- mono display -----
- 9200 ' update color column
- 9202 IF ICOL>0 THEN GOTO 9255
- 9205 FOR I=1 TO 6
- 9210 IC=SQ(I+JROW*6-6): COLOR ICOLOR(IC),0,0
- 9220 LOCATE I*3-1, 10+JROW*4-4: PRINT BLOBS$
- 9230 LOCATE I*3-0, 10+JROW*4-4: PRINT BLOBS$
- 9240 NEXT I
- 9242 COLOR 15,0
- 9245 RETURN
- 9250 ' update color row
- 9255 FOR J=1 TO 6
- 9257 IC=SQ(ICOL+J*6-6): COLOR ICOLOR(IC),0,0
- 9270 LOCATE ICOL*3-1, 10+J*4-4: PRINT BLOBS$
- 9280 LOCATE ICOL*3-0, 10+J*4-4: PRINT BLOBS$
- 9290 NEXT J
- 9292 COLOR 15,0
- 9295 RETURN
- 9980 '******************************
- 9990 ' COLOR MONITOR-MONOCHROME MONITOR SWITCH EMD 11-81
- 10000 CLS
- 10010 PRINT
- 10020 PRINT" For Color display press-C"
- 10030 PRINT" For Monochrome press -M"
- 10040 PRINT" For no change press any other key."
- 10050 K$=INKEY$:IF K$="" GOTO 10050
- 10060 IF K$="C" OR K$="c" THEN GOSUB 10190
- 10070 IF K$="M" OR K$="m" THEN GOSUB 10110
- 10080 CLS
- 10090 REDISPLAY=1
- 10100 RETURN
- 10110 '************** switch to monochrome ************
- 10120 DEF SEG=0: POKE &H410,(PEEK(&H410) OR &H30)
- 10140 DEF SEG: LOCATE ,,1,12,13
- 10155 SCREEN 0: WIDTH 80: COLOR 7,0: MONO=1
- 10170 RETURN
- 10180 '**************************
- 10190 REM switch to color/graphics adapter
- 10200 DEF SEG=0: POKE &H410,(PEEK(&H410) AND &HCF) OR &H20
- 10220 DEF SEG: LOCATE ,,1,6,7
- 10240 SCREEN 0: WIDTH 40: MONO=0
- 10260 RETURN