10 REM ************** 20 REM LOGSS 30 REM By Tim Surtell 40 REM ************** 50 REM NC200 Version 1 : 12/7/95 (Condensed) 60 REM Downloaded from Tim's NC Users' Site 70 REM http://www.ncus.org.uk 80 grid=FALSE:fon=TRUE 90 ONERRORVDU26:CLOSE#0:IFERR<>17REPORT:PRINT" at line ";ERL:END ELSECLS:END 100 VDU26:CLS 110 PRINTTAB(33,4)" ";:VDU27,30:PRINT;" ";:VDU27,30:PRINTTAB(33,5)" / \ / \"TAB(33,6)"L / O \ G / S \ S"TAB(33,7)" / \ / \"TAB(33,8)" ";:VDU27,31 120 PRINTTAB(27,10)"Logic Gates Simulation System":flag=TRUE 130 VDU28,77,15,77,0:PRINT"L-O-G-S-S" 140 DIMsqu$(19,18),num(19,18),sx(324),sy(324),dx(324),dy(324) 150 FORX=0TO19:FORY=0TO18:num(X,Y)=-1:NEXT:MOVE0,127:PLOT102,3,124:NEXT 160 FORI=0TO120STEP10:MOVE0,I:DRAW50,I:NEXT 170 MOVE0,0:DRAW0,120:MOVE25,0:DRAW25,120:MOVE50,0:DRAW50,120:MOVE50,108:DRAW50,120 180 PROCANDPIC(2,112):PROCANDPIC(2,102):PROCNPIC(2,102):PROCORPIC(2,92):PROCORPIC(2,82):PROCNPIC(2,82):PROCNOTPIC(2,72):PROCNPIC(2,72) 190 PROCINPIC(2,62,5):PROCOUTPIC(2,52,5):PROCINUPPIC(2,42,5):PROCINDOWNPIC(2,32,5):PROCINLINEPIC(2,22,5):PROCVERTPIC(2,12,5):PROCHORIPIC(2,2,5) 200 PROCULBENDPIC(27,112,5):PROCURBENDPIC(27,102,5):PROCDLBENDPIC(27,92,5):PROCDRBENDPIC(27,82,5) 210 PROCJOINPIC(27,72,5):PROCHORIPIC(27,62,5):PROCVERTPIC(27,62,5) 220 PROCTVLPIC(27,52,5):PROCTVRPIC(27,42,5):PROCTHUPIC(27,32,5):PROCTHDPIC(27,22,5) 230 MX=1:MY=1:MGX=1:MGY=1:TX=1:TY=1:TGX=55:TGY=3 240 MOVE53,1:DRAW53,123:DRAW452,123:DRAW452,1:DRAW53,1 250 MOVEMGX,MGY:PLOT102,MGX+23,MGY+8 260 ONERRORVDU26:CLOSE#0:IFERR<>17REPORT:PRINT" at line ";ERL:END ELSECLS:END 270 MOVETGX,TGY:PLOT6,TGX+21,TGY:PLOT6,TGX+21,TGY+6:PLOT6,TGX,TGY+6:PLOT6,TGX,TGY:PLOT70,TGX,TGY:PLOT70,TGX+21,TGY:PLOT70,TGX+21,TGY+6:PLOT70,TGX,TGY+6 280 IFfon=TRUE fon=FALSE ELSEfon=TRUE 290 G=INKEY(40) 300 IFG>-1ANDfon=TRUE ANDG<244fon=FALSE:MOVETGX,TGY:PLOT6,TGX+21,TGY:PLOT6,TGX+21,TGY+6:PLOT6,TGX,TGY+6:PLOT6,TGX,TGY:PLOT70,TGX,TGY:PLOT70,TGX+21,TGY:PLOT70,TGX+21,TGY+6:PLOT70,TGX,TGY+6 310 IFG>-1CLS:PRINT"L-O-G-S-S" 320 MOVE0,127:PLOT103,3,124 330 IFflag=TRUE ANDG>-1MOVE54,2:PLOT103,451,122:flag=FALSE 340 IFG=71ANDgrid=FALSE grid=TRUE:PROCgrid:GOTO370 350 IFG=71ANDgrid=TRUE grid=FALSE:PROCgrid 360 IFG>243ANDG<248MOVEMGX,MGY:PLOT102,MGX+23,MGY+8 370 IFG=244ANDMY<12MY=MY+1:MGY=MGY+10 380 IFG=245ANDMY>1MY=MY-1:MGY=MGY-10 390 IFG=247ANDMX=1MX=2:MGX=26 400 IFG=246ANDMX=2MX=1:MGX=1 410 IFG>243ANDG<248MOVEMGX,MGY:PLOT102,MGX+23,MGY+8 420 IFG=240ANDTY<17TY=TY+1:TGY=TGY+7 430 IFG=241ANDTY>1TY=TY-1:TGY=TGY-7 440 IFG=242ANDTX>1TX=TX-1:TGX=TGX-22 450 IFG=243ANDTX<18TX=TX+1:TGX=TGX+22 460 IFG=212CLS:PRINT"Clearing...":MOVE54,2:PLOT103,451,122:FORX=1TO18:FORY=1TO17:squ$(X,Y)="":num(X,Y)=-1:NEXT:MOVE0,127:PLOT102,3,124:NEXT:CLS:PRINT"L-O-G-S-S":grid=FALSE 470 IF(G=13ORG=127ORG=33)ANDgrid=TRUE PROCgrid 480 IFG=127ORG=33PROCDEL(TGX,TGY):squ$(TX,TY)="":num(TX,TY)=-1 490 IFG=236G=13 500 IFG=83PROCsave 510 IFG=76PROCload 520 IFG=13PROCDEL(TGX,TGY) 530 IFG=13ANDMX=1ANDMY=12PROCANDPIC(TGX,TGY):squ$(TX,TY)="AND" 540 IFG=13ANDMX=1ANDMY=11PROCANDPIC(TGX,TGY):PROCNPIC(TGX,TGY):squ$(TX,TY)="NAND" 550 IFG=13ANDMX=1ANDMY=10PROCORPIC(TGX,TGY):squ$(TX,TY)="OR" 560 IFG=13ANDMX=1ANDMY=9PROCORPIC(TGX,TGY):PROCNPIC(TGX,TGY):squ$(TX,TY)="NOR" 570 IFG=13ANDMX=1ANDMY=8PROCNOTPIC(TGX,TGY):PROCNPIC(TGX,TGY):squ$(TX,TY)="NOT" 580 IFG=13ANDMX=1ANDMY=7PROCINPIC(TGX,TGY,5):squ$(TX,TY)="IN" 590 IFG=13ANDMX=1ANDMY=6PROCOUTPIC(TGX,TGY,5):squ$(TX,TY)="OUT" 600 IFG=13ANDMX=1ANDMY=5PROCINUPPIC(TGX,TGY,5):squ$(TX,TY)="INUP" 610 IFG=13ANDMX=1ANDMY=4PROCINDOWNPIC(TGX,TGY,5):squ$(TX,TY)="INDOWN" 620 IFG=13ANDMX=1ANDMY=3PROCINLINEPIC(TGX,TGY,5):squ$(TX,TY)="INLINE" 630 IFG=13ANDMX=1ANDMY=2PROCVERTPIC(TGX,TGY,5):squ$(TX,TY)="VERT" 640 IFG=13ANDMX=1ANDMY=1PROCHORIPIC(TGX,TGY,5):squ$(TX,TY)="HORI" 650 IFG=13ANDMX=2ANDMY=12PROCULBENDPIC(TGX,TGY,5):squ$(TX,TY)="ULBEND" 660 IFG=13ANDMX=2ANDMY=11PROCURBENDPIC(TGX,TGY,5):squ$(TX,TY)="URBEND" 670 IFG=13ANDMX=2ANDMY=10PROCDLBENDPIC(TGX,TGY,5):squ$(TX,TY)="DLBEND" 680 IFG=13ANDMX=2ANDMY=9PROCDRBENDPIC(TGX,TGY,5):squ$(TX,TY)="DRBEND" 690 IFG=13ANDMX=2ANDMY=6PROCTVLPIC(TGX,TGY,5):squ$(TX,TY)="TVL" 700 IFG=13ANDMX=2ANDMY=5PROCTVRPIC(TGX,TGY,5):squ$(TX,TY)="TVR" 710 IFG=13ANDMX=2ANDMY=4PROCTHUPIC(TGX,TGY,5):squ$(TX,TY)="THU" 720 IFG=13ANDMX=2ANDMY=3PROCTHDPIC(TGX,TGY,5):squ$(TX,TY)="THD" 730 IFG=13ANDMX=2ANDMY=8PROCJOINPIC(TGX,TGY,5):squ$(TX,TY)="JOIN" 740 IFG=13ANDMX=2ANDMY=7PROCHORIPIC(TGX,TGY,5):PROCVERTPIC(TGX,TGY,5):squ$(TX,TY)="CROSS" 750 IF(G=13ORG=127ORG=33)ANDgrid=TRUE PROCgrid 760 IFG=49ANDsqu$(TX,TY)="IN"num(TX,TY)=1:PROCD1(TGX,TGY) 770 IFG=48ANDsqu$(TX,TY)="IN"num(TX,TY)=0:PROCD0(TGX,TGY) 780 IFG=80PROCprocess 790 GOTO270 800 VDU26:END 810 DEF PROCgrid 820 FORX=54TO452STEP22:MOVEX,2:PLOT102,X+1,122:NEXT 830 FORY=2TO124STEP7:MOVE54,Y:PLOT102,451,Y+1:NEXT 840 ENDPROC 850 DEF PROCANDPIC(X,Y) 860 MOVEX,Y:DRAWX,Y+2:DRAWX+2,Y+2:MOVEX,Y+6:DRAWX,Y+4:DRAWX+2,Y+4:MOVEX+16,Y+3:DRAWX+21,Y+3 870 MOVEX+2,Y:DRAWX+2,Y+6:DRAWX+13,Y+6:DRAWX+16,Y+3:DRAWX+13,Y:DRAWX+2,Y 880 ENDPROC 890 DEF PROCORPIC(X,Y) 900 MOVEX,Y:DRAWX,Y+2:DRAWX+2,Y+2:MOVEX,Y+6:DRAWX,Y+4:DRAWX+2,Y+4:MOVEX+16,Y+3:DRAWX+21,Y+3 910 PLOT69,X+4,Y+3:PLOT69,X+3,Y+1:PLOT69,X+3,Y+2:PLOT69,X+3,Y+4:PLOT69,X+3,Y+5:MOVEX+2,Y:DRAWX+10,Y:DRAWX+11,Y+1:DRAWX+13,Y+1:DRAWX+14,Y+2:DRAWX+15,Y+2:MOVEX+15,Y+4:DRAWX+14,Y+4:DRAWX+13,Y+5:DRAWX+11,Y+5:DRAWX+10,Y+6:DRAWX+2,Y+6 920 ENDPROC 930 DEF PROCNOTPIC(X,Y) 940 MOVEX,Y+3:DRAWX+6,Y+3:MOVEX+16,Y+3:DRAWX+21,Y+3 950 MOVEX+10,Y:DRAWX+7,Y:DRAWX+7,Y+6:DRAWX+10,Y+6:DRAWX+16,Y+3:MOVEX+15,Y+3:DRAWX+10,Y 960 ENDPROC 970 DEF PROCNPIC(X,Y) 980 MOVEX+17,Y+2:PLOT101,X+19,Y+4:PLOT71,X+18,Y+3 990 ENDPROC 1000 DEF PROCINPIC(X,Y,N) 1010 MOVEX+7,Y+3:PLOTN,X+21,Y+3:MOVEX+5,Y+2:PLOT101,X+7,Y+4:PLOT71,X+6,Y+3 1020 ENDPROC 1030 DEF PROCOUTPIC(X,Y,N) 1040 MOVEX,Y+3:PLOTN,X+14,Y+3:MOVEX+14,Y+2:PLOT101,X+16,Y+4:PLOT71,X+15,Y+3 1050 ENDPROC 1060 DEF PROCINUPPIC(X,Y,N) 1070 MOVEX,Y+3:PLOTN,X,Y 1080 ENDPROC 1090 DEF PROCINDOWNPIC(X,Y,N) 1100 MOVEX,Y+3:PLOTN,X,Y+6 1110 ENDPROC 1120 DEF PROCINLINEPIC(X,Y,N) 1130 MOVEX,Y:PLOTN,X,Y+6 1140 ENDPROC 1150 DEF PROCVERTPIC(X,Y,N) 1160 MOVEX+10,Y:PLOTN,X+10,Y+6 1170 ENDPROC 1180 DEF PROCHORIPIC(X,Y,N) 1190 MOVEX,Y+3:PLOTN,X+21,Y+3 1200 ENDPROC 1210 DEF PROCULBENDPIC(X,Y,N) 1220 MOVEX,Y+3:PLOTN,X+10,Y+3:PLOTN,X+10,Y+6 1230 ENDPROC 1240 DEF PROCURBENDPIC(X,Y,N) 1250 MOVEX+21,Y+3:PLOTN,X+10,Y+3:PLOTN,X+10,Y+6 1260 ENDPROC 1270 DEF PROCDLBENDPIC(X,Y,N) 1280 MOVEX,Y+3:PLOTN,X+10,Y+3:PLOTN,X+10,Y 1290 ENDPROC 1300 DEF PROCDRBENDPIC(X,Y,N) 1310 MOVEX+21,Y+3:PLOTN,X+10,Y+3:PLOTN,X+10,Y 1320 ENDPROC 1330 DEF PROCJOINPIC(X,Y,N) 1340 PROCHORIPIC(X,Y,N):PROCVERTPIC(X,Y,N):MOVEX+9,Y+2:PLOT101,X+11,Y+4 1350 ENDPROC 1360 DEF PROCTVLPIC(X,Y,N) 1370 PROCVERTPIC(X,Y,N):MOVEX,Y+3:PLOTN,X+10,Y+3:MOVEX+9,Y+2:PLOT101,X+11,Y+4 1380 ENDPROC 1390 DEF PROCTVRPIC(X,Y,N) 1400 PROCVERTPIC(X,Y,N):MOVEX+10,Y+3:PLOTN,X+21,Y+3:MOVEX+9,Y+2:PLOT101,X+11,Y+4 1410 ENDPROC 1420 DEF PROCTHUPIC(X,Y,N) 1430 PROCHORIPIC(X,Y,N):MOVEX+10,Y+3:PLOTN,X+10,Y+6:MOVEX+9,Y+2:PLOT101,X+11,Y+4 1440 ENDPROC 1450 DEF PROCTHDPIC(X,Y,N) 1460 PROCHORIPIC(X,Y,N):MOVEX+10,Y+3:PLOTN,X+10,Y:MOVEX+9,Y+2:PLOT101,X+11,Y+4 1470 ENDPROC 1480 DEF PROCERRORPOS(X,Y) 1490 TX=X:TY=Y:TGX=X*22+33:TGY=Y*7-4 1500 ENDPROC 1510 DEF PROCDEL(X,Y) 1520 MOVEX,Y:PLOT103,X+21,Y+6 1530 ENDPROC 1540 DEF FNXPOS(X) 1550 =X*22+33 1560 DEF FNYPOS(Y) 1570 =Y*7-4 1580 DEF PROCD0(X,Y) 1590 MOVEX+1,Y+2:PLOT103,X+3,Y+5:MOVEX+1,Y+2:DRAWX+3,Y+2:DRAWX+3,Y+5:DRAWX+1,Y+5:DRAWX+1,Y+2 1600 ENDPROC 1610 DEF PROCD1(X,Y) 1620 MOVEX+1,Y+2:PLOT103,X+3,Y+5:MOVEX+1,Y+2:DRAWX+3,Y+2:MOVEX+2,Y+2:DRAWX+2,Y+5:DRAWX+1,Y+4 1630 ENDPROC 1640 DEF PROCprocess 1650 CLS:PRINT"Processing" 1660 IFgrid=TRUE PROCgrid 1670 FORX=1TO18 1680 FORY=1TO17 1690 IFsqu$(X,Y)<>"IN"num(X,Y)=-1 1700 NEXT 1710 MOVE0,127:PLOT102,3,124 1720 NEXT 1730 store=0 1740 FORX=1TO18 1750 FORY=1TO17 1760 IFsqu$(X,Y)<>""store=store+1:sx(store)=X:sy(store)=Y 1770 NEXT 1780 MOVE0,127:PLOT102,3,124 1790 NEXT 1800 IFstore=0CLS:VDU7:PRINT"Error 1":ENDPROC 1810 F=FALSE:FF=FALSE:FFF=FALSE 1820 FORI=1TOstore 1830 IFsqu$(sx(I),sy(I))="IN"ANDnum(sx(I),sy(I))=-1PROCERRORPOS(sx(I),sy(I)):F=TRUE:I=store 1840 IFsqu$(sx(I),sy(I))="IN"FF=TRUE 1850 IFsqu$(sx(I),sy(I))="OUT"FFF=TRUE 1860 MOVE0,127:PLOT102,3,124 1870 NEXT 1880 IFF=TRUE CLS:VDU7:PRINT"Error 2":ENDPROC 1890 IFFF=FALSE CLS:VDU7:PRINT"Error 3":ENDPROC 1900 IFFFF=FALSE CLS:VDU7:PRINT"Error 4":ENDPROC 1910 E=FALSE 1920 REPEAT 1930 last=store 1940 FORI=1TOstore 1950 IFsqu$(sx(I),sy(I))="AND"PROCAND 1960 IFsqu$(sx(I),sy(I))="NAND"PROCNAND 1970 IFsqu$(sx(I),sy(I))="OR"PROCOR 1980 IFsqu$(sx(I),sy(I))="NOR"PROCNOR 1990 IFsqu$(sx(I),sy(I))="NOT"PROCNOT 2000 IFsqu$(sx(I),sy(I))="INUP"PROCINUP 2010 IFsqu$(sx(I),sy(I))="INDOWN"PROCINDOWN 2020 IFsqu$(sx(I),sy(I))="INLINE"PROCINLINE 2030 IFsqu$(sx(I),sy(I))="IN"PROCIN 2040 IFsqu$(sx(I),sy(I))="OUT"PROCOUT 2050 IFsqu$(sx(I),sy(I))="VERT"PROCVERT 2060 IFsqu$(sx(I),sy(I))="HORI"PROCHORI 2070 IFsqu$(sx(I),sy(I))="JOIN"PROCJOIN 2080 IFsqu$(sx(I),sy(I))="CROSS"PROCCROSS 2090 IFsqu$(sx(I),sy(I))="ULBEND"PROCULBEND 2100 IFsqu$(sx(I),sy(I))="DRBEND"PROCDRBEND 2110 IFsqu$(sx(I),sy(I))="DLBEND"PROCDLBEND 2120 IFsqu$(sx(I),sy(I))="URBEND"PROCURBEND 2130 IFsqu$(sx(I),sy(I))="TVL"PROCTVL 2140 IFsqu$(sx(I),sy(I))="TVR"PROCTVR 2150 IFsqu$(sx(I),sy(I))="THU"PROCTHU 2160 IFsqu$(sx(I),sy(I))="THD"PROCTHD 2170 MOVE0,127:PLOT102,3,124 2180 NEXT 2190 dup=0 2200 FORI=1TOstore 2210 IFsqu$(sx(I),sy(I))<>""ANDnum(sx(I),sy(I))=-1dup=dup+1:dx(dup)=sx(I):dy(dup)=sy(I) 2220 MOVE0,127:PLOT102,3,124 2230 NEXT 2240 store=dup 2250 FORI=1TOdup 2260 sx(I)=dx(I):sy(I)=dy(I) 2270 MOVE0,127:PLOT102,3,124 2280 NEXT 2290 IFstore=last E=TRUE:store=0 2300 UNTILstore=0 2310 IFE=TRUE CLS:VDU7:PRINT"Error 5":ENDPROC 2320 CLS:PRINT"L-O-G-S-S" 2330 ENDPROC 2340 DEF PROCsave 2350 CLS:PRINT"SAVE as number ";:REPEAT:file$=GET$:UNTILVAL(file$)>0 AND VAL(file$)<10:PRINT;file$; 2360 ONERRORCLOSE#0:CLS:VDU7:PRINT"Filing Error":GOTO260 2370 store=0 2380 FORX=1TO18 2390 FORY=1TO17 2400 IFsqu$(X,Y)<>""store=store+1:sx(store)=X:sy(store)=Y 2410 NEXT 2420 MOVE0,127:PLOT102,3,124 2430 NEXT 2440 K=OPENOUT("CIRCUIT"+file$+".LOG") 2450 PRINT#K,store 2460 FORI=1TOstore 2470 PRINT#K,sx(I),sy(I),squ$(sx(I),sy(I)) 2480 MOVE0,127:PLOT102,3,124 2490 NEXT 2500 CLOSE#K 2510 CLS:PRINT"L-O-G-S-S" 2520 ONERRORVDU26:CLOSE#0:IFERR<>17REPORT:PRINT" at line ";ERL:END ELSECLS:END 2530 ENDPROC 2540 DEF PROCload 2550 CLS:PRINT"LOAD in number ";:REPEAT:file$=GET$:UNTILVAL(file$)>0 AND VAL(file$)<10:PRINT;file$; 2560 ONERRORCLOSE#0:CLS:VDU7:PRINT"Filing Error":GOTO260 2570 MOVE54,2:PLOT103,451,122:FORX=1TO18:FORY=1TO17:squ$(X,Y)="":NEXT:MOVE0,127:PLOT102,3,124:NEXT 2580 K=OPENIN("CIRCUIT"+file$+".LOG") 2590 INPUT#K,store 2600 FORI=1TOstore 2610 INPUT#K,X,Y,squ$ 2620 squ$(X,Y)=squ$ 2630 MOVE0,127:PLOT102,3,124 2640 PX=FNXPOS(X):PY=FNYPOS(Y) 2650 PROCDEL(PX,PY) 2660 IFsqu$(X,Y)="AND"PROCANDPIC(PX,PY) 2670 IFsqu$(X,Y)="NAND"PROCANDPIC(PX,PY):PROCNPIC(PX,PY) 2680 IFsqu$(X,Y)="OR"PROCORPIC(PX,PY) 2690 IFsqu$(X,Y)="NOR"PROCORPIC(PX,PY):PROCNPIC(PX,PY) 2700 IFsqu$(X,Y)="NOT"PROCNOTPIC(PX,PY):PROCNPIC(PX,PY) 2710 IFsqu$(X,Y)="IN"PROCINPIC(PX,PY,5) 2720 IFsqu$(X,Y)="OUT"PROCOUTPIC(PX,PY,5) 2730 IFsqu$(X,Y)="INUP"PROCINUPPIC(PX,PY,5) 2740 IFsqu$(X,Y)="INDOWN"PROCINDOWNPIC(PX,PY,5) 2750 IFsqu$(X,Y)="INLINE"PROCINLINEPIC(PX,PY,5) 2760 IFsqu$(X,Y)="VERT"PROCVERTPIC(PX,PY,5) 2770 IFsqu$(X,Y)="HORI"PROCHORIPIC(PX,PY,5) 2780 IFsqu$(X,Y)="ULBEND"PROCULBENDPIC(PX,PY,5) 2790 IFsqu$(X,Y)="URBEND"PROCURBENDPIC(PX,PY,5) 2800 IFsqu$(X,Y)="DLBEND"PROCDLBENDPIC(PX,PY,5) 2810 IFsqu$(X,Y)="DRBEND"PROCDRBENDPIC(PX,PY,5) 2820 IFsqu$(X,Y)="TVL"PROCTVLPIC(PX,PY,5) 2830 IFsqu$(X,Y)="TVR"PROCTVRPIC(PX,PY,5) 2840 IFsqu$(X,Y)="THU"PROCTHUPIC(PX,PY,5) 2850 IFsqu$(X,Y)="THD"PROCTHDPIC(PX,PY,5) 2860 IFsqu$(X,Y)="JOIN"PROCJOINPIC(PX,PY,5) 2870 IFsqu$(X,Y)="CROSS"PROCHORIPIC(PX,PY,5):PROCVERTPIC(PX,PY,5) 2880 NEXT 2890 CLOSE#K 2900 CLS:PRINT"L-O-G-S-S" 2910 IFgrid=TRUE PROCgrid 2920 ONERRORVDU26:CLOSE#0:IFERR<>17REPORT:PRINT" at line ";ERL:END ELSECLS:END 2930 ENDPROC 2940 DEF PROCAND 2950 I1=num(sx(I),sy(I)+1):I2=num(sx(I),sy(I)-1) 2960 IFI1=-1ORI2=-1ENDPROC 2970 IFI1=1ANDI2=1num(sx(I),sy(I))=1ELSEnum(sx(I),sy(I))=0 2980 ENDPROC 2990 DEF PROCNAND 3000 PROCAND 3010 IFI1=-1ORI2=-1ENDPROC 3020 IFnum(sx(I),sy(I))=1num(sx(I),sy(I))=0ELSEnum(sx(I),sy(I))=1 3030 ENDPROC 3040 DEF PROCOR 3050 I1=num(sx(I),sy(I)+1):I2=num(sx(I),sy(I)-1) 3060 IFI1=-1ORI2=-1ENDPROC 3070 IFI1=1ORI2=1num(sx(I),sy(I))=1ELSEnum(sx(I),sy(I))=0 3080 ENDPROC 3090 DEF PROCNOR 3100 PROCOR 3110 IFI1=-1ORI2=-1ENDPROC 3120 IFnum(sx(I),sy(I))=1num(sx(I),sy(I))=0ELSEnum(sx(I),sy(I))=1 3130 ENDPROC 3140 DEF PROCNOT 3150 I1=num(sx(I)-1,sy(I)) 3160 IFI1=-1ENDPROC 3170 IFI1=1num(sx(I),sy(I))=0ELSEnum(sx(I),sy(I))=1 3180 ENDPROC 3190 DEF PROCINUP 3200 IFsqu$(sx(I)-1,sy(I))="CROSS"I1=num(sx(I)-2,sy(I))ELSEI1=num(sx(I)-1,sy(I)) 3210 IFI1=-1ENDPROC 3220 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 3230 num(sx(I),sy(I))=I1 3240 IFnum(sx(I),sy(I))=1PROCINUPPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCINUPPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 3250 ENDPROC 3260 DEF PROCINDOWN 3270 IFsqu$(sx(I)-1,sy(I))="CROSS"I1=num(sx(I)-2,sy(I))ELSEI1=num(sx(I)-1,sy(I)) 3280 IFI1=-1ENDPROC 3290 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 3300 num(sx(I),sy(I))=I1 3310 IFnum(sx(I),sy(I))=1PROCINDOWNPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCINDOWNPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 3320 ENDPROC 3330 DEF PROCINLINE 3340 IFsqu$(sx(I),sy(I)+1)="CROSS"I1=num(sx(I),sy(I)+2)ELSEI1=num(sx(I),sy(I)+1) 3350 IFsqu$(sx(I),sy(I)-1)="CROSS"I2=num(sx(I),sy(I)-2)ELSEI2=num(sx(I),sy(I)-1) 3360 IFI1=-1ANDI2=-1ENDPROC 3370 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 3380 IFI1=-1GOTO3400 3390 num(sx(I),sy(I))=I1:GOTO3410 3400 num(sx(I),sy(I))=I2 3410 IFnum(sx(I),sy(I))=1PROCINLINEPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCINLINEPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 3420 ENDPROC 3430 DEF PROCVERT 3440 IFsqu$(sx(I),sy(I)-1)="CROSS"I1=num(sx(I),sy(I)-2)ELSEI1=num(sx(I),sy(I)-1) 3450 IFsqu$(sx(I),sy(I)+1)="CROSS"I2=num(sx(I),sy(I)+2)ELSEI2=num(sx(I),sy(I)+1) 3460 IFI1=-1ANDI2=-1ENDPROC 3470 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 3480 IFI2=-1GOTO3500 3490 num(sx(I),sy(I))=I2:GOTO3510 3500 num(sx(I),sy(I))=I1 3510 IFnum(sx(I),sy(I))=1PROCVERTPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCVERTPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 3520 ENDPROC 3530 DEF PROCHORI 3540 IFsqu$(sx(I)-1,sy(I))="CROSS"I1=num(sx(I)-2,sy(I))ELSEI1=num(sx(I)-1,sy(I)) 3550 IFsqu$(sx(I)+1,sy(I))="CROSS"I2=num(sx(I)+2,sy(I))ELSEI2=num(sx(I)+1,sy(I)) 3560 IFI1=-1ANDI2=-1ENDPROC 3570 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 3580 IFI2=-1GOTO3600 3590 num(sx(I),sy(I))=I2:GOTO3610 3600 num(sx(I),sy(I))=I1 3610 IFnum(sx(I),sy(I))=1PROCHORIPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCHORIPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 3620 ENDPROC 3630 DEF PROCJOIN 3640 IFsqu$(sx(I)-1,sy(I))="CROSS"I1=num(sx(I)-2,sy(I))ELSEI1=num(sx(I)-1,sy(I)) 3650 IFsqu$(sx(I)+1,sy(I))="CROSS"I2=num(sx(I)+2,sy(I))ELSEI2=num(sx(I)+1,sy(I)) 3660 IFsqu$(sx(I),sy(I)-1)="CROSS"I3=num(sx(I),sy(I)-2)ELSEI3=num(sx(I),sy(I)-1) 3670 IFsqu$(sx(I),sy(I)+1)="CROSS"I4=num(sx(I),sy(I)+2)ELSEI4=num(sx(I),sy(I)+1) 3680 IFI1=-1ANDI2=-1ANDI3=-1ANDI4=-1ENDPROC 3690 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 3700 IFI1=-1GOTO3710ELSEnum(sx(I),sy(I))=I1:GOTO3740 3710 IFI2=-1GOTO3720ELSEnum(sx(I),sy(I))=I2:GOTO3740 3720 IFI3=-1GOTO3730ELSEnum(sx(I),sy(I))=I3:GOTO3740 3730 num(sx(I),sy(I))=I4 3740 IFnum(sx(I),sy(I))=1PROCJOINPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCJOINPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 3750 ENDPROC 3760 DEF PROCCROSS 3770 I1=num(sx(I)-1,sy(I)):I2=num(sx(I)+1,sy(I)):I3=num(sx(I),sy(I)-1):I4=num(sx(I),sy(I)+1) 3780 IF(I1=-1ANDI2=-1)OR(I3=-1ANDI4=-1)ENDPROC 3790 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 3800 IFI2=-1GOTO3820 3810 IFI2=1PROCHORIPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5):GOTO3830ELSEPROCHORIPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21):GOTO3830 3820 IFI1=1PROCHORIPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCHORIPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 3830 IFI4=-1GOTO3850 3840 IFI4=1PROCVERTPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5):GOTO3860ELSEPROCVERTPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21):GOTO3860 3850 IFI3=1PROCVERTPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCVERTPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 3860 num(sx(I),sy(I))=0 3870 ENDPROC 3880 DEF PROCIN 3890 MOVEFNXPOS(sx(I))+5,FNYPOS(sy(I)):PLOT103,FNXPOS(sx(I))+21,FNYPOS(sy(I))+6 3900 IFnum(sx(I),sy(I))=1PROCINPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCINPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 3910 ENDPROC 3920 DEF PROCOUT 3930 IFsqu$(sx(I)-1,sy(I))="CROSS"I1=num(sx(I)-2,sy(I))ELSEI1=num(sx(I)-1,sy(I)) 3940 IFI1=-1ENDPROC 3950 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 3960 num(sx(I),sy(I))=I1 3970 IFnum(sx(I),sy(I))=1PROCOUTPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5):PROCD1(FNXPOS(sx(I))+17,FNYPOS(sy(I)))ELSEPROCOUTPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21):PROCD0(FNXPOS(sx(I))+17,FNYPOS(sy(I))) 3980 ENDPROC 3990 DEF PROCULBEND 4000 IFsqu$(sx(I)-1,sy(I))="CROSS"I1=num(sx(I)-2,sy(I))ELSEI1=num(sx(I)-1,sy(I)) 4010 IFsqu$(sx(I),sy(I)+1)="CROSS"I2=num(sx(I),sy(I)+2)ELSEI2=num(sx(I),sy(I)+1) 4020 IFI1=-1ANDI2=-1ENDPROC 4030 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 4040 IFI2=-1GOTO4060 4050 num(sx(I),sy(I))=I2:GOTO4070 4060 num(sx(I),sy(I))=I1 4070 IFnum(sx(I),sy(I))=1PROCULBENDPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCULBENDPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 4080 ENDPROC 4090 DEF PROCDRBEND 4100 IFsqu$(sx(I)+1,sy(I))="CROSS"I1=num(sx(I)+2,sy(I))ELSEI1=num(sx(I)+1,sy(I)) 4110 IFsqu$(sx(I),sy(I)-1)="CROSS"I2=num(sx(I),sy(I)-2)ELSEI2=num(sx(I),sy(I)-1) 4120 IFI1=-1ANDI2=-1ENDPROC 4130 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 4140 IFI2=-1GOTO4160 4150 num(sx(I),sy(I))=I2:GOTO4170 4160 num(sx(I),sy(I))=I1 4170 IFnum(sx(I),sy(I))=1PROCDRBENDPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCDRBENDPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 4180 ENDPROC 4190 DEF PROCURBEND 4200 IFsqu$(sx(I)+1,sy(I))="CROSS"I1=num(sx(I)+2,sy(I))ELSEI1=num(sx(I)+1,sy(I)) 4210 IFsqu$(sx(I),sy(I)+1)="CROSS"I2=num(sx(I),sy(I)+2)ELSEI2=num(sx(I),sy(I)+1) 4220 IFI1=-1ANDI2=-1ENDPROC 4230 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 4240 IFI2=-1GOTO4260 4250 num(sx(I),sy(I))=I2:GOTO4270 4260 num(sx(I),sy(I))=I1 4270 IFnum(sx(I),sy(I))=1PROCURBENDPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCURBENDPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 4280 ENDPROC 4290 DEF PROCDLBEND 4300 IFsqu$(sx(I)-1,sy(I))="CROSS"I1=num(sx(I)-2,sy(I))ELSEI1=num(sx(I)-1,sy(I)) 4310 IFsqu$(sx(I),sy(I)-1)="CROSS"I2=num(sx(I),sy(I)-2)ELSEI2=num(sx(I),sy(I)-1) 4320 IFI1=-1ANDI2=-1ENDPROC 4330 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 4340 IFI2=-1GOTO4360 4350 num(sx(I),sy(I))=I2:GOTO4370 4360 num(sx(I),sy(I))=I1 4370 IFnum(sx(I),sy(I))=1PROCDLBENDPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCDLBENDPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 4380 ENDPROC 4390 DEF PROCTVL 4400 IFsqu$(sx(I)-1,sy(I))="CROSS"I1=num(sx(I)-2,sy(I))ELSEI1=num(sx(I)-1,sy(I)) 4410 IFsqu$(sx(I),sy(I)+1)="CROSS"I2=num(sx(I),sy(I)+2)ELSEI2=num(sx(I),sy(I)+1) 4420 IFsqu$(sx(I),sy(I)-1)="CROSS"I3=num(sx(I),sy(I)-2)ELSEI3=num(sx(I),sy(I)-1) 4430 IFI1=-1ANDI2=-1ANDI3=-1ENDPROC 4440 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 4450 IFI1=-1ANDI2=-1GOTO4480 4460 IFI1=-1ANDI3=-1GOTO4490 4470 num(sx(I),sy(I))=I1:GOTO4500 4480 num(sx(I),sy(I))=I3:GOTO4500 4490 num(sx(I),sy(I))=12 4500 IFnum(sx(I),sy(I))=1PROCTVLPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCTVLPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 4510 ENDPROC 4520 DEF PROCTVR 4530 IFsqu$(sx(I)+1,sy(I))="CROSS"I1=num(sx(I)+2,sy(I))ELSEI1=num(sx(I)+1,sy(I)) 4540 IFsqu$(sx(I),sy(I)+1)="CROSS"I2=num(sx(I),sy(I)+2)ELSEI2=num(sx(I),sy(I)+1) 4550 IFsqu$(sx(I),sy(I)-1)="CROSS"I3=num(sx(I),sy(I)-2)ELSEI3=num(sx(I),sy(I)-1) 4560 IFI1=-1ANDI2=-1ANDI3=-1ENDPROC 4570 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 4580 IFI1=-1ANDI2=-1GOTO4610 4590 IFI1=-1ANDI3=-1GOTO4620 4600 num(sx(I),sy(I))=I1:GOTO4630 4610 num(sx(I),sy(I))=I3:GOTO4630 4620 num(sx(I),sy(I))=I2 4630 IFnum(sx(I),sy(I))=1PROCTVRPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCTVRPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 4640 ENDPROC 4650 DEF PROCTHU 4660 IFsqu$(sx(I)-1,sy(I))="CROSS"I1=num(sx(I)-2,sy(I))ELSEI1=num(sx(I)-1,sy(I)) 4670 IFsqu$(sx(I)+1,sy(I))="CROSS"I2=num(sx(I)+2,sy(I))ELSEI2=num(sx(I)+1,sy(I)) 4680 IFsqu$(sx(I),sy(I)+1)="CROSS"I3=num(sx(I),sy(I)+2)ELSEI3=num(sx(I),sy(I)+1) 4690 IFI1=-1ANDI2=-1ANDI3=-1ENDPROC 4700 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 4710 IFI1=-1ANDI2=-1GOTO4740 4720 IFI1=-1ANDI3=-1GOTO4750 4730 num(sx(I),sy(I))=I1:GOTO4760 4740 num(sx(I),sy(I))=I3:GOTO4760 4750 num(sx(I),sy(I))=I2 4760 IFnum(sx(I),sy(I))=1PROCTHUPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCTHUPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 4770 ENDPROC 4780 DEF PROCTHD 4790 IFsqu$(sx(I)-1,sy(I))="CROSS"I1=num(sx(I)-2,sy(I))ELSEI1=num(sx(I)-1,sy(I)) 4800 IFsqu$(sx(I)+1,sy(I))="CROSS"I2=num(sx(I)+2,sy(I))ELSEI2=num(sx(I)+1,sy(I)) 4810 IFsqu$(sx(I),sy(I)-1)="CROSS"I3=num(sx(I),sy(I)-2)ELSEI3=num(sx(I),sy(I)-1) 4820 IFI1=-1ANDI2=-1ANDI3=-1ENDPROC 4830 PROCDEL(FNXPOS(sx(I)),FNYPOS(sy(I))) 4840 IFI1=-1ANDI2=-1GOTO4870 4850 IFI1=-1ANDI3=-1GOTO4880 4860 num(sx(I),sy(I))=I1:GOTO4890 4870 num(sx(I),sy(I))=I3:GOTO4890 4880 num(sx(I),sy(I))=I2 4890 IFnum(sx(I),sy(I))=1PROCTHDPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),5)ELSEPROCTHDPIC(FNXPOS(sx(I)),FNYPOS(sy(I)),21) 4900 ENDPROC