`8NNNN p &<NuIMMUNIZED WITH UVK 5.5; NO VIRUS!!puke'(***   @`! #@%')/1 3@5`79;=AC@E`GIKMO/S@U`WY[]_acegkq s@u`wy} O o @ ` @ / ` ׀  O @`!Aa   !Aa!!#A%a')+-/1!3A5a79;=?A!CAEGIOQ!OUaWY[]_a+Ouawy{}!Aa!Aa!Aa!A!Aaǁɡ!Aaׁ١!Aa!Aa " B b  !b!!!!"!!#B"%b"'")"+"-"/#1"#3B#5b#7#9#;#=#?$A"$CB$Eb$G$I$K$M$O%Q"%SB%Ub%W%Y%[%]%_&a"&cB&eb&g&i&k&m&o'q"'sB'ub'w'y'{'}'("(B(b(((()")b)))))*"*B*b*****+"+O+b+++,",B,b,  @`! #@%')/1 3@5`79;=AC@E`GIKMO/S@U`WY[]_acegkq s@u`wy} O o @ ` @ / ` ׀  O @`!Aa   !Aa!!#A%a')+-/1!3A5a79;=?A!CAEGIOQ!OUaWY[]_a+Ouawy{}!Aa!Aa!Aa!A!Aaǁɡ!Aaׁ١!Aa!Aa " B b  !b!!!!"!!#B"%b"'")"+"-"/#1"#3B#5b#7#9#;#=#?$A"$CB$Eb$G$I$K$M$O%Q"%SB%Ub%W%Y%[%]%_&a"&cB&eb&g&i&k&m&o'q"'sB'ub'w'y'{'}'("(B(b(((()")b)))))*"*B*b*****+"+O+b+++,",B,b,CYBCONT |~BASIC TUT}~LLZH201I }~rVIEW ~SCAN4PIC '~NAMEGRAM ~DESKTOP INF +KSCRUB t p. |~.. DEMOS |~OMNIFILE |~hTOMHUDSN |~TUTORIAL }~CYBCTRL ACC E x README DOC f~. |~.. |~FLEXDATADAT &@L_RUBBERPC1 (#OMNI_50 CAP * ROBOHEAD3D2 , /RUBBRNECCTL ;4R_RUBBERPC1 2&>ZZCROSEC3D2 5+ZZSPLINE3D2 7,l12,9 2,2,2,2,0 3 0 0,0,0 1,4,4 100,45,30,20 40,45,55,60  0@Sduvw????1?1?`0018G`@ <>0@!@<ǁx<<>`@ <>0@!@<ǁxp`<c<?@0 |(>|0@#8@<ǁxp`<c<?@0 |(>|0@#8@<?p<<C H$@ $<?p<<C H$@ $8<{/x<v{8G >Ѐ@ 8<{/x<v{8G >Ѐ@ ?{x<{@?%C @??{x<{@?%C @?<s vp`s@ <s vp`s@ 8|>8|>88 8>08><  ?  08` p`<?|  0a` 0`0` `a<x<x~y ` a3  0`0xf c x<~{  a [7 8 0`0` g >x< 0 aa 0 0`0` f <x<x 0 aa 3 `08` ` ?x<>x |0 0 `8p` c ?|x>|x{ p<889 p<8890  T*0,1,2 0,2,3 0,3,4 0,4,5 0,5,6 0,6,7 0,7,8 0,8,9 0,9,10 0,10,11 0,11,12 0,12,13 0,13,14 0,14,15 0,15,16 0,16,17 0,17,18 0,18,19 0,19,20 0,20,21 0,21,22 0,22,23 0,23,24 0,24,25 0,25,26 0,26,27 0,27,28 0,28,29 0,29,30 0,30,31 0,31,32 0,32,33 0,33,34 0,34,35 0,35,36 0,36,37 0,37,38 0,38,39 0,39,40 0,40,41 0,41,42 0,42,43 0,43,44 0,44,45 0,45,46 0,46,47 0,47,48 0,48,49 0,49,50 =A( 0@P`sweyesL1@jFD[jpbo8bLq0L+C*+ &&*h0zmK:z<tCADXtmyFD[ro9p0pOg*O'.'''*1mo:<CeDXmyx                  ; # !$ $#!"%!%$"?%;#&#$'#'&$%($('%?(;&)&'*&*)'(+'+*(?+;),)*-)-,*+.*.-+?.;,/,-0,0/-.1-10.?1;/2/03/320140431?4;252362653473764?7;5856959867:6:97?:;8<89=8=<9:>9>=:?> ;!<=;!;"=>;";?>?;head_cV*HHo+t>e?O@g:WXH??::<>*K)K*;516-52M'>9%0K^0mS_3a77|Uqb4`u@!%+\mtNw !' K$* NR9TqQmttYtyqy.(&k[2}~ |}}  ~             P    $$$$%$}'v'''-%.44/./-%/%,/,%,%%       % %******00*101** 11 212* 42 4  * 4|w}|owv|~w}w~wwwy6666:xwxyyx^^W^WWWQXXXWXQRQRR:6666;SS[ST[Tttu{{ttSTTTTGBGBGL @;@;;AA<<E@@@@?@?@E@AFAABDCCDDEDFJFFHDHL LLHHHIIMDDIJJNJN==>>?C>>=B=>>:>===9=9vUUTVU::599OKKOKKLKPLL LK K  KK 8{ {8 <88<<RRNSNS  " !# "$ #$ '& (&(**)+) +,/.//,00121223334('&$%$% % %( %'(%') +* )* *0243 *##$#! !"!"#"#67;76y7{88;79:>:95;8<<@;=>C>=9@<AAE@BCHCB=DHCDEIEAFFIEGHLHGBIFJJMILKGMJNNRMQRZRNSSZRU\TUV^WX`XQYY`XYZbZYQZS[[bZ[T\\c[\U]]d\]^f^]U^W__f^_`h`_W`Yaah`abjbaYb[ccjbc\ddkcd]eeldefnfe]f_ggnfghphg_haiiphijrjiajckkrjkdllsklemmtlmnvnmengoovnopxpogpiqqxpqrzrqirksszrsltt{stmuvumxwoxqyyz7zyqzs{{7z  P }|'v'%%%%   ***  |vo^VXXXXuTBD? LH?>===uvUUU:59KOKKKPL GKMRcrane_aDz'D64nd)< jQezee'eD6ee4neeede)e< eeejeQeey%C64od(< jQGyGG%GC6GG4oGGGdG(G< G GGjGQGG        ! !   !!!                 &"#%"$$"&*()*'(.+,,-./0221/")##)(),+-,%*/'+.0437536735:9;98;=<??>=CA@@BC4:39:4<=:6=>8@;A?<&#447&"%663"%$556%$&775$*)::;*('889(.->>?.0/@@A020AAC212CCB1/1BB@/)"33:)#(994#,)::=,)+<<:)%,==6%-%66>-/*;;@/'/@@8'0.??A0+0AA<+Ring12_a0fllW/1]]-]-V@>--^^/a1nEfElFlTW^U^eagn=02gv]]0]2VgVeg=`/--/                         ""  # !!$ !"&"!"##&"# $$'#$!%%($%&*&%!&#''*&'$((+'(%)),()*.*)%*'++.*+(,,/+,)--,-..-).+//./,HeadRad4[;p|,le L0mvOb-su4(`&,e`g:V0_(2\;!nhW[4bOm,c1 z{ B$cDSupd                      !! ""!##"  # !% %$!"&!&%"#'"'&# $#$'$%)$)(%&*%*)&'+&+*'$('(+()-(-,)*.).-*+/*/.+(,+,/,-1,10-.2-21./3.32/,0/03013231antennaE!EG;>iid>>N:>bb&                  ; Omni Extruder/Animator Version 1.0 -- MONO/STEREO RUBBERNECK ; by Darrel Anderson ; for Cyber Control ; ; Requires the following files in drive A: THROUGHOUT the recording: ; ZZSPLINE.3D2 ZZCROSEC.3D2 ROBOHEAD.3D2 ; L_RUBBER.PC1 R_RUBBER.PC1 (R_RUBBER.PC1 for STEREO only) ; FLEXDATA.DAT OMNI_50.CAP ; ; Double Sided Disk has room for all files + Stereo recording. ; Single Sided Disk has room for all files + Mono Recording. ; ("Twisting" the disk to increase storage is recommended so ; you can fit the data files in the RUBERNEK folder on your ; same disk as the animation is being recorded onto. ; ; Convert .PC1 files to .PC3 files for HIGH-REZ recording. ; Disk Space requirements for HIGH-REZ unknown. See Cyber-Control ; Documentation for chaining techniques. ; ; Make sure that the RUBERNEK folder from your master Cyber Control ; disk has been moved to a freshly-formatted (preferably double-sided) ; data disk on which the animation will be recorded. All the ; RUBERNEK files must be in that folder (just one level deep compared ; to two folder deep, as it is on the Cyber Control disk) and the ; disk must be in Drive A. If you want to change the drive/path ; for this animation, just do a Find on A:\RUBERNEK\ and change ; it to whatever drive/path you want. ; dim xrotary(50),yrotary(50),zrotary(50),xpnt(20),ypnt(20),zpnt(20) @SELECTMODE input "Enter 0:Mono 1:Stereo",opt0 if opt0 > 1 | opt0 < 0 then goto SELECTMODE ;_____________________________________________________SPECFIC_TREE_INFO___ ;------------------------------------------------------------------------- dim csrot(100),trot(40),px(50),py(50),pz(50) @NECKSPLINE defpt 1,0,0,0 defpt 1,15,5,-20 defpt 1,35,30,-40 defpt 1,-15,-10,0 defpt 1,0,0,0 defspline 1,50,S for l=0 to 49 px(l)=s1x(l):py(l)=s1y(l):pz(l)=s1z(l) next l ;____________________________________________________________SETUP_TREE___ load3d "A:\RUBERNEK\ROBOHEAD.3D2" status totv,usedv,totf,usedf,objx others=objx merge3d "A:\RUBERNEK\ZZSPLINE.3D2" status totv,usedv,totf,usedf,objs exkeyz=objs-others treeclr treeadd spline0,spline1,spline2,spline3 treeadd eyes,head,crane,Ring12_a,HeadRad,antenna relate spline1,spline0,spline0 relate spline2,spline1,spline1 relate spline3,spline2,spline2 relate head,spline3,spline3 relate eyes,head,head relate crane,head,head relate Ring12_a,head,head relate HeadRad,head,head relate antenna,head,head ;__________________________________MULTI_OBJECT_CREATION/RECORDING_LOOP___ if opt0 = 1 then stereo for frame=0 to 49 zoom 30:perspec 800 cam2 2500,-2500,200,0,0,-650,0:backgnd yes,yes load3d "A:\RUBERNEK\ROBOHEAD.3D2" merge3d "A:\RUBERNEK\ZZSPLINE.3D2" status totv,usedv,totf,usedf,objz position spline1, px(i),py(i),pz(i):gosub ROTARRAY position spline2, px(i),py(i),pz(i):gosub ROTARRAY position spline3, px(i),py(i),pz(i):gosub ROTARRAY treeset spline0:goto REINIT @ROTARRAY trot(ex)=px(i):trot(ex+1)=py(i):trot(ex+2)=pz(i):ex=ex+3 return @REINIT i=i+1 ex=0:faceix=0:vertix=0:treeobj=1:treeani=1:scalsent=0 @NEWSTART if frame=0 then loadbak L,"A:\RUBERNEK\L_RUBBER.PC1",Y if frame=0 & opt0=1 then loadbak R,"A:\RUBERNEK\R_RUBBER.PC1",Y ;_______________________________________________END_OF_SPECFIC_SECTION____ if opt0=0 & frame=0 then view s:rstart "A:\RUBERNEC.DLT",m if opt0=1 & frame=0 then view s:rstart "A:\SRNECK.DLT",s ;__________________________________________________CROSS_SECTION_MERGE____ @MERGEIT group c:clrgrp merge3d "A:\RUBERNEK\ZZCROSEC.3D2" if scalsent then return status totv,usedv,totf,usedf,objs if treeani=1 then seckeyz=objs-objz:goto READDATA ;____________________________________________________________READ_DATA____ @READDATA fopen "A:\RUBERNEK\FLEXDATA.DAT" ftrap ENDODATA fread segments,csplinez,cst,est,xst,yst,rst fread rotopt,mrotopt,xmrotz,ymrotz,zmrotz,scaling,xscalz,yscalz if rotopt=1 & mrotopt=0 then fread xrot,yrot,zrot if mrotopt=1 then gosub DATMROT if scaling=1 then gosub DATSCALE @ENDODATA:fclose halfseg=(segments+1)/2 if treeobj then treeseg=segments/(exkeyz-1):gosub TREEARRAY goto STARTIT @DATMROT if xmrotz=0 then goto YROTDAT for loop=0 to xmrotz-1 fread dat:defpt 5,dat,0,0:next loop gosub DROTSPLINE for fil=0 to segments xrotary(fil)=s5x(fil):next fil @YROTDAT if ymrotz=0 then goto ZROTDAT for loop=0 to ymrotz-1 fread dat:defpt 5,0,dat,0:next loop for fil=0 to segments gosub DROTSPLINE yrotary(fil)=s5y(fil):next fil @ZROTDAT if zmrotz=0 then return for loop=0 to zmrotz-1 fread dat:defpt 5,0,0,dat:next loop gosub DROTSPLINE for fil=0 to segments zrotary(fil)=s5z(fil):next fil return @DROTSPLINE if rst=0 then defspline 5,segments+1,B if rst=1 then defspline 5,segments+1,L if rst=2 then defspline 5,segments+1,S return @DATSCALE if xscalz=0 then goto YSCALDAT for xloop=0 to xscalz-1 fread xdat:defpt 1,xdat,0,0:next xloop if xst=0 then defspline 1,segments+1,B if xst=1 then defspline 1,segments+1,L if xst=2 then defspline 1,segments+1,S @YSCALDAT if yscalz=0 then return for yloop=0 to yscalz-1 fread ydat:defpt 2,0,ydat,0:next yloop if yst=0 then defspline 2,segments+1,B if yst=1 then defspline 2,segments+1,L if yst=2 then defspline 2,segments+1,S return ;________________________________________________________________START____ @STARTIT xrot=xrot/segments:yrot=yrot/segments:zrot=zrot/segments center universe:color=14 gosub XTRUDSPLINE ;_____________________________________________________________MAIN_LOOP___ @FLY for seg=0 to segments if rotopt=0 then gosub AUTOROT:bell:next seg:goto ADDFACES ;if scaling=1 | rotopt=1 then gosub SCALEIT if rotopt=3 then gosub SCALEIT if scaling=0 & rotopt=2 then gosub CSECSPLINE for vx=0 to csplinez-1 if crosstype=1 then goto NOCSPLINE addvertex vertix,s3x(vx)+s4x(seg),s3y(vx)+s4y(seg),s3z(vx)+s4z(seg) vertix=vertix+1 next vx:bell:next seg goto ADDFACES @NOCSPLINE addvertex vertix,xpnt(vx)+s4x(seg),ypnt(vx)+s4y(seg),zpnt(vx)+s4z(seg) vertix=vertix+1 next vx:bell:next seg goto ADDFACES ;________________________________________________________AUTO_ROTATION____ @AUTOROT group c D=1:DD=0 if seg+1>halfseg then D=0:DD=1 vecx=s4x(seg+D)-s4x(seg-DD) vecy=s4y(seg+D)-s4y(seg-DD) vecz=s4z(seg+D)-s4z(seg-DD) @AROT2 magv=sqr(vecx*vecx + vecy*vecy + vecz*vecz) magp=sqr(vecx*vecx + vecy*vecy) sth=vecy/magp:cth=vecx/magp:cph=vecz/magv:sph=magp/magv if sph>.70 then goto AROT3 if magp<200 & vecz>0 then gosub AROTSPECIAL:goto AROT4 if magp<200 & vecz<0 then sph=0:cph=-1:if seg>0 then sth=oldsth:cth=oldcth ;if oldvecy*vecy<0 & sph<.50 then gosub AROTSPECIAL:goto AROT3 flag=0 @AROT3 ;if sph<.49 & flag= 1 then gosub AROTSPECIAL @AROT4 oldvecy=vecy if scaling then gosub SCALEIT:goto AROT5 gosub CSECSPLINE @AROT5 for cspix=0 to csplinez-1 pxf=s3x(cspix)*sth+s3y(cspix)*cph*cth+s4x(seg) pyf=(s3y(cspix)*cph*sth)-(s3x(cspix)*cth)+s4y(seg) pzf=(-1*s3y(cspix))*sph+s4z(seg) addvertex vertix,pxf,pyf,pzf:vertix=vertix+1 next cspix oldsth=sth:oldcth=cth return @AROTSPECIAL sth=1:cth=0:if seg>0 then sth=oldsth:cth=oldcth flag=1 return ;______________________________________________________________SCALING____ @SCALEIT group a:clrgrp kill mark0,mark1,mark2:if seckeyz>3 then kill mark3 if seckeyz>4 then kill mark4:if seckeyz>5 then kill mark5 if seckeyz>6 then kill mark6:if seckeyz>7 then kill mark7 if seckeyz>8 then kill mark8:if seckeyz>9 then kill mark9 if seckeyz>10 then kill mark10:if seckeyz>11 then kill mark11 if seckeyz>12 then kill mark12:if seckeyz>13 then kill mark13 if seckeyz>14 then kill mark14:if seckeyz>15 then kill mark15 if seckeyz>16 then kill mark16:if seckeyz>17 then kill mark17 if seckeyz>18 then kill mark18:if seckeyz>19 then kill mark19 scalsent=1 gosub MERGEIT if scaling=0 then goto SCALEIT2 scalx=s1x(seg):scaly=s2y(seg) @RESCALE if scalx<50 then axisscale 50,100,100:scalx=scalx*2 if scaly<50 then axisscale 100,50,100:scaly=scaly*2 if scalx<50 | scaly<50 then goto RESCALE axisscale scalx,scaly,100 @SCALEIT2 if rotopt then gosub MANUALROT if mrotopt then gosub SPLINEROT if rotopt=3 then gosub TREEROT gosub CSECSPLINE return ;_____________________________________________________ROTATION_OPTIONS____ @TREEROT e=0:group c if seg=0 then return for loop=1 to seg rotate csrot(e),0,0 rotate 0,csrot(e+1),0 rotate 0,0,csrot(e+2) e=e+3:next loop:return @MANUALROT xrotx=xrot*seg:yrotx=yrot*seg:zrotx=zrot*seg group c rotate xrotx,0,0 rotate 0,yrotx,0 rotate 0,0,zrotx return @SPLINEROT group c: rotate xrotary(seg),0,0 rotate 0,yrotary(seg),0 rotate 0,0,zrotary(seg) return ;____________________________________________________SPLINE_DEFINITION____ @XTRUDSPLINE group b for points=0 to exkeyz-1 gosub XTRUDPOINTS defpt 4,spx,spy,spz next points if est=0 then defspline 4,segments+1,B if est=1 then defspline 4,segments+1,L if est=2 then defspline 4,segments+1,S return @CSECSPLINE group b for cpoint=0 to seckeyz-1 gosub SECTIONPOINTS if crosstype=1 then gosub CSEC:next cpoint:return defpt 3,scx,scy,scz next cpoint if cst=0 then defspline 3,csplinez,B if cst=1 then defspline 3,csplinez,L if cst=2 then defspline 3,csplinez,S return @CSEC xpnt(cpoint)=scx:ypnt(cpoint)=scy:zpnt(cpoint)=scz return @SECTIONPOINTS group b:clrgrp if cpoint=0 then select mark0:grpcent scx,scy,scz:return if cpoint=1 then select mark1:grpcent scx,scy,scz:return if cpoint=2 then select mark2:grpcent scx,scy,scz:return if cpoint=3 then select mark3:grpcent scx,scy,scz:return if cpoint=4 then select mark4:grpcent scx,scy,scz:return if cpoint=5 then select mark5:grpcent scx,scy,scz:return if cpoint=6 then select mark6:grpcent scx,scy,scz:return if cpoint=7 then select mark7:grpcent scx,scy,scz:return if cpoint=8 then select mark8:grpcent scx,scy,scz:return if cpoint=9 then select mark9:grpcent scx,scy,scz:return if cpoint=10 then select mark10:grpcent scx,scy,scz:return if cpoint=11 then select mark11:grpcent scx,scy,scz:return if cpoint=12 then select mark12:grpcent scx,scy,scz:return if cpoint=13 then select mark13:grpcent scx,scy,scz:return if cpoint=14 then select mark14:grpcent scx,scy,scz:return if cpoint=15 then select mark15:grpcent scx,scy,scz:return if cpoint=16 then select mark16:grpcent scx,scy,scz:return if cpoint=17 then select mark17:grpcent scx,scy,scz:return if cpoint=18 then select mark18:grpcent scx,scy,scz:return if cpoint=19 then select mark19:grpcent scx,scy,scz:return @XTRUDPOINTS group b:clrgrp if points=0 then select spline0:grpcent spx,spy,spz:return if points=1 then select spline1:grpcent spx,spy,spz:return if points=2 then select spline2:grpcent spx,spy,spz:return if points=3 then select spline3:grpcent spx,spy,spz:return if points=4 then select spline4:grpcent spx,spy,spz:return if points=5 then select spline5:grpcent spx,spy,spz:return if points=6 then select spline6:grpcent spx,spy,spz:return if points=7 then select spline7:grpcent spx,spy,spz:return if points=8 then select spline8:grpcent spx,spy,spz:return if points=9 then select spline9:grpcent spx,spy,spz:return if points=10 then select spline10:grpcent spx,spy,spz:return if points=11 then select spline11:grpcent spx,spy,spz:return if points=12 then select spline12:grpcent spx,spy,spz:return if points=13 then select spline13:grpcent spx,spy,spz:return if points=14 then select spline14:grpcent spx,spy,spz:return if points=15 then select spline15:grpcent spx,spy,spz:return if points=16 then select spline16:grpcent spx,spy,spz:return if points=17 then select spline17:grpcent spx,spy,spz:return if points=18 then select spline18:grpcent spx,spy,spz:return if points=19 then select spline19:grpcent spx,spy,spz:return ;_________________________________________________________________________ @TREEARRAY afil=0:oinc=0 for oloop=1 to exkeyz-1 for loop=1 to treeseg csrot(afil)=trot(oinc)/treeseg csrot(afil+1)=trot(oinc+1)/treeseg csrot(afil+2)=trot(oinc+2)/treeseg afil=afil+3 next loop:oinc=oinc+3:next oloop ;? "Tree-Rotation array defined",frame return ;________________________________________________________________BUILD____ @ADDFACES si=csplinez:faceix=0:vertix=0 for faceloop= 1 to segments for loop=0 to csplinez-2 addface faceix+0,vertix,vertix+si,vertix+si+1,1,1,0,color addface faceix+1,vertix,vertix+si+1,vertix+1,0,1,1,color faceix=faceix+2:vertix=vertix+1 next loop addface faceix+0,vertix,vertix+si,vertix+1,1,1,0,color addface faceix+1,vertix,vertix+1,vertix-si+1,0,1,1,color faceix=faceix+2:vertix=vertix+1 next faceloop ;________________________________________________________________FINISH___ @CAPBASES bell fopen "A:\RUBERNEK\OMNI_50.CAP" ftrap EOFILE @CAPLOOP caps=0 for capz=1 to csplinez-2 fread cf1,cf2,cf3 addface faceix+caps,cf1,cf2,cf3,1,1,1,color addface faceix+caps+1,vertix+cf1,vertix+cf3,vertix+cf2,1,1,1,color caps=caps+2 next capz:FCLOSE:goto UPLOADIT @EOFILE fclose ;_____________________________________________________UPLOAD\RECORD____ @UPLOADIT faces=faceix+caps:verts=vertix+csplinez group d upload Omni,verts,faces:select Omni zoom 30:perspec 800 cam2 2500,-2500,200,0,0,-650,0 view s deselect spline0,spline1,spline2,spline3 bell:superview:anti:record next frame  0@Sduvw????19?À?19?À? `0``01s< `0``01s<=??3B!@!$=??3B!@!$7`7`s=x`B@ F<s=x`B@ F<=x p8x p|  T*=2< 0@P`swmark0__c8mark1PPmark2~P2P2mark3__\c=2< 0@P`swspline0spline1Ispline2spline3+. |~-.. |~LAMP 3D2 t .0LAMP CTL :W =  2 0@P`$5FWw shade_w * *i ( ' &~ (d )T +h i { n CZ |d I @ R i 7 ^ d [(   g>i r k e *d  r Xi H kd  v l i:i  n  Md  : ( i 5>=67?6?>7?x8@89A8A@9:B9BA:;C:CB;<D;DC<=E<ED=>F=FE>?G>GF?Gx@H@AI@IHABJAJIBCKBKJCDLCLKDEMDMLEFNENMFGOFONGOxHPHIQHQPIJRIRQJKSJSRKLTKTSLMULUTMNVMVUNOWNWVOWxPXPQYPYXQRZQZYRS[R[ZST\S\[TU]T]\UV^U^]VW_V_^W_xX`XYaXa`YZbYbaZ[cZcb[\d[dc\]e\ed]^f]fe^_g^gf_gx`h`ai`ihabjajibckbkjcdlclkdemdmlefnenmfgofongoxhphiqhqpijrirqjksjsrkltktslmulutmnvmvunownwvowxpypqzpzyqr{q{zrs|r|{st}s}|tu~t~}uvu~vwvwxyyzyz{z{|{|}|}~}~~botarm_nnnn                toparm_nn n n                     base__AI\IKP.Qx\.\O\$?. \>f.>\}.'\Rem.GE\!K.\.4F\FJA.@\.:F\kU.\W)z .W\.h\C*'.LQ\oJ.Gvy\ .bp<<      <        <     <<<< !! ""!##"< $ !% %$!"&!&%"#'"'&<$($%)$)(%&*%*)&'+&+*<(,()-(-,)*.).-*+/*/.<,0,-1,10-.2-21./3.32<04015054126165237276<4845949856:5:967;6;:<8=89>8>=9:?9?>:;@:@?<==>=>?>?@?elbowerH{H{11FPFP11GG                  shoulderHxHx//FNFN//GG                  pivoterH H F FF eF e F F G G                  GRIDerDxDD{DD}DDDDDDD D DDx{}  FxFF{FF}FFFFFFF F FFx{}  HxHH{HH}HHHHHHH H HHx{}  KxKK{KK}KKKKKKK K KKx{}  KxKK{KK}KKKKKKK K KKx{}  NxNN{NN}NNNNNNN N NN x  {  }           Px P P{ P P} P P P P P P P  P  P Px{}  SxSS{SS}SSSSSSS S SS-..-<=-=.<KL<L=KZ[K[LZijZj[ixyiyjxxy  .// .=>.>/=LM=M>L[\L\M[jk[k\jyzjzkyyz !! /0 0!/>?/?0>MN>N?M\]M]N\kl\l]kz{k{lzz{!""!01!1"0?@0@1?NO?O@N]^N^O]lm]m^l{|l|m{{|"##"12"2#1@A1A2@OP@PAO^_O_P^mn^n_m|}m}n||}#$$#23#3$2AB2B3APQAQBP_`P`Q_no_o`n}~n~o}}~$%%$34$4%3BC3C4BQRBRCQ`aQaR`op`pao~op~~%&&%45%5&4CD4D5CRSCSDRabRbSapqaqbppq &''&56&6'5DE5E6DSTDTESbcScTbqrbrcqqr   '(('67'7(6EF6F7ETUEUFTcdTdUcrscsdrrs   ())(78(8)7FG7G8FUVFVGUdeUeVdstdtesst   )**)89)9*8GH8H9GVWGWHVefVfWetueufttu   *++*9:*:+9HI9I:HWXHXIWfgWgXfuvfvguuv  +,,+:;+;,:IJ:J;IXYIYJXghXhYgvwgwhvvwconeU0Nq KB"}_-ah&5Z&                                            cube___ y` y` y y` `               ; Tree-structure demo: Luxo Jr. (Jr.) ; (With apologies to Pixar) ; by Tom Hudson ; Lamp and geometric objects created with CAD-3D ; Floor created with FUNCTION.CTL (15 grids, Z=0) ; ; This animation control file demonstrates hierarchical object definition ; and also shows how to slave a light source to a 3D model! input "Watch (0) or Record (1)?",option ; Load LAMP.3D2, set up tree structure & lamp movement splines load3d "a:\lamp\lamp.3d2" gosub DEFINELAMP gosub DEFSPLINES ; Set up camera zoom 79:perspec 999:cam1 39,19,0:mono:draft ; Start watching or recording, depending upon option selected if option then rstart "a:\lamp",m:view solid:goto RUNIT watch on:view wire ; Run the sequence! ; ; NOTE: "frame" runs from 0-98 because we have set up a 100-point spline, ; which runs from 0-99, and the 99th spline position is the same as the ; 0th spline position. To avoid a duplicate frame at the end of the ; animation, we stop at 98. @RUNIT for frame=0 to 98 load3d "a:\lamp\lamp.3d2" ; Position the lamp! position botarm,s1x(frame),0,s1z(frame) position toparm,s2x(frame),0,0 position shade,s3x(frame),0,s3z(frame) treeset base ; Locate lampshade & bulb centerpoint, move light source B to that point! clrgrp:select shade:grpcent cx,cy,cz direct b,6,cx/100,cy/100,cz/100:lton b ; Generate superview and record if necessary allgrp:superview if option then record next frame ; Animation is complete, stop watching/recording if option then rstop:end watch off:end ;**************************** Subroutines ****************************** ; Define the lamp! Set up objects in lamp, set up their operational ; limits, and define their relationships to each other. ; ; NOTE: The "elbow", "shoulder" and "pivot" objects are used as both ; pivot points and tree objects. This is perfectly OK -- they function ; fine as pivot points, and since they are used as tree objects, they are ; shown after TREESET. This allows us to avoid unnecessary pivot objects! ; All three pivot objects are related to the object which pivots around ; them, with themselves referenced as their own pivot points. Since none ; of these pivot objects are ever POSITIONed, this relationship is fine. ; If they were POSITIONed, they would simply rotate about their own ; center points. @DEFINELAMP treeclr treeadd base,shoulder,botarm,elbow,toparm,pivot,shade limit botarm,0,90,0,0,-180,180 limit toparm,-140,0,0,0,0,0 limit shade,-45,45,0,0,-90,90 relate botarm,base,shoulder relate shoulder,botarm,shoulder relate toparm,botarm,elbow relate elbow,toparm,elbow relate pivot,toparm,pivot relate shade,toparm,pivot return ; This subroutine defines the splines that are used to move ; all of the joints in the object. ; ; The first and last position in each spline is the same, allowing our ; animation to loop back to the starting point. @DEFSPLINES ; Bottom arm spline defpt 1,45,0,-30 defpt 1,30,0,-70 defpt 1,20,0,-100 defpt 1,40,0,-60 defpt 1,40,0,-20 defpt 1,60,0,0 defpt 1,45,0,-30 defspline 1,100,S ; Top arm spline defpt 2,-40,0,0 defpt 2,-50,0,0 defpt 2,-90,0,0 defpt 2,-120,0,0 defpt 2,-80,0,0 defpt 2,-40,0,0 defspline 2,100,S ; Lamp shade spline defpt 3,0,0,0 defpt 3,-30,0,0 defpt 3,-10,0,0 defpt 3,20,0,-30 defpt 3,10,0,30 defpt 3,0,0,0 defspline 3,100,S return . |~>.. |~DESERT CTL a? DESBAK PC1 :B59MTN12 BL1 @QMTN34 BL1 CXH%RDLIN BL1 FbHSIGN BL1 Id8; Desert Scene Demo of 2-1/2D Cell Animation by David Snyder ; Uses standalone capabilities of CYBER CONTROL. (ie, CAD-3D 2.0 does ; not need to be present to create this animation.) ; *** IMPORTANT NOTE ABOUT MOVING THE FOLDER FROM THE MASTER DISK: *** ; This is set up to run out of a folder on drive A called DESERT. ; (just one level deep, instead of two levels as it is on the ; master disk. ; Change all path/filename references accordingly if you don't ; have the files set up that way. ; NOTE: When this animation is displayed with ANIMATE2.PRG, turn ; buffering ON. mono loadbak L,"a:\desert\desbak.pc1",y input " Watch (0) or Record (1) ? ",option if option then rstart "a:\desert",m:goto Skipwatch watch on @Skipwatch scrollx = 0:mtns1x = 50:mtns2x = 10:chained = 0:frame = 0 ; Change the step value in the for/next line to a 2 to create an 810K file. ; Change it to an 8 to create a 230K file (for single-sided drives). ; (however, with a step value of 8, the 230K file is so rough that ; it's hard to get a clear idea of what the 2-1/2D effect is doing. ; If you have two single sided drives, or one double-sided drive, ; you'll have no problem using the default value of 4. If you have ; one double and one single-sided drive (or 2 doubles), go ahead and ; change it to 8 now, but make sure you have a formatted disk in drive B. ; Using the current value (4), will produce a roughly 450K file. ; All files could be on drive A with a step value of 4 if you're using ; a double-sided disk. for I = 1 to 160 step 4:; Set to 420K now. Backset L getimage "a:\desert\rdlin.bl1",w,h overlay L,scrollx,160:overlay L,scrollx+320,160:overlay L,scrollx+640,160 overlay L,scrollx+960,160 scrollx = -6 * I getimage "a:\desert\mtn12.bl1",w1,h1 overlay L,mtns1x,45:overlay L,mtns1x+320,45 mtns1x = 50 + ( -2 * I ) getimage "a:\desert\mtn34.bl1",w2,h2 overlay L,mtns2x,48:overlay L,mtns2x+320,48:overlay L,mtns2x+640,48 mtns2x = 10 + ( -4 * I ) getimage "a:\desert\sign.bl1",w3,h3 overlay L,160+scrollx,90:overlay L,480+scrollx,90:overlay L,800+scrollx,90 overlay L,1120+scrollx,90 if option then record frame = frame + 1 if FREEDISK<10000 & option then gosub dochain next I if option then rstop:end watch off:end ; The next line sets up auto-chaining to drive B if you've got a two- ; drive system -- a blank formatted disk must be in drive B. @dochain:chained = 1:? "chained":rchain "b:desert2":return w3Dp3wU"3DUw@`cDX[N`<O<~`9505~?p$ $Y--m>|@ ?@ 66>?~ / n?~??.vߘ O_? '` ݀n?|?a |<@nw[ >w_<>?f{ g{? Ϙ] o߷?83/}???ϟ ??[_ϷgO _? ?7?Ois[7_?sw?iܸi;"{w3?o >??w?~p ]~_w?w]_?~/%?x??<=>)q_}?_x??9y%hs.u{ﷀ^s:w W{  s>~s{ s nǼk&OߺOw|? Ͻk ~?t{]σwJ/ {ϛz?  ?"{EG^~ſ_~  >m?>)om 9o ??~ c~a֟8%ɿyk =Ͽ x'߼{vo{{[~{ۧ{ ǻ{c}y?Ok{s?'?'=o?oKo =?o{o' ~QOO>Q>Ϗ _;?} ? _;o?;#ٟοNwo{ٟNwo{~?O?s<~Os<??{o{o{ {o{o{\9M\9M ^|~ ^|~? } }|ww?w߿߿?wU_w_U_w_U_w_kﺿʫkﺿʫU}UW_WUU} UW__U}UW_WU k   k U}wu]_Uu 1EEUQEUW]QU}u]_U5UEu]UWUU}wu]_Uu sEEUQEUW]Q꯺ʮ.~*.꯺ʮ~*WוUWUwWUWGuEQ]EIUWuQA_U^UW]WUwWuU]MUWuU}]U_WוUWUwWUWGuEQ]UyUWuQA_U^Ujk:ꪫ ₮+ ⪚ꦮꪫ櫺jk:ꪫ ⊮+ ⪚]!W}UU_YUuU$GUE=]GDLUU]w}UU_]Wu]UuW]}] eMU_U]!W}UU_YUuU$OUE=]GDLUU/;(. >몎+*꺮ꮪ +j/;(/ >몎+*WQ_}tVVu]QMUUuU]U]EUE~U_Ww }v]WWu] MUUE_u]U]WEUWW_Q_}tVVu]Q_wuU]U]EUE~UK㫯.# 8*Kﯿߪ/+ 8㫯 8*'Ug_UwR5_]eE\YEqYuW@Uu@E$Uw__UwrUu_]m]Eu]uWZUuU'Uo_UwR5_]eE\YUsuW@Uu@E.«**#-.ﮪ?˺.«**g-.eWuQ]@URUYGUUQUoUeWu_SUVU]YWu5U UUg wuU]@URUE]GUTUQUoU ;*(6꾪J꛺j.꾪j ;*(>꾪J꛺j{TQTQU_sQU]WUQT]UPtQuUw_W]_U{UQTQU_sQU]W}MQU]uXuQwUw_W]5_{TUTQU _sQU]wUQT]UtUQuUw_W]_U*벚b.*/,>*؂ *>/梪.>ʮ>*벚r.*o,>*؂PUbQRTmuq\UEU_WQYWUEWUQaSP]kQWTuq]uUQՍ5W}]WUMWWUUaSQUfQRTmuq\UEU_WQYWUTeWUQaS*"ʺiھ;" *調*2ʺk۾;:*請*"ꏮʺi ;c *調QoUU{Q[םWU Օ]@D]U_UuUuWu}yQUU{QۏםWU]Ad]U_UuUuWuQՕUQ[םWUՕ_@D]U_UuUuWu}yk.+>* (*** .>.* o/+>. h*N*k/UW|&Wp}5UT}U]%TWGQuum UW|'Wv}5U\}U_W _QuUu}]]UW}Wp}uUT}U]'T_GUuum I2:묫 ᆵ&'K麊龜긾I2:묫 ᆵ6]U gWA }KUU T_PrDEWUwUu7]WUgwU }KU UuT_UrEWUwuu7}UgWA }K]UWUT_PvDEW w]UuwҢ+1 "+4";*jʶ"Ң+ "+ 4*Uu]u ]iWiWUsG]S]?]uWUWWUu]u ]m_i׵EWUwW]]?]uWUWWUu]u ]yW{W UsG]S]]uWWW%?f窦ڦ뾻 %?f窧*%޾竦뾻 WqmWSGuÕUMEw-WU ]}wU]YWFEWuo}WGuӕuMm}WU]}wU]WVWWqm!wSWGuյPUMUw-W]U_}wUT]YWfElj:+)+:Zn:+>z|j+)+ڢ'quW]u \]DMTW]VUEWEE]Uu_uW]} \ ]E]UWWUWUu]U'quW]u \}DMTW]VUeWEG]U *۬"kJ + ۬"{ ڛ **kj?%PQwO]XWp\]݅Y}g]T~]UQ\u]GDZTP_%PWwO]YWt_]݅[w]W]]Uu]G__%PQw_]\Wq\]݅]}g]\~]UY\u]ODZTP_*i({;*jk(ꊾ묮(k*i*{;*jk<#IUwuWu]QweE9]WyG%Uu]UT}7U#KUwuWu]Qw[eE}]W}_uUu]UT}7U#IUwuW}]Wu9]WyG%Uu]UU}7Uz/ꚋ**:#ʺz꺫*ʺzoڋ*:#ʺUWuV՗E}]\TtuTu}VU WuTSUwUEU'Uu5VE}]UtuTUu}VUWTWWwuU]UU]W u՗U}]^TuU}VU WuTSUwUEU Ⲣ늜ꢘ렙 ⊪ؾ* Ⲣ늜⫪ھ*'⺢늜컫먹 ⊪*'MWuwQU]E}UQU]u5WWEDPEU{UuUAeU'MWuwQW]}UuU]u5wUdEuUu_]EuMWwYU]UUSU]uWUWTREU{UuUAeU𯪺芠+ ꢪ+ꊢ뮪ꢮ򯪺k+SvUuWU]EuSUU]AU uOU]uUuQSvU]%uUUWUU]GU]uOU]uWw]S[vUuWU]Eus]_]QUOU]uUuQ"㎪;꣧n 20ꢪꩪ*㎫;꣯n:8ꢫ껮*뎪;n 2ꢪꩪ*QSM]UQ QMQ}uU YGYt_wWwEWSM]UQUQUuUYW]u_UwwQ[M]UQ QMQ}U uYGYt_wWwE**k&** kg** us_\QuYEU 4]uUu U]GT_Ueuw_QuYE]}=]uU ]]WUUu usW\QuYEU 4]wUuU}GT_Ue /: )> 8Ϊ*o/ꩪ>:Ϊ ﯮ: ) 8*ouuEEW5XE%u]]QTUY[_YWvUtu]uuUEWuXEw]U UUY{_]wUu}!wuEEW5XE%u]]QTU]__YwvUtu]~ * >*"~ ; ~ *+>*Uw]oRQUZwMUL5uQMUTQ}U|Uw]oRQU,ZwMW}u U]]_}]}WW]oRQUZwMQUL5uQmUTQ}U|*k{ګb* ں **k{۫b* ں⺮ꪾ!k{ګb* *']%_wU\]y]Ru}FU|]WUYgwuWuW']%_wU\_y]RuWU}WUYwwu_uW]uW_wU\]y]Ru}FU}WU]gwWuW!Σ*(ꮾ*!*hꮾ겻Σ*(ꮾ *UW57uuRDu]}V]UEGqUQUUUWu7uuZDu]}V]Uu]WyUQ]UUW5uuRDu]}V]UEGuUUU k*3# +k*3+ k*3#+U]v]חU]Q[wMUW|UuUW]UWwuU]v]U}Q[wUW}UWW]UWwuU]v]חU]Q[wMUW|UuUW]UWwu'C貫 C'C貫U}WU}SUwTQՕWUWuUYUuU]UEUU}WU}SUTQՕWUWuU]Uu]uUUU}WU}SUwTQՕWUWuUYUuU]UEUh*h*h*UU]UWTUW UW]uUu]UWUWUUU]UWTUW UW]uUu]UWUWUUU]UWTUW UW]uUu]UWUWU꫺﮾꫺﮾꫺﮾U}w}U_UUWU}WUwu]U]UU}w}U_UUWU}WUwu]U]UU}w}U_UUWU}WUwu]U]Uꪯꫪꪯꫪꪯꫪ * * * ]DTEUTEuUU]UUQUTUEU=UT ]ETUTEuUU]UUQUTU}WU ]DTEUTEuUU]UUQUTUEU=UT' *+.*뾪( ~V( ꪂ+껾뾪( ~(' *+.*뾪( ~V('QQUQS\WPW}Y\|QVUPM]TQA\U|TUQQUQ\WPW}_\|QXVU]M]TQA\U|U'QqUQS\WPW}Y\|QVUPM]TQA\U|TU'((j j:(88nڢ""N 8j k:8o""N'*hj j:(88nڢ""N'TQBQ'UoWUD}et@Q@eX}'\QBQ'o_UUT}et`QELe\'uQGVQ'UoWUD}et@Q@gY} º)H*z [*º)ˇH*̎릻[ )H*z [*'VH![WUGURUEyl|m՗aaU5=U]e'VH![WUGUWU k/ʫ:詪~(M dQu\A]uw1U_^vPUR7 V'dQSuQU]}uUw1u_^VUR7Kdqu\AU]_uw1U_^vQURV' HvN)ƪ ⮪Z#`",' H~N)檨+⮫[#*,'vN+ƪ߫殪Z`nu 4]euW[u\UTyrUGUgYMU5U'u 5]euW[}\UVsUGU~wYMu5U'w]uW[u\uTyvUgUg]M]5AU' >njȠ>ʪC**H>nˠ~˪CjjH'뻾njȨ>ʪC**H'u˱W]\E]p3U}?wEWUM-TuT_Eu۱W]]_G]t3U}wEW }-wT_e5 uW]\]rs}?wEWUM-TuT_U j`fL nͭ랫 kb絛fN2g|E_uUwQUu_WQu5_eUTU5UWg|UE_u]wqUu_WSu UWutUuUWE_wUwU_W]u5_euU]Uu5UW  T*FORMILBMBMHD0 0CMAP0````` @@@```BODYx0  x p~? `` ?? = w < xpL<< |xx ?`p<@8??? `0_p p@ |?>@ ``@@``0@00`p?p ? 0( 080 0 0  ` 0? `<80p0 ?88` @0` p```  @ ??<`@@080 `???0`   ` `` @  > `0`(0 `8`@?> @8` @p0@߿? @` 0 @@  @π`0 @`@`???0``@??` 0??0@@|x?FORM%@ILBMBMHD7; 7;CMAP0````` @@@```BODY$@ >8À?|~|<|1g?p0 ` @8ߠ `߀`0p@ 3{` g{0 0<``` ? 0? 0``000?r`p 00` ǀ80`@`?K@ @p 8c08|??`?> x  ?0 1p<80x0 P ??o/`@p  ?` `?>?08x`880```p`??8@ ???0@ <  ?? p?>?0`   0?p@` ?<???`?  0~?FORM@ILBMBMHD@  @ CMAP0``` @@@```BODYFORM0ILBMBMHD#> #>CMAP0````` @@@```BODYpp22Kπ00 `((@<%%<@`<<E`<<e@<<`<77<O`<<(<<<<<<0<<8`<ǀǀ< `<߀߀<`<gg<`<ww<¬`<=S=S<y`<<`<<`<<`<<<<<<<<<<<<<<<<<<<<<< READ-ME FILE FOR CYBER CONTROL "DEMOS" FOLDER: This folder contains three demo animations which you can easily create with CYBER CONTROL. 1. DESERT: Example of the standalone cel-animation capabilities of CYBER CONTROL. Creates a scrolling 2-1/2D animation of a desert scene as it would appear out the side window of a car. It uses background screens and .IFF blocks created with CYBER PAINT (could also be done with Degas Elite). 2. LAMP: Animation of a Luxo desk lamp moving around on a flat surface. Demonstrates the ability to hierarchically "slave" a light source to an object (in this case, a complicated hierarchical object itself). Plus, demonstrates how a surface created with the FUNCTION.CTL program (also on this disk) can be used to "reflect" varying degrees of light. 3. RUBERNEK: Example of what can be done with Darrel Anderson's Omni-Extruder .CTL program. This wild animation builds and animates a hierarchical spline-based character. All of the above animations are set up to run out of their own folders on Drive A. So, you should create three blank disks first, and then copy each one of the folders in the DEMOS folder to one of the blank disks. LAMP and RUBERNEK are designed to fit fine on a single-sided disk, but DESERT will require a double-sided disk or an additional disk in Drive B (for chaining). Look over the comments in the control files before you run them to make sure all your files are in the right places. To find all references to disk files, you can do a Find on "a:\". Have fun! . |~h.. |~OX_OBJCT |~iFLTCANOE3D2 Gt HANDLE 3D2 It OC_TRI4P3D2 Lt OC_WEDGE3D2 Nt OS_ARCH 3D2 Qt OS_HANDL3D2 St OS_RAZOR3D2 Ut "OS_SCURV3D2 Xt tOMNI_50 CAP Zt OMNI_EXTCTL \t ~=SIMPLIFYCTL bt T VUSPLINECTL dt #RAZORDATDAT gt . |~i.. |~hABDOMEN13D2 &t j B_BRIDGE3D2 )t mMANTA 3D2 +t o=,O10ARCH 3D2 .t { OX_FISH 3D2 0t ~O_FLAT_S3D2 3t =2$AwOmni~5:dE*!E5'7Eq&&'7 x Ftz1x6,v[v6fQgB97:9(gB~Qf,11114111u111,1R`E#Rc:[|e884e[|cK 8' oK<^(Yavo~v.Y(<|ay Q My| f 7U&!.U&  Ff hB0hMhQBh  y  (K " %K # [  y                             !!!"""###$%%%&&&'''((())  )* *!!*+!+""+,",##,$#$$-.$.%%./%/&&/0&0''01'1((12(2))23)3**34*4++45+5,,5-,-$-67-7..78.8//89/9009:0:11:;1;22;<2<33<=3=44=>4>55>656-6?@6@77@A7A88AB8B99BC9C::CD:D;;DE;E<<EF<F==FG=G>>G?>?6?HI?I@@IJ@JAAJKAKBBKLBLCCLMCMDDMNDNEENOEOFFOPFPGGPHGH?HQRHRIIRSISJJSTJTKKTUKULLUVLVMMVWMWNNWXNXOOXYOYPPYQPQHQZ[Q[RR[\R\SS\]S]TT]^T^UU^_U_VV_`V`WW`aWaXXabXbYYbZYZQZcdZd[[de[e\\ef\f]]fg]g^^gh^h__hi_i``ij`jaajkakbbkcbcZclmcmddmndneenoeoffopfpggpqgqhhqrhriirsisjjstjtkktlklcluvlvmmvwmwnnwxnxooxyoyppyzpzqqz{q{rr{|r|ss|}s}tt}utuluwvuxwuyxuzyu{zu|{u}|=22AwOmniPRo# whwoo2t{7{otcq5wbwIb 5-qM| 4ZAZM s^Z^@???s^?Z??^?@?| q4YOAOqY  p#4`;;I`# 4 -p #2r~7~r #c iRn # Y h Y in                           !!!"""###$$$%%%&&&'''   () )!!)*!*""*+"+##+,#,$$,-$-%%-.%.&&./&/''/('( (01(1))12)2**23*3++34+4,,45,5--56-6..67.7//70/0(08909119:1:22:;2;33;<3<44<=4=55=>5>66>?6?77?87808@A8A99AB9B::BC:C;;CD;D<<DE<E==EF=F>>FG>G??G@?@8@HI@IAAIJAJBBJKBKCCKLCLDDLMDMEEMNENFFNOFOGGOHGH@HJIHKJHLKHMLHNMHON=22;'7GWgwwOmnifg hjkkkkjjjjjj jjkkkkjhgf;B'H9OLVLY1XVUSSSSS"SUVXYVOHB;%!&>([)y*y*M*!**))))))6* *****)(&%,~S}z|{zgz-{{{{{{7{H{{{z^z^{|}~6e}6CX<`KTEw 2Av 1&1<5GbQ8S2R5 R7 Q:NDDkv:!0&Btx6k9\- 0  Cc#|"g}<Da1/^(3K>I 8T 7ZNWUSkQN{Q~(QxQQT-VzWZOT9I>"3(Y V^ s 1  )\*#&)K,Z8gR  I Gq|GTK DvC @<  4 D, , 6 A K V _9 }Y ~\ ^ a k      B  7 ?k3 >  pAC  C > .m R 8{  ]    %| =s Vj /o` ?_ C  m=l  7  & :L Zr jM e~ ^v Wo QgO Pf Pf: Qg Qg Si- Xpo _x e j Zrr 8K %m    !!  !" "  "# #  #$ $  $% %  %& &&'''((()))***+++,,,---...///011122233344455566677788  89 9!!9:!:"":;";##;<#<$$<=$=%%=>%>&&>?&?''?@'@((@A(A))AB)B**BC*C++CD+D,,DE,E--EF-F..FG.G//G0/00HI0I11IJ1J22JK2K33KL3L44LM4M55MN5N66NO6O77OP7P88PQ8Q99QR9R::RS:S;;ST;T<<TU<U==UV=V>>VW>W??WX?X@@XY@YAAYZAZBBZ[B[CC[\C\DD\]D]EE]^E^FF^_F_GG_HGH0H`aHaIIabIbJJbcJcKKcdKdLLdeLeMMefMfNNfgNgOOghOhPPhiPiQQijQjRRjkRkSSklSlTTlmTmUUmnUnVVnoVoWWopWpXXpqXqYYqrYrZZrsZs[[st[t\\tu\u]]uv]v^^vw^w__w`_`H`xy`yaayzazbbz{b{cc{|c|dd|}d}ee}~e~ff~fggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwxwx`xxyyyzzz{{{|||}}}~~~x                !!  !" "  "# #  #$ $  $% %  %& &&'''((()))***+++,,,---...///000111222333444555666777   89 9!!9:!:"":;";##;<#<$$<=$=%%=>%>&&>?&?''?@'@((@A(A))AB)B**BC*C++CD+D,,DE,E--EF-F..FG.G//GH/H00HI0I11IJ1J22JK2K33KL3L44LM4M55MN5N66NO6O77O878 8PQ8Q99QR9R::RS:S;;ST;T<<TU<U==UV=V>>VW>W??WX?X@@XY@YAAYZAZBBZ[B[CC[\C\DD\]D]EE]^E^FF^_F_GG_`G`HH`aHaIIabIbJJbcJcKKcdKdLLdeLeMMefMfNNfgNgOOgPOP8PhiPiQQijQjRRjkRkSSklSlTTlmTmUUmnUnVVnoVoWWopWpXXpqXqYYqrYrZZrsZs[[st[t\\tu\u]]uv]v^^vw^w__wx_x``xy`yaayzazbbz{b{cc{|c|dd|}d}ee}~e~ff~fgghghPhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~h      =22A"3DUfwwwwwwwwwOmni!// !Q %rQx$]6d4xx/6 xTzT^YxD\rcj=.=)0U&9j&lcy LAX86f009CISGT5>66>?6?77?87808@A8A99AB9B::BC:C;;CD;D<<DE<E==EF=F>>FG>G??G@?@8@HI@IAAIJAJBBJKBKCCKLCLDDLMDMEEMNENFFNOFOGGOHGH@HPQHQIIQRIRJJRSJSKKSTKTLLTULUMMUVMVNNVWNWOOWPOPHPXYPYQQYZQZRRZ[R[SS[\S\TT\]T]UU]^U^VV^_V_WW_XWXPX`aXaYYabYbZZbcZc[[cd[d\\de\e]]ef]f^^fg^g__g`_`X`hi`iaaijajbbjkbkccklclddlmdmeemnenffnofoggohgh`hpqhqiiqrirjjrsjskkstktlltulummuvmvnnvwnwoowpophpxypyqqyzqzrrz{r{ss{|s|tt|}t}uu}~u~vv~vwwxwxpxzyx{zx|{x}|x~}x~=22; 0@P`pqrstuvwwOmnijjsj-jjr*j*wj]jjj+jsjljjt j9>0Kp -cN"T.qLB1O:>*g c#Th+BO\m\G\a\j\\jP\\\I\k\E\k\\\o !c'K''*')'''t'z''U't''+ '='L5qG4BXGQ~HCHO@r!Tl>Q.UASSB[ N@T T@"9G""M{""]" ~""" " "":"N " ":50:7kEF8s6  /RRR30RR:RqkRRRRrRRsR4 R /R`ePHv23uI Q a:i[ngH4j;1 X#7 XO X X XM X Xo" X0 Xp X XN X X XPC X$  o  :w t  %5  &   ; G   ` ,  1-  * w ]   l 2  -                                          ! ! !" " "# # #$ $ $% % %& & &' ' '( ( () ) )* * *+ + +, , ,  -. . ./ /  /0 0! !01 !1" "12 "2# #23 #3$ $34 $4% %45 %5& &56 &6' '67 '7( (78 (8) )89 )9* *9: *:+ +:; +;, ,;- ,- -<= -=. .=> .>/ />? /?0 0?@ 0@1 1@A 1A2 2AB 2B3 3BC 3C4 4CD 4D5 5DE 5E6 6EF 6F7 7FG 7G8 8GH 8H9 9HI 9I: :IJ :J; ;J< ;<- <KL <L= =LM =M> >MN >N? ?NO ?O@ @OP @PA APQ AQB BQR BRC CRS CSD DST DTE ETU EUF FUV FVG GVW GWH HWX HXI IXY IYJ JYK JK< KZ[ K[L L[\ L\M M\] M]N N]^ N^O O^_ O_P P_` P`Q Q`a QaR Rab RbS Sbc ScT Tcd TdU Ude UeV Vef VfW Wfg WgX Xgh XhY YhZ YZK Zij Zj[ [jk [k\ \kl \l] ]lm ]m^ ^mn ^n_ _no _o` `op `pa apq aqb bqr brc crs csd dst dte etu euf fuv fvg gvw gwh hwi hiZ ixy iyj jyz jzk kz{ k{l l{| l|m m|} m}n n}~ n~o o~ op p pq q qr r rs s st t tu u uv v vw wx wxi x xy y yz z z{ { {| | |} } }~ ~ ~                x                                                                                                                                                                                                                                              =22;'7GWgwwOmni<r huuA iogoZiQie+)<)+*QijTj"[: q)q):[@t%fftW?:j^LKKv r 5V  5 ~8 ] D D8 t                             !!!"""###$%%%&&  &' '!!'(!(""()")##)$#$$*+$+%%+,%,&&,-&-''-.'.((./(/))/*)*$*01*1++12+2,,23,3--34-4..45.5//50/0*06707117818228929339:3:44:;4;55;65606876986:96;:=2(A$%&7GWgwSfltcanoeHyy+/  $VB qoqq9yqbqa[q9zqhqn8] ] x\\B\R\\\\\8] ] o9yba[9zhnU U$UUVUUUBU &&&&y&y+&/& &                           !!!"""###$$$%%%&&&'''   () )!!)*!*""*+"+##+,#,$$,-$-%%-.%.&&./&/''/('( (01(1))12)2**23*3++34+4,,45,5--56-6..67.7//70/0(08909119:1:22:;2;33;<3<44<=4=55=>5>66>?6?77?87808@A8A99AB9B::BC:C;;CD;D<<DE<E==EF=F>>FG>G??G@?@8@BA@CB@DC@ED@FE@GF=2(A$%&7GWgwShandleHXmk(DmQXD+1[+[wvD=o'{v(E('z%y_gY*1Y@_ *W]xdq00 q*xWLqkf"Kf?q{MKBTrBvKd'xx%) xoz 0e>?P)C5#Z#*s>#GN!{<+Aj\w{jC %!jpj ( `+"FAGlhImu& s&6bj_Y\{='7hqxQ2Q\wO7m\<Aj$m<Z' 1GDG'  dy .2]6'y  ww @ b#,w  dy .]'y Z(B 1<Du(<kc A:$'<\Ow7pm\7x Q\QE_\=4&0&j+n"YAGR:lhtC "%!Wkk *G !| z<Aw| 5 " Z$ <+>$< 5 )) n  $y z0? ) k  X x Xx % 5   M ~B  mrB M 2 ~ q g F#  g q : WW x q d1 1 q x X % _ Y n+ '2 Y _ + \p' w( `  ( '  ]B ++ f2 :Z Z dx w B W 8m l nEmsRW}                           !!!"""###$$$%%%&&&'''   () )!!)*!*""*+"+##+,#,$$,-$-%%-.%.&&./&/''/('( (01(1))12)2**23*3++34+4,,45,5--56-6..67.7//70/0(08909119:1:22:;2;33;<3<44<=4=55=>5>66>?6?77?87808@A8A99AB9B::BC:C;;CD;D<<DE<E==EF=F>>FG>G??G@?@8@HI@IAAIJAJBBJKBKCCKLCLDDLMDMEEMNENFFNOFOGGOHGH@HPQHQIIQRIRJJRSJSKKSTKTLLTULUMMUVMVNNVWNWOOWPOPHPXYPYQQYZQZRRZ[R[SS[\S\TT\]T]UU]^U^VV^_V_WW_XWXPX`aXaYYabYbZZbcZc[[cd[d\\de\e]]ef]f^^fg^g__g`_`X`hi`iaaijajbbjkbkccklclddlmdmeemnenffnofoggohgh`hpqhqiiqrirjjrsjskkstktlltulummuvmvnnvwnwoowpophpxypyqqyzqzrrz{r{ss{|s|tt|}t}uu}~u~vv~vwwxwxpxxyyyzzz{{{|||}}}~~~x                               !!!"""###$$$%%%&&&'''   () )!!)*!*""*+"+##+,#,$$,-$-%%-.%.&&./&/''/('( (01(1))12)2**23*3++34+4,,45,5--56-6..67.7//70/0(08909119:1:22:;2;33;<3<44<=4=55=>5>66>?6?77?87808@A8A99AB9B::BC:C;;CD;D<<DE<E==EF=F>>FG>G??G@?@8@BA@CB@DC@ED@FE@GF=2(A$%&7GWgwSmark0__YPYmark1eY6mark2xe6mark3__YY=2(A$%&7GWgwSmark0__ yZy:mark1n0M0mark20%0%mark3__Z:=2(A$%&7GWgwSspline0++++ spline1 l* l*+ l+* l+*+ spline2 ^* ^ ^ ^* *   * =2(A$%&7GWgwSspline0PPPP spline1wHwHwwHH spline2* *\*\b* b \\b b spline3 4 4 4I 4I   I I spline4QQ R RQ RQ R = 2(A$%&7GWgwSspline000000000 spline10uu000u0u000 spline20E0E0000E00E spline30]]000]0]000 spline400000000 spline50hh000h0h000 spline60...90.90909 spline709090mmm90m9 spline804 4 4\04\0  \0\ spline90 z z00 z z 0  =2(A$%&7GWgwSspline0 spline1 spline2w||ww||w spline3 <m < p< p<m <m < p< p<m 0,1,2 0,2,3 0,3,4 0,4,5 0,5,6 0,6,7 0,7,8 0,8,9 0,9,10 0,10,11 0,11,12 0,12,13 0,13,14 0,14,15 0,15,16 0,16,17 0,17,18 0,18,19 0,19,20 0,20,21 0,21,22 0,22,23 0,23,24 0,24,25 0,25,26 0,26,27 0,27,28 0,28,29 0,29,30 0,30,31 0,31,32 0,32,33 0,33,34 0,34,35 0,35,36 0,36,37 0,37,38 0,38,39 0,39,40 0,40,41 0,41,42 0,42,43 0,43,44 0,44,45 0,45,46 0,46,47 0,47,48 0,48,49 0,49,50 ; Omni Extruder Version 2.0 ; by Darrel Anderson with help from Jeff Anderson ; for 3D-Control language ;___________________________________________________________LOAD\MERGE____ alert "Omni Extruder|Custom Modeling Tool|for CAD-3D|by Darrel Anderson" DIM xrotary(100),yrotary(100),zrotary(100),xpnt(20),ypnt(20),zpnt(20) @LOADIT load3d "A:\OMNIFILE\ZZSPLINE.3D2" status totv,usedv,totf,usedf,objs exkeyz=objs @MERGEIT group c:clrgrp merge3d "A:\OMNIFILE\ZZCROSEC.3D2" if scalsent then return status totv,usedv,totf,usedf,objs seckeyz=objs-exkeyz ;_____________________________________________INPUT- OBJECT_PARAMETERS____ @GETSEGS input "Enter number of segments. 0:ReadData",segments if segments=0 then goto READDATA if segments<3 | segments>100 then bell:goto GETSEGS halfseg=(segments+1)/2:savesegs=segments @GETCROSS input "Number of points in cross-section spline",csplinez if csplinez<1 then csplinez=seckeyz:crosstype=1 if csplinez>100 | csplinez2 then goto CSPLITYPE @ESPLITYPE input "Extrusion spline; 0:B 1:L 2:S",est if est<0 | est>2 then goto ESPLITYPE @XSPLITYPE input "X-scaling spline; 0:B 1:L 2:S",xst if xst<0 | xst>2 then goto XSPLITYPE @YSPLITYPE input "Y-scaling spline; 0:B 1:L 2:S",yst if yst<0 | yst>2 then goto YSPLITYPE @RSPLITYPE input "Rotation spline; 0:B 1:L 2:S",rst if rst<0 | rst>2 then goto RSPLITYPE ;__________________________________________INPUT- INCREMENTAL_ROTATION____ @GETOPT1 input "0:Auto Rotation 1:Set Rotation 2:None",rotopt if rotopt<0 | rotopt>2 then bell:goto GETOPT1 if rotopt=0 | rotopt=2 then goto GETOPT2 input "Rotation... 0:Incremented 1:Splined",mrotopt if mrotopt>0 then goto XROTDEF @GETXROT input "X rotation (degrees) of cross-section",xrot:xrot=int(xrot) if abs (xrot/segments)>180 then bell:goto GETXROT @GETYROT input "Y rotation (degrees) of cross-section",yrot:yrot=int(yrot) if abs (yrot/segments)>180 then bell:goto GETYROT @GETZROT input "Z rotation (degrees) of cross-section",zrot:zrot=int(zrot) if abs (zrot/segments)>180 then bell:goto GETZROT goto GETOPT2 ;______________________________________________INPUT- SPLINED_ROTATION____ @XROTDEF input "First X-rotation of cross-section 1:Nix",xmrot if xmrot=1 then defpt 5,0,0,0:defpt 5,0,0,0:goto XROTSPLINE if abs (xmrot) >180 then bell:alert ">180 & > -180 PLEASE" :goto XROTDEF defpt 5,xmrot,0,0:xmrotz=1 @NEXTXROT input "Next X-rotation of cross-section 1:Done",xmrot if xmrot=1 then goto XROTSPLINE if abs (xmrot) >180 then bell:alert ">180 & > -180 PLEASE" :goto XROTDEF defpt 5,xmrot,0,0:xmrotz=xmrotz+1:goto NEXTXROT @XROTSPLINE if xmrotz>segments then alert "Too many key points/segments":goto XROTDEF gosub ROTSPLINE for fil=0 to segments xrotary(fil)=s5x(fil):next fil alert "X-Rotation spline defined" @YROTDEF input "First Y-rotation of cross-section 1:Nix",ymrot if ymrot=1 then defpt 5,0,0,0:defpt 5,0,0,0:goto YROTSPLINE if abs (ymrot) >180 then bell:alert ">180 & > -180 PLEASE" :goto YROTDEF defpt 5,0,ymrot,0:ymrotz=1 @NEXTYROT input "Next Y-rotation of cross-section 1:Done",ymrot if ymrot=1 then goto YROTSPLINE if abs (ymrot) >180 then bell:alert ">180 & > -180 PLEASE" :goto YROTDEF defpt 5,0,ymrot,0:ymrotz=ymrotz+1:goto NEXTYROT @YROTSPLINE if ymrotz>segments then alert "Too many key points/segments":goto YROTDEF gosub ROTSPLINE for fil=0 to segments yrotary(fil)=s5y(fil):next fil alert "Y-Rotation spline defined" @ZROTDEF input "First Z-rotation of cross-section 1:Nix",zmrot if zmrot=1 then defpt 5,0,0,0:defpt 5,0,0,0:goto ZROTSPLINE if abs (zmrot) >180 then bell:alert ">180 & > -180 PLEASE" :goto ZROTDEF defpt 5,0,0,zmrot:zmrotz=1 @NEXTZROT input "Next Z-rotation of cross-section 1:Done",zmrot if zmrot=1 then goto ZROTSPLINE if abs (zmrot) >180 then bell:alert ">180 & > -180 PLEASE" :goto ZROTDEF defpt 5,0,0,zmrot:zmrotz=zmrotz+1:goto NEXTZROT @ZROTSPLINE if zmrotz>segments then alert "Too many key points/segments":goto ZROTDEF gosub ROTSPLINE for fil=0 to segments zrotary(fil)=s5z(fil):next fil alert "Z-Rotation spline defined" goto GETOPT2 @ROTSPLINE if rst=0 then defspline 5,segments+1,B if rst=1 then defspline 5,segments+1,L if rst=2 then defspline 5,segments+1,S return ;_______________________________________________________INPUT- SCALING____ @GETOPT2 input "Cross-section scaling; 0:None 1:Set",scaling if scaling<0 | scaling>1 then bell:goto GETOPT2 if scaling=0 then goto STARTIT @GETXSCALE input "First X-scaling % of cross-section 0:Nix",xpcnt if xpcnt=0 then defpt 1,100,0,0:defpt 1,100,0,0:goto XSCALESPLINE if xpcnt<1 | xpcnt>100 then bell:alert "% MUST BE <= 100":goto GETXSCALE defpt 1,xpcnt,0,0:xscalz=1 @NEXTXSCALE input "Next X-scaling % of cross-section 0:Done",xpcnt if xpcnt<1 then goto XSCALESPLINE if xpcnt>100 then bell:alert "% MUST BE <= 100":goto NEXTXSCALE defpt 1,xpcnt,0,0:xscalz=xscalz+1:goto NEXTXSCALE @XSCALESPLINE if xscalz>segments then alert "Too many % key points|for # of segments" if xst=0 then defspline 1,segments+1,B if xst=1 then defspline 1,segments+1,L if xst=2 then defspline 1,segments+1,S alert "X-Scaling Defined" @GETYSCALE input "First Y-scaling % of cross-section 0:Nix",ypcnt if ypcnt=0 then defpt 2,0,100,0:defpt 2,0,100,0:goto YSCALESPLINE if ypcnt<1 | ypcnt>100 then bell:alert "% MUST BE <= 100":goto GETYSCALE defpt 2,0,ypcnt,0:yscalz=1 @NEXTYSCALE input "Next Y-scaling % of cross-section 0:Done",ypcnt if ypcnt<1 then goto YSCALESPLINE if ypcnt>100 then bell:alert "% MUST BE <= 100":goto NEXTYSCALE defpt 2,0,ypcnt,0:yscalz=yscalz+1:goto NEXTYSCALE @YSCALESPLINE if yscalz>segments then alert "Too many % key points|for # of segments" if yst=0 then defspline 2,segments+1,B if yst=1 then defspline 2,segments+1,L if yst=2 then defspline 2,segments+1,S alert "Y-Scaling defined" goto STARTIT ;_____________________________________________________________DEFAULTS____ @GETDEFAULT rotopt=0:scaling=0 goto STARTIT ;____________________________________________________________READ_DATA____ @READDATA input "Hit Return if DataFile ready. 1:abort",dx:if dx>0 then goto GETSEGS fopen "A:\OMNIFILE\OX_DATA.DAT" ftrap ENDODATA fread segments,csplinez,cst,est,xst,yst,rst fread rotopt,mrotopt,xmrotz,ymrotz,zmrotz,scaling,xscalz,yscalz if rotopt=1 & mrotopt=0 then fread xrot,yrot,zrot if mrotopt=1 then gosub DATMROT if scaling=1 then gosub DATSCALE halfseg=(segments+1)/2 @ENDODATA:fclose if saves=2 then segments=savesegs:csplinez=savecspli goto STARTIT @DATMROT if xmrotz=0 then goto YROTDAT for loop=0 to xmrotz-1 fread dat:defpt 5,dat,0,0:next loop gosub DROTSPLINE for fil=0 to segments xrotary(fil)=s5x(fil):next fil @YROTDAT if ymrotz=0 then goto ZROTDAT for loop=0 to ymrotz-1 fread dat:defpt 5,0,dat,0:next loop for fil=0 to segments gosub DROTSPLINE yrotary(fil)=s5y(fil):next fil @ZROTDAT if zmrotz=0 then return for loop=0 to zmrotz-1 fread dat:defpt 5,0,0,dat:next loop gosub DROTSPLINE for fil=0 to segments zrotary(fil)=s5z(fil):next fil return @DROTSPLINE if rst=0 then defspline 5,segments+1,B if rst=1 then defspline 5,segments+1,L if rst=2 then defspline 5,segments+1,S return @DATSCALE if xscalz=0 then goto YSCALDAT for xloop=0 to xscalz-1 fread xdat:defpt 1,xdat,0,0:next xloop if xst=0 then defspline 1,segments+1,B if xst=1 then defspline 1,segments+1,L if xst=2 then defspline 1,segments+1,S @YSCALDAT if yscalz=0 then return for yloop=0 to yscalz-1 fread ydat:defpt 2,0,ydat,0:next yloop if yst=0 then defspline 2,segments+1,B if yst=1 then defspline 2,segments+1,L if yst=2 then defspline 2,segments+1,S return ;________________________________________________________________START____ @STARTIT input "GO?",xx xrot=xrot/segments:yrot=yrot/segments:zrot=zrot/segments center universe:color=rez(0)+13 gosub XTRUDSPLINE ;_____________________________________________________________MAIN_LOOP___ @FLY zoom 80:perspec 700:cam1 30,40,0:draft:view w:clrbgnd:backgnd yes,no for seg=0 to segments if rotopt=0 then gosub AUTOROT:bell:next seg:goto ADDFACES if scaling=1 | rotopt=1 then gosub SCALEIT if scaling=0 & rotopt=2 then gosub CSECSPLINE for vx=0 to csplinez-1 if crosstype=1 then goto NOCSPLINE addvertex vertix,s3x(vx)+s4x(seg),s3y(vx)+s4y(seg),s3z(vx)+s4z(seg) vertix=vertix+1 next vx:bell:next seg goto ADDFACES @NOCSPLINE addvertex vertix,xpnt(vx)+s4x(seg),ypnt(vx)+s4y(seg),zpnt(vx)+s4z(seg) vertix=vertix+1 next vx:bell:next seg goto ADDFACES ;________________________________________________________AUTO_ROTATION____ @AUTOROT group c D=1:DD=0 if seg+1>halfseg then D=0:DD=1 vecx=s4x(seg+D)-s4x(seg-DD) vecy=s4y(seg+D)-s4y(seg-DD) vecz=s4z(seg+D)-s4z(seg-DD) @AROT2 magv=sqr(vecx*vecx + vecy*vecy + vecz*vecz) magp=sqr(vecx*vecx + vecy*vecy) sth=vecy/magp:cth=vecx/magp:cph=vecz/magv:sph=magp/magv if sph>.70 then goto AROT3 if magp<200 & vecz>0 then gosub AROTSPECIAL:goto AROT4 if magp<200 & vecz<0 then sph=0:cph=-1:if seg>0 then sth=oldsth:cth=oldcth ;if oldvecy*vecy<0 & sph<.50 then gosub AROTSPECIAL:goto AROT3 flag=0 @AROT3 ;if sph<.49 & flag= 1 then gosub AROTSPECIAL @AROT4 oldvecy=vecy if scaling then gosub SCALEIT:goto AROT5 gosub CSECSPLINE @AROT5 for cspix=0 to csplinez-1 pxf=s3x(cspix)*sth+s3y(cspix)*cph*cth+s4x(seg) pyf=(s3y(cspix)*cph*sth)-(s3x(cspix)*cth)+s4y(seg) pzf=(-1*s3y(cspix))*sph+s4z(seg) addvertex vertix,pxf,pyf,pzf:vertix=vertix+1 next cspix oldsth=sth:oldcth=cth return @AROTSPECIAL sth=1:cth=0:if seg>0 then sth=oldsth:cth=oldcth flag=1 return ;______________________________________________________________SCALING____ @SCALEIT group a:clrgrp kill mark0,mark1,mark2:if seckeyz>3 then kill mark3 if seckeyz>4 then kill mark4:if seckeyz>5 then kill mark5 if seckeyz>6 then kill mark6:if seckeyz>7 then kill mark7 if seckeyz>8 then kill mark8:if seckeyz>9 then kill mark9 if seckeyz>10 then kill mark10:if seckeyz>11 then kill mark11 if seckeyz>12 then kill mark12:if seckeyz>13 then kill mark13 if seckeyz>14 then kill mark14:if seckeyz>15 then kill mark15 if seckeyz>16 then kill mark16:if seckeyz>17 then kill mark17 if seckeyz>18 then kill mark18:if seckeyz>19 then kill mark19 scalsent=1 gosub MERGEIT if scaling=0 then goto SCALEIT2 scalx=s1x(seg):scaly=s2y(seg) @RESCALE if scalx<50 then axisscale 50,100,100:scalx=scalx*2 if scaly<50 then axisscale 100,50,100:scaly=scaly*2 if scalx<50 | scaly<50 then goto RESCALE axisscale scalx,scaly,100 @SCALEIT2 if rotopt then gosub MANUALROT if mrotopt then gosub SPLINEROT gosub CSECSPLINE return ;_____________________________________________________ROTATION_OPTIONS____ @MANUALROT xrotx=xrot*seg:yrotx=yrot*seg:zrotx=zrot*seg group c rotate xrotx,0,0 rotate 0,yrotx,0 rotate 0,0,zrotx return @SPLINEROT group c: rotate xrotary(seg),0,0 rotate 0,yrotary(seg),0 rotate 0,0,zrotary(seg) return ;____________________________________________________SPLINE_DEFINITION____ @XTRUDSPLINE group b for points=0 to exkeyz-1 gosub XTRUDPOINTS defpt 4,spx,spy,spz next points if est=0 then defspline 4,segments+1,B if est=1 then defspline 4,segments+1,L if est=2 then defspline 4,segments+1,S return @CSECSPLINE group b for cpoint=0 to seckeyz-1 gosub SECTIONPOINTS if crosstype=1 then gosub CSEC:next cpoint:return defpt 3,scx,scy,scz next cpoint if cst=0 then defspline 3,csplinez,B if cst=1 then defspline 3,csplinez,L if cst=2 then defspline 3,csplinez,S return @CSEC xpnt(cpoint)=scx:ypnt(cpoint)=scy:zpnt(cpoint)=scz return @SECTIONPOINTS group b:clrgrp if cpoint=0 then select mark0:grpcent scx,scy,scz:return if cpoint=1 then select mark1:grpcent scx,scy,scz:return if cpoint=2 then select mark2:grpcent scx,scy,scz:return if cpoint=3 then select mark3:grpcent scx,scy,scz:return if cpoint=4 then select mark4:grpcent scx,scy,scz:return if cpoint=5 then select mark5:grpcent scx,scy,scz:return if cpoint=6 then select mark6:grpcent scx,scy,scz:return if cpoint=7 then select mark7:grpcent scx,scy,scz:return if cpoint=8 then select mark8:grpcent scx,scy,scz:return if cpoint=9 then select mark9:grpcent scx,scy,scz:return if cpoint=10 then select mark10:grpcent scx,scy,scz:return if cpoint=11 then select mark11:grpcent scx,scy,scz:return if cpoint=12 then select mark12:grpcent scx,scy,scz:return if cpoint=13 then select mark13:grpcent scx,scy,scz:return if cpoint=14 then select mark14:grpcent scx,scy,scz:return if cpoint=15 then select mark15:grpcent scx,scy,scz:return if cpoint=16 then select mark16:grpcent scx,scy,scz:return if cpoint=17 then select mark17:grpcent scx,scy,scz:return if cpoint=18 then select mark18:grpcent scx,scy,scz:return if cpoint=19 then select mark19:grpcent scx,scy,scz:return @XTRUDPOINTS group b:clrgrp if points=0 then select spline0:grpcent spx,spy,spz:return if points=1 then select spline1:grpcent spx,spy,spz:return if points=2 then select spline2:grpcent spx,spy,spz:return if points=3 then select spline3:grpcent spx,spy,spz:return if points=4 then select spline4:grpcent spx,spy,spz:return if points=5 then select spline5:grpcent spx,spy,spz:return if points=6 then select spline6:grpcent spx,spy,spz:return if points=7 then select spline7:grpcent spx,spy,spz:return if points=8 then select spline8:grpcent spx,spy,spz:return if points=9 then select spline9:grpcent spx,spy,spz:return if points=10 then select spline10:grpcent spx,spy,spz:return if points=11 then select spline11:grpcent spx,spy,spz:return if points=12 then select spline12:grpcent spx,spy,spz:return if points=13 then select spline13:grpcent spx,spy,spz:return if points=14 then select spline14:grpcent spx,spy,spz:return if points=15 then select spline15:grpcent spx,spy,spz:return if points=16 then select spline16:grpcent spx,spy,spz:return if points=17 then select spline17:grpcent spx,spy,spz:return if points=18 then select spline18:grpcent spx,spy,spz:return if points=19 then select spline19:grpcent spx,spy,spz:return ;________________________________________________________________BUILD____ @ADDFACES si=csplinez:faceix=0:vertix=0 for faceloop= 1 to segments for loop=0 to csplinez-2 addface faceix+0,vertix,vertix+si,vertix+si+1,1,1,0,color addface faceix+1,vertix,vertix+si+1,vertix+1,0,1,1,color faceix=faceix+2:vertix=vertix+1 next loop addface faceix+0,vertix,vertix+si,vertix+1,1,1,0,color addface faceix+1,vertix,vertix+1,vertix-si+1,0,1,1,color faceix=faceix+2:vertix=vertix+1 next faceloop ;________________________________________________________________FINISH___ @CAPBASES bell fopen "A:OMNIFILE\OMNI_50.CAP" ftrap EOFILE @CAPLOOP for capz=1 to csplinez-2 fread cf1,cf2,cf3 addface faceix+caps,cf1,cf2,cf3,1,1,1,color addface faceix+caps+1,vertix+cf1,vertix+cf3,vertix+cf2,1,1,1,color caps=caps+2 next capz:FCLOSE:goto UPLOADIT @EOFILE fclose ;_______________________________________________________________UPLOAD____ @UPLOADIT faces=faceix+caps:verts=vertix+csplinez group a upload Omni,verts,faces:clrgrp:select Omni zoom 80:perspec 700:cam1 120,40,0:superview:bell:end ;SIMPLIFY.CTL. by Darrel Anderson ;Used to transform CROSS-SECTION file objects into 1 point objects. Using ;these single point object files in OMNI_EXT.CTL speeds up object creation. ;Load the CROSS-SECTION file you want to convert into CAD-3D before running. ;When finished all "mark" objects will have been converted to single points. ;Save this new group of objects with a new filname. Keep the original ;file, these 1 point objects are difficult to manipulate in CAD. input "number of marks to convert",seckeyz DIM xpnt(20),ypnt(20),zpnt(20) addvertex 0,0,0,0:addface 0,0,0,0,1,1,1,color:upload p,1,1 gosub CSECSPLINE for L=0 to seckeyz-1 group a:clrgrp:select p:moveto xpnt(L),ypnt(L),zpnt(L) if L=0 then kill mark0:clone p,mark0 if L=1 then kill mark1:clone p,mark1 if L=2 then kill mark2:clone p,mark2 if L=3 then kill mark3:clone p,mark3 if L=4 then kill mark4:clone p,mark4 if L=5 then kill mark5:clone p,mark5 if L=6 then kill mark6:clone p,mark6 if L=7 then kill mark7:clone p,mark7 if L=8 then kill mark8:clone p,mark8 if L=9 then kill mark9:clone p,mark9 if L=10 then kill mark10:clone p,mark10 if L=11 then kill mark11:clone p,mark11 if L=12 then kill mark12:clone p,mark12 if L=13 then kill mark13:clone p,mark13 if L=14 then kill mark14:clone p,mark14 if L=15 then kill mark15:clone p,mark15 if L=16 then kill mark16:clone p,mark16 if L=17 then kill mark17:clone p,mark17 if L=18 then kill mark18:clone p,mark18 if L=19 then kill mark19:clone p,mark19 next L:kill p:allgrp:bell:end @CSECSPLINE group b for cpoint=0 to seckeyz-1 gosub SECTIONPOINTS xpnt(cpoint)=scx:ypnt(cpoint)=scy:zpnt(cpoint)=scz next cpoint:return @SECTIONPOINTS group b:clrgrp if cpoint=0 then select mark0:grpcent scx,scy,scz:return if cpoint=1 then select mark1:grpcent scx,scy,scz:return if cpoint=2 then select mark2:grpcent scx,scy,scz:return if cpoint=3 then select mark3:grpcent scx,scy,scz:return if cpoint=4 then select mark4:grpcent scx,scy,scz:return if cpoint=5 then select mark5:grpcent scx,scy,scz:return if cpoint=6 then select mark6:grpcent scx,scy,scz:return if cpoint=7 then select mark7:grpcent scx,scy,scz:return if cpoint=8 then select mark8:grpcent scx,scy,scz:return if cpoint=9 then select mark9:grpcent scx,scy,scz:return if cpoint=10 then select mark10:grpcent scx,scy,scz:return if cpoint=11 then select mark11:grpcent scx,scy,scz:return if cpoint=12 then select mark12:grpcent scx,scy,scz:return if cpoint=13 then select mark13:grpcent scx,scy,scz:return if cpoint=14 then select mark14:grpcent scx,scy,scz:return if cpoint=15 then select mark15:grpcent scx,scy,scz:return if cpoint=16 then select mark16:grpcent scx,scy,scz:return if cpoint=17 then select mark17:grpcent scx,scy,scz:return if cpoint=18 then select mark18:grpcent scx,scy,scz:return if cpoint=19 then select mark19:grpcent scx,scy,scz:return ; SPLINE PREVIEW PROGRAM Version 1.0 ; by Darrel Anderson ; for CAD-3D 2.02 and Cyber Control ;________________________________________________________________START____ status totv,usedv,totf,usedf,obj0 @STARTOPT input "0:Auto 1:Merge 2:No Load 3:Restart",start if start<0 | start>3 then bell:goto STARTOPT if start=1 then mergeopt=1:goto SELECT if start=2 then noload=1:goto SELECT if start=3 then kill trace:goto STARTOPT @SELECT input "Key-Point Source 0:Spline 1:Mark",source if source<0 | source>1 then goto SELECT if noload then goto OPTION if mergeopt then goto MERGE @LOAD group a if source=0 then load3d "A:\OMNIFILE\ZZSPLINE.3D2" if source=1 then load3d "A:\OMNIFILE\ZZCROSEC.3D2" status totv,usedv,totf,usedf,obj1 keys=obj1:goto OPTION @MERGE group a if source=0 then merge3d "A:\OMNIFILE\ZZSPLINE.3D2" if source=1 then merge3d "A:\OMNIFILE\ZZCROSEC.3D2" status totv,usedv,totf,usedf,obj1 keys=obj1-obj0:goto OPTION ;________________________________________________________________INPUT____ @OPTION input "Choose; 0:Construct 1:Map 2:Fly",opt if opt<0 | opt1>2 then bell:goto OPTION @GETTYPE input "Choose Spline type; 0:B 1:L 2:S",stype if stype<0 | stype>2 then goto GETTYPE @GETKEYS if start<2 then goto GETPOINTS input "Enter number of Key Points used.",keys if keys<2 | keys >20 then bell:goto GETKEYS @GETPOINTS input "Enter number of spline points to trace.",spoints if spoints> (40-(keys+1)) & opt=0 then bell:goto GETPOINTS @SHOWKEY input "0:Show Key Points 1:Hide Key Points",seekey if seekey<0 | seekey>1 then bell:goto SHOWKEY @SETCAM input "Camera Settings; 0:Default 1:Set",camopt if camopt<0 | camopt>1 then bell:goto SETCAM if camopt=0 then goto STARTIT @GETZOOM input "Enter Zoom",izoom if izoom<1 | izoom>999 then bell:goto GETZOOM @GETPERSPEC input "Enter Perspective",iperspec if iperspec<0 | iperspec>999 then bell:goto GETPERSPEC if opt=2 then gosub LOOKOPT:goto STARTIT @GETHORIZONTAL input "Enter Cameras' Horizontal position",horiz if abs (horiz)>180 then bell:goto GETHORIZONTAL @GETVERTICAL input "Enter Cameras' Vertical position",vertical if abs (vertical)>180 then bell:goto GETVERTICAL @STARTIT if opt<2 then group a:clrgrp:wedge trace,14:scale 50:rotate 0,90,0 zoom izoom:perspec iperspec:cam1 horiz,vertical,0 if camopt=0 & opt<2 then zoom 70:perspec 700:cam1 30,30,0: watch on gosub DEFSPLINE if opt=0 then goto CONSTRUCT if opt=1 then goto MAP if opt=2 then goto FLY @LOOKOPT input "Aim Cam2 at; 0:Spline path 1:Cad-Center",lookat if lookat<0 | lookat>1 then bell:goto @LOOKOPT return ;___________________________________________________________OPERATIONS____ @CONSTRUCT watch on:backgnd no,no group a:clrgrp:clrbgnd for loop=0 to spoints group c:clrgrp:select trace moveto s1x(loop),s1y(loop),s1z(loop) gosub CLONES if seekey=0 then group a:allgrp if seekey=1 then group b:select trace superview next loop kill trace:for delay=1 to 50:next delay:end @MAP watch on:backgnd yes,no group a:allgrp:clrbgnd if seekey=1 then group c:clrgrp:select trace for loop=0 to spoints group c:clrgrp:select trace moveto s1x(loop),s1y(loop),s1z(loop) if seekey=0 then group a:allgrp if seekey=1 then group c:clrgrp:select trace superview:vtobgnd next loop kill trace:for delay=0 to 100:next delay end @FLY i=3:halfway=spoints/2 if camopt=0 then zoom 30:perspec999 watch on:backgnd no,no group a:clrgrp:clrbgnd if seekey=0 then group a:allgrp if seekey=1 then group b for loop=0 to spoints-1 if loop=halfway then i=-3 if lookat=1 then cam2 s1x(loop),s1y(loop),s1z(loop),0,0,0,0:goto SKIP cam2 s1x(loop),s1y(loop),s1z(loop),s1x(loop+i),s1y(loop+i),s1z(loop+i),0 @SKIP superview next loop for delay=0 to 100:next delay:end ;______________________________________________________________SPLINE____ @DEFSPLINE group d for points=0 to keys-1 if source=0 then gosub SPLINEPOINTS if source=1 then gosub MARKPOINTS defpt 1,spx,spy,spz next points if stype=0 then defspline 1,spoints+1,B if stype=1 then defspline 1,spoints+1,L if stype=2 then defspline 1,spoints+1,S clrgrp:return @SPLINEPOINTS group d if points=0 then clrgrp:select spline0:grpcent spx,spy,spz:return if points=1 then clrgrp:select spline1:grpcent spx,spy,spz:return if points=2 then clrgrp:select spline2:grpcent spx,spy,spz:return if points=3 then clrgrp:select spline3:grpcent spx,spy,spz:return if points=4 then clrgrp:select spline4:grpcent spx,spy,spz:return if points=5 then clrgrp:select spline5:grpcent spx,spy,spz:return if points=6 then clrgrp:select spline6:grpcent spx,spy,spz:return if points=7 then clrgrp:select spline7:grpcent spx,spy,spz:return if points=8 then clrgrp:select spline8:grpcent spx,spy,spz:return if points=9 then clrgrp:select spline9:grpcent spx,spy,spz:return if points=10 then clrgrp:select spline10:grpcent spx,spy,spz:return if points=11 then clrgrp:select spline11:grpcent spx,spy,spz:return if points=12 then clrgrp:select spline12:grpcent spx,spy,spz:return if points=13 then clrgrp:select spline13:grpcent spx,spy,spz:return if points=14 then clrgrp:select spline14:grpcent spx,spy,spz:return if points=15 then clrgrp:select spline15:grpcent spx,spy,spz:return if points=16 then clrgrp:select spline16:grpcent spx,spy,spz:return if points=17 then clrgrp:select spline17:grpcent spx,spy,spz:return if points=18 then clrgrp:select spline18:grpcent spx,spy,spz:return if points=19 then clrgrp:select spline19:grpcent spx,spy,spz:return @MARKPOINTS group d if points=0 then clrgrp:select mark0:grpcent spx,spy,spz:return if points=1 then clrgrp:select mark1:grpcent spx,spy,spz:return if points=2 then clrgrp:select mark2:grpcent spx,spy,spz:return if points=3 then clrgrp:select mark3:grpcent spx,spy,spz:return if points=4 then clrgrp:select mark4:grpcent spx,spy,spz:return if points=5 then clrgrp:select mark5:grpcent spx,spy,spz:return if points=6 then clrgrp:select mark6:grpcent spx,spy,spz:return if points=7 then clrgrp:select mark7:grpcent spx,spy,spz:return if points=8 then clrgrp:select mark8:grpcent spx,spy,spz:return if points=9 then clrgrp:select mark9:grpcent spx,spy,spz:return if points=10 then clrgrp:select mark10:grpcent spx,spy,spz:return if points=11 then clrgrp:select mark11:grpcent spx,spy,spz:return if points=12 then clrgrp:select mark12:grpcent spx,spy,spz:return if points=13 then clrgrp:select mark13:grpcent spx,spy,spz:return if points=14 then clrgrp:select mark14:grpcent spx,spy,spz:return if points=15 then clrgrp:select mark15:grpcent spx,spy,spz:return if points=16 then clrgrp:select mark16:grpcent spx,spy,spz:return if points=17 then clrgrp:select mark17:grpcent spx,spy,spz:return if points=18 then clrgrp:select mark18:grpcent spx,spy,spz:return if points=19 then clrgrp:select mark19:grpcent spx,spy,spz:return ;________________________________________________________________CLONE____ @CLONES group b if loop=0 then clone trace,trace1:return if loop=1 then clone trace,trace2:return if loop=2 then clone trace,trace3:return if loop=3 then clone trace,trace4:return if loop=4 then clone trace,trace5:return if loop=5 then clone trace,trace6:return if loop=6 then clone trace,trace7:return if loop=7 then clone trace,trace8:return if loop=8 then clone trace,trace9:return if loop=9 then clone trace,trace10:return if loop=10 then clone trace,trace11:return if loop=11 then clone trace,trace12:return if loop=12 then clone trace,trace13:return if loop=13 then clone trace,trace14:return if loop=14 then clone trace,trace15:return if loop=15 then clone trace,trace16:return if loop=16 then clone trace,trace17:return if loop=17 then clone trace,trace18:return if loop=18 then clone trace,trace19:return if loop=19 then clone trace,trace20:return if loop=20 then clone trace,trace21:return if loop=21 then clone trace,trace22:return if loop=22 then clone trace,trace23:return if loop=23 then clone trace,trace24:return if loop=24 then clone trace,trace25:return if loop=25 then clone trace,trace26:return if loop=26 then clone trace,trace27:return if loop=27 then clone trace,trace28:return if loop=28 then clone trace,trace29:return if loop=29 then clone trace,trace30:return if loop=30 then clone trace,trace31:return if loop=31 then clone trace,trace32:return if loop=32 then clone trace,trace33:return if loop=33 then clone trace,trace34:return if loop=34 then clone trace,trace35:return if loop=35 then clone trace,trace36:return if loop=36 then clone trace,trace37:return if loop=37 then clone trace,trace38:return if loop=38 then clone trace,trace39:return if loop=39 then clone trace,trace40:return if loop=40 then clone trace,trace41:return if loop=41 then clone trace,trace42:return if loop=42 then clone trace,trace43:return if loop=43 then clone trace,trace44:return if loop=44 then clone trace,trace45:return if loop=45 then clone trace,trace46:return if loop=46 then clone trace,trace47:return if loop=47 then clone trace,trace48:return if loop=48 then clone trace,trace49:return 9 6 2,1,1,1,1 2 1 10,0,0 1 10,10 0,0,0,0,0,20,30,30,30,40 15,20,30,25,15,15,40,70,100,80 15,20,30,25,15,15,30,40,50,30 . |~.. |~ROBOTARM3D2 t BANNER BL1 nt ALONE CTL pt CAM2DEMOCTL st CAM3DEMOCTL ut COILMAKECTL wt @ FUNCTIONCTL zt GPYRAMID CTL |t ^RCHAIN CTL t ROBARM1 CTL Kt ROBARM2 CTL }t ROBARM3 CTL t ROBARM4 CTL t ALONEBAKPC1 t AIRPLANE3D2 k x qAIRPLANECTL m x =222wLOWARM_rr22pp,r,r,,,2,2,p,p                UPARM_[:X:X[XX,[,,:X,:X,,[,X,X                CLAW_::$[$[[::$[$[[$                   BASE_  ZZ  ZZ shoulderxxxxxxxx elbow__?x?xOOx?xx?xxOxO wrist__xxxxxxxx FORMILBMBMHDp! p!CMAP0 @`````BODY8~0? 0x300 00?80x0`0`g ϟϟfx0`0`g ϟϟf0`30`f3$ϟϟ&0o?0`fـ$ϐϟ&0`30`fy30ϟϟ30a0yy0?O9?a9y8@y8p?Ǐx8q0ǎy9<0f ϙ<0f ϙ<0g Ϙ70fLϙ70fLϙ310y930?x; CYBER CONTROL Stand-alone demonstration ; by Tom Hudson ; ; Run this program WITHOUT CAD-3D in memory! ; Set up CYBER CONTROL with watch buffer and overlay buffer ON ; Make sure ALONEBAK.PC1 and BANNER.BL1 are on drive A! mono ; Load background and overlay image loadbak L,"a:\alonebak.pc1",Y getimage "a:\banner.bl1",w,h ; Set initial banner position bannerx=-w ; Start watching the demo! watch on for angle=0 to 359 step 5 ; Set background ; Comment out the BACKSET command and watch what happens! backset L ; Plot banner offset=sin(angle)*50 overlay L,bannerx,100-(offset+h/2) bannerx=bannerx+6 next angle watch off:end ; Camera #2 demo ; by Tom Hudson ; ; Put camera inside CUBE1, make it watch CUBE2! ; NOTE: Group A is CUBE1, group B is CUBE2, group C is both cubes new:cube CUBE1,14:clone CUBE1,CUBE2 view wire:draft:mono:zoom 40:perspec 999 ; Define the object groups! group A:clrgrp:select CUBE1 group B:clrgrp:select CUBE2 group C:allgrp ; Set initial positions group A:moveto 1500,2000,-1200 group B:align L,-4499:align F,-4000:align T,4499 ; Get camera location group A:grpcent cx,cy,cz ; Now start moving CUBE2 and keep the camera looking at it! watch on for frame=1 to 50 group B:xlate 10,140,-120:grpcent lx,ly,lz group C cam2 cx,cy,cz,lx,ly,lz,0 superview next frame watch off:end ; Camera 3 demonstration ; bu Tom Hudson ; ; Positions camera and points the camera around in heading, pitch & bank ; All stereo focus values set to 200 as dummy value! ; Make a wedge at universe center, and a cube at 0,-2000,0 new:wedge wedge1,15:cube cube1,15 clrgrp:select cube1:xlate 0,-2000,0:allgrp view wire:draft:mono:zoom 20:perspec 999 ; Now point camera around -- camera always inside cube! watch on for heading=0 to 359 step 10 cam3 0,-2000,0,heading,0,0,200 superview next heading for pitch=0 to 359 step 10 cam3 0,-2000,0,0,pitch,0,200 superview next pitch for bank=0 to 359 step 10 cam3 0,-2000,0,0,0,bank,200 superview next bank watch off:end ; Coil spring maker program ; by Tom Hudson ; for 3D-Control language ; Version 1.0 ; ; Number of turns = Number of times spring makes a rotation ; Number of segments per turn determines fineness of coil ; Spring diameter is diameter of entire coil ; Spring thickness is size of coil "wire" ; Height increase per turn should be > thickness ; Color is 1-15 ; ; Try turns=2, segments=10, diameter=2000, thickness=200, increase=1000 alert "Coil spring maker program| by Tom Hudson" status totv,usedv,totf,usedf,objs availv=totv-usedv:availf=totf-usedf @GETTURN input "Number of turns",turns:turns=int(turns) if turns<1 then bell:goto GETTURN @GETSEG input "Number of segments per turn",segments:segments=int(segments) if segments<3 then bell:goto GETSEG @GETDIA input "Spring diameter",diameter:diameter=int(diameter):radius=diameter/2 if diameter<100 | diameter>8000 then bell:goto GETDIA @GETTHICK input "Spring thickness",thickness:thickness=int(thickness) if thickness<10 | thickness>=radius then bell:goto GETTHICK @GETINC input "Height increase per turn",increase:increase=int(increase) if increase<=thickness then bell:goto GETINC @GETCOLOR input "Color of spring (1-15)",color:color=int(color) if color<1 | color>15 then bell:goto GETCOLOR needv=4*(turns*segments+1):needf=8*turns*segments+4 if needv<=availv & needf<=availf then goto GOFORIT bell:alert "Spring too complex!":goto GETTURN ; Start spiral for spring core @GOFORIT thickness=thickness/2 springz=-4400+thickness turnstep=360/segments:heightinc=increase/segments inner=diameter-thickness:outer=diameter+thickness vertix=0 for loop=1 to turns for angle=0 to 359 step turnstep:gosub ADDVERTS:next angle next loop angle=0:gosub ADDVERTS ; Now link together vertices into triangular faces! faceix=0:vertix=0 for loop=1 to turns for angle=0 to 359 step turnstep addface faceix,vertix,vertix+4,vertix+5,1,1,0,color addface faceix+1,vertix,vertix+5,vertix+1,0,1,1,color addface faceix+2,vertix+1,vertix+5,vertix+6,1,1,0,color addface faceix+3,vertix+1,vertix+6,vertix+2,0,1,1,color addface faceix+4,vertix+2,vertix+6,vertix+7,1,1,0,color addface faceix+5,vertix+2,vertix+7,vertix+3,0,1,1,color addface faceix+6,vertix+3,vertix+7,vertix+4,1,1,0,color addface faceix+7,vertix+3,vertix+4,vertix,0,1,1,color vertix=vertix+4:faceix=faceix+8 next angle next loop ; Cap ends of spring! addface faceix,0,1,2,1,1,0,color addface faceix+1,0,2,3,0,1,1,color addface faceix+2,vertix,vertix+3,vertix+2,1,1,0,color addface faceix+3,vertix,vertix+2,vertix+1,0,1,1,color ; Send object over to CAD-3D! faces=faceix+4:verts=vertix+4 upload COIL,verts,faces:clrgrp:select COIL:home:bell:end ; Subroutine to generate vertices in spiral @ADDVERTS inx=inner*cos(angle):iny=inner*sin(angle) outx=outer*cos(angle):outy=outer*sin(angle) addvertex vertix,outx,outy,springz+thickness addvertex vertix+1,inx,iny,springz+thickness addvertex vertix+2,inx,iny,springz-thickness addvertex vertix+3,outx,outy,springz-thickness vertix=vertix+4:springz=springz+heightinc return ; CAD-3D Function object maker ; By Tom Hudson ; ; Set up function Z=function(X,Y) inside loop below ; Default function: Z=(cos(X)+cos(Y))*2000 ; Use grid size = 10, grid scale = 20 ; Try Z=rnd(0)*1000 with various grid sizes and scale=1 ; Try Z=(Y*sin(X)+X*sin(Y)) with grid size 37 and scale=25 ; Any function may be used to set Z! alert "CAD-3D Function generator| by Tom Hudson" status totv,usev,totf,usef,totob availv=totv-usev:availf=totf-usef @GETCOLOR input "Enter grid color (1-15)",color:color=int(color) if color<1 | color>15 then bell:goto GETCOLOR @GETGRID input "Enter grid size (5-37)",grid:grid=int(grid) if grid<5 | grid>37 then bell:goto GETGRID verts=grid*grid:faces=(grid-1)*(grid-1)*2 if verts>availv | faces>availf then bell:alert "Grid too big!":goto GETGRID @GETSCALE input "Enter grid scale",sc:sc=abs(sc) if sc=0 then bell:alert "Bad scale!":goto GETSCALE gstart=-(grid-1)/2*sc:gend=-gstart+sc/2 realstep=8000/(grid-1) ; CALCULATE GRAPH ALTITUDES ; EQUATION INSIDE THIS LOOP Z=f(X,Y)! ; KEEP Z<4500 vertix=0 realx=-4000:for X=gstart to gend step sc realy=-4000:for Y=gstart to gend step sc Z=(cos(X)+cos(Y))*2000 addvertex vertix,realx,realy,Z:vertix=vertix+1 realy=realy+realstep:next Y realx=realx+realstep:next X ; BUILD FACES (VIEW FROM TOP ONLY) faceix=0 for X=0 to grid-2 for Y=0 to grid-2 base=X+Y*grid addface faceix,base,base+grid,base+grid+1,1,1,0,color addface faceix+1,base,base+grid+1,base+1,0,1,1,color faceix=faceix+2 next Y next X upload GRID,vertix,faceix:clrgrp:select GRID:home:bell:end ; Create a two-color pyramid! addvertex 0,0,0,2000 addvertex 1,-1000,1000,0 addvertex 2,-1000,-1000,0 addvertex 3,1000,-1000,0 addvertex 4,1000,1000,0 addface 0,0,1,2,1,1,1,7 addface 1,0,2,3,1,1,1,7 addface 2,0,3,4,1,1,1,7 addface 3,0,4,1,1,1,1,7 addface 4,1,4,3,1,1,0,14 addface 5,1,3,2,0,1,1,14 upload PYRAMID,5,6:select PYRAMID ; CHAIN demonstration ; Creates a cube, starts animation on drive A ; It will chain to drive A when FREEDISK<200000 ; Have your printer on to see how it works! ; NOTE: I chain with LOTS left on disk for the demo. ; You could chain to another drive as well. ; Normally, you would chain when FREEDISK<20000 or so. new:mono:zoom 300:cube cube1,15:frame=0:chained=0 rstart "a:part1",m for camx=-180 to 179 step 10 frame=frame+1 cam1 camx,20,0 superview:record print"Free disk on frame",frame,"=",FREEDISK if FREEDISK<200000 & chained=0 then gosub dochain next camx rstop:end ; Chaining subroutine! @dochain:print "Chaining!":chained=1:rchain "a:part2":return ; Robot arm demo #1 ; by Tom Hudson ; ; Put ROBOTARM.3D2 on drive A load3d "a:\tomhudsn\robotarm.3d2" ; Reset internal tree structure treeclr ; Add arm parts to tree treeadd BASE,LOWARM,UPARM,CLAW ; Build tree! relate LOWARM,BASE,shoulder relate UPARM,LOWARM,elbow relate CLAW,UPARM,wrist ; Set joint restrictions limit LOWARM,-45,45,0,0,-180,180 limit UPARM,-90,90,0,0,0,0 limit CLAW,0,0,0,0,-180,180 ; Now let's watch the action! mono:draft:perspec 999:zoom 100:cam1 40,30,0:view wire watch on for clawz=0 to 90 step 10 load3d "a:\tomhudsn\robotarm.3d2" position CLAW,0,0,clawz treeset BASE superview next clawz watch off:end ; Robot arm demo #2 ; by Tom Hudson ; ; Put ROBOTARM.3D2 on drive A load3d "a:\tomhudsn\robotarm.3d2" ; Reset internal tree structure treeclr ; Add arm parts to tree treeadd BASE,LOWARM,UPARM,CLAW ; Build tree! relate LOWARM,BASE,shoulder relate UPARM,LOWARM,elbow relate CLAW,UPARM,wrist ; Set joint restrictions limit LOWARM,-45,45,0,0,-180,180 limit UPARM,-90,90,0,0,0,0 limit CLAW,0,0,0,0,-180,180 ; Now let's watch the action! mono:draft:perspec 999:zoom 100:cam1 40,30,0:view wire watch on for upx=-45 to 45 step 10 load3d "a:\tomhudsn\robotarm.3d2" position UPARM,upx,0,0 treeset BASE superview next upx watch off:end ; Robot arm demo #3 ; by Tom Hudson ; ; Put ROBOTARM.3D2 on drive A load3d "a:\tomhudsn\robotarm.3d2" ; Reset internal tree structure treeclr ; Add arm parts to tree treeadd BASE,LOWARM,UPARM,CLAW ; Build tree! relate LOWARM,BASE,shoulder relate UPARM,LOWARM,elbow relate CLAW,UPARM,wrist ; Set joint restrictions limit LOWARM,-45,45,0,0,-180,180 limit UPARM,-90,90,0,0,0,0 limit CLAW,0,0,0,0,-180,180 ; Now let's watch the action! mono:draft:perspec 999:zoom 100:cam1 40,30,0:view wire watch on position UPARM,40,0,0 for lowx=-40 to 40 step 10 load3d "a:\tomhudsn\robotarm.3d2" position LOWARM,lowx,0,0 treeset BASE superview next lowx watch off:end ; Robot arm demo #4 ; by Tom Hudson ; ; Put ROBOTARM.3D2 on drive A load3d "a:\tomhudsn\robotarm.3d2" ; Reset internal tree structure treeclr ; Add arm parts to tree treeadd BASE,LOWARM,UPARM,CLAW ; Build tree! relate LOWARM,BASE,shoulder relate UPARM,LOWARM,elbow relate CLAW,UPARM,wrist ; Set joint restrictions limit LOWARM,-45,45,0,0,-180,180 limit UPARM,-90,90,0,0,0,0 limit CLAW,0,0,0,0,-180,180 ; Now let's watch the action! mono:draft:perspec 999:zoom 100:cam1 40,30,0:view wire watch on lowz=70 for lowx=-40 to 40 step 10 load3d "a:\tomhudsn\robotarm.3d2" position UPARM,lowx,0,0 position LOWARM,lowx,0,lowz treeset BASE superview lowz=lowz+10 next lowx watch off:end P`p7wwx?x?????|??|? > > ???~xx?xx0?0???????~~?~?  >??? ?   ????~??~~???~~????~??~~@?>?~?@~?>?~??`~?~?~??p>?~?~? ?x? ?x?? ??x??x??? ?|? ?|?? ??|??|??~??~?~~?~??~???~~????~????~~~?????~?????????~?????~ ?? ?? ~??????~??~  T*=@2Ew"3DUfwplane8(((((d(; ; BEARING example script ; by Tom Hudson ; ; Fly a paper airplane around the screen, along a spline ; alert "Paper Plane by Tom Hudson" ; First, go get the paper airplane! load3d "c:\control\airplane.3d2" ; Now design the spline that the plane will fly along defpt 1,-3000,-3000,-2000 defpt 1,0,0,0 defpt 1,0,3000,1000 defpt 1,-1000,1000,1000 defpt 1,0,0,1000 defpt 1,1000,-1000,2000 defpt 1,0,0,3000 defpt 1,-1000,1000,2000 defpt 1,0,0,1000 defpt 1,0,-2000,0 defpt 1,-2000,-4000,3000 ; Now let's get things rolling! input "How many frames to generate?",frames:defspline 1,frames+2,S input "Watch(0), Preview(1) or Record(2)?",mode:if mode=2 then goto SETUP input "Start frame?",sf:if sf<1 then sf=1 input "End frame?",ef:if ef>frames then ef=frames input "Frame step?",fs:if fs<1 then fs=1 @SETUP center U:backgnd n:mono cam2 -4000,-4000,0,0,0,0,0:zoom 60:perspec 999 if mode=0 then watch on:view wire:goto RUNIT if mode=1 then watch on:view wire:backgnd y:clrbgnd:goto RUNIT sf=1:ef=frames:fs=1:view solid:rstart"c:\plane",m @RUNIT clone plane,plane2 group A:clrgrp:select plane group B:clrgrp:select plane2 for f=sf to ef step fs:A=f-1:B=f+1 bearing s1x(A),s1y(A),s1z(A),s1x(B),s1y(B),s1z(B),hangle,vangle group B:rotate vangle,0,0:rotate 0,0,hangle:moveto s1x(f),s1y(f),s1z(f) superview:if mode=1 then vtobgnd if mode=2 then record kill plane2:clone plane,plane2 next f if mode=2 then rstop:end watch off:end . }~.. |~HAND 3D2 t #ROBOTARM3D2 t ? LIGHT BL1 t ANIM2 CTL t  HAND CTL t - ROBOTARMCTL t HEAD SPN t >ANIM1 CTL t =2@A 0@` 0@P`swpalm___DD$]$]== DD$]$]== $                     armer51  pp pp finger41{{{{ finger21Q`-`-QQ`-`-Q finger11 Q `K`KQ Q `K`KQ finger31Q``QQ``Q finger12 JJ  JJ finger22 w,, w w,, w finger32   finger42 thumb12tQttQt thumb22BbbBqBbbBq k11b22nnnn k12er42nnnn k21er42nnnn k22er42nnnn k31er42[[[nnn[n k32er42[[[nnn[n k41er42@@n@n@nn k42er427@7@n7@n7@nn kt1er42nnnn kt2er42nnnn wrist42`OO)`)`nOnOn)`n) = 22&&' 0@`p uparm_ w w  8 w8 88w8 8 88                wrist___***QQ*hh*mPmP*_g_g*ll**                  lowarm_w?&?~w~&8w8?8&?8~w888~8&                clawm_ _*__7Z7w  ZY)*V_VV*_V_VV7VZ7VwV V VVZYVVV)V*<                                                                    elbow__:R_:R__:R:R uwrist_`P`P``PP wclaw_`>P`>P``>P>P base_ <Lw<wLoxN|Al:mBW/<n?<GN\./<la5X.B/<,/<*/<(N, 3Na2.?9NT./<//<*/<*?9N333j3hB.By8#QJ>NrJgH.?9NT3a5fBW?</9jNyf\BW?< /9jNyf\aaN^NuNVH>NX./<&/</<(/9jN>?9&?9?9(BgBgBgBgBgN\>?9&?9?9(?<Bg/9jNdBBgN Tp     <9 F~`$0H H@|02G Hƍ JFgSGJGl<9 ~`$0H H@|02G Hƍ JFgSGJGl. ?</9jNy\>?9&?9?9(Bg?</9jNd. ?</9jNy\>?9&?9?9(Bg?</9jNdBW/9jNX|3>?9/9jNz0\09`( y lRy ``( y oSy `` y  lRy `n`Jy oSy `X`>?9&?9?9(BgBgBgBg?<N\>?</9jNy \3-J>?< /9jNy \3-LaJ@mN`l>?9&?9?9(BgBgBgBg?<N\J g. ?<INTB ``||b@0@ PNBWNXJLN^NuNV/<}0y-L/NP//<0y-J/NPП-@09 Hr# 9Ѯ/<0y /NP# 9Ѯ.?<HNT# #ADJ f. p?<N:Tp``Jy-Jg@/</9ADNLP# 9м~# <ѹADJy-Lg#AD}ADJy g#AD 9ѹAD#ADaB"pN^NuNV`.\N09\`09dyfB .(/<*/<*/<*N 9)g8. ?<N:T|fJ g. ?<INTa`RJ faJ g>a\#>Nrf 3J`3 Ja1aHa2aZ`a``|(g"|)g`N^NuNV.?<?<NX#.>?<?<NXN^NuNV.?<?<NXN^NuNVH.a.<`SFJFg n0`H|\g<:f0FB.?<;NT. /.a."XJLN^NuNVa2?<>NTN^NuNVa1BW/<?<=N\=@l. P?<N:T`za+B?<N T./9?.?<?NP#"BBgN T>?<>NT 9"f. ?<N:Ta(a'N^NuNV0y"| 029HЁ-@aJ@ga0BW/<?<=N\=@mB?<N T`*.a$DJ@f. 2?<N:T`. 9Ѯ.AH/<?.?<?NP#nBBgN T>?<>NTJl. ?<N:Ta8a'a'N^NuNV./<la+XB9BW?9NNxT.Y/</<lNP=@.l/<a+X.a../<la+XJngJng./<a+BXp``B@N^NuNV>Nr3JyhmFJylf8-|n n> n?( n?( n??9hN\Pap`.///?<BgN3D3F3H3J.///?.?.?.?.?9j?<N.///?.?.?.?.?9jBgN>?.?.?.?9jNP3hJyhl.?<N:TB@`BWaBWBg/< "?<?9hN BWBgBg?<?<?9hN BWBgBgBg?< ?9hN By3>?.?.?.?9hN\P3laDpN^NuNVJylg >hNBJyhg >hN(Byl3hN^NuNV.t/<r/<p/<n?<?9hN.|/<z/<x/<v?<?9hN"|v |~p0Q yB@0(y=@0.y0.y y1yv y1yz y1yx09z=@29PAo09P=@33~309@y30929AAH309HS@309S@=@09y~S@309nS@3309y3309n33<3>3@09>nS@3B3D3F3H09Fn3JN^NuNVavJ@gaN^NuNVBna$.?<?9N XBBgN T`.*///Q/]/YB/<\BBBBB?<?<?<?<N8=@.*/<*/<*/?< ?9hN.g809hnf*>?.NrTyhf>?.?<Bg/9N* =@o >a`09no09Bno09nl.*//]/YN .g>NN|>?9aT0.yH30.yH3aaN>?9aTBW?9NNxT>?.a#T.g409\`a~``BWBgBgBg?< ?9bN `09byhf.d?9ba$T`J g. ?<INT=|>hNBByl`J"gd09byhfT09d`4a`FaJ`@aaaxa~`.axaDafal```J@gȰ|gȰ|gȰ|g``0J"g >da ```||b@0@ V PN.g~0y"| 029HЁ-@0.`>aJygBSy`aaa`*09yla09S@yfaf` BRyaJava|`a`a&` .ܰ"laVaaN`aFapa>`Jyga,Bya"`a0yD30y"| p2yD2QS  fUyaa`,J"g" .ܰ"la0.|g>/.aX`.aa~`Jgana nS  f2 o( nU  faf.Uaja*`.SaJa`a.?< aTR.?< aTaa`P0y"| 0"l2aa a`"aa \a`a ` a `a%`a&`.aJ@f. 2?<N:Ta .aaVaL`aJB.`.?< aJTRR. .ma"`a`a%`zaJ@ga`ja`bN_`Za`TabJ@ga`F0.|@J.ga..H?aTa``H | rW hlNJnf`rN^NuNV 9м-@>?< n?( n?( n?( n?Bg?./9N.*/<*/<*/<*Bg?<?<N>Bg n?( n?( n?( n?Bg?./9N0.`:a>J@ga`Ba<`/9paXBWaaN^NuNV0.`hBWBg/< "?<?9hN `VBWBg/<I?<?9hN `4BWBg/<[?<?9hN ``J@g|g|gN^NuNVH 9Ю./9N?xX<09醰yl\yoT0S@3(.BEBG` .a(RGRE09H@m` RE.a(09됐yR@ym` ByB:SE.a a 3a3 aa JLN^NuNV>NN|BW?9NT.///?< ?.N`./. aXJ@g09hnf.Q/a,X.?<aT>?9a JT.Q?9NhT>?.?.?.?<Bg/9NdJy g.a By `ap>?9a T.///?< ?.NJngJnf.?<?9N XaRBW?9NNxTN^NuNVH..<. :.09y=@>NN|>?9NTaJ@g" m l>?9N>TBD*G  gj330y30.y30Fyo:9鈚F.??/<N>P83N0DylD0FP@=@=n=y0.yS@=@.?9NhTBW?9N>TJDg6=D"l**GBD`  f>?0Wa TRDnmJL N^NuNVH ..=y#(|*|DBF`.a)@ ,:XRFym3a JL0N^NuNVHBG`*0G"|D>?Bg0G"|/0aPRGyma BW?9NNxTJLN^NuNVH< ..*G¾"m `*`Rg"m"m.9"SRy RJL N^NuNVH< ..Jf `>UJn ByB`.*G`SJmH"MHA@SDfRSy JL N^NuNV.Q/. aX.Q?.?9N XN^NuNV n "n0T n "n0T n0"n2)AS@"n 2T n0("n2)AS@"n 2N^NuNV n> n0(W n ? n 0(WNT=@ n> n0(W n ?( n 0(WNT=@ n> n ?NT=@ n> n ?(NT=@ n 0 n 1n0.n"n 3@0.n"n 3@0.no 0.nnB@`pN^NuNVap# # ajaN^NuNVJ"gV0y# 9  o  g# a`  g .aN^NuNVJ"gR0yRH"| 0S#  9  l# a`  g .aBN^NuNVaaaZBWBgBgBg?< ?9hN ByN^NuNVa/<NN|../<./.?<?9N 0n "|D>?. Bg0n "|/0a^PBW?9NNxTa N^NuNV-yJg(Bn`.a-@Rn09醰nn.alN^NuNV0y"| 0"lD-yBn`$.a-@09yynRn09醰nn.aN^NuNVa.aaaBa N^NuNVRn non| `40.H H@|0"| ".HH0.H =@S. .nN^NuNVH < J"g<(y"*y./ N>X<309R@383 JL0N^NuNV>?9aTBW?9NNxTN^NuNVH>.<. JGmyl>?9NT>?9NT>?9NT0y=@0y=@0.yS@=@0.yS@=@>NN|.Q?9NhT>?9NNxT>?9NTBW?9NTBW?9NTJLN^NuNVJygSy`>JygSy`Jga`By`0yD3axN^NuNV y2y"Q4y0H=@Ry n g09S@yn"09S@yoRy`aByN^NuNV0y"|DJpf By`0y"|D00ynd0y"| p2yD2QS  f0y"|D00S@3`0yD309S@yn09U@3JylByN^NuNV09yo 3JylBy`09醰yn09S@3N^NuNVH 9"m. 2?<N:T`09S@yn$ . g . g>?<NT`J"f y #"B3D=|`&0n 0nDBPRn09醰nl . f3B3By`By3ByBya>BgBg/9aPBW?9NNxT`.9ޮ 9й"-@ 9" ././.RN>P y  R" .  lR .  lR  . f09R@2yD2Ry09S@yfb0ySH"|D>?9Bg0ySH"|/0aP . R2y"aBy``0=y0y"|D>?9Bg0y"|/0a8P . R2yRI"09R@=@`0n"|.a?.Bg0n"|/0avPRn09醰nnX3ByRyBaL`0yDRP0y"|D>09W?9?90y"| 029HЁ/aP09R@=@`0nRRn09醰nlRyaBW?9NNxTJL0N^NuNVH..J"g*G  fBW/aX` 9"./ R/ N?0PS" lS  lS <9RF`0FSRFyo0yDSP0y"|D>09W?9?90y"| 029HЁ/aPBW?9NNxTJL N^NuNVHJfp` 9й"mB@`h*y"J"g 9"./ й/N>P 9ѹ"B./<AH 9Ю/N?0PpJL N^NuNV . йİm <-@ J o:. 9Ю/ <AHй/N?0P . ѹ#N^NuNVH..0yRH, FS  fSy -@Jn g./aJX`B 9". й/ й/N?0P09R@=@`b0nRH"| 02n"0n"| 02nSI"2nSID2Rn09醰nn ."=y0ySH"|.a/0y 0y"| 02ySI"2ySID23a JLN^NuNV0y"| 0"m2Jg*.af#Rya.a?.Bg0n"|/0arPRn09醰nnBW?9NNxTaN^NuNV=|=yBn=yh=yD=yF=yH=yJ.?<?9NDXN^NuNVH>. ` SG0GBJGfJLN^NuNV09醰yobBWa8 yg BWBgBg?<?<?9hN BWBg/< "?<?9hN 3By` 09됰y8gb09H=@ no=|09鎰ng(BWBgBg?.?<?9hN 33809H29H//<0y/NP/NLP=@09錰ng*BWBgBg?.RW?< ?9hN 3>aBWBg/< "?<?9hN N^NuNV-y09醰yn/<0.H/09H29H/NP/NLP=@0.yg~B nl BBy`N0.yl` .aR-@0.yf`&0.yo` .a-@0.yfa.aaaN^NuNV./<DaxXBBa&avN^NuNV  g  gp`B@N^NuNVB"# # ByByByBy3 Bn`&0n 0nDBPRn n)mN^NuNVBnBnJ"g.*/<*/<*/<*/<*/<*B/<\BBBg?<?<?. ?.?<Bg?<?<?<N8=@.f.Q/]?<?<?. ?.Nn nn nol=ya0y# 0.Hya0yRH"| 0S# .a3aN^NuNV`R nJf n H"nR RJ@fN^NuNV n H"nR RJ@fN^NuNVHBG`RG nHRJf0JLN^NuNVH>.BF`nl n2G RRGRFnm nBJLN^NuNVH/</9 NPм#/</9 NPм#j/</9 NPм#/</9 NPм#BG`0 @"|B@00`b0м @2Ҽ"A"i !Q `D0 @"| 0 м2Ҽ"A#@ ``|g|g|g0м @0((1@0м @0(*1@0м @0((1@0м @0(*1@RG|+mBG`0м @2Ҽ"A"Q 0м @2Ҽ"A"i!Q0м @2Ҽ"A"i!QRG|mrJLN^NuNV.A/<A?9N\N^NuNV.Y/9A?9N\N^NuNVH.a>`0G \gSGJGl0GB(JLN^NuNVH~ `*0.H H@|02G0.H =@SG|n> ?<-?</</.N  > ?<-?</</. N .g/<aXBWBg/<?<?9hN JLN^NuNVH.a<0F (.f 0FB(.a>SG`, |0pH` `2````|.g|:g|\gSGJGl.i/<aTXJLN^NuNVH./<&/</<(/9N>?9&?9?9(BgBgBgBgBgN\.?</9Ny\>?9&?9?9(?<Bg/9Nd>/9NX3>?9/9Nz0\>?9&?9?9(BgBgBgBg?<N\.?</9Ny\ yg0BG`$0G / |0pH?a"T _RG|ma JLN^NuNVH. a$>JGg0y"| 029HЁ-@ ."l0y"| 0й#n3r# v3t 9"2HR-@,.`H й.N=J@g2Jyrf3r>09rWSW 9n/aX`Ro.$?< NrTJLN^NuNVH. <`o<{l H|``HJLN^Nu o"yv29tB@Ryr  fR#nByr<am <zn< fSAf0<Nu o"o0<""""""""S@fNu o0<BBBBBBBBS@fNu#z3~/<>N?<&NN\NV>%NNN^Nu{|Jy~k"L 9ffg`NupNu o2/4/ "o 0@BlH@ @ g| fp0RA`0Nu o"oB@< `fR@mNu"o$o"/ $ 途BA&N""""""""""""""""SlNu"o$o"/ $ 途BA&NSlNu o"o0<< jfR@`Nu o"oB@BA0<0m<9o<Am<Zo<am<zoB1NuR@|gRA` o"oB@$|LyLg.BA02fJgRA|f2A |L"NuPR@`0?<aT` n2yT +fJEf0yT"n0H`.aBE``>?<atT`v`|0yT"n0H`6>?<!aLTRyT`H`(>?<#a2TRyT`.`` |=gİ|>g>?<a T` ` n2yT (=f>?<"aTRyT`>?< aT``BW?<(aT``BW?<)aT``>BgaT``>?<avT`x`~>?<a`T`b`h>?<aLT`N`T>?<2a8T`:`@>c?<ca$T`&`,aJ@l`ZBE```H |$jrW h\N.N629TVAAmD.$ .29THЁ/N@X=@JnmTyT>?.ZWaTBE`. .29THЁ/N?X=@Jng./a?lX8JDm0.S@yTBE0D"|LJpg6 n2yT ((f>?Wa T`3-p` `* |2yRB0yR~ RyR```3p` 3p` |JyPgT>9PSG`F |2yR0G Pcf`0yR2G0RyRSGJGlByPBF` 0FJf00yP,/0F"|~ 0 _ RyP` 0F"|00` yPm20yPUH,/0yPSH"|,/00yPUH"|,/0NTP _ SyP` @` yPm0yPUH,/0yPSH"|,/00yPUH"|,/0N2P _ SyP` `  yPmf0yPUH,/0yPSH"|,/00yPUH"|,/0NnP _ SyP` t` yPm/<0yPSH"|,/0N6Pf3/p` T0yPUH,/0yPSH"|,/00yPUH"|,/0NP _ SyP` `  yPmf0yPSH,/0yPSH"|,/0NRX _ ` ` yPm0yPSH,//<.F0yPSH"|,/0NP/NX _ ` 6`x yPm0yPSH,//<.F0yPSH"|,/0NP/NX _ `` yPmh/<.F0yPSH"|,/0NP-@0yPSH,//.NX//.NX/NP _ `d` yPm0yPSH,/0yPSH"|,/0NX _ ``\ yPm/<0yPSH"|,/0N6Pl<0yPSH,/0yPSH"|,/0/<N2P _ `` yPm00yPSH,/0yPSH"|,/0NX _ `Z` yPm/<0yPSH"|,/0N6Po6/<@0yPSH"|,/0NTP/NX#d`4/<@0yPSH"|,/0N2P/NX#d0yPSH,//9dNX _ `` yPm0yPSH,/?<NrTH/NX _ `L` yPm>Nr|?=@0yPSH,//<O0.H/NX/NP _ ``00F"|>Wa3Jygp``` yPmH0yPSH,//<.F0yPSH"|,/0NX/NnP _ `b` yPm0yPUH,/0yPSH"|,/00yPUH"|,/0N6PgB@`pH/NX _ SyP``* yPmt0yPUH,/0yPSH"|,/00yPUH"|,/0N6PmB@`pH/NX _ SyP`n` yPm0yPUH,/0yPSH"|,/00yPUH"|,/0N6PnB@`pH/NX _ SyP``6 yPm0yPUH,/0yPSH"|,/00yPUH"|,/0N6PoB@`pH/NX _ SyP`z` yPm0yPUH,/0yPSH"|,/00yPUH"|,/0N6PlB@`pH/NX _ SyP``B yPm0yPUH,/0yPSH"|,/00yPUH"|,/0N6PfB@`pH/NX _ SyP`` yPm/<0yPUH"|,/0N6Pg@/<0yPSH"|,/0N6Pg0yPUH, A`0yPUH, SyP``0 yPmz/<0yPUH"|,/0N6Pf&/<0yPSH"|,/0N6Pg0yPUH, A`0yPUH, SyP`V` yPm0yPUH,/0yPSH"|,/0NX?0yPUH"|,/0NXHH@H/NX _ SyP```|2b@0@%* PN0F Po yPl`80F8|/<@0yPSH"|,/0NTP/NX6JCm0DLPm 3-p``0DL-P0yPSH,/ n2C 0 _ ``RFyRm yPn n ,pJLN^NuNV0.H=@0.HH@=@ yPlp`t/<@0yPSH"|,/0NTP/NX=@0n#JPlp#`,Jnm0n"|#00nnp$` 0n"|#00S@=@0n"|#00S@H/NX/0yPSH"|,/0NP-@/<A/.N6Pf0.`0yPSH,/0.P2.AHЁ @"| 0 _ `0yPSH,/0.P2.AHЁ @"| 0 _ `L0yPSH,/0.P2.AHЁ @"|n 0 _ ``J@gP|g|g`0n"|Jpg0.2n2AT@=@/.0.H/NX/NnP-@>/0n"|?00n"|#?0/.a> 0yPSH,/0n 6 _ `0.`/.0.H/NX/NnP.?.09PS@@Hм,/0.Pм/a `/.0.H/NX/NnP.?.09PS@@Hм,/0.Pм/a `j/.0.H/NX/NnP.?.09PS@@Hм,/0.Pмn/a: ``J@g|gJ|gB@N^NuNV0.y|lB@`(0.yo09y|T@` 0.y|R@N^NuNV n f`-|/. ?.aTH/NX/N6Pn0/. ?.RWa|TH/NX/N6Po-|A`:-|>aF??.0. WSWa4T_=@Jngd0.H/NX//. ?. SW?.aBP/?.aTH/NX//. N2P/NnP/NP-@>RWa??.0. WaT_=@Jng|/.0.H/NX//. ?. SW?.RWaP//. ?.0. WaXTH/NX/N2P/NnP/NP/NTP-@ .N^NuNV3|0. S@3p-@-@-@Bn`.?.?.aX-@/.0.P2.AHЁ @"|/0NnP//.NTP-@/.0.P2.AHЁ @"|/0NnP//.NTP-@/.0.P2.AHЁ @"|n/0NnP//.NTP-@Rn0.n m( n n!n n!nN^NuNV nlBn0.=@=@`v/.NX=@0.U@=@0.V@=@Jnl Bn=|0.no0.[@=@=n0.H/NX//.N2P-@=|0.@HЮ-@-|Bn`-|ABn`^0.ngP0.nH/NX//./.0.H/NX/N2P/NnP/NP-@Rn0.no/. n2n/0NnP//.NTP-@Rn0.noN n N^NuNVHBFBG` n0pH`pF<`JFf./<,0HЮ/NAPJ@fVG`./<,0HЮ/NAPJ@fZG`\./<,0HЮ/NAPJ@fZG`60HЮ.R0HЮ/N6pX`H``| gZ|"gHRG.N6Gn(JLN^NuNVJyPg0yPSH Pcgv nf0yPSH PgX0yP"|0Hn m@ |2yRSyP0yR2yP0RyR`l0yP00. 2yPRyPN^NuNVJyPf 3p`\0yPSH Pcg> |2yRSyP0yR2yP0RyR`SyPpN^NuNVHBF>0yT"n0H`V N2G2yTQRyTRG``NJFg3p`| N2G2yTQRyTRG```|.| b@0@% PN0GB(./aHXJ@o. |2yRB0yR~ RyRp` 3pJLN^NuNVH.N6=@BF:=nBG`t n0pH`LJEg3p`jz`N`LRF|n|o3p`H=G`*3p`4``|-| b@0@&& PNRGnm=n-|BBG`V n0pH`2/< /.NP"n1pH|HЁ-@``x``H |&Zr W h,NRGnm>.RG`F|nF/< /.NP-@/< /.NP"n1pH|HЁ-@RGnm/. /.NX//.NX/NP _ JEg/. n /NRX _ pJLN^NuNVH 9"mp`BG`d yPR.H`2`R`B`@JGfJnf6n m 3p`<0GRG``| gȰ| gư| g` 9"m0GBpJLN^NuNVB?<N TB`.Bga"TJ@mBW?<K/a\|fBBgN TN^NuNVHBG`00G/?Nrl8ByL0<@3x30<3z3B3|3`83L0<3x30<3z3B3(|3B@3333~~`(0G"|t002G22GT2RG| m>Nr#`BG`0G#00G#BPRG|mB@33x333N3:3h3*B@3-N33# /</9NLP33BG`0GP RG|m.?<N TBy`>RWNBB@33n33L yfBW/</<,N@P.U/</</<N nfBF`#p>?<K/a~\80`63|3`4BF`0.a<JFn3``|gذ|g|gRy ymJym>?<>NTJyhgNJy:gNJyg.,BgaT.BgN TJFlJyg>ap`pJLN^NuNV3J gp`.?<HNT# J n.,?<N:Tp`/</9 NLP# 9м~# 9м}# 9м}# 9м}# 9м}##PpN^NuNV.-!/N6pX0nSH"|#0./N6@X.-&/N6@X.?<N:TN^NuNVH3BE<BG`.JFfRy30G ;fp`0F2GQ n0pH`pE:`JEf0FB(.aJ.f|`JyfD .@f .a8JDg 3p``.aJ@lp`|`pJyng Syn|`\ .@f|`P.af`Np`N`|`p`D``|gJ@g|g``J@g8|"g |:g"RGRF.N6GlpJLN^NuNVJy(g .BgaT3.Y/.NA*X=@Jnmx .2.HЁ-@=|0.`:.a=@`>.a=@`..aT=@`.aF=@`.a=@`.ab=@ nf .29LHЁ./.N6pX`(`.a =@`.BgarT=@B?<N T`.a=@`JyfB@`8By=|`f.?<a T=@`P.a =@`@.a=@`0.N.=@`.NX=@` .N=@`.N=@`.N=@`.N"=@`.N=@`.N=@`.N=@`NN=@`.N=@`n.N=@`\.N=@`J.N=@`8.N=@`&.N=@`.N =@`N6=@`N~=@`.N=@`.N=@`.N=@`.N=@`.N=@`.N=@`z.N =@`hBWN=@`X>N=@`F.N=@`4>N@=@`"BWN@=@`N=@`>/.NX=@`>/.NX=@`BW/.NX=@`>/.NX=@`>/.NX=@`>/.NX=@`v.N=@`dNF=@`V.Nn=@`DN0=@`6.N^=@`$N=@`.NZ=@`.N>=@`.N=@`.N=@`>/.NX=@`BW/.NX=@`.NB=@`.N=@`|.N=@`j.N=@`XN=@`JN=@`/.NʚX=@`N\=@`.NN=@`.N=@`.N&=@`.N=@`N=@`.N=@`.Nv=@`.N=@`tN =@`f.N.=@`T.NX=@`B.N=@`0.N0=@`>/.NnX=@`BW/.NnX=@`.N=@`>/.NX=@`>/.NX=@`.Nx=@`.N=@`.ND=@`x.Nv=@`f.N=@`T.N=@`B.N =@`0Jyg.$?< NrTBn`N:=@`.NV=@`.N΂=@`.N =@`.N~=@`.N~=@`.N.=@`.Nv=@`Nl=@`tBWNͶ=@`d>NͶ=@`T>/.NX=@`>BW/.NX=@`*BW/.NX=@``|vb@0@& PN0.``.//.aHP3Jygp` n2n =fnJyfB@`j./ .2.HЁ/RaPJng(./aϮXJ@m n B@``3p` 3pN^NuNV\H?JyfB@`nByv. N6HЮ @ (,f. N6HЮ @B(BC. a>8JDl3p`BG`>P0G"|?00G"|.?0/. /N6 ."f\|BE`0F ("g$0E2Fi`RFRE.N6Fn0EB(`.`?.aTJ@lB@`x`6.\/a^XJ@lp`VBW/.\?.a \J@lB@`>.-1?.aJTJ@lB@`&RGDmJCg.-3?.aTJ@lB@`B@JLN^NuNV.a=@ ng3p`>?</.Nƪ\3Jygp`JyfB@`~09`4Bn`D=|`<=|`4=|`,=|`$=| ````H |(rW hN>??9&?9?9(BgBgBgBgBgN\.?</9a\.-4?</9a\>?9&?9?9(?<Bg/9Nd.BgN T>/9NX3>?9/9a\>?9&?9?9(BgBgBgBg?<N\ yf Byp`Z.?</9a\./apXJ@l >a^` n .?<N TB@JLN^NuNVH?BD:<.N66JCfB@`BG`b n0pH`HpF<`LJFfH|(m 3p``0E.00E0REGmp`>8RD`` |"g|,gRGCm0E.00E0REGmp`0JLN^NuNVH=|BG`>0. W/.a"X|g=GRGnm0.JLN^NuNV n2. 00 N^NuNV>?<?9?9&?9?9(Bg?. /.NN^NuNV0. Ю @-h n-P./.N6pXN^NuNV. n2. /0 N6pXN^NuNV0. Ю @-h n-P./.N6pXN^NuNV>Bg?9?9&?9?9(Bg?. /.NN^NuNV3./<-5/.NAP=@Jnlp`.Q/<-7/.NAP=@Jnlp`=|./<-P?.?././N6 0.@HмL./a XJ@m>P?.?././N6 0.@HмP./aXJ@mrJng*0.@HмP. .2.HЁ/aXJ@mD`0nP A0nP p09R@2nP2B@` 3pN^NuNVHJyfB@`.ab>JGlp`0G"|LJpg3-p`0GPJl3p`0G"|P/00GL/NTP /<0G"|P/0N6Pm00G"|P/00G"|L/0N6PoB@`T`.0G"|P/00G"|L/0N6PlB@`$0GP3n0GP#pJLN^NuNV.U//.a|PJnfp`. /avXJ@lp`pN^NuNVH./.N?X>JGg.Y/ahX<0` 3pJLN^NuNVJyfB@`*.n/</.N@,PJ@l 3 p`pN^NuNV.L/<-C/.NAP=@Jnl3p`JyfB@`>P?.Bg/./N6 .N6J@g@./aPXJ@m$/</.N6Pg TyLp``p` `3pN^NuNVJyfB@`v ym 3p`^0y p09R@2y@2.n/</.N@,PJ@l 3 p`RypN^NuNVJyfB@`FJyg4Sy0y@3n0y#p` 3 pN^NuNVJyfB@`JygSyB@N^NuNVH./.N?X<JFg./<d/N@,P:JEln yNl^BG`0G29NAHN2GRG|m0yNN p09R@2yNN2RyN`p ``p ``p `B@JLN^NuNVJl .D-@0."n ` 0."n Bn=|=|-|`p/./.NLP-@0.nl .H|02n Rn/./.NP/ .-@RnSn/< /.NLP-@ nm0n BRnN^NuNVH>/<) /. NtP.) N6>SG`: |) 0pH`0G) B`0G) BBG``|.g|0g`SGJGnJng.) ?.aT``.) ?.aTJLN^NuNV> ?<-?</<) 0n/ar Jn g.) BgadT``.) BgaTN^NuNV> ?<-?</<)*/.a$ Jn g.)*BgaT`` .)*BgaZTN^NuNV. ?.aFTJ@lp`8> ?.?<NX> ?.?<NX0nBPpN^NuNVHBFBF`>?<NTJf8RF|ixm.)>?<N:T|f0nBPp```BG` n 0pH`vBE0G (\fRG`@RG n 0pH8|JDm| n02 A:`>?.?<NXSG`( n 0pH>?.?<NX` `|\g`RG. N6Gnf0n0pJLN^NuNVH. /.N?X>JGl&BW/</.N@PJ@l 3p``0JLN^NuNVH.a:JEf3p`vJyfB@`hBG`Z.0G"|.00HЮ/N?X=@Jng./N?X8JDm3p`.Y/0G"|.00HЮ2.HЁ/aPJ@mJ./aXJ@lp`/.NX=@Jno/<N/.N6Po3-p`z0.yo 3,p``>/9 /N@P-y BF`0F RFnm0.@Hѹ 0.yRGEmB@JLN^NuNVJygZ./.N?X=@Jnfp`./aX=@Jnl 09`p nlp`b n2n (f0nLJPfp-`:.U/ .2.HЁ/afPJ@lp-`./a XJ@l 09`/.NX=@Jnm0n"|L00nnp-`0nL-P0.@HЮ"n"`,0n"|LJpgp-`|0.@HмL"n"`Z./.N?X=@Jnfp`B n2n (f(.U/ .2.HЁ/a`PJ@lp-` n 0B@N^NuNV>= /.a?jX3Jygp`B@N^NuNV>=!/.a?@X3Jygp`B@N^NuNVJyl3p`r>?</.a>\3Jygp`LJyfB@`@BWBg?9?9?9?<="/<Na9JyTl 3p`B@N^NuNVHJyl3p`>?</.a=n\3Jygp`JyfB@`BG`?<0G0H0RG|m/<@/< WD/9NnP/NTP/NX3BWBgBg/<?<=#/<Na8JyTl 3p`B@JLN^NuNVHJyl3p`>?</.a<\3Jygp`JyfB@`BG`?<0G0H0RG|m~`H/<@/< WD0G"|/0NnP/NTP/NX?0G0RG|m09H3 ydl3dBWBgBg/<?<=$/<Na7JyTl 3p`B@JLN^NuNVJyl3p`r>?</.a;`\3Jygp`LJyfB@`@BWBg?9?9?9?<=,/<Na7JyTl 3p`B@N^NuNVHJyl3p`>?</.a:\3Jygp`JyfB@`BG`?<0G0H0RG|m/<@/< WD/9NnP/NTP/NX3BWBgBg/<?<=-/<Na62JyTl 3p`B@JLN^NuNVHJyl3p`>?</.a9\3Jygp`JyfB@`BG`?<0G0H0RG|m~`H/<@/< WD0G"|/0NnP/NTP/NX?0G0RG|m09H3BWBgBg/<?<=./<Na5JyTl 3p`B@JLN^NuNVHJyl3p`x n am n nH>|JGm|o 3p`@JyfB@`4BWBgBgBg??<=P/<Na4|JyTl 3p`B@JLN^NuNVJyl 3p`,JyfB@` BWBgBgBgBg?<=Q/<Na4B@N^NuNV>=R/.a9X3Jygp`B@N^NuNV>=T/.a:BX3Jygp`B@N^NuNVHJyl3p`~ nH`BG`.~`*~`&3p`Z``H |-prW hNJyfB@`4BWBgBgBg??<=S/<Na3<JyTl 3p`B@JLN^NuNV>=U/.a9tX3Jygp`B@N^NuNV>=W/.a9JX3Jygp`B@N^NuNV>/.a3X3Jygp`B@N^NuNV>/.a3X3Jygp`B@N^NuNVJyl 3p`,JyfB@` BWBgBgBgBg?<=Y/<Na22B@N^NuNVJyl 3p`@JyfB@`4BWBgBgBgBg?<=Z/<Na1JyTl 3p`B@N^NuNV>=/.a74XN^NuNVHJyl3p`.a2H3JygJylByp``JyfB@`T.a1>JGl 3p`8BWBgBg?9??<=/<Na1*JyTl 3p`B@JLN^NuNVBW/.a2@X3Jygp`B@N^NuNV>= /.a6FXN^NuNVHJyl3p`~ nH`BG`.~`*3p`^``|Bg|Wgܰ|bgڰ|wg`JyfB@`4BWBgBgBg??<=/<Na0HJyTl 3p`B@JLN^NuNVJyl3p`n>?</.a4\3Jygp`HJyfB@`='/.a3X3Jygp`B@N^NuNVJyg 3-NB@`^JyfJyl 3p`BJyfB@`6BWBgBgBg?.?<=)/<Na. JyTl 3p`B@N^NuNVJyl3p`Jyg./N*J@lB@`BWBgBgBgBg?<=*/<Na-JyTl3p`Jyhg. yP/N=XJy*g0. yP/(N=X./9?<N\>%NrJyLf(.D?<NrT>L/9N>"X`2.-P?<NrT>/9/|g3p`"0y. "f0y. (:f>P?9SW?9.RW/./N6 .&/</a2`PJ@lp`.&a2" n2y00H`BF`0|`,3p`~``|Mg|Sgް|mg԰|sg`JyfB@`RJyf"BW/<d/<D?<=/<Na*##&3L>Nrf #-P` #D yP#JFg yP#`B yP#JoJFg& yP#Jn3+p`~`B3 3"By$#&. ?<?96NDX.hN y̐hfJnn 3p`3:By2B@JLN^NuNVJy6l3p`JyfB@`Jy:f3p`>%Nr>NN|JyLf&.D?<NrTBW yP/N>"X`4.-P?<NrT> yP//%Nr.?<NrTJyLf>/9`N>"X` >/9`/|g3p`0y. "f0y. (:f>P?9SW?9.RW/./N6 .&/</a-PJ@lp`.&a-JyfB@`#<#&@3 3"By$#<&. ?<?96NDX.hN y̑hfJnla 3p` 3B@JLN^NuNV>N3 3"By$. ?<?96NDX.hN y̓hfBy:N^NuNVJyl 3p`,JyfB@` BWBgBgBgBg?<=/<Na%VB@N^NuNVHJyl3p`.NxP<|g3p`JyfB@`BWBgBgBgBg?<=/<Na$BG`d./<0G"|.00HЮ/N`P3Jygp`./.0GVH"|N00H/NX _ RG|mB@JLN^NuNVHJyl3p`~ nH`BG`.~`*3p`^``|Ag|Egܰ|agڰ|eg`JyfB@`4BWBgBgBg??<=+/<Na#JyTl 3p`B@JLN^NuNVHJyl3p`.NxP>|g3p`l>?</.a'|\3Jygp`FJyfB@`:BWBgBg?9?<?<=a/<Na#6JyTl 3p`B@JLN^NuNVHJyl3p`.NxP>|g3p` nH`BF`0|`,|`(3p```H |.rW hNJyfB@`t>?<090HЮ/a&t\3Jygp`D>?9?9?9??<=a/<Na"0JyTl 3p`B@JLN^NuNVJyl3p` nH`&Bn`6=|`.=|`&3p`^``H |.8rW hNJyfB@`8BWBgBg?. ?.?<=`/<Na!JyTl 3p`B@N^NuNVJyl 3p`T.a!3JygJylByp`,JyfB@` BW?<hBga8XJ@l 3p`B@N^NuNVJyl3p`.NxP=@ ng3p`>?9?9././<N6 n2y60H` Bn`4=|`,3p```|Dgڰ|Pgڰ|dgΰ|pg`JyfB@`^>?<090HЮ/a$$\3Jygp`03>?9?9aXJ@l 3p`B@N^NuNV.?. ?. ?.?<=t/<Na 09TN^NuNVJyl3p`l.a 83JygJylByp`BJyfB@`6BWBgBg/<?<=u/<Na8JyTl 3p`B@N^NuNVHJyl3p`.NxP:|m|o3p`ByBG`d n2G.2Q0H`00GBP`<0G0`,3p`~``|Ngʰ|YgҰ|ng|yg`RGEmJyfB@`LJyg3BWBgBg?9?9?<=0/<Na&JyTl 3p`B@JLN^NuNVJyl 3p`@JyfB@`4BWBgBgBgBg?<=1/<NaJyTl 3p`B@N^NuNVJyl 3p`@JyfB@`4BWBgBgBgBg?<=2/<NahJyTl 3p`B@N^NuNVJyl3p`JyfB@`Ry09̰ymBy>NN|BWBgBgBgBg?<=H/<Na.?<N T>?9NNxTJyTm>Jyhg6. yP/N=XJy*g. yP/(N=XJyTl 3p`B@N^NuNVHJyl3p`~ nH`BG`.~`*~`&3p`Z``H |.prW hNJyfB@`4BWBgBgBg??<=(/<NaJyTl 3p`B@JLN^NuNVHJyfJyl3p`N.NxP<|g3p`. nH`f yPJg yP-h`3p``V yPJ g yP-h `3p``,3p```|Lg|Rg|lg|rg`>P?9SW?90RW/./N6 .N6HЎ @ (.fL.N66H`BE`0z`,3p`0``|Ng|Pgް|ng԰|pg``3p`JyfB@`BW/?<=N\8JDl3p`.//.??N J@lp`0y2 yg0y2 YfxJyf"BW/<d/<D?<=/<NaBG`0GD2G0RG|mJyf"BW/<d/<D?<=/<NaHB@JLN^NuNVHJy-Lf3p`.NxP>|g3p`r>P?9SW?9.RW/./N6 .N6HЎ @ (.fV.N66H`(Bn`8=|`0=|`(3p```H |.rW hN`3p`JyfB@`./<090HЮ/N`P3Jygp`./<092HЮ/N`P3Jygp`HBW/?<=N\8JDl 3p` ././9?.?N JLN^NuNVHJy-Lf3p`t.NxP<|g3p`T nH`, yP-P`: yP-h`,3p`"``|Lgΰ|Rg԰|lg°|rg`JyfB@`>?<090HЮ/a\3Jygp`./9N=X.NAB@=@=@=y^=y=y=y09y^=@09y=@0.yl0.yBlJnmJnmJnl >.BnnJnl >.Bnn0.ym>.yRG09S@=@n0.yBm>.yBRG09BS@=@n .r3T .3VJyLf*.T/</?<?9NN .T/<t/?<?9NN Jyhg6. yP/N=XJy*g. yP/(N=XB@JLN^NuNVlHJyl3p` yzl3"p`JyfB@`xBWBgBg/<P?<=/<NaJyTl3p`B.NxP<|g3p`">?<09.HЮ/a8\3Jygp`Jym yo3p`>P?9SW?90RW/./lN6 BW/l?<=N\:JEmz./<@??<?NP-@>?<>NT @g 3p`BBG`(0G 629AH4BH҂ҼP"A2RG|m` 3p`a&JLN^NuNVJyfB@`NB"aN^NuNVJyl 3p`6BWBgBg/<P?<=/<NaJyTl 3p`B@N^NuNVJyl 3p`h>?</.a\3Jygp`DJyfB@`8BWBgBgBg?9?<=//<NaNJyTl 3p`B@N^NuNVJyl 3p`h>?</.a\3Jygp`DJyfB@`8BWBgBg?9Bg?<=//<NaJyTl 3p`B@N^NuNVHJyfJyl3p`Jy:g.0 ?<N:TB@`Jy-Jf.05?<N:Tp`.NxP>|o3p`JyfB@`0`HBy`J>?</.a\3Jygp`XJyo 3``` ` J@g|gByJyhf"Jy-Jg>NN|.N>.N>3hJyfLBWBgBgBgBg?<=I/<NaZ3X*BW/<d/<D?<=/<Na.` 3-N*Jy*g./9?<N\>%NrJyLf(.D?<NrT>L/9N>"X`2.-P?<NrT>/9/=V/.aX3Jygp`B@N^NuNV.NxP=@ ng3p`JyfB@`Jym 3p`l>P?9SW?9.RW/./N6 BW/?<=N\3Jyl 3p`B@3x3B@N^NuNVH.NxP<JFn3p`JyfB@`JyfJyl3p`BG`.Q/<0G"|.00HЮ/N`P3Jygp`/.0GVH"|N00H/NX _ .Yap3 yf6Jyxg&B@3x3#3np`&3Jygp` n RGFm8B@JLN^NuNVHJygp`BG.]/<?9?<?NP-@ g.>?<>NT33JGfp`x`F.H`&|op`b N2GnRG``"` p`J``| |/b@0@. PN0GB(JGfp`./N]XJ@lp`B@JLN^NuNVJyfB@`*Jym>?<>NT3ByB@N^NuNVHJyl3p` yzl3"p`.NxP<|g3p`JyfB@`>P?9SW?9.RW/./N6 BW/?<=N\>JGl3p`~BWBgBg?. ??<= /<Na b09T`:3p`H`D3p`:`63 p`,`(3!p```|g|gְ|g°|gB@JLN^NuNVJyfB@`2./</.N@,PJ@l 3 p` 3xB@N^NuNVHJyl3p`^ yzl3"p`F.NxP:n g3p`&JyfB@`BWBgBg/?<= /<Na 0JyTl3p` n fjBG`^./<0G"|.00HЮ/N`P3Jygp`/.0G06H/NX _ RG|m`jBG|`^./<0G"|.00HЮ/N`P3Jygp`(/.0F06H/NX _ RGRF|mB@JLN^NuNV.NxP=@ ng3p`@JyfB@`2>?</.a \3Jygp` ym yo3&p`09S@=@0n#JPm0n#00n#BP0n# Po3%p`0.P2n#2AHЁм @ 0.P2n#2AHЁм @ 0.P2n#2AHЁмn @  2n#RQB@N^NuNVH.NxP<|g3p`2JyfB@`$>?</.a \3Jygp` ym yo3&p`:9SE0E# Pl3#p`0E"|#00yo3'p`0E#0 n2y20H`V0E0`\0E# Pl0E0`0E0`,0EBP````H |/rW hNB@JLN^NuNVHJyl3p` yzl3"p`.NxP:|g3p`JyfB@`>?</.a \3Jygp`BWBgBg/?<= /<NaJyTl 3p`hBG|` N2F2G0(QRGRF|mBWBg?9?9?9?<=W/<NaTJyTl 3p`B@JLN^NuNVHJyl3p`.NxP<|g3p`JyfB@`>?</.a\3Jygp`Jym ywo3p`x~`.0G Plm0G Po 3p`FRG|m0y00y00y0B@JLN^NuNVHJyl3p`8.NxP<|g3p`JyfB@` >?</.a\3Jygp`Jym y nJym yo3p`~`.0GJPm0G Pwo3p`RG|m0y00y00y0:9Jyg|Jyg|Jyg|0y0B@JLN^NuNVHJyl3p`.NxP<|g3p`JyfB@`>?9?9././<N6 >?<090HЮ/a:\3Jygp`|Jym ywnJym y o 3p`J33BWBgBg/<?<=/<NaJyTl 3p`B@JLN^NuNVH.NxP>|g3p`JygJyhgB@`n.0U/N6pX>K?9SW?9.RW/./N6 .0Z/N6@X.?<N:TB@JLN^NuNVByJyhgByhJy*g./9BgN\>%Nr.?<NrTJyLf>/9`N>"X` >/9`/?.?.?.?.?. a& .N n02. |AfN^NuNV33By3 3 333.?<?9NDX=@N^NuNV n"n N^NuNVH.NxP>|gp`hJyfB@`\>?9?9././<N6 .Y090HЮ/N}XJ@lp`/.NX3B@JLN^NuNVHJylp`BG`0G,BPRG|Pm.NxP<JFnp`rJyfB@`dBG`$>0G"|?00G"|.?0/./<N6 .a:JElp`0. `0E,0`BWBgBg?<??<=X/<NaJyTlp``BWBgBgBg??<=X/<NaJyTlp``Z yO#.op(`.09#. м/N6pX0y#.0?</.a\>JGg0`|g3p`JyfB@`>?9?9././<N6 >?9?90/./<N6 .a<JFl 3p`6BWBg/<??. /<NaJyTl 3p`B@JLN^NuNVHJylp`>?</.av\>JGg0`lJyfB@`` n=U f <9333BWBg?9?9?9?. /<Na JyTlp`B@JLN^NuNV` n .f nB` R nJfN^NuNVH.N6>SG` n0pH``"`` |:g|\gSGJGl3p`h>A?RWBg/./. N6 >/.N6X??RW/./.N6 0G :f.0b/. N6@XB@JLN^NuNVHJyl3p`.NxP<|g3p`JyfB@`~>P?9SW?</./N6 BW/?<=N\=@Jnm&.j/<?.?<?NP ncjnFJnjm>.f/<?.?<?NPJn f n0fn n f n2fnJnfmJn f..h/<?.?<?NPJnhg nhfBG` 2AHЁ.4/<?.?<?NPJn f N2GJh4m~ N2G h4ml N2G h,4n\ 2AHЁ.l/<?.?<?NPm, N2G hjlm N2G hln RGnjmJ`>?<>NT3p`>?<>NT3j 3f"3h$A4#&Al#*Jn f"BWBgBg/< ?<=p/<Na` BWBgBg/< ?<=r/<NalJyTl 3p`` 3p`B@JLN^NuNVJyfB@`6 yPJo yP.N> yPJo yP.N>B@N^NuNVJyfB@`pJnf2 yPJo& yPJo yP. yP/(N=X`4 yPJo( yPJ o yP. yP/( N=XB@N^NuNVJyfB@`By#.B@N^NuNV>/.NX3Jygp`B@N^NuNVH.NxP<|g3p`XJyfB@`J>?9Bg/./N6 .a :JEl3)p`>?<090HЮ/Nƪ\3Jygp`BG`00G PLm0G Po3p`RG|m09yn09yn09yo 3p`b0EN00E.00E00E00E00En0B@JLN^NuNVHJyl3p`N.NxP<|g3p`.JyfB@` >?9?9././N6 .a 2=@>?9?90/./N6 .a =@JnmJnl3)p`>?9?92/./N6 .Nd=@Jnl3p`HBWBgBgBg?<?<=P/<NN¢JyTmxBWBgBgBgBg?<=Y/<NN¢BWBgBg?<?.?<=X/<NN¢JyTm,BWBgBg/?<= /<NN¢JyTl3p`0nn00n00n00n!JPl0n!0`B0n!=P0n"JPm0n"=P`0n"0B@JLN^NuNVH.NxP>|g3p`JyfB@`>?9?9././N6 .a<JFl3)p`z>?<090HЮ/Nƪ\3Jygp`H0F"|N00yo0F 2FN0`>0F"|.00yl0F 2F.0`0F 00F"|00yo0F 2F0`>0F"|00yl0F 2F0`0F 00F"|00yo0F!N2F0`>0F"|n00yl0F!N2Fn0`0F!N0B@JLN^NuNVHJyl3p`.NxP:|g3p`jJyfB@`\>?9?9././N6 .a8JDl3)p`B@3=@>/Y/\aPJygp`BWBgBgBg?<?<=S/<NN¢JyTmVBWBgBgBg?<?<=P/<NN¢JyTm*>.SG`|BnZ N2G>\/Z/a^PBWBgBgBgBg?<=Y/<NN¢BF`d N2F0( м.Nd=@Jnl3p`BWBgBg?<?.?<=X/<NN¢JyTmRFnZmBWBg N2G0h\"|?0 N2G0h\"|?0 N2G0h\"|n?0?<=T/<NN¢JyTl3p`XBF`@0F"N4G2)\"|~0H` N2G0h\"| Jpg6BWBgBg N2G0h\"| ?0Bg?<=U/<NN¢` N2G0h\"| Jpg6BWBg N2G0h\"| ?0BgBg?<=U/<NN¢`h N2G0h\"|!NJpg6BWBgBgBg N2G0h\"|!N?0?<=U/<NN¢``J@g|gN|gJyTmRF|mSGJGlB@JLN^NuNVH.NxP:|g3p`JyfB@` >?9?9././N6 .a$8JDl3)p`BG|` n2F.2Q0H`^0F"|.0p n2F.2Q0H|2G4~"N4G3@`$3p`D`H |0drW hNRGRF|mj0.ng0.ng0.ngB@JLN^NuNVHJyl3p` yzl3"p`n.NxP>|g3p`NJyfB@`@>?<090HЮ/Nƪ\3Jygp`BWBgBg/?<= /<NN¢JyTl3p`B@=@=@=@ nH`h09n=@`n09n=@`^09n=@`N09n=@`>09n=@`.09n=@````H |0r W h0NBWBg?.?.?.?<=W/<NN¢JyTl 3p`B@JLN^NuNV n POo 3*`| n 0P0"n RQ n Pg,0n"JPm0n"|">/. /.aP0n!JPm0n"|!>/. /.apPN^NuNVHBF`>BG`&0G2 "|0H"n1pHAfRG.N6Gl0` RFy#.mpJLN^NuNVHJyl3p` yzl3"p`.NxP<|g3p`JyfB@`>P?9SW?9.RW/./N6 BW/?<JGl 3.p`8BWBgBg?. ??<= /<NN¢JyTl 3p`B@JLN^NuNV.NxP=@ ng3p`JyfB@`>?</.Nƪ\3Jygp`p09yH/NX-@09yH/NX-@09yH/NX-@.a=@.a =@.a=@0.`vJnfpZH/NX-@``fJno0<H/NX-@`B@H/NX-@``0JnfpH/NX-@`x``|gJ@g|g/<.F/./.NP/NX/NnP-@Jno/./<N2P-@`/./<GN2P-@.]/<09:HЮ/N`P3Jygp` n /<./.NP-@/./.NX/NnP//.NX//.NRX/NnP/NTP-@.af=@0.`JnfB@H/NX-@``0.`HpH/NX-@``@B@H/NX-@``(pZH/NX-@``|gJ@gư|g`6Jnf0<H/NX-@`|``|gXJ@gr|g/<.F/./.NP/NX/NnP-@Jno/<G/.NTP-@`/<G/.N2P-@.]/<09?<>NTB@` `.aJ@m09떰yxn09똰yzn09랰yg`3t3v3|.ajJ@ml/.09H/NX _ /.09H/NX _ 09S@3^09S@3`6``J@g|g|g,>?<>NT3p`>?<>NTB@N^NuNVHJng nf. /<}aX`. ng nf>W/. aXJ@lp``p`pJLN^NuNVH .r3h .3j0n 13l0n 1$3n0n 1*3p0n 13t3lBG`*BF`.??/<ha*PJ@lp`RFytmRGynmpJLN^NuNVH09|@@3|By~`."/<aXlp`J9"m\R9"9"Hy| <29~HЁ.9"HH/aTX9"HHlp`9"Hy~`n 9"gd9"HD@R@"9"Hy|.$/<aXJlp`VBG`0y~$Ry~RG9"H@mJy|f./<?.?. /.a pJLN^NuNV.f/<avXfB@`pN^NuNV09|@@=@.&0n/a y>oBy>a4J@lp` 9f1g .jaZ` np1@"n3@"n3@"n3@ n1y n1y n0(|H"n3@9H"n3@ B@N^NuNVH n0Hr"n2)H¼*@ n<( n0< n0 <FBG` M2GBRGFmBE`^BD`L 9f.??/.aPJ@lp`D`&J9f.??/.a0PJ@lp`"`p`RD9H@eRE nheB@JL N^Nu/:ڼ.gNugR kjklf`>k^g>k^g2k8<d,&B<ރeNuRid~S<Nu.NuJNu.NT<<XDxB묈<΄,<CNT,.N@$(< .BJk<FD<c~䯾o$`<D<c~DDl`z,3 @3B3D3F>lNn n02 n04 n06 n 08B@090N^NuNV3<>kNnN^NuNV3<3 >>jNnN^NuNV3<3 >3 @3B3D3F>iNnN^NuNV3<3 >>hNn n 02 n04 n06 n08B@090N^NuNV3<>gNnN^NuNV3<>fNnN^NuNV3<3 >3 @3B3D>eNnN^NuNV3<3 >3 @3B3D>dNnN^NuNV#3 <3>3@3B3D3F3H3J>/NnN^NuNV#3 <3>3@3B>+NnN^NuNV#3 <3>3@3B3D3F>*NnN^NuNV3<# >#NnN^NuNV>ONn n02 n 04 n06 n08N^NuNV3<# >NNnN^NuNV>MNn n02 n 04 n06 n08B@090N^NuNV3<3 >3 @3B>FNn n02 n04B@090N^NuNV## >ZNn n02B@090N^NuNV#>6Nn n 02 n04 n06 n08B@090N^NuNV3<# >4NnN^NuNV3<3 >3 @3B3D3F3H3J3L>3NnN^NuNV#3 <>2NnN^NuNV3<3 >3 @3B3D3F3H3J3L3N3P3R3 T3"V#$3(X3*Z>Nn n,02 n004 n406 n808 n<0: n@0NnN^NuNV3<3 >3 @>Nn n02 n04 n06 n08B@090N^NuNV#> NnN^NuNV3<3 ># > NnN^NuNV30.|Hм-@=|` nH2n2RRn nm.NB@090N^NuNV###<#0# #$#> aF30pN^NuNV>a*pN^NuNVH?BCB..,. f# <`hlDRCJlDRCn8fzB`0l :HGH`xe`Jge`|fD# D`# JLN^NuNVBBJlDRBJ lD RB0. -@0.2. An=@ .gDN^NuNV3 3jBy33N09N^NuNV3 3zBy33NN^NuNV3 3By33N09N^NuNV3 3By33N09N^NuNV# 3 3333N#N^NuNV# 3r3By3N#N^NuNV3 .N.N# 3m333N#N^NuNV3ByBy3N n 0 n0 n0^ n0` n1yd n1yh n1yl n1yp n0b n1yf n1yjN^NuNV#  . м #3&ByBy3N##^N^NuNV## .мZ#3dBy3  n 3N n 0###^#N^NuNV3{ByBy3NN^NuNV. N3~ByBy3N.NN^NuNV3 3 By33N09N^Nu   );>EJOU[afj#7CRVYimp "  %N  "    ,  6 ! @ , (   %'!#             -   + ! - " + # %$   Line # [3][Edit buffer full!][ OK ][3][Error opening file!][ OK ][1][No RAM for 3D-Control!][SORRY][1][WARNING: Partial file read!][ OK ]000K0000[3][WARNING: You are about to|reconfigure 3D-Control. The|current program will be lost!][ OK | Cancel ]:  !&.2;<=>?@HH8KK4MM6PP2Sar z >NV^f |64n.BP<X`T Frame 00000 Last: 00000 Freedisk: 00000000 Find string_________________Search for:_________________XXXXXXXXXXXXXXXXXOKCancelLoadSaveClearMergePrintFindRun1234567890123456789012345678901234567890Value:____________________XXXXXXXXXXOKStopCAD-3D 2.0 CYBER CONTROL LanguageCopyright 1987 Tom HudsonProduced for exclusive distributionby Antic PublishingVersion 1.1Watch buffers:OFFONOverlay buffer:OFFONScript buffer:000KArray members:0000InstallRemove\[3][Error writing file!][ OK ]*.CTL[3][Too many windows are open.|Please close a window and|try again][ OK ][1][Erase script - Are you sure?][ Ok | Cancel ] Checking syntax Executing .CTL CYBER CONTROL """"""""""""""""33333333̈33̈33̈33̈33̈33""̈33""̈33""̈33""33""33""33""33""333333333333333333333333333333333333333333333333fornextgotogosubreturnifinputprintpopendrprintbauddimzoomperspeccam1cam2cam3c1mvc2mvc3mvgrouphomescalesetarbcenterrotatexlateselectdeselectclrgrpallgrprenamerecolorkillclonebackcolrlinecolrviewdraftfinalstsepstereomonoanticubewedgesph1sph2sph3torusrstartrecordgetimagerstoprchainnewstatuslinemodeambientdirectltonltofffullspinpartspinextrudebackgndclrbgndvtobgndloadspinloadextrsupervieweffectloadbakoverlaypatloadpatrestchgzoomchgpspcwatchonwatchoffaxisscalefopenfreadfcloseload3dmerge3dftrapboundsgrpcentdefptdefsplinemovetoaddvertexaddfaceuploadalertbelltreeclrtreeaddlimitrelatepositiontreesetorderalignclrimgbacksetlbacksetrsaveallsavegrpbearingf.n.g.gs.ret.in.?unusedw)))))))** *6*G*X*i*x*******+++1+@+P+[+e+z++++++,,$,5,C,U,d,w,,,,,4  sincostansqrabslogintrezrnds1xs1ys1zs2xs2ys2zs3xs3ys3zs4xs4ys4zs5xs5ys5zatn%&()*+-./0123456789<=>|DCD*D>CCCBDBBBBBBBBBBBBCZCDjFfFG2GH2H|HI0IIJhJK|KLLLLLLLLLLLLLLLLPLM$MNNO QLQLQLQLOPQLQLQLQLQLQLQLQLP\]$\\\\\\\\\\]]]]]]]]]]]]]0123456789^p^F^F^F^F^F^F^F^F^F^F^[3][WARNING:|CAD-3D 2.0 not present!][ Continue | Cancel ]iiiiiij2jBjdjtjjjjjjjkk"k4kFkXkjkxkkkkkkklll$l6lHlZlll~lllllllm m$m:mRmjmmmmmmmmnnn*nBnXnjn|nnnnnnno oo.o@oNo`oroooooooppp2pJp\pnpppppppq qq.q@qRqdqvqqqqqiiiiij2jB, `%Kttttttt [3][Your printer is not ready!|Ready the printer before|retrying.][ Retry | Abort ]Syntax error!Invalid expression!Invalid variable!Too many variables!Line too long!Invalid constant!Bad numeric value!NEXT without FOR!RETURN without GOSUB!Undefined label!Too many labels!Redefined label!Invalid label!Too many GOSUBs!Bad parameter!No CAD-3D Response!Can't find object!Bad object name!IF without THEN!CAD command failure!No CYBSMASH.ACC!Record error!Can't assign that variable!Chain failure!File not found!No buffer!Bad file!Input file not open!EOF reached!Input file already open!Too many objects!No RAM for operation!Duplicate object in file!Improper CAD-3D version!Spline not defined!Beyond spline limit!Too many points!Bad spline #!Bad spline count!Tree overflow!Not found in tree!Invalid tree!No Cyber buffers!No array space!Subscript error!Can't open file!Divide by zero! to step then CAD3D2 FREEDISK[3][No RAM for buffers!][ SORRY ][1][][ SORRY ] = to step then wAGUaguCHOSWchoswD8@<4D8@<4HABCabcABCabcCIOciozv~zv~BNPbnp   BLSbls ANTI CYBSMASH[1][Already recording!][ SORRY ][1][Can't WATCH while recording][ SORRY ][1][No watch buffers!][ SORRY ][1][][ OK ]\XYZxyzBFKLRTbfklrt~nڞ^ڎڮ~nڞ^ڎڮھFORMBODYBMHDCMAPILBM@((&                               FN*                 &86 <                 (  $   "   V **  Lf V lN&< 6<  &   ,     0(2  4            > "$2 $*0f    *        "(         $  .<<  "                                          "         6        $   $ .2        (    "d*    0      4     Hh j$&   P H$ &: 4 ( 8 $                                                                   " 6     .  0  "    80  N. B:  J $ $ ^RV .V&&      * ,">*4.   &.&: 4  *    *                     $            d"*$J6J 0 b  $@f$>>0Pv:         : &6 0 8$4  &  ,$4(*&     j(    $.           p6&2   (*"4$ n &0 "H  , 80T$n$     "    ,         "    ,    8   ($ $ ($$$   .    &0 (      ,   "                 *                              ( (     $    .     *        0             $    .. $     $ &    * B          $                     8        0  N&      6       $ *       (                      "         2" .  "        < $   ((        *  L2   *0N>^D                      *   "             H  " & "$4  R     $( &06         D 2    , 26 ($    \  P2   *           ,(". & 2 "|"(>*   *6$ fBLB (" 6 DT0* F                            8f l     lnt4B 0     8`!FO5RNBgNA"/0<NBNuNVHN!.%2?97nN ,T37`.7N p097`Z 973:~09:~y7f.$N?<N NT`:#77| y7|. y7|/( y7|/( y7|/( y7|?( y7|?N2#83̀837n8By8.8?<?97N X`3́837n8By8N 2#8.8?<?97N X`p3̂837n8By8N#8.8?<?97N X`0#77x y7x P am y7x P y7x PH|3:XJy$LgNBy$L3̐837n8By8>:XN#8.8?<?97N X`#77 y7 P am y7 P y7 PH|3:VN#8J8l By$L`09:Vy:Xf y:Vl.$?<N NT3:V:X y7./<7aBX y7./<7aX.%A/<7aXBW/<7?<7?<>NTJy7m }:,l#8` y7xJg& y7x./<7aX.%I/<7aX y7x./<7aX y7x0(H|1$.$/<7aXBW/<7?<7?<>NTJy7m }:,l#8` y7x./<7aX y7x./<7aX.%L/<7aXBW/<7?<NAXLNuH# T <# \ HaJ 4j 9 4LNu/9 8 y T"y \a2J Xg@ y X# <# ` HaDJ 4j 9 4XLNu"y `a ѹ 8X 9 0.9 8# 0LNuH# h dB 8BA><? y <"y H fQ`RAQJAga`2<a2<ara~`2><? y <"y H$&fQ`" #N N^NuNV3:Z# 7p>4N N^NuNV#7p>N N^NuNV3:Z3 :\# 7p> N N^NuNV370.|Hм!-@=|` nH2n72RRn nm.:zNB@097N^NuNV#7:#:8:#:Z:#7:#7p:"#7:&#::z> aF377npN^NuNV>a*pN^Nu  [1][The Cyber Smasher is called|by CAD-3D automatically!| Version 1.1][ OK ][3][Chaining file! Insert new|disk and press RETURN.][ RETURN ].pin(^2 ^` Cyber Smash .dltL_R_.dlt                                                 h  ,      >       READ-ME FILE FOR CYBER CONTROL V. 1.1: This disk is formatted using the regular GEM/TOS single-sided format routines. It is not "Twisted," and therefore may be backed-up using the disk copy functions from the GEM Desktop. To run the various demos on this disk, you're going to need to have lots of blank, formatted disks around. And before you run anything, make sure it is set up to run out of the path you've got it in (i.e., most demos have to be moved (or their folders have to be moved) to other disks to work properly). This is all documented in the .CTL programs themselves and in the README.DOC file in the DEMOS folder. GET THE CYBER STUDIO UPGRADES RIGHT AWAY: Make sure you have version 2.02 of CAD-3D before trying any of these demos (except DESERT, which doesn't need CAD-3D at all). See the upgrade information in the beginning of your CYBER CONTROL manual. NOTE ABOUT USING CYBER CONTROL FROM CAD-3D Always invoke Cyber Control from the main workscreen of CAD-3D. Never make it operational when you are within either the Spin or Extrude tools. If you do, system errors will occur and you may lose data. This idiosyncracy of GEM will not cause any problems if you always invoke Cyber Control from CAD-3D's main screen. ***************** CYBER CONTROL Version 1.1 This version of Cyber Control has several improvements/additions. Several bugs have been located and corrected, including: ALERT during Watch On -- Alert is now ignored ABS() function error -- Fixed ANTI during Watch On -- Watch continues after ANTI The new features are as follows: ATN() function. This is another handy trig function, arctangent, also known as the inverse tangent. This has the same priority as other functions. It returns an angle for a fraction input which is the Y coordinate divided by the X coordinate. For example, if X=1 and Y=2, you would call ATN(Y/X), and it will return 63.43, indicating that the angle is 63.43 degrees. If X and Y are both 1, the angle returned will be 45 degrees. Take care to avoid division by zero here -- such angles are multiples of 90 degrees, and should be handled manually. * * * * * BEARING command. This is a super-handy feature which allows your models to align themselves with any path of movement, such as a spline. The command has the following format: BEARING x1,y1,z1,x2,y2,z2,HANGLE,VANGLE The x1, y1 and z1 values are numeric expressions which are a coordinate in space. The x2, y2, z2 values are coordinates of a second point in space. Cyber Control evaluates the input coordinates and returns the horizontal and vertical angles from the first set of coordinates to the second. H and V are the variables in which Cyber Control will place the horizontal and vertical angles, respectively. For example, let's say you have created a spline which an object is moving along and want it to always face in the direction of movement. To place the object on the 10th spline point, you would use: MOVETO s1x(10),s1y(10),s1z(10) Because the next point the object will be moving to is the 11th spline point, you can use the bearing command: BEARING s1x(10),s1y(10),s1z(10),s1x(11),s1y(11),s1z(11),H,V Now the H and V variables contain the bearing information needed to make the object point at the 11th spline position. To do this, you use the following code: ROTATE V,0,0:ROTATE 0,0,H This does the rotation, and you're ready to record. One important fact to remember here -- to get proper rotation, you should always start each frame with an unrotated object which is facing the front of the CAD-3D universe. The CLONE command is useful here. Keep an unrotated copy of your object in memory and simply CLONE it each frame. After each frame is recorded, KILL the clone. You can also use the returned angles with hierarchical models. For a simple example of how the BEARING command can be used, see the AIRPLANE.CTL and AIRPLANE.3D2 files in the TOMHUDSN folder. -- Tom Hudson osition. To do this, you use the following code: ROTATE V,0,0:ROTATE 0,0,H This does the rotation, and you're ready to record. One important fact to remember here -- to get proper rotation, you should always start each frame with an unrotated object which is facing the front of the CAD-3D universe. The CLONE command is useful here. Keep an unrotated copy of your object in memory and simply CLONE it each frame. After each frame is recorded, KILL the clone. You can also use the returned angles with hierarchical models. For a simple example of how the BEARING command can be used, see the AIRPLANE.CTL and AIRPLANE.3D2 files in the TOMHUDSN folder. #a000000 #b000000 #c7770007000600070055200505552220770557075055507703111103 #d #E 98 12 #W 00 00 38 01 16 0D 08 A:\CYBCONT\*.*@ #W 00 00 1A 09 18 0C 08 A:\*.*@ #W 00 00 0A 0F 15 09 00 @ #W 00 00 0E 01 34 09 00 @ #M 00 00 00 FF A ST Review A@ @ #M 01 00 00 FF B ST Review B@ @ #T 07 03 02 FF Black Hole !@ @ #F FF 04 @ *.*@ #D FF 01 @ *.*@ #G 03 FF *.APP@ @ #G 03 FF *.PRG@ @ #P 03 FF *.TTP@ @ #F 03 04 *.TOS@ @ . }~L.. ADDRESS BAS t{M DDRESS PRG Qt{S1DDRESS RSC "1z` ASICOM1TXT s{b-DOES_NOTRUNt nDEFINT a-z LIBRARY "gemaes" 'needed for alerts CONST cell_size=6 DIM book$(100*cell_size-1) 'main text array CALL load_book 'first load address file CALL menu 'display user options DO 'wait for user choice user$=INKEY$ SELECT CASE user$ 'call relevant sub CASE=="N" CALL new_name CASE=="F" CALL find CASE=="S" CALL save_book CASE=="Q" CALL quit CASE=="I" CALL info CASE=="D" CALL delete_find CASE=="M" CALL menu END SELECT LOOP SUB menu PRINT "ADDRESS BOOK OPTIONS" PRINT "====================" PRINT "N - New name" PRINT "F - Find name" PRINT "S - Save book" PRINT "I - Info" PRINT "D - Delete name" PRINT "M - Show this Menu" PRINT "Q - Quit" END SUB SUB load_book SHARED book$(),items STATIC i IF FEXISTS("BOOK.DAT") THEN 'if book.dat exists then OPEN "BOOK.DAT" FOR INPUT AS #1 'load file into array DO LINE INPUT #1,book$(i) 'line by line INCR i 'scroll through the array LOOP UNTIL EOF(1) 'until end of file CLOSE #1 items=i-1 'store number of text items ELSE 'if not found let the PRINT "ADDRESS BOOK NOT FOUND" 'user know about it END IF END SUB SUB save_book SHARED book$(),items STATIC i PRINT "SAVING BOOK.DAT" OPEN "BOOK.DAT" FOR OUTPUT AS #1 FOR i=0 to items PRINT #1,book$(i) NEXT i CLOSE #1 END SUB SUB new_name SHARED book$(),items LOCAL tmp$(5) STATIC i IF items=599 THEN PRINT "Book is full" EXIT SUB END IF PRINT "NEW ENTRY" PRINT "=========" LINE INPUT "Name: ";tmp$(0) LINE INPUT "Street: ";tmp$(1) LINE INPUT "Town: ";tmp$(2) LINE INPUT "County: ";tmp$(3) LINE INPUT "Post Code: ";tmp$(4) LINE INPUT "Tel: ";tmp$(5) IF tmp$(0)="" THEN EXIT SUB FOR i=0 to 5 book$(i+items)=tmp$(i) NEXT i items=items+cell_size PRINT "NEW NAME STORED" BEEP END SUB SUB quit STATIC a$,button a$="[2][ Save address book | before quitting ][Save|Quit|Cancel]" button=FNform_alert(1,a$) SELECT CASE button CASE=1 CALL save_book 'if save was selected, call save_book SYSTEM 'then quit CASE=2 SYSTEM 'just quit END SELECT END SUB SUB find SHARED book$(),items STATIC i,srch$,a$,b$ INPUT "Enter search string ";srch$ 'user enters name to find b$=UCASE$(srch$) 'make upper-case FOR i=0 to items STEP cell_size a$=UCASE$(book$(i)) 'make upper-case IF INSTR(a$,b$) THEN 'compare, if found then show_cell i 'show the cell starting at i EXIT SUB 'then exit the search END IF NEXT i END SUB SUB show_cell(start) 'start is the passed parameter SHARED book$() STATIC i FOR i=0 to 5 PRINT book$(start+i) 'print the six items NEXT i END SUB SUB info SHARED items STATIC dum,a$,total$ total$=STR$(items\cell_size) 'str$ is used to convert the result 'into a text string a$="[1][ There are"+total$+" | cells in the | address book ][OK]" dum=FNform_alert(1,a$) 'this alert has only one button 'and we are not interested in 'the result END SUB SUB delete_find SHARED book$(),items STATIC i,srch$,tmp$,a$,b$ PRINT "Find cell to delete" 'user message INPUT "Enter search string";srch$ b$=UCASE$(srch$) FOR i=0 to items STEP cell_size a$=UCASE$(book$(i)) IF INSTR(a$,b$) THEN show_cell i 'display the cell PRINT "Delete cell. Are you sure? (Y/N)" DO 'now wait for user tmp$=INKEY$ 'to decide LOOP UNTIL tmp$<>"" 'so loop until he does IF tmp$=="Y" THEN 'if user pressed 'Y' remove_cell i 'call remove_cell EXIT SUB 'and exit this sub ELSEIF tmp$=="N" THEN 'if user pressed 'N' PRINT "Delete cancelled" EXIT SUB END IF END IF NEXT i 'if the sub has reached this point it means that no cell 'was found PRINT "Not Found" END SUB SUB remove_cell(start_item) SHARED book$(),items 'items is the total number of items STATIC i items=items-cell_size 'one cell removed FOR i=start_item to items book$(i)=book$(i+cell_size) NEXT i END SUB `,/Pt`,LArc's PFX 1.13P 1990 -soft, Markus Fritze g.h` /H*@"m mA$H -(H!!!!!!!!Sj JC pl QN , HD , p,m:<0r Q&N~*6<Q~d So:Q` H"CAD@CD@ArTApAQoQ`&-A& LA(HJkf&CH"grאg<fA``+D +E+F.ޅR؃+D؅+D+VC m Sj mJfA, "gr/r$&(*,."A$A&A(A*A,AH~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H`Sf"|`B QL gpNޭ$%-lz5-)/9A:\ADDRESS.PRG=`8&|`Nqz8< 6< ><4<|(o*lN~Nn+ <NqNT.- ->,HޞN\NuJV ?NBTO-~ ^ G._+G P~] G>=~DG^;G >- =.WN/>H-.NJGfNq~=~A Na)String spaF corruoptpQ/PPaaB _aT gPNu$s(IqP$$pgR߈X.$`0pd؁fg".0&,.0 GK" *p ^KJf"A(u"Ap!.8SNAP$M`$^V8g/wQ$_AL Jp`f"~J`JkT"`2`HkF2Ho@SoRgSe(0Pgx"DґȑaH ^ gc R--4r4vRphψn @`@E Gn("P~Cgt Ԣb.ANuxȑCfP D: _` H@g(Jg$HAJ@gJAfHA`JAgH@6Af ށeNu8uD,`JnDJhai JjiNuW_H]Wf\^~ԡ4)k2BHҁC. Nuv!:FBH*6HÖk&n"UDkknw"d@,և@_"`LrJgp <R0ZxCiPfC kCH0BAҀ@8̱H&SDt =qPP@~4ax30wr wPl f ` ֳ&.d V&t]0ƚJ^<ȕxHVh-mvĆ GJ.4-4/ x$Nr6ASAHDJDR0HD0B8R@Q/ p_g0P2C2 AA ?H؁222"8B2HR2 UAkH22|2prHASCd2`"ad&_Nu2 4BSAA M BC p0 !&R}bXH/~_z6ESE"kJRQ[(j0҂FY"Ǵ"R: UEk""CH*40ԡf()8B@bA0+{$Iw@v0 *GA6a G@VGa GUU|vG` (*`'J~g m~NH@`E"pJUg rr2NuSe<dPVPJgLJfS`LIBRARYSTARTUPOPENPEEK/POKEBLOAD/SAVESOUNDLOCATEINKEY$DOSDIMARRAYITRECVsMID$==RIGHT$кSTRPALETMALMENUSCRESQRTWINDOWJOYSTICKTIMEDMOUSEGHEAP Y8 Runti0error at linemoduK on #pÐo+@0Ppւ(PpPPȂ,NPHm!HAH@Hpa(I l@LH?8(H o(PPL P0ApPpD^/20 ~f*0@"g  g8H0"L LJw@"`r,HA 0t,HB,0"Lp`JgBfp@@JfrA80CB gPpo Fp { @@AreLx@&wI/ l&_BTD0 gND0 D0h0< eںgHRvrt&_`J߄gSPgS-0/ rUP[r`rpݞp"E?,|~RUf l&AlV0pr aFr axk2Bpr4R-0XaP-0etqdD0gD0dD0dp`0pNQfC1 f ,#kd*#p?0~NM\Jpg !ra`R?gp9Nu^f"҃Rr0T0!S{gU|6Q& vRBg=NAJkb8>oN? 恿fPP02(؃$D)mV)C$ 0059@p)@A@Z`Ho`t98l;Pf  UF5LCKܿKބ<A|g悮P`+rQf NAXٰ֠!z8_d$ gM @N.Xw@1d`d|pD0gJf",gaBftr rI0^l(/,O ?@g > ,$e agp>@p 00RY(g䔰$!z&g$SSdBg?/kv򢴀6Qx?(o,g$e(ٕ$a8@*)l$/ {/P"/Xo ѕUH$B4r2*(4d"B O | A<raaXo raI? OpaTo &//P@NA$%"0kp=A"  I`f6 0Sev H x ggRQ_aL0`r{`@-0 IaBA @eSf CZv`S\qvapVPBlqgNu fp6NuZOfp6z>P⢥St |0#$6u HPxg>>P;l fZB"@g(*HEJEgpH@ @T`jf(SE`HE  |.T`VftzT`DtQ`ԡf($& ֔ $ū"G>Nu``*ږ&ԾZfl ``"KjTbB,r*&uyd 8(2`p20,BPRT:AUX::KBZLST:H@ 0H!!a{區(Iplp @p4Nu8<0DaQ!@af] 0a 001" -f 0٪LB @N;m;@ "psNBNuCX2 0`2BQ m@XfRQ @"0<NB0-:p_?@Il0NVAeO@?FNPIIMpLI DKMpl CwE'@NC0Cau<8JC k" "]^"@ }XbB UՀ"p3BQ7bp0+HBmpNa 4p@AP$ H( H ;38"pPA20f0BV&XV!0;|w$bNT "+@d"p^R@22-`RA2H 228!"2$B&Bm*+/ h >+mwl pn5# Ԣp R 0 pNBT@g$pM ڐ`-6T@0daw6f:!!># 42a Cannot open workstation;@h @Ъ Z+m^^4! p@t;mVp_mT0X4$W 8 ЀU'0J4.044'1p0 P g!+@/p04'}p-Pa2j2gpp`:pD`p4K/ Hw0#z0/|pxHI} o f")AD1`C/H2"Zt@^p0|k6AO`:;@&.Dre9 _ "o 2.Jop& Ia#Pߌ R/ a `)H."_/ (B"l.;q2+IpiRm +HDL 80P0"SA8 !L@ASBSCH>PH=PLJ-7fbp|p^lVpC"V#zV3zT`0JP bpj4bpPA  f A:"BP0Dr#p"F@(_:VjPQG"P27#0eKS"a `a] 6& 01DRSj2r9mXra,.[g"t2XdyCD!pgaapꐂ 8 4SbB6AݰΠdB΢ *6~pm&g VU4bpaHNaD`j*~pzpXΠd2:dLζp"g++@"mpP0 V@e* X>p2>pld9A`؊ XrSqHsBp`p@nk`$$/NMXΠf -5f7b `~> PS`G`vܱx*&I/  &_DVJPng*gCgfJgкgHRj&_`JgSng|r{p$r"݁~ 2hhpm[PJ0R7$J PP2 ""8Bq46I`A`6420>paBQ*m8"pkdL3T@L>PCyB\S H@0~(L \мpj1`0j bP(RBga/aLw` a$ڡlaLtP\j]֩pϰ~;|Bpd%y`T@d$nkPRBp0؆u JPJNu$C2!k_0TrQ/ (I4(\B 2Ʋ0Ʋ}ƲaƲ0(_EP`EA60W<_VRH܀fTg,pVR"X@<P) M8 0 07xgްp7 qJjD"f8pC2)@m$gA0)HjF-SAfa -wP  0. nP."G"e,n e2T0HR0 z2eҁb+IE*5LHB44v x,+mdIC2VR&"^486 2VЀ?8J  H20J Zav"d 0dx!6`HLae aeLPp"$&<ACEG@SBDSFDe@e@e0Bd4@RBNug@HNA\ߏJg6fu/IDa3di0|}JiD0 4</v`. Compiled with HiSoft BASIC 0<rtvf;H$;H0  fDdJGo |d0G8Gp4`w0$"';Gj f$0m$p` G`(p"` HA86HBrBDHAJAgHAJCgAcVB8SDpܠpGo8SD"`JGkg.2gJߠHGJGgHBRBBdBSGHzCt"` g,/ mF@ N _`k?\ @NuCkA BJg6J-f0|g*Mg$NgOgX;D;mP/- PݚX`@~`F~OfT4`>V0(@@jBS>`o06X"~(?p LNAq Y Program terminat- press a key to exit`/ _4J7Ugpi`XpFATAL ERROR:  at line pq/oЮ"/`@pp(P6B@ j.R J @0J+oP`B@0pLAOP.r+PlBBYp`6p/@hr+r p`r*rp~`pz`p{`pr` p2`p@);#\`(>M( !@-\vr`rN`r `r )%u2r&p`$r0ppF`, _r`ppO``L!`Dp6\N"`6r >pl`v`&rpa.ʱf`pe2}`N0!r`ph2` Nu>E]@"`2Q@pw a\ 1r!`r\@apK\ 8re drp`$ri H`rUI J0"3rt0o`p`pj@2^#`p5kg@f`pm` njIJpxax:j B@+YBz4>5Oar1*1/a`py``rs Pa^p}N1$#( `rP |2:`rQ` rn43a%@jSe`Bְ5`1a3p"`  _Hw>@Poexaz[aL}/ N:BPNuzZ3Lp d(ga0P:0Jp0gQ:jAEA1@<"JJf( S`3pdϐxI1$Se `B 7FJ Q1DAj8  RRг>E I $H@"!HA"C T|p.P Q0 a0PP-ga p4PB|plTKvz P@X [fRaVP@LP|fFaLP@@P]f:`.P@4R.au2P@( b"a(Z]g P@P\f`Rf`RR (fP@G`R݃P@Z\g 6bZ|fSwRЃH&HEXlAd VNV OSlB(] l^+K+Kt@ORPpraG+gLQ.PNu(- -\r]$Pu,wP*rdp ,r7pz(zH*KA߰p&!/ z|g8Z[f;E4RE6&&+P[&b$f7|6@B[66`Ĭp(_;FD?ppREp/ p)pp`Bpq H/ ?ORE&pq?6Ƣpq~vJFfvbOnQ`zspRGaxtq@d66afJCjRCg/ I`(_6<47B _SE1pRE01C1G/Q`g ` _fFp "_02Lj (@fRp6baxb\gR`BDNu^ (((9a(cx# -)):  ) 4'P'l' ' &  !  !    !  &% NNN$NNDeleteScrubSelectExitScrub ST 1.1Copyright 1991 Chris SorensenCurrent File:Status: NOT SELECTED 0123456789012345678901234Questions, comments or suggestions?Contact the author at:Post: 3250 W 53rd AveDenver, CO 80221-6564 USACompuServe: 73310.761GEnie: C.SORENSEN2$+,-345<=>CD' N  j    E Rr       #   # :ng integer & -2,147,483,648 to 2,147,483,647 single precision float ! -9.2E18 to +9.2E18 double precision float # -1.8D308 to +1.8D308 string $ 0 to 16,777,215 characters long ======================================================================= Commands: ABS(numeric_expression) 'Function Returns the absolute value of a numeric expression. ASC(string_expression) 'Function Returns the ASCII value of the first character of the string expression. ATN(numeric_expression) 'Function Returns the arctangent of the numeric expression. BAR x_start,y_start,width,height 'Statement Draws an outlined box in the current output window. BEEP 'Statement Causes the monitor speaker to sound. BLOAD filename,address 'Statement Loads a binary file into the specified address. BSAVE address,filename,length 'Statement Saves memory contents starting at address with length bytes to a disk file. [CALL] sub_prog_name[(parameter_list)] 'Statement Calls a sub program or a library routine. CALL LOC address[,parameter] 'Statement Calls a machine code routine CALLS sub_program_variable 'Statement Indirectly call a sub program using a variable as a pointer to it. CDBL(numeric_expression) 'Function Convert a numeric to a double precision float. CHAIN filename 'Statement Load and execute another program. CHDIR pathname 'Statement Changes current directory. CHR$(ASCII_code) 'Function Returns a one character string according to ASCII value. CINT(numeric_expression) 'Function Converts a numeric to an integer by rounding off its fraction part. CIRCLE x_centre,y_centre,radius[,start_angle,end_angle] 'Statement Draws a circle or arc in the current window. CLEAR 'Statement Clears _all_ variables and open channels. CLOSE [[#]chan_number[,[#]chan_number]...] 'Statement Terminate I/O to file or device. CLS 'Statement Clears the screen and puts cursor at the upper left corner. COLOR txt[,fill][,line][,index][,style] 'Statement Sets the current colour and line drawing attributes. COMMAND$ 'Function Return a command line from a TTP or a file name in an installed PRG application. CONST name=int_const[,name=int_const] 'Statement Define symbolic integer constatnts. COS(numeric_expression) 'Function Returns the cosine of a numeric expression which must be in radians. CSNG(numeric_expression) 'Function Converts a numeric to a single precision float. CSRLIN 'Function Returns the current line position of the cursor. CVD(8-byte string of a double precision) 'Function CVI(2-byte string of an integer) 'Function CVL(4-byte string of a long) 'Function CVS(4-byte string of a single precision) 'Function These functions return the internal numeric values of strings of bytes. DATA constant[,constant] 'Statement Defines data to be used with READ. DATE$ 'Statement/'Function If used as a function, returns the system date. Sets the date when used as a statement. DECR numeric_variable 'Statement Subtracts one from the numeric. DEF FNfunction_name[(parameter_list)]=expression 'Statement DEF FNfunction_name[(parameter_list)] 'Statement [LOCAL variable_list] [STATIC variable_list] [SHARED varible_list] statements [EXIT DEF] [FNfunction_name=expression] END DEF These statements define a single or multi line user 'Functions with parameters. DEF SEG=numeric_expression 'Statement Sets the operation mode of POKE and PEEK DEFDBL letter_range[,letter_range] 'Statement DEFINT letter_range[,letter_range] 'Statement DEFLNG letter_range[,letter_range] 'Statement DEFSNG letter_range[,letter_range] 'Statement DEFSTR letter_range[,letter_range] 'Statement Declares variables as integers, long integers, etc. DIM [SHARED] variable[(subscripts...)][,variable[(subscripts...)]] 'Statement Defines the maximum values for array subscript and allocates required memory. DO [{WHILE|UNTIL} boolean_expression] 'Statement statements [EXIT {LOOP|DO}] statements {WEND|LOOP}[{WHILE|UNTIL} boolean_expression] Repeats the staements in the loop while conditions are true (WHILE) or false (UNTIL). ELLIPSE x_cntr,y_cntr,x_radius,y_radius[,start_angle,end_angle] 'Statement Draws an ellipse or elliptical arc in the current window. END [{DEF|IF|REPEAT name|SELECT|SUB}] 'Statements Used to end a program, SUB, function, IF, SELECT, etc. EOF(channel_number) 'Function Returns -1 if reached end of file, 0 if not. ERASE array_name[,array_name] 'Statement Erase an array. ERL 'Function ERR 'Function These functions return error status of current program. ERROR integer_expression 'Statement Simulates a runtime error. EXIT {DEF|DO|IF|FOR|LOOP|SELECT|SUB|identifier} 'Statements Exits a SUB, function definition or other BASIC structures. EXP(numeric_expression) 'Function Calculates the exponential value of a numeric. FEXISTS(filename) 'Function Checks for the existence of a file. Returns -1 if the file is found, 0 if not. FIELD [#]chan_number,field_width AS string_variable 'Statement Allocates space for variables in a random access file. FILES [filespec] 'Statement Lists files in the specified path. FILL x_start,y_start 'Statement Fills enclosed shapes already on screen. FIX(numeric_expression) 'Function Converts a numeric to an integer by truncating its fraction part. FOR counter=start TO end [STEP increment] 'Statement statements NEXT [counter][,counter] Executes statements for a specified number of times. FRE{(numeric_expression)|(string_expression)} 'Function Returns the size of free heap or GEMDOS free memory in bytes. GET [#]chan_number[,record_number] =File I/O Statement Reads a record from a random access file into a random access buffer. GET (x1,y1)-(x2,y2),array_name =Graphics Statement Stores binary images from any part of the screen in an array. GOSUB {line_number1|line_label1} 'Statements statements RETURN {line_number2|line_label2} Branches to and returns from a sub program. GOTO {line_number|line_label} 'Statements Causes program execution to jump to specified line. GOTOXY x_char,y_char 'Statement Moves cursor to specified location. HEX$(numeric_expression) 'Function Converts a numeric to a string that represents its hexadecimal value. IF boolean_expression THEN statements 'Statement [ELSEIF boolean_expression THEN statements...] [ELSE statements] [END IF] This statement block allows conditional execution and branching. INCR numeric_variable 'Statement Adds one to the numeric. INKEY$ 'Function Reads a character from the keyboard without echo, if available. INP(BIOS_handle) 'Function Waits for a byte from the specified BIOS device INPUT [;]["prompt"{;|,}]variable_list 'Statement Prompts the user for input which is assigned to the variable list. INPUT #chan_number,variable_list 'Statement Reads data from the device or file specified and assigns it to the variable list. INPUT$ (n[,[#]chan_number]) 'Statement Reads n characters from the specified channel. INSTR([start,]1st_string,2nd_string) 'Function Returns the location of the first occurence of 2nd_string in 1st_string. INT(numeric_expression) 'Function Returns the largest integer less than or equal to the numeric. KILL file_spec 'Statement Deletes all files fitting the description in file_spec. LBOUND(array[,dimension]) 'Function Returns the smallest available subscript of the array and dimension. Normally 0. LCASE$(string_expression) 'Function Returns a lower case string. LEFT$(string_expression,n) 'Function Returns a string made up of the leftmost n characters. LEN(string_expression) 'Function Returns the number of characters of the string expression. [LET] variable=expression 'Statement Stores the result of expression in a variable. LIBRARY lib_name[,lib_name] 'Statement Includes a TOS library. LINEF x_start,y_start,x_end,y_end 'Statement Draws a straight line between the points specified. LINE INPUT [;]["prompt";]string_variable 'Statement Assigns an entire line of input to string_variable. Ignores delimiters. LINE INPUT #chan_number,string_variable 'Statement Reads a sequence of characters terminated by a carriage return from the specified channel or device and stores it in the string variable. LOC(chan_number) 'Function Returns current position within an OPEN file. LOCAL variable_list 'Statement Declares variables as local to a sub or a function. Local variables are created _each_ time the sub or function are entered. LOCATE row[,column[,cursor]] 'Statement Puts the cursor in the specified position and turns it on and off. LOF(chan_number) 'Function Returns the length of a file specified in bytes. {LOG|LOG10|LOG2} (numeric_expression) 'Function Returns the logarithm of the numeric expression. LPOS(argument) 'Function Returns the printer head position. LPRINT[expression_list][{;|,}] 'Statement Same as PRINT but sends data to current printer port instead of the screen. LPRINT USING format_string;expression_list[{;|,}] 'Statement Same as PRINT USING but sends data to current printer port instead of the screen. LSET string_variable=string_expression 'Statement Left justifies a string variable. MID$(string_expression,n[,length]) 'Function Returns length characters from the string expression starting at the nth character. MID$(string_variable,n[,length])=string_expression 'Statement Modifies part of string_variable starting at the nth position. Length can be used to limit the number of characters used. MKDIR pathname 'Statement Creates a sub-directory (folder) as specified in pathname. MKI$(integer_expression) 'Function MKL$(long_integer_expression) 'Function MKS$(single_precision_expression) 'Function MKD$(double_precision_expression) 'Function These functions convert numerics into strings for use with random access files. MOUSE(attribute) 'Function Returns the position of the mouse (attribute=0, attribute=1), state of mouse buttons (attribute=2) and state of keyboard shift keys (attribute=3). MOUSE mouse_type 'Statement Sets the mouse form to one of eight preset shapes or removes it from view (mouse_type=-1). . t n.. }~LADDRESS PRG Qt{S1ADDRESS RSC "1z` READ_ME 1ST t oPLEASE NOTE *********** The program in this folder is an illustration of the HiSoft Basic tutorial and is not intended to be a full working program. It is included to show the compiled version of the listing and what the finished screen will look like. ST Review. copying. Hard Disk Installation ---------------------- 1. Create a new folder named CANVAS on hard disk 2. Copy all files on ORIGINAL disk to the CANVAS folder Whenever you start the program you will be requested to insert the ORIGINAL disk into drive A. Updates ------------ When you receive your update disk, copy the following files to your MASTER and work disk: CANVAS.PRG CANVAS.RSC ************************************************************************* VERSION 1.10 1. Reset Sound - Resets all inst. parameters upon new voice selection. This option can be ticked on and off in the Options menu. 2. Improved MIDI input routines 3. Better drum edit layout 4. Edited sound indicator. . t p.. READ ME ȪYqSCRUBST PRG ȪY]*SCRUBST RSC ȪYbScrub ST 1.1 Copyright 1991 Chris Sorensen All rights reserved. This program and its documentation are provided "AS IS". Chris Sorensen makes no warranty of any kind with regard to this program, including, but not limited to, the implied warranties of merchantability or fitness for a particular purpose. In no event will Chris Sorensen be liable for direct, indirect, special, incidental, or consequential damages resulting from from any defect or inaccuracy in this program. Scrub ST is designed to allow you to permanently erase file information from disk. It accomplishes this task by overwriting the existing file with random information, then deleting the entry from the disk directory. By doing this, the information in a file (whether a program or data file) cannot be recovered. There are four action buttons in the main dialog box: 1. Delete--This is equivalent to dragging a file to the Trashcan on the desktop. It does not overwrite the contents of the file, and the f. }~r.. LHARCD TTP jsȬMAN ENG RX`t(``@>>> TURBO-C <<<< for ATARI-ST Version 2.0 (C)88-90 Borland International &H f&op`B@#v3z k  Ј<.@?#|Jyzg\<"@(I$k,"Jf"JfB// ?<?<JNAO A6<HBDCBB`l >fBSIKSAk\ >fB`H =NAJk:?|?EB>BNA0`Bo>FNAg$?|/N>=NAJk?@?|>FNA Nl0 J"LN5^? 9vg @N 9zg @NNb?<LNABA(C I<4JANuB@(C IB@BA(IANuH0EvG`N< f<0RC|f2ANzHyyANm.XON Kp N*v KB@N*f Kp N*pANl$L Nu/ &I9$f0/ANm.XO g/ANm.XOANm.&_NuH>6,HE1GI&Kg&Hj.C LNmhXO UN6AN$B0HAw/0C LNmhXO g/C LNmhXOC LNmh -g @N60-f AkN$B g @N60-gCA'LNJ -g @N6fA'N$Bg5|`5|pANl$L|NuH&H6N(H f y tfp KN K0N LLNu/ &HNJJ@g KpN&_Nu/NN$6|Jg|Nf?CA&NmhTO|JfvY0&Nu/NN$6|Jg |Ng|Rf?CA&NmhTO|JfvY0&NuH8$H(Ip\N&H fp: JN&H gE&Jp`&BAJAg|*gYAg` ?` `S@RLJ@ng .gr`BAfp`"BAJAg|*g` ?` `S@RLJ@nBLNup`  gRIS@J@n.p`  gRIS@J@n (.fSHBNu/ / $Hp\N&H fp: JN&H fB&J`RKB K&_$_Nu?/ OB@6E` 2ArRCjmJ@fp NBC`X0@22fLt C/ 0HA"pAN8"_N,HWHy?CA&NmhPO3RCjmOx$_6NuH<&H8$I"< IB@Nd KN&Cp0"KANzI.B@,|@Grp SN~ SN~<#f^%@ r#%A SN~A"S0)N5DKfC,ApNz fpC2ANz fpC8ANz kCfpC>ANzL<NuH * b v|(>CApNz%j  JN@9%g,2ByU0 * "S kN6BC09U0 JN SN~<(BA S +LN~"S JN`JCg kN~ * "S kN6` BA  SN~L Nu/ / Ol&H$I IN}c, JNzJ@f b"JrB@R@HAN}`JfB@`*AXB@`R@|mp`S@J@l'Wp`S@J@l'W p`S@J@lrok|k"|?k|?Ik"t |k|IIk"t|k|k"t|k|Ik"t|k|IIkp`S@J@l7oB@`B3R@|woABB2p`R@BA|AopO&_$_NuH>O$H&I I"JNrJ@g KN+g KN|+g`:+IB@HC LNB@B49'f9gBC+B@306BA+sB,wJCg` /f*MK<fSN\"L NNC LN /?fMwK<fSNBp0 JN}6 JN}H@JCg8|crpCt4  JN~|`"JpCr2ApN}`JCfRp\ LN*H fp: LN*H f*L`RM MOL|NuHO|&HBC"HANCxANlBDG`d9f 2I sg0H"sAN4J@f:B@`r @A07xg<?fR@| mް| f0@ARpvRDkm0OLNuH*&JfB@`DBD` ЅЀ*RD|le` r N2&RD|m ڀ "N2L8NuH *o(oN46J@f$ MN& LNΖ@JCf "L MN460L0NuH>O*H,I$o9,gt @g$C JN0 fC JN0 gB@`x"NAN8"JN8GL"MAN8(H"JN8 @9g$A `+B +BCE *g "J @N4&H`K j׸(P g "M LNf,H f x" gl`& fx`Hj%B@*AHp"K NNXPO80J@f9!f4*r j|J2*I|AJrjAr2t4*z j|J:*M|?EJzjEz:4-z j|J:-M|EJzmEz:t4-| j|J<-N|?FJ|mF|<dp`pJ@lBJDfr * jN~"J jN&HAN: jN6RC(j g`JDf jN6(j g "M LN,HN"J jN&H`0L|xNu/ O$y` JCp"QAN$$R fOl$_NuH8EpC J%HNv%H G("j "<p KN}`A(K` -f ,-f ,lg ,agRLbܱb Jp NBA U j N~LNupCYAN#Nu/ E jشN6C]/ C٨ JNNv"_N8"JA٨NC J%HلN%Hش$_Nu/ E_9#gCg/ Cؕ JN8"_N8` Cg/ C1 JNN"_NpCq J%HN8%HA"<@B@C(N$_Nu/ $H9+gNzA0*N JN6$_NuH06G_ +=g @NNJCgE +=gAN$J@gHkANm.XO kAN~<'@؍g kAB@N*R@f KpNn9#gt kAN~'K 1p CA1'HNH'H=9$f ANm.pЫ؍"k= kAN69$f ANm.B91 k=N` kANC1 KNJ`4 kAN6 KN$` kAN6 KN$C1ANJL Nu?/ ECY JN%H gN` y tf JpNjN\0*fp NX * g"JAN` "JANNN6NH jMfNf jN$_6Nu/ / E_"J&IB`<\g<:fGfC KNpCq J%HN%HA"<@B@C(N&_$_NuH8BCG kب$P g`ANjJ@gS@gnS@g~S@g`ANVAN kN6 kN6+f(AN$CANJJ@gRApN`FAN$`:HkANm.XO`&HkANm.XO`HkANm.XO +g @N6 +g @N6RC$S g C~ JN(H f0LNuN09vfp NB9/N yNNuHOBCN^ICA1NN`NG`HBDA%NJ@gC%/ A"l N8"_N8C AN)Hg"K/ AN8jA%"_Nj9!f2,t i|I0,H|@ItlBp0r4,r j|J2,I|?AJrlAr24+r j|J2+I|AJrkAr2t4+z j|J:+M|?EJzkEz:dxJDgAN@RCr , lN~`N ,g @N6"L lN f0NOxL8NuHYOBCNE"<B@C( jNICANK" fHjC jNmhXO|G7`A%N:J@g~ jN~<Ъ%@#J *N jEfN-g4"j KN8,H *\%f,Kg .:fTNC% NN8`"j KN8"NN8 KN8"KAخNAخN"KAخN45@ jEfAخN\J@gANZ8lHSANm.XO`RCM.0*rAXWf0(NEPTXb<-fHSANm.XOCAخ%HנN%H`^-fHj%ANm.XOBM-.`8 gHj%C> jNmhXOgHj%ANm.XO jNz *gf|`#J`B|g N * N` N * N#J#J# f^#ByU0|fNG:`D|fN8`6|f"* * Ni` | * "yJ yJN6B- jNz jN~< jBAN~"<B@C( jN jNd *g j Nd *g @NzJ@g jנpN jEf.A"j0)N jN60* KN8vB` jTg gC jNmhN JNyU0g$;|AJNm.-f.AN}` jPfg-f/ANm.XOBA * jN~`r * jN~"J jN&,H fV jN6B0XOL|Nu?/ BCN"E0*fpN CANؼNNh`. JNBJ@g "JAN؜RCr *& jN~`N|C& jN f0N$_6NuCA&Nmh3pANl$Nu/ A9'fBA9t EZWfx2*N239ACHKMRUm2D8hVJ>,bP\C`@C`:C`4C`.C`(C`"C`C`C`C` C`C I$_NuH|n 4DB ?`oO8/H,BI0EANlJ@f$AN$AN$N6|/'OSDX,0SDJ@fND o,X,*PB@N$5@ MNSf0*A8N f5|XRDY,||0*AFN5HANl0,H g )H|ALNl0,H gD*N`  g fBRMf&M*N`"RMg*'Og<-fRM MN`RMfb5|T jCfBjTB`` o,X,*P*'Og<-f RM MN`Jf ,fANN{Ap N*v MN6 MN80*Tl"M JNp\ JN*H f*Jp. MN&H fCR JN`N"KARN4J@g<,f62*g0HRCmA&NmhXONР|Nf9|pANl$RjT` MN<0SDJ@f0*TlpN 0*Tf jDgCXA%HXNRjT"lAdN8*HSM*dg&Adp\Ng :gC AdN0*g& Jp*N fp? JN g JpN΀` jCfN`PpC JNJ@g JpNXC/ JN"_NNANDJ@g jLg jVgNg*ANzAINm.NAp N*0,O0L|NuH>8,H*IBCAN$yvE yv (fAWNl0(H f"M N0N,`BD`RDpCW2H uNJ@f0HBg ,gBf,L`RCffpCHN&&H(NBC`0H'RCff2HBBx`(|oC+ JN0H"s JNRDDo" JN/0H sNПrxbDoC JN"M K0N:6 KNd0L|Nu/?B@`62BB`vAJCg6K8<C2`IRB|c4BAS01 R@|c8&NuH<(H&I&Jg^92g:<4H°l:E R@c4@KU0BU`X0@|@AS02I40B: g 0 KN*9*f&SEf"2cA&p*N*SR:<0Hl: SJo LN}8R@f`pN&*ڼJoTl* N&*H|` "L"p MN}`,"K"p MN|JoJn MNd`$ g K0N* SJo LN}8R@f LNzJ@g ylp N@ g KNzJ@g yppN@L]O&9(<BEEfh` PRE|m<<BWMU0KS0IJGJ0|f SN}>"SJg82|>pWgl"SJg SN}>"g AN*`RF0@|r2ҁ4J05@<"SJf9*fAp*N*(<|`R SJg SN}:"SJg SN}?@|H@roTA?ABo`j0o|BG2"g A0N*0@|r2ҁ4J05@<`RF| SJf9*fAp*N*(<Ro0/oo`\OL|Nu/J9:vg.|f($f 4)H//??<@NAO L$Nu$`AHA"g( h :g"@pa za?J@g yppaTAv!h  LNuH/_ LNuaz/:.?<INA\NuHAU2CE B`Hpr rmtpJ15T@TA|e6<txpD<0@p10zC`UEpPeTE>EGPaD1PGPa:5PXDTC|ep223|m3`33T@|eLNuI0`9#U@fNuAC 0<`2 R@|oCp`2 R@|mNuH0AU2"HEatG_2<xp`24TA6R@TD|:mp8<t2<:"HEcGZ`4Y6C10466X@RATD|ro1|By^L NuH>:va.OEG IB *zg >K߄rJt3J. l` : /@ j@c5|@ z aA`Bzaaz<<>HGKpO0GS@: QL v/ FK`N`RRC|B|UG0JmB|UG082 9@5`83 9@7`84 9`s@g 5@9 `7@9 5@J5GHL8L@EMJVl<: 2?<: VnN<p05?4<:r"AxA4|s@00RDg ix|00Bf0 iELH86iA eT0HA"P Sja4Q e(A"P SjaTQ0h<` 0H<RL0@ELI뺎4<BJjkpA00CRQIe00g^CRQIdSi2)YgYRQ841@Bl1@2491Bl190 00gCRQId`a`:`J0|?4<:r"AxA4|s@00RDg ix|00Bf0 iELH86iA eT0HA"P SjaQ e(A"P SjaTQ0h<` 0H<RL0@ELI뺎4<BJjkpA00CRQIe00g^CRQIdSi2)YgYRQ841@Bl1@2491Bl190 00gCRQId`a`:0+FH8H4AVr0 Ip0 H86iA eT0HA"P SjaQ e(At"P SjaTQ0h<` 0H<RLr?Dp ipH86iA eT0HA"P SjaXQ e(A"P Sja< tPgrsPgX42PBgV23 Ag(243 Gf402 24 7922P5 903P7 904P9 sf7`42P`43P`59P>< z\"Pd p `a8t|g`JfF2*L4A|ACLJ21A5AL;P|vl=PTEGTFGQHHr:< C`4|B5`7`pJm(B|UG0JmB|UG082 9@5`83 9@7`84 9`s@g 5@9 `7@9 5@J5GHL8L@JCgD"*zm&*f4*cAp*a8HSj :ѯ /o/W`9Jg"09JHAR"P SjaRO aL|NuH>]O:va zja6a: 9f^g@rt>Jl` :D. y@c3@axKfh` @RD|m:<MS06nIDEB`2,$<BdVQF z"PeH`a5L`p >O"PeH`a5L`p |GlTA24Be0BHAJjkpA00CRQIe00g^CRQIdSi2)YgYRQ841@Bl1@2491Bl190 00gCRQId`a`HA0H|l<PREA"P Sja2 A|ҁ4 J06@6@|R`&6xn* z"PeH`a4L`p 2h@μHGDA x0pt0pLHGUB<nD zb"PeH`a4L`p >O"PeH`a4`L`p |0Fm0ᯜ@@fHGp?GHGD8@SD4<BD|͋RH٬A"XB50PREBSj#:faAp"X2|FI<6`FRCQ#:f͋ ,気eB,%jf(2,%lcAp*a4Sl%l :|ї"o. :bg @a0.J@f ,氬e^,%jf2,%lc Ap*a4 :.g @a/J@g yppa=K\OaL|Nu 0@PX`hpx  !!""##$$%%&&''(())**++,,--..//0123456789:;<=>??N}6R@g&AU00@|r2ҁCS04J01@006Nu0<`2AA1 R@|oB@`2AA1 R@|mNuH8Op#f^#S(NEBpBDBE<<>Gfh` pRGGnBC` 0CRC|l yJN(?@R@f0H#f^g~` 0GNPRG|o0NPITl8 Tn8`@RD`"@RD0,@<,<@RDJf0BG` yJB@2pN*RGGn0HѹBrBD?TBG`<0NOP|l APpE|:rF|<0NPRGol yJN ?@R@f0Hѹf^"9f^S(cJ9*fAp*N*S(`(0NOpE|:rF|<SCg0NP0RGom yJNzJ@g yppN@JCn|o&BG` yJB@2pN*RGGn0HѹOLNuHEG:>< AEpPgvsPg|rPgpIPKP24s g*43 Gg2`460 C 7061 0621067 101PKP6s0f 70:LNu50:LNu23P`22P`EGKfhHEGKfh<rC`Ft|B>< 5`7`ByIJAmM Vf<9``<9``M Vg4rzAJM BVvEz(.EMVo8L3<|m9 `5 `7 `82 9@83 9@M 8s@g650<Nu~| m4<<` y BB0@0Ѐ"n21|<0VmF 0G nK2GA0GgS@ VfD@BS@>|l~0HЀ n1:tJE|@HԂ424(4HԂr(f08f@4xLE|@2H؄64H9H8H؄9HHփ787H5H nR0PNuRG`60HЀ234HԂ7(Hҁ9249(Hҁ75(Br9NuD@BS@>06.4HԂ=t("nB102Hҁ037(HЀ9049(HЀ75( y 0 n1(2G n4x0LC|@2H؄:4H9H8H؄9HHڅ7X7H5H"nR1049YX0Gx0LC|@2H؄04H9H8H؄9HHЀ77H5H nR00NuSnRV V@fJ <! nC a7"yJ0< nA!aTyY`3 YX9*f Ap*a)$H8$n(n&n42Hҁ02gJ63840HЀ90HЀ762Br| l"nS10 10b "n2Hҁ:1|Bm| 80E02HЀ`"|Bm| El82| 302Ѐ:12|fҰ|@lBm| El82|3"y B@10H"nt1JC|@HԂ424(4HԂr(f08HЀ:3442Hҁ9HԂ7(4HԂ:3(2Hҁ97:4(2Hҁ795(Br(9(=Ca&ByYna*# B EYfGY`"yJ0Gm|lBA0 RBB00a``"2EUA|0|aL`aSDnSo>0o29Yngar09Yng r҃# 9 L|8NuNN2NNuH068E G 49 f<3 ty^0Rea09YnfBR3YdRRp09Yd SB0p0 SRR0@ARp|eJ9 t49Yd"S1(2It4"S(RRt4"S(RRBC`LRCJDf0@ARpL NuH8(HEG& Kp N*/ "L KNmXO Kp N*pNLNu/?09\fHB@`62BB`vAJCg6K8<C2`IRB|e4BA 1 R@|c3\8&Nu?/ 6E 0*h5@`6R0*2hj *gS yJN}BA5A`Bj4RnƗR0*2hj$_6Nu??689 rlN086NuH 68E RlR02hj` *d yJ0R2hjN*R`3Yn|l0rC4h5@`: *d yJ0rhN*R`3Yn0rC4h5@LNuH&H62HpN}`62Hӹ AU0` 2IBB8B|BC 41 A0S@l0LNuH0&H6$I" gJH/"pN|d8AfN`,09U0HBA49U0A|AA 20@3U0SClL NuBy By By pNNu3 By Nu/B@A B` 2ABpR@|m2<C`SAJAo1gB@`JBB1R@JBf6v`R@RC@oJ1g|nP`"|o|fRPRh`Rh`6CRp0@n&NuH 68<E`SCJCo20g20NBD`LBE2@RD|n 2pN`rpiUApENDf`RD|l2@grD|pNzDnLxNuH86<E`SCJCo20g2p NLBDG I`BE2@RDJEf|`RDRFDo2@g|nBE` 2B@NREEn`t|n2+B@,NrFpN`T|f"2B@N2+B@,NrpN`,2+B@,NrFp N`0@23B@4PNDnLLxNu?6@A20CB@10N^6Nu??8BC`HRCJ@f0@A 20CB@10N*|c22RDt4 UB@0(|Ndp0 UBG0ORDp0BA0ARD0Nd`0RDr2 UB@0N*09Ynf0REEbBE` 0@BrRE|eBE` 0@BtRE|eL#g yBB@`2AABpR@|mB@`2AABpR@|mB@3 3 NP$_Nu09Ynf NBApNNuH0UO>6>0N8EGJDf.0Nv:BF`B2`RFFnBF` 0@7RF|m`xBF`T:9 p m|f0<`HRE2y f|lp`pEN`RFWfpN:`B2`RFSElFn`B2`RFFn"Kr J0NgTOL NuH0p N6EGJCf0p N8BE`B2PRE|mBE` 0@7RE|m`BE`09 H@A80|m40<29 @g4BA80 `2AA80H|lAB@0@N|n4JDfx`&|f pN8VD`p N8|`B2PRESDl` <PREEnX`B2PRE|m"Kr J0<NgL 8Nu?09Jf$pN3JtrpNNtrpNSyJ09 H@A60|e2p29 @g4BA60 `2AA60H|dAB@00N06Nu?09 H@A60|e40<29 @g4BA60 `2AA60H|dAB@00NTJCgpCNrtiA606NuNByJNu?/ 6E`y l Rl0`p@ARp`(RR2AA00N2AA00NSR$_6NuH 8BCE` 0@BrRC|o0NBDv`0@22tiASCJCn`6CA&NmhSj v`0@22g SrTr`SCJCnSDJDfv`$0@02` jTr2 j"S@lSCJCnLNu//A 2A20`^hl(6C600Hփ"h6188D80@H؄qHcRB6Hփ"h8186C600Hփq8c8D6C1@004Bho4B1 (&Nu// OBor`4B47 6CEr0B?0RA|oBA`BC0C470Rw06Hփ38RAAnO$$_&NuH<6$I*o(I 9C)H)J(8,GBSBlBE`$ l(B0P0HЀ l20g RS4B9 RElm Sl0,HЀBu0,`:Hŋ`0NSE|l)M:,ll lT00@9tSSpN`<,ll lT0>RD0HЀ l204HԂp(0HЀ19GpN0@A1C3 Snx)M0NB"M J0Nr0LBD`p0BF20g<F<3`>Gpp?F@e63p` |<܆9hRCoe`p<F23`>/o|<܆Ch6E`J<fBG<FK;`K;`2RB<Wg>GK"M`<FK"MASCJCf2<F7`RDone#Yf <!N># <!N>#Yj <BN>#YH <N>#YT <N>#YP <N>#YL f AvNNuHpa/(HHx?<HNA\R<*@Bg/ ?<=NAPJkX&/ Hx??<?NAO ??<>NAX U`g@ MprtSAQWf -afxg m-lf --gv` v`v`v/ ?<INA\ a LNuHag ",)@ LNu/B?< NA\/?< (x XBRAf AFX g(l`NA\ NuI I PARXfNA\ NuA(p"@ "ByA1B33O"Nu/ Hz?<&NN\O$_Nu"_HpNLJ@fpN/ "yv ),g8"@g2g.f$HgggJf`g<=fJfRI I$_Nu`O~"Ap~WF< oJf J(fp @/ /Ho/?<?<KNAO$_ oJk0p`Z|g"|g&|g*|g.|g23 t`03t`&3t`3t`3 t`3tpONu/YOM,C HzaXOXO,_NuH@B@H@CraBA< <b;k`|<*f<`&<0< b ACp a$Wb<gt<.f6<*f4`$<0< b ACp a$Wb4g<߲<Lf g`<hggr@dp|?@0;N`````N`N``````````````````````````NNN````````````````` [0`|A`0A2"LaN@`\ [2"LaL@`JJEj `p0?4 La"TO@`*JEj `0H?4 LaTO@` JEj `p0?4 LaTO@`JEj `p0?4 LaTO@`@HN0\OLxNup24C8jxA aA pJWF@?@gA 2SAktaSb (Q2/@4/(jt@jtBgf 0Ao@@Alx?B?D`hH0$H&IB(v`H0$H&IvJWFCJBj4Cb6xJAkCc8Cf K0a0 JN` 0 JN0 Kap0DL Nu6x0/g f@ JaP0/g@AN0/g@ Ja,0/g@A N0/g g@ Ja0OLNuH0E6`H0E4&H6g8Kg SC JpNQ J0|gNL Nu00000000 /YOMPC HzNHz2aLPOJ.f2k?0Aa20JAkXO,_Nup`JgAa n L"oR0aJ@kfAJk [RCJEk0` ` L"oR0aJ@kfxAJk [RCJEk0` ` L"oR0aJ@kXfJAJk [RCJEk0` ` L"oR0aJ@k*fAJk [RCJEk0` `0&LRG4`kIB4`b,ֆSDgNRG4`b`NSGB@$2LNup`NSGp`H8vBG8ghzB$H&IINJ@kbRG4`k<0fSDgBNRG<߰<Xf SDg.NRGI4`b,ֆSDgNRG4`b`NSGB@$2LNuP`NSGp`H8vBE8gjB$H&IIdNJ@kdRE4`k<-Wg<+fNREI<4`< b<ֆSDg NRE4`< b փ"փփց`NSE$JgD2B@LNup`NSEp`H<8z$H&IINJ@knREJ4k| gNSEJj$JDgJNREJ@kB| gJ4jNSE`0SDf`**o JDg NREJ@k| gJ4jNSE`SDfB2QL<8NuP`H06g(8$H&IJCjvJj NJ@kSCf` NJ@kSCfQC2L NuP`H<6g^8BE$H&I(o$Jj$NJ@j P`FNJ@k> F4Pg>SCf`**o NJ@j P`NJ@k F4PgSCfBQC2L<8NuBN`(VHNuJ(g/aH _(g(g/a _J@f B@Nu3 tNuH8$H&I+g|2g+gC'I&'IR'I UAe"S(kt d W`2+gH@ KarLJ@f,H@ KaLJ@gkg&B JLNu3 t`H8$HG+gV"S(kt `df`2+g// Ka"_ _J@f,// Kap"_ _J@gk`&B JLNu3 t``CaAp `&/ / B@JgB)g@)fJ&Q(i ge"// Iab"_ _J@f&Q`B@"(_&_Nu3 tp`#H#H&HJfS#K " I(Ia"LJ@f`H:$H&I(S&gfJg^+g`)ft,k x$ڹd SfRe`.&// Ka$"J@k,f4(SSfRf& L\Nu3 tp`"`&x,A'J'JE8'J & KaTJ@kfRf"`H:$H&I(Sx&gZJgV+gX,k$dSfRe`6+g// Ka$"J@f.// Kax$"J@kf(S,k`& L\Nu3 tp`"PdB@ Nu(g*gg/a _J@f/a _J@kf"P`3 tpNu/ &Hrt0+aJk2+gГ` S"+gt SASWfSQ&_Nup`pr`H&H&8|f֓b e&`8+g+g2 KaJ@f:"40+a*Jk* k&'HpLNu3 t`3tp`p/alXONu(g4(f>"P | dNu?/aJ _2J@f 0Nu3 tpNuC!I!IR!I `H&H(o Ia6kl g La` a(Jf\(H <a |)HgN0@0;\ Ka|gB9@{0`Q l)H()H C#z LLNup`p`p 3t la ޑ`a)b*a)b* YOCBgg Ar`THWf0XONup`rwar+w+a+rbwbabr+b rb+ w+b wb+ a+b ab+ Ap`Ar(WVNu?/ Aa4A&a*G6<`Gp+g Ka Q&_6Nu/ &H+g+g8aVJ@f80+aJ@k,+g ka B@7@? Ka0&_Nu3 tp`H&&H(I|f,g ka RA&'H'HRH'H `8g ka &$ f a V$g"(H'L&'LA8'H pLNup`J@k"Pc  PNupNuH&H(k L0+"+ a.JkRgF+f, L"St gSj`"HSISSk ögSjJg&"'LBLNup`p`H&H(k6+"+g0DtaNJk+fZ"S"L Ip gSj`*| // " 0a"_"JkNgPAp SjH@" 0aLJk*g,`0" LaJkg&'LB@LNup`p`H06&Hp Cgp@CfFpC?/ ?<=NAPOJk&8jaTpCgF?<?p/?<BNAO Jj.`Br߲fNAXONua3tp`ް|c/ ??<>NAXO$_JkpNuaj3tpNu/ /?<ANA\OJkp$_NuaF3tp$_NuH/<VNA J@kp$_Nua3tp$_Nu/ J@f//aJ@fBg`//??<?NAO $_JkNu  _`a3tpNuH&Hx&SgkJ9hkvf~a<g&< g<<gP< g< e޸dRa`JgSSKpap apa`Rp ahp a`bJg^h`TxB9h`Jx B9h`hp a2 L$_NuBx`xB9h`x B9h`?<NATONu??<NAXONuH@??<@NAO $_JkfNua3tpNu3tNu/ |b2@?? /?<BNAO JjfSBg jX?<? p/?<BNAO Jk$`X?<? p/?<BNAO JkzЁ"kt?<? p/?<BNAO Jk\$`?<? p/?<BNAO Jk@$Ҁk: $k2HzN <e/`/? ?<@NAO Jkb $_Nua3tp$_Nu0<`H 6?<?B?<BNAO (Bg?/<?<BNAO *Bg?/?<BNAO JWHL8NuHR Cj$Q`"J$R" gf"Aa Ja$_NuD@| |"b;NupNu   JgJgJgJgJg JgJgJfSHggggg ggf @NugfSHNuJgNug fC`Jg INuSHNugHf8g@f0g8f(g0f g(fg fgfgg!epNupNuJfpNu g<g8g4g0g,g(g$g ggggg ggf @Nu"HJgJgJgJgJg JgJgJf SNuSeg gb pNuJfpNupNu"SefBJgSf ANu/ / g($Ig"f&Hggg"J K`A&_$_Nu`H0$H|g|$bGrtgJ3kSJgtJ@f"p <0f:pgb<߶<Xf(pf"`N|f<0fg><߶<Xfg.GV3d"3d&HCHCJCfԃԁd` & gSJ"L Nu3"tp` 3!tp& g"`"CB@f ANu//"4UB|"bZC"t&HCJCf&HC;0NRBH@B@H@f`$?&8BCHC06H@0HC;0&RBJf8QB" _&Nu3!t`0123456789abcdefghijklmnopqrstuvwxyz?/ $HpJWF6RaD g"Hf I$_6NuH &/?<HNA\OJf 9g @ NJ@fp @LNuH0&gPR<e a g!CCn "A`rGr&S f. < a gj&@Ap !| 'H&r#rA"P` )d I"Q f`rd ` #@#C"nAL Nuk |`3 t`/ oLQ d nf@axJg*`6Cn g,g"@ f` "/?<INA\OJj`p$_Nugp`/ &yn g/ &S?<INA\O`&yr g/ &S?<INA\O`&_NuH8$< CGr g" c &@ f`(@ ,gb*"Ҩeg ` )H`p"@")Ө )H`>"@ gb" ҩeg`N"(ө`" "H" ҩf @"(ө" l eb&/ ?<INA\OJfQLNuP`Se gepNupNupNuJg/bg2 4gf!Sf`f`!Sg"gH?LxH?LxH?LxH?Lx`H?Lx8H?LxH?LxH?LxH?LxH?LxpH?LxHH?Lx H?LH?SfvLx2|HgS@!!Q|gSA!Q`2 4gfSf`f`S"gH?LxHxLxHx(LxHxPLxHxxLxHxLxHxLxHxLxHxLxHx@LxHxhLxHxLxHxLHSfxLx2|HgS@ Q|gSAQ _Nu/$gSe40HB4 gxH_>"&(*,."B$B&B(B*B,BH~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H`SfL||0HgS@!Q|gSAQ _NuBAA0Nu  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~@@@@@@@@@@@@@@@@@@@@@@@@@@@::::::8888888888888888888866666644444444444444444444@  !"#  !"#$HBJBf($HBJBf H@B@H@NuB@H@HB0@0H@0H@Nu AH@r2B@tЀӁd҈рӁQF@Nu$jD"BJjD$HBJBf4$HBJBfH@B@H@$ jDNuB@H@HB0@0H@0H@$ jDNu AH@r2B@tЀӁd҈рӁQF@$ jDNu/ /|?// ?</NATO&?<NA\O?<NNAPO/&?<NA\OJfB@&$_Nup3t`/ //?</NATO&?<NA\O?<ONATO/&?<NA\OJfB@&$_Nup3#t`09f/ ?<NATO$_J@f#NuByNu/ Bg?/?<WNAO J@kp$_Nu3 tp$_Nu/ ?<?/?<WNAO J@kp$_Nu3 tp$_Nu/ /?<NA\O$_Nu/ /?<9NA\O$_Nu/ /?<HNA\O @$_Nu/ //??<JNAO $_Nu/ ??/?<CNAO $_Nu/ /?<INA\O$_Nu LHarc 2.01i (c)Yoshi, Quester, 1988-91.(Assemblerversion vom 10.11.1991) LHarc Version 2.01i (Atari ST) Copyright (c) Haruyasu Yoshizaki, 1988-89. Optimiert von Thomas Quester 1989-91 ================================================================ 03.07.91 === <<< High-performance file-compression program >>> =============================================================================== Aufruf: LHarc [] [{{/|-}{[-|+|2|