d ** WOOD.BAS * WRITTEN BY THE CODEWORKS STAFF **e ** CODEWORKS, 3838 SOUTH WARNER ST. TACOMA WA, 984092f ** (206) 475-2219 VOICE (206) 475-2356 MODEMhg ** DO NOT REMOVE THE ABOVE CREDIT LINES PLEASE.h ** Adapted for the Tandy 600 by Dave Thomas **i: I,J,K,N,U: R(2,),S(P,),O(2,)n I P:SP$SP$" ":: I P:DA$DA$"-":5 x I P:BR$BR$">":: I P:O1$O1$"1":R I P:TW$TW$"2":{ ** INPUT AND INSTRUCTION MODULE ** :  ,(: "Press ESC to quit, ENTER to continue ->"; A$$(): A$() : A$( ) : 4 ,: (DA$,, )" The CodeWorks "(DA$,,!);f ,:"W O O D C U T T I N G G U I D E" ,:"also known as BalsaCalc to the Editors" DA$; "(Enter dimensions in INCHES and decimal fractions.)" % "You need to enter Length, (0 will terminate entries),"F " then Width," " then Grain direction of each required piece." " Grain = 1 for parallel to length," " = 2 for parallel to width." ' ""Enter 0 for no Kerf, 1 for 1/16th, 2 for 1/8th inch";:A$$()b , (A$) SK?bP : (A$) SK@P : SKn 6 :~ @LA`:LB0 J I  1 T"PIECE #";I;"LENGTH";: R(I,) ^ R(I,)  h" WIDTH";: R(I,)$ r R(I,) "CAN'T HAVE ZERO WIDTH-TRY AGAIN": TF |" GRAIN";: R(I,)  R(I,) R(I,) "PLEASE ENTER ONLY 1 OR 2": |  (DA$,,!)  R(I,)LA R(I,)LB (R(I,)LB R(I,)) "CAN'T BE DONE - TRY AGAIN": T$ R(I,) TR(I,):R(I,)R(I,):R(I,)T;  :C I]NRI:FL:SQ:LF ** FIND THE TOTAL SQ AREA OF REQ. PIECES ** I NRSQSQR(I,)R(I,) ILF((SQ)(LALB)): ** ESTABLISH EXPECTED SHEETS **/ ** SORT REQ PIECES INTO DESCENDING ORDER ***7FH I NRRLIc FL :& R(I,)R(I,)R(L,)R(L,) b0 D: R(I,)R(L,) bDTR(I,):R(I,)R(L,):R(L,)TNTR(I,):R(I,)R(L,):R(L,)TXFb Il F Cv *** NOW SORT WIDTH WITHIN LENGTH ***KF\ I NRfLI R(I,)R(L,)  R(I,)R(L,) TR(I,):R(I,)R(L,):R(L,)TF I F  FL  (FL)FL >C *** RECIRCULATE THE REQUIRED LIST ROUTINE ***eR(,)R(NR,):R(,)R(NR,)y QNR   LQ: L *R(Q,)R(L,):R(Q,)R(L,) R(L,):R(L,)* Q4 *** THE OBVIOUS IMPOSSIBLE FIT ROUTINE ****> FLNR HFT.R I NR?\ QI NRvf R(I,)R(Q,)LA R(Q,)LBR(I,) FT: p R(I,)R(Q,)LB R(I,)R(Q,)R(Q,)LA R(Q,)LBR(I,) R(Q,)LBR(Q,) FT: z Q I LF LFLFFT< ** COMPARE REQUIRED PIECES TO STOCK PIECES ***DKS I NR[J ** IF THERE IS NO STOCK - PULL IN A NEW SHEET *** JNS S(J,)LA:S(J,)LB:NPNP:NSNS:V:  NPLF FLNR  V FL 8C *** MOVE NEXT 48" PIECE SO IT CUTS FROM A FULL SHEET ***R QI NRi R(Q,)LB $TR(I,):R(I,)R(Q,):R(Q,)TTR(I,):R(I,)R(Q,):R(Q,)T 8$ Q. ** LOOK FOR EXACT FIT IN THE STOCKPILE ***/8 U NS: R(I,)S(U,) R(I,)S(U,) JU: 7B U]L *** LOOK FOR EQUAL LENGTHS ****V U NS: R(I,)S(U,) R(I,) S(U,) JU: ` Uj *** LOOK FOR EQUAL WIDTHS ****t U NS: R(I,)S(U,) R(I,) S(U,) JU:  ~ U2 *** TAKE ANYTHING THAT FITS! ***p U NS: R(I,)S(U,) R(I,) S(U,) JU: x UJJ:  ** STUFF THE CUT BUFFER WITH ALL THE DIMENSIONS ***O(K,)R(I,):O(K,)R(I,):O(K,)S(J,):O(K,)S(J,)(LS(J,):WS(J,):LCR(I,):WCR(I,)X *** CHECK FOR SINGLE CUT SITUATIONS ***** LLC WWC S(J,):S(J,):C: P LLC S(J,)WWCSK:C: P WWC S(J,)LLCSK:C: P ** DETERMINE WHETHER 4 OR 5 CUT AND SIZE OF LEFTOVERS ***= (FL)FL V I Fr  R(I,)R(I,)S(J,) R(I,)R(I,) F R(I,)R(I,)S(J,) R(I,)R(I,) F R(I,)R(I,) R(I,)R(I,) R(I,)R(I,) F0( R(I,)R(I,)S(J,) R(I,)R(I,)S(J,) Fi2 R(I,)R(I,)R(I,) R(I,)R(I,) F<S(J,)LLCSK:S(J,)W:JNS:S(J,)LC:S(J,)WWCSK:NSNS:C: PFS(J,)L:S(J,)WWCSK:JNS:S(J,)LLCSK:S(J,)WC:NSNS:C8PO(K,)C:NONO: ** ADD CUT CODE TO CUT BUFFER ***_Z V  );"--- New Sheet ---"d"CUTTING "O(K,);O(K,);"from";O(K,);O(K,);"cut code";O(K,)nKK:Vx ** ELIMINATE DEADWOOD FROM STOCKPILE **F J NS3 S(J,) S(J,)S(NS,):S(J,)S(NS,):NSNS:F; JK F  ** SORT THE STOCKPILE INTO ASCENDING ORDER **F J NSLJ S(J,)S(J,)S(L,)S(L,) TS(J,):S(J,)S(L,):S(L,)TTS(J,):S(J,)S(L,):S(L,)TF# J3 F ; IE" o,: )"----- R E S U L T S -----":6"AREA REQUIRED =";SQ;":AREA LEFT OVER = ";NP(LALB)SQ;"SQ.IN."@"MINIMUM SHEETS FOR THIS PROJECT BY SQ. AREA = ";((SQ)(LALB))DJ"YOU NEED ";NP;" FULL SHEET(S) WITH A TOTAL AREA =";(LALB)NP^T"Kerf =";SK;"Inches"^"THE CUTTING ORDER FOLLOWS (Grain runs parallel to length)"h :r"Length"; );"Width OUT OF";);"Length";();"Width";2);"CUT CODE"| K NOH O(K,)LA O(K,)LB D$"New sheet->" : D$"" O(K,); );O(K,););D$;);O(K,);();O(K,);2);O(K,) K NPLF FLNR NP:NS:NO:  : :"Attempt--> ";FL;" of ";NRFLFL FL  : o SQNP(LALB) "ATTEMPTS =";FL;":This is an EXCELLENT solution!":  NPLF "ATTEMPTS =";FL;":A POOR solution or IMPOSSIBLE fit or cut"  NPLF "I can't tell which, it's up to you."J  NR LFNP "You might try to combine similar pieces and do better.":   LFNP "ATTEMPTS =";FL;":This is a SATISFACTORY solution."  SQ(LALB)NP FT "Extra sheet is due to an impossible fit or cut."  :%!& "Do you wish to print the cutting diagrams (Y/N)";S!0A$$(): A$"Y" A$"y" D : dY!:~!D *** PRINT CUT LIST ROUTINE ***!N::"ENTER THE NAME OF THIS PROJECT";B$!X "PROJECT ID IS: ";B$!b" " "l"GRAIN ALWAYS RUNS PARALLEL TO THIS DIRECTION ----->>>""v" "Z" SK "KERF OF ";SK;"INCHES IS REMOVED FROM CUTOFF PIECES.""" 1 1 1 INDICATES 1ST CUT, 2 2 2 INDICATES 2ND CUT"" K  NO"" ":" "" "PIECE # ";K"LO(K,):WO(K,):LCO(K,):WCO(K,):CO(K,)5#"STOCK PIECE IS ";L;"INCHES LONG AND ";W;"INCHES WIDE"#"PIECE TO CUT IS ";LC;"INCHES LONG AND ";WC;"INCHES WIDE";" / CUT CODE =";C#" "#LL@:LCLC@#WW@D:WCWC@D# LC LC# LC (@L) LC(@L)$ C ,B , ,,U$  *** CODE 5 CUT -2 CUTS REQUIRED 1ST HORIZ 2ND VERT ***g$ (DA$,,L)v$  M WC$*"!";(BR$,,LC);LC);"2";L);"!"$4 M$> (O1$,,L)$H UWC W$R"!";L);"!"$\ U$f (DA$,,L)$p K%z  B% *** CODE 4 CUT -2 CUTS REQUIRED 1ST VERT 2ND HORIZ ***T% (DA$,,L)c% M WC% "!";(BR$,,LC);LC);"1";L);"!"% M% (TW$,,LC);L);"!"% U WC W% "!";LC);"1";L);"!"% U% (DA$,,L)& p-& *** CODE 1 CUT - NO CUTS REQUIRED ***6&" "a& "***********************************"& "* *"& "* EXACT FIT - NO CUTS REQUIRED *"&$ "* *" '. "***********************************"'8 pJ'B *** CODE 2 CUT - ONE HORIZ CUT REQUIRED ***\'L (DA$,,L)k'V M WC'` "!";(BR$,,L);L);"!"'j M't (O1$,,L)'~ UWC W' "!";L);"!"' U' (DA$,,L)' p( *** CODE 3 CUT - ONE VERT CUT REQUIRED ***-( (DA$,,L)=( M  Wf( "!";(BR$,,LC);LC);"1";L);"!"n( M( (DA$,,L)( p( **** PRINT REQUIRED PIECE LIST AND LEFTOVER STOCK ****( " "( "NUMBER OF FULL SHEETS USED = ";NP') "TOTAL SQ INCHES OF REQUIRED PIECES =";SQ0) " "O)( "LIST OF REQUIRED PIECES"k)2 "LENGTH";);"WIDTH"~)< (DA$,,))F I NR)P R(I,); );"X";);R(I,))Z I)d " ")n "LIST OF LEFTOVER PIECES")x "LENGTH";);"WIDTH" * (DA$,,)* J  NS?* S(J,); );"X";);S(J,)G* Ji* PRINT THE CUT BUFFER ******r* " "* " THE CUTTING ORDER AND CUT CODES ARE:"* " "* K NO+ O(K,); );"X"; );O(K,);)"OUT OF";);O(K,);();"X";*);O(K,);7);"CUT CODE";O(K,)&+ K2+ "DONE"8+