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