home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
High Voltage Shareware
/
high1.zip
/
high1
/
DIR9
/
ROPE.ZIP
/
ROPE.ASC
< prev
next >
Wrap
Text File
|
1992-04-06
|
32KB
|
877 lines
DECLARE SUB helparrow ()
DECLARE SUB helphelp ()
DECLARE SUB helpexit ()
DECLARE SUB helpstep ()
DECLARE SUB helpfile ()
DECLARE SUB helpmusic ()
DECLARE SUB helpcompute ()
DECLARE SUB helpredraw ()
DECLARE SUB helpconn ()
DECLARE SUB helpand ()
DECLARE SUB helpvalue ()
DECLARE SUB helpnull ()
DECLARE SUB helpinvert ()
DECLARE SUB helpor ()
DECLARE SUB displaybox (i%, j%, idbox%, idvalue%)
DECLARE SUB helpmsg ()
DECLARE SUB music (i%)
DECLARE SUB drawonec (i%, j%, icolor%)
DECLARE SUB wsum (i%, isum%)
DEFINT I-N
DIM ibox(-1 TO 8, -1 TO 8), ivalue(7, 7), iconn(7, 7)
COMMON SHARED ibox(), ivalue(), iconn()
DECLARE SUB compute (i%, j%)
DECLARE SUB drawbox (i%, j%, icolor%)
DECLARE SUB drawconn (i%, j%, icolor%)
ON ERROR GOTO redraw
CALL helpmsg
redraw:
CLS
FOR i = 0 TO 7
FOR j = 0 TO 7
CALL drawbox(i, j, 1)
CALL drawconn(i, j, 1)
NEXT j
NEXT i
i = 0
j = 0
i1 = 0
j1 = 0
makecell:
CALL drawbox(i, j, 1)
CALL drawconn(i, j, 1)
CALL drawbox(i1, j1, 2)
CALL drawconn(i1, j1, 2)
i = i1
j = j1
DO
A$ = INKEY$
LOOP WHILE A$ = ""
A% = ASC(RIGHT$(A$, 1))
SELECT CASE A%
CASE 75
i1 = i - 1
IF i1 < 0 THEN i1 = 7
CASE 77
i1 = i + 1
IF i1 > 7 THEN i1 = 0
CASE 72
IF LEN(A$) < 2 THEN
CALL helpmsg
GOTO redraw
ELSE
j1 = j - 1
IF j1 < 0 THEN j1 = 7
END IF
CASE 80
j1 = j + 1
IF j1 > 7 THEN j1 = 0
CASE 104
CALL helpmsg
GOTO redraw
CASE 65, 97
ibox(i, j) = 8
ivalue(i, j) = 0
CASE 79, 111
ibox(i, j) = 4
ivalue(i, j) = 0
CASE 73, 105
ibox(i, j) = 2
ivalue(i, j) = 0
CASE 78, 110
ibox(i, j) = 0
ivalue(i, j) = 0
CASE 48 TO 51
ivalue(i, j) = A% - 48
IF ibox(i, j) < 4 AND ivalue(i, j) > 1 THEN ivalue(i, j) = 1
CASE 85, 117
IF iconn(i, j) = -1 THEN iconn(i, j) = 0 ELSE iconn(i, j) = -1
CASE 68, 100
IF iconn(i, j) = 1 THEN iconn(i, j) = 0 ELSE iconn(i, j) = 1
CASE 82, 114
GOTO redraw
CASE 67, 99
DO
CALL drawbox(i, j, 2)
CALL compute(i, j)
CALL drawbox(i, j, 1)
j = j + 1
IF j > 7 THEN
CALL wsum(i, isum)
LOCATE 1, 5 * i + 1
PRINT USING " ### "; isum;
j = 0
i = i + 1
IF i > 7 THEN i = 0
END IF
LOOP WHILE INKEY$ = ""
GOTO redraw
CASE 77, 109
DO
CALL drawbox(i, j, 2)
CALL compute(i, j)
CALL drawbox(i, j, 1)
j = j + 1
IF j > 7 THEN
CALL music(i)
j = 0
i = i + 1
IF i > 7 THEN i = 0
END IF
LOOP WHILE INKEY$ = ""
GOTO redraw
CASE 83, 115
CALL compute(i, j)
CASE 70, 102
SCREEN 0
WIDTH 80
CLS
FILES "*.rop"
INPUT "File name to save program"; filenam$
IF INSTR(filenam$, ".") = 0 THEN filenam$ = filenam$ + ".rop"
CLS
OPEN filenam$ FOR OUTPUT AS #1
FOR ind% = 0 TO 7
FOR jnd% = 0 TO 7
WRITE #1, ibox(ind%, jnd%), ivalue(ind%, jnd%), iconn(ind%, jnd%)
NEXT jnd%
NEXT ind%
CLOSE #1
SCREEN 1
GOTO redraw
CASE 76, 108
SCREEN 0
WIDTH 80
CLS
FILES "*.rop"
INPUT "File name to load program"; filenam$
IF INSTR(filenam$, ".") = 0 THEN filenam$ = filenam$ + ".rop"
OPEN filenam$ FOR INPUT AS #1
FOR ind% = 0 TO 7
FOR jnd% = 0 TO 7
INPUT #1, ibox(ind%, jnd%), ivalue(ind%, jnd%), iconn(ind%, jnd%)
NEXT jnd%
NEXT ind%
CLOSE #1
SCREEN 1
GOTO redraw
CASE 69, 101
SYSTEM
CASE ELSE
BEEP
END SELECT
GOTO makecell
nofile:
PRINT filenam$ + " not found."
INPUT "Input new filename"; filenam$
IF INSTR(filenam$, ".") = 0 THEN filenam$ = filenam$ + ".rop"
RESUME
SUB compute (i, j)
li = i - 1
IF li < 0 THEN li = 7
lj = j - 1
IF lj < 0 THEN lj = 7
nj = j + 1
IF nj > 7 THEN nj = 0
SELECT CASE (ibox(li, lj) + ivalue(li, lj))
CASE 1, 2, 5, 6, 7, 11
l% = 1
CASE 0, 3, 4, 8, 9, 10
l% = 0
END SELECT
SELECT CASE (ibox(li, j) + ivalue(li, j))
CASE 1, 2, 5, 6, 7, 11
sj% = 1
CASE 0, 3, 4, 8, 9, 10
sj% = 0
END SELECT
SELECT CASE (ibox(li, nj) + ivalue(li, nj))
CASE 1, 2, 5, 6, 7, 11
n% = 1
CASE 0, 3, 4, 8, 9, 10
n% = 0
END SELECT
IF ibox(i, j) < 4 THEN
IF iconn(i, j) = -1 THEN
ivalue(i, j) = l%
ELSEIF iconn(i, j) = 0 THEN
ivalue(i, j) = sj%
ELSE
ivalue(i, j) = n%
END IF
ELSE
IF iconn(i, j) = -1 THEN
ivalue(i, j) = sj% + 2 * n%
ELSEIF iconn(i, j) = 0 THEN
ivalue(i, j) = l% + 2 * n%
ELSE
ivalue(i, j) = l% + 2 * sj%
END IF
END IF
END SUB
SUB displaybox (i, j, idbox, idvalue)
isbox = ibox(i, j)
isvalue = ivalue(i, j)
ibox(i, j) = idbox
ivalue(i, j) = idvalue
CALL drawbox(i, j, 1)
ibox(i, j) = isbox
ivalue(i, j) = isvalue
END SUB
SUB drawbox (i, j, icolor)
iboxtype = ibox(i, j) + ivalue(i, j)
iul = 40 * i + 10
ilr = 25 * j + 2
LINE (iul - 5, ilr)-(iul + 25, ilr + 20), 0, BF
SELECT CASE iboxtype
CASE 0
LINE (iul, ilr)-(iul + 20, ilr + 20), icolor, B
LINE (iul, ilr + 8)-(iul, ilr + 12), 0
LINE (iul + 20, ilr + 8)-(iul + 20, ilr + 12), 0
LINE (iul - 5, ilr + 10)-(iul + 25, ilr + 10), icolor
LINE (iul - 5, ilr + 8)-(iul - 3, ilr + 12), icolor, BF
LINE (iul + 21, ilr + 8)-(iul + 23, ilr + 12), icolor, BF
CASE 1
LINE (iul, ilr)-(iul + 20, ilr + 20), icolor, B
LINE (iul, ilr + 8)-(iul, ilr + 12), 0
LINE (iul + 20, ilr + 8)-(iul + 20, ilr + 12), 0
LINE (iul - 5, ilr + 10)-(iul + 25, ilr + 10), icolor
LINE (iul - 3, ilr + 8)-(iul - 1, ilr + 12), icolor, BF
LINE (iul + 23, ilr + 8)-(iul + 25, ilr + 12), icolor, BF
CASE 2
LINE (iul, ilr)-(iul + 20, ilr + 20), icolor, B
LINE (iul, ilr + 8)-(iul, ilr + 12), 0
LINE (iul + 20, ilr + 8)-(iul + 20, ilr + 12), 0
LINE (iul - 5, ilr + 10)-(iul + 5, ilr + 10), icolor
LINE (iul + 15, ilr + 10)-(iul + 25, ilr + 10), icolor
LINE (iul + 5, ilr + 10)-(iul + 10, ilr + 8), icolor
LINE (iul + 10, ilr + 8)-(iul + 15, ilr + 10), icolor
LINE (iul + 8, ilr)-(iul + 12, ilr + 3), icolor
LINE (iul + 12, ilr + 3)-(iul + 8, ilr + 6), icolor
LINE (iul + 8, ilr + 6)-(iul + 10, ilr + 8), icolor
LINE (iul - 5, ilr + 8)-(iul - 3, ilr + 12), icolor, BF
LINE (iul + 23, ilr + 8)-(iul + 25, ilr + 12), icolor, BF
CASE 3
LINE (iul, ilr)-(iul + 20, ilr + 20), icolor, B
LINE (iul, ilr + 8)-(iul, ilr + 12), 0
LINE (iul + 20, ilr + 8)-(iul + 20, ilr + 12), 0
LINE (iul - 5, ilr + 10)-(iul + 5, ilr + 10), icolor
LINE (iul + 15, ilr + 10)-(iul + 25, ilr + 10), icolor
LINE (iul + 5, ilr + 10)-(iul + 10, ilr + 5), icolor
LINE (iul + 10, ilr + 5)-(iul + 15, ilr + 10), icolor
LINE (iul + 8, ilr)-(iul + 12, ilr + 2), icolor
LINE (iul + 12, ilr + 2)-(iul + 8, ilr + 4), icolor
LINE (iul + 8, ilr + 4)-(iul + 10, ilr + 5), icolor
LINE (iul - 3, ilr + 8)-(iul - 1, ilr + 12), icolor, BF
LINE (iul + 21, ilr + 8)-(iul + 23, ilr + 12), icolor, BF
CASE 4
LINE (iul, ilr)-(iul + 20, ilr + 20), icolor, B
LINE (iul, ilr + 3)-(iul, ilr + 7), 0
LINE (iul, ilr + 13)-(iul, ilr + 17), 0
LINE (iul + 20, ilr + 8)-(iul + 20, ilr + 12), 0
LINE (iul - 5, ilr + 5)-(iul + 5, ilr + 5), icolor
LINE (iul + 5, ilr + 5)-(iul + 5, ilr + 7), icolor
LINE (iul + 5, ilr + 7)-(iul + 18, ilr + 10), icolor
LINE (iul - 5, ilr + 15)-(iul + 5, ilr + 15), icolor
LINE (iul + 5, ilr + 15)-(iul + 5, ilr + 13), icolor
LINE (iul + 5, ilr + 13)-(iul + 18, ilr + 10), icolor
LINE (iul + 18, ilr + 10)-(iul + 25, ilr + 10), icolor
LINE (iul - 5, ilr + 3)-(iul - 3, ilr + 7), icolor, BF
LINE (iul - 5, ilr + 13)-(iul - 3, ilr + 17), icolor, BF
LINE (iul + 21, ilr + 8)-(iul + 23, ilr + 12), icolor, BF
CASE 5
LINE (iul, ilr)-(iul + 20, ilr + 20), icolor, B
LINE (iul, ilr + 3)-(iul, ilr + 7), 0
LINE (iul, ilr + 13)-(iul, ilr + 17), 0
LINE (iul + 20, ilr + 8)-(iul + 20, ilr + 12), 0
LINE (iul - 5, ilr + 5)-(iul + 10, ilr + 5), icolor
LINE (iul + 10, ilr + 5)-(iul + 18, ilr + 10), icolor
LINE (iul - 5, ilr + 15)-(iul + 5, ilr + 15), icolor
LINE (iul + 5, ilr + 15)-(iul + 5, ilr + 13), icolor
LINE (iul + 5, ilr + 13)-(iul + 18, ilr + 10), icolor
LINE (iul + 18, ilr + 10)-(iul + 25, ilr + 10), icolor
LINE (iul - 3, ilr + 3)-(iul - 1, ilr + 7), icolor, BF
LINE (iul - 5, ilr + 13)-(iul - 3, ilr + 17), icolor, BF
LINE (iul + 23, ilr + 8)-(iul + 25, ilr + 12), icolor, BF
CASE 6
LINE (iul, ilr)-(iul + 20, ilr + 20), icolor, B
LINE (iul, ilr + 3)-(iul, ilr + 7), 0
LINE (iul, ilr + 13)-(iul, ilr + 17), 0
LINE (iul + 20, ilr + 8)-(iul + 20, ilr + 12), 0
LINE (iul - 5, ilr + 5)-(iul + 5, ilr + 5), icolor
LINE (iul + 5, ilr + 5)-(iul + 5, ilr + 7), icolor
LINE (iul + 5, ilr + 7)-(iul + 18, ilr + 10), icolor
LINE (iul - 5, ilr + 15)-(iul + 10, ilr + 15), icolor
LINE (iul + 10, ilr + 15)-(iul + 18, ilr + 10), icolor
LINE (iul + 18, ilr + 10)-(iul + 25, ilr + 10), icolor
LINE (iul - 5, ilr + 3)-(iul - 3, ilr + 7), icolor, BF
LINE (iul - 3, ilr + 13)-(iul - 1, ilr + 17), icolor, BF
LINE (iul + 23, ilr + 8)-(iul + 25, ilr + 12), icolor, BF
CASE 7
LINE (iul, ilr)-(iul + 20, ilr + 20), icolor, B
LINE (iul, ilr + 3)-(iul, ilr + 7), 0
LINE (iul, ilr + 13)-(iul, ilr + 17), 0
LINE (iul + 20, ilr + 8)-(iul + 20, ilr + 12), 0
LINE (iul - 5, ilr + 5)-(iul + 10, ilr + 5), icolor
LINE (iul + 10, ilr + 5)-(iul + 18, ilr + 10), icolor
LINE (iul - 5, ilr + 15)-(iul + 10, ilr + 15), icolor
LINE (iul + 10, ilr + 15)-(iul + 18, ilr + 10), icolor
LINE (iul + 18, ilr + 10)-(iul + 25, ilr + 10), icolor
LINE (iul - 3, ilr + 3)-(iul - 1, ilr + 7), icolor, BF
LINE (iul - 3, ilr + 13)-(iul - 1, ilr + 17), icolor, BF
LINE (iul + 23, ilr + 8)-(iul + 25, ilr + 12), icolor, BF
CASE 8
LINE (iul, ilr)-(iul + 20, ilr + 20), icolor, B
LINE (iul, ilr + 3)-(iul, ilr + 7), 0
LINE (iul, ilr + 13)-(iul, ilr + 17), 0
LINE (iul + 20, ilr + 8)-(iul + 20, ilr + 12), 0
LINE (iul - 5, ilr + 5)-(iul + 5, ilr + 5), icolor
LINE (iul - 5, ilr + 15)-(iul + 5, ilr + 15), icolor
LINE (iul + 5, ilr + 5)-(iul + 5, ilr + 15), icolor
LINE (iul + 5, ilr + 10)-(iul + 25, ilr + 10), icolor
LINE (iul - 5, ilr + 3)-(iul - 3, ilr + 7), icolor, BF
LINE (iul - 5, ilr + 13)-(iul - 3, ilr + 17), icolor, BF
LINE (iul + 21, ilr + 8)-(iul + 23, ilr + 12), icolor, BF
CASE 9
LINE (iul, ilr)-(iul + 20, ilr + 20), icolor, B
LINE (iul, ilr + 3)-(iul, ilr + 7), 0
LINE (iul, ilr + 13)-(iul, ilr + 17), 0
LINE (iul + 20, ilr + 8)-(iul + 20, ilr + 12), 0
LINE (iul - 5, ilr + 5)-(iul + 10, ilr + 5), icolor
LINE (iul - 5, ilr + 15)-(iul + 5, ilr + 15), icolor
LINE (iul + 10, ilr + 5)-(iul + 5, ilr + 15), icolor
LINE (iul + 10, ilr + 5)-(iul + 25, ilr + 10), icolor
LINE (iul - 3, ilr + 3)-(iul - 1, ilr + 7), icolor, BF
LINE (iul - 5, ilr + 13)-(iul - 3, ilr + 17), icolor, BF
LINE (iul + 21, ilr + 8)-(iul + 23, ilr + 12), icolor, BF
CASE 10
LINE (iul, ilr)-(iul + 20, ilr + 20), icolor, B
LINE (iul, ilr + 3)-(iul, ilr + 7), 0
LINE (iul, ilr + 13)-(iul, ilr + 17), 0
LINE (iul + 20, ilr + 8)-(iul + 20, ilr + 12), 0
LINE (iul - 5, ilr + 5)-(iul + 5, ilr + 5), icolor
LINE (iul - 5, ilr + 15)-(iul + 10, ilr + 15), icolor
LINE (iul + 5, ilr + 5)-(iul + 10, ilr + 15), icolor
LINE (iul + 10, ilr + 15)-(iul + 25, ilr + 10), icolor
LINE (iul - 5, ilr + 3)-(iul - 3, ilr + 7), icolor, BF
LINE (iul - 3, ilr + 13)-(iul - 1, ilr + 17), icolor, BF
LINE (iul + 21, ilr + 8)-(iul + 23, ilr + 12), icolor, BF
CASE 11
LINE (iul, ilr)-(iul + 20, ilr + 20), icolor, B
LINE (iul, ilr + 3)-(iul, ilr + 7), 0
LINE (iul, ilr + 13)-(iul, ilr + 17), 0
LINE (iul + 20, ilr + 8)-(iul + 20, ilr + 12), 0
LINE (iul - 5, ilr + 5)-(iul + 10, ilr + 5), icolor
LINE (iul - 5, ilr + 15)-(iul + 10, ilr + 15), icolor
LINE (iul + 10, ilr + 5)-(iul + 10, ilr + 15), icolor
LINE (iul + 10, ilr + 10)-(iul + 25, ilr + 10), icolor
LINE (iul - 3, ilr + 3)-(iul - 1, ilr + 7), icolor, BF
LINE (iul - 3, ilr + 13)-(iul - 1, ilr + 17), icolor, BF
LINE (iul + 23, ilr + 8)-(iul + 25, ilr + 12), icolor, BF
END SELECT
END SUB
SUB drawconn (i, j, icolor)
m0 = 40 * i - 4
m1 = m0 + 8
n0 = 25 * j - 13
n1 = n0 + 20
n2 = n0 + 25
n3 = n0 + 30
n4 = n0 + 50
LINE (m0, n0)-(m1, n1), 0
LINE (m0, n0)-(m1, n2), 0
LINE (m0, n2)-(m1, n1), 0
LINE (m0, n2)-(m1, n2), 0
LINE (m0, n2)-(m1, n3), 0
LINE (m0, n4)-(m1, n2), 0
LINE (m0, n4)-(m1, n3), 0
CALL drawonec(i, j, icolor)
IF j > 0 THEN CALL drawonec(i, j - 1, 1)
IF j < 7 THEN CALL drawonec(i, j + 1, 1)
END SUB
SUB drawonec (i, j, icolor)
k = iconn(i, j)
l = ibox(i, j)
m0 = 40 * i - 4
m1 = m0 + 8
n0 = 25 * j - 13
n1 = n0 + 20
n2 = n0 + 25
n3 = n0 + 30
n4 = n0 + 50
IF l < 4 THEN
SELECT CASE k
CASE -1
LINE (m0, n0)-(m1, n2), icolor
CASE 0
LINE (m0, n2)-(m1, n2), icolor
CASE 1
LINE (m0, n4)-(m1, n2), icolor
END SELECT
ELSE
SELECT CASE k
CASE -1
LINE (m0, n2)-(m1, n1), icolor
LINE (m0, n4)-(m1, n3), icolor
CASE 0
LINE (m0, n0)-(m1, n1), icolor
LINE (m0, n4)-(m1, n3), icolor
CASE 1
LINE (m0, n0)-(m1, n1), icolor
LINE (m0, n2)-(m1, n3), icolor
END SELECT
END IF
END SUB
SUB helpand
SCREEN 1
CLS
PRINT " HELP MESSAGE SCREEN FOR "; CHR$(34); "A"; CHR$(34); " COMMAND"
PRINT
PRINT "The ADD BOX command changes the"
PRINT "currently selected box to an AND box;"
PRINT "a box that outputs true only if both"
PRINT "inputs are true. The following four"
PRINT "boxes show an AND with both inputs"
PRINT "false, the top input true, the"
PRINT "bottom input true, and both inputs"
PRINT "true. Press any key to return to"
PRINT "the main help message screen."
idbox = 8
j = 5
i = 0
idvalue = 0
CALL displaybox(i, j, idbox, idvalue)
i = 2
idvalue = 1
CALL displaybox(i, j, idbox, idvalue)
i = 4
idvalue = 2
CALL displaybox(i, j, idbox, idvalue)
i = 6
idvalue = 3
CALL displaybox(i, j, idbox, idvalue)
DO
LOOP WHILE INKEY$ = ""
END SUB
SUB helparrow
SCREEN 1
CLS
PRINT "HELP MESSAGE SCREEN FOR ARROW COMMANDS"
PRINT
PRINT "The arrow commands change the currently"
PRINT "selected box. "; CHR$(24); " moves up one box, "; CHR$(25)
PRINT "moves down, "; CHR$(26); " moves right, and "; CHR$(27)
PRINT "moves left. All motions wrap-around"
PRINT "(the computer is a torus). The"
PRINT "currently selected box is shown in a"
PRINT "different color (or brightness) and"
PRINT "is the box affected by other commands."
PRINT "Press any key to return to the main"
PRINT "help message screen."
DO
LOOP WHILE INKEY$ = ""
END SUB
SUB helpcompute
SCREEN 1
CLS
PRINT " HELP MESSAGE SCREEN FOR "; CHR$(34); "C"; CHR$(34); " COMMAND"
PRINT
PRINT "The COMPUTE command starts from the"
PRINT "currently selected box and recomputes"
PRINT "the boxes in column order. It works"
PRINT "until any key is pressed. The numbers"
PRINT "at the top of each column are the"
PRINT "decimal equivalent of the 8-bit binary"
PRINT "number in the column. Press any key to"
PRINT "return to the main help message screen."
DO
LOOP WHILE INKEY$ = ""
END SUB
SUB helpconn
SCREEN 1
CLS
PRINT " HELP MESSAGE SCREEN FOR "; CHR$(34); "U"; CHR$(34); " AND "; CHR$(34); "D"; CHR$(34)
PRINT " COMMANDS"
PRINT
PRINT "The CONNECTION commands change the"
PRINT "input connections of the currently"
PRINT "selected box. A box can be connected"
PRINT "to the leftward boxes above, even with,"
PRINT "and below itself. UP reverses the"
PRINT "connection with the box above (it makes"
PRINT "the connection if it is not already"
PRINT "made and breaks it if it is already"
PRINT "made). DOWN reverses the connection"
PRINT "with the box below. By using these"
PRINT "two commands, any connection pattern"
PRINT "can be set. Press any key to return to"
PRINT "the main help message screen."
DO
LOOP WHILE INKEY$ = ""
END SUB
SUB helpexit
SCREEN 1
CLS
PRINT " HELP MESSAGE SCREEN FOR "; CHR$(34); "E"; CHR$(34); " COMMAND"
PRINT
PRINT "The EXIT command returns you to DOS."
PRINT "Press any key to return to the main"
PRINT "help message screen."
DO
LOOP WHILE INKEY$ = ""
END SUB
SUB helpfile
SCREEN 1
CLS
PRINT " HELP MESSAGE SCREEN FOR "; CHR$(34); "F"; CHR$(34); " AND "; CHR$(34); "L"; CHR$(34)
PRINT " COMMANDS"
PRINT
PRINT "The FILE command stores the current"
PRINT "configurations (box types, connections"
PRINT "and values) into a file. LOAD reads"
PRINT "a file to set the configuration. If"
PRINT "no extension is given, .ROP is"
PRINT "assumed. Press any key to return to"
PRINT "the main help message screen."
DO
LOOP WHILE INKEY$ = ""
END SUB
SUB helphelp
SCREEN 1
CLS
PRINT " HELP MESSAGE SCREEN FOR "; CHR$(34); "H"; CHR$(34); " COMMAND"
PRINT
PRINT "The HELP command prints the main help"
PRINT "screen. Any command typed when the"
PRINT "help screen is displayed explains"
PRINT "that command rather than executing it."
PRINT "You cannot exit directly from the help"
PRINT "screen, first type <space> to get to"
PRINT "the main program, then type E. Press"
PRINT "any key to return to the main help"
PRINT "message screen."
DO
LOOP WHILE INKEY$ = ""
END SUB
SUB helpinvert
SCREEN 1
CLS
PRINT " HELP MESSAGE SCREEN FOR "; CHR$(34); "I"; CHR$(34); " COMMAND"
PRINT
PRINT "The INVERT BOX command changes the"
PRINT "currently selected box to an INVERT box;"
PRINT "a box that outputs false if the input"
PRINT "is true and true if the input is false."
PRINT "The two boxes below show an INVERT with"
PRINT "input false and an INVERT with input"
PRINT "true. Press any key to return to"
PRINT "the main help message screen."
idbox = 2
j = 5
i = 2
idvalue = 0
CALL displaybox(i, j, idbox, idvalue)
i = 5
idvalue = 1
CALL displaybox(i, j, idbox, idvalue)
DO
LOOP WHILE INKEY$ = ""
END SUB
SUB helpmsg
DIM m(100) AS STRING
newscreen:
SCREEN 0
WIDTH 80
CLS
m(0) = "╔══GREETINGS═════════════════════════════════════════════╗"
m(1) = "║ Welcome to the Apraphul Rope Computer ║"
m(2) = "║ For details see COMPUTER RECREATIONS by A.K. Dewdney ║"
m(3) = "║ Scientific American, April 1988, v. 258 #4, p. 118-121 ║"
m(4) = "║ Program copyright 1988 by Aaron Brown ║"
m(5) = "╚════════════════════════════════════════════════════════╝"
m(6) = " ╔══ESSENTIALS══════╗"
m(7) = " ║ Press space bar ║"
m(8) = " ║ to start program ║"
m(9) = " ║ Type " + CHR$(34) + "H" + CHR$(34) + " to get ║"
m(10) = " ║ back to help ║"
m(11) = " ╚══════════════════╝"
m(12) = "╔══COMMAND SUMMARY═════════════════════════════════════════════════════════════╗"
m(13) = "║ Use cursor (arrow) keys; " + CHR$(24) + ", " + CHR$(25) + ", " + CHR$(26) + ", " + CHR$(27) + "; to move around screen ║"
m(14) = "║ Type a command letter now to get additional help ║"
m(15) = "╟────────────────┬───────────────────────┬─────────────────────────────────────╢"
m(16) = "║ Change box │ Change box inputs │ Start computation ║"
m(17) = "╟────────────────┼───────────────────────┼─────────────────────────────────────╢"
m(18) = "║ A - AND box │ 0 - all inputs false │ S - Step (compute this box only) ║"
m(19) = "║ I - INVERT box │ 1 - top input true │ C - Compute until any key is hit ║"
m(20) = "║ N - NULL box │ 2 - bottom input true │ M - Compute and play music ║"
m(21) = "║ O - OR box │ 3 - both inputs true │ R - Redraw screen (no computation) ║"
m(22) = "╟────────────────┼───────────────────────┼─────────────────────────────────────╢"
m(23) = "║ Miscellaneous │ File Commands │ Input connections ║"
m(24) = "╟────────────────┼───────────────────────┼─────────────────────────────────────╢"
m(25) = "║ H - Help │ F - Save to file │ U - reverse Up connection ║"
m(26) = "║ E - Exit │ L - Load from file │ D - reverse Down connection ║"
m(27) = "╚════════════════╧═══════════════════════╧═════════════════════════════════════╝"
FOR i% = 0 TO 5
PRINT m(i%) + m(i% + 6)
NEXT i%
PRINT
FOR i% = 12 TO 27
PRINT m(i%)
NEXT i%
DO
A$ = INKEY$
LOOP WHILE A$ = ""
A% = ASC(RIGHT$(A$, 1))
SELECT CASE A%
CASE 75, 77, 80
CALL helparrow
CASE 72, 104
IF LEN(A$) < 2 THEN
CALL helphelp
ELSE
CALL helparrow
END IF
CASE 65, 97
CALL helpand
CASE 79, 111
CALL helpor
CASE 73, 105
CALL helpinvert
CASE 78, 110
CALL helpnull
CASE 48 TO 51
CALL helpvalue
CASE 85, 117, 68, 100
CALL helpconn
CASE 82, 114
CALL helpredraw
CASE 67, 99
CALL helpcompute
CASE 77, 109
CALL helpmusic
CASE 83, 115
CALL helpstep
CASE 70, 102, 76, 108
CALL helpfile
CASE 69, 101
CALL helpexit
CASE 32
SCREEN 1
EXIT SUB
CASE ELSE
BEEP
END SELECT
GOTO newscreen
END SUB
SUB helpmusic
SCREEN 1
CLS
PRINT " HELP MESSAGE SCREEN FOR "; CHR$(34); "M"; CHR$(34); " COMMAND "
PRINT
PRINT "The MUSIC command starts from the"
PRINT "currently selected box and recomputes"
PRINT "the boxes in column order. It works"
PRINT "until any key is pressed. Each"
PRINT "computed column plays a note of music"
PRINT "the most significant three bits set"
PRINT "the length of the note: 0 for a whole"
PRINT "note, 1 for a half, 2 for a quarter,"
PRINT "3 for an 8th, 4 for a 16th, 5 for a"
PRINT "32nd, 6 for a 64th, and 7 for skip."
PRINT "The remaining five bits set the pitch;"
PRINT "0 is E natural in the octave below"
PRINT "middle C and each increment represents"
PRINT "one half-step above (black or white"
PRINT "note). Press any key to return to"
PRINT "the main help message screen."
i% = 32
DO
PLAY "N" + STR$(i%)
i% = i% + 1
IF i% > 63 THEN i% = 32
LOOP WHILE INKEY$ = ""
END SUB
SUB helpnull
SCREEN 1
CLS
PRINT " HELP MESSAGE SCREEN FOR "; CHR$(34); "N"; CHR$(34); " COMMAND"
PRINT
PRINT "The NULL BOX command changes the"
PRINT "currently selected box to a NULL box;"
PRINT "a box that outputs true if the input"
PRINT "is true and false if the input is false."
PRINT "The two boxes below show a NULL with"
PRINT "input false and an NULL with input"
PRINT "true. Press any key to return to"
PRINT "the main help message screen."
idbox = 0
j = 5
i = 2
idvalue = 0
CALL displaybox(i, j, idbox, idvalue)
i = 5
idvalue = 1
CALL displaybox(i, j, idbox, idvalue)
DO
LOOP WHILE INKEY$ = ""
END SUB
SUB helpor
SCREEN 1
CLS
PRINT " HELP MESSAGE SCREEN FOR "; CHR$(34); "O"; CHR$(34); " COMMAND"
PRINT
PRINT "The OR BOX command changes the"
PRINT "currently selected box to an OR box;"
PRINT "a box that outputs false only if both"
PRINT "inputs are false. The following four"
PRINT "boxes show an OR with both inputs"
PRINT "false, the top input true, the"
PRINT "bottom input true, and both inputs"
PRINT "true. Press any key to return to"
PRINT "the main help message screen."
idbox = 4
j = 5
i = 0
idvalue = 0
CALL displaybox(i, j, idbox, idvalue)
i = 2
idvalue = 1
CALL displaybox(i, j, idbox, idvalue)
i = 4
idvalue = 2
CALL displaybox(i, j, idbox, idvalue)
i = 6
idvalue = 3
CALL displaybox(i, j, idbox, idvalue)
DO
LOOP WHILE INKEY$ = ""
END SUB
SUB helpredraw
SCREEN 1
CLS
PRINT " HELP MESSAGE SCREEN FOR "; CHR$(34); "R"; CHR$(34); " COMMAND"
PRINT
PRINT "The REDRAW command redraws the"
PRINT "screen without changing anything."
PRINT "It is useful after a COMPUTE has"
PRINT "left numbers on the screen."
PRINT "Press any key to return to"
PRINT "the main help message screen."
DO
LOOP WHILE INKEY$ = ""
END SUB
SUB helpstep
SCREEN 1
CLS
PRINT " HELP MESSAGE SCREEN FOR "; CHR$(34); "S"; CHR$(34); " COMMAND"
PRINT
PRINT "The SINGLE STEP command computes only"
PRINT "the currently selected box, setting"
PRINT "its output to correspond to its"
PRINT "input. Press any key to return to"
PRINT "the main help message screen."
DO
LOOP WHILE INKEY$ = ""
END SUB
SUB helpvalue
SCREEN 1
CLS
PRINT " HELP MESSAGE SCREEN FOR "; CHR$(34); "0"; CHR$(34); ", "; CHR$(34); "1"; CHR$(34); ","
PRINT " "; CHR$(34); "2"; CHR$(34); ", and "; CHR$(34); "3"; CHR$(34); " COMMANDS"
PRINT
PRINT "The SET VALUE commands change the"
PRINT "input values of the currently selected"
PRINT "box. For NULL and INVERT boxes, 0 sets"
PRINT "the input false and 1 sets it true."
PRINT "For AND and OR boxes, 0 sets both"
PRINT "inputs false, 1 sets the top true,"
PRINT "2 sets the bottom true, and 3 sets"
PRINT "both true. The following four"
PRINT "boxes show an AND with both inputs"
PRINT "false (0), the top input true (1), the"
PRINT "bottom input true (2), and both inputs"
PRINT "true (3). Press any key to return to"
PRINT "the main help message screen."
idbox = 8
j = 6
i = 0
idvalue = 0
CALL displaybox(i, j, idbox, idvalue)
i = 2
idvalue = 1
CALL displaybox(i, j, idbox, idvalue)
i = 4
idvalue = 2
CALL displaybox(i, j, idbox, idvalue)
i = 6
idvalue = 3
CALL displaybox(i, j, idbox, idvalue)
DO
LOOP WHILE INKEY$ = ""
END SUB
SUB music (i)
isum = 0
FOR j = 0 TO 2
SELECT CASE (ibox(i, j) + ivalue(i, j))
CASE 1, 2, 5, 6, 7, 11
isum = 2 * isum + 1
CASE 0, 3, 4, 8, 9, 10
isum = 2 * isum
END SELECT
NEXT j
IF isum < 7 THEN
jsum = 1
isum = 2 ^ isum
FOR j = 3 TO 7
SELECT CASE (ibox(i, j) + ivalue(i, j))
CASE 1, 2, 5, 6, 7, 11
jsum = 2 * jsum + 1
CASE 0, 3, 4, 8, 9, 10
jsum = 2 * jsum
END SELECT
NEXT j
PLAY "L" + LTRIM$(STR$(isum)) + "N" + LTRIM$(STR$(jsum))
END IF
END SUB
SUB wsum (i, isum)
isum = 0
FOR j = 0 TO 7
SELECT CASE (ibox(i, j) + ivalue(i, j))
CASE 1, 2, 5, 6, 7, 11
isum = 2 * isum + 1
CASE 0, 3, 4, 8, 9, 10
isum = 2 * isum
END SELECT
NEXT j
END SUB