10 REM ******* 20 REM PCB 30 REM A 40 REM ******* 50 REM Programmed by Tim Surtell 60 REM NC200 Version 3.51 : 2/98 Rev. 5/98 70 REM Downloaded from Tim's NC Users' Site 80 REM http://www.ncus.org.uk 90 CLS:PRINTCHR$14 100 DIMid(200),xpos(200,1),ypos(200,1),or(200),lp(200),v$(200),ed(10) 110 num=0:warn=FALSE:line=2:pad=2:snap=TRUE:align=FALSE:orient=1:diag$="N":ob$="NONE":edit=FALSE:h$="MENU":pins=0:pads=0:f$="":saved=TRUE:X=240:Y=60:TX=0:TY=0:XC=0:YC=0:LB=FALSE:RB=FALSE:CX1=0:CY1=0:CX2=0:CY2=0:AXB=1:AYB=0:AXT=0:AYT=1 120 MOVE0,0:DRAW479,0:DRAW479,118:DRAW0,118:DRAW0,0:MOVE54,0:DRAW54,118 130 FORI=2 TO 82 STEP 16:MOVE2,I:DRAW18,I:NEXT:MOVE2,84:DRAW18,84:MOVE2,116:DRAW18,116:MOVE2,2:DRAW2,82:MOVE18,2:DRAW18,82:MOVE2,84:DRAW2,116:MOVE18,84:DRAW18,116 140 FORI=17 TO 81 STEP 16:MOVE18,I:PLOT21,52,I:MOVE18,I-10:PLOT21,52,I-10:NEXT 150 MOVE6,95:DRAW10,91:DRAW14,95:DRAW12,95:DRAW12,110:DRAW8,110:DRAW8,95:DRAW6,95:MOVE4,89:PLOT101,16,90 160 PROCblob(10,74,2,1):MOVE4,57:PLOT101,16,59:PROCblob(47,76,2,1):MOVE44,59:PLOT101,50,61 170 MOVE5,38:DRAW15,38:MOVE5,42:DRAW15,42:MOVE5,46:DRAW15,46:MOVE6,37:DRAW6,47:MOVE10,37:DRAW10,47:MOVE14,37:DRAW14,47:MOVE4,26:DRAW7,26:MOVE15,25:DRAW15,27:MOVE9,22:DRAW12,30:MOVE4,6:DRAW16,6:MOVE14,4:DRAW14,15 180 VDU15:PRINTTAB(4,6)"P-2"TAB(4,8)"L-2"TAB(4,10)"ON"TAB(4,12)"VERT"TAB(4,14)"OFF":VDU14 190 ONERRORIF ERR=202 GOTO280 ELSE PROCerrortrap:GOTO240 200 *ESCOFF 210 MOVEX,Y-2:PLOT6,X,Y+2:MOVEX-2,Y:PLOT6,X+2,Y 220 K=OPENUP("COM:") 230 PRINTTAB(0,0)SPC80TAB(0,0)"WELCOME to PCB CAD : Press one of A,E,F,G,I,O,P,Q,R,S,T,U or H for help..." 240 REPEAT 250 G$=INKEY$(1) 260 IFG$<>""PROCkey 270 UNTILEOF#K=FALSE 280 B1=BGET#K 290 IFB1 AND64 GOTO300 ELSEGOTO280 300 B2=BGET#K:B3=BGET#K 310 XI=(63ANDB2):YI=(63ANDB3) 320 IFB1 AND8YC=YC+(64-YI)ELSEYC=YC-YI 330 IFB1 AND2XC=XC-(64-XI)ELSEXC=XC+XI 340 IFEOF#K GOTO360 350 GOTO280 360 IFB1 AND32LB=TRUE:PROCbutton ELSEIFLB=TRUE LB=FALSE 370 IFB1 AND16RB=TRUE:PROCbutton ELSEIFRB=TRUE RB=FALSE 380 IFob$="TRACK"ANDTX>0PROCdrawtrack(0) 390 MOVEX,Y-2:PLOT6,X,Y+2:MOVEX-2,Y:PLOT6,X+2,Y:IFalign=TRUE MOVE55,Y:PLOT6,478,Y:MOVEX,1:PLOT6,X,117 400 X=X+(XC):Y=Y+(YC) 410 IFX<55 X=55ELSEIFX>478X=478 420 IFY<1Y=1ELSEIFY>117Y=117 430 MOVEX,Y-2:PLOT6,X,Y+2:MOVEX-2,Y:PLOT6,X+2,Y:IFalign=TRUE MOVE55,Y:PLOT6,478,Y:MOVEX,1:PLOT6,X,117 440 IFob$="TRACK"ANDTX>0PROCdrawtrack(0) 450 XC=0:YC=0 460 GOTO240 470 DEF PROCcursor 480 IFob$="TRACK"ANDTX>0PROCdrawtrack(0) 490 MOVEX,Y-2:PLOT6,X,Y+2:MOVEX-2,Y:PLOT6,X+2,Y:IFalign=TRUE MOVE55,Y:PLOT6,478,Y:MOVEX,1:PLOT6,X,117 500 IFG$=CHR$240ANDY<117Y=Y+1 510 IFG$=CHR$241ANDY>1Y=Y-1 520 IFG$=CHR$242ANDX>55X=X-1 530 IFG$=CHR$243ANDX<478X=X+1 540 MOVEX,Y-2:PLOT6,X,Y+2:MOVEX-2,Y:PLOT6,X+2,Y:IFalign=TRUE MOVE55,Y:PLOT6,478,Y:MOVEX,1:PLOT6,X,117 550 IFob$="TRACK"ANDTX>0PROCdrawtrack(0) 560 ENDPROC 570 DEF PROCkey 580 IFG$=CHR$13RB=TRUE:PROCbutton:RB=FALSE:ENDPROC 590 IFG$=" "LB=TRUE:PROCbutton:LB=FALSE:ENDPROC 600 IF ASC(G$)>239 PROCcursor:ENDPROC 610 IFG$="M"CLOSE#K:K=OPENUP("COM:"):ENDPROC 620 IFG$="S"PROCsize:ENDPROC 630 IFG$="G"PROCgrid:ENDPROC 640 IFG$="A"PROCalign:ENDPROC 650 IFG$="F"PROCfile:ENDPROC 660 IFG$="Q"PROCquit:ENDPROC 670 IFG$="O"PROCorient:ENDPROC 680 IFG$="U"PROCundo:ENDPROC 690 IFG$="R"PROCredraw:ENDPROC 700 IF(G$="D"ORG$=CHR$127)ANDedit=TRUE PROCdelete:ENDPROC 710 IFG$="D"ANDob$="TRACK"AND diag$="N" PROCdrawtrack(0):diag$="Y":PROCdrawtrack(0):ENDPROC 720 IFG$="D"ANDob$="TRACK"AND diag$="Y" PROCdrawtrack(0):diag$="N":PROCdrawtrack(0):ENDPROC 730 IFedit=TRUE edit=FALSE 740 IFob$="IC"PROCdrawic(0) 750 IFob$="PAD"PROCdrawpad(0) 760 IFob$="TRACK"ANDTX>0PROCdrawtrack(0) 770 IFG$="E"ob$="EDIT":PROCedit 780 IFG$="I"ob$="IC":TX=0:TY=0:PROCic:IFob$="NONE"G$=CHR$G:GOTO620 790 IFG$="T"ob$="TRACK":TX=0:TY=0:PROCtrack 800 IFG$="P"ob$="PAD":TX=0:TY=0:PROCpad:IFob$="NONE"G$=CHR$G:GOTO620 810 IFG$="H"PROChelp:ENDPROC 820 ENDPROC 830 DEF PROCblob(x,y,blob,p) 840 IFp=0ANDorient=1MOVEx-1-blob,y-blob:PLOT102,x+1+blob,y+blob:PLOT70,x-1-blob,y-blob:PLOT70,x+1+blob,y-blob:PLOT70,x+1+blob,y+blob:PLOT70,x-1-blob,y+blob:PLOT70,x,y 850 IFp=1ANDorient=1MOVEx-blob,y-blob:PLOT101,x+blob,y+blob:MOVEx-1-blob,y+1-blob:DRAWx-1-blob,y-1+blob:MOVEx+1+blob,y+1-blob:DRAWx+1+blob,y-1+blob:PLOT71,x,y 860 IFp=0ANDorient=2MOVEx-blob,y-1-blob:PLOT102,x+blob,y+1+blob:PLOT70,x-blob,y-1-blob:PLOT70,x+blob,y-1-blob:PLOT70,x+blob,y+1+blob:PLOT70,x-blob,y+1+blob:PLOT70,x,y 870 IFp=1ANDorient=2MOVEx-blob,y-blob:PLOT101,x+blob,y+blob:MOVEx+1-blob,y-1-blob:DRAWx-1+blob,y-1-blob:MOVEx+1-blob,y+1+blob:DRAWx-1+blob,y+1+blob:PLOT71,x,y 880 ENDPROC 890 DEF PROCbutton 900 IFob$="EDIT"ORob$="EDITFOUND"PROCedit 910 IFob$="IC"PROCic 920 IFob$="TRACK"PROCtrack 930 IFob$="PAD"PROCpad 940 ENDPROC 950 DEF PROCalign 960 VDU15:IFalign=FALSE align=TRUE:PRINTTAB(4,14)"ON "ELSEalign=FALSE:PRINTTAB(4,14)"OFF" 970 MOVE55,Y:PLOT6,478,Y:MOVEX,1:PLOT6,X,117 980 VDU14:G$="" 990 ENDPROC 1000 DEF PROCorient 1010 IFob$="IC"PROCdrawic(0) 1020 IFob$="TRACK"ANDTX>0PROCdrawtrack(0) 1030 IFob$="PAD"ANDTX>0PROCdrawpad(0) 1040 VDU15:IForient=1orient=2:PRINTTAB(4,12)"HORI"ELSEorient=1:PRINTTAB(4,12)"VERT" 1050 IFob$="IC"PROCdrawic(0) 1060 IFob$="TRACK"ANDTX>0PROCdrawtrack(0) 1070 IFob$="PAD"ANDTX>0PROCdrawpad(0) 1080 VDU14:G$="" 1090 ENDPROC 1100 DEF PROCgrid 1110 IFob$="TRACK"ANDTX>0PROCdrawtrack(0) 1120 VDU15:IFsnap=TRUE snap=FALSE:PRINTTAB(4,10)"OFF"ELSEsnap=TRUE:PRINTTAB(4,10)"ON " 1130 IFob$="TRACK"ANDTX>0PROCdrawtrack(0) 1140 VDU14:G$="" 1150 ENDPROC 1160 DEF PROCsize 1170 IFob$="PAD"ORob$="COMP"ORob$="IC"PROCpsize:ENDPROC 1180 IFob$="TRACK"PROClsize:ENDPROC 1190 PROCpsize 1200 IFG$="S"PROClsize:GOTO1210ELSEENDPROC 1210 IFG$="S"PROCpsize:GOTO1200ELSEENDPROC 1220 DEF PROCpsize 1230 VDU15:dumpad=pad 1240 PRINTTAB(6,6)"-" 1250 G$=INKEY$(50) 1260 IFVAL(G$)>0ANDVAL(G$)<4pad=VAL(G$):GOTO1310ELSEIFG$="H"h$="PSIZE":PROChelp:VDU15ELSEIFG$<>""GOTO1310 1270 PRINTTAB(6,6);pad 1280 G$=INKEY$(50) 1290 IFVAL(G$)>0ANDVAL(G$)<4pad=VAL(G$):GOTO1310ELSEIFG$="H"h$="PSIZE"PROChelp:VDU15ELSEIFG$<>""GOTO1310 1300 GOTO1240 1310 PRINTTAB(6,6);pad:VDU14:MOVE43,73:PLOT103,51,79:dumo=orient:orient=1:PROCblob(47,76,pad,1):orient=dumo 1320 IFob$="PAD"dumdumpad=pad:pad=dumpad:PROCdrawpad(0):pad=dumdumpad:PROCdrawpad(0) 1330 IFob$="IC"dumdumpad=pad:pad=dumpad:PROCdrawic(0):pad=dumdumpad:PROCdrawic(0) 1340 ENDPROC 1350 DEF PROClsize 1360 VDU15 1370 PRINTTAB(6,8)"-" 1380 G$=INKEY$(50) 1390 IFVAL(G$)>0ANDVAL(G$)<4line=VAL(G$):GOTO1440ELSEIFG$="H"h$="LSIZE":PROChelp:VDU15ELSEIFG$<>""GOTO1440 1400 PRINTTAB(6,8);line 1410 G$=INKEY$(50) 1420 IFVAL(G$)>0ANDVAL(G$)<4line=VAL(G$):GOTO1440ELSEIFG$="H"h$="LSIZE":PROChelp:VDU15ELSEIFG$<>""GOTO1440 1430 GOTO1370 1440 PRINTTAB(6,8);line:VDU14:MOVE44,58:PLOT103,50,62 1450 IFline=1MOVE44,60:PLOT101,50,61ELSEIFline=2MOVE44,59:PLOT101,50,61ELSEMOVE44,58:PLOT101,50,62 1460 ENDPROC 1470 DEF PROCpad 1480 h$="PAD" 1490 IFRB=TRUE GOTO1640 1500 IFTX>0GOTO1600 1510 MOVE20,84:PLOT101,52,116 1520 dumo=orient:orient=1:PROCblob(36,90,2,0):PROCblob(36,108,2,0):orient=dumo 1530 PRINTTAB(0,0)SPC80TAB(0,0)"INSERT PAD : Type in the pad spacing : "; 1540 REPEAT:G=GET:UNTIL(G>47ANDG<58)ORG>64 1550 IFG>64ob$="NONE":MOVE20,84:PLOT101,52,116:PRINTTAB(0,0)SPC80TAB(0,0)"Press one of A,E,F,G,I,O,P,Q,R,S,T,U or H for help...":ENDPROC ELSEPRINT;CHR$G;:pads=VAL(CHR$G):PRINTTAB(5,3);pads 1560 PRINTTAB(0,0)SPC80TAB(0,0)"INSERT PAD : Place pad with SPACE/Left-B, press ENTER/Right-B to confirm..." 1570 TX=60:TY=9 1580 PROCdrawpad(0) 1590 ENDPROC 1600 PROCdrawpad(0) 1610 IFsnap=FALSE TX=X:TY=Y ELSETX=X-(X MOD8)+4:TY=Y-(Y MOD6)+3 1620 PROCdrawpad(0) 1630 ENDPROC 1640 MOVEX,Y-2:PLOT6,X,Y+2:MOVEX-2,Y:PLOT6,X+2,Y:IFalign=TRUE MOVE55,Y:PLOT6,478,Y:MOVEX,1:PLOT6,X,117 1650 PROCdrawpad(1) 1660 MOVEX,Y-2:PLOT6,X,Y+2:MOVEX-2,Y:PLOT6,X+2,Y:IFalign=TRUE MOVE55,Y:PLOT6,478,Y:MOVEX,1:PLOT6,X,117 1670 IFedit=FALSE num=num+1:id(num)=3:xpos(num,0)=TX:ypos(num,0)=TY:v$(num)=STR$(pads):or(num)=orient:lp(num)=pad:saved=FALSE 1680 IFedit=TRUE xpos(ed(edsel),0)=TX:ypos(ed(edsel),0)=TY:v$(ed(edsel))=STR$(pads):or(ed(edsel))=orient:lp(ed(edsel))=pad:ob$="NONE":saved=FALSE 1690 IFedit=TRUE edit=FALSE:PRINTTAB(0,0)SPC80TAB(0,0)"Press one of A,E,F,G,I,O,P,Q,R,S,T,U or H for help...":MOVE20,84:PLOT101,52,116:ENDPROC 1700 GOTO1570 1710 DEF PROCdrawpad(P) 1720 IForient=1PROCblob(TX,TY,pad,P):IFpads>0PROCblob(TX,TY+(6*pads),pad,P) 1730 IForient=2PROCblob(TX,TY,pad,P):IFpads>0PROCblob(TX+(8*pads),TY,pad,P) 1740 ENDPROC 1750 DEF PROCic 1760 h$="IC" 1770 IFRB=TRUE ORG$=CHR$13GOTO1950 1780 IFTX>0GOTO1910 1790 MOVE20,84:PLOT101,52,116 1800 dumo=orient:orient=1:FORI=90TO108STEP6:PROCblob(24,I,2,0):PROCblob(48,I,2,0):NEXT:orient=dumo 1810 PRINTTAB(0,0)SPC80 TAB(0,0)"INSERT DIL IC : Type in the number of pins and press ENTER : "; 1820 REPEAT:G=GET:UNTIL(G>48ANDG<53)ORG=56ORG>64ORG=13 1830 IFG>64ORG=13ob$="NONE":MOVE20,84:PLOT101,52,116:PRINTTAB(0,0)SPC80TAB(0,0)"Press one of A,E,F,G,I,O,P,Q,R,S,T,U or H for help...":ENDPROC ELSEPRINT;CHR$G;:pins=VAL(CHR$G)*10:IF pins=80 pins=4:GOTO1860 1840 REPEAT:G=GET:UNTIL(G>47ANDG<58)ORG=13ORG>64 1850 IFG>64ORG=13ob$="NONE":MOVE20,84:PLOT101,52,116:PRINTTAB(0,0)SPC80TAB(0,0)"Press one of A,E,F,G,I,O,P,Q,R,S,T,U or H for help...":ENDPROC ELSEPRINT;CHR$G:pins=pins+VAL(CHR$G):pins=pins/2 1860 PRINTTAB(5,3);pins*2 1870 PRINTTAB(0,0)SPC80TAB(0,0)"INSERT DIL IC : Place IC with SPACE/Left-B, press ENTER/Right-B to confirm..." 1880 TX=60:TY=9 1890 PROCdrawic(0) 1900 ENDPROC 1910 PROCdrawic(0) 1920 IFsnap=FALSE TX=X:TY=Y ELSETX=X-(X MOD8)+4:TY=Y-(Y MOD6)+3 1930 PROCdrawic(0) 1940 ENDPROC 1950 MOVEX,Y-2:PLOT6,X,Y+2:MOVEX-2,Y:PLOT6,X+2,Y:IF align=TRUE MOVE55,Y:PLOT6,478,Y:MOVEX,1:PLOT6,X,117 1960 PROCdrawic(1) 1970 MOVEX,Y-2:PLOT6,X,Y+2:MOVEX-2,Y:PLOT6,X+2,Y:IF align=TRUE MOVE55,Y:PLOT6,478,Y:MOVEX,1:PLOT6,X,117 1980 IFedit=FALSE num=num+1:id(num)=1:xpos(num,0)=TX:ypos(num,0)=TY:v$(num)=STR$(pins):or(num)=orient:lp(num)=pad:saved=FALSE 1990 IFedit=TRUE xpos(ed(edsel),0)=TX:ypos(ed(edsel),0)=TY:v$(ed(edsel))=STR$(pins):or(ed(edsel))=orient:lp(ed(edsel))=pad:ob$="NONE":saved=FALSE 2000 IFedit=TRUE edit=FALSE:PRINTTAB(0,0)SPC80TAB(0,0)"Press one of A,E,F,G,I,O,P,Q,R,S,T,U or H for help...":MOVE20,84:PLOT101,52,116:ENDPROC 2010 GOTO1880 2020 DEF PROCdrawic(P) 2030 IForient=1FORI=TY TOTY+(6*pins)-6STEP6:PROCblob(TX,I,pad,P):PROCblob(TX+24,I,pad,P):NEXT 2040 IForient=2FORI=TX TOTX+(8*pins)-8STEP8:PROCblob(I,TY,pad,P):PROCblob(I,TY+18,pad,P):NEXT 2050 ENDPROC 2060 DEF PROCtrack 2070 h$="TRACK" 2080 IFLB=TRUE ANDTX=0GOTO2140 2090 IFLB=TRUE GOTO2160 2100 IFRB=TRUE ANDTX>0PROCdrawtrack(0):TX=0:TY=0 2110 IFedit=TRUE ENDPROC 2120 MOVE20,84:PLOT101,52,116:MOVE22,90:PLOT103,50,93:MOVE35,90:PLOT103,36,114 2130 PRINTTAB(0,0)SPC80 TAB(0,0)"INSERT TRACK : Press SPACE/Left-B to mark start...":ENDPROC 2140 IFsnap=FALSE TX=X:TY=Y ELSETX=X-(X MOD8)+4:TY=Y-(Y MOD6)+3 2150 PRINTTAB(0,0)SPC80 TAB(0,0)"INSERT TRACK : Press SPACE/Left-B to mark end, ENTER/Right-B to start as new...":PROCdrawtrack(0):ENDPROC 2160 MOVEX,Y-2:PLOT6,X,Y+2:MOVEX-2,Y:PLOT6,X+2,Y:IF align=TRUE MOVE55,Y:PLOT6,478,Y:MOVEX,1:PLOT6,X,117 2170 IFedit=FALSE PROCdrawtrack(1):num=num+1:id(num)=2:xpos(num,0)=TX:ypos(num,0)=TY:lp(num)=line:or(num)=orient:v$(num)=diag$:saved=FALSE 2180 IFedit=TRUE PROCdrawtrack(1):xpos(ed(edsel),0)=TX:ypos(ed(edsel),0)=TY:lp(ed(edsel))=line:or(ed(edsel))=orient:v$(ed(edsel))=diag$:saved=FALSE 2190 MOVEX,Y-2:PLOT6,X,Y+2:MOVEX-2,Y:PLOT6,X+2,Y:IFalign=TRUE MOVE55,Y:PLOT6,478,Y:MOVEX,1:PLOT6,X,117 2200 IFsnap=FALSE ANDedit=FALSE xpos(num,1)=X:ypos(num,1)=Y 2210 IFsnap=TRUE ANDedit=FALSE xpos(num,1)=X-(X MOD8)+4:ypos(num,1)=Y-(Y MOD6)+3 2220 IFsnap=FALSE ANDedit=TRUE xpos(ed(edsel),1)=X:ypos(ed(edsel),1)=Y 2230 IFsnap=TRUE ANDedit=TRUE xpos(ed(edsel),1)=X-(X MOD8)+4:ypos(ed(edsel),1)=Y-(Y MOD6)+3 2240 IFedit=TRUE edit=FALSE:ob$="NONE":MOVE20,84:PLOT101,52,116:PRINTTAB(0,0)SPC80TAB(0,0)"Press one of A,E,F,G,I,O,P,Q,R,S,T,U or H for help...":ENDPROC 2250 TX=xpos(num,1):TY=ypos(num,1) 2260 ENDPROC 2270 DEF PROCdrawtrack(L) 2280 IFsnap=TRUE TTX=X-(X MOD8)+4:TTY=Y-(Y MOD6)+3 ELSE TTX=X:TTY=Y 2290 IFdiag$="Y" CX1=TTX:CY1=TTY:CX2=TX:CY2=TY:GOTO2380 2300 IFTTY>TY ANDTTX>TX ANDorient=1CX1=TX:CY1=TTY-4:CX2=TX+4:CY2=TTY:AXB=+1:AYB=0:AXT=0:AYT=-1 2310 IFTTY>TY ANDTTX>TX ANDorient=2CX1=TTX-4:CY1=TY:CX2=TTX:CY2=TY+4:AXB=0:AYB=+1:AXT=-1:AYT=0 2320 IFTTY>TY ANDTTXTY ANDTTXTX ANDorient=1CX1=TX:CY1=TTY+4:CX2=TX+4:CY2=TTY:AXB=+1:AYB=0:AXT=0:AYT=+1 2350 IFTTYTX ANDorient=2CX1=TTX-4:CY1=TY:CX2=TTX:CY2=TY-4:AXB=0:AYB=-1:AXT=-1:AYT=0 2360 IFTTY1MOVETX+(AXB*-1),TY+(AYB*-1):DRAWCX1+(AXB*-1),CY1+(AYB*-1):DRAWCX2+(AXT*-1),CY2+(AYT*-1):DRAWTTX+(AXT*-1),TTY+(AYT*-1) 2430 IFline=3MOVETX+(AXB*2),TY+(AYB*2):DRAWCX1+(AXB*2),CY1+(AYB*2):DRAWCX2+(AXT*2),CY2+(AYT*2):DRAWTTX+(AXT*2),TTY+(AYT*2) 2440 IFline=3MOVETX+(AXB*-2),TY+(AYB*-2):DRAWCX1+(AXB*-2),CY1+(AYB*-2):DRAWCX2+(AXT*-2),CY2+(AYT*-2):DRAWTTX+(AXT*-2),TTY+(AYT*-2) 2450 ENDPROC 2460 IFL=0MOVETX,TY:PLOT6,TTX,TTY:ENDPROC 2470 MOVETX,TY:DRAWTTX,TTY 2480 IFTX=TTX MOVETX+1,TY:DRAWTTX+1,TTY ELSEMOVETX,TY-1:DRAWTTX,TTY-1 2490 IFline>1ANDTX=TTX MOVETX-1,TY:DRAWTTX-1,TTY 2500 IFline>1ANDTY=TTY MOVETX,TY+1:DRAWTTX,TTY+1 2510 IFline=3ANDTX=TTX MOVETX-2,TY:DRAWTTX-2,TTY:MOVETX+2,TY:DRAWTTX+2,TTY 2520 IFline=3ANDTY=TTY MOVETX,TY+2:DRAWTTX,TTY+2:MOVETX,TY-2:DRAWTTX,TTY-2 2530 ENDPROC 2540 DEF PROCedit 2550 h$="EDIT" 2560 IFLB=TRUE ANDob$="EDIT"GOTO2620 2570 IFLB=TRUE ANDob$="EDITFOUND"GOTO2710 2580 IFRB=TRUE ANDob$="EDITFOUND"GOTO2780 2590 MOVE20,84:PLOT101,52,116:MOVE35,91:PLOT103,37,103:MOVE32,103:MOVE40,103:PLOT87,36,107 2600 IFnum=0PRINTTAB(0,0)SPC80 TAB(0,0)"There are no objects to edit!":ob$="NONE":h$="MENU":ENDPROC 2610 PRINTTAB(0,0)SPC80 TAB(0,0)"EDIT OBJECT : Press SPACE/Left-B on the object you want to edit...":ENDPROC 2620 ednum=0 2630 PRINTTAB(0,0)SPC80TAB(0,0)"Working..." 2640 FORI=1TOnum 2650 IF(id(I)=2ORid(I)=3)ANDX>xpos(I,1)-4ANDXypos(I,1)-3ANDYxpos(I,0)-4ANDXypos(I,0)-3ANDY1PRINTTAB(0,0)SPC80TAB(0,0)"EDIT OBJECT : ";ednum;" objects found : Press ENTER/Right-B to edit..." 2720 IFedsel=ednum edsel=1 ELSEedsel=edsel+1 2730 IFid(ed(edsel))=1PRINTTAB(63,0)"(";edsel;") IC ";VAL(v$(ed(edsel)))*2;" pins." 2740 IFid(ed(edsel))=2PRINTTAB(63,0)"(";edsel;") Track. " 2750 IFid(ed(edsel))=2dx=X:dy=Y:do=orient:orient=or(ed(edsel)):TX=xpos(ed(edsel),0):TY=ypos(ed(edsel),0):X=xpos(ed(edsel),1):Y=ypos(ed(edsel),1):PROCdrawtrack(0):TIME=0:REPEATUNTILTIME>20:PROCdrawtrack(0):X=dx:Y=dy:orient=do 2760 IFid(ed(edsel))=3PRINTTAB(63,0)"(";edsel;") Pads ";VAL(v$(ed(edsel)));" spc." 2770 ENDPROC 2780 edit=TRUE 2790 IFid(ed(edsel))=1PRINTTAB(0,0)SPC80TAB(0,0)"EDIT DIL IC : Place IC with SPACE/Left-B, press ENTER/Right-B to confirm..." 2800 IFid(ed(edsel))=1ob$="IC":TX=xpos(ed(edsel),0):TY=ypos(ed(edsel),0):orient=or(ed(edsel)):pad=lp(ed(edsel)):pins=VAL(v$(ed(edsel))):RB=FALSE:ENDPROC 2810 IFid(ed(edsel))=2PRINTTAB(0,0)SPC80TAB(0,0)"EDIT TRACK : Press ENTER/Left-B to end track, SPACE/Right-B to start as new..." 2820 IFid(ed(edsel))=2ob$="TRACK":TX=xpos(ed(edsel),0):TY=ypos(ed(edsel),0):orient=or(ed(edsel)):line=lp(ed(edsel)):RB=FALSE:PROCdrawtrack(0):ENDPROC 2830 IFid(ed(edsel))=3PRINTTAB(0,0)SPC80TAB(0,0)"EDIT PAD : Place pad with SPACE/Left-B, press ENTER/Right-B to confirm..." 2840 IFid(ed(edsel))=3ob$="PAD":TX=xpos(ed(edsel),0):TY=ypos(ed(edsel),0):orient=or(ed(edsel)):pad=lp(ed(edsel)):pads=VAL(v$(ed(edsel))):RB=FALSE:ENDPROC 2850 DEF PROCswap 2860 dx=xpos(I,0):dy=ypos(I,0):xpos(I,0)=xpos(I,1):ypos(I,0)=ypos(I,1):xpos(I,1)=dx:ypos(I,1)=dy 2870 IFid(I)=3ENDPROC 2880 IFor(I)=1or(I)=2ELSEor(I)=1 2890 ENDPROC 2900 DEF PROCredraw 2910 MOVE55,1:PLOT103,478,117:dumo=orient:dumpad=pad:dumline=line:DX=X:DY=Y:DTX=TX:DTY=TY:dpins=pins:dpads=pads:dsnap=snap:snap=FALSE 2920 IFnum=0GOTO3010 2930 FORA=1TOnum 2940 IFid(A)=2X=xpos(A,1):Y=ypos(A,1):TX=xpos(A,0):TY=ypos(A,0):line=lp(A):orient=or(A):diag$=v$(A):PROCdrawtrack(1) 2950 NEXT 2960 FORA=1TOnum 2970 IFid(A)=1TX=xpos(A,0):TY=ypos(A,0):pad=lp(A):orient=or(A):pins=VAL(v$(A)):PROCdrawic(1) 2980 IFid(A)=3TX=xpos(A,0):TY=ypos(A,0):pad=lp(A):orient=or(A):pads=VAL(v$(A)):PROCdrawpad(1) 2990 NEXT 3000 orient=dumo:pad=dumpad:line=dumline:X=DX:Y=DY:TX=DTX:TY=DTY:pins=dpins:pads=dpads:snap=dsnap 3010 IFob$<>"IC"ANDob$<>"TRACK"ANDob$<>"PAD"ANDob$<>"NONE"ENDPROC 3020 IFob$="NONE"ORTX=0GOTO3060 3030 IFob$="IC"PROCdrawic(0) 3040 IFob$="TRACK"PROCdrawtrack(0) 3050 IFob$="PAD"PROCdrawpad(0) 3060 MOVEX,Y-2:PLOT6,X,Y+2:MOVEX-2,Y:PLOT6,X+2,Y:IF align=TRUE MOVE55,Y:PLOT6,478,Y:MOVEX,1:PLOT6,X,117 3070 ENDPROC 3080 DEF PROCdelete 3090 PRINTTAB(0,0)SPC80TAB(0,0)"Working..." 3100 FORI=ed(edsel)TOnum 3110 id(I)=id(I+1):xpos(I,0)=xpos(I+1,0):ypos(I,0)=ypos(I+1,0):xpos(I,1)=xpos(I+1,1):ypos(I,1)=ypos(I+1,1):or(I)=or(I+1):lp(I)=lp(I+1):v$(I)=v$(I+1) 3120 NEXT 3130 num=num-1:edit=FALSE:ob$="NONE":PROCredraw:MOVE20,84:PLOT101,52,116:PRINTTAB(0,0)SPC80TAB(0,0)"Press one of A,E,F,G,I,O,P,Q,R,S,T,U or H for help..." 3140 ENDPROC 3150 DEF PROCundo 3160 IFnum=0ENDPROC 3170 IFob$<>"IC"ANDob$<>"TRACK"ANDob$<>"PAD"num=num-1:PROCredraw:ENDPROC 3180 ob$="NONE":PROCredraw:MOVE20,84:PLOT101,52,116:PRINTTAB(0,0)SPC80TAB(0,0)"Press one of A,E,F,G,I,O,P,Q,R,S,T,U or H for help...":ENDPROC 3190 DEF PROCfile 3200 PRINTTAB(0,0)SPC80TAB(0,0)"FILE MENU : Press S to save, L to load, P to print or ENTER to edit PCB...":REPEAT:G$=GET$:UNTILG$="S" OR G$="L" OR G$="P" OR G$=CHR$13 3210 IFG$=CHR$13MOVE20,84:PLOT101,52,116:PRINTTAB(0,0)SPC80TAB(0,0)"Press one of A,E,F,G,I,O,P,Q,R,S,T,U or H for help...":ENDPROC 3220 IFG$="S"PROCsave 3230 IFG$="L"PROCload 3240 IFG$="P"PROCprint 3250 MOVE20,84:PLOT101,52,116:PRINTTAB(0,0)SPC80TAB(0,0)"Press one of A,E,F,G,I,O,P,Q,R,S,T,U or H for help...":ENDPROC 3260 DEF PROCsave 3270 IFnum=0ORsaved=TRUE ENDPROC 3280 IFf$=""GOTO3320 3290 PRINTTAB(0,0)SPC80TAB(0,0)"SAVE PCB : Save as '";f$;".PCB' ? Press Y or N...":REPEAT:G$=GET$:UNTILG$="Y" OR G$="N" OR G$=CHR$13 3300 IFG$=CHR$13ENDPROC 3310 IFG$="Y"GOTO3340 3320 PRINTTAB(0,0)SPC80TAB(0,0)"SAVE PCB : Please type in the filename : ";:INPUTTAB(41,0)ff$:ff$=LEFT$(ff$,8) 3330 IFff$=""ENDPROC ELSEf$=ff$ 3340 PRINTTAB(0,0)SPC80TAB(0,0)"Saving ";f$;".PCB..." 3350 F=OPENOUT(f$+".PCB") 3360 PRINT#F,num 3370 FORA=1TOnum 3380 PRINT#F,id(A),xpos(A,0),ypos(A,0),xpos(A,1),ypos(A,1),or(A),lp(A),v$(A) 3390 NEXT 3400 CLOSE#F:saved=TRUE:ENDPROC 3410 DEF PROCload 3420 IFsaved=TRUE GOTO3460 3430 PRINTTAB(0,0)SPC80TAB(0,0)"LOAD PCB : Do you want to save the current PCB? Press Y or N...":REPEAT:G$=GET$:UNTILG$="Y" OR G$="N" OR G$=CHR$13 3440 IFG$=CHR$13ENDPROC 3450 IFG$="Y"PROCsave 3460 PRINTTAB(0,0)SPC80TAB(0,0)"LOAD PCB : Please type in the filename : ";:INPUTTAB(41,0)ff$:ff$=LEFT$(ff$,8) 3470 IFff$=""ENDPROC ELSEf$=ff$ 3480 PRINTTAB(0,0)SPC80TAB(0,0)"Loading ";f$;".PCB..." 3490 F=OPENIN(f$+".PCB") 3500 INPUT#F,num 3510 FORA=1TOnum 3520 INPUT#F,id(A),xpos(A,0),ypos(A,0),xpos(A,1),ypos(A,1),or(A),lp(A),v$(A) 3530 NEXT 3540 PROCredraw:saved=TRUE:ENDPROC 3550 DEF PROCprint 3560 PRINTTAB(0,0)SPC80TAB(0,0)"PRINT PCB : Press P to print, T to print to file, or F to print from file...":REPEAT:G$=GET$:UNTILG$="P"ORG$="T"ORG$="F"ORG$=CHR$13 3570 IFG$=CHR$13PRINTTAB(0,0)SPC80TAB(0,0)"Press one of A,E,F,G,I,O,P,Q,R,S,T,U or H for help...":ENDPROC 3580 IFG$="P"PROCprintto("LPT:") 3590 IFG$="T"PROCprintto("FILE") 3600 IFG$="F"PROCfiletoprint 3610 FORI=1 TO 3:SOUND1,0,255,1:SOUND1,0,0,8:NEXT:ENDPROC 3620 DEF PROCprintto(f$) 3630 IFnum=0ENDPROC 3640 IFf$="FILE"PRINTTAB(0,0)SPC80TAB(0,0)"PRINT TO FILE : Please type in a filename : ":INPUTTAB(44,0)f$:f$=f$+".PRN" 3650 IFf$=".PRN"ENDPROC 3660 PRINTTAB(0,0)SPC80TAB(0,0)"Determining image size..." 3670 tlim=ypos(1,0):blim=ypos(1,0):llim=xpos(1,0):rlim=xpos(1,0) 3680 FORI=1TOnum 3690 FORA=0TO1 3700 IFA=1GOTO3750 3710 IFid(I)=1ANDor(I)=1 bt=ypos(I,0):tp=ypos(I,0)+6*VAL(v$(I))-6:lt=xpos(I,0):rt=xpos(I,0)+24 3720 IFid(I)=1ANDor(I)=2 bt=ypos(I,0):tp=ypos(I,0)+18:lt=xpos(I,0):rt=xpos(I,0)+8*VAL(v$(I))-8 3730 IFid(I)=3ANDor(I)=1 bt=ypos(I,0):tp=ypos(I,0)+6*VAL(v$(I)):lt=xpos(I,0):rt=xpos(I,0) 3740 IFid(I)=3ANDor(I)=2 bt=ypos(I,0):tp=ypos(I,0):lt=xpos(I,0):rt=xpos(I,0)+8*VAL(v$(I)) 3750 IFid(I)=2 bt=ypos(I,A):tp=ypos(I,A):lt=xpos(I,A):rt=xpos(I,A) 3760 IFbttlim tlim=tp 3780 IFltrlim rlim=rt 3800 NEXT 3810 NEXT 3820 blim=blim-3:tlim=tlim+3:llim=llim-4:rlim=rlim+4 3830 blim=blim-(blim MOD8):tlim=tlim-(tlim MOD8) 3840 IFllim<54llim=54 3850 IFrlim>479rlim=479 3860 IFblim<0blim=0 3870 IFtlim>112tlim=112 3880 PRINTTAB(0,0)SPC80TAB(0,0)"Printing to ";f$ 3890 ob$="NONE":PROCredraw:MOVEX,Y-2:PLOT6,X,Y+2:MOVEX-2,Y:PLOT6,X+2,Y:IFalign=TRUE MOVE55,Y:PLOT6,478,Y:MOVEX,1:PLOT6,X,117 3900 F=OPENOUT(f$) 3910 BPUT#F,27:BPUT#F,65:BPUT#F,8 3920 FORY=tlim TOblim STEP-8 3930 BPUT#F,27:BPUT#F,42:BPUT#F,4:BPUT#F,(rlim-llim)MOD256:BPUT#F,(rlim-llim)DIV256 3940 PRINTTAB(28,0)INT(((tlim-Y)/(tlim-blim))*100);"% Complete..." 3950 FORX=llim TOrlim 3960 FF=1:B=0:FORI=0TO7:B=B+FF*POINT(X,Y+I):FF=FF+FF:NEXT 3970 BPUT#F,B 3980 NEXT 3990 BPUT#F,10 4000 NEXT 4010 BPUT#F,27:BPUT#F,50:BPUT#F,12 4020 CLOSE#F:PROCredraw:ENDPROC 4030 DEF PROCfiletoprint 4040 PRINTTAB(0,0)SPC80TAB(0,0)"PRINT FROM FILE : Please type in a filename : ":INPUTTAB(46,0)f$:f$=f$+".PRN" 4050 IFf$=".PRN"ENDPROC 4060 PRINTTAB(0,0)SPC80TAB(0,0)"Printing ";f$;" to LPT..." 4070 VDU2:F=OPENIN(f$) 4080 REPEAT:B=BGET#F:VDU1,B:UNTILEOF#F 4090 CLOSE#F:VDU3:ENDPROC 4100 DEF PROCquit 4110 PRINTTAB(0,0)SPC80TAB(0,0)"QUIT : Are you sure you want to quit? Press Y or N...":REPEAT:G$=GET$:UNTILG$="Y"ORG$="N"ORG$="Z" 4120 IFG$="N"PRINTTAB(0,0)SPC80TAB(0,0)"Press one of A,E,F,G,I,O,P,Q,R,S,T,U or H for help...":ENDPROC 4130 IFG$="Z"VDU15:CLOSE#0:OSCLI("ESC ON"):END 4140 PROCsave:CLOSE#0:*QUIT 4150 DEF PROChelp 4160 key=-1 4170 H=OPENIN("PCBHELP.HLP") 4180 PRINTTAB(66,15)CHR$14"Please wait..."; 4190 PROCgettag 4200 found=FALSE 4210 REPEAT 4220 PROCgettag 4230 IFkey=-1ANDh$=MID$(tag$,9)found=TRUE 4240 IFkey<>-1ANDCHR$(key)=MID$(tag$,7,1)found=TRUE:h$=MID$(tag$,9) 4250 UNTIL found=TRUE OR tag$="END" OR EOF#H 4260 IFtag$="END"PRINTTAB(0,0)SPC80TAB(0,0)"The requested help topic was not found.":CLOSE#H:PROCredraw:h$="EMESS":ENDPROC 4270 IFEOF#H PRINTTAB(0,0)SPC80TAB(0,0)"There is an error in the help file.":CLOSE#H:PROCredraw:h$="EMESS":ENDPROC 4280 PTR#H=VAL(LEFT$(tag$,5)):ftag$=MID$(tag$,9) 4290 PROCgettag:IF tag$<>ftag$ PRINTTAB(0,0)SPC80TAB(0,0)"The tag found did not correspond to that in the index.":CLOSE#H:PROCredraw:h$="EMESS":ENDPROC 4300 MOVE55,1:PLOT103,478,117 4310 PRINTTAB(66,15)"Please wait..."; 4320 PRINTTAB(10,2);CHR$15;:n=2 4330 REPEAT 4340 B=BGET#H:IFB=60GOTO4370 4350 IFB<>138PRINT;CHR$B; 4360 IFB=10PRINTTAB(10,n);:n=n+1 4370 UNTILB=60 4380 PRINTTAB(24,15)CHR$14"Press ENTER to exit, H for help menu, or other letter...";:key=GET:PRINTTAB(24,15)SPC56; 4390 IFkey=13CLOSE#H:PRINTTAB(24,15)SPC56;:PROCredraw:ENDPROC 4400 CLOSE#H:GOTO4170 4410 DEF PROCgettag 4420 REPEAT:B=BGET#H:UNTILB=60OREOF#H 4430 tag$="":REPEAT:B=BGET#H:tag$=tag$+CHR$B:UNTILB=62OREOF#H 4440 tag$=LEFT$(tag$,LEN(tag$)-1) 4450 ENDPROC 4460 DEF PROCerrortrap 4470 SOUND1,0,255,1:PRINTTAB(0,0)SPC80TAB(0,0)"An error has occured : ";:h$="EMESS" 4480 IFERR=222PRINT;"Can't find the file '";f$;".PCB'. Please try again...":CLOSE#F:ENDPROC 4490 REPORT:PRINT" at line ";ERL;". Save PCB? (Y/N)" 4500 REPEAT:G$=GET$:UNTILG$="Y"ORG$="N" 4510 IFG$="Y"PROCsave 4520 PRINTTAB(0,0)SPC80TAB(0,0)"Program Šaborted...":CLOSE#0:VDU15:OSCLI("ESC ON"):END