Home » Archimedes archive » Acorn User » AU 1993-10.adf » !3DGraphic_3DGraphic » 3Ded

3Ded

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1993-10.adf » !3DGraphic_3DGraphic
Filename: 3Ded
Read OK:
File size: 8F9E bytes
Load address: 0000
Exec address: 0000
File contents
   10REM     >3Ded
   20REM     A simple 3D editor
   30REM By  DCA
   40REM For 32-bit machines
   50REM (c) BAU October 1993
   60:
   70MODE 15
   80OFF
   90*FX 229,1
  100*POINTER 1
  110MOUSE ON
  120PROCinit_modules
  130PROCinit
  140PROCscreen
  150MOUSE was_mx%,was_my%,was_mb%
  160click_time%=TIME
  170PROCensure_there_is_a_world
  180quit%=FALSE
  190REPEAT
  200 MOUSE mx%,my%,mb%
  210 repeating%=FALSE
  220 IF mb%<>was_mb% THEN
  230  was_mb%=mb%
  240  click_time%=TIME
  250  IF mb%<>0 THEN
  260   PROCclick(mx%,my%,mb%)
  270  ENDIF
  280 ELSE
  290  IF TIME-click_time%>repeat% AND mb%<>0 THEN
  300   IF mx%=was_mx% AND my%=was_my% AND my%>40 AND mx%<66*16 THEN
  310    PROCidle(mx%,my%,mb%)
  320   ELSE
  330    WAIT
  340    repeating%=TRUE
  350    PROCclick(mx%,my%,mb%)
  360   ENDIF
  370  ELSE
  380   k%=INKEY(0)
  390   IF k%=27 AND (INKEY-1 OR INKEY-2) quit%=TRUE
  400   IF k%<>-1 THEN
  410    PROCkey(k%)
  420   ELSE
  430    PROCidle(mx%,my%,mb%)
  440   ENDIF
  450  ENDIF
  460 ENDIF
  470 was_mx%=mx%
  480 was_my%=my%
  490UNTIL quit%
  500MODE 12
  510*FX 229,0
  520END
  530:
  540DEF PROCinit
  550
  560max_vert=256
  570verts=0
  580DIM v(max_vert,2)
  590
  600DIM col_spr% 20*1024
  610!col_spr%=20*1024
  620col_spr%!4=0
  630col_spr%!8=16
  640col_spr%!12=16
  650SYS "OS_SpriteOp",15+256,col_spr%,"cols",,16*8,16*8,15
  660SYS "OS_SpriteOp",60+256,col_spr%,"cols"
  670FOR col%=0 TO 255
  680 GCOL col% AND 63 TINT col% AND 192
  690 RECTANGLE FILL 16*(col% MOD 16),32*(col% DIV 16),16,32
  700NEXT
  710SYS "OS_SpriteOp",60+256,col_spr%,0
  720
  730max=400
  740DIM obj 4*max,saved(max)
  750
  760heap_size=(HIMEM-END-32*1024) AND (NOT 4095)
  770DIM heap heap_size
  780SYS "BAU3D_HeapInit",heap,heap_size
  790
  800dist=800:zplus=10000
  810ang_scale=&10000/360
  820
  830DIM com$(10),file$(256),rgb%(2)
  840com$()="*","LOAD","SAVE","EDIT","POLY","ZOOM","CREATE","DELETE","MERGE","CLOSE"
  850white%=&FFFFFF00
  860black%=&00000000
  870dark_red%=&00006000
  880yellow%=&00F0F000
  890blue%=&F0000000
  900panel_width%=512-16
  910panel_height%=(1024-180) DIV 2
  920cur_mode%=-1
  930DIM view_xyz 12,view_ang 12
  940DIM oxyz%(3,2),oang%(3,2)
  950PROCinit_orig
  960oang%(2,0)=90
  970oang%(3,1)=-90
  980ang_scale=&10000/360
  990scale=10000
 1000cur_obj%=-1
 1010selected%=-1
 1020vertex%=-1
 1030info_mode%=-1
 1040objects=0
 1050obj_first=0
 1060scale2d=5000
 1070cur_view%=-1
 1080
 1090DIM panel_x0%(3),panel_y0%(3),panel_x1%(3),panel_y1%(3)
 1100panel_x0%()=0,16+panel_width%,0,16+panel_width%
 1110panel_x1%()=panel_x0%()+panel_width%
 1120panel_y0%()=40,40,40+16+panel_height%,40+16+panel_height%
 1130panel_y1%()=panel_y0%()+panel_height%
 1140
 1150repeat%=30
 1160view_needs_update%=FALSE
 1170cur_view_needs_update%=FALSE
 1180zoom%=10
 1190
 1200bit_merge=64
 1210bit_surf=128
 1220bit_disp=256
 1230bit_dispall=512
 1240bit_closed=1024
 1250
 1260obj_list=0
 1270obj_name=4
 1280obj_req=8
 1290
 1300surf_type=0
 1310surf_colour=4
 1320surf_n=8
 1330surf_coords=12
 1340surf_req=12
 1350
 1360subobj_next=0
 1370subobj_type=4
 1380subobj_flags=8
 1390subobj_offset=12
 1400subobj_angle=24
 1410subobj_surfreq=36
 1420subobj_bounds=36
 1430subobj_req=132
 1440
 1450ENDPROC
 1460:
 1470DEF PROCinit_modules
 1480*RMEnsure BAU3D 0.40 RMLoad BAU3D
 1490*RMEnsure ColourTrans 1.00 Error 0 3Ded requires ColourTrans module
 1500ENDPROC
 1510:
 1520DEF PROCinit_orig
 1530oxyz%()=0
 1540oxyz%(0,2)=2000000
 1550ENDPROC
 1560:
 1570DEF PROCshow_commands
 1580LOCAL i%
 1590FOR i%=0 TO 9
 1600 PROCshow_command(i%)
 1610NEXT
 1620ENDPROC
 1630:
 1640DEF PROCshow_command(i%)
 1650LOCAL x%
 1660VDU 5
 1670x%=128*i%
 1680IF i%=cur_mode% PROCgcol(blue%) ELSE PROCgcol(dark_red%)
 1690RECTANGLE FILL x%,1024-44,124,40
 1700IF i%=cur_mode% PROCgcol(yellow%) ELSE PROCgcol(white%)
 1710RECTANGLE x%,1024-44,124,40
 1720MOVE x%+64-8*LEN(com$(i%)),1024-12
 1730PRINT;com$(i%);
 1740VDU 4
 1750OFF
 1760ENDPROC
 1770:
 1780DEF PROCgcol(rgb%)
 1790SYS "ColourTrans_SetGCOL",rgb%,,,&100
 1800ENDPROC
 1810:
 1820DEF PROCcolour(rgb%)
 1830LOCAL col%
 1840SYS "ColourTrans_ReturnGCOL",rgb% TO col%
 1850COLOUR (col%>>2) TINT (col% AND 3)<<6
 1860ENDPROC
 1870:
 1880DEF PROCcolourb(rgb%)
 1890LOCAL col%
 1900SYS "ColourTrans_ReturnGCOL",rgb% TO col%
 1910COLOUR 128+(col%>>2) TINT (col% AND 3)<<6
 1920ENDPROC
 1930:
 1940DEF PROCscreen
 1950LOCAL i%
 1960VDU 26,20
 1970CLS
 1980OFF
 1990PROCshow_commands
 2000PROCshow_panels
 2010PROCinfo_bar
 2020ENDPROC
 2030:
 2040DEF PROCshow_panels
 2050LOCAL i%
 2060FOR i%=0 TO 3
 2070 PROCshow_panel(i%)
 2080NEXT
 2090ENDPROC
 2100:
 2110DEF PROCshow_panel(panel%)
 2120LOCAL x%,y%,i%
 2130x%=(panel% MOD 2)*(panel_width%+16)
 2140y%=(panel% DIV 2)*(panel_height%+16)+40
 2150PROCgcol(black%)
 2160RECTANGLE FILL x%,y%,panel_width%,panel_height%
 2170IF panel%=cur_view% PROCgcol(yellow%) ELSE PROCgcol(white%)
 2180RECTANGLE x%,y%,panel_width%,panel_height%
 2190ORIGIN 0,0
 2200VDU 24,x%+2;y%+4;x%+panel_width%-2;y%+panel_height%-4;
 2210ORIGIN x%+panel_width% DIV 2,y%+panel_height% DIV 2
 2220IF cur_obj%<>-1 THEN
 2230 CASE panel% OF
 2240  WHEN 0:
 2250   FOR i%=0 TO 2
 2260    view_xyz!(4*i%)=oxyz%(0,i%)
 2270    view_ang!(4*i%)=oang%(0,i%)
 2280   NEXT
 2290   SYS "BAU3D_WriteConfig",%110,dist,zplus,-zplus*0.8,10000000
 2300   SYS "BAU3D_Render",obj!(4*cur_obj%),view_xyz,view_ang
 2310  WHEN 1,2,3:PROCview_2d(panel%)
 2320 ENDCASE
 2330ENDIF
 2340VDU 26
 2350OFF
 2360ENDPROC
 2370:
 2380DEF PROCview_2d(p%)
 2390LOCAL i%,x0,x1,y0,y1,xmin,ymin,zmin,xmax,ymax,zmax,ox,oy,oz,aa,ao,x,y
 2400LOCAL surf%
 2410FOR i%=0 TO 2
 2420 view_xyz!(4*i%)=oxyz%(p%,i%)
 2430 view_ang!(4*i%)=ang_scale*oang%(p%,i%)
 2440NEXT
 2450SYS "BAU3D_WriteConfig",%110,dist,zplus,-10000000,100000000
 2460SYS "BAU3D_Render2D",obj!(4*cur_obj%),view_xyz,view_ang,scale2d*(10/zoom%)
 2470IF selected%<>-1 THEN
 2480 PROCgcol(white%)
 2490 IF (selected%!subobj_flags AND bit_surf)>0 THEN
 2500  surf%=selected%!subobj_type
 2510  coords%=surf%+surf_coords
 2520  PROCgcol(white%)
 2530  MOVE FNx(p%,0),FNy(p%,0)
 2540  FOR i%=surf%!surf_n-1 TO 0 STEP -1
 2550   DRAW FNx(p%,i%),FNy(p%,i%)
 2560  NEXT
 2570  FOR i%=0 TO surf%!surf_n-1
 2580   IF i%=vertex% PROCgcol(yellow%) ELSE PROCgcol(white%)
 2590   RECTANGLE FNx(p%,i%)-8,FNy(p%,i%)-8,16,16
 2600  NEXT
 2610 ELSE
 2620  PROCfind_bounding_cube(selected%,xmin,ymin,zmin,xmax,ymax,zmax)
 2630  ao=selected%+subobj_offset
 2640  aa=selected%+subobj_angle
 2650  ox=!ao
 2660  oy=ao!4
 2670  oz=ao!8
 2680  CASE p% OF
 2690   WHEN 1:
 2700    x0=xmin+ox
 2710    y0=ymin+oy
 2720    x1=xmax+ox
 2730    y1=ymax+oy
 2740   WHEN 2:
 2750    x0=xmin+ox
 2760    y0=zmin+oz
 2770    x1=xmax+ox
 2780    y1=zmax+oz
 2790   WHEN 3:
 2800    x0=zmin+oz
 2810    y0=ymin+oy
 2820    x1=zmax+oz
 2830    y1=ymax+oy
 2840  ENDCASE
 2850  x0=(oxyz%(p%,0)+x0)/(scale2d/(zoom%/10))
 2860  x1=(oxyz%(p%,0)+x1)/(scale2d/(zoom%/10))
 2870  y0=(oxyz%(p%,1)+y0)/(scale2d/(zoom%/10))
 2880  y1=(oxyz%(p%,1)+y1)/(scale2d/(zoom%/10))
 2890  RECTANGLE x0,y0,x1-x0,y1-y0
 2900 ENDIF
 2910ENDIF
 2920IF cur_mode%=4 THEN
 2930 IF verts>0 THEN
 2940  PROCgcol(white%)
 2950  FOR i%=0 TO verts-1
 2960   CASE p% OF
 2970    WHEN 1:
 2980     x=(oxyz%(p%,0)+v(i%,0))/(scale2d/(zoom%/10))
 2990     y=(oxyz%(p%,1)+v(i%,1))/(scale2d/(zoom%/10))
 3000    WHEN 2:
 3010     x=(oxyz%(p%,0)+v(i%,0))/(scale2d/(zoom%/10))
 3020     y=(oxyz%(p%,1)+v(i%,2))/(scale2d/(zoom%/10))
 3030    WHEN 3:
 3040     x=(oxyz%(p%,0)+v(i%,2))/(scale2d/(zoom%/10))
 3050     y=(oxyz%(p%,1)+v(i%,1))/(scale2d/(zoom%/10))
 3060   ENDCASE
 3070   CIRCLE FILL x,y,4
 3080  NEXT
 3090 ENDIF
 3100ENDIF
 3110ENDPROC
 3120:
 3130DEF PROCclick(mx%,my%,mb%)
 3140LOCAL file%
 3150IF my%>=1024-44 THEN
 3160 PROCmode_select(mx% DIV 128)
 3170ELSE
 3180 CASE cur_mode% OF
 3190  WHEN 1:
 3200   file%=FNwhich_file(mx%,my%)
 3210   IF file%<>-1 THEN
 3220    PROCclear
 3230    PROCload("objects."+file$(file%))
 3240    PROCselect_obj(FNidentify_keyword("world"))
 3250    PROCmode_select(3)
 3260   ENDIF
 3270  WHEN 3:
 3280   PROCdraw_click(mx%,my%,mb%)
 3290  WHEN 4:
 3300   PROCpoly_click(mx%,my%,mb%)
 3310  WHEN 5:
 3320   PROCzoom_click(mx%,my%)
 3330 ENDCASE
 3340ENDIF
 3350ENDPROC
 3360:
 3370DEF PROCselect_obj(new%)
 3380IF new%>objects-1 new%=objects-1 ELSE IF new%<0 new%=-1
 3390cur_obj%=new%
 3400selected%=-1
 3410PROCinit_orig
 3420IF cur_obj%<>-1 PROCensure_visible(cur_obj%)
 3430PROCinfo_bar
 3440ENDPROC
 3450:
 3460DEF PROCzoom_click(mx%,my%)
 3470LOCAL pos%
 3480IF my%<40 THEN
 3490 pos%=mx% DIV 16
 3500 IF pos%=0 AND zoom%>10  zoom%-=1:PROCinfo_bar:view_needs_update%=TRUE
 3510 IF pos%=8 AND zoom%<100 zoom%+=1:PROCinfo_bar:view_needs_update%=TRUE
 3520ELSE
 3530 PROCmode_select(3)
 3540ENDIF
 3550ENDPROC
 3560:
 3570DEF PROCpoly_click(mx%,my%,mb%)
 3580IF FNpan(mx%,my%,mb%) ENDPROC
 3590IF FNcheck_for_colour(mx%,my%,mb%) ENDPROC
 3600IF FNcheck_for_add_vertex(mx%,my%,mb%) ENDPROC
 3610ENDPROC
 3620:
 3630DEF FNcheck_for_add_vertex(mx%,my%,mb%)
 3640LOCAL ok%,i%,x,y,z
 3650IF mx%>66*16 THEN =FALSE
 3660IF my%<40 THEN =FALSE
 3670ok%=FALSE
 3680i%=1
 3690WHILE i%<4 AND NOT ok%
 3700 IF mx%>=panel_x0%(i%) AND mx%<panel_x1%(i%) THEN
 3710  IF my%>=panel_y0%(i%) AND my%<panel_y1%(i%) THEN
 3720   IF i%<>cur_view% THEN
 3730    cur_view%=i%
 3740    view_needs_update%=TRUE
 3750   ENDIF
 3760   mx%-=(panel_x0%(i%)+panel_width%/2)
 3770   my%-=(panel_y0%(i%)+panel_height%/2)
 3780   CASE mb% OF
 3790    WHEN 1:
 3800     PROCdone_polygon
 3810    WHEN 4:
 3820     CASE cur_view% OF
 3830      WHEN 1:
 3840       x=mx%*scale2d*(10/zoom%)-oxyz%(cur_view%,0)
 3850       y=my%*scale2d*(10/zoom%)-oxyz%(cur_view%,1)
 3860       z=0
 3870      WHEN 2:
 3880       x=mx%*scale2d*(10/zoom%)-oxyz%(cur_view%,0)
 3890       y=0
 3900       z=my%*scale2d*(10/zoom%)-oxyz%(cur_view%,1)
 3910      WHEN 3:
 3920       x=0
 3930       y=my%*scale2d*(10/zoom%)-oxyz%(cur_view%,1)
 3940       z=mx%*scale2d*(10/zoom%)-oxyz%(cur_view%,0)
 3950     ENDCASE
 3960     v(verts,0)=x
 3970     v(verts,1)=y
 3980     v(verts,2)=z
 3990     verts+=1
 4000     IF verts=max_vert PROCdone_polygon
 4010     view_needs_update%=TRUE
 4020   ENDCASE
 4030   ok%=TRUE
 4040  ENDIF
 4050 ENDIF
 4060 i%+=1
 4070ENDWHILE
 4080=ok%
 4090:
 4100DEF PROCdone_polygon
 4110LOCAL new_surf%,new_sub%,i%,a
 4120IF verts>=3 THEN
 4130 SYS "BAU3D_Malloc",surf_req+12*verts TO new_surf%
 4140 new_surf%!surf_type=0
 4150 new_surf%!surf_colour=(rgb%(0)<<8)+(rgb%(1)<<16)+(rgb%(2)<<24)
 4160 new_surf%!surf_n=verts
 4170 FOR i%=0 TO verts-1
 4180  a=new_surf%+surf_coords+12*i%
 4190  !a=v(i%,0)
 4200  a!4=v(i%,1)
 4210  a!8=v(i%,2)
 4220 NEXT
 4230 SYS "BAU3D_Malloc",subobj_req TO new_sub%
 4240 new_sub%!subobj_flags=bit_surf
 4250 new_sub%!subobj_type=new_surf%
 4260 FOR i%=0 TO 2
 4270  new_sub%!(subobj_offset+4*i%)=0
 4280  new_sub%!(subobj_angle+4*i%)=0
 4290 NEXT
 4300 IF !(FNo+obj_list)=0 THEN
 4310  new_sub%!subobj_next=0
 4320  !(FNo+obj_list)=new_sub%
 4330 ELSE
 4340  a=!(FNo+obj_list)
 4350  WHILE a!subobj_next<>0
 4360   a=a!subobj_next
 4370  ENDWHILE
 4380  new_sub%!subobj_next=0
 4390  a!subobj_next=new_sub%
 4400 ENDIF
 4410ENDIF
 4420view_needs_update%=TRUE
 4430verts=0
 4440ENDPROC
 4450:
 4460DEF PROCdraw_click(mx%,my%,mb%)
 4470IF FNcheck_for_click_on_vertex(mx%,my%,mb%) ENDPROC
 4480IF FNcheck_for_name_edit(mx%,my%,mb%) ENDPROC
 4490IF FNcheck_for_colour(mx%,my%,mb%) ENDPROC
 4500IF FNdrag_obj(mx%,my%,mb%) ENDPROC
 4510IF FNdrag_v(mx%,my%,mb%) ENDPROC
 4520IF FNpan(mx%,my%,mb%) ENDPROC
 4530IF FNcheck_for_insert_obj(mx%,my%,mb%) ENDPROC
 4540IF my%<40 PROCoffset_click(mx%,my%):ENDPROC
 4550IF mx%>66*16 PROCobjlist_click(mx%,my%,mb%):ENDPROC
 4560IF repeating% ENDPROC
 4570IF cur_view%=-1 THEN
 4580 PROCtry_new_panel(mx%,my%)
 4590ELSE
 4600 IF mx%<panel_x0%(cur_view%) OR mx%>panel_x1%(cur_view%) OR my%<panel_y0%(cur_view%) OR my%>panel_y1%(cur_view%) THEN
 4610  PROCtry_new_panel(mx%,my%)
 4620 ELSE
 4630  IF mb%<>2 PROCselect_object(mx%,my%,mb%)
 4640 ENDIF
 4650ENDIF
 4660ENDPROC
 4670:
 4680DEF FNcheck_for_click_on_vertex(mx%,my%,mb%)
 4690LOCAL i%,ok%,surf%,j%,x%,y%
 4700REM IF INKEY-1 THEN =FALSE
 4710IF my%<40 OR mx%>66*16 THEN =FALSE
 4720IF NOT FNediting_surf THEN =FALSE
 4730IF repeating% THEN =FALSE
 4740IF cur_obj%=-1 OR selected%=-1 THEN =FALSE
 4750IF (selected%!subobj_flags AND bit_surf)=0 THEN =FALSE
 4760surf%=selected%!subobj_type
 4770ok%=FALSE
 4780i%=1
 4790WHILE i%<4 AND NOT ok%
 4800 IF mx%>=panel_x0%(i%) AND mx%<panel_x1%(i%) THEN
 4810  IF my%>=panel_y0%(i%) AND my%<panel_y1%(i%) THEN
 4820   x%=mx%-(panel_x0%(i%)+panel_width%/2)
 4830   y%=my%-(panel_y0%(i%)+panel_height%/2)
 4840   FOR j%=0 TO surf%!surf_n-1
 4850    IF ABS(x%-FNx(i%,j%))<32 THEN
 4860     IF ABS(y%-FNy(i%,j%))<32 THEN
 4870      ok%=TRUE
 4880      vertex%=j%
 4890      view_needs_update%=TRUE
 4900     ENDIF
 4910    ENDIF
 4920   NEXT
 4930  ENDIF
 4940 ENDIF
 4950 i%+=1
 4960ENDWHILE
 4970IF NOT ok% AND vertex%<>1 THEN
 4980 vertex%=-1
 4990 ok%=TRUE
 5000 view_needs_update%=TRUE
 5010 PROCtry_new_panel(mx%,my%)
 5020ENDIF
 5030PROCinfo_bar
 5040=ok%
 5050:
 5060DEF FNcheck_for_insert_obj(mx%,my%,mb%)
 5070LOCAL x%,y%,b%,obj_to_drag%,x2%,y2%,drag$,ok%,i%
 5080LOCAL ERROR
 5090ON ERROR LOCAL RESTORE ERROR:PROCerr_bar(TRUE):PROCinfo_bar:=FALSE
 5100IF FNediting_surf THEN RESTORE ERROR:=FALSE
 5110IF NOT ((mb%=4 OR mb%=1) AND repeating%) THEN RESTORE ERROR:=FALSE
 5120IF mx%<66*16 THEN RESTORE ERROR:=FALSE
 5130y%=31-(my% DIV 32)
 5140IF y%<4 OR y%>28 THEN RESTORE ERROR:=FALSE
 5150obj_to_drag%=obj_first+y%-4
 5160IF obj_to_drag%<0 OR obj_to_drag%>=objects THEN RESTORE ERROR:=FALSE
 5170drag$=FNget_string(!(obj!(4*obj_to_drag%)+obj_name))
 5180MOUSE x%,y%,b%
 5190VDU 5
 5200GCOL 4,63 TINT 192
 5210PROCshow_drag
 5220REPEAT
 5230 MOUSE x2%,y2%,b%
 5240 IF x2%<>x% OR y2%<>y% THEN
 5250  PROCshow_drag
 5260  x%=x2%
 5270  y%=y2%
 5280  PROCshow_drag
 5290 ENDIF
 5300UNTIL b%=0
 5310PROCshow_drag
 5320VDU 4
 5330OFF
 5340IF FNcheck_for_self_ref(obj!(4*obj_to_drag%),obj!(4*cur_obj%)) THEN ERROR 9999,"Illegal self-reference"
 5350ok%=FALSE
 5360FOR i%=1 TO 3
 5370 IF x%>=panel_x0%(i%) AND x%<panel_x1%(i%) AND y%>=panel_y0%(i%) AND y%<panel_y1%(i%) THEN
 5380  ok%=TRUE
 5390  PROCinsert_an_obj(obj_to_drag%,i%,x%,y%)
 5400  i%=3
 5410 ENDIF
 5420NEXT
 5430RESTORE ERROR
 5440=ok%
 5450:
 5460DEF PROCinsert_an_obj(o,p%,mx%,my%)
 5470LOCAL new,a
 5480IF cur_obj%=-1 THEN ENDPROC
 5490SYS "BAU3D_Malloc",subobj_req TO new
 5500a=obj!(4*cur_obj%)
 5510new!subobj_next=a!obj_list
 5520a!obj_list=new
 5530new!(subobj_angle+0)=0
 5540new!(subobj_angle+4)=0
 5550new!(subobj_angle+8)=0
 5560mx%-=(panel_x0%(p%)+panel_width%/2)
 5570my%-=(panel_y0%(p%)+panel_height%/2)
 5580CASE p% OF
 5590 WHEN 1:
 5600  new!(subobj_offset+0)=mx%*scale2d*(10/zoom%)-oxyz%(p%,0)
 5610  new!(subobj_offset+4)=my%*scale2d*(10/zoom%)-oxyz%(p%,1)
 5620  new!(subobj_offset+8)=0
 5630 WHEN 2:
 5640  new!(subobj_offset+0)=mx%*scale2d*(10/zoom%)-oxyz%(p%,0)
 5650  new!(subobj_offset+4)=0
 5660  new!(subobj_offset+8)=my%*scale2d*(10/zoom%)-oxyz%(p%,1)
 5670 WHEN 3:
 5680  new!(subobj_offset+0)=0
 5690  new!(subobj_offset+4)=my%*scale2d*(10/zoom%)-oxyz%(p%,1)
 5700  new!(subobj_offset+8)=mx%*scale2d*(10/zoom%)-oxyz%(p%,0)
 5710OTHERWISE
 5720 new!(subobj_offset+0)=0
 5730 new!(subobj_offset+4)=0
 5740 new!(subobj_offset+8)=0
 5750ENDCASE
 5760new!subobj_type=obj!(4*o)
 5770new!subobj_flags=0
 5780SYS "BAU3D_CalcBounds",obj!(4*cur_obj%)
 5790view_needs_update%=TRUE
 5800ENDPROC
 5810:
 5820DEF PROCshow_drag
 5830WAIT
 5840MOVE x%-8*LEN(drag$),y%+8
 5850PRINT;drag$;
 5860ENDPROC
 5870:
 5880DEF FNcheck_for_name_edit(mx%,my%,mb%)
 5890LOCAL was$,o,name
 5900LOCAL ERROR
 5910ON ERROR LOCAL RESTORE ERROR:PROCerr_bar(TRUE):PROCinfo_bar:OFF:=TRUE
 5920IF cur_mode%<>3 THEN RESTORE ERROR:=FALSE
 5930IF cur_obj%=-1 THEN RESTORE ERROR:=FALSE
 5940o=obj!(4*cur_obj%)
 5950IF my%<1024-3*32 OR my%>1024-2*32 THEN RESTORE ERROR:=FALSE
 5960IF mx%>60*16 THEN RESTORE ERROR:=FALSE
 5970IF o!obj_name>0 was$=FNget_string(o!obj_name) ELSE was$=""
 5980ON
 5990PRINTTAB(0,2)SPC60;
 6000PRINTTAB(0,2)"New name: ";
 6010*FX 15
 6020PROCins(was$)
 6030INPUT""new$
 6040new$=FNlc_and_us(FNstrip(new$))
 6050IF new$<>"" THEN
 6060 SYS "BAU3D_Malloc",LEN(new$)+2 TO name
 6070 $name=new$+CHR$0
 6080 SYS "BAU3D_Free",o!obj_name
 6090 o!obj_name=name
 6100 PROCinfo_bar
 6110 PROClist_objects
 6120ENDIF
 6130OFF
 6140RESTORE ERROR
 6150=TRUE
 6160:
 6170DEF FNcheck_for_colour(mx%,my%,mb%)
 6180LOCAL i%,ok%,col%,tint%
 6190IF NOT (FNediting_surf OR cur_mode%=4) THEN =FALSE
 6200IF mx%<64*16 THEN =FALSE
 6210ok%=FALSE
 6220IF mx%>=64*16 AND mx%<64*16+16*16 AND my%>=2*32 AND my%<2*32+16*32 THEN
 6230 ok%=TRUE
 6240 col%=POINT(mx%,my%)
 6250 tint%=TINT(mx%,my%)
 6260 FOR i%=0 TO 2
 6270  rgb%(i%)=(((col%>>(i%*2)) AND 3)<<6) OR (tint%>>2)
 6280 NEXT
 6290 PROCshow_colour_bar
 6300ELSE
 6310 IF my%>=20*32-16 AND my%<20*32+256+16 THEN
 6320  FOR i%=0 TO 2
 6330   IF mx%>=72*16+32*i% AND mx%<=72*16+32*i%+16 THEN
 6340    rgb%(i%)=my%-20*32
 6350    IF rgb%(i%)<0 rgb%(i%)=0 ELSE IF rgb%(i%)>255 rgb%(i%)=255
 6360    ok%=TRUE
 6370    PROCshow_colour_bar
 6380   ENDIF
 6390  NEXT
 6400 ENDIF
 6410ENDIF
 6420IF ok% THEN
 6430 IF FNediting_surf THEN
 6440  IF (selected%!subobj_flags AND bit_surf)>0 THEN
 6450   !(selected%!subobj_type+surf_colour)=(rgb%(0)<<8)+(rgb%(1)<<16)+(rgb%(2)<<24)
 6460   view_needs_update%=TRUE
 6470  ENDIF
 6480 ENDIF
 6490ENDIF
 6500=ok%
 6510:
 6520DEF PROCerr_bar(can_esc%)
 6530LOCAL wait
 6540IF can_esc% AND ERR=17 ENDPROC
 6550COLOUR %11
 6560PRINTTAB(0,31)SPC79;
 6570PRINTTAB(0,31);REPORT$;
 6580IF ERR<>9999 PRINT"' at line ";ERL;
 6590PRINT" - press a key";
 6600VDU 20
 6610*FX 15
 6620wait=GET
 6630ENDPROC
 6640:
 6650DEF PROCins(i$)
 6660LOCAL i%
 6670IF i$="" ENDPROC
 6680FOR i%=1 TO LEN(i$)
 6690 SYS "OS_Byte",138,0,ASCMID$(i$,i%)
 6700NEXT
 6710ENDPROC
 6720:
 6730DEF FNstrip(a$)
 6740WHILE ASC(a$)=32
 6750 a$=MID$(a$,2)
 6760ENDWHILE
 6770WHILE RIGHT$(a$)=" "
 6780 a$=LEFT$(a$)
 6790ENDWHILE
 6800=a$
 6810:
 6820DEF FNlc(a$)
 6830LOCAL b$,i%,c%
 6840b$=""
 6850IF a$<>"" THEN
 6860 FOR i%=1 TO LEN(a$)
 6870  c%=ASCMID$(a$,i%)
 6880  IF c%>=ASC"A" AND c%<=ASC"Z" THEN c%+=32
 6890  b$+=CHR$c%
 6900 NEXT
 6910ENDIF
 6920=b$
 6930:
 6940DEF FNlc_and_us(a$)
 6950LOCAL b$,i%,c%
 6960b$=""
 6970IF a$<>"" THEN
 6980 FOR i%=1 TO LEN(a$)
 6990  c%=ASCMID$(a$,i%)
 7000  IF c%>=ASC"A" AND c%<=ASC"Z" THEN c%+=32
 7010  IF c%=32 c%=ASC"_"
 7020  b$+=CHR$c%
 7030 NEXT
 7040ENDIF
 7050=b$
 7060:
 7070DEF PROCselect_object(mx%,my%,mb%)
 7080LOCAL p%,loop%,ok%
 7090IF cur_obj%=-1 ENDPROC
 7100IF cur_view%<=0 ENDPROC
 7110IF selected%<>-1 AND mb%=1 THEN ENDPROC
 7120IF selected%=-1 THEN
 7130 loop%=!(FNo+obj_list)
 7140ELSE
 7150 loop%=selected%
 7160ENDIF
 7170p%=loop%!subobj_next
 7180IF p%=0 THEN p%=!(FNo+obj_list)
 7190ok%=FALSE
 7200WHILE p%<>loop% AND NOT ok%
 7210 IF p%<>0 THEN
 7220  ok%=TRUE:REM should compare co-ordinates here ideally
 7230 ELSE
 7240  p%=p%!subobj_next
 7250  IF p%=0 THEN p%=!(FNo+obj_list)
 7260 ENDIF
 7270ENDWHILE
 7280IF NOT ok% THEN
 7290 IF !(FNo+obj_list)=0 THEN
 7300  PROCselect_object_raw(-1)
 7310 ELSE
 7320  PROCselect_object_raw(!(FNo+obj_list))
 7330 ENDIF
 7340ELSE
 7350 PROCselect_object_raw(p%)
 7360ENDIF
 7370ENDPROC
 7380:
 7390DEF PROCselect_object_raw(addr%)
 7400LOCAL i%
 7410IF addr%<>selected% THEN
 7420 selected%=addr%
 7430 vertex%=0
 7440 view_needs_update%=TRUE
 7450 PROCset_info_mode(5)
 7460ENDIF
 7470IF selected%<>-1 THEN
 7480 IF (selected%!subobj_flags AND bit_surf)>0 THEN
 7490  FOR i%=0 TO 2
 7500   rgb%(i%)=?(selected%!subobj_type+surf_colour+1+i%)
 7510  NEXT
 7520  PROCcls_right
 7530  PROCshow_colour_bar
 7540 ELSE
 7550  PROCcls_right
 7560  PROClist_objects
 7570 ENDIF
 7580ENDIF
 7590ENDPROC
 7600:
 7610DEF FNpan(mx%,my%,mb%)
 7620LOCAL dx%,dy%
 7630IF NOT (mb%=2 AND repeating%) THEN =FALSE
 7640dx%=(mx%-was_mx%)*scale2d*(10/zoom%)
 7650dy%=(my%-was_my%)*scale2d*(10/zoom%)
 7660CASE cur_view% OF
 7670 WHEN 0,1,2,3:
 7680  oxyz%(cur_view%,0)+=dx%
 7690  oxyz%(cur_view%,1)+=dy%
 7700  cur_view_needs_update%=TRUE
 7710  PROCinfo_bar
 7720ENDCASE
 7730=TRUE
 7740:
 7750DEF FNdrag_obj(mx%,my%,mb%)
 7760LOCAL dx%,dy%,o
 7770IF NOT ((mb%=4 OR mb%=1) AND repeating% AND cur_obj%<>-1 AND selected%<>-1AND NOT INKEY-1) THEN =FALSE
 7780IF my%<40 THEN =FALSE
 7790IF mx%>66*16 THEN =FALSE
 7800IF (selected%!subobj_flags AND bit_surf)>0 THEN =FALSE
 7810dx%=(mx%-was_mx%)*scale2d*(10/zoom%)
 7820dy%=(my%-was_my%)*scale2d*(10/zoom%)
 7830o=selected%+subobj_offset
 7840CASE cur_view% OF
 7850 WHEN 1:
 7860  o!0+=dx%
 7870  o!4+=dy%
 7880 WHEN 2:
 7890  o!0+=dx%
 7900  o!8+=dy%
 7910 WHEN 3:
 7920  o!8+=dx%
 7930  o!4+=dy%
 7940ENDCASE
 7950PROCinfo_bar
 7960view_needs_update%=TRUE
 7970=TRUE
 7980:
 7990DEF FNdrag_v(mx%,my%,mb%)
 8000LOCAL dx%,dy%,o
 8010IF NOT ((mb%=1 OR mb%=4) AND repeating% AND cur_obj%<>-1 AND selected%<>-1) THEN =FALSE
 8020IF my%<40 THEN =FALSE
 8030IF mx%>66*16 THEN =FALSE
 8040IF (selected%!subobj_flags AND bit_surf)=0 THEN =FALSE
 8050dx%=(mx%-was_mx%)*scale2d*(10/zoom%)
 8060dy%=(my%-was_my%)*scale2d*(10/zoom%)
 8070o=selected%!subobj_type+surf_coords+12*vertex%
 8080CASE cur_view% OF
 8090 WHEN 1:
 8100  o!0+=dx%
 8110  o!4+=dy%
 8120 WHEN 2:
 8130  o!0+=dx%
 8140  o!8+=dy%
 8150 WHEN 3:
 8160  o!8+=dx%
 8170  o!4+=dy%
 8180ENDCASE
 8190PROCinfo_bar
 8200view_needs_update%=TRUE
 8210=TRUE
 8220:
 8230DEF PROCoffset_click(mx%,my%)
 8240LOCAL pos%,shift%,a%,ang_shift%
 8250shift%=100
 8260ang_shift%=ang_scale
 8270IF INKEY-1 shift%=1000:ang_shift%=5*ang_scale
 8280IF INKEY-2 shift%=10000:ang_shift%=10*ang_scale
 8290CASE TRUE OF
 8300 WHEN cur_mode%=3 AND selected%=-1:
 8310  IF cur_view%<>-1 THEN
 8320   pos%=mx% DIV 16
 8330   CASE pos% OF
 8340    WHEN 0,10,20:
 8350     oxyz%(cur_view%,pos% DIV 10)-=shift%
 8360     cur_view_needs_update%=TRUE
 8370     PROCinfo_bar
 8380    WHEN 8,18,28:
 8390     oxyz%(cur_view%,(pos%-8) DIV 10)+=shift%
 8400     cur_view_needs_update%=TRUE
 8410     PROCinfo_bar
 8420    WHEN 35,45,55:
 8430     oang%(cur_view%,(pos%-35) DIV 10)=(oang%(cur_view%,(pos%-35) DIV 10)-ang_shift%) AND &FFFF
 8440     cur_view_needs_update%=TRUE
 8450     PROCinfo_bar
 8460    WHEN 43,53,63:
 8470     oang%(cur_view%,(pos%-35) DIV 10)=(oang%(cur_view%,(pos%-35) DIV 10)+ang_shift%) AND &FFFF
 8480     cur_view_needs_update%=TRUE
 8490     PROCinfo_bar
 8500   OTHERWISE
 8510    IF (pos%>=2 AND pos%<=6) OR (pos%>=12 AND pos%<=16) OR (pos%>=22 AND pos%<=26) THEN
 8520     IF cur_view%>0 THEN
 8530      PROCinput_view_offs
 8540     ELSE
 8550      PROCinput_view_offs_3D
 8560     ENDIF
 8570    ELSE
 8580     IF (pos%>=37 AND pos%<=41) OR (pos%>=47 AND pos%<=51) OR (pos%>=57 AND pos%<=61) THEN
 8590      IF cur_view%=0 THEN
 8600       PROCinput_view_angs_3D
 8610      ENDIF
 8620     ENDIF
 8630    ENDIF
 8640   ENDCASE
 8650  ENDIF
 8660 WHEN cur_mode%=3 AND selected%<>-1 AND NOT FNediting_surf:
 8670  pos%=mx% DIV 16:
 8680  CASE pos% OF
 8690   WHEN 0,10,20:
 8700    selected%!(subobj_offset+4*(pos% DIV 10))-=shift%
 8710    view_needs_update%=TRUE
 8720    PROCinfo_bar
 8730   WHEN 8,18,28:
 8740    selected%!(subobj_offset+4*(pos% DIV 10))+=shift%
 8750    view_needs_update%=TRUE
 8760    PROCinfo_bar
 8770    PROCupdate_bounds
 8780   WHEN 35,45,55:
 8790    a%=selected%+subobj_angle+4*((pos%-35) DIV 10)
 8800    !a%=(!a%-ang_shift%) AND &FFFF
 8810    view_needs_update%=TRUE
 8820    PROCinfo_bar
 8830    PROCupdate_bounds
 8840   WHEN 43,53,63:
 8850    a%=selected%+subobj_angle+4*((pos%-43) DIV 10)
 8860    !a%=(!a%+ang_shift%) AND &FFFF
 8870    view_needs_update%=TRUE
 8880    PROCinfo_bar
 8890    PROCupdate_bounds
 8900  OTHERWISE
 8910    IF (pos%>=2 AND pos%<=6) OR (pos%>=12 AND pos%<=16) OR (pos%>=22 AND pos%<=26) THEN
 8920     PROCinput_obj_offs
 8930    ELSE
 8940     IF (pos%>=37 AND pos%<=41) OR (pos%>=47 AND pos%<=51) OR (pos%>=57 AND pos%<=61) THEN
 8950      PROCinput_obj_angs
 8960     ENDIF
 8970    ENDIF
 8980  ENDCASE
 8990 WHEN FNediting_surf:
 9000  IF vertex%=-1 THEN
 9010  ELSE
 9020   pos%=mx% DIV 16
 9030   CASE pos% OF
 9040    WHEN 0,10,20:
 9050    !(selected%!subobj_type+surf_coords+12*vertex%+4*(pos% DIV 10))-=shift%
 9060     view_needs_update%=TRUE
 9070     PROCinfo_bar
 9080    WHEN 8,18,28:
 9090     !(selected%!subobj_type+surf_coords+12*vertex%+4*(pos% DIV 10))+=shift%
 9100     view_needs_update%=TRUE
 9110     PROCinfo_bar
 9120     PROCupdate_bounds
 9130   OTHERWISE
 9140    IF (pos%>=2 AND pos%<=6) OR (pos%>=12 AND pos%<=16) OR (pos%>=22 AND pos%<=26) THEN
 9150     PROCinput_vertex
 9160    ENDIF
 9170   ENDCASE
 9180  ENDIF
 9190ENDCASE
 9200ENDPROC
 9210:
 9220DEF PROCinput_view_offs
 9230LOCAL ERROR
 9240ON ERROR LOCAL RESTORE ERROR:PROCerr_bar(TRUE):PROCinfo_bar:ENDPROC
 9250PROCinput("X screen offset",oxyz%(cur_view%,0),100)
 9260PROCinfo_bar
 9270PROCinput("Y screen offset",oxyz%(cur_view%,1),100)
 9280PROCinfo_bar
 9290cur_view_needs_update%=TRUE
 9300RESTORE ERROR
 9310ENDPROC
 9320:
 9330DEF PROCinput_view_offs_3D
 9340LOCAL ERROR
 9350ON ERROR LOCAL RESTORE ERROR:PROCerr_bar(TRUE):PROCinfo_bar:ENDPROC
 9360PROCinput("X offset",oxyz%(cur_view%,0),100)
 9370PROCinfo_bar
 9380PROCinput("Y offset",oxyz%(cur_view%,1),100)
 9390PROCinfo_bar
 9400PROCinput("Z offset",oxyz%(cur_view%,2),100)
 9410PROCinfo_bar
 9420cur_view_needs_update%=TRUE
 9430RESTORE ERROR
 9440ENDPROC
 9450:
 9460DEF PROCinput_view_angs_3D
 9470LOCAL ERROR
 9480ON ERROR LOCAL RESTORE ERROR:PROCerr_bar(TRUE):PROCinfo_bar:ENDPROC
 9490PROCinput("angle about X axis",oang%(cur_view%,0),ang_scale)
 9500PROCinfo_bar
 9510PROCinput("angle about Y axis",oang%(cur_view%,1),ang_scale)
 9520PROCinfo_bar
 9530PROCinput("angle about Z axis",oang%(cur_view%,2),ang_scale)
 9540PROCinfo_bar
 9550cur_view_needs_update%=TRUE
 9560RESTORE ERROR
 9570ENDPROC
 9580:
 9590DEF PROCinput_obj_offs
 9600LOCAL ERROR
 9610ON ERROR LOCAL RESTORE ERROR:PROCerr_bar(TRUE):PROCinfo_bar:ENDPROC
 9620PROCinput("X offset",selected%!(subobj_offset+0),100)
 9630PROCinfo_bar
 9640PROCinput("Y offset",selected%!(subobj_offset+4),100)
 9650PROCinfo_bar
 9660PROCinput("Z offset",selected%!(subobj_offset+8),100)
 9670PROCinfo_bar
 9680view_needs_update%=TRUE
 9690RESTORE ERROR
 9700ENDPROC
 9710:
 9720DEF PROCinput_obj_angs
 9730LOCAL ERROR
 9740ON ERROR LOCAL RESTORE ERROR:PROCerr_bar(TRUE):PROCinfo_bar:ENDPROC
 9750PROCinput("angle about X axis",selected%!(subobj_angle+0),ang_scale)
 9760PROCinfo_bar
 9770PROCinput("angle about Y axis",selected%!(subobj_angle+4),ang_scale)
 9780PROCinfo_bar
 9790PROCinput("angle about Z axis",selected%!(subobj_angle+8),ang_scale)
 9800PROCinfo_bar
 9810view_needs_update%=TRUE
 9820RESTORE ERROR
 9830ENDPROC
 9840:
 9850DEF PROCinput_vertex
 9860LOCAL ERROR
 9870ON ERROR LOCAL RESTORE ERROR:PROCerr_bar(TRUE):PROCinfo_bar:ENDPROC
 9880PROCinput("vertex X",!(selected%!subobj_type+surf_coords+12*vertex%+0),100)
 9890PROCinfo_bar
 9900PROCinput("vertex Y",!(selected%!subobj_type+surf_coords+12*vertex%+4),100)
 9910PROCinfo_bar
 9920PROCinput("vertex Z",!(selected%!subobj_type+surf_coords+12*vertex%+8),100)
 9930PROCinfo_bar
 9940view_needs_update%=TRUE
 9950RESTORE ERROR
 9960ENDPROC
 9970:
 9980DEF PROCinput(inp$,RETURN v%,scale)
 9990LOCAL ERROR
10000ON ERROR LOCAL RESTORE ERROR:PROCerr_bar(TRUE):OFF:ENDPROC
10010ON
10020PRINTTAB(0,2)SPC60TAB(0,2)"Enter "inp$;": ";
10030*FX 15
10040PROCins(FNfloat(v%/scale))
10050INPUT""v
10060v%=v*scale
10070OFF
10080RESTORE ERROR
10090ENDPROC
10100:
10110DEF FNediting_surf
10120IF selected%=-1 THEN =FALSE
10130=(selected%!subobj_flags AND bit_surf)>0
10140:
10150DEF PROCupdate_bounds
10160IF cur_obj%<>0 SYS "BAU3D_CalcBounds",obj!(4*cur_obj%)
10170ENDPROC
10180:
10190DEF PROCobjlist_click(mx%,my%,mb%)
10200LOCAL x%,y%
10210y%=31-(my% DIV 32)
10220x%=mx% DIV 16
10230IF y%=2 THEN
10240 IF x%>=69 AND x%<77 AND obj_first>0 THEN
10250  obj_first-=1
10260  RECTANGLE 66*16,4*32,14*16,24*32-4 TO 66*16,3*32
10270  PROClistobj(obj_first,obj_first)
10280 ENDIF
10290ELSE
10300 IF y%=30 THEN
10310  IF x%>=69 AND x%<77 AND obj_first+25<objects THEN
10320   obj_first+=1
10330   RECTANGLE 66*16,3*32,14*16,24*32-4 TO 66*16,4*32
10340   PROClistobj(obj_first+24,obj_first+24)
10350  ENDIF
10360 ELSE
10370  IF mb%=2 THEN
10380   IF y%>=4 AND y%<=28 THEN
10390    PROCselect_obj(obj_first+y%-4)
10400    PROClist_objects
10410    view_needs_update%=TRUE
10420   ENDIF
10430  ENDIF
10440 ENDIF
10450ENDIF
10460ENDPROC
10470:
10480DEF PROCtry_new_panel(mx%,my%)
10490LOCAL i%
10500FOR i%=0 TO 3
10510 IF mx%>=panel_x0%(i%) AND mx%<panel_x1%(i%) AND my%>=panel_y0%(i%) AND my%<panel_y1%(i%) PROCselect_view(i%)
10520NEXT
10530ENDPROC
10540:
10550DEF PROCselect_view(v%)
10560cur_view%=v%
10570selected%=-1
10580PROCshow_panels
10590PROCset_info_mode(cur_view%)
10600ENDPROC
10610:
10620DEF FNfind_elem(a$(),b$)
10630LOCAL i%
10640i%=0
10650WHILE b$<>a$(i%)
10660 i%+=1
10670ENDWHILE
10680=i%
10690:
10700DEF PROCidle(mx%,my%,mb%)
10710LOCAL i%
10720CASE cur_mode% OF
10730 WHEN 3,4,5:
10740  IF cur_view_needs_update% THEN
10750   PROCshow_panel(cur_view%)
10760   cur_view_needs_update%=FALSE
10770  ENDIF
10780  IF view_needs_update% THEN
10790   FOR i%=0 TO 3
10800    PROCshow_panel(i%)
10810   NEXT
10820   view_needs_update%=FALSE
10830  ENDIF
10840ENDCASE
10850ENDPROC
10860:
10870DEF PROCtoggle(bit)
10880IF selected%<>-1 THEN
10890 selected%!subobj_flags=selected%!subobj_flags EOR bit
10900 PROCinfo_bar
10910 view_needs_update%=TRUE
10920ENDIF
10930ENDPROC
10940:
10950DEF PROCmode_select(mode%)
10960IF mode%=7 THEN PROCdelete:ENDPROC
10970IF mode%=8 THEN PROCtoggle(bit_merge):ENDPROC
10980IF mode%=9 THEN PROCtoggle(bit_closed):ENDPROC
10990PROCmode_deselect(cur_mode%)
11000cur_mode%=mode%
11010PROCshow_command(cur_mode%)
11020selected%=-1
11030CASE cur_mode% OF
11040 WHEN 0:
11050  PROCcls
11060  PROCcatalogue
11070 WHEN 1:
11080  PROCcls
11090  PROCcatalogue
11100 WHEN 2:
11110  PROCcls
11120  PROCcatalogue
11130  PROCsave
11140 WHEN 3:
11150  PROCcls
11160  PROCset_info_mode(cur_view%)
11170  PROCshow_panels
11180  PROClist_objects
11190  PROCinfo_bar
11200 WHEN 4:
11210  IF cur_obj%=-1 THEN
11220   PROCmode_select(3)
11230  ELSE
11240   PROCcls
11250   PROCset_info_mode(cur_view%)
11260   PROCshow_panels
11270   rgb%()=&FF,&FF,&FF
11280   PROCshow_colour_bar
11290   PROCinfo_bar
11300   verts=0
11310  ENDIF
11320 WHEN 5:
11330  PROCset_info_mode(4)
11340  PROCinfo_bar
11350 WHEN 6:
11360  PROCcreate
11370  PROCinfo_bar
11380ENDCASE
11390ENDPROC
11400:
11410DEF PROCmode_deselect(mode%)
11420LOCAL i%
11430IF cur_mode%=-1 ENDPROC
11440i%=cur_mode%
11450cur_mode%=-1
11460PROCshow_command(i%)
11470ENDPROC
11480:
11490DEF PROCcatalogue
11500LOCAL dir$,cat%
11510dir$="Objects"
11520SYS "BAU3D_Malloc",256 TO cat%
11530p%=0
11540files%=0
11550done%=FALSE
11560WHILE NOT done%
11570 SYS "OS_GBPB",9,dir$,cat%,1,p%,256,"*" TO ,,,read%,p%
11580 done%=read%=0 OR p%=-1
11590 IF NOT done% THEN
11600  i%=0
11610  WHILE cat%?i%>32
11620   i%+=1
11630  ENDWHILE
11640  cat%?i%=13
11650  file$(files%)=$cat%
11660  files%+=1
11670 ENDIF
11680ENDWHILE
11690IF files%=0 THEN
11700 PROCwarn("No files to load")
11710 PROCmode_select(3)
11720ELSE
11730 FOR i%=0 TO files%-1
11740  PRINT TAB(12*(i% MOD 6),3+2*(i% DIV 6));file$(i%);
11750 NEXT
11760ENDIF
11770SYS "BAU3D_Free",cat%
11780ENDPROC
11790:
11800DEF FNwhich_file(mx%,my%)
11810LOCAL select%,i%,x0%,x1%,y0%,y1%
11820select%=-1
11830FOR i%=0 TO files%-1
11840 x0%=12*16*(i% MOD 6)
11850 y0%=1024-4*32-64*(i% DIV 6)
11860 x1%=x0%+16*LEN(file$(i%))
11870 y1%=y0%+32
11880 IF mx%>=x0% AND mx%<=x1% AND my%>=y0% AND my%<=y1% select%=i%:i%=files%
11890NEXT
11900=select%
11910:
11920DEF PROCwarn(warn$)
11930ENDPROC
11940:
11950DEF PROCcls
11960PROCgcol(black%)
11970RECTANGLE FILL 0,0,1279,1024-48
11980ENDPROC
11990:
12000DEF PROCcls_right
12010PROCgcol(black%)
12020RECTANGLE FILL 64*16,0,16*16,1024-48
12030ENDPROC
12040:
12050DEF PROCset_info_mode(new%)
12060IF new%<>info_mode% THEN
12070 info_mode%=new%
12080 PRINTTAB(0,31)SPC79;
12090 PROCinfo_bar
12100ENDIF
12110ENDPROC
12120:
12130DEF PROCinfo_bar
12140PRINTTAB(0,31)SPC79;TAB(0,2);SPC60;
12150PROCshow_name
12160PROCshow_flags
12170CASE info_mode% OF
12180 WHEN 0,1,2,3:
12190  PROCshow_orig_and_angs(info_mode%)
12200 WHEN 4:
12210  PROCshow_zoom
12220 WHEN 5:
12230  PROCshow_obj_pos
12240ENDCASE
12250ENDPROC
12260:
12270DEF PROCshow_orig_and_angs(p%)
12280LOCAL i%,x%,v%,v$,n%
12290IF p%=0 n%=5 ELSE n%=1
12300FOR i%=0 TO n%
12310 IF i%<3 v%=oxyz%(p%,i%) DIV 100 ELSE v%=oang%(p%,i%-3)/ang_scale
12320 x%=10*i%
12330 IF i%>2 x%+=5
12340 PROCleft_arrow(x%,31)
12350 PROCright_arrow(x%+8,31)
12360 v$=STR$(v%)
12370 PRINTTAB(x%+4-(LEN(v$) DIV 2),31);v$;
12380NEXT
12390ENDPROC
12400:
12410DEF PROCshow_name
12420LOCAL name
12430IF cur_obj%<>-1 THEN
12440 name=!(obj!(4*cur_obj%)+obj_name)
12450 IF name<>0 PRINTTAB(0,2)"Editing: ";:SYS "OS_Write0",name
12460ENDIF
12470ENDPROC
12480:
12490DEF PROCshow_flags
12500IF selected%<>-1 THEN
12510 IF (selected%!subobj_flags AND bit_merge) PRINTTAB(48,2)"MERGE";
12520 IF (selected%!subobj_flags AND bit_closed) PRINTTAB(54,2)"CLOSED";
12530ENDIF
12540ENDPROC
12550:
12560DEF PROCshow_zoom
12570LOCAL z$
12580z$=STR$(zoom% DIV 10)+"."+STR$(zoom% MOD 10)
12590PROCleft_arrow(0,31)
12600PROCright_arrow(8,31)
12610PRINTTAB(5-LEN(z$)/2,31);z$;
12620ENDPROC
12630:
12640DEF PROCshow_obj_pos
12650LOCAL i%
12660IF selected%<>-1 THEN
12670 IF (selected%!subobj_flags AND bit_surf)>0 THEN
12680  IF vertex%<>-1 THEN
12690   FOR i%=0 TO 2
12700    v%=!(selected%!subobj_type+surf_coords+12*vertex%+4*i%) DIV 100
12710    x%=10*i%
12720    PROCleft_arrow(x%,31)
12730    PROCright_arrow(x%+8,31)
12740    v$=STR$(v%)
12750    PRINTTAB(x%+4-(LEN(v$) DIV 2),31);v$;
12760   NEXT
12770  ENDIF
12780 ELSE
12790  FOR i%=0 TO 5
12800   IF i%<3 v%=(selected%!(subobj_offset+4*i%)) DIV 100 ELSE v%=selected%!(subobj_angle+4*(i%-3)) DIV ang_scale
12810   x%=10*i%
12820   IF i%>2 x%+=5
12830   PROCleft_arrow(x%,31)
12840   PROCright_arrow(x%+8,31)
12850   v$=STR$(v%)
12860   PRINTTAB(x%+4-(LEN(v$) DIV 2),31);v$;
12870  NEXT
12880 ENDIF
12890ENDIF
12900ENDPROC
12910:
12920DEF PROCload(f$)
12930SYS "BAU3D_Load",f$,,obj,max TO world_hand,,,objects
12940obj_first=0
12950ENDPROC
12960:
12970DEF PROClist_objects
12980PROClistobj(obj_first,obj_first+24)
12990ENDPROC
13000:
13010DEF PROClistobj(from%,to%)
13020LOCAL i%
13030IF objects=0 ENDPROC
13040from%=FNmax(from%,obj_first)
13050to%=FNmin(to%,obj_first+24)
13060IF from%>to% ENDPROC
13070FOR i%=from% TO to%
13080 IF i%=cur_obj% THEN
13090  PROCcolour(yellow%)
13100  PROCcolourb(blue%)
13110 ELSE
13120  VDU 20
13130 ENDIF
13140 PRINTTAB(66,i%-obj_first+4);
13150 IF i%>=objects THEN
13160  PRINTSPC14;
13170 ELSE
13180  PRINTLEFT$(FNget_string(!(obj!(4*i%)+4))+STRING$(14," "),14);
13190 ENDIF
13200NEXT
13210PROCup_arrow(69,2)
13220PROCdown_arrow(69,30)
13230VDU 20
13240ENDPROC
13250:
13260DEF PROCshow_colour_bar
13270LOCAL i%
13280VDU 26
13290FOR i%=0 TO 2
13300 GCOL 0 TINT 0
13310 RECTANGLE FILL 16*(72+2*i%),20*32+256,16,rgb%(i%)-256
13320 GCOL (3<<(i%*2)) TINT 192
13330 RECTANGLE FILL 16*(72+2*i%),20*32,16,rgb%(i%)
13340NEXT
13350PROCgcol((rgb%(0)<<8)+(rgb%(1)<<16)+(rgb%(2)<<24))
13360RECTANGLE FILL 16*66,20*32,64,256
13370SYS "OS_SpriteOp",34+256,col_spr%,"cols",64*16,2*32
13380ENDPROC
13390:
13400DEF FNmin(a%,b%)
13410IF a%<b% THEN =a% ELSE =b%
13420:
13430DEF FNmax(a%,b%)
13440IF a%>b% THEN =a% ELSE =b%
13450:
13460DEF FNget_string(a)
13470LOCAL a$
13480a$=""
13490WHILE ?a>=32
13500 a$+=CHR$(?a)
13510 a+=1
13520ENDWHILE
13530=a$
13540:
13550DEF FNidentify_keyword(w$)
13560LOCAL i,found
13570IF objects<=0 THEN =-1
13580i=0
13590found=FALSE
13600WHILE i<objects AND NOT found
13610 IF FNget_string(!(obj!(4*i)+4))=w$ THEN
13620  found=TRUE
13630 ELSE
13640  i+=1
13650 ENDIF
13660ENDWHILE
13670IF NOT found THEN =-1
13680=i
13690:
13700DEF PROCleft_arrow(x%,y%)
13710x%=x%*16
13720y%=1024-32*(y%+1)
13730PROCgcol(blue%)
13740RECTANGLE FILL x%,y%,16,28
13750PROCgcol(yellow%)
13760MOVE x%+12,y%+4
13770MOVE x%+12,y%+24
13780PLOT 85,x%+4,y%+14
13790ENDPROC
13800:
13810DEF PROCright_arrow(x%,y%)
13820x%=x%*16
13830y%=1024-32*(y%+1)
13840PROCgcol(blue%)
13850RECTANGLE FILL x%,y%,16,28
13860PROCgcol(yellow%)
13870MOVE x%+4,y%+4
13880MOVE x%+4,y%+24
13890PLOT 85,x%+12,y%+14
13900ENDPROC
13910:
13920DEF PROCup_arrow(x%,y%)
13930x%=x%*16
13940y%=1024-32*(y%+1)
13950PROCgcol(blue%)
13960RECTANGLE FILL x%,y%,128,32
13970PROCgcol(yellow%)
13980MOVE x%+4,y%+4
13990MOVE x%+124,y%+4
14000PLOT 85,x%+64,y%+28
14010ENDPROC
14020:
14030DEF PROCdown_arrow(x%,y%)
14040x%=x%*16
14050y%=1024-32*(y%+1)
14060PROCgcol(blue%)
14070RECTANGLE FILL x%,y%,128,32
14080PROCgcol(yellow%)
14090MOVE x%+4,y%+28
14100MOVE x%+124,y%+28
14110PLOT 85,x%+64,y%+4
14120ENDPROC
14130:
14140DEF PROCensure_visible(i%)
14150IF i%<obj_first THEN
14160 obj_first=i%
14170ELSE
14180 IF i%>obj_first+24 obj_first=i%-24
14190ENDIF
14200ENDPROC
14210:
14220DEF PROCfind_bounding_cube(sub,RETURN x0,RETURN y0,RETURN z0,RETURN x1,RETURN y1,RETURN z1)
14230LOCAL i,x,y,z,x2,y2,z2,a,b,c
14240x0=1E10
14250y0=1E10
14260z0=1E10
14270x1=-1E10
14280y1=-1E10
14290z1=-1E10
14300a=!(sub+subobj_angle+0)
14310b=!(sub+subobj_angle+4)
14320c=!(sub+subobj_angle+8)
14330FOR i=0 TO 7
14340 x=!(sub+subobj_bounds+12*i+0)
14350 y=!(sub+subobj_bounds+12*i+4)
14360 z=!(sub+subobj_bounds+12*i+8)
14370 PROCrotate(x,y,z,a,b,c,x2,y2,z2)
14380 IF x2<x0 x0=x2
14390 IF y2<y0 y0=y2
14400 IF z2<z0 z0=z2
14410 IF x2>x1 x1=x2
14420 IF y2>y1 y1=y2
14430 IF z2>z1 z1=z2
14440NEXT
14450ENDPROC
14460:
14470DEF PROCrotate(x,y,z,a,b,c,RETURN x2,RETURN y2,RETURN z2)
14480a=RAD(a/ang_scale)
14490b=RAD(b/ang_scale)
14500c=RAD(c/ang_scale)
14510
14520x2=x
14530y2=y*COSa+z*SINa
14540z2=-y*SINa+z*COSa
14550
14560x=x2*COSb-z2*SINb
14570y=y2
14580z=x2*SINb+z2*COSb
14590
14600x2=x*COSc+y*SINc
14610y2=-x*SINc+y*COSc
14620z2=z
14630ENDPROC
14640:
14650DEF PROCkey(k%)
14660LOCAL a,surf%
14670IF k%=17 AND zoom%<100 zoom%=FNmin(zoom%+10,100):view_needs_update%=TRUE:PROCinfo_bar
14680IF k%=23 AND zoom%>10  zoom%=FNmax(zoom%-10,10):view_needs_update%=TRUE:PROCinfo_bar
14690CASE cur_mode% OF
14700 WHEN 3:
14710  PROCedit_key(k%)
14720 WHEN 4:
14730  IF k%=27 THEN
14740   verts=0
14750   view_needs_update%=TRUE
14760  ENDIF
14770ENDCASE
14780ENDPROC
14790:
14800DEF PROCedit_key(k%)
14810CASE k% OF
14820 WHEN 19:
14830  IF cur_obj%<>-1 AND cur_view%>0 THEN
14840   IF selected%=-1 THEN
14850    IF !(FNo+obj_list)=0 THEN
14860     PROCselect_object_raw(-1)
14870    ELSE
14880     PROCselect_object_raw(!(FNo+obj_list))
14890    ENDIF
14900    PROCset_info_mode(5)
14910   ELSE
14920    IF selected%!subobj_next<>0 THEN
14930     PROCselect_object_raw(selected%!subobj_next)
14940    ELSE
14950     PROCselect_object_raw(!(FNo+obj_list))
14960    ENDIF
14970   ENDIF
14980   PROCinfo_bar
14990  ENDIF
15000 WHEN 22:
15010  IF cur_obj%<>-1 AND cur_view%>0 AND selected%<>-1 THEN
15020   IF (selected%!subobj_flags AND bit_surf)>0 THEN
15030    vertex%=(vertex%+1) MOD !(selected%!subobj_type+surf_n)
15040    view_needs_update%=TRUE
15050    PROCinfo_bar
15060   ENDIF
15070  ENDIF
15080 WHEN 1:
15090  IF FNediting_surf THEN
15100   IF vertex%<>-1 THEN
15110    surf%=selected%!subobj_type
15120    a=surf%+surf_coords+12*vertex%
15130    CASE cur_view% OF
15140     WHEN 1:
15150      a!8+=1000
15160     WHEN 2:
15170      a!4-=1000
15180     WHEN 3:
15190      a!0-=1000
15200    ENDCASE
15210    view_needs_update%=TRUE
15220    PROCinfo_bar
15230   ENDIF
15240  ENDIF
15250 WHEN 26:
15260  IF FNediting_surf THEN
15270   IF vertex%<>-1 THEN
15280    surf%=selected%!subobj_type
15290    a=surf%+surf_coords+12*vertex%
15300    CASE cur_view% OF
15310     WHEN 1:
15320      a!8-=1000
15330     WHEN 2:
15340      a!4+=1000
15350     WHEN 3:
15360      a!0+=1000
15370    ENDCASE
15380    view_needs_update%=TRUE
15390    PROCinfo_bar
15400   ENDIF
15410  ENDIF
15420ENDCASE
15430ENDPROC
15440:
15450DEF FNo=obj!(4*cur_obj%)
15460:
15470DEF PROCsave
15480LOCAL file$,out%,i%
15490LOCAL ERROR
15500ON
15510ON ERROR LOCAL RESTORE ERROR:PROCerr_bar(TRUE):PROCinfo_bar:OFF:PROCmode_select(3):ENDPROC
15520INPUTTAB(0,30)"Save as: "file$
15530file$=FNstrip(file$)
15540saved()=FALSE
15550PROCensure_there_is_a_world
15560out%=OPENOUT("objects."+file$)
15570BPUT#out%,"rem: >objects."+file$+CHR$10
15580FOR i%=0 TO objects-1
15590 PROCsave_obj(i%,out%)
15600NEXT
15610CLOSE#out%
15620OSCLI("SetType objects."+file$+" text")
15630OFF
15640RESTORE ERROR
15650PROCmode_select(3)
15660ENDPROC
15670:
15680DEF PROCsave_obj(o,out%)
15690LOCAL a,b,oo,i%,j%
15700IF saved(o) ENDPROC
15710a=obj!(4*o)
15720b=a!obj_list
15730WHILE b<>0
15740 IF (b!subobj_flags AND bit_surf)=0 THEN
15750  PROCsave_obj(FNobj_no(b!subobj_type),out%)
15760 ENDIF
15770 b=b!subobj_next
15780ENDWHILE
15790BPUT#out%,"object: "+FNget_string(a!obj_name)+CHR$10
15800b=a!obj_list
15810WHILE b<>0
15820 IF (b!subobj_flags AND bit_surf)>0 THEN
15830  oo=b!subobj_type
15840  BPUT#out%,"  colour: "+STR$(oo?(surf_colour+1))+","+STR$(oo?(surf_colour+2))+","+STR$(oo?(surf_colour+3))+CHR$10
15850  BPUT#out%,"  surface:"+CHR$10
15860  FOR i%=0 TO oo!surf_n-1
15870   BPUT#out%,"  ";
15880   FOR j%=0 TO 2
15890    BPUT#out%,FNfloat(oo!(surf_coords+12*i%+4*j%)/scale);
15900    IF j%<2 BPUT#out%,","; ELSE BPUT#out%,10
15910   NEXT
15920  NEXT
15930  BPUT#out%,10
15940 ELSE
15950  oo=b!subobj_type
15960  BPUT#out%,"  "+FNget_string(oo!obj_name)+": ";
15970  FOR i%=0 TO 2
15980   BPUT#out%,FNfloat(b!(subobj_offset+4*i%)/scale);
15990   IF i%<2 BPUT#out%,","; ELSE BPUT#out%," ";
16000  NEXT
16010  FOR i%=0 TO 2
16020   BPUT#out%,FNfloat(FNint(b!(subobj_angle+4*i%)/ang_scale));
16030   IF i%<2 BPUT#out%,","; ELSE BPUT#out%," ";
16040  NEXT
16050  IF (b!subobj_flags AND bit_merge)>0 BPUT#out%,"merge ";
16060  IF (b!subobj_flags AND bit_closed)>0 BPUT#out%,"closed ";
16070  BPUT#out%,CHR$10
16080 ENDIF
16090 b=b!subobj_next
16100ENDWHILE
16110saved(o)=TRUE
16120ENDPROC
16130:
16140DEF FNobj_no(addr%)
16150LOCAL i%
16160i%=-1
16170REPEAT
16180 i%+=1
16190UNTIL obj!(4*i%)=addr%
16200=i%
16210:
16220DEF FNint(i)=INT(i+0.4999)
16230:
16240DEF FNfloat(f)
16250LOCAL v%,mod%,div%
16260v%=f*1000
16270mod%=v% MOD 1000
16280div%=v% DIV 1000
16290IF mod%=0 THEN =STR$(div%)
16300=STR$(div%)+"."+STR$(mod%)
16310:
16320DEF FNx(p%,n%)
16330LOCAL x,y,z,oo,x2,y2,z2,a,b,c,aa
16340IF selected%=-1 OR cur_obj%=-1 THEN =0
16350a=selected%!(subobj_angle+0)
16360b=selected%!(subobj_angle+4)
16370c=selected%!(subobj_angle+8)
16380oo=selected%!subobj_type
16390aa=oo+surf_coords+12*n%
16400x=!aa
16410y=aa!4
16420z=aa!8
16430PROCrotate(x,y,z,a,b,c,x2,y2,z2)
16440IF p%=1 THEN =(x+oxyz%(p%,0))/(scale2d/(zoom%/10))
16450IF p%=2 THEN =(x+oxyz%(p%,0))/(scale2d/(zoom%/10))
16460IF p%=3 THEN =(z+oxyz%(p%,0))/(scale2d/(zoom%/10))
16470=0
16480:
16490DEF FNy(p%,n%)
16500LOCAL x,y,z,oo,x2,y2,z2,a,b,c,aa
16510IF selected%=-1 OR cur_obj%=-1 THEN =0
16520a=selected%!(subobj_angle+0)
16530b=selected%!(subobj_angle+4)
16540c=selected%!(subobj_angle+8)
16550oo=selected%!subobj_type
16560aa=oo+surf_coords+12*n%
16570x=!aa
16580y=aa!4
16590z=aa!8
16600PROCrotate(x,y,z,a,b,c,x2,y2,z2)
16610IF p%=1 THEN =(y+oxyz%(p%,1))/(scale2d/(zoom%/10))
16620IF p%=2 THEN =(z+oxyz%(p%,1))/(scale2d/(zoom%/10))
16630IF p%=3 THEN =(y+oxyz%(p%,1))/(scale2d/(zoom%/10))
16640=0
16650:
16660DEF PROCclear
16670objects=0
16680SYS "BAU3D_HeapInit",heap,heap_size
16690ENDPROC
16700:
16710DEF PROCdelete
16720LOCAL a%,b%
16730LOCAL ERROR
16740ON ERROR LOCAL RESTORE ERROR:PROCerr_bar(TRUE):PROCmode_select(3):ENDPROC
16750IF cur_obj%<>-1 AND selected%<>-1 THEN
16760 IF (selected%!subobj_flags AND bit_surf)>0 THEN
16770  SYS "BAU3D_Free",selected%!subobj_type
16780  a%=FNo+obj_list
16790  b%=!a%
16800  WHILE b%<>selected%
16810   a%=b%
16820   b%=a%!subobj_next
16830  ENDWHILE
16840  !a%=b%!subobj_next
16850  SYS "BAU3D_Free",b%
16860 ELSE
16870  a%=FNo+obj_list
16880  b%=!a%
16890  WHILE b%<>selected%
16900   a%=b%
16910   b%=a%!subobj_next
16920  ENDWHILE
16930  !a%=b%!subobj_next
16940  SYS "BAU3D_Free",b%
16950 ENDIF
16960ELSE
16970 IF INKEY-1 AND cur_obj%<>-1 THEN
16980  PROCdelete_object(cur_obj%)
16990 ENDIF
17000ENDIF
17010selected%=-1
17020view_needs_update%=TRUE
17030RESTORE ERROR
17040ENDPROC
17050:
17060DEF PROCdelete_object(o)
17070LOCAL a,was,i%
17080LOCAL ERROR
17090ON ERROR LOCAL RESTORE ERROR:PROCerr_bar(TRUE):PROCinfo_bar:ENDPROC
17100IF FNcross_ref(o) ERROR 9999,"Object is used elsewhere"
17110a=obj!(4*o)
17120a=a!obj_list
17130WHILE !a<>0
17140 IF (a!subobj_flags AND bit_surf)>0 THEN
17150  SYS "BAU3D_Free",a!subobj_type
17160 ENDIF
17170 was=a
17180 a=a!subobj_next
17190 SYS "BAU3D_Free",was
17200ENDWHILE
17210IF o<objects-1 THEN
17220 FOR i%=o TO objects-2
17230  obj!(4*i%)=obj!(4*i%+4)
17240 NEXT
17250ENDIF
17260objects-=1
17270IF cur_obj%>=objects cur_obj%=-1
17280PROCensure_there_is_a_world
17290PROCcls_right
17300PROClist_objects
17310RESTORE ERROR
17320ENDPROC
17330:
17340DEF FNcross_ref(o)
17350LOCAL ref,i%
17360ref=FALSE
17370IF objects>0 THEN
17380 i%=0
17390 WHILE i%<objects AND NOT ref
17400  IF i%<>o THEN
17410   IF FNcheck_for_self_ref(obj!(4*i%),obj!(4*o)) ref=TRUE
17420  ENDIF
17430  i%+=1
17440 ENDWHILE
17450ENDIF
17460=ref
17470:
17480REM a is the address of an object, b is the address to check for
17490:
17500DEF FNcheck_for_self_ref(a,b)
17510LOCAL self_ref
17520self_ref=FALSE
17530a=a!obj_list
17540WHILE NOT self_ref AND a<>0
17550 IF a!subobj_type=b THEN
17560  self_ref=TRUE
17570 ELSE
17580  IF (a!subobj_flags AND bit_surf)=0 THEN
17590   IF FNcheck_for_self_ref(a!subobj_type,b) self_ref=TRUE
17600  ENDIF
17610 ENDIF
17620 IF NOT self_ref THEN a=a!subobj_next
17630ENDWHILE
17640=self_ref
17650:
17660DEF PROCcreate_object(name$)
17670LOCAL new,name
17680SYS "BAU3D_Malloc",obj_req TO new
17690SYS "BAU3D_Malloc",LEN(name$)+2 TO name
17700$name=name$+CHR$0
17710new!obj_name=name
17720new!obj_list=0
17730obj!(4*objects)=new
17740objects+=1
17750IF cur_mode%=3 PROClist_objects
17760ENDPROC
17770:
17780DEF PROCcreate
17790LOCAL new$
17800LOCAL ERROR
17810ON ERROR LOCAL RESTORE ERROR:PROCerr_bar(TRUE):PROCmode_select(3):OFF:ENDPROC
17820ON
17830PRINTTAB(0,2)SPC60;
17840INPUTTAB(0,2)"Create object: "new$
17850new$=FNstrip(new$)
17860IF new$<>"" PROCcreate_object(new$)
17870PROCmode_select(3)
17880OFF
17890RESTORE ERROR
17900ENDPROC
17910:
17920DEF PROCensure_there_is_a_world
17930IF FNidentify_keyword("world")=-1 PROCcreate_object("world")
17940ENDPROC

�     >3Ded
�     A simple 3D editor

� By  DCA
(� For 32-bit machines
2� (c) BAU October 1993
<:
F� 15
P�
Z
*FX 229,1
d*POINTER 1
nȗ �
x�init_modules
�	�init
��screen
�ȗ was_mx%,was_my%,was_mb%
�click_time%=�
��ensure_there_is_a_world
�quit%=�
��
� ȗ mx%,my%,mb%
� repeating%=�
� � mb%<>was_mb% �
�  was_mb%=mb%
�  click_time%=�
�  � mb%<>0 �
   �click(mx%,my%,mb%)
  �
 �
"(  � �-click_time%>repeat% � mb%<>0 �
,9   � mx%=was_mx% � my%=was_my% � my%>40 � mx%<66*16 �
6    �idle(mx%,my%,mb%)
@   �
J
    Ȗ
T    repeating%=�
^    �click(mx%,my%,mb%)
h   �
r  �
|   k%=�(0)
�$   � k%=27 � (�-1 � �-2) quit%=�
�   � k%<>-1 �
�    �key(k%)
�   �
�    �idle(mx%,my%,mb%)
�   �
�  �
� �
� was_mx%=mx%
� was_my%=my%
�� quit%
�� 12
�
*FX 229,0
�
:
� �init
&
0max_vert=256
:verts=0
D� v(max_vert,2)
N
X� col_spr% 20*1024
b!col_spr%=20*1024
lcol_spr%!4=0
vcol_spr%!8=16
�col_spr%!12=16
�9ș "OS_SpriteOp",15+256,col_spr%,"cols",,16*8,16*8,15
�+ș "OS_SpriteOp",60+256,col_spr%,"cols"
�� col%=0 � 255
� � col% � 63 Ȝ col% � 192
�. ȓ Ȑ 16*(col% � 16),32*(col% � 16),16,32
��
�&ș "OS_SpriteOp",60+256,col_spr%,0
�
�max=400
�� obj 4*max,saved(max)
�
�&heap_size=(�-�-32*1024) � (� 4095)
� heap heap_size
&ș "BAU3D_HeapInit",heap,heap_size

 dist=800:zplus=10000
*ang_scale=&10000/360
4
>!� com$(10),file$(256),rgb%(2)
HScom$()="*","LOAD","SAVE","EDIT","POLY","ZOOM","CREATE","DELETE","MERGE","CLOSE"
Rwhite%=&FFFFFF00
\black%=&00000000
fdark_red%=&00006000
pyellow%=&00F0F000
zblue%=&F0000000
�panel_width%=512-16
� panel_height%=(1024-180) � 2
�cur_mode%=-1
�� view_xyz 12,view_ang 12
�� oxyz%(3,2),oang%(3,2)
��init_orig
�oang%(2,0)=90
�oang%(3,1)=-90
�ang_scale=&10000/360
�scale=10000
�cur_obj%=-1
�selected%=-1
�vertex%=-1
info_mode%=-1

objects=0
obj_first=0
$scale2d=5000
.cur_view%=-1
8
B9� panel_x0%(3),panel_y0%(3),panel_x1%(3),panel_y1%(3)
L3panel_x0%()=0,16+panel_width%,0,16+panel_width%
V(panel_x1%()=panel_x0%()+panel_width%
`=panel_y0%()=40,40,40+16+panel_height%,40+16+panel_height%
j)panel_y1%()=panel_y0%()+panel_height%
t
~repeat%=30
�view_needs_update%=�
�cur_view_needs_update%=�
�zoom%=10
�
�bit_merge=64
�bit_surf=128
�bit_disp=256
�bit_dispall=512
�bit_closed=1024
�
�obj_list=0
�obj_name=4

obj_req=8


surf_type=0
surf_colour=4
(surf_n=8
2surf_coords=12
<surf_req=12
F
Psubobj_next=0
Zsubobj_type=4
dsubobj_flags=8
nsubobj_offset=12
xsubobj_angle=24
�subobj_surfreq=36
�subobj_bounds=36
�subobj_req=132
�
��
�:
�� �init_modules
�%*RMEnsure BAU3D 0.40 RMLoad BAU3D
�G*RMEnsure ColourTrans 1.00 Error 0 3Ded requires ColourTrans module
��
�:
�� �init_orig
�
oxyz%()=0
oxyz%(0,2)=2000000
�
:
"� �show_commands
,� i%
6� i%=0 � 9
@ �show_command(i%)
J�
T�
^:
h� �show_command(i%)
r� x%
|� 5
�
x%=128*i%
�2� i%=cur_mode% �gcol(blue%) � �gcol(dark_red%)
�ȓ Ȑ x%,1024-44,124,40
�1� i%=cur_mode% �gcol(yellow%) � �gcol(white%)
�ȓ x%,1024-44,124,40
�!� x%+64-8*�(com$(i%)),1024-12
��;com$(i%);
�� 4
��
��
�:
�� �gcol(rgb%)
�(ș "ColourTrans_SetGCOL",rgb%,,,&100
�
:
� �colour(rgb%)
&
� col%
0+ș "ColourTrans_ReturnGCOL",rgb% � col%
: � (col%>>2) Ȝ (col% � 3)<<6
D�
N:
X� �colourb(rgb%)
b
� col%
l+ș "ColourTrans_ReturnGCOL",rgb% � col%
v$� 128+(col%>>2) Ȝ (col% � 3)<<6
��
�:
�
� �screen
�� i%
�� 26,20
��
��
��show_commands
��show_panels
�
�info_bar
��
�:
�� �show_panels
� i%
� i%=0 � 3
 �show_panel(i%)
 �
*�
4:
>� �show_panel(panel%)
H� x%,y%,i%
R%x%=(panel% � 2)*(panel_width%+16)
\)y%=(panel% � 2)*(panel_height%+16)+40
f�gcol(black%)
p*ȓ Ȑ x%,y%,panel_width%,panel_height%
z5� panel%=cur_view% �gcol(yellow%) � �gcol(white%)
�'ȓ x%,y%,panel_width%,panel_height%
�
ȑ 0,0
�8� 24,x%+2;y%+4;x%+panel_width%-2;y%+panel_height%-4;
�/ȑ x%+panel_width% � 2,y%+panel_height% � 2
�� cur_obj%<>-1 �
� Ȏ panel% �
�
  � 0:
�   � i%=0 � 2
�#    view_xyz!(4*i%)=oxyz%(0,i%)
�#    view_ang!(4*i%)=oang%(0,i%)
�   �
�A   ș "BAU3D_WriteConfig",%110,dist,zplus,-zplus*0.8,10000000
�;   ș "BAU3D_Render",obj!(4*cur_obj%),view_xyz,view_ang
	  � 1,2,3:�view_2d(panel%)
	 �
	�
	$� 26
	.�
	8�
	B:
	L� �view_2d(p%)
	VE� i%,x0,x1,y0,y1,xmin,ymin,zmin,xmax,ymax,zmax,ox,oy,oz,aa,ao,x,y
	`� surf%
	j� i%=0 � 2
	t! view_xyz!(4*i%)=oxyz%(p%,i%)
	~+ view_ang!(4*i%)=ang_scale*oang%(p%,i%)
	��
	�>ș "BAU3D_WriteConfig",%110,dist,zplus,-10000000,100000000
	�Mș "BAU3D_Render2D",obj!(4*cur_obj%),view_xyz,view_ang,scale2d*(10/zoom%)
	�� selected%<>-1 �
	� �gcol(white%)
	�. � (selected%!subobj_flags � bit_surf)>0 �
	�!  surf%=selected%!subobj_type
	�  coords%=surf%+surf_coords
	�  �gcol(white%)
	�  � �x(p%,0),�y(p%,0)
	�"  � i%=surf%!surf_n-1 � 0 � -1
	�   � �x(p%,i%),�y(p%,i%)
  �

  � i%=0 � surf%!surf_n-1
2   � i%=vertex% �gcol(yellow%) � �gcol(white%)
'   ȓ �x(p%,i%)-8,�y(p%,i%)-8,16,16
(  �
2 �
<B  �find_bounding_cube(selected%,xmin,ymin,zmin,xmax,ymax,zmax)
F   ao=selected%+subobj_offset
P  aa=selected%+subobj_angle
Z  ox=!ao
d
  oy=ao!4
n
  oz=ao!8
x
  Ȏ p% �
�   � 1:
�    x0=xmin+ox
�    y0=ymin+oy
�    x1=xmax+ox
�    y1=ymax+oy
�   � 2:
�    x0=xmin+ox
�    y0=zmin+oz
�    x1=xmax+ox
�    y1=zmax+oz
�   � 3:
�    x0=zmin+oz
�    y0=ymin+oy
    x1=zmax+oz
    y1=ymax+oy
  �
".  x0=(oxyz%(p%,0)+x0)/(scale2d/(zoom%/10))
,.  x1=(oxyz%(p%,0)+x1)/(scale2d/(zoom%/10))
6.  y0=(oxyz%(p%,1)+y0)/(scale2d/(zoom%/10))
@.  y1=(oxyz%(p%,1)+y1)/(scale2d/(zoom%/10))
J  ȓ x0,y0,x1-x0,y1-y0
T �
^�
h� cur_mode%=4 �
r � verts>0 �
|  �gcol(white%)
�  � i%=0 � verts-1
�   Ȏ p% �
�    � 1:
�5     x=(oxyz%(p%,0)+v(i%,0))/(scale2d/(zoom%/10))
�5     y=(oxyz%(p%,1)+v(i%,1))/(scale2d/(zoom%/10))
�    � 2:
�5     x=(oxyz%(p%,0)+v(i%,0))/(scale2d/(zoom%/10))
�5     y=(oxyz%(p%,1)+v(i%,2))/(scale2d/(zoom%/10))
�    � 3:
�5     x=(oxyz%(p%,0)+v(i%,2))/(scale2d/(zoom%/10))
�5     y=(oxyz%(p%,1)+v(i%,1))/(scale2d/(zoom%/10))
�   �
�   ȏ Ȑ x,y,4
  �
 �
�
&�
0:
:� �click(mx%,my%,mb%)
D� file%
N� my%>=1024-44 �
X �mode_select(mx% � 128)
b�
l Ȏ cur_mode% �
v
  � 1:
�!   file%=�which_file(mx%,my%)
�   � file%<>-1 �
�    �clear
�&    �load("objects."+file$(file%))
�/    �select_obj(�identify_keyword("world"))
�    �mode_select(3)
�   �
�
  � 3:
�   �draw_click(mx%,my%,mb%)
�
  � 4:
�   �poly_click(mx%,my%,mb%)
�
  � 5:
�   �zoom_click(mx%,my%)

 �

�

�

 :

*� �select_obj(new%)

46� new%>objects-1 new%=objects-1 � � new%<0 new%=-1

>cur_obj%=new%

Hselected%=-1

R�init_orig

\,� cur_obj%<>-1 �ensure_visible(cur_obj%)

f
�info_bar

p�

z:

�� �zoom_click(mx%,my%)

�
� pos%

�� my%<40 �

� pos%=mx% � 16

�A � pos%=0 � zoom%>10  zoom%-=1:�info_bar:view_needs_update%=�

�A � pos%=8 � zoom%<100 zoom%+=1:�info_bar:view_needs_update%=�

��

� �mode_select(3)

��

��

�:

�� �poly_click(mx%,my%,mb%)

�� �pan(mx%,my%,mb%) �
&� �check_for_colour(mx%,my%,mb%) �
*� �check_for_add_vertex(mx%,my%,mb%) �
�
$:
.(� �check_for_add_vertex(mx%,my%,mb%)
8� ok%,i%,x,y,z
B� mx%>66*16 � =�
L� my%<40 � =�
V	ok%=�
`i%=1
jȕ i%<4 � � ok%
t/ � mx%>=panel_x0%(i%) � mx%<panel_x1%(i%) �
~0  � my%>=panel_y0%(i%) � my%<panel_y1%(i%) �
�   � i%<>cur_view% �
�    cur_view%=i%
�    view_needs_update%=�
�   �
�*   mx%-=(panel_x0%(i%)+panel_width%/2)
�+   my%-=(panel_y0%(i%)+panel_height%/2)
�   Ȏ mb% �
�    � 1:
�     �done_polygon
�    � 4:
�     Ȏ cur_view% �
�      � 1:
6       x=mx%*scale2d*(10/zoom%)-oxyz%(cur_view%,0)

6       y=my%*scale2d*(10/zoom%)-oxyz%(cur_view%,1)
       z=0
      � 2:
(6       x=mx%*scale2d*(10/zoom%)-oxyz%(cur_view%,0)
2       y=0
<6       z=my%*scale2d*(10/zoom%)-oxyz%(cur_view%,1)
F      � 3:
P       x=0
Z6       y=my%*scale2d*(10/zoom%)-oxyz%(cur_view%,1)
d6       z=mx%*scale2d*(10/zoom%)-oxyz%(cur_view%,0)
n
     �
x     v(verts,0)=x
�     v(verts,1)=y
�     v(verts,2)=z
�     verts+=1
�'     � verts=max_vert �done_polygon
�     view_needs_update%=�
�   �
�   ok%=�
�  �
� �
�
 i%+=1
��
�=ok%
�:
� �done_polygon
� new_surf%,new_sub%,i%,a
� verts>=3 �
"4 ș "BAU3D_Malloc",surf_req+12*verts � new_surf%
, new_surf%!surf_type=0
6C new_surf%!surf_colour=(rgb%(0)<<8)+(rgb%(1)<<16)+(rgb%(2)<<24)
@ new_surf%!surf_n=verts
J � i%=0 � verts-1
T#  a=new_surf%+surf_coords+12*i%
^  !a=v(i%,0)
h  a!4=v(i%,1)
r  a!8=v(i%,2)
| �
�, ș "BAU3D_Malloc",subobj_req � new_sub%
�# new_sub%!subobj_flags=bit_surf
�# new_sub%!subobj_type=new_surf%
� � i%=0 � 2
�%  new_sub%!(subobj_offset+4*i%)=0
�$  new_sub%!(subobj_angle+4*i%)=0
� �
� � !(�o+obj_list)=0 �
�  new_sub%!subobj_next=0
�  !(�o+obj_list)=new_sub%
� �
�  a=!(�o+obj_list)
�  ȕ a!subobj_next<>0
   a=a!subobj_next
  �
  new_sub%!subobj_next=0
&  a!subobj_next=new_sub%
0 �
:�
Dview_needs_update%=�
Nverts=0
X�
b:
l� �draw_click(mx%,my%,mb%)
v/� �check_for_click_on_vertex(mx%,my%,mb%) �
�)� �check_for_name_edit(mx%,my%,mb%) �
�&� �check_for_colour(mx%,my%,mb%) �
�� �drag_obj(mx%,my%,mb%) �
�� �drag_v(mx%,my%,mb%) �
�� �pan(mx%,my%,mb%) �
�*� �check_for_insert_obj(mx%,my%,mb%) �
�%� my%<40 �offset_click(mx%,my%):�
�-� mx%>66*16 �objlist_click(mx%,my%,mb%):�
�� repeating% �
�� cur_view%=-1 �
� �try_new_panel(mx%,my%)
��
�r � mx%<panel_x0%(cur_view%) � mx%>panel_x1%(cur_view%) � my%<panel_y0%(cur_view%) � my%>panel_y1%(cur_view%) �
  �try_new_panel(mx%,my%)
 �
*  � mb%<>2 �select_object(mx%,my%,mb%)
  �
*�
4�
>:
H-� �check_for_click_on_vertex(mx%,my%,mb%)
R� i%,ok%,surf%,j%,x%,y%
\� IF INKEY-1 THEN =FALSE
f� my%<40 � mx%>66*16 � =�
p� � �editing_surf � =�
z� repeating% � =�
�%� cur_obj%=-1 � selected%=-1 � =�
�0� (selected%!subobj_flags � bit_surf)=0 � =�
�surf%=selected%!subobj_type
�	ok%=�
�i%=1
�ȕ i%<4 � � ok%
�/ � mx%>=panel_x0%(i%) � mx%<panel_x1%(i%) �
�0  � my%>=panel_y0%(i%) � my%<panel_y1%(i%) �
�,   x%=mx%-(panel_x0%(i%)+panel_width%/2)
�-   y%=my%-(panel_y0%(i%)+panel_height%/2)
�   � j%=0 � surf%!surf_n-1
�    � �(x%-�x(i%,j%))<32 �
�     � �(y%-�y(i%,j%))<32 �
      ok%=�
      vertex%=j%
      view_needs_update%=�
$
     �
.	    �
8   �
B  �
L �
V
 i%+=1
`�
j� � ok% � vertex%<>1 �
t vertex%=-1
~
 ok%=�
� view_needs_update%=�
� �try_new_panel(mx%,my%)
��
�
�info_bar
�=ok%
�:
�(� �check_for_insert_obj(mx%,my%,mb%)
�0� x%,y%,b%,obj_to_drag%,x2%,y2%,drag$,ok%,i%
�� �
�&� � � � �:�err_bar(�):�info_bar:=�
�� �editing_surf � � �:=�
�/� � ((mb%=4 � mb%=1) � repeating%) � � �:=�
� mx%<66*16 � � �:=�

y%=31-(my% � 32)
� y%<4 � y%>28 � � �:=�
obj_to_drag%=obj_first+y%-4
(5� obj_to_drag%<0 � obj_to_drag%>=objects � � �:=�
27drag$=�get_string(!(obj!(4*obj_to_drag%)+obj_name))
<ȗ x%,y%,b%
F� 5
P� 4,63 Ȝ 192
Z�show_drag
d�
n ȗ x2%,y2%,b%
x � x2%<>x% � y2%<>y% �
�  �show_drag
�  x%=x2%
�  y%=y2%
�  �show_drag
� �
�
� b%=0
��show_drag
�� 4
��
�b� �check_for_self_ref(obj!(4*obj_to_drag%),obj!(4*cur_obj%)) � � 9999,"Illegal self-reference"
�	ok%=�
�� i%=1 � 3
�T � x%>=panel_x0%(i%) � x%<panel_x1%(i%) � y%>=panel_y0%(i%) � y%<panel_y1%(i%) �
  ok%=�
+  �insert_an_obj(obj_to_drag%,i%,x%,y%)

  i%=3
" �
,�
6� �
@=ok%
J:
T"� �insert_an_obj(o,p%,mx%,my%)
^� new,a
h� cur_obj%=-1 � �
r&ș "BAU3D_Malloc",subobj_req � new
|a=obj!(4*cur_obj%)
�new!subobj_next=a!obj_list
�a!obj_list=new
�new!(subobj_angle+0)=0
�new!(subobj_angle+4)=0
�new!(subobj_angle+8)=0
�'mx%-=(panel_x0%(p%)+panel_width%/2)
�(my%-=(panel_y0%(p%)+panel_height%/2)
�Ȏ p% �
�	 � 1:
�>  new!(subobj_offset+0)=mx%*scale2d*(10/zoom%)-oxyz%(p%,0)
�>  new!(subobj_offset+4)=my%*scale2d*(10/zoom%)-oxyz%(p%,1)
�  new!(subobj_offset+8)=0
�	 � 2:
>  new!(subobj_offset+0)=mx%*scale2d*(10/zoom%)-oxyz%(p%,0)
  new!(subobj_offset+4)=0
>  new!(subobj_offset+8)=my%*scale2d*(10/zoom%)-oxyz%(p%,1)
&	 � 3:
0  new!(subobj_offset+0)=0
:>  new!(subobj_offset+4)=my%*scale2d*(10/zoom%)-oxyz%(p%,1)
D>  new!(subobj_offset+8)=mx%*scale2d*(10/zoom%)-oxyz%(p%,0)
N
X new!(subobj_offset+0)=0
b new!(subobj_offset+4)=0
l new!(subobj_offset+8)=0
v�
�new!subobj_type=obj!(4*o)
�new!subobj_flags=0
�*ș "BAU3D_CalcBounds",obj!(4*cur_obj%)
�view_needs_update%=�
��
�:
�� �show_drag
�Ȗ
�� x%-8*�(drag$),y%+8
��;drag$;
��
�:
�'� �check_for_name_edit(mx%,my%,mb%)
� was$,o,name
� �
(� � � � �:�err_bar(�):�info_bar:�:=�
 � cur_mode%<>3 � � �:=�
*� cur_obj%=-1 � � �:=�
4o=obj!(4*cur_obj%)
>,� my%<1024-3*32 � my%>1024-2*32 � � �:=�
H� mx%>60*16 � � �:=�
R9� o!obj_name>0 was$=�get_string(o!obj_name) � was$=""
\�
f�0,2)�60;
p�0,2)"New name: ";
z
*FX 15
��ins(was$)
��""new$
�!new$=�lc_and_us(�strip(new$))
�� new$<>"" �
�' ș "BAU3D_Malloc",�(new$)+2 � name
� $name=new$+�0
� ș "BAU3D_Free",o!obj_name
� o!obj_name=name
� �info_bar
� �list_objects
��
��
�� �
=�
:
$� �check_for_colour(mx%,my%,mb%)
$� i%,ok%,col%,tint%
.*� � (�editing_surf � cur_mode%=4) � =�
8� mx%<64*16 � =�
B	ok%=�
LA� mx%>=64*16 � mx%<64*16+16*16 � my%>=2*32 � my%<2*32+16*32 �
V
 ok%=�
` col%=�mx%,my%)
j tint%=Ȝ(mx%,my%)
t � i%=0 � 2
~5  rgb%(i%)=(((col%>>(i%*2)) � 3)<<6) � (tint%>>2)
� �
� �show_colour_bar
��
�) � my%>=20*32-16 � my%<20*32+256+16 �
�  � i%=0 � 2
�1   � mx%>=72*16+32*i% � mx%<=72*16+32*i%+16 �
�    rgb%(i%)=my%-20*32
�=    � rgb%(i%)<0 rgb%(i%)=0 � � rgb%(i%)>255 rgb%(i%)=255
�
    ok%=�
�    �show_colour_bar
�   �
�  �
 �

�
� ok% �
 � �editing_surf �
(/  � (selected%!subobj_flags � bit_surf)>0 �
2T   !(selected%!subobj_type+surf_colour)=(rgb%(0)<<8)+(rgb%(1)<<16)+(rgb%(2)<<24)
<   view_needs_update%=�
F  �
P �
Z�
d=ok%
n:
x� �err_bar(can_esc%)
�
� wait
�� can_esc% � �=17 �
�	� %11
��0,31)�79;
��0,31);�$;
�� �<>9999 �"' at line ";�;
��" - press a key";
�� 20
�
*FX 15
�
wait=�
��
�:
�� �ins(i$)
� i%

� i$="" �
� i%=1 � �(i$)
"  ș "OS_Byte",138,0,��i$,i%)
,�
6�
@:
J� �strip(a$)
Tȕ �(a$)=32
^ a$=�a$,2)
h�
rȕ �a$)=" "
| a$=�a$)
��
�=a$
�:
�
� �lc(a$)
�� b$,i%,c%
�	b$=""
�� a$<>"" �
� � i%=1 � �(a$)
�  c%=��a$,i%)
�$  � c%>=�"A" � c%<=�"Z" � c%+=32
�
  b$+=�c%
� �
��
=b$
:
� �lc_and_us(a$)
&� b$,i%,c%
0	b$=""
:� a$<>"" �
D � i%=1 � �(a$)
N  c%=��a$,i%)
X$  � c%>=�"A" � c%<=�"Z" � c%+=32
b  � c%=32 c%=�"_"
l
  b$+=�c%
v �
��
�=b$
�:
�!� �select_object(mx%,my%,mb%)
�� p%,loop%,ok%
�� cur_obj%=-1 �
�� cur_view%<=0 �
�� selected%<>-1 � mb%=1 � �
�� selected%=-1 �
� loop%=!(�o+obj_list)
��
� loop%=selected%
��
p%=loop%!subobj_next
� p%=0 � p%=!(�o+obj_list)
	ok%=�
 ȕ p%<>loop% � � ok%
* � p%<>0 �
46  ok%=�:� should compare co-ordinates here ideally
> �
H  p%=p%!subobj_next
R   � p%=0 � p%=!(�o+obj_list)
\ �
f�
p
� � ok% �
z � !(�o+obj_list)=0 �
�  �select_object_raw(-1)
� �
�(  �select_object_raw(!(�o+obj_list))
� �
��
� �select_object_raw(p%)
��
��
�:
�� �select_object_raw(addr%)
�� i%
�� addr%<>selected% �
� selected%=addr%
 vertex%=0
 view_needs_update%=�
 �set_info_mode(5)
$�
.� selected%<>-1 �
8. � (selected%!subobj_flags � bit_surf)>0 �
B  � i%=0 � 2
L9   rgb%(i%)=?(selected%!subobj_type+surf_colour+1+i%)
V  �
`  �cls_right
j  �show_colour_bar
t �
~  �cls_right
�  �list_objects
� �
��
��
�:
�� �pan(mx%,my%,mb%)
�
� dx%,dy%
�!� � (mb%=2 � repeating%) � =�
�(dx%=(mx%-was_mx%)*scale2d*(10/zoom%)
�(dy%=(my%-was_my%)*scale2d*(10/zoom%)
�Ȏ cur_view% �
� � 0,1,2,3:
  oxyz%(cur_view%,0)+=dx%

  oxyz%(cur_view%,1)+=dy%
  cur_view_needs_update%=�
  �info_bar
(�
2=�
<:
F� �drag_obj(mx%,my%,mb%)
P� dx%,dy%,o
ZQ� � ((mb%=4 � mb%=1) � repeating% � cur_obj%<>-1 � selected%<>-1� � �-1) � =�
d� my%<40 � =�
n� mx%>66*16 � =�
x0� (selected%!subobj_flags � bit_surf)>0 � =�
�(dx%=(mx%-was_mx%)*scale2d*(10/zoom%)
�(dy%=(my%-was_my%)*scale2d*(10/zoom%)
�o=selected%+subobj_offset
�Ȏ cur_view% �
�	 � 1:
�  o!0+=dx%
�  o!4+=dy%
�	 � 2:
�  o!0+=dx%
�  o!8+=dy%
�	 � 3:
�  o!8+=dx%
�  o!4+=dy%
�

�info_bar
view_needs_update%=�
"=�
,:
6� �drag_v(mx%,my%,mb%)
@� dx%,dy%,o
JJ� � ((mb%=1 � mb%=4) � repeating% � cur_obj%<>-1 � selected%<>-1) � =�
T� my%<40 � =�
^� mx%>66*16 � =�
h0� (selected%!subobj_flags � bit_surf)=0 � =�
r(dx%=(mx%-was_mx%)*scale2d*(10/zoom%)
|(dy%=(my%-was_my%)*scale2d*(10/zoom%)
�2o=selected%!subobj_type+surf_coords+12*vertex%
�Ȏ cur_view% �
�	 � 1:
�  o!0+=dx%
�  o!4+=dy%
�	 � 2:
�  o!0+=dx%
�  o!8+=dy%
�	 � 3:
�  o!8+=dx%
�  o!4+=dy%
��
�
�info_bar
 view_needs_update%=�
 =�
 :
 &� �offset_click(mx%,my%)
 0� pos%,shift%,a%,ang_shift%
 :shift%=100
 Dang_shift%=ang_scale
 N,� �-1 shift%=1000:ang_shift%=5*ang_scale
 X.� �-2 shift%=10000:ang_shift%=10*ang_scale
 b
Ȏ � �
 l" � cur_mode%=3 � selected%=-1:
 v  � cur_view%<>-1 �
 �   pos%=mx% � 16
 �   Ȏ pos% �
 �    � 0,10,20:
 �+     oxyz%(cur_view%,pos% � 10)-=shift%
 �!     cur_view_needs_update%=�
 �     �info_bar
 �    � 8,18,28:
 �/     oxyz%(cur_view%,(pos%-8) � 10)+=shift%
 �!     cur_view_needs_update%=�
 �     �info_bar
 �    � 35,45,55:
 �]     oang%(cur_view%,(pos%-35) � 10)=(oang%(cur_view%,(pos%-35) � 10)-ang_shift%) � &FFFF
 �!     cur_view_needs_update%=�
!     �info_bar
!    � 43,53,63:
!]     oang%(cur_view%,(pos%-35) � 10)=(oang%(cur_view%,(pos%-35) � 10)+ang_shift%) � &FFFF
! !     cur_view_needs_update%=�
!*     �info_bar
!4   
!>O    � (pos%>=2 � pos%<=6) � (pos%>=12 � pos%<=16) � (pos%>=22 � pos%<=26) �
!H     � cur_view%>0 �
!R      �input_view_offs
!\
     �
!f      �input_view_offs_3D
!p
     �
!z	    �
!�R     � (pos%>=37 � pos%<=41) � (pos%>=47 � pos%<=51) � (pos%>=57 � pos%<=61) �
!�      � cur_view%=0 �
!�       �input_view_angs_3D
!�      �
!�
     �
!�	    �
!�   �
!�  �
!�5 � cur_mode%=3 � selected%<>-1 � � �editing_surf:
!�  pos%=mx% � 16:
!�  Ȏ pos% �
!�   � 0,10,20:
!�7    selected%!(subobj_offset+4*(pos% � 10))-=shift%
"    view_needs_update%=�
"    �info_bar
"   � 8,18,28:
"$7    selected%!(subobj_offset+4*(pos% � 10))+=shift%
".    view_needs_update%=�
"8    �info_bar
"B    �update_bounds
"L   � 35,45,55:
"V4    a%=selected%+subobj_angle+4*((pos%-35) � 10)
"`$    !a%=(!a%-ang_shift%) � &FFFF
"j    view_needs_update%=�
"t    �info_bar
"~    �update_bounds
"�   � 43,53,63:
"�4    a%=selected%+subobj_angle+4*((pos%-43) � 10)
"�$    !a%=(!a%+ang_shift%) � &FFFF
"�    view_needs_update%=�
"�    �info_bar
"�    �update_bounds
"�  
"�O    � (pos%>=2 � pos%<=6) � (pos%>=12 � pos%<=16) � (pos%>=22 � pos%<=26) �
"�     �input_obj_offs
"�	    �
"�R     � (pos%>=37 � pos%<=41) � (pos%>=47 � pos%<=51) � (pos%>=57 � pos%<=61) �
"�      �input_obj_angs
#
     �
#
	    �
#  �
# � �editing_surf:
#(  � vertex%=-1 �
#2  �
#<   pos%=mx% � 16
#F   Ȏ pos% �
#P    � 0,10,20:
#ZM    !(selected%!subobj_type+surf_coords+12*vertex%+4*(pos% � 10))-=shift%
#d     view_needs_update%=�
#n     �info_bar
#x    � 8,18,28:
#�N     !(selected%!subobj_type+surf_coords+12*vertex%+4*(pos% � 10))+=shift%
#�     view_needs_update%=�
#�     �info_bar
#�     �update_bounds
#�   
#�O    � (pos%>=2 � pos%<=6) � (pos%>=12 � pos%<=16) � (pos%>=22 � pos%<=26) �
#�     �input_vertex
#�	    �
#�   �
#�  �
#��
#��
#�:
$� �input_view_offs
$� �
$%� � � � �:�err_bar(�):�info_bar:�
$"4�input("X screen offset",oxyz%(cur_view%,0),100)
$,
�info_bar
$64�input("Y screen offset",oxyz%(cur_view%,1),100)
$@
�info_bar
$Jcur_view_needs_update%=�
$T� �
$^�
$h:
$r� �input_view_offs_3D
$|� �
$�%� � � � �:�err_bar(�):�info_bar:�
$�-�input("X offset",oxyz%(cur_view%,0),100)
$�
�info_bar
$�-�input("Y offset",oxyz%(cur_view%,1),100)
$�
�info_bar
$�-�input("Z offset",oxyz%(cur_view%,2),100)
$�
�info_bar
$�cur_view_needs_update%=�
$�� �
$��
$�:
$�� �input_view_angs_3D
$�� �
%%� � � � �:�err_bar(�):�info_bar:�
%=�input("angle about X axis",oang%(cur_view%,0),ang_scale)
%
�info_bar
%&=�input("angle about Y axis",oang%(cur_view%,1),ang_scale)
%0
�info_bar
%:=�input("angle about Z axis",oang%(cur_view%,2),ang_scale)
%D
�info_bar
%Ncur_view_needs_update%=�
%X� �
%b�
%l:
%v� �input_obj_offs
%�� �
%�%� � � � �:�err_bar(�):�info_bar:�
%�6�input("X offset",selected%!(subobj_offset+0),100)
%�
�info_bar
%�6�input("Y offset",selected%!(subobj_offset+4),100)
%�
�info_bar
%�6�input("Z offset",selected%!(subobj_offset+8),100)
%�
�info_bar
%�view_needs_update%=�
%�� �
%��
%�:
%�� �input_obj_angs
&� �
&%� � � � �:�err_bar(�):�info_bar:�
&E�input("angle about X axis",selected%!(subobj_angle+0),ang_scale)
& 
�info_bar
&*E�input("angle about Y axis",selected%!(subobj_angle+4),ang_scale)
&4
�info_bar
&>E�input("angle about Z axis",selected%!(subobj_angle+8),ang_scale)
&H
�info_bar
&Rview_needs_update%=�
&\� �
&f�
&p:
&z� �input_vertex
&�� �
&�%� � � � �:�err_bar(�):�info_bar:�
&�L�input("vertex X",!(selected%!subobj_type+surf_coords+12*vertex%+0),100)
&�
�info_bar
&�L�input("vertex Y",!(selected%!subobj_type+surf_coords+12*vertex%+4),100)
&�
�info_bar
&�L�input("vertex Z",!(selected%!subobj_type+surf_coords+12*vertex%+8),100)
&�
�info_bar
&�view_needs_update%=�
&�� �
&��
&�:
&�� �input(inp$,� v%,scale)
'� �
'� � � � �:�err_bar(�):�:�
'�
'$$�0,2)�60�0,2)"Enter "inp$;": ";
'.
*FX 15
'8�ins(�float(v%/scale))
'B�""v
'Lv%=v*scale
'V�
'`� �
'j�
't:
'~� �editing_surf
'�� selected%=-1 � =�
'�*=(selected%!subobj_flags � bit_surf)>0
'�:
'�� �update_bounds
'�8� cur_obj%<>0 ș "BAU3D_CalcBounds",obj!(4*cur_obj%)
'��
'�:
'�!� �objlist_click(mx%,my%,mb%)
'�� x%,y%
'�y%=31-(my% � 32)
'�x%=mx% � 16
'�� y%=2 �
(% � x%>=69 � x%<77 � obj_first>0 �
(
  obj_first-=1
(.  ȓ 66*16,4*32,14*16,24*32-4 � 66*16,3*32
(#  �listobj(obj_first,obj_first)
(( �
(2�
(< � y%=30 �
(F/  � x%>=69 � x%<77 � obj_first+25<objects �
(P   obj_first+=1
(Z/   ȓ 66*16,3*32,14*16,24*32-4 � 66*16,4*32
(d*   �listobj(obj_first+24,obj_first+24)
(n  �
(x �
(�  � mb%=2 �
(�   � y%>=4 � y%<=28 �
(�#    �select_obj(obj_first+y%-4)
(�    �list_objects
(�    view_needs_update%=�
(�   �
(�  �
(� �
(��
(��
(�:
(�� �try_new_panel(mx%,my%)
(�� i%
)� i%=0 � 3
)g � mx%>=panel_x0%(i%) � mx%<panel_x1%(i%) � my%>=panel_y0%(i%) � my%<panel_y1%(i%) �select_view(i%)
)�
)"�
),:
)6� �select_view(v%)
)@cur_view%=v%
)Jselected%=-1
)T�show_panels
)^�set_info_mode(cur_view%)
)h�
)r:
)|� �find_elem(a$(),b$)
)�� i%
)�i%=0
)�ȕ b$<>a$(i%)
)�
 i%+=1
)��
)�=i%
)�:
)�� �idle(mx%,my%,mb%)
)�� i%
)�Ȏ cur_mode% �
)�
 � 3,4,5:
)�   � cur_view_needs_update% �
)�   �show_panel(cur_view%)
*   cur_view_needs_update%=�
*  �
*  � view_needs_update% �
*&   � i%=0 � 3
*0    �show_panel(i%)
*:   �
*D   view_needs_update%=�
*N  �
*X�
*b�
*l:
*v� �toggle(bit)
*�� selected%<>-1 �
*�8 selected%!subobj_flags=selected%!subobj_flags � bit
*� �info_bar
*� view_needs_update%=�
*��
*��
*�:
*�� �mode_select(mode%)
*�� mode%=7 � �delete:�
*�$� mode%=8 � �toggle(bit_merge):�
*�%� mode%=9 � �toggle(bit_closed):�
*��mode_deselect(cur_mode%)
*�cur_mode%=mode%
+�show_command(cur_mode%)
+selected%=-1
+Ȏ cur_mode% �
+ 	 � 0:
+*
  �cls
+4  �catalogue
+>	 � 1:
+H
  �cls
+R  �catalogue
+\	 � 2:
+f
  �cls
+p  �catalogue
+z  �save
+�	 � 3:
+�
  �cls
+�  �set_info_mode(cur_view%)
+�  �show_panels
+�  �list_objects
+�  �info_bar
+�	 � 4:
+�  � cur_obj%=-1 �
+�   �mode_select(3)
+�  �
+�   �cls
+�    �set_info_mode(cur_view%)
+�   �show_panels
,   rgb%()=&FF,&FF,&FF
,   �show_colour_bar
,   �info_bar
,$   verts=0
,.  �
,8	 � 5:
,B  �set_info_mode(4)
,L  �info_bar
,V	 � 6:
,`
  �create
,j  �info_bar
,t�
,~�
,�:
,�� �mode_deselect(mode%)
,�� i%
,�� cur_mode%=-1 �
,�i%=cur_mode%
,�cur_mode%=-1
,��show_command(i%)
,��
,�:
,�� �catalogue
,�� dir$,cat%
,�dir$="Objects"
- ș "BAU3D_Malloc",256 � cat%
-
p%=0
-files%=0
-done%=�
-(ȕ � done%
-28 ș "OS_GBPB",9,dir$,cat%,1,p%,256,"*" � ,,,read%,p%
-< done%=read%=0 � p%=-1
-F � � done% �
-P
  i%=0
-Z  ȕ cat%?i%>32
-d   i%+=1
-n  �
-x  cat%?i%=13
-�  file$(files%)=$cat%
-�  files%+=1
-� �
-��
-�� files%=0 �
-� �warn("No files to load")
-� �mode_select(3)
-��
-� � i%=0 � files%-1
-�-  � �12*(i% � 6),3+2*(i% � 6));file$(i%);
-� �
-��
-�ș "BAU3D_Free",cat%
.�
.:
.� �which_file(mx%,my%)
." � select%,i%,x0%,x1%,y0%,y1%
.,select%=-1
.6� i%=0 � files%-1
.@ x0%=12*16*(i% � 6)
.J y0%=1024-4*32-64*(i% � 6)
.T x1%=x0%+16*�(file$(i%))
.^ y1%=y0%+32
.hE � mx%>=x0% � mx%<=x1% � my%>=y0% � my%<=y1% select%=i%:i%=files%
.r�
.|=select%
.�:
.�� �warn(warn$)
.��
.�:
.�
� �cls
.��gcol(black%)
.�ȓ Ȑ 0,0,1279,1024-48
.��
.�:
.�� �cls_right
.��gcol(black%)
.�ȓ Ȑ 64*16,0,16*16,1024-48
.��
/:
/� �set_info_mode(new%)
/� new%<>info_mode% �
/& info_mode%=new%
/0 �0,31)�79;
/: �info_bar
/D�
/N�
/X:
/b� �info_bar
/l�0,31)�79;�0,2);�60;
/v�show_name
/��show_flags
/�Ȏ info_mode% �
/� � 0,1,2,3:
/�%  �show_orig_and_angs(info_mode%)
/�	 � 4:
/�  �show_zoom
/�	 � 5:
/�  �show_obj_pos
/��
/��
/�:
/�� �show_orig_and_angs(p%)
/�� i%,x%,v%,v$,n%
0� p%=0 n%=5 � n%=1
0� i%=0 � n%
0? � i%<3 v%=oxyz%(p%,i%) � 100 � v%=oang%(p%,i%-3)/ang_scale
0 
 x%=10*i%
0* � i%>2 x%+=5
04 �left_arrow(x%,31)
0> �right_arrow(x%+8,31)
0H
 v$=�(v%)
0R �x%+4-(�(v$) � 2),31);v$;
0\�
0f�
0p:
0z� �show_name
0�
� name
0�� cur_obj%<>-1 �
0�& name=!(obj!(4*cur_obj%)+obj_name)
0�5 � name<>0 �0,2)"Editing: ";:ș "OS_Write0",name
0��
0��
0�:
0�� �show_flags
0�� selected%<>-1 �
0�; � (selected%!subobj_flags � bit_merge) �48,2)"MERGE";
0�= � (selected%!subobj_flags � bit_closed) �54,2)"CLOSED";
0��
0��
1:
1� �show_zoom
1� z$
1$&z$=�(zoom% � 10)+"."+�(zoom% � 10)
1.�left_arrow(0,31)
18�right_arrow(8,31)
1B�5-�(z$)/2,31);z$;
1L�
1V:
1`� �show_obj_pos
1j� i%
1t� selected%<>-1 �
1~. � (selected%!subobj_flags � bit_surf)>0 �
1�  � vertex%<>-1 �
1�   � i%=0 � 2
1�E    v%=!(selected%!subobj_type+surf_coords+12*vertex%+4*i%) � 100
1�    x%=10*i%
1�    �left_arrow(x%,31)
1�    �right_arrow(x%+8,31)
1�    v$=�(v%)
1�"    �x%+4-(�(v$) � 2),31);v$;
1�   �
1�  �
1� �
1�  � i%=0 � 5
2j   � i%<3 v%=(selected%!(subobj_offset+4*i%)) � 100 � v%=selected%!(subobj_angle+4*(i%-3)) � ang_scale
2
   x%=10*i%
2   � i%>2 x%+=5
2   �left_arrow(x%,31)
2(   �right_arrow(x%+8,31)
22   v$=�(v%)
2<!   �x%+4-(�(v$) � 2),31);v$;
2F  �
2P �
2Z�
2d�
2n:
2x� �load(f$)
2�6ș "BAU3D_Load",f$,,obj,max � world_hand,,,objects
2�obj_first=0
2��
2�:
2�� �list_objects
2�$�listobj(obj_first,obj_first+24)
2��
2�:
2�� �listobj(from%,to%)
2�� i%
2�� objects=0 �
2�from%=�max(from%,obj_first)
2�to%=�min(to%,obj_first+24)
3� from%>to% �
3� i%=from% � to%
3 � i%=cur_obj% �
3"  �colour(yellow%)
3,  �colourb(blue%)
36 �
3@
  � 20
3J �
3T �66,i%-obj_first+4);
3^ � i%>=objects �
3h  �14;
3r �
3|2  �get_string(!(obj!(4*i%)+4))+�14," "),14);
3� �
3��
3��up_arrow(69,2)
3��down_arrow(69,30)
3�� 20
3��
3�:
3�� �show_colour_bar
3�� i%
3�� 26
3�� i%=0 � 2
3�
 � 0 Ȝ 0
3�1 ȓ Ȑ 16*(72+2*i%),20*32+256,16,rgb%(i%)-256
4 � (3<<(i%*2)) Ȝ 192
4) ȓ Ȑ 16*(72+2*i%),20*32,16,rgb%(i%)
4�
4&3�gcol((rgb%(0)<<8)+(rgb%(1)<<16)+(rgb%(2)<<24))
40ȓ Ȑ 16*66,20*32,64,256
4:6ș "OS_SpriteOp",34+256,col_spr%,"cols",64*16,2*32
4D�
4N:
4X� �min(a%,b%)
4b� a%<b% � =a% � =b%
4l:
4v� �max(a%,b%)
4�� a%>b% � =a% � =b%
4�:
4�� �get_string(a)
4�� a$
4�	a$=""
4�
ȕ ?a>=32
4� a$+=�(?a)
4�	 a+=1
4��
4�=a$
4�:
4�� �identify_keyword(w$)
4�
� i,found
5� objects<=0 � =-1
5i=0
5found=�
5 ȕ i<objects � � found
5*' � �get_string(!(obj!(4*i)+4))=w$ �
54
  found=�
5> �
5H
  i+=1
5R �
5\�
5f� � found � =-1
5p=i
5z:
5�� �left_arrow(x%,y%)
5�x%=x%*16
5�y%=1024-32*(y%+1)
5��gcol(blue%)
5�ȓ Ȑ x%,y%,16,28
5��gcol(yellow%)
5�� x%+12,y%+4
5�� x%+12,y%+24
5�� 85,x%+4,y%+14
5��
5�:
5�� �right_arrow(x%,y%)
5�x%=x%*16
6y%=1024-32*(y%+1)
6�gcol(blue%)
6ȓ Ȑ x%,y%,16,28
6$�gcol(yellow%)
6.� x%+4,y%+4
68� x%+4,y%+24
6B� 85,x%+12,y%+14
6L�
6V:
6`� �up_arrow(x%,y%)
6jx%=x%*16
6ty%=1024-32*(y%+1)
6~�gcol(blue%)
6�ȓ Ȑ x%,y%,128,32
6��gcol(yellow%)
6�� x%+4,y%+4
6�� x%+124,y%+4
6�� 85,x%+64,y%+28
6��
6�:
6�� �down_arrow(x%,y%)
6�x%=x%*16
6�y%=1024-32*(y%+1)
6��gcol(blue%)
6�ȓ Ȑ x%,y%,128,32
7�gcol(yellow%)
7
� x%+4,y%+28
7� x%+124,y%+28
7� 85,x%+64,y%+4
7(�
72:
7<� �ensure_visible(i%)
7F� i%<obj_first �
7P obj_first=i%
7Z�
7d& � i%>obj_first+24 obj_first=i%-24
7n�
7x�
7�:
7�<� �find_bounding_cube(sub,� x0,� y0,� z0,� x1,� y1,� z1)
7�� i,x,y,z,x2,y2,z2,a,b,c
7�x0=1E10
7�y0=1E10
7�z0=1E10
7�x1=-1E10
7�y1=-1E10
7�z1=-1E10
7�a=!(sub+subobj_angle+0)
7�b=!(sub+subobj_angle+4)
7�c=!(sub+subobj_angle+8)
7�
� i=0 � 7
8" x=!(sub+subobj_bounds+12*i+0)
8" y=!(sub+subobj_bounds+12*i+4)
8" z=!(sub+subobj_bounds+12*i+8)
8"" �rotate(x,y,z,a,b,c,x2,y2,z2)
8, � x2<x0 x0=x2
86 � y2<y0 y0=y2
8@ � z2<z0 z0=z2
8J � x2>x1 x1=x2
8T � y2>y1 y1=y2
8^ � z2>z1 z1=z2
8h�
8r�
8|:
8�)� �rotate(x,y,z,a,b,c,� x2,� y2,� z2)
8�a=�(a/ang_scale)
8�b=�(b/ang_scale)
8�c=�(c/ang_scale)
8�
8�x2=x
8�y2=y*�a+z*�a
8�z2=-y*�a+z*�a
8�
8�x=x2*�b-z2*�b
8�y=y2
8�z=x2*�b+z2*�b
8�
9x2=x*�c+y*�c
9y2=-x*�c+y*�c
9z2=z
9&�
90:
9:� �key(k%)
9D
� a,surf%
9NO� k%=17 � zoom%<100 zoom%=�min(zoom%+10,100):view_needs_update%=�:�info_bar
9XN� k%=23 � zoom%>10  zoom%=�max(zoom%-10,10):view_needs_update%=�:�info_bar
9bȎ cur_mode% �
9l	 � 3:
9v  �edit_key(k%)
9�	 � 4:
9�  � k%=27 �
9�   verts=0
9�   view_needs_update%=�
9�  �
9��
9��
9�:
9�� �edit_key(k%)
9�Ȏ k% �
9�
 � 19:
9�$  � cur_obj%<>-1 � cur_view%>0 �
9�   � selected%=-1 �
:    � !(�o+obj_list)=0 �
:     �select_object_raw(-1)
:	    �
: +     �select_object_raw(!(�o+obj_list))
:*	    �
:4    �set_info_mode(5)
:>   �
:H$    � selected%!subobj_next<>0 �
:R2     �select_object_raw(selected%!subobj_next)
:\	    �
:f+     �select_object_raw(!(�o+obj_list))
:p	    �
:z   �
:�   �info_bar
:�  �
:�
 � 22:
:�4  � cur_obj%<>-1 � cur_view%>0 � selected%<>-1 �
:�0   � (selected%!subobj_flags � bit_surf)>0 �
:�=    vertex%=(vertex%+1) � !(selected%!subobj_type+surf_n)
:�    view_needs_update%=�
:�    �info_bar
:�   �
:�  �
:�	 � 1:
:�  � �editing_surf �
:�   � vertex%<>-1 �
;#    surf%=selected%!subobj_type
;&    a=surf%+surf_coords+12*vertex%
;    Ȏ cur_view% �
;$
     � 1:
;.      a!8+=1000
;8
     � 2:
;B      a!4-=1000
;L
     � 3:
;V      a!0-=1000
;`	    �
;j    view_needs_update%=�
;t    �info_bar
;~   �
;�  �
;�
 � 26:
;�  � �editing_surf �
;�   � vertex%<>-1 �
;�#    surf%=selected%!subobj_type
;�&    a=surf%+surf_coords+12*vertex%
;�    Ȏ cur_view% �
;�
     � 1:
;�      a!8-=1000
;�
     � 2:
;�      a!4+=1000
;�
     � 3:
<      a!0+=1000
<
	    �
<    view_needs_update%=�
<    �info_bar
<(   �
<2  �
<<�
<F�
<P:
<Z� �o=obj!(4*cur_obj%)
<d:
<n� �save
<x� file$,out%,i%
<�� �
<��
<�7� � � � �:�err_bar(�):�info_bar:�:�mode_select(3):�
<��0,30)"Save as: "file$
<�file$=�strip(file$)
<�
saved()=�
<��ensure_there_is_a_world
<�out%=�("objects."+file$)
<�%�#out%,"rem: >objects."+file$+�10
<�� i%=0 � objects-1
<� �save_obj(i%,out%)
<��
<�
�#out%
='�("SetType objects."+file$+" text")
=�
=� �
="�mode_select(3)
=,�
=6:
=@� �save_obj(o,out%)
=J� a,b,oo,i%,j%
=T� saved(o) �
=^a=obj!(4*o)
=hb=a!obj_list
=rȕ b<>0
=|& � (b!subobj_flags � bit_surf)=0 �
=�,  �save_obj(�obj_no(b!subobj_type),out%)
=� �
=� b=b!subobj_next
=��
=�1�#out%,"object: "+�get_string(a!obj_name)+�10
=�b=a!obj_list
=�ȕ b<>0
=�& � (b!subobj_flags � bit_surf)>0 �
=�  oo=b!subobj_type
=�g  �#out%,"  colour: "+�(oo?(surf_colour+1))+","+�(oo?(surf_colour+2))+","+�(oo?(surf_colour+3))+�10
=�  �#out%,"  surface:"+�10
=�  � i%=0 � oo!surf_n-1
=�   �#out%,"  ";
>   � j%=0 � 2
>9    �#out%,�float(oo!(surf_coords+12*i%+4*j%)/scale);
>&    � j%<2 �#out%,","; � �#out%,10
>&   �
>0  �
>:  �#out%,10
>D �
>N  oo=b!subobj_type
>X0  �#out%,"  "+�get_string(oo!obj_name)+": ";
>b  � i%=0 � 2
>l3   �#out%,�float(b!(subobj_offset+4*i%)/scale);
>v'   � i%<2 �#out%,","; � �#out%," ";
>�  �
>�  � i%=0 � 2
>�<   �#out%,�float(�int(b!(subobj_angle+4*i%)/ang_scale));
>�'   � i%<2 �#out%,","; � �#out%," ";
>�  �
>�7  � (b!subobj_flags � bit_merge)>0 �#out%,"merge ";
>�9  � (b!subobj_flags � bit_closed)>0 �#out%,"closed ";
>�  �#out%,�10
>� �
>� b=b!subobj_next
>��
>�saved(o)=�
>��
?:
?� �obj_no(addr%)
?� i%
? 	i%=-1
?*�
?4
 i%+=1
?>� obj!(4*i%)=addr%
?H=i%
?R:
?\� �int(i)=�(i+0.4999)
?f:
?p� �float(f)
?z� v%,mod%,div%
?�
v%=f*1000
?�mod%=v% � 1000
?�div%=v% � 1000
?�� mod%=0 � =�(div%)
?�=�(div%)+"."+�(mod%)
?�:
?�� �x(p%,n%)
?� � x,y,z,oo,x2,y2,z2,a,b,c,aa
?�%� selected%=-1 � cur_obj%=-1 � =0
?� a=selected%!(subobj_angle+0)
?� b=selected%!(subobj_angle+4)
?� c=selected%!(subobj_angle+8)
?�oo=selected%!subobj_type
@aa=oo+surf_coords+12*n%
@	x=!aa
@
y=aa!4
@$
z=aa!8
@.!�rotate(x,y,z,a,b,c,x2,y2,z2)
@82� p%=1 � =(x+oxyz%(p%,0))/(scale2d/(zoom%/10))
@B2� p%=2 � =(x+oxyz%(p%,0))/(scale2d/(zoom%/10))
@L2� p%=3 � =(z+oxyz%(p%,0))/(scale2d/(zoom%/10))
@V=0
@`:
@j� �y(p%,n%)
@t � x,y,z,oo,x2,y2,z2,a,b,c,aa
@~%� selected%=-1 � cur_obj%=-1 � =0
@� a=selected%!(subobj_angle+0)
@� b=selected%!(subobj_angle+4)
@� c=selected%!(subobj_angle+8)
@�oo=selected%!subobj_type
@�aa=oo+surf_coords+12*n%
@�	x=!aa
@�
y=aa!4
@�
z=aa!8
@�!�rotate(x,y,z,a,b,c,x2,y2,z2)
@�2� p%=1 � =(y+oxyz%(p%,1))/(scale2d/(zoom%/10))
@�2� p%=2 � =(z+oxyz%(p%,1))/(scale2d/(zoom%/10))
@�2� p%=3 � =(y+oxyz%(p%,1))/(scale2d/(zoom%/10))
A=0
A
:
A� �clear
A
objects=0
A(&ș "BAU3D_HeapInit",heap,heap_size
A2�
A<:
AF
� �delete
AP� a%,b%
AZ� �
Ad+� � � � �:�err_bar(�):�mode_select(3):�
An$� cur_obj%<>-1 � selected%<>-1 �
Ax. � (selected%!subobj_flags � bit_surf)>0 �
A�+  ș "BAU3D_Free",selected%!subobj_type
A�  a%=�o+obj_list
A�  b%=!a%
A�  ȕ b%<>selected%
A�   a%=b%
A�   b%=a%!subobj_next
A�  �
A�  !a%=b%!subobj_next
A�  ș "BAU3D_Free",b%
A� �
A�  a%=�o+obj_list
A�  b%=!a%
A�  ȕ b%<>selected%
B   a%=b%
B   b%=a%!subobj_next
B  �
B"  !a%=b%!subobj_next
B,  ș "BAU3D_Free",b%
B6 �
B@�
BJ � �-1 � cur_obj%<>-1 �
BT  �delete_object(cur_obj%)
B^ �
Bh�
Brselected%=-1
B|view_needs_update%=�
B�� �
B��
B�:
B�� �delete_object(o)
B�� a,was,i%
B�� �
B�%� � � � �:�err_bar(�):�info_bar:�
B�5� �cross_ref(o) � 9999,"Object is used elsewhere"
B�a=obj!(4*o)
B�a=a!obj_list
B�ȕ !a<>0
B�& � (a!subobj_flags � bit_surf)>0 �
B�#  ș "BAU3D_Free",a!subobj_type
C �
C
 was=a
C a=a!subobj_next
C& ș "BAU3D_Free",was
C0�
C:� o<objects-1 �
CD � i%=o � objects-2
CN  obj!(4*i%)=obj!(4*i%+4)
CX �
Cb�
Clobjects-=1
Cv#� cur_obj%>=objects cur_obj%=-1
C��ensure_there_is_a_world
C��cls_right
C��list_objects
C�� �
C��
C�:
C�� �cross_ref(o)
C�� ref,i%
C�	ref=�
C�� objects>0 �
C�	 i%=0
C� ȕ i%<objects � � ref
C�  � i%<>o �
D8   � �check_for_self_ref(obj!(4*i%),obj!(4*o)) ref=�
D  �
D  i%+=1
D  �
D*�
D4=ref
D>:
DHB� a is the address of an object, b is the address to check for
DR:
D\� �check_for_self_ref(a,b)
Df� self_ref
Dpself_ref=�
Dza=a!obj_list
D�ȕ � self_ref � a<>0
D� � a!subobj_type=b �
D�  self_ref=�
D� �
D�'  � (a!subobj_flags � bit_surf)=0 �
D�8   � �check_for_self_ref(a!subobj_type,b) self_ref=�
D�  �
D� �
D�# � � self_ref � a=a!subobj_next
D��
D�
=self_ref
D�:
D�� �create_object(name$)
E� new,name
E#ș "BAU3D_Malloc",obj_req � new
E'ș "BAU3D_Malloc",�(name$)+2 � name
E$$name=name$+�0
E.new!obj_name=name
E8new!obj_list=0
EBobj!(4*objects)=new
ELobjects+=1
EV� cur_mode%=3 �list_objects
E`�
Ej:
Et
� �create
E~
� new$
E�� �
E�-� � � � �:�err_bar(�):�mode_select(3):�:�
E��
E��0,2)�60;
E��0,2)"Create object: "new$
E�new$=�strip(new$)
E�#� new$<>"" �create_object(new$)
E��mode_select(3)
E��
E�� �
E��
E�:
F� �ensure_there_is_a_world
F
;� �identify_keyword("world")=-1 �create_object("world")
F�
�
00000000  0d 00 0a 0f f4 20 20 20  20 20 3e 33 44 65 64 0d  |.....     >3Ded.|
00000010  00 14 1c f4 20 20 20 20  20 41 20 73 69 6d 70 6c  |....     A simpl|
00000020  65 20 33 44 20 65 64 69  74 6f 72 0d 00 1e 0d f4  |e 3D editor.....|
00000030  20 42 79 20 20 44 43 41  0d 00 28 19 f4 20 46 6f  | By  DCA..(.. Fo|
00000040  72 20 33 32 2d 62 69 74  20 6d 61 63 68 69 6e 65  |r 32-bit machine|
00000050  73 0d 00 32 1a f4 20 28  63 29 20 42 41 55 20 4f  |s..2.. (c) BAU O|
00000060  63 74 6f 62 65 72 20 31  39 39 33 0d 00 3c 05 3a  |ctober 1993..<.:|
00000070  0d 00 46 08 eb 20 31 35  0d 00 50 05 87 0d 00 5a  |..F.. 15..P....Z|
00000080  0d 2a 46 58 20 32 32 39  2c 31 0d 00 64 0e 2a 50  |.*FX 229,1..d.*P|
00000090  4f 49 4e 54 45 52 20 31  0d 00 6e 08 c8 97 20 ee  |OINTER 1..n... .|
000000a0  0d 00 78 11 f2 69 6e 69  74 5f 6d 6f 64 75 6c 65  |..x..init_module|
000000b0  73 0d 00 82 09 f2 69 6e  69 74 0d 00 8c 0b f2 73  |s.....init.....s|
000000c0  63 72 65 65 6e 0d 00 96  1e c8 97 20 77 61 73 5f  |creen...... was_|
000000d0  6d 78 25 2c 77 61 73 5f  6d 79 25 2c 77 61 73 5f  |mx%,was_my%,was_|
000000e0  6d 62 25 0d 00 a0 11 63  6c 69 63 6b 5f 74 69 6d  |mb%....click_tim|
000000f0  65 25 3d 91 0d 00 aa 1c  f2 65 6e 73 75 72 65 5f  |e%=......ensure_|
00000100  74 68 65 72 65 5f 69 73  5f 61 5f 77 6f 72 6c 64  |there_is_a_world|
00000110  0d 00 b4 0b 71 75 69 74  25 3d a3 0d 00 be 05 f5  |....quit%=......|
00000120  0d 00 c8 13 20 c8 97 20  6d 78 25 2c 6d 79 25 2c  |.... .. mx%,my%,|
00000130  6d 62 25 0d 00 d2 11 20  72 65 70 65 61 74 69 6e  |mb%.... repeatin|
00000140  67 25 3d a3 0d 00 dc 15  20 e7 20 6d 62 25 3c 3e  |g%=..... . mb%<>|
00000150  77 61 73 5f 6d 62 25 20  8c 0d 00 e6 11 20 20 77  |was_mb% .....  w|
00000160  61 73 5f 6d 62 25 3d 6d  62 25 0d 00 f0 13 20 20  |as_mb%=mb%....  |
00000170  63 6c 69 63 6b 5f 74 69  6d 65 25 3d 91 0d 00 fa  |click_time%=....|
00000180  10 20 20 e7 20 6d 62 25  3c 3e 30 20 8c 0d 01 04  |.  . mb%<>0 ....|
00000190  1a 20 20 20 f2 63 6c 69  63 6b 28 6d 78 25 2c 6d  |.   .click(mx%,m|
000001a0  79 25 2c 6d 62 25 29 0d  01 0e 07 20 20 cd 0d 01  |y%,mb%)....  ...|
000001b0  18 06 20 cc 0d 01 22 28  20 20 e7 20 91 2d 63 6c  |.. ..."(  . .-cl|
000001c0  69 63 6b 5f 74 69 6d 65  25 3e 72 65 70 65 61 74  |ick_time%>repeat|
000001d0  25 20 80 20 6d 62 25 3c  3e 30 20 8c 0d 01 2c 39  |% . mb%<>0 ...,9|
000001e0  20 20 20 e7 20 6d 78 25  3d 77 61 73 5f 6d 78 25  |   . mx%=was_mx%|
000001f0  20 80 20 6d 79 25 3d 77  61 73 5f 6d 79 25 20 80  | . my%=was_my% .|
00000200  20 6d 79 25 3e 34 30 20  80 20 6d 78 25 3c 36 36  | my%>40 . mx%<66|
00000210  2a 31 36 20 8c 0d 01 36  1a 20 20 20 20 f2 69 64  |*16 ...6.    .id|
00000220  6c 65 28 6d 78 25 2c 6d  79 25 2c 6d 62 25 29 0d  |le(mx%,my%,mb%).|
00000230  01 40 08 20 20 20 cc 0d  01 4a 0a 20 20 20 20 c8  |.@.   ...J.    .|
00000240  96 0d 01 54 14 20 20 20  20 72 65 70 65 61 74 69  |...T.    repeati|
00000250  6e 67 25 3d b9 0d 01 5e  1b 20 20 20 20 f2 63 6c  |ng%=...^.    .cl|
00000260  69 63 6b 28 6d 78 25 2c  6d 79 25 2c 6d 62 25 29  |ick(mx%,my%,mb%)|
00000270  0d 01 68 08 20 20 20 cd  0d 01 72 07 20 20 cc 0d  |..h.   ...r.  ..|
00000280  01 7c 0e 20 20 20 6b 25  3d a6 28 30 29 0d 01 86  |.|.   k%=.(0)...|
00000290  24 20 20 20 e7 20 6b 25  3d 32 37 20 80 20 28 a6  |$   . k%=27 . (.|
000002a0  2d 31 20 84 20 a6 2d 32  29 20 71 75 69 74 25 3d  |-1 . .-2) quit%=|
000002b0  b9 0d 01 90 11 20 20 20  e7 20 6b 25 3c 3e 2d 31  |.....   . k%<>-1|
000002c0  20 8c 0d 01 9a 10 20 20  20 20 f2 6b 65 79 28 6b  | .....    .key(k|
000002d0  25 29 0d 01 a4 08 20 20  20 cc 0d 01 ae 1a 20 20  |%)....   .....  |
000002e0  20 20 f2 69 64 6c 65 28  6d 78 25 2c 6d 79 25 2c  |  .idle(mx%,my%,|
000002f0  6d 62 25 29 0d 01 b8 08  20 20 20 cd 0d 01 c2 07  |mb%)....   .....|
00000300  20 20 cd 0d 01 cc 06 20  cd 0d 01 d6 10 20 77 61  |  ..... ..... wa|
00000310  73 5f 6d 78 25 3d 6d 78  25 0d 01 e0 10 20 77 61  |s_mx%=mx%.... wa|
00000320  73 5f 6d 79 25 3d 6d 79  25 0d 01 ea 0b fd 20 71  |s_my%=my%..... q|
00000330  75 69 74 25 0d 01 f4 08  eb 20 31 32 0d 01 fe 0d  |uit%..... 12....|
00000340  2a 46 58 20 32 32 39 2c  30 0d 02 08 05 e0 0d 02  |*FX 229,0.......|
00000350  12 05 3a 0d 02 1c 0b dd  20 f2 69 6e 69 74 0d 02  |..:..... .init..|
00000360  26 04 0d 02 30 10 6d 61  78 5f 76 65 72 74 3d 32  |&...0.max_vert=2|
00000370  35 36 0d 02 3a 0b 76 65  72 74 73 3d 30 0d 02 44  |56..:.verts=0..D|
00000380  13 de 20 76 28 6d 61 78  5f 76 65 72 74 2c 32 29  |.. v(max_vert,2)|
00000390  0d 02 4e 04 0d 02 58 16  de 20 63 6f 6c 5f 73 70  |..N...X.. col_sp|
000003a0  72 25 20 32 30 2a 31 30  32 34 0d 02 62 15 21 63  |r% 20*1024..b.!c|
000003b0  6f 6c 5f 73 70 72 25 3d  32 30 2a 31 30 32 34 0d  |ol_spr%=20*1024.|
000003c0  02 6c 10 63 6f 6c 5f 73  70 72 25 21 34 3d 30 0d  |.l.col_spr%!4=0.|
000003d0  02 76 11 63 6f 6c 5f 73  70 72 25 21 38 3d 31 36  |.v.col_spr%!8=16|
000003e0  0d 02 80 12 63 6f 6c 5f  73 70 72 25 21 31 32 3d  |....col_spr%!12=|
000003f0  31 36 0d 02 8a 39 c8 99  20 22 4f 53 5f 53 70 72  |16...9.. "OS_Spr|
00000400  69 74 65 4f 70 22 2c 31  35 2b 32 35 36 2c 63 6f  |iteOp",15+256,co|
00000410  6c 5f 73 70 72 25 2c 22  63 6f 6c 73 22 2c 2c 31  |l_spr%,"cols",,1|
00000420  36 2a 38 2c 31 36 2a 38  2c 31 35 0d 02 94 2b c8  |6*8,16*8,15...+.|
00000430  99 20 22 4f 53 5f 53 70  72 69 74 65 4f 70 22 2c  |. "OS_SpriteOp",|
00000440  36 30 2b 32 35 36 2c 63  6f 6c 5f 73 70 72 25 2c  |60+256,col_spr%,|
00000450  22 63 6f 6c 73 22 0d 02  9e 12 e3 20 63 6f 6c 25  |"cols"..... col%|
00000460  3d 30 20 b8 20 32 35 35  0d 02 a8 1e 20 e6 20 63  |=0 . 255.... . c|
00000470  6f 6c 25 20 80 20 36 33  20 c8 9c 20 63 6f 6c 25  |ol% . 63 .. col%|
00000480  20 80 20 31 39 32 0d 02  b2 2e 20 c8 93 20 c8 90  | . 192.... .. ..|
00000490  20 31 36 2a 28 63 6f 6c  25 20 83 20 31 36 29 2c  | 16*(col% . 16),|
000004a0  33 32 2a 28 63 6f 6c 25  20 81 20 31 36 29 2c 31  |32*(col% . 16),1|
000004b0  36 2c 33 32 0d 02 bc 05  ed 0d 02 c6 26 c8 99 20  |6,32........&.. |
000004c0  22 4f 53 5f 53 70 72 69  74 65 4f 70 22 2c 36 30  |"OS_SpriteOp",60|
000004d0  2b 32 35 36 2c 63 6f 6c  5f 73 70 72 25 2c 30 0d  |+256,col_spr%,0.|
000004e0  02 d0 04 0d 02 da 0b 6d  61 78 3d 34 30 30 0d 02  |.......max=400..|
000004f0  e4 1a de 20 6f 62 6a 20  34 2a 6d 61 78 2c 73 61  |... obj 4*max,sa|
00000500  76 65 64 28 6d 61 78 29  0d 02 ee 04 0d 02 f8 26  |ved(max).......&|
00000510  68 65 61 70 5f 73 69 7a  65 3d 28 93 2d e0 2d 33  |heap_size=(.-.-3|
00000520  32 2a 31 30 32 34 29 20  80 20 28 ac 20 34 30 39  |2*1024) . (. 409|
00000530  35 29 0d 03 02 14 de 20  68 65 61 70 20 68 65 61  |5)..... heap hea|
00000540  70 5f 73 69 7a 65 0d 03  0c 26 c8 99 20 22 42 41  |p_size...&.. "BA|
00000550  55 33 44 5f 48 65 61 70  49 6e 69 74 22 2c 68 65  |U3D_HeapInit",he|
00000560  61 70 2c 68 65 61 70 5f  73 69 7a 65 0d 03 16 04  |ap,heap_size....|
00000570  0d 03 20 18 64 69 73 74  3d 38 30 30 3a 7a 70 6c  |.. .dist=800:zpl|
00000580  75 73 3d 31 30 30 30 30  0d 03 2a 18 61 6e 67 5f  |us=10000..*.ang_|
00000590  73 63 61 6c 65 3d 26 31  30 30 30 30 2f 33 36 30  |scale=&10000/360|
000005a0  0d 03 34 04 0d 03 3e 21  de 20 63 6f 6d 24 28 31  |..4...>!. com$(1|
000005b0  30 29 2c 66 69 6c 65 24  28 32 35 36 29 2c 72 67  |0),file$(256),rg|
000005c0  62 25 28 32 29 0d 03 48  53 63 6f 6d 24 28 29 3d  |b%(2)..HScom$()=|
000005d0  22 2a 22 2c 22 4c 4f 41  44 22 2c 22 53 41 56 45  |"*","LOAD","SAVE|
000005e0  22 2c 22 45 44 49 54 22  2c 22 50 4f 4c 59 22 2c  |","EDIT","POLY",|
000005f0  22 5a 4f 4f 4d 22 2c 22  43 52 45 41 54 45 22 2c  |"ZOOM","CREATE",|
00000600  22 44 45 4c 45 54 45 22  2c 22 4d 45 52 47 45 22  |"DELETE","MERGE"|
00000610  2c 22 43 4c 4f 53 45 22  0d 03 52 14 77 68 69 74  |,"CLOSE"..R.whit|
00000620  65 25 3d 26 46 46 46 46  46 46 30 30 0d 03 5c 14  |e%=&FFFFFF00..\.|
00000630  62 6c 61 63 6b 25 3d 26  30 30 30 30 30 30 30 30  |black%=&00000000|
00000640  0d 03 66 17 64 61 72 6b  5f 72 65 64 25 3d 26 30  |..f.dark_red%=&0|
00000650  30 30 30 36 30 30 30 0d  03 70 15 79 65 6c 6c 6f  |0006000..p.yello|
00000660  77 25 3d 26 30 30 46 30  46 30 30 30 0d 03 7a 13  |w%=&00F0F000..z.|
00000670  62 6c 75 65 25 3d 26 46  30 30 30 30 30 30 30 0d  |blue%=&F0000000.|
00000680  03 84 17 70 61 6e 65 6c  5f 77 69 64 74 68 25 3d  |...panel_width%=|
00000690  35 31 32 2d 31 36 0d 03  8e 20 70 61 6e 65 6c 5f  |512-16... panel_|
000006a0  68 65 69 67 68 74 25 3d  28 31 30 32 34 2d 31 38  |height%=(1024-18|
000006b0  30 29 20 81 20 32 0d 03  98 10 63 75 72 5f 6d 6f  |0) . 2....cur_mo|
000006c0  64 65 25 3d 2d 31 0d 03  a2 1d de 20 76 69 65 77  |de%=-1..... view|
000006d0  5f 78 79 7a 20 31 32 2c  76 69 65 77 5f 61 6e 67  |_xyz 12,view_ang|
000006e0  20 31 32 0d 03 ac 1b de  20 6f 78 79 7a 25 28 33  | 12..... oxyz%(3|
000006f0  2c 32 29 2c 6f 61 6e 67  25 28 33 2c 32 29 0d 03  |,2),oang%(3,2)..|
00000700  b6 0e f2 69 6e 69 74 5f  6f 72 69 67 0d 03 c0 11  |...init_orig....|
00000710  6f 61 6e 67 25 28 32 2c  30 29 3d 39 30 0d 03 ca  |oang%(2,0)=90...|
00000720  12 6f 61 6e 67 25 28 33  2c 31 29 3d 2d 39 30 0d  |.oang%(3,1)=-90.|
00000730  03 d4 18 61 6e 67 5f 73  63 61 6c 65 3d 26 31 30  |...ang_scale=&10|
00000740  30 30 30 2f 33 36 30 0d  03 de 0f 73 63 61 6c 65  |000/360....scale|
00000750  3d 31 30 30 30 30 0d 03  e8 0f 63 75 72 5f 6f 62  |=10000....cur_ob|
00000760  6a 25 3d 2d 31 0d 03 f2  10 73 65 6c 65 63 74 65  |j%=-1....selecte|
00000770  64 25 3d 2d 31 0d 03 fc  0e 76 65 72 74 65 78 25  |d%=-1....vertex%|
00000780  3d 2d 31 0d 04 06 11 69  6e 66 6f 5f 6d 6f 64 65  |=-1....info_mode|
00000790  25 3d 2d 31 0d 04 10 0d  6f 62 6a 65 63 74 73 3d  |%=-1....objects=|
000007a0  30 0d 04 1a 0f 6f 62 6a  5f 66 69 72 73 74 3d 30  |0....obj_first=0|
000007b0  0d 04 24 10 73 63 61 6c  65 32 64 3d 35 30 30 30  |..$.scale2d=5000|
000007c0  0d 04 2e 10 63 75 72 5f  76 69 65 77 25 3d 2d 31  |....cur_view%=-1|
000007d0  0d 04 38 04 0d 04 42 39  de 20 70 61 6e 65 6c 5f  |..8...B9. panel_|
000007e0  78 30 25 28 33 29 2c 70  61 6e 65 6c 5f 79 30 25  |x0%(3),panel_y0%|
000007f0  28 33 29 2c 70 61 6e 65  6c 5f 78 31 25 28 33 29  |(3),panel_x1%(3)|
00000800  2c 70 61 6e 65 6c 5f 79  31 25 28 33 29 0d 04 4c  |,panel_y1%(3)..L|
00000810  33 70 61 6e 65 6c 5f 78  30 25 28 29 3d 30 2c 31  |3panel_x0%()=0,1|
00000820  36 2b 70 61 6e 65 6c 5f  77 69 64 74 68 25 2c 30  |6+panel_width%,0|
00000830  2c 31 36 2b 70 61 6e 65  6c 5f 77 69 64 74 68 25  |,16+panel_width%|
00000840  0d 04 56 28 70 61 6e 65  6c 5f 78 31 25 28 29 3d  |..V(panel_x1%()=|
00000850  70 61 6e 65 6c 5f 78 30  25 28 29 2b 70 61 6e 65  |panel_x0%()+pane|
00000860  6c 5f 77 69 64 74 68 25  0d 04 60 3d 70 61 6e 65  |l_width%..`=pane|
00000870  6c 5f 79 30 25 28 29 3d  34 30 2c 34 30 2c 34 30  |l_y0%()=40,40,40|
00000880  2b 31 36 2b 70 61 6e 65  6c 5f 68 65 69 67 68 74  |+16+panel_height|
00000890  25 2c 34 30 2b 31 36 2b  70 61 6e 65 6c 5f 68 65  |%,40+16+panel_he|
000008a0  69 67 68 74 25 0d 04 6a  29 70 61 6e 65 6c 5f 79  |ight%..j)panel_y|
000008b0  31 25 28 29 3d 70 61 6e  65 6c 5f 79 30 25 28 29  |1%()=panel_y0%()|
000008c0  2b 70 61 6e 65 6c 5f 68  65 69 67 68 74 25 0d 04  |+panel_height%..|
000008d0  74 04 0d 04 7e 0e 72 65  70 65 61 74 25 3d 33 30  |t...~.repeat%=30|
000008e0  0d 04 88 18 76 69 65 77  5f 6e 65 65 64 73 5f 75  |....view_needs_u|
000008f0  70 64 61 74 65 25 3d a3  0d 04 92 1c 63 75 72 5f  |pdate%=.....cur_|
00000900  76 69 65 77 5f 6e 65 65  64 73 5f 75 70 64 61 74  |view_needs_updat|
00000910  65 25 3d a3 0d 04 9c 0c  7a 6f 6f 6d 25 3d 31 30  |e%=.....zoom%=10|
00000920  0d 04 a6 04 0d 04 b0 10  62 69 74 5f 6d 65 72 67  |........bit_merg|
00000930  65 3d 36 34 0d 04 ba 10  62 69 74 5f 73 75 72 66  |e=64....bit_surf|
00000940  3d 31 32 38 0d 04 c4 10  62 69 74 5f 64 69 73 70  |=128....bit_disp|
00000950  3d 32 35 36 0d 04 ce 13  62 69 74 5f 64 69 73 70  |=256....bit_disp|
00000960  61 6c 6c 3d 35 31 32 0d  04 d8 13 62 69 74 5f 63  |all=512....bit_c|
00000970  6c 6f 73 65 64 3d 31 30  32 34 0d 04 e2 04 0d 04  |losed=1024......|
00000980  ec 0e 6f 62 6a 5f 6c 69  73 74 3d 30 0d 04 f6 0e  |..obj_list=0....|
00000990  6f 62 6a 5f 6e 61 6d 65  3d 34 0d 05 00 0d 6f 62  |obj_name=4....ob|
000009a0  6a 5f 72 65 71 3d 38 0d  05 0a 04 0d 05 14 0f 73  |j_req=8........s|
000009b0  75 72 66 5f 74 79 70 65  3d 30 0d 05 1e 11 73 75  |urf_type=0....su|
000009c0  72 66 5f 63 6f 6c 6f 75  72 3d 34 0d 05 28 0c 73  |rf_colour=4..(.s|
000009d0  75 72 66 5f 6e 3d 38 0d  05 32 12 73 75 72 66 5f  |urf_n=8..2.surf_|
000009e0  63 6f 6f 72 64 73 3d 31  32 0d 05 3c 0f 73 75 72  |coords=12..<.sur|
000009f0  66 5f 72 65 71 3d 31 32  0d 05 46 04 0d 05 50 11  |f_req=12..F...P.|
00000a00  73 75 62 6f 62 6a 5f 6e  65 78 74 3d 30 0d 05 5a  |subobj_next=0..Z|
00000a10  11 73 75 62 6f 62 6a 5f  74 79 70 65 3d 34 0d 05  |.subobj_type=4..|
00000a20  64 12 73 75 62 6f 62 6a  5f 66 6c 61 67 73 3d 38  |d.subobj_flags=8|
00000a30  0d 05 6e 14 73 75 62 6f  62 6a 5f 6f 66 66 73 65  |..n.subobj_offse|
00000a40  74 3d 31 32 0d 05 78 13  73 75 62 6f 62 6a 5f 61  |t=12..x.subobj_a|
00000a50  6e 67 6c 65 3d 32 34 0d  05 82 15 73 75 62 6f 62  |ngle=24....subob|
00000a60  6a 5f 73 75 72 66 72 65  71 3d 33 36 0d 05 8c 14  |j_surfreq=36....|
00000a70  73 75 62 6f 62 6a 5f 62  6f 75 6e 64 73 3d 33 36  |subobj_bounds=36|
00000a80  0d 05 96 12 73 75 62 6f  62 6a 5f 72 65 71 3d 31  |....subobj_req=1|
00000a90  33 32 0d 05 a0 04 0d 05  aa 05 e1 0d 05 b4 05 3a  |32.............:|
00000aa0  0d 05 be 13 dd 20 f2 69  6e 69 74 5f 6d 6f 64 75  |..... .init_modu|
00000ab0  6c 65 73 0d 05 c8 25 2a  52 4d 45 6e 73 75 72 65  |les...%*RMEnsure|
00000ac0  20 42 41 55 33 44 20 30  2e 34 30 20 52 4d 4c 6f  | BAU3D 0.40 RMLo|
00000ad0  61 64 20 42 41 55 33 44  0d 05 d2 47 2a 52 4d 45  |ad BAU3D...G*RME|
00000ae0  6e 73 75 72 65 20 43 6f  6c 6f 75 72 54 72 61 6e  |nsure ColourTran|
00000af0  73 20 31 2e 30 30 20 45  72 72 6f 72 20 30 20 33  |s 1.00 Error 0 3|
00000b00  44 65 64 20 72 65 71 75  69 72 65 73 20 43 6f 6c  |Ded requires Col|
00000b10  6f 75 72 54 72 61 6e 73  20 6d 6f 64 75 6c 65 0d  |ourTrans module.|
00000b20  05 dc 05 e1 0d 05 e6 05  3a 0d 05 f0 10 dd 20 f2  |........:..... .|
00000b30  69 6e 69 74 5f 6f 72 69  67 0d 05 fa 0d 6f 78 79  |init_orig....oxy|
00000b40  7a 25 28 29 3d 30 0d 06  04 16 6f 78 79 7a 25 28  |z%()=0....oxyz%(|
00000b50  30 2c 32 29 3d 32 30 30  30 30 30 30 0d 06 0e 05  |0,2)=2000000....|
00000b60  e1 0d 06 18 05 3a 0d 06  22 14 dd 20 f2 73 68 6f  |.....:..".. .sho|
00000b70  77 5f 63 6f 6d 6d 61 6e  64 73 0d 06 2c 08 ea 20  |w_commands..,.. |
00000b80  69 25 0d 06 36 0e e3 20  69 25 3d 30 20 b8 20 39  |i%..6.. i%=0 . 9|
00000b90  0d 06 40 16 20 f2 73 68  6f 77 5f 63 6f 6d 6d 61  |..@. .show_comma|
00000ba0  6e 64 28 69 25 29 0d 06  4a 05 ed 0d 06 54 05 e1  |nd(i%)..J....T..|
00000bb0  0d 06 5e 05 3a 0d 06 68  17 dd 20 f2 73 68 6f 77  |..^.:..h.. .show|
00000bc0  5f 63 6f 6d 6d 61 6e 64  28 69 25 29 0d 06 72 08  |_command(i%)..r.|
00000bd0  ea 20 78 25 0d 06 7c 07  ef 20 35 0d 06 86 0d 78  |. x%..|.. 5....x|
00000be0  25 3d 31 32 38 2a 69 25  0d 06 90 32 e7 20 69 25  |%=128*i%...2. i%|
00000bf0  3d 63 75 72 5f 6d 6f 64  65 25 20 f2 67 63 6f 6c  |=cur_mode% .gcol|
00000c00  28 62 6c 75 65 25 29 20  8b 20 f2 67 63 6f 6c 28  |(blue%) . .gcol(|
00000c10  64 61 72 6b 5f 72 65 64  25 29 0d 06 9a 1b c8 93  |dark_red%)......|
00000c20  20 c8 90 20 78 25 2c 31  30 32 34 2d 34 34 2c 31  | .. x%,1024-44,1|
00000c30  32 34 2c 34 30 0d 06 a4  31 e7 20 69 25 3d 63 75  |24,40...1. i%=cu|
00000c40  72 5f 6d 6f 64 65 25 20  f2 67 63 6f 6c 28 79 65  |r_mode% .gcol(ye|
00000c50  6c 6c 6f 77 25 29 20 8b  20 f2 67 63 6f 6c 28 77  |llow%) . .gcol(w|
00000c60  68 69 74 65 25 29 0d 06  ae 18 c8 93 20 78 25 2c  |hite%)...... x%,|
00000c70  31 30 32 34 2d 34 34 2c  31 32 34 2c 34 30 0d 06  |1024-44,124,40..|
00000c80  b8 21 ec 20 78 25 2b 36  34 2d 38 2a a9 28 63 6f  |.!. x%+64-8*.(co|
00000c90  6d 24 28 69 25 29 29 2c  31 30 32 34 2d 31 32 0d  |m$(i%)),1024-12.|
00000ca0  06 c2 0f f1 3b 63 6f 6d  24 28 69 25 29 3b 0d 06  |....;com$(i%);..|
00000cb0  cc 07 ef 20 34 0d 06 d6  05 87 0d 06 e0 05 e1 0d  |... 4...........|
00000cc0  06 ea 05 3a 0d 06 f4 11  dd 20 f2 67 63 6f 6c 28  |...:..... .gcol(|
00000cd0  72 67 62 25 29 0d 06 fe  28 c8 99 20 22 43 6f 6c  |rgb%)...(.. "Col|
00000ce0  6f 75 72 54 72 61 6e 73  5f 53 65 74 47 43 4f 4c  |ourTrans_SetGCOL|
00000cf0  22 2c 72 67 62 25 2c 2c  2c 26 31 30 30 0d 07 08  |",rgb%,,,&100...|
00000d00  05 e1 0d 07 12 05 3a 0d  07 1c 13 dd 20 f2 63 6f  |......:..... .co|
00000d10  6c 6f 75 72 28 72 67 62  25 29 0d 07 26 0a ea 20  |lour(rgb%)..&.. |
00000d20  63 6f 6c 25 0d 07 30 2b  c8 99 20 22 43 6f 6c 6f  |col%..0+.. "Colo|
00000d30  75 72 54 72 61 6e 73 5f  52 65 74 75 72 6e 47 43  |urTrans_ReturnGC|
00000d40  4f 4c 22 2c 72 67 62 25  20 b8 20 63 6f 6c 25 0d  |OL",rgb% . col%.|
00000d50  07 3a 20 fb 20 28 63 6f  6c 25 3e 3e 32 29 20 c8  |.: . (col%>>2) .|
00000d60  9c 20 28 63 6f 6c 25 20  80 20 33 29 3c 3c 36 0d  |. (col% . 3)<<6.|
00000d70  07 44 05 e1 0d 07 4e 05  3a 0d 07 58 14 dd 20 f2  |.D....N.:..X.. .|
00000d80  63 6f 6c 6f 75 72 62 28  72 67 62 25 29 0d 07 62  |colourb(rgb%)..b|
00000d90  0a ea 20 63 6f 6c 25 0d  07 6c 2b c8 99 20 22 43  |.. col%..l+.. "C|
00000da0  6f 6c 6f 75 72 54 72 61  6e 73 5f 52 65 74 75 72  |olourTrans_Retur|
00000db0  6e 47 43 4f 4c 22 2c 72  67 62 25 20 b8 20 63 6f  |nGCOL",rgb% . co|
00000dc0  6c 25 0d 07 76 24 fb 20  31 32 38 2b 28 63 6f 6c  |l%..v$. 128+(col|
00000dd0  25 3e 3e 32 29 20 c8 9c  20 28 63 6f 6c 25 20 80  |%>>2) .. (col% .|
00000de0  20 33 29 3c 3c 36 0d 07  80 05 e1 0d 07 8a 05 3a  | 3)<<6.........:|
00000df0  0d 07 94 0d dd 20 f2 73  63 72 65 65 6e 0d 07 9e  |..... .screen...|
00000e00  08 ea 20 69 25 0d 07 a8  0b ef 20 32 36 2c 32 30  |.. i%..... 26,20|
00000e10  0d 07 b2 05 db 0d 07 bc  05 87 0d 07 c6 12 f2 73  |...............s|
00000e20  68 6f 77 5f 63 6f 6d 6d  61 6e 64 73 0d 07 d0 10  |how_commands....|
00000e30  f2 73 68 6f 77 5f 70 61  6e 65 6c 73 0d 07 da 0d  |.show_panels....|
00000e40  f2 69 6e 66 6f 5f 62 61  72 0d 07 e4 05 e1 0d 07  |.info_bar.......|
00000e50  ee 05 3a 0d 07 f8 12 dd  20 f2 73 68 6f 77 5f 70  |..:..... .show_p|
00000e60  61 6e 65 6c 73 0d 08 02  08 ea 20 69 25 0d 08 0c  |anels..... i%...|
00000e70  0e e3 20 69 25 3d 30 20  b8 20 33 0d 08 16 14 20  |.. i%=0 . 3.... |
00000e80  f2 73 68 6f 77 5f 70 61  6e 65 6c 28 69 25 29 0d  |.show_panel(i%).|
00000e90  08 20 05 ed 0d 08 2a 05  e1 0d 08 34 05 3a 0d 08  |. ....*....4.:..|
00000ea0  3e 19 dd 20 f2 73 68 6f  77 5f 70 61 6e 65 6c 28  |>.. .show_panel(|
00000eb0  70 61 6e 65 6c 25 29 0d  08 48 0e ea 20 78 25 2c  |panel%)..H.. x%,|
00000ec0  79 25 2c 69 25 0d 08 52  25 78 25 3d 28 70 61 6e  |y%,i%..R%x%=(pan|
00000ed0  65 6c 25 20 83 20 32 29  2a 28 70 61 6e 65 6c 5f  |el% . 2)*(panel_|
00000ee0  77 69 64 74 68 25 2b 31  36 29 0d 08 5c 29 79 25  |width%+16)..\)y%|
00000ef0  3d 28 70 61 6e 65 6c 25  20 81 20 32 29 2a 28 70  |=(panel% . 2)*(p|
00000f00  61 6e 65 6c 5f 68 65 69  67 68 74 25 2b 31 36 29  |anel_height%+16)|
00000f10  2b 34 30 0d 08 66 11 f2  67 63 6f 6c 28 62 6c 61  |+40..f..gcol(bla|
00000f20  63 6b 25 29 0d 08 70 2a  c8 93 20 c8 90 20 78 25  |ck%)..p*.. .. x%|
00000f30  2c 79 25 2c 70 61 6e 65  6c 5f 77 69 64 74 68 25  |,y%,panel_width%|
00000f40  2c 70 61 6e 65 6c 5f 68  65 69 67 68 74 25 0d 08  |,panel_height%..|
00000f50  7a 35 e7 20 70 61 6e 65  6c 25 3d 63 75 72 5f 76  |z5. panel%=cur_v|
00000f60  69 65 77 25 20 f2 67 63  6f 6c 28 79 65 6c 6c 6f  |iew% .gcol(yello|
00000f70  77 25 29 20 8b 20 f2 67  63 6f 6c 28 77 68 69 74  |w%) . .gcol(whit|
00000f80  65 25 29 0d 08 84 27 c8  93 20 78 25 2c 79 25 2c  |e%)...'.. x%,y%,|
00000f90  70 61 6e 65 6c 5f 77 69  64 74 68 25 2c 70 61 6e  |panel_width%,pan|
00000fa0  65 6c 5f 68 65 69 67 68  74 25 0d 08 8e 0a c8 91  |el_height%......|
00000fb0  20 30 2c 30 0d 08 98 38  ef 20 32 34 2c 78 25 2b  | 0,0...8. 24,x%+|
00000fc0  32 3b 79 25 2b 34 3b 78  25 2b 70 61 6e 65 6c 5f  |2;y%+4;x%+panel_|
00000fd0  77 69 64 74 68 25 2d 32  3b 79 25 2b 70 61 6e 65  |width%-2;y%+pane|
00000fe0  6c 5f 68 65 69 67 68 74  25 2d 34 3b 0d 08 a2 2f  |l_height%-4;.../|
00000ff0  c8 91 20 78 25 2b 70 61  6e 65 6c 5f 77 69 64 74  |.. x%+panel_widt|
00001000  68 25 20 81 20 32 2c 79  25 2b 70 61 6e 65 6c 5f  |h% . 2,y%+panel_|
00001010  68 65 69 67 68 74 25 20  81 20 32 0d 08 ac 14 e7  |height% . 2.....|
00001020  20 63 75 72 5f 6f 62 6a  25 3c 3e 2d 31 20 8c 0d  | cur_obj%<>-1 ..|
00001030  08 b6 10 20 c8 8e 20 70  61 6e 65 6c 25 20 ca 0d  |... .. panel% ..|
00001040  08 c0 0a 20 20 c9 20 30  3a 0d 08 ca 11 20 20 20  |...  . 0:....   |
00001050  e3 20 69 25 3d 30 20 b8  20 32 0d 08 d4 23 20 20  |. i%=0 . 2...#  |
00001060  20 20 76 69 65 77 5f 78  79 7a 21 28 34 2a 69 25  |  view_xyz!(4*i%|
00001070  29 3d 6f 78 79 7a 25 28  30 2c 69 25 29 0d 08 de  |)=oxyz%(0,i%)...|
00001080  23 20 20 20 20 76 69 65  77 5f 61 6e 67 21 28 34  |#    view_ang!(4|
00001090  2a 69 25 29 3d 6f 61 6e  67 25 28 30 2c 69 25 29  |*i%)=oang%(0,i%)|
000010a0  0d 08 e8 08 20 20 20 ed  0d 08 f2 41 20 20 20 c8  |....   ....A   .|
000010b0  99 20 22 42 41 55 33 44  5f 57 72 69 74 65 43 6f  |. "BAU3D_WriteCo|
000010c0  6e 66 69 67 22 2c 25 31  31 30 2c 64 69 73 74 2c  |nfig",%110,dist,|
000010d0  7a 70 6c 75 73 2c 2d 7a  70 6c 75 73 2a 30 2e 38  |zplus,-zplus*0.8|
000010e0  2c 31 30 30 30 30 30 30  30 0d 08 fc 3b 20 20 20  |,10000000...;   |
000010f0  c8 99 20 22 42 41 55 33  44 5f 52 65 6e 64 65 72  |.. "BAU3D_Render|
00001100  22 2c 6f 62 6a 21 28 34  2a 63 75 72 5f 6f 62 6a  |",obj!(4*cur_obj|
00001110  25 29 2c 76 69 65 77 5f  78 79 7a 2c 76 69 65 77  |%),view_xyz,view|
00001120  5f 61 6e 67 0d 09 06 1e  20 20 c9 20 31 2c 32 2c  |_ang....  . 1,2,|
00001130  33 3a f2 76 69 65 77 5f  32 64 28 70 61 6e 65 6c  |3:.view_2d(panel|
00001140  25 29 0d 09 10 06 20 cb  0d 09 1a 05 cd 0d 09 24  |%).... ........$|
00001150  08 ef 20 32 36 0d 09 2e  05 87 0d 09 38 05 e1 0d  |.. 26.......8...|
00001160  09 42 05 3a 0d 09 4c 12  dd 20 f2 76 69 65 77 5f  |.B.:..L.. .view_|
00001170  32 64 28 70 25 29 0d 09  56 45 ea 20 69 25 2c 78  |2d(p%)..VE. i%,x|
00001180  30 2c 78 31 2c 79 30 2c  79 31 2c 78 6d 69 6e 2c  |0,x1,y0,y1,xmin,|
00001190  79 6d 69 6e 2c 7a 6d 69  6e 2c 78 6d 61 78 2c 79  |ymin,zmin,xmax,y|
000011a0  6d 61 78 2c 7a 6d 61 78  2c 6f 78 2c 6f 79 2c 6f  |max,zmax,ox,oy,o|
000011b0  7a 2c 61 61 2c 61 6f 2c  78 2c 79 0d 09 60 0b ea  |z,aa,ao,x,y..`..|
000011c0  20 73 75 72 66 25 0d 09  6a 0e e3 20 69 25 3d 30  | surf%..j.. i%=0|
000011d0  20 b8 20 32 0d 09 74 21  20 76 69 65 77 5f 78 79  | . 2..t! view_xy|
000011e0  7a 21 28 34 2a 69 25 29  3d 6f 78 79 7a 25 28 70  |z!(4*i%)=oxyz%(p|
000011f0  25 2c 69 25 29 0d 09 7e  2b 20 76 69 65 77 5f 61  |%,i%)..~+ view_a|
00001200  6e 67 21 28 34 2a 69 25  29 3d 61 6e 67 5f 73 63  |ng!(4*i%)=ang_sc|
00001210  61 6c 65 2a 6f 61 6e 67  25 28 70 25 2c 69 25 29  |ale*oang%(p%,i%)|
00001220  0d 09 88 05 ed 0d 09 92  3e c8 99 20 22 42 41 55  |........>.. "BAU|
00001230  33 44 5f 57 72 69 74 65  43 6f 6e 66 69 67 22 2c  |3D_WriteConfig",|
00001240  25 31 31 30 2c 64 69 73  74 2c 7a 70 6c 75 73 2c  |%110,dist,zplus,|
00001250  2d 31 30 30 30 30 30 30  30 2c 31 30 30 30 30 30  |-10000000,100000|
00001260  30 30 30 0d 09 9c 4d c8  99 20 22 42 41 55 33 44  |000...M.. "BAU3D|
00001270  5f 52 65 6e 64 65 72 32  44 22 2c 6f 62 6a 21 28  |_Render2D",obj!(|
00001280  34 2a 63 75 72 5f 6f 62  6a 25 29 2c 76 69 65 77  |4*cur_obj%),view|
00001290  5f 78 79 7a 2c 76 69 65  77 5f 61 6e 67 2c 73 63  |_xyz,view_ang,sc|
000012a0  61 6c 65 32 64 2a 28 31  30 2f 7a 6f 6f 6d 25 29  |ale2d*(10/zoom%)|
000012b0  0d 09 a6 15 e7 20 73 65  6c 65 63 74 65 64 25 3c  |..... selected%<|
000012c0  3e 2d 31 20 8c 0d 09 b0  12 20 f2 67 63 6f 6c 28  |>-1 ..... .gcol(|
000012d0  77 68 69 74 65 25 29 0d  09 ba 2e 20 e7 20 28 73  |white%).... . (s|
000012e0  65 6c 65 63 74 65 64 25  21 73 75 62 6f 62 6a 5f  |elected%!subobj_|
000012f0  66 6c 61 67 73 20 80 20  62 69 74 5f 73 75 72 66  |flags . bit_surf|
00001300  29 3e 30 20 8c 0d 09 c4  21 20 20 73 75 72 66 25  |)>0 ....!  surf%|
00001310  3d 73 65 6c 65 63 74 65  64 25 21 73 75 62 6f 62  |=selected%!subob|
00001320  6a 5f 74 79 70 65 0d 09  ce 1f 20 20 63 6f 6f 72  |j_type....  coor|
00001330  64 73 25 3d 73 75 72 66  25 2b 73 75 72 66 5f 63  |ds%=surf%+surf_c|
00001340  6f 6f 72 64 73 0d 09 d8  13 20 20 f2 67 63 6f 6c  |oords....  .gcol|
00001350  28 77 68 69 74 65 25 29  0d 09 e2 19 20 20 ec 20  |(white%)....  . |
00001360  a4 78 28 70 25 2c 30 29  2c a4 79 28 70 25 2c 30  |.x(p%,0),.y(p%,0|
00001370  29 0d 09 ec 22 20 20 e3  20 69 25 3d 73 75 72 66  |)..."  . i%=surf|
00001380  25 21 73 75 72 66 5f 6e  2d 31 20 b8 20 30 20 88  |%!surf_n-1 . 0 .|
00001390  20 2d 31 0d 09 f6 1c 20  20 20 df 20 a4 78 28 70  | -1....   . .x(p|
000013a0  25 2c 69 25 29 2c a4 79  28 70 25 2c 69 25 29 0d  |%,i%),.y(p%,i%).|
000013b0  0a 00 07 20 20 ed 0d 0a  0a 1d 20 20 e3 20 69 25  |...  .....  . i%|
000013c0  3d 30 20 b8 20 73 75 72  66 25 21 73 75 72 66 5f  |=0 . surf%!surf_|
000013d0  6e 2d 31 0d 0a 14 32 20  20 20 e7 20 69 25 3d 76  |n-1...2   . i%=v|
000013e0  65 72 74 65 78 25 20 f2  67 63 6f 6c 28 79 65 6c  |ertex% .gcol(yel|
000013f0  6c 6f 77 25 29 20 8b 20  f2 67 63 6f 6c 28 77 68  |low%) . .gcol(wh|
00001400  69 74 65 25 29 0d 0a 1e  27 20 20 20 c8 93 20 a4  |ite%)...'   .. .|
00001410  78 28 70 25 2c 69 25 29  2d 38 2c a4 79 28 70 25  |x(p%,i%)-8,.y(p%|
00001420  2c 69 25 29 2d 38 2c 31  36 2c 31 36 0d 0a 28 07  |,i%)-8,16,16..(.|
00001430  20 20 ed 0d 0a 32 06 20  cc 0d 0a 3c 42 20 20 f2  |  ...2. ...<B  .|
00001440  66 69 6e 64 5f 62 6f 75  6e 64 69 6e 67 5f 63 75  |find_bounding_cu|
00001450  62 65 28 73 65 6c 65 63  74 65 64 25 2c 78 6d 69  |be(selected%,xmi|
00001460  6e 2c 79 6d 69 6e 2c 7a  6d 69 6e 2c 78 6d 61 78  |n,ymin,zmin,xmax|
00001470  2c 79 6d 61 78 2c 7a 6d  61 78 29 0d 0a 46 20 20  |,ymax,zmax)..F  |
00001480  20 61 6f 3d 73 65 6c 65  63 74 65 64 25 2b 73 75  | ao=selected%+su|
00001490  62 6f 62 6a 5f 6f 66 66  73 65 74 0d 0a 50 1f 20  |bobj_offset..P. |
000014a0  20 61 61 3d 73 65 6c 65  63 74 65 64 25 2b 73 75  | aa=selected%+su|
000014b0  62 6f 62 6a 5f 61 6e 67  6c 65 0d 0a 5a 0c 20 20  |bobj_angle..Z.  |
000014c0  6f 78 3d 21 61 6f 0d 0a  64 0d 20 20 6f 79 3d 61  |ox=!ao..d.  oy=a|
000014d0  6f 21 34 0d 0a 6e 0d 20  20 6f 7a 3d 61 6f 21 38  |o!4..n.  oz=ao!8|
000014e0  0d 0a 78 0d 20 20 c8 8e  20 70 25 20 ca 0d 0a 82  |..x.  .. p% ....|
000014f0  0b 20 20 20 c9 20 31 3a  0d 0a 8c 12 20 20 20 20  |.   . 1:....    |
00001500  78 30 3d 78 6d 69 6e 2b  6f 78 0d 0a 96 12 20 20  |x0=xmin+ox....  |
00001510  20 20 79 30 3d 79 6d 69  6e 2b 6f 79 0d 0a a0 12  |  y0=ymin+oy....|
00001520  20 20 20 20 78 31 3d 78  6d 61 78 2b 6f 78 0d 0a  |    x1=xmax+ox..|
00001530  aa 12 20 20 20 20 79 31  3d 79 6d 61 78 2b 6f 79  |..    y1=ymax+oy|
00001540  0d 0a b4 0b 20 20 20 c9  20 32 3a 0d 0a be 12 20  |....   . 2:.... |
00001550  20 20 20 78 30 3d 78 6d  69 6e 2b 6f 78 0d 0a c8  |   x0=xmin+ox...|
00001560  12 20 20 20 20 79 30 3d  7a 6d 69 6e 2b 6f 7a 0d  |.    y0=zmin+oz.|
00001570  0a d2 12 20 20 20 20 78  31 3d 78 6d 61 78 2b 6f  |...    x1=xmax+o|
00001580  78 0d 0a dc 12 20 20 20  20 79 31 3d 7a 6d 61 78  |x....    y1=zmax|
00001590  2b 6f 7a 0d 0a e6 0b 20  20 20 c9 20 33 3a 0d 0a  |+oz....   . 3:..|
000015a0  f0 12 20 20 20 20 78 30  3d 7a 6d 69 6e 2b 6f 7a  |..    x0=zmin+oz|
000015b0  0d 0a fa 12 20 20 20 20  79 30 3d 79 6d 69 6e 2b  |....    y0=ymin+|
000015c0  6f 79 0d 0b 04 12 20 20  20 20 78 31 3d 7a 6d 61  |oy....    x1=zma|
000015d0  78 2b 6f 7a 0d 0b 0e 12  20 20 20 20 79 31 3d 79  |x+oz....    y1=y|
000015e0  6d 61 78 2b 6f 79 0d 0b  18 07 20 20 cb 0d 0b 22  |max+oy....  ..."|
000015f0  2e 20 20 78 30 3d 28 6f  78 79 7a 25 28 70 25 2c  |.  x0=(oxyz%(p%,|
00001600  30 29 2b 78 30 29 2f 28  73 63 61 6c 65 32 64 2f  |0)+x0)/(scale2d/|
00001610  28 7a 6f 6f 6d 25 2f 31  30 29 29 0d 0b 2c 2e 20  |(zoom%/10))..,. |
00001620  20 78 31 3d 28 6f 78 79  7a 25 28 70 25 2c 30 29  | x1=(oxyz%(p%,0)|
00001630  2b 78 31 29 2f 28 73 63  61 6c 65 32 64 2f 28 7a  |+x1)/(scale2d/(z|
00001640  6f 6f 6d 25 2f 31 30 29  29 0d 0b 36 2e 20 20 79  |oom%/10))..6.  y|
00001650  30 3d 28 6f 78 79 7a 25  28 70 25 2c 31 29 2b 79  |0=(oxyz%(p%,1)+y|
00001660  30 29 2f 28 73 63 61 6c  65 32 64 2f 28 7a 6f 6f  |0)/(scale2d/(zoo|
00001670  6d 25 2f 31 30 29 29 0d  0b 40 2e 20 20 79 31 3d  |m%/10))..@.  y1=|
00001680  28 6f 78 79 7a 25 28 70  25 2c 31 29 2b 79 31 29  |(oxyz%(p%,1)+y1)|
00001690  2f 28 73 63 61 6c 65 32  64 2f 28 7a 6f 6f 6d 25  |/(scale2d/(zoom%|
000016a0  2f 31 30 29 29 0d 0b 4a  1a 20 20 c8 93 20 78 30  |/10))..J.  .. x0|
000016b0  2c 79 30 2c 78 31 2d 78  30 2c 79 31 2d 79 30 0d  |,y0,x1-x0,y1-y0.|
000016c0  0b 54 06 20 cd 0d 0b 5e  05 cd 0d 0b 68 13 e7 20  |.T. ...^....h.. |
000016d0  63 75 72 5f 6d 6f 64 65  25 3d 34 20 8c 0d 0b 72  |cur_mode%=4 ...r|
000016e0  10 20 e7 20 76 65 72 74  73 3e 30 20 8c 0d 0b 7c  |. . verts>0 ...||
000016f0  13 20 20 f2 67 63 6f 6c  28 77 68 69 74 65 25 29  |.  .gcol(white%)|
00001700  0d 0b 86 16 20 20 e3 20  69 25 3d 30 20 b8 20 76  |....  . i%=0 . v|
00001710  65 72 74 73 2d 31 0d 0b  90 0e 20 20 20 c8 8e 20  |erts-1....   .. |
00001720  70 25 20 ca 0d 0b 9a 0c  20 20 20 20 c9 20 31 3a  |p% .....    . 1:|
00001730  0d 0b a4 35 20 20 20 20  20 78 3d 28 6f 78 79 7a  |...5     x=(oxyz|
00001740  25 28 70 25 2c 30 29 2b  76 28 69 25 2c 30 29 29  |%(p%,0)+v(i%,0))|
00001750  2f 28 73 63 61 6c 65 32  64 2f 28 7a 6f 6f 6d 25  |/(scale2d/(zoom%|
00001760  2f 31 30 29 29 0d 0b ae  35 20 20 20 20 20 79 3d  |/10))...5     y=|
00001770  28 6f 78 79 7a 25 28 70  25 2c 31 29 2b 76 28 69  |(oxyz%(p%,1)+v(i|
00001780  25 2c 31 29 29 2f 28 73  63 61 6c 65 32 64 2f 28  |%,1))/(scale2d/(|
00001790  7a 6f 6f 6d 25 2f 31 30  29 29 0d 0b b8 0c 20 20  |zoom%/10))....  |
000017a0  20 20 c9 20 32 3a 0d 0b  c2 35 20 20 20 20 20 78  |  . 2:...5     x|
000017b0  3d 28 6f 78 79 7a 25 28  70 25 2c 30 29 2b 76 28  |=(oxyz%(p%,0)+v(|
000017c0  69 25 2c 30 29 29 2f 28  73 63 61 6c 65 32 64 2f  |i%,0))/(scale2d/|
000017d0  28 7a 6f 6f 6d 25 2f 31  30 29 29 0d 0b cc 35 20  |(zoom%/10))...5 |
000017e0  20 20 20 20 79 3d 28 6f  78 79 7a 25 28 70 25 2c  |    y=(oxyz%(p%,|
000017f0  31 29 2b 76 28 69 25 2c  32 29 29 2f 28 73 63 61  |1)+v(i%,2))/(sca|
00001800  6c 65 32 64 2f 28 7a 6f  6f 6d 25 2f 31 30 29 29  |le2d/(zoom%/10))|
00001810  0d 0b d6 0c 20 20 20 20  c9 20 33 3a 0d 0b e0 35  |....    . 3:...5|
00001820  20 20 20 20 20 78 3d 28  6f 78 79 7a 25 28 70 25  |     x=(oxyz%(p%|
00001830  2c 30 29 2b 76 28 69 25  2c 32 29 29 2f 28 73 63  |,0)+v(i%,2))/(sc|
00001840  61 6c 65 32 64 2f 28 7a  6f 6f 6d 25 2f 31 30 29  |ale2d/(zoom%/10)|
00001850  29 0d 0b ea 35 20 20 20  20 20 79 3d 28 6f 78 79  |)...5     y=(oxy|
00001860  7a 25 28 70 25 2c 31 29  2b 76 28 69 25 2c 31 29  |z%(p%,1)+v(i%,1)|
00001870  29 2f 28 73 63 61 6c 65  32 64 2f 28 7a 6f 6f 6d  |)/(scale2d/(zoom|
00001880  25 2f 31 30 29 29 0d 0b  f4 08 20 20 20 cb 0d 0b  |%/10))....   ...|
00001890  fe 12 20 20 20 c8 8f 20  c8 90 20 78 2c 79 2c 34  |..   .. .. x,y,4|
000018a0  0d 0c 08 07 20 20 ed 0d  0c 12 06 20 cd 0d 0c 1c  |....  ..... ....|
000018b0  05 cd 0d 0c 26 05 e1 0d  0c 30 05 3a 0d 0c 3a 19  |....&....0.:..:.|
000018c0  dd 20 f2 63 6c 69 63 6b  28 6d 78 25 2c 6d 79 25  |. .click(mx%,my%|
000018d0  2c 6d 62 25 29 0d 0c 44  0b ea 20 66 69 6c 65 25  |,mb%)..D.. file%|
000018e0  0d 0c 4e 14 e7 20 6d 79  25 3e 3d 31 30 32 34 2d  |..N.. my%>=1024-|
000018f0  34 34 20 8c 0d 0c 58 1c  20 f2 6d 6f 64 65 5f 73  |44 ...X. .mode_s|
00001900  65 6c 65 63 74 28 6d 78  25 20 81 20 31 32 38 29  |elect(mx% . 128)|
00001910  0d 0c 62 05 cc 0d 0c 6c  13 20 c8 8e 20 63 75 72  |..b....l. .. cur|
00001920  5f 6d 6f 64 65 25 20 ca  0d 0c 76 0a 20 20 c9 20  |_mode% ...v.  . |
00001930  31 3a 0d 0c 80 21 20 20  20 66 69 6c 65 25 3d a4  |1:...!   file%=.|
00001940  77 68 69 63 68 5f 66 69  6c 65 28 6d 78 25 2c 6d  |which_file(mx%,m|
00001950  79 25 29 0d 0c 8a 14 20  20 20 e7 20 66 69 6c 65  |y%)....   . file|
00001960  25 3c 3e 2d 31 20 8c 0d  0c 94 0e 20 20 20 20 f2  |%<>-1 .....    .|
00001970  63 6c 65 61 72 0d 0c 9e  26 20 20 20 20 f2 6c 6f  |clear...&    .lo|
00001980  61 64 28 22 6f 62 6a 65  63 74 73 2e 22 2b 66 69  |ad("objects."+fi|
00001990  6c 65 24 28 66 69 6c 65  25 29 29 0d 0c a8 2f 20  |le$(file%)).../ |
000019a0  20 20 20 f2 73 65 6c 65  63 74 5f 6f 62 6a 28 a4  |   .select_obj(.|
000019b0  69 64 65 6e 74 69 66 79  5f 6b 65 79 77 6f 72 64  |identify_keyword|
000019c0  28 22 77 6f 72 6c 64 22  29 29 0d 0c b2 17 20 20  |("world"))....  |
000019d0  20 20 f2 6d 6f 64 65 5f  73 65 6c 65 63 74 28 33  |  .mode_select(3|
000019e0  29 0d 0c bc 08 20 20 20  cd 0d 0c c6 0a 20 20 c9  |)....   .....  .|
000019f0  20 33 3a 0d 0c d0 1f 20  20 20 f2 64 72 61 77 5f  | 3:....   .draw_|
00001a00  63 6c 69 63 6b 28 6d 78  25 2c 6d 79 25 2c 6d 62  |click(mx%,my%,mb|
00001a10  25 29 0d 0c da 0a 20 20  c9 20 34 3a 0d 0c e4 1f  |%)....  . 4:....|
00001a20  20 20 20 f2 70 6f 6c 79  5f 63 6c 69 63 6b 28 6d  |   .poly_click(m|
00001a30  78 25 2c 6d 79 25 2c 6d  62 25 29 0d 0c ee 0a 20  |x%,my%,mb%).... |
00001a40  20 c9 20 35 3a 0d 0c f8  1b 20 20 20 f2 7a 6f 6f  | . 5:....   .zoo|
00001a50  6d 5f 63 6c 69 63 6b 28  6d 78 25 2c 6d 79 25 29  |m_click(mx%,my%)|
00001a60  0d 0d 02 06 20 cb 0d 0d  0c 05 cd 0d 0d 16 05 e1  |.... ...........|
00001a70  0d 0d 20 05 3a 0d 0d 2a  17 dd 20 f2 73 65 6c 65  |.. .:..*.. .sele|
00001a80  63 74 5f 6f 62 6a 28 6e  65 77 25 29 0d 0d 34 36  |ct_obj(new%)..46|
00001a90  e7 20 6e 65 77 25 3e 6f  62 6a 65 63 74 73 2d 31  |. new%>objects-1|
00001aa0  20 6e 65 77 25 3d 6f 62  6a 65 63 74 73 2d 31 20  | new%=objects-1 |
00001ab0  8b 20 e7 20 6e 65 77 25  3c 30 20 6e 65 77 25 3d  |. . new%<0 new%=|
00001ac0  2d 31 0d 0d 3e 11 63 75  72 5f 6f 62 6a 25 3d 6e  |-1..>.cur_obj%=n|
00001ad0  65 77 25 0d 0d 48 10 73  65 6c 65 63 74 65 64 25  |ew%..H.selected%|
00001ae0  3d 2d 31 0d 0d 52 0e f2  69 6e 69 74 5f 6f 72 69  |=-1..R..init_ori|
00001af0  67 0d 0d 5c 2c e7 20 63  75 72 5f 6f 62 6a 25 3c  |g..\,. cur_obj%<|
00001b00  3e 2d 31 20 f2 65 6e 73  75 72 65 5f 76 69 73 69  |>-1 .ensure_visi|
00001b10  62 6c 65 28 63 75 72 5f  6f 62 6a 25 29 0d 0d 66  |ble(cur_obj%)..f|
00001b20  0d f2 69 6e 66 6f 5f 62  61 72 0d 0d 70 05 e1 0d  |..info_bar..p...|
00001b30  0d 7a 05 3a 0d 0d 84 1a  dd 20 f2 7a 6f 6f 6d 5f  |.z.:..... .zoom_|
00001b40  63 6c 69 63 6b 28 6d 78  25 2c 6d 79 25 29 0d 0d  |click(mx%,my%)..|
00001b50  8e 0a ea 20 70 6f 73 25  0d 0d 98 0e e7 20 6d 79  |... pos%..... my|
00001b60  25 3c 34 30 20 8c 0d 0d  a2 12 20 70 6f 73 25 3d  |%<40 ..... pos%=|
00001b70  6d 78 25 20 81 20 31 36  0d 0d ac 41 20 e7 20 70  |mx% . 16...A . p|
00001b80  6f 73 25 3d 30 20 80 20  7a 6f 6f 6d 25 3e 31 30  |os%=0 . zoom%>10|
00001b90  20 20 7a 6f 6f 6d 25 2d  3d 31 3a f2 69 6e 66 6f  |  zoom%-=1:.info|
00001ba0  5f 62 61 72 3a 76 69 65  77 5f 6e 65 65 64 73 5f  |_bar:view_needs_|
00001bb0  75 70 64 61 74 65 25 3d  b9 0d 0d b6 41 20 e7 20  |update%=....A . |
00001bc0  70 6f 73 25 3d 38 20 80  20 7a 6f 6f 6d 25 3c 31  |pos%=8 . zoom%<1|
00001bd0  30 30 20 7a 6f 6f 6d 25  2b 3d 31 3a f2 69 6e 66  |00 zoom%+=1:.inf|
00001be0  6f 5f 62 61 72 3a 76 69  65 77 5f 6e 65 65 64 73  |o_bar:view_needs|
00001bf0  5f 75 70 64 61 74 65 25  3d b9 0d 0d c0 05 cc 0d  |_update%=.......|
00001c00  0d ca 14 20 f2 6d 6f 64  65 5f 73 65 6c 65 63 74  |... .mode_select|
00001c10  28 33 29 0d 0d d4 05 cd  0d 0d de 05 e1 0d 0d e8  |(3).............|
00001c20  05 3a 0d 0d f2 1e dd 20  f2 70 6f 6c 79 5f 63 6c  |.:..... .poly_cl|
00001c30  69 63 6b 28 6d 78 25 2c  6d 79 25 2c 6d 62 25 29  |ick(mx%,my%,mb%)|
00001c40  0d 0d fc 19 e7 20 a4 70  61 6e 28 6d 78 25 2c 6d  |..... .pan(mx%,m|
00001c50  79 25 2c 6d 62 25 29 20  e1 0d 0e 06 26 e7 20 a4  |y%,mb%) ....&. .|
00001c60  63 68 65 63 6b 5f 66 6f  72 5f 63 6f 6c 6f 75 72  |check_for_colour|
00001c70  28 6d 78 25 2c 6d 79 25  2c 6d 62 25 29 20 e1 0d  |(mx%,my%,mb%) ..|
00001c80  0e 10 2a e7 20 a4 63 68  65 63 6b 5f 66 6f 72 5f  |..*. .check_for_|
00001c90  61 64 64 5f 76 65 72 74  65 78 28 6d 78 25 2c 6d  |add_vertex(mx%,m|
00001ca0  79 25 2c 6d 62 25 29 20  e1 0d 0e 1a 05 e1 0d 0e  |y%,mb%) ........|
00001cb0  24 05 3a 0d 0e 2e 28 dd  20 a4 63 68 65 63 6b 5f  |$.:...(. .check_|
00001cc0  66 6f 72 5f 61 64 64 5f  76 65 72 74 65 78 28 6d  |for_add_vertex(m|
00001cd0  78 25 2c 6d 79 25 2c 6d  62 25 29 0d 0e 38 12 ea  |x%,my%,mb%)..8..|
00001ce0  20 6f 6b 25 2c 69 25 2c  78 2c 79 2c 7a 0d 0e 42  | ok%,i%,x,y,z..B|
00001cf0  14 e7 20 6d 78 25 3e 36  36 2a 31 36 20 8c 20 3d  |.. mx%>66*16 . =|
00001d00  a3 0d 0e 4c 11 e7 20 6d  79 25 3c 34 30 20 8c 20  |...L.. my%<40 . |
00001d10  3d a3 0d 0e 56 09 6f 6b  25 3d a3 0d 0e 60 08 69  |=...V.ok%=...`.i|
00001d20  25 3d 31 0d 0e 6a 13 c8  95 20 69 25 3c 34 20 80  |%=1..j... i%<4 .|
00001d30  20 ac 20 6f 6b 25 0d 0e  74 2f 20 e7 20 6d 78 25  | . ok%..t/ . mx%|
00001d40  3e 3d 70 61 6e 65 6c 5f  78 30 25 28 69 25 29 20  |>=panel_x0%(i%) |
00001d50  80 20 6d 78 25 3c 70 61  6e 65 6c 5f 78 31 25 28  |. mx%<panel_x1%(|
00001d60  69 25 29 20 8c 0d 0e 7e  30 20 20 e7 20 6d 79 25  |i%) ...~0  . my%|
00001d70  3e 3d 70 61 6e 65 6c 5f  79 30 25 28 69 25 29 20  |>=panel_y0%(i%) |
00001d80  80 20 6d 79 25 3c 70 61  6e 65 6c 5f 79 31 25 28  |. my%<panel_y1%(|
00001d90  69 25 29 20 8c 0d 0e 88  18 20 20 20 e7 20 69 25  |i%) .....   . i%|
00001da0  3c 3e 63 75 72 5f 76 69  65 77 25 20 8c 0d 0e 92  |<>cur_view% ....|
00001db0  14 20 20 20 20 63 75 72  5f 76 69 65 77 25 3d 69  |.    cur_view%=i|
00001dc0  25 0d 0e 9c 1c 20 20 20  20 76 69 65 77 5f 6e 65  |%....    view_ne|
00001dd0  65 64 73 5f 75 70 64 61  74 65 25 3d b9 0d 0e a6  |eds_update%=....|
00001de0  08 20 20 20 cd 0d 0e b0  2a 20 20 20 6d 78 25 2d  |.   ....*   mx%-|
00001df0  3d 28 70 61 6e 65 6c 5f  78 30 25 28 69 25 29 2b  |=(panel_x0%(i%)+|
00001e00  70 61 6e 65 6c 5f 77 69  64 74 68 25 2f 32 29 0d  |panel_width%/2).|
00001e10  0e ba 2b 20 20 20 6d 79  25 2d 3d 28 70 61 6e 65  |..+   my%-=(pane|
00001e20  6c 5f 79 30 25 28 69 25  29 2b 70 61 6e 65 6c 5f  |l_y0%(i%)+panel_|
00001e30  68 65 69 67 68 74 25 2f  32 29 0d 0e c4 0f 20 20  |height%/2)....  |
00001e40  20 c8 8e 20 6d 62 25 20  ca 0d 0e ce 0c 20 20 20  | .. mb% .....   |
00001e50  20 c9 20 31 3a 0d 0e d8  16 20 20 20 20 20 f2 64  | . 1:....     .d|
00001e60  6f 6e 65 5f 70 6f 6c 79  67 6f 6e 0d 0e e2 0c 20  |one_polygon.... |
00001e70  20 20 20 c9 20 34 3a 0d  0e ec 17 20 20 20 20 20  |   . 4:....     |
00001e80  c8 8e 20 63 75 72 5f 76  69 65 77 25 20 ca 0d 0e  |.. cur_view% ...|
00001e90  f6 0e 20 20 20 20 20 20  c9 20 31 3a 0d 0f 00 36  |..      . 1:...6|
00001ea0  20 20 20 20 20 20 20 78  3d 6d 78 25 2a 73 63 61  |       x=mx%*sca|
00001eb0  6c 65 32 64 2a 28 31 30  2f 7a 6f 6f 6d 25 29 2d  |le2d*(10/zoom%)-|
00001ec0  6f 78 79 7a 25 28 63 75  72 5f 76 69 65 77 25 2c  |oxyz%(cur_view%,|
00001ed0  30 29 0d 0f 0a 36 20 20  20 20 20 20 20 79 3d 6d  |0)...6       y=m|
00001ee0  79 25 2a 73 63 61 6c 65  32 64 2a 28 31 30 2f 7a  |y%*scale2d*(10/z|
00001ef0  6f 6f 6d 25 29 2d 6f 78  79 7a 25 28 63 75 72 5f  |oom%)-oxyz%(cur_|
00001f00  76 69 65 77 25 2c 31 29  0d 0f 14 0e 20 20 20 20  |view%,1)....    |
00001f10  20 20 20 7a 3d 30 0d 0f  1e 0e 20 20 20 20 20 20  |   z=0....      |
00001f20  c9 20 32 3a 0d 0f 28 36  20 20 20 20 20 20 20 78  |. 2:..(6       x|
00001f30  3d 6d 78 25 2a 73 63 61  6c 65 32 64 2a 28 31 30  |=mx%*scale2d*(10|
00001f40  2f 7a 6f 6f 6d 25 29 2d  6f 78 79 7a 25 28 63 75  |/zoom%)-oxyz%(cu|
00001f50  72 5f 76 69 65 77 25 2c  30 29 0d 0f 32 0e 20 20  |r_view%,0)..2.  |
00001f60  20 20 20 20 20 79 3d 30  0d 0f 3c 36 20 20 20 20  |     y=0..<6    |
00001f70  20 20 20 7a 3d 6d 79 25  2a 73 63 61 6c 65 32 64  |   z=my%*scale2d|
00001f80  2a 28 31 30 2f 7a 6f 6f  6d 25 29 2d 6f 78 79 7a  |*(10/zoom%)-oxyz|
00001f90  25 28 63 75 72 5f 76 69  65 77 25 2c 31 29 0d 0f  |%(cur_view%,1)..|
00001fa0  46 0e 20 20 20 20 20 20  c9 20 33 3a 0d 0f 50 0e  |F.      . 3:..P.|
00001fb0  20 20 20 20 20 20 20 78  3d 30 0d 0f 5a 36 20 20  |       x=0..Z6  |
00001fc0  20 20 20 20 20 79 3d 6d  79 25 2a 73 63 61 6c 65  |     y=my%*scale|
00001fd0  32 64 2a 28 31 30 2f 7a  6f 6f 6d 25 29 2d 6f 78  |2d*(10/zoom%)-ox|
00001fe0  79 7a 25 28 63 75 72 5f  76 69 65 77 25 2c 31 29  |yz%(cur_view%,1)|
00001ff0  0d 0f 64 36 20 20 20 20  20 20 20 7a 3d 6d 78 25  |..d6       z=mx%|
00002000  2a 73 63 61 6c 65 32 64  2a 28 31 30 2f 7a 6f 6f  |*scale2d*(10/zoo|
00002010  6d 25 29 2d 6f 78 79 7a  25 28 63 75 72 5f 76 69  |m%)-oxyz%(cur_vi|
00002020  65 77 25 2c 30 29 0d 0f  6e 0a 20 20 20 20 20 cb  |ew%,0)..n.     .|
00002030  0d 0f 78 15 20 20 20 20  20 76 28 76 65 72 74 73  |..x.     v(verts|
00002040  2c 30 29 3d 78 0d 0f 82  15 20 20 20 20 20 76 28  |,0)=x....     v(|
00002050  76 65 72 74 73 2c 31 29  3d 79 0d 0f 8c 15 20 20  |verts,1)=y....  |
00002060  20 20 20 76 28 76 65 72  74 73 2c 32 29 3d 7a 0d  |   v(verts,2)=z.|
00002070  0f 96 11 20 20 20 20 20  76 65 72 74 73 2b 3d 31  |...     verts+=1|
00002080  0d 0f a0 27 20 20 20 20  20 e7 20 76 65 72 74 73  |...'     . verts|
00002090  3d 6d 61 78 5f 76 65 72  74 20 f2 64 6f 6e 65 5f  |=max_vert .done_|
000020a0  70 6f 6c 79 67 6f 6e 0d  0f aa 1d 20 20 20 20 20  |polygon....     |
000020b0  76 69 65 77 5f 6e 65 65  64 73 5f 75 70 64 61 74  |view_needs_updat|
000020c0  65 25 3d b9 0d 0f b4 08  20 20 20 cb 0d 0f be 0c  |e%=.....   .....|
000020d0  20 20 20 6f 6b 25 3d b9  0d 0f c8 07 20 20 cd 0d  |   ok%=.....  ..|
000020e0  0f d2 06 20 cd 0d 0f dc  0a 20 69 25 2b 3d 31 0d  |... ..... i%+=1.|
000020f0  0f e6 05 ce 0d 0f f0 08  3d 6f 6b 25 0d 0f fa 05  |........=ok%....|
00002100  3a 0d 10 04 13 dd 20 f2  64 6f 6e 65 5f 70 6f 6c  |:..... .done_pol|
00002110  79 67 6f 6e 0d 10 0e 1d  ea 20 6e 65 77 5f 73 75  |ygon..... new_su|
00002120  72 66 25 2c 6e 65 77 5f  73 75 62 25 2c 69 25 2c  |rf%,new_sub%,i%,|
00002130  61 0d 10 18 10 e7 20 76  65 72 74 73 3e 3d 33 20  |a..... verts>=3 |
00002140  8c 0d 10 22 34 20 c8 99  20 22 42 41 55 33 44 5f  |..."4 .. "BAU3D_|
00002150  4d 61 6c 6c 6f 63 22 2c  73 75 72 66 5f 72 65 71  |Malloc",surf_req|
00002160  2b 31 32 2a 76 65 72 74  73 20 b8 20 6e 65 77 5f  |+12*verts . new_|
00002170  73 75 72 66 25 0d 10 2c  1a 20 6e 65 77 5f 73 75  |surf%..,. new_su|
00002180  72 66 25 21 73 75 72 66  5f 74 79 70 65 3d 30 0d  |rf%!surf_type=0.|
00002190  10 36 43 20 6e 65 77 5f  73 75 72 66 25 21 73 75  |.6C new_surf%!su|
000021a0  72 66 5f 63 6f 6c 6f 75  72 3d 28 72 67 62 25 28  |rf_colour=(rgb%(|
000021b0  30 29 3c 3c 38 29 2b 28  72 67 62 25 28 31 29 3c  |0)<<8)+(rgb%(1)<|
000021c0  3c 31 36 29 2b 28 72 67  62 25 28 32 29 3c 3c 32  |<16)+(rgb%(2)<<2|
000021d0  34 29 0d 10 40 1b 20 6e  65 77 5f 73 75 72 66 25  |4)..@. new_surf%|
000021e0  21 73 75 72 66 5f 6e 3d  76 65 72 74 73 0d 10 4a  |!surf_n=verts..J|
000021f0  15 20 e3 20 69 25 3d 30  20 b8 20 76 65 72 74 73  |. . i%=0 . verts|
00002200  2d 31 0d 10 54 23 20 20  61 3d 6e 65 77 5f 73 75  |-1..T#  a=new_su|
00002210  72 66 25 2b 73 75 72 66  5f 63 6f 6f 72 64 73 2b  |rf%+surf_coords+|
00002220  31 32 2a 69 25 0d 10 5e  10 20 20 21 61 3d 76 28  |12*i%..^.  !a=v(|
00002230  69 25 2c 30 29 0d 10 68  11 20 20 61 21 34 3d 76  |i%,0)..h.  a!4=v|
00002240  28 69 25 2c 31 29 0d 10  72 11 20 20 61 21 38 3d  |(i%,1)..r.  a!8=|
00002250  76 28 69 25 2c 32 29 0d  10 7c 06 20 ed 0d 10 86  |v(i%,2)..|. ....|
00002260  2c 20 c8 99 20 22 42 41  55 33 44 5f 4d 61 6c 6c  |, .. "BAU3D_Mall|
00002270  6f 63 22 2c 73 75 62 6f  62 6a 5f 72 65 71 20 b8  |oc",subobj_req .|
00002280  20 6e 65 77 5f 73 75 62  25 0d 10 90 23 20 6e 65  | new_sub%...# ne|
00002290  77 5f 73 75 62 25 21 73  75 62 6f 62 6a 5f 66 6c  |w_sub%!subobj_fl|
000022a0  61 67 73 3d 62 69 74 5f  73 75 72 66 0d 10 9a 23  |ags=bit_surf...#|
000022b0  20 6e 65 77 5f 73 75 62  25 21 73 75 62 6f 62 6a  | new_sub%!subobj|
000022c0  5f 74 79 70 65 3d 6e 65  77 5f 73 75 72 66 25 0d  |_type=new_surf%.|
000022d0  10 a4 0f 20 e3 20 69 25  3d 30 20 b8 20 32 0d 10  |... . i%=0 . 2..|
000022e0  ae 25 20 20 6e 65 77 5f  73 75 62 25 21 28 73 75  |.%  new_sub%!(su|
000022f0  62 6f 62 6a 5f 6f 66 66  73 65 74 2b 34 2a 69 25  |bobj_offset+4*i%|
00002300  29 3d 30 0d 10 b8 24 20  20 6e 65 77 5f 73 75 62  |)=0...$  new_sub|
00002310  25 21 28 73 75 62 6f 62  6a 5f 61 6e 67 6c 65 2b  |%!(subobj_angle+|
00002320  34 2a 69 25 29 3d 30 0d  10 c2 06 20 ed 0d 10 cc  |4*i%)=0.... ....|
00002330  19 20 e7 20 21 28 a4 6f  2b 6f 62 6a 5f 6c 69 73  |. . !(.o+obj_lis|
00002340  74 29 3d 30 20 8c 0d 10  d6 1c 20 20 6e 65 77 5f  |t)=0 .....  new_|
00002350  73 75 62 25 21 73 75 62  6f 62 6a 5f 6e 65 78 74  |sub%!subobj_next|
00002360  3d 30 0d 10 e0 1d 20 20  21 28 a4 6f 2b 6f 62 6a  |=0....  !(.o+obj|
00002370  5f 6c 69 73 74 29 3d 6e  65 77 5f 73 75 62 25 0d  |_list)=new_sub%.|
00002380  10 ea 06 20 cc 0d 10 f4  16 20 20 61 3d 21 28 a4  |... .....  a=!(.|
00002390  6f 2b 6f 62 6a 5f 6c 69  73 74 29 0d 10 fe 19 20  |o+obj_list).... |
000023a0  20 c8 95 20 61 21 73 75  62 6f 62 6a 5f 6e 65 78  | .. a!subobj_nex|
000023b0  74 3c 3e 30 0d 11 08 16  20 20 20 61 3d 61 21 73  |t<>0....   a=a!s|
000023c0  75 62 6f 62 6a 5f 6e 65  78 74 0d 11 12 07 20 20  |ubobj_next....  |
000023d0  ce 0d 11 1c 1c 20 20 6e  65 77 5f 73 75 62 25 21  |.....  new_sub%!|
000023e0  73 75 62 6f 62 6a 5f 6e  65 78 74 3d 30 0d 11 26  |subobj_next=0..&|
000023f0  1c 20 20 61 21 73 75 62  6f 62 6a 5f 6e 65 78 74  |.  a!subobj_next|
00002400  3d 6e 65 77 5f 73 75 62  25 0d 11 30 06 20 cd 0d  |=new_sub%..0. ..|
00002410  11 3a 05 cd 0d 11 44 18  76 69 65 77 5f 6e 65 65  |.:....D.view_nee|
00002420  64 73 5f 75 70 64 61 74  65 25 3d b9 0d 11 4e 0b  |ds_update%=...N.|
00002430  76 65 72 74 73 3d 30 0d  11 58 05 e1 0d 11 62 05  |verts=0..X....b.|
00002440  3a 0d 11 6c 1e dd 20 f2  64 72 61 77 5f 63 6c 69  |:..l.. .draw_cli|
00002450  63 6b 28 6d 78 25 2c 6d  79 25 2c 6d 62 25 29 0d  |ck(mx%,my%,mb%).|
00002460  11 76 2f e7 20 a4 63 68  65 63 6b 5f 66 6f 72 5f  |.v/. .check_for_|
00002470  63 6c 69 63 6b 5f 6f 6e  5f 76 65 72 74 65 78 28  |click_on_vertex(|
00002480  6d 78 25 2c 6d 79 25 2c  6d 62 25 29 20 e1 0d 11  |mx%,my%,mb%) ...|
00002490  80 29 e7 20 a4 63 68 65  63 6b 5f 66 6f 72 5f 6e  |.). .check_for_n|
000024a0  61 6d 65 5f 65 64 69 74  28 6d 78 25 2c 6d 79 25  |ame_edit(mx%,my%|
000024b0  2c 6d 62 25 29 20 e1 0d  11 8a 26 e7 20 a4 63 68  |,mb%) ....&. .ch|
000024c0  65 63 6b 5f 66 6f 72 5f  63 6f 6c 6f 75 72 28 6d  |eck_for_colour(m|
000024d0  78 25 2c 6d 79 25 2c 6d  62 25 29 20 e1 0d 11 94  |x%,my%,mb%) ....|
000024e0  1e e7 20 a4 64 72 61 67  5f 6f 62 6a 28 6d 78 25  |.. .drag_obj(mx%|
000024f0  2c 6d 79 25 2c 6d 62 25  29 20 e1 0d 11 9e 1c e7  |,my%,mb%) ......|
00002500  20 a4 64 72 61 67 5f 76  28 6d 78 25 2c 6d 79 25  | .drag_v(mx%,my%|
00002510  2c 6d 62 25 29 20 e1 0d  11 a8 19 e7 20 a4 70 61  |,mb%) ...... .pa|
00002520  6e 28 6d 78 25 2c 6d 79  25 2c 6d 62 25 29 20 e1  |n(mx%,my%,mb%) .|
00002530  0d 11 b2 2a e7 20 a4 63  68 65 63 6b 5f 66 6f 72  |...*. .check_for|
00002540  5f 69 6e 73 65 72 74 5f  6f 62 6a 28 6d 78 25 2c  |_insert_obj(mx%,|
00002550  6d 79 25 2c 6d 62 25 29  20 e1 0d 11 bc 25 e7 20  |my%,mb%) ....%. |
00002560  6d 79 25 3c 34 30 20 f2  6f 66 66 73 65 74 5f 63  |my%<40 .offset_c|
00002570  6c 69 63 6b 28 6d 78 25  2c 6d 79 25 29 3a e1 0d  |lick(mx%,my%):..|
00002580  11 c6 2d e7 20 6d 78 25  3e 36 36 2a 31 36 20 f2  |..-. mx%>66*16 .|
00002590  6f 62 6a 6c 69 73 74 5f  63 6c 69 63 6b 28 6d 78  |objlist_click(mx|
000025a0  25 2c 6d 79 25 2c 6d 62  25 29 3a e1 0d 11 d0 12  |%,my%,mb%):.....|
000025b0  e7 20 72 65 70 65 61 74  69 6e 67 25 20 e1 0d 11  |. repeating% ...|
000025c0  da 14 e7 20 63 75 72 5f  76 69 65 77 25 3d 2d 31  |... cur_view%=-1|
000025d0  20 8c 0d 11 e4 1c 20 f2  74 72 79 5f 6e 65 77 5f  | ..... .try_new_|
000025e0  70 61 6e 65 6c 28 6d 78  25 2c 6d 79 25 29 0d 11  |panel(mx%,my%)..|
000025f0  ee 05 cc 0d 11 f8 72 20  e7 20 6d 78 25 3c 70 61  |......r . mx%<pa|
00002600  6e 65 6c 5f 78 30 25 28  63 75 72 5f 76 69 65 77  |nel_x0%(cur_view|
00002610  25 29 20 84 20 6d 78 25  3e 70 61 6e 65 6c 5f 78  |%) . mx%>panel_x|
00002620  31 25 28 63 75 72 5f 76  69 65 77 25 29 20 84 20  |1%(cur_view%) . |
00002630  6d 79 25 3c 70 61 6e 65  6c 5f 79 30 25 28 63 75  |my%<panel_y0%(cu|
00002640  72 5f 76 69 65 77 25 29  20 84 20 6d 79 25 3e 70  |r_view%) . my%>p|
00002650  61 6e 65 6c 5f 79 31 25  28 63 75 72 5f 76 69 65  |anel_y1%(cur_vie|
00002660  77 25 29 20 8c 0d 12 02  1d 20 20 f2 74 72 79 5f  |w%) .....  .try_|
00002670  6e 65 77 5f 70 61 6e 65  6c 28 6d 78 25 2c 6d 79  |new_panel(mx%,my|
00002680  25 29 0d 12 0c 06 20 cc  0d 12 16 2a 20 20 e7 20  |%).... ....*  . |
00002690  6d 62 25 3c 3e 32 20 f2  73 65 6c 65 63 74 5f 6f  |mb%<>2 .select_o|
000026a0  62 6a 65 63 74 28 6d 78  25 2c 6d 79 25 2c 6d 62  |bject(mx%,my%,mb|
000026b0  25 29 0d 12 20 06 20 cd  0d 12 2a 05 cd 0d 12 34  |%).. . ...*....4|
000026c0  05 e1 0d 12 3e 05 3a 0d  12 48 2d dd 20 a4 63 68  |....>.:..H-. .ch|
000026d0  65 63 6b 5f 66 6f 72 5f  63 6c 69 63 6b 5f 6f 6e  |eck_for_click_on|
000026e0  5f 76 65 72 74 65 78 28  6d 78 25 2c 6d 79 25 2c  |_vertex(mx%,my%,|
000026f0  6d 62 25 29 0d 12 52 1b  ea 20 69 25 2c 6f 6b 25  |mb%)..R.. i%,ok%|
00002700  2c 73 75 72 66 25 2c 6a  25 2c 78 25 2c 79 25 0d  |,surf%,j%,x%,y%.|
00002710  12 5c 1c f4 20 49 46 20  49 4e 4b 45 59 2d 31 20  |.\.. IF INKEY-1 |
00002720  54 48 45 4e 20 3d 46 41  4c 53 45 0d 12 66 1d e7  |THEN =FALSE..f..|
00002730  20 6d 79 25 3c 34 30 20  84 20 6d 78 25 3e 36 36  | my%<40 . mx%>66|
00002740  2a 31 36 20 8c 20 3d a3  0d 12 70 1a e7 20 ac 20  |*16 . =...p.. . |
00002750  a4 65 64 69 74 69 6e 67  5f 73 75 72 66 20 8c 20  |.editing_surf . |
00002760  3d a3 0d 12 7a 15 e7 20  72 65 70 65 61 74 69 6e  |=...z.. repeatin|
00002770  67 25 20 8c 20 3d a3 0d  12 84 25 e7 20 63 75 72  |g% . =....%. cur|
00002780  5f 6f 62 6a 25 3d 2d 31  20 84 20 73 65 6c 65 63  |_obj%=-1 . selec|
00002790  74 65 64 25 3d 2d 31 20  8c 20 3d a3 0d 12 8e 30  |ted%=-1 . =....0|
000027a0  e7 20 28 73 65 6c 65 63  74 65 64 25 21 73 75 62  |. (selected%!sub|
000027b0  6f 62 6a 5f 66 6c 61 67  73 20 80 20 62 69 74 5f  |obj_flags . bit_|
000027c0  73 75 72 66 29 3d 30 20  8c 20 3d a3 0d 12 98 1f  |surf)=0 . =.....|
000027d0  73 75 72 66 25 3d 73 65  6c 65 63 74 65 64 25 21  |surf%=selected%!|
000027e0  73 75 62 6f 62 6a 5f 74  79 70 65 0d 12 a2 09 6f  |subobj_type....o|
000027f0  6b 25 3d a3 0d 12 ac 08  69 25 3d 31 0d 12 b6 13  |k%=.....i%=1....|
00002800  c8 95 20 69 25 3c 34 20  80 20 ac 20 6f 6b 25 0d  |.. i%<4 . . ok%.|
00002810  12 c0 2f 20 e7 20 6d 78  25 3e 3d 70 61 6e 65 6c  |../ . mx%>=panel|
00002820  5f 78 30 25 28 69 25 29  20 80 20 6d 78 25 3c 70  |_x0%(i%) . mx%<p|
00002830  61 6e 65 6c 5f 78 31 25  28 69 25 29 20 8c 0d 12  |anel_x1%(i%) ...|
00002840  ca 30 20 20 e7 20 6d 79  25 3e 3d 70 61 6e 65 6c  |.0  . my%>=panel|
00002850  5f 79 30 25 28 69 25 29  20 80 20 6d 79 25 3c 70  |_y0%(i%) . my%<p|
00002860  61 6e 65 6c 5f 79 31 25  28 69 25 29 20 8c 0d 12  |anel_y1%(i%) ...|
00002870  d4 2c 20 20 20 78 25 3d  6d 78 25 2d 28 70 61 6e  |.,   x%=mx%-(pan|
00002880  65 6c 5f 78 30 25 28 69  25 29 2b 70 61 6e 65 6c  |el_x0%(i%)+panel|
00002890  5f 77 69 64 74 68 25 2f  32 29 0d 12 de 2d 20 20  |_width%/2)...-  |
000028a0  20 79 25 3d 6d 79 25 2d  28 70 61 6e 65 6c 5f 79  | y%=my%-(panel_y|
000028b0  30 25 28 69 25 29 2b 70  61 6e 65 6c 5f 68 65 69  |0%(i%)+panel_hei|
000028c0  67 68 74 25 2f 32 29 0d  12 e8 1e 20 20 20 e3 20  |ght%/2)....   . |
000028d0  6a 25 3d 30 20 b8 20 73  75 72 66 25 21 73 75 72  |j%=0 . surf%!sur|
000028e0  66 5f 6e 2d 31 0d 12 f2  1e 20 20 20 20 e7 20 94  |f_n-1....    . .|
000028f0  28 78 25 2d a4 78 28 69  25 2c 6a 25 29 29 3c 33  |(x%-.x(i%,j%))<3|
00002900  32 20 8c 0d 12 fc 1f 20  20 20 20 20 e7 20 94 28  |2 .....     . .(|
00002910  79 25 2d a4 79 28 69 25  2c 6a 25 29 29 3c 33 32  |y%-.y(i%,j%))<32|
00002920  20 8c 0d 13 06 0f 20 20  20 20 20 20 6f 6b 25 3d  | .....      ok%=|
00002930  b9 0d 13 10 14 20 20 20  20 20 20 76 65 72 74 65  |.....      verte|
00002940  78 25 3d 6a 25 0d 13 1a  1e 20 20 20 20 20 20 76  |x%=j%....      v|
00002950  69 65 77 5f 6e 65 65 64  73 5f 75 70 64 61 74 65  |iew_needs_update|
00002960  25 3d b9 0d 13 24 0a 20  20 20 20 20 cd 0d 13 2e  |%=...$.     ....|
00002970  09 20 20 20 20 cd 0d 13  38 08 20 20 20 ed 0d 13  |.    ...8.   ...|
00002980  42 07 20 20 cd 0d 13 4c  06 20 cd 0d 13 56 0a 20  |B.  ...L. ...V. |
00002990  69 25 2b 3d 31 0d 13 60  05 ce 0d 13 6a 1a e7 20  |i%+=1..`....j.. |
000029a0  ac 20 6f 6b 25 20 80 20  76 65 72 74 65 78 25 3c  |. ok% . vertex%<|
000029b0  3e 31 20 8c 0d 13 74 0f  20 76 65 72 74 65 78 25  |>1 ...t. vertex%|
000029c0  3d 2d 31 0d 13 7e 0a 20  6f 6b 25 3d b9 0d 13 88  |=-1..~. ok%=....|
000029d0  19 20 76 69 65 77 5f 6e  65 65 64 73 5f 75 70 64  |. view_needs_upd|
000029e0  61 74 65 25 3d b9 0d 13  92 1c 20 f2 74 72 79 5f  |ate%=..... .try_|
000029f0  6e 65 77 5f 70 61 6e 65  6c 28 6d 78 25 2c 6d 79  |new_panel(mx%,my|
00002a00  25 29 0d 13 9c 05 cd 0d  13 a6 0d f2 69 6e 66 6f  |%)..........info|
00002a10  5f 62 61 72 0d 13 b0 08  3d 6f 6b 25 0d 13 ba 05  |_bar....=ok%....|
00002a20  3a 0d 13 c4 28 dd 20 a4  63 68 65 63 6b 5f 66 6f  |:...(. .check_fo|
00002a30  72 5f 69 6e 73 65 72 74  5f 6f 62 6a 28 6d 78 25  |r_insert_obj(mx%|
00002a40  2c 6d 79 25 2c 6d 62 25  29 0d 13 ce 30 ea 20 78  |,my%,mb%)...0. x|
00002a50  25 2c 79 25 2c 62 25 2c  6f 62 6a 5f 74 6f 5f 64  |%,y%,b%,obj_to_d|
00002a60  72 61 67 25 2c 78 32 25  2c 79 32 25 2c 64 72 61  |rag%,x2%,y2%,dra|
00002a70  67 24 2c 6f 6b 25 2c 69  25 0d 13 d8 07 ea 20 85  |g$,ok%,i%..... .|
00002a80  0d 13 e2 26 ee 20 85 20  ea 20 f7 20 85 3a f2 65  |...&. . . . .:.e|
00002a90  72 72 5f 62 61 72 28 b9  29 3a f2 69 6e 66 6f 5f  |rr_bar(.):.info_|
00002aa0  62 61 72 3a 3d a3 0d 13  ec 1c e7 20 a4 65 64 69  |bar:=...... .edi|
00002ab0  74 69 6e 67 5f 73 75 72  66 20 8c 20 f7 20 85 3a  |ting_surf . . .:|
00002ac0  3d a3 0d 13 f6 2f e7 20  ac 20 28 28 6d 62 25 3d  |=..../. . ((mb%=|
00002ad0  34 20 84 20 6d 62 25 3d  31 29 20 80 20 72 65 70  |4 . mb%=1) . rep|
00002ae0  65 61 74 69 6e 67 25 29  20 8c 20 f7 20 85 3a 3d  |eating%) . . .:=|
00002af0  a3 0d 14 00 18 e7 20 6d  78 25 3c 36 36 2a 31 36  |...... mx%<66*16|
00002b00  20 8c 20 f7 20 85 3a 3d  a3 0d 14 0a 14 79 25 3d  | . . .:=.....y%=|
00002b10  33 31 2d 28 6d 79 25 20  81 20 33 32 29 0d 14 14  |31-(my% . 32)...|
00002b20  1b e7 20 79 25 3c 34 20  84 20 79 25 3e 32 38 20  |.. y%<4 . y%>28 |
00002b30  8c 20 f7 20 85 3a 3d a3  0d 14 1e 1f 6f 62 6a 5f  |. . .:=.....obj_|
00002b40  74 6f 5f 64 72 61 67 25  3d 6f 62 6a 5f 66 69 72  |to_drag%=obj_fir|
00002b50  73 74 2b 79 25 2d 34 0d  14 28 35 e7 20 6f 62 6a  |st+y%-4..(5. obj|
00002b60  5f 74 6f 5f 64 72 61 67  25 3c 30 20 84 20 6f 62  |_to_drag%<0 . ob|
00002b70  6a 5f 74 6f 5f 64 72 61  67 25 3e 3d 6f 62 6a 65  |j_to_drag%>=obje|
00002b80  63 74 73 20 8c 20 f7 20  85 3a 3d a3 0d 14 32 37  |cts . . .:=...27|
00002b90  64 72 61 67 24 3d a4 67  65 74 5f 73 74 72 69 6e  |drag$=.get_strin|
00002ba0  67 28 21 28 6f 62 6a 21  28 34 2a 6f 62 6a 5f 74  |g(!(obj!(4*obj_t|
00002bb0  6f 5f 64 72 61 67 25 29  2b 6f 62 6a 5f 6e 61 6d  |o_drag%)+obj_nam|
00002bc0  65 29 29 0d 14 3c 0f c8  97 20 78 25 2c 79 25 2c  |e))..<... x%,y%,|
00002bd0  62 25 0d 14 46 07 ef 20  35 0d 14 50 11 e6 20 34  |b%..F.. 5..P.. 4|
00002be0  2c 36 33 20 c8 9c 20 31  39 32 0d 14 5a 0e f2 73  |,63 .. 192..Z..s|
00002bf0  68 6f 77 5f 64 72 61 67  0d 14 64 05 f5 0d 14 6e  |how_drag..d....n|
00002c00  12 20 c8 97 20 78 32 25  2c 79 32 25 2c 62 25 0d  |. .. x2%,y2%,b%.|
00002c10  14 78 1a 20 e7 20 78 32  25 3c 3e 78 25 20 84 20  |.x. . x2%<>x% . |
00002c20  79 32 25 3c 3e 79 25 20  8c 0d 14 82 10 20 20 f2  |y2%<>y% .....  .|
00002c30  73 68 6f 77 5f 64 72 61  67 0d 14 8c 0c 20 20 78  |show_drag....  x|
00002c40  25 3d 78 32 25 0d 14 96  0c 20 20 79 25 3d 79 32  |%=x2%....  y%=y2|
00002c50  25 0d 14 a0 10 20 20 f2  73 68 6f 77 5f 64 72 61  |%....  .show_dra|
00002c60  67 0d 14 aa 06 20 cd 0d  14 b4 0a fd 20 62 25 3d  |g.... ...... b%=|
00002c70  30 0d 14 be 0e f2 73 68  6f 77 5f 64 72 61 67 0d  |0.....show_drag.|
00002c80  14 c8 07 ef 20 34 0d 14  d2 05 87 0d 14 dc 62 e7  |.... 4........b.|
00002c90  20 a4 63 68 65 63 6b 5f  66 6f 72 5f 73 65 6c 66  | .check_for_self|
00002ca0  5f 72 65 66 28 6f 62 6a  21 28 34 2a 6f 62 6a 5f  |_ref(obj!(4*obj_|
00002cb0  74 6f 5f 64 72 61 67 25  29 2c 6f 62 6a 21 28 34  |to_drag%),obj!(4|
00002cc0  2a 63 75 72 5f 6f 62 6a  25 29 29 20 8c 20 85 20  |*cur_obj%)) . . |
00002cd0  39 39 39 39 2c 22 49 6c  6c 65 67 61 6c 20 73 65  |9999,"Illegal se|
00002ce0  6c 66 2d 72 65 66 65 72  65 6e 63 65 22 0d 14 e6  |lf-reference"...|
00002cf0  09 6f 6b 25 3d a3 0d 14  f0 0e e3 20 69 25 3d 31  |.ok%=...... i%=1|
00002d00  20 b8 20 33 0d 14 fa 54  20 e7 20 78 25 3e 3d 70  | . 3...T . x%>=p|
00002d10  61 6e 65 6c 5f 78 30 25  28 69 25 29 20 80 20 78  |anel_x0%(i%) . x|
00002d20  25 3c 70 61 6e 65 6c 5f  78 31 25 28 69 25 29 20  |%<panel_x1%(i%) |
00002d30  80 20 79 25 3e 3d 70 61  6e 65 6c 5f 79 30 25 28  |. y%>=panel_y0%(|
00002d40  69 25 29 20 80 20 79 25  3c 70 61 6e 65 6c 5f 79  |i%) . y%<panel_y|
00002d50  31 25 28 69 25 29 20 8c  0d 15 04 0b 20 20 6f 6b  |1%(i%) .....  ok|
00002d60  25 3d b9 0d 15 0e 2b 20  20 f2 69 6e 73 65 72 74  |%=....+  .insert|
00002d70  5f 61 6e 5f 6f 62 6a 28  6f 62 6a 5f 74 6f 5f 64  |_an_obj(obj_to_d|
00002d80  72 61 67 25 2c 69 25 2c  78 25 2c 79 25 29 0d 15  |rag%,i%,x%,y%)..|
00002d90  18 0a 20 20 69 25 3d 33  0d 15 22 06 20 cd 0d 15  |..  i%=3..". ...|
00002da0  2c 05 ed 0d 15 36 07 f7  20 85 0d 15 40 08 3d 6f  |,....6.. ...@.=o|
00002db0  6b 25 0d 15 4a 05 3a 0d  15 54 22 dd 20 f2 69 6e  |k%..J.:..T". .in|
00002dc0  73 65 72 74 5f 61 6e 5f  6f 62 6a 28 6f 2c 70 25  |sert_an_obj(o,p%|
00002dd0  2c 6d 78 25 2c 6d 79 25  29 0d 15 5e 0b ea 20 6e  |,mx%,my%)..^.. n|
00002de0  65 77 2c 61 0d 15 68 15  e7 20 63 75 72 5f 6f 62  |ew,a..h.. cur_ob|
00002df0  6a 25 3d 2d 31 20 8c 20  e1 0d 15 72 26 c8 99 20  |j%=-1 . ...r&.. |
00002e00  22 42 41 55 33 44 5f 4d  61 6c 6c 6f 63 22 2c 73  |"BAU3D_Malloc",s|
00002e10  75 62 6f 62 6a 5f 72 65  71 20 b8 20 6e 65 77 0d  |ubobj_req . new.|
00002e20  15 7c 16 61 3d 6f 62 6a  21 28 34 2a 63 75 72 5f  |.|.a=obj!(4*cur_|
00002e30  6f 62 6a 25 29 0d 15 86  1e 6e 65 77 21 73 75 62  |obj%)....new!sub|
00002e40  6f 62 6a 5f 6e 65 78 74  3d 61 21 6f 62 6a 5f 6c  |obj_next=a!obj_l|
00002e50  69 73 74 0d 15 90 12 61  21 6f 62 6a 5f 6c 69 73  |ist....a!obj_lis|
00002e60  74 3d 6e 65 77 0d 15 9a  1a 6e 65 77 21 28 73 75  |t=new....new!(su|
00002e70  62 6f 62 6a 5f 61 6e 67  6c 65 2b 30 29 3d 30 0d  |bobj_angle+0)=0.|
00002e80  15 a4 1a 6e 65 77 21 28  73 75 62 6f 62 6a 5f 61  |...new!(subobj_a|
00002e90  6e 67 6c 65 2b 34 29 3d  30 0d 15 ae 1a 6e 65 77  |ngle+4)=0....new|
00002ea0  21 28 73 75 62 6f 62 6a  5f 61 6e 67 6c 65 2b 38  |!(subobj_angle+8|
00002eb0  29 3d 30 0d 15 b8 27 6d  78 25 2d 3d 28 70 61 6e  |)=0...'mx%-=(pan|
00002ec0  65 6c 5f 78 30 25 28 70  25 29 2b 70 61 6e 65 6c  |el_x0%(p%)+panel|
00002ed0  5f 77 69 64 74 68 25 2f  32 29 0d 15 c2 28 6d 79  |_width%/2)...(my|
00002ee0  25 2d 3d 28 70 61 6e 65  6c 5f 79 30 25 28 70 25  |%-=(panel_y0%(p%|
00002ef0  29 2b 70 61 6e 65 6c 5f  68 65 69 67 68 74 25 2f  |)+panel_height%/|
00002f00  32 29 0d 15 cc 0b c8 8e  20 70 25 20 ca 0d 15 d6  |2)...... p% ....|
00002f10  09 20 c9 20 31 3a 0d 15  e0 3e 20 20 6e 65 77 21  |. . 1:...>  new!|
00002f20  28 73 75 62 6f 62 6a 5f  6f 66 66 73 65 74 2b 30  |(subobj_offset+0|
00002f30  29 3d 6d 78 25 2a 73 63  61 6c 65 32 64 2a 28 31  |)=mx%*scale2d*(1|
00002f40  30 2f 7a 6f 6f 6d 25 29  2d 6f 78 79 7a 25 28 70  |0/zoom%)-oxyz%(p|
00002f50  25 2c 30 29 0d 15 ea 3e  20 20 6e 65 77 21 28 73  |%,0)...>  new!(s|
00002f60  75 62 6f 62 6a 5f 6f 66  66 73 65 74 2b 34 29 3d  |ubobj_offset+4)=|
00002f70  6d 79 25 2a 73 63 61 6c  65 32 64 2a 28 31 30 2f  |my%*scale2d*(10/|
00002f80  7a 6f 6f 6d 25 29 2d 6f  78 79 7a 25 28 70 25 2c  |zoom%)-oxyz%(p%,|
00002f90  31 29 0d 15 f4 1d 20 20  6e 65 77 21 28 73 75 62  |1)....  new!(sub|
00002fa0  6f 62 6a 5f 6f 66 66 73  65 74 2b 38 29 3d 30 0d  |obj_offset+8)=0.|
00002fb0  15 fe 09 20 c9 20 32 3a  0d 16 08 3e 20 20 6e 65  |... . 2:...>  ne|
00002fc0  77 21 28 73 75 62 6f 62  6a 5f 6f 66 66 73 65 74  |w!(subobj_offset|
00002fd0  2b 30 29 3d 6d 78 25 2a  73 63 61 6c 65 32 64 2a  |+0)=mx%*scale2d*|
00002fe0  28 31 30 2f 7a 6f 6f 6d  25 29 2d 6f 78 79 7a 25  |(10/zoom%)-oxyz%|
00002ff0  28 70 25 2c 30 29 0d 16  12 1d 20 20 6e 65 77 21  |(p%,0)....  new!|
00003000  28 73 75 62 6f 62 6a 5f  6f 66 66 73 65 74 2b 34  |(subobj_offset+4|
00003010  29 3d 30 0d 16 1c 3e 20  20 6e 65 77 21 28 73 75  |)=0...>  new!(su|
00003020  62 6f 62 6a 5f 6f 66 66  73 65 74 2b 38 29 3d 6d  |bobj_offset+8)=m|
00003030  79 25 2a 73 63 61 6c 65  32 64 2a 28 31 30 2f 7a  |y%*scale2d*(10/z|
00003040  6f 6f 6d 25 29 2d 6f 78  79 7a 25 28 70 25 2c 31  |oom%)-oxyz%(p%,1|
00003050  29 0d 16 26 09 20 c9 20  33 3a 0d 16 30 1d 20 20  |)..&. . 3:..0.  |
00003060  6e 65 77 21 28 73 75 62  6f 62 6a 5f 6f 66 66 73  |new!(subobj_offs|
00003070  65 74 2b 30 29 3d 30 0d  16 3a 3e 20 20 6e 65 77  |et+0)=0..:>  new|
00003080  21 28 73 75 62 6f 62 6a  5f 6f 66 66 73 65 74 2b  |!(subobj_offset+|
00003090  34 29 3d 6d 79 25 2a 73  63 61 6c 65 32 64 2a 28  |4)=my%*scale2d*(|
000030a0  31 30 2f 7a 6f 6f 6d 25  29 2d 6f 78 79 7a 25 28  |10/zoom%)-oxyz%(|
000030b0  70 25 2c 31 29 0d 16 44  3e 20 20 6e 65 77 21 28  |p%,1)..D>  new!(|
000030c0  73 75 62 6f 62 6a 5f 6f  66 66 73 65 74 2b 38 29  |subobj_offset+8)|
000030d0  3d 6d 78 25 2a 73 63 61  6c 65 32 64 2a 28 31 30  |=mx%*scale2d*(10|
000030e0  2f 7a 6f 6f 6d 25 29 2d  6f 78 79 7a 25 28 70 25  |/zoom%)-oxyz%(p%|
000030f0  2c 30 29 0d 16 4e 05 7f  0d 16 58 1c 20 6e 65 77  |,0)..N....X. new|
00003100  21 28 73 75 62 6f 62 6a  5f 6f 66 66 73 65 74 2b  |!(subobj_offset+|
00003110  30 29 3d 30 0d 16 62 1c  20 6e 65 77 21 28 73 75  |0)=0..b. new!(su|
00003120  62 6f 62 6a 5f 6f 66 66  73 65 74 2b 34 29 3d 30  |bobj_offset+4)=0|
00003130  0d 16 6c 1c 20 6e 65 77  21 28 73 75 62 6f 62 6a  |..l. new!(subobj|
00003140  5f 6f 66 66 73 65 74 2b  38 29 3d 30 0d 16 76 05  |_offset+8)=0..v.|
00003150  cb 0d 16 80 1d 6e 65 77  21 73 75 62 6f 62 6a 5f  |.....new!subobj_|
00003160  74 79 70 65 3d 6f 62 6a  21 28 34 2a 6f 29 0d 16  |type=obj!(4*o)..|
00003170  8a 16 6e 65 77 21 73 75  62 6f 62 6a 5f 66 6c 61  |..new!subobj_fla|
00003180  67 73 3d 30 0d 16 94 2a  c8 99 20 22 42 41 55 33  |gs=0...*.. "BAU3|
00003190  44 5f 43 61 6c 63 42 6f  75 6e 64 73 22 2c 6f 62  |D_CalcBounds",ob|
000031a0  6a 21 28 34 2a 63 75 72  5f 6f 62 6a 25 29 0d 16  |j!(4*cur_obj%)..|
000031b0  9e 18 76 69 65 77 5f 6e  65 65 64 73 5f 75 70 64  |..view_needs_upd|
000031c0  61 74 65 25 3d b9 0d 16  a8 05 e1 0d 16 b2 05 3a  |ate%=..........:|
000031d0  0d 16 bc 10 dd 20 f2 73  68 6f 77 5f 64 72 61 67  |..... .show_drag|
000031e0  0d 16 c6 06 c8 96 0d 16  d0 18 ec 20 78 25 2d 38  |........... x%-8|
000031f0  2a a9 28 64 72 61 67 24  29 2c 79 25 2b 38 0d 16  |*.(drag$),y%+8..|
00003200  da 0c f1 3b 64 72 61 67  24 3b 0d 16 e4 05 e1 0d  |...;drag$;......|
00003210  16 ee 05 3a 0d 16 f8 27  dd 20 a4 63 68 65 63 6b  |...:...'. .check|
00003220  5f 66 6f 72 5f 6e 61 6d  65 5f 65 64 69 74 28 6d  |_for_name_edit(m|
00003230  78 25 2c 6d 79 25 2c 6d  62 25 29 0d 17 02 11 ea  |x%,my%,mb%).....|
00003240  20 77 61 73 24 2c 6f 2c  6e 61 6d 65 0d 17 0c 07  | was$,o,name....|
00003250  ea 20 85 0d 17 16 28 ee  20 85 20 ea 20 f7 20 85  |. ....(. . . . .|
00003260  3a f2 65 72 72 5f 62 61  72 28 b9 29 3a f2 69 6e  |:.err_bar(.):.in|
00003270  66 6f 5f 62 61 72 3a 87  3a 3d b9 0d 17 20 1b e7  |fo_bar:.:=... ..|
00003280  20 63 75 72 5f 6d 6f 64  65 25 3c 3e 33 20 8c 20  | cur_mode%<>3 . |
00003290  f7 20 85 3a 3d a3 0d 17  2a 1a e7 20 63 75 72 5f  |. .:=...*.. cur_|
000032a0  6f 62 6a 25 3d 2d 31 20  8c 20 f7 20 85 3a 3d a3  |obj%=-1 . . .:=.|
000032b0  0d 17 34 16 6f 3d 6f 62  6a 21 28 34 2a 63 75 72  |..4.o=obj!(4*cur|
000032c0  5f 6f 62 6a 25 29 0d 17  3e 2c e7 20 6d 79 25 3c  |_obj%)..>,. my%<|
000032d0  31 30 32 34 2d 33 2a 33  32 20 84 20 6d 79 25 3e  |1024-3*32 . my%>|
000032e0  31 30 32 34 2d 32 2a 33  32 20 8c 20 f7 20 85 3a  |1024-2*32 . . .:|
000032f0  3d a3 0d 17 48 18 e7 20  6d 78 25 3e 36 30 2a 31  |=...H.. mx%>60*1|
00003300  36 20 8c 20 f7 20 85 3a  3d a3 0d 17 52 39 e7 20  |6 . . .:=...R9. |
00003310  6f 21 6f 62 6a 5f 6e 61  6d 65 3e 30 20 77 61 73  |o!obj_name>0 was|
00003320  24 3d a4 67 65 74 5f 73  74 72 69 6e 67 28 6f 21  |$=.get_string(o!|
00003330  6f 62 6a 5f 6e 61 6d 65  29 20 8b 20 77 61 73 24  |obj_name) . was$|
00003340  3d 22 22 0d 17 5c 05 ee  0d 17 66 0e f1 8a 30 2c  |=""..\....f...0,|
00003350  32 29 89 36 30 3b 0d 17  70 17 f1 8a 30 2c 32 29  |2).60;..p...0,2)|
00003360  22 4e 65 77 20 6e 61 6d  65 3a 20 22 3b 0d 17 7a  |"New name: ";..z|
00003370  0a 2a 46 58 20 31 35 0d  17 84 0e f2 69 6e 73 28  |.*FX 15.....ins(|
00003380  77 61 73 24 29 0d 17 8e  0b e8 22 22 6e 65 77 24  |was$).....""new$|
00003390  0d 17 98 21 6e 65 77 24  3d a4 6c 63 5f 61 6e 64  |...!new$=.lc_and|
000033a0  5f 75 73 28 a4 73 74 72  69 70 28 6e 65 77 24 29  |_us(.strip(new$)|
000033b0  29 0d 17 a2 10 e7 20 6e  65 77 24 3c 3e 22 22 20  |)..... new$<>"" |
000033c0  8c 0d 17 ac 27 20 c8 99  20 22 42 41 55 33 44 5f  |....' .. "BAU3D_|
000033d0  4d 61 6c 6c 6f 63 22 2c  a9 28 6e 65 77 24 29 2b  |Malloc",.(new$)+|
000033e0  32 20 b8 20 6e 61 6d 65  0d 17 b6 12 20 24 6e 61  |2 . name.... $na|
000033f0  6d 65 3d 6e 65 77 24 2b  bd 30 0d 17 c0 1f 20 c8  |me=new$+.0.... .|
00003400  99 20 22 42 41 55 33 44  5f 46 72 65 65 22 2c 6f  |. "BAU3D_Free",o|
00003410  21 6f 62 6a 5f 6e 61 6d  65 0d 17 ca 14 20 6f 21  |!obj_name.... o!|
00003420  6f 62 6a 5f 6e 61 6d 65  3d 6e 61 6d 65 0d 17 d4  |obj_name=name...|
00003430  0e 20 f2 69 6e 66 6f 5f  62 61 72 0d 17 de 12 20  |. .info_bar.... |
00003440  f2 6c 69 73 74 5f 6f 62  6a 65 63 74 73 0d 17 e8  |.list_objects...|
00003450  05 cd 0d 17 f2 05 87 0d  17 fc 07 f7 20 85 0d 18  |............ ...|
00003460  06 06 3d b9 0d 18 10 05  3a 0d 18 1a 24 dd 20 a4  |..=.....:...$. .|
00003470  63 68 65 63 6b 5f 66 6f  72 5f 63 6f 6c 6f 75 72  |check_for_colour|
00003480  28 6d 78 25 2c 6d 79 25  2c 6d 62 25 29 0d 18 24  |(mx%,my%,mb%)..$|
00003490  17 ea 20 69 25 2c 6f 6b  25 2c 63 6f 6c 25 2c 74  |.. i%,ok%,col%,t|
000034a0  69 6e 74 25 0d 18 2e 2a  e7 20 ac 20 28 a4 65 64  |int%...*. . (.ed|
000034b0  69 74 69 6e 67 5f 73 75  72 66 20 84 20 63 75 72  |iting_surf . cur|
000034c0  5f 6d 6f 64 65 25 3d 34  29 20 8c 20 3d a3 0d 18  |_mode%=4) . =...|
000034d0  38 14 e7 20 6d 78 25 3c  36 34 2a 31 36 20 8c 20  |8.. mx%<64*16 . |
000034e0  3d a3 0d 18 42 09 6f 6b  25 3d a3 0d 18 4c 41 e7  |=...B.ok%=...LA.|
000034f0  20 6d 78 25 3e 3d 36 34  2a 31 36 20 80 20 6d 78  | mx%>=64*16 . mx|
00003500  25 3c 36 34 2a 31 36 2b  31 36 2a 31 36 20 80 20  |%<64*16+16*16 . |
00003510  6d 79 25 3e 3d 32 2a 33  32 20 80 20 6d 79 25 3c  |my%>=2*32 . my%<|
00003520  32 2a 33 32 2b 31 36 2a  33 32 20 8c 0d 18 56 0a  |2*32+16*32 ...V.|
00003530  20 6f 6b 25 3d b9 0d 18  60 13 20 63 6f 6c 25 3d  | ok%=...`. col%=|
00003540  b0 6d 78 25 2c 6d 79 25  29 0d 18 6a 16 20 74 69  |.mx%,my%)..j. ti|
00003550  6e 74 25 3d c8 9c 28 6d  78 25 2c 6d 79 25 29 0d  |nt%=..(mx%,my%).|
00003560  18 74 0f 20 e3 20 69 25  3d 30 20 b8 20 32 0d 18  |.t. . i%=0 . 2..|
00003570  7e 35 20 20 72 67 62 25  28 69 25 29 3d 28 28 28  |~5  rgb%(i%)=(((|
00003580  63 6f 6c 25 3e 3e 28 69  25 2a 32 29 29 20 80 20  |col%>>(i%*2)) . |
00003590  33 29 3c 3c 36 29 20 84  20 28 74 69 6e 74 25 3e  |3)<<6) . (tint%>|
000035a0  3e 32 29 0d 18 88 06 20  ed 0d 18 92 15 20 f2 73  |>2).... ..... .s|
000035b0  68 6f 77 5f 63 6f 6c 6f  75 72 5f 62 61 72 0d 18  |how_colour_bar..|
000035c0  9c 05 cc 0d 18 a6 29 20  e7 20 6d 79 25 3e 3d 32  |......) . my%>=2|
000035d0  30 2a 33 32 2d 31 36 20  80 20 6d 79 25 3c 32 30  |0*32-16 . my%<20|
000035e0  2a 33 32 2b 32 35 36 2b  31 36 20 8c 0d 18 b0 10  |*32+256+16 .....|
000035f0  20 20 e3 20 69 25 3d 30  20 b8 20 32 0d 18 ba 31  |  . i%=0 . 2...1|
00003600  20 20 20 e7 20 6d 78 25  3e 3d 37 32 2a 31 36 2b  |   . mx%>=72*16+|
00003610  33 32 2a 69 25 20 80 20  6d 78 25 3c 3d 37 32 2a  |32*i% . mx%<=72*|
00003620  31 36 2b 33 32 2a 69 25  2b 31 36 20 8c 0d 18 c4  |16+32*i%+16 ....|
00003630  1a 20 20 20 20 72 67 62  25 28 69 25 29 3d 6d 79  |.    rgb%(i%)=my|
00003640  25 2d 32 30 2a 33 32 0d  18 ce 3d 20 20 20 20 e7  |%-20*32...=    .|
00003650  20 72 67 62 25 28 69 25  29 3c 30 20 72 67 62 25  | rgb%(i%)<0 rgb%|
00003660  28 69 25 29 3d 30 20 8b  20 e7 20 72 67 62 25 28  |(i%)=0 . . rgb%(|
00003670  69 25 29 3e 32 35 35 20  72 67 62 25 28 69 25 29  |i%)>255 rgb%(i%)|
00003680  3d 32 35 35 0d 18 d8 0d  20 20 20 20 6f 6b 25 3d  |=255....    ok%=|
00003690  b9 0d 18 e2 18 20 20 20  20 f2 73 68 6f 77 5f 63  |.....    .show_c|
000036a0  6f 6c 6f 75 72 5f 62 61  72 0d 18 ec 08 20 20 20  |olour_bar....   |
000036b0  cd 0d 18 f6 07 20 20 ed  0d 19 00 06 20 cd 0d 19  |.....  ..... ...|
000036c0  0a 05 cd 0d 19 14 0b e7  20 6f 6b 25 20 8c 0d 19  |........ ok% ...|
000036d0  1e 16 20 e7 20 a4 65 64  69 74 69 6e 67 5f 73 75  |.. . .editing_su|
000036e0  72 66 20 8c 0d 19 28 2f  20 20 e7 20 28 73 65 6c  |rf ...(/  . (sel|
000036f0  65 63 74 65 64 25 21 73  75 62 6f 62 6a 5f 66 6c  |ected%!subobj_fl|
00003700  61 67 73 20 80 20 62 69  74 5f 73 75 72 66 29 3e  |ags . bit_surf)>|
00003710  30 20 8c 0d 19 32 54 20  20 20 21 28 73 65 6c 65  |0 ...2T   !(sele|
00003720  63 74 65 64 25 21 73 75  62 6f 62 6a 5f 74 79 70  |cted%!subobj_typ|
00003730  65 2b 73 75 72 66 5f 63  6f 6c 6f 75 72 29 3d 28  |e+surf_colour)=(|
00003740  72 67 62 25 28 30 29 3c  3c 38 29 2b 28 72 67 62  |rgb%(0)<<8)+(rgb|
00003750  25 28 31 29 3c 3c 31 36  29 2b 28 72 67 62 25 28  |%(1)<<16)+(rgb%(|
00003760  32 29 3c 3c 32 34 29 0d  19 3c 1b 20 20 20 76 69  |2)<<24)..<.   vi|
00003770  65 77 5f 6e 65 65 64 73  5f 75 70 64 61 74 65 25  |ew_needs_update%|
00003780  3d b9 0d 19 46 07 20 20  cd 0d 19 50 06 20 cd 0d  |=...F.  ...P. ..|
00003790  19 5a 05 cd 0d 19 64 08  3d 6f 6b 25 0d 19 6e 05  |.Z....d.=ok%..n.|
000037a0  3a 0d 19 78 18 dd 20 f2  65 72 72 5f 62 61 72 28  |:..x.. .err_bar(|
000037b0  63 61 6e 5f 65 73 63 25  29 0d 19 82 0a ea 20 77  |can_esc%)..... w|
000037c0  61 69 74 0d 19 8c 17 e7  20 63 61 6e 5f 65 73 63  |ait..... can_esc|
000037d0  25 20 80 20 9f 3d 31 37  20 e1 0d 19 96 09 fb 20  |% . .=17 ...... |
000037e0  25 31 31 0d 19 a0 0f f1  8a 30 2c 33 31 29 89 37  |%11......0,31).7|
000037f0  39 3b 0d 19 aa 0f f1 8a  30 2c 33 31 29 3b f6 24  |9;......0,31);.$|
00003800  3b 0d 19 b4 1e e7 20 9f  3c 3e 39 39 39 39 20 f1  |;..... .<>9999 .|
00003810  22 27 20 61 74 20 6c 69  6e 65 20 22 3b 9e 3b 0d  |"' at line ";.;.|
00003820  19 be 16 f1 22 20 2d 20  70 72 65 73 73 20 61 20  |...." - press a |
00003830  6b 65 79 22 3b 0d 19 c8  08 ef 20 32 30 0d 19 d2  |key";..... 20...|
00003840  0a 2a 46 58 20 31 35 0d  19 dc 0a 77 61 69 74 3d  |.*FX 15....wait=|
00003850  a5 0d 19 e6 05 e1 0d 19  f0 05 3a 0d 19 fa 0e dd  |..........:.....|
00003860  20 f2 69 6e 73 28 69 24  29 0d 1a 04 08 ea 20 69  | .ins(i$)..... i|
00003870  25 0d 1a 0e 0d e7 20 69  24 3d 22 22 20 e1 0d 1a  |%..... i$="" ...|
00003880  18 12 e3 20 69 25 3d 31  20 b8 20 a9 28 69 24 29  |... i%=1 . .(i$)|
00003890  0d 1a 22 20 20 c8 99 20  22 4f 53 5f 42 79 74 65  |.."  .. "OS_Byte|
000038a0  22 2c 31 33 38 2c 30 2c  97 c1 69 24 2c 69 25 29  |",138,0,..i$,i%)|
000038b0  0d 1a 2c 05 ed 0d 1a 36  05 e1 0d 1a 40 05 3a 0d  |..,....6....@.:.|
000038c0  1a 4a 10 dd 20 a4 73 74  72 69 70 28 61 24 29 0d  |.J.. .strip(a$).|
000038d0  1a 54 0f c8 95 20 97 28  61 24 29 3d 33 32 0d 1a  |.T... .(a$)=32..|
000038e0  5e 0e 20 61 24 3d c1 61  24 2c 32 29 0d 1a 68 05  |^. a$=.a$,2)..h.|
000038f0  ce 0d 1a 72 0f c8 95 20  c2 61 24 29 3d 22 20 22  |...r... .a$)=" "|
00003900  0d 1a 7c 0c 20 61 24 3d  c0 61 24 29 0d 1a 86 05  |..|. a$=.a$)....|
00003910  ce 0d 1a 90 07 3d 61 24  0d 1a 9a 05 3a 0d 1a a4  |.....=a$....:...|
00003920  0d dd 20 a4 6c 63 28 61  24 29 0d 1a ae 0e ea 20  |.. .lc(a$)..... |
00003930  62 24 2c 69 25 2c 63 25  0d 1a b8 09 62 24 3d 22  |b$,i%,c%....b$="|
00003940  22 0d 1a c2 0e e7 20 61  24 3c 3e 22 22 20 8c 0d  |"..... a$<>"" ..|
00003950  1a cc 13 20 e3 20 69 25  3d 31 20 b8 20 a9 28 61  |... . i%=1 . .(a|
00003960  24 29 0d 1a d6 11 20 20  63 25 3d 97 c1 61 24 2c  |$)....  c%=..a$,|
00003970  69 25 29 0d 1a e0 24 20  20 e7 20 63 25 3e 3d 97  |i%)...$  . c%>=.|
00003980  22 41 22 20 80 20 63 25  3c 3d 97 22 5a 22 20 8c  |"A" . c%<=."Z" .|
00003990  20 63 25 2b 3d 33 32 0d  1a ea 0d 20 20 62 24 2b  | c%+=32....  b$+|
000039a0  3d bd 63 25 0d 1a f4 06  20 ed 0d 1a fe 05 cd 0d  |=.c%.... .......|
000039b0  1b 08 07 3d 62 24 0d 1b  12 05 3a 0d 1b 1c 14 dd  |...=b$....:.....|
000039c0  20 a4 6c 63 5f 61 6e 64  5f 75 73 28 61 24 29 0d  | .lc_and_us(a$).|
000039d0  1b 26 0e ea 20 62 24 2c  69 25 2c 63 25 0d 1b 30  |.&.. b$,i%,c%..0|
000039e0  09 62 24 3d 22 22 0d 1b  3a 0e e7 20 61 24 3c 3e  |.b$=""..:.. a$<>|
000039f0  22 22 20 8c 0d 1b 44 13  20 e3 20 69 25 3d 31 20  |"" ...D. . i%=1 |
00003a00  b8 20 a9 28 61 24 29 0d  1b 4e 11 20 20 63 25 3d  |. .(a$)..N.  c%=|
00003a10  97 c1 61 24 2c 69 25 29  0d 1b 58 24 20 20 e7 20  |..a$,i%)..X$  . |
00003a20  63 25 3e 3d 97 22 41 22  20 80 20 63 25 3c 3d 97  |c%>=."A" . c%<=.|
00003a30  22 5a 22 20 8c 20 63 25  2b 3d 33 32 0d 1b 62 15  |"Z" . c%+=32..b.|
00003a40  20 20 e7 20 63 25 3d 33  32 20 63 25 3d 97 22 5f  |  . c%=32 c%=."_|
00003a50  22 0d 1b 6c 0d 20 20 62  24 2b 3d bd 63 25 0d 1b  |"..l.  b$+=.c%..|
00003a60  76 06 20 ed 0d 1b 80 05  cd 0d 1b 8a 07 3d 62 24  |v. ..........=b$|
00003a70  0d 1b 94 05 3a 0d 1b 9e  21 dd 20 f2 73 65 6c 65  |....:...!. .sele|
00003a80  63 74 5f 6f 62 6a 65 63  74 28 6d 78 25 2c 6d 79  |ct_object(mx%,my|
00003a90  25 2c 6d 62 25 29 0d 1b  a8 12 ea 20 70 25 2c 6c  |%,mb%)..... p%,l|
00003aa0  6f 6f 70 25 2c 6f 6b 25  0d 1b b2 13 e7 20 63 75  |oop%,ok%..... cu|
00003ab0  72 5f 6f 62 6a 25 3d 2d  31 20 e1 0d 1b bc 14 e7  |r_obj%=-1 ......|
00003ac0  20 63 75 72 5f 76 69 65  77 25 3c 3d 30 20 e1 0d  | cur_view%<=0 ..|
00003ad0  1b c6 1f e7 20 73 65 6c  65 63 74 65 64 25 3c 3e  |.... selected%<>|
00003ae0  2d 31 20 80 20 6d 62 25  3d 31 20 8c 20 e1 0d 1b  |-1 . mb%=1 . ...|
00003af0  d0 14 e7 20 73 65 6c 65  63 74 65 64 25 3d 2d 31  |... selected%=-1|
00003b00  20 8c 0d 1b da 19 20 6c  6f 6f 70 25 3d 21 28 a4  | ..... loop%=!(.|
00003b10  6f 2b 6f 62 6a 5f 6c 69  73 74 29 0d 1b e4 05 cc  |o+obj_list).....|
00003b20  0d 1b ee 14 20 6c 6f 6f  70 25 3d 73 65 6c 65 63  |.... loop%=selec|
00003b30  74 65 64 25 0d 1b f8 05  cd 0d 1c 02 18 70 25 3d  |ted%.........p%=|
00003b40  6c 6f 6f 70 25 21 73 75  62 6f 62 6a 5f 6e 65 78  |loop%!subobj_nex|
00003b50  74 0d 1c 0c 1e e7 20 70  25 3d 30 20 8c 20 70 25  |t..... p%=0 . p%|
00003b60  3d 21 28 a4 6f 2b 6f 62  6a 5f 6c 69 73 74 29 0d  |=!(.o+obj_list).|
00003b70  1c 16 09 6f 6b 25 3d a3  0d 1c 20 18 c8 95 20 70  |...ok%=... ... p|
00003b80  25 3c 3e 6c 6f 6f 70 25  20 80 20 ac 20 6f 6b 25  |%<>loop% . . ok%|
00003b90  0d 1c 2a 0e 20 e7 20 70  25 3c 3e 30 20 8c 0d 1c  |..*. . p%<>0 ...|
00003ba0  34 36 20 20 6f 6b 25 3d  b9 3a f4 20 73 68 6f 75  |46  ok%=.:. shou|
00003bb0  6c 64 20 63 6f 6d 70 61  72 65 20 63 6f 2d 6f 72  |ld compare co-or|
00003bc0  64 69 6e 61 74 65 73 20  68 65 72 65 20 69 64 65  |dinates here ide|
00003bd0  61 6c 6c 79 0d 1c 3e 06  20 cc 0d 1c 48 17 20 20  |ally..>. ...H.  |
00003be0  70 25 3d 70 25 21 73 75  62 6f 62 6a 5f 6e 65 78  |p%=p%!subobj_nex|
00003bf0  74 0d 1c 52 20 20 20 e7  20 70 25 3d 30 20 8c 20  |t..R   . p%=0 . |
00003c00  70 25 3d 21 28 a4 6f 2b  6f 62 6a 5f 6c 69 73 74  |p%=!(.o+obj_list|
00003c10  29 0d 1c 5c 06 20 cd 0d  1c 66 05 ce 0d 1c 70 0d  |)..\. ...f....p.|
00003c20  e7 20 ac 20 6f 6b 25 20  8c 0d 1c 7a 19 20 e7 20  |. . ok% ...z. . |
00003c30  21 28 a4 6f 2b 6f 62 6a  5f 6c 69 73 74 29 3d 30  |!(.o+obj_list)=0|
00003c40  20 8c 0d 1c 84 1c 20 20  f2 73 65 6c 65 63 74 5f  | .....  .select_|
00003c50  6f 62 6a 65 63 74 5f 72  61 77 28 2d 31 29 0d 1c  |object_raw(-1)..|
00003c60  8e 06 20 cc 0d 1c 98 28  20 20 f2 73 65 6c 65 63  |.. ....(  .selec|
00003c70  74 5f 6f 62 6a 65 63 74  5f 72 61 77 28 21 28 a4  |t_object_raw(!(.|
00003c80  6f 2b 6f 62 6a 5f 6c 69  73 74 29 29 0d 1c a2 06  |o+obj_list))....|
00003c90  20 cd 0d 1c ac 05 cc 0d  1c b6 1b 20 f2 73 65 6c  | .......... .sel|
00003ca0  65 63 74 5f 6f 62 6a 65  63 74 5f 72 61 77 28 70  |ect_object_raw(p|
00003cb0  25 29 0d 1c c0 05 cd 0d  1c ca 05 e1 0d 1c d4 05  |%)..............|
00003cc0  3a 0d 1c de 1f dd 20 f2  73 65 6c 65 63 74 5f 6f  |:..... .select_o|
00003cd0  62 6a 65 63 74 5f 72 61  77 28 61 64 64 72 25 29  |bject_raw(addr%)|
00003ce0  0d 1c e8 08 ea 20 69 25  0d 1c f2 18 e7 20 61 64  |..... i%..... ad|
00003cf0  64 72 25 3c 3e 73 65 6c  65 63 74 65 64 25 20 8c  |dr%<>selected% .|
00003d00  0d 1c fc 14 20 73 65 6c  65 63 74 65 64 25 3d 61  |.... selected%=a|
00003d10  64 64 72 25 0d 1d 06 0e  20 76 65 72 74 65 78 25  |ddr%.... vertex%|
00003d20  3d 30 0d 1d 10 19 20 76  69 65 77 5f 6e 65 65 64  |=0.... view_need|
00003d30  73 5f 75 70 64 61 74 65  25 3d b9 0d 1d 1a 16 20  |s_update%=..... |
00003d40  f2 73 65 74 5f 69 6e 66  6f 5f 6d 6f 64 65 28 35  |.set_info_mode(5|
00003d50  29 0d 1d 24 05 cd 0d 1d  2e 15 e7 20 73 65 6c 65  |)..$....... sele|
00003d60  63 74 65 64 25 3c 3e 2d  31 20 8c 0d 1d 38 2e 20  |cted%<>-1 ...8. |
00003d70  e7 20 28 73 65 6c 65 63  74 65 64 25 21 73 75 62  |. (selected%!sub|
00003d80  6f 62 6a 5f 66 6c 61 67  73 20 80 20 62 69 74 5f  |obj_flags . bit_|
00003d90  73 75 72 66 29 3e 30 20  8c 0d 1d 42 10 20 20 e3  |surf)>0 ...B.  .|
00003da0  20 69 25 3d 30 20 b8 20  32 0d 1d 4c 39 20 20 20  | i%=0 . 2..L9   |
00003db0  72 67 62 25 28 69 25 29  3d 3f 28 73 65 6c 65 63  |rgb%(i%)=?(selec|
00003dc0  74 65 64 25 21 73 75 62  6f 62 6a 5f 74 79 70 65  |ted%!subobj_type|
00003dd0  2b 73 75 72 66 5f 63 6f  6c 6f 75 72 2b 31 2b 69  |+surf_colour+1+i|
00003de0  25 29 0d 1d 56 07 20 20  ed 0d 1d 60 10 20 20 f2  |%)..V.  ...`.  .|
00003df0  63 6c 73 5f 72 69 67 68  74 0d 1d 6a 16 20 20 f2  |cls_right..j.  .|
00003e00  73 68 6f 77 5f 63 6f 6c  6f 75 72 5f 62 61 72 0d  |show_colour_bar.|
00003e10  1d 74 06 20 cc 0d 1d 7e  10 20 20 f2 63 6c 73 5f  |.t. ...~.  .cls_|
00003e20  72 69 67 68 74 0d 1d 88  13 20 20 f2 6c 69 73 74  |right....  .list|
00003e30  5f 6f 62 6a 65 63 74 73  0d 1d 92 06 20 cd 0d 1d  |_objects.... ...|
00003e40  9c 05 cd 0d 1d a6 05 e1  0d 1d b0 05 3a 0d 1d ba  |............:...|
00003e50  17 dd 20 a4 70 61 6e 28  6d 78 25 2c 6d 79 25 2c  |.. .pan(mx%,my%,|
00003e60  6d 62 25 29 0d 1d c4 0d  ea 20 64 78 25 2c 64 79  |mb%)..... dx%,dy|
00003e70  25 0d 1d ce 21 e7 20 ac  20 28 6d 62 25 3d 32 20  |%...!. . (mb%=2 |
00003e80  80 20 72 65 70 65 61 74  69 6e 67 25 29 20 8c 20  |. repeating%) . |
00003e90  3d a3 0d 1d d8 28 64 78  25 3d 28 6d 78 25 2d 77  |=....(dx%=(mx%-w|
00003ea0  61 73 5f 6d 78 25 29 2a  73 63 61 6c 65 32 64 2a  |as_mx%)*scale2d*|
00003eb0  28 31 30 2f 7a 6f 6f 6d  25 29 0d 1d e2 28 64 79  |(10/zoom%)...(dy|
00003ec0  25 3d 28 6d 79 25 2d 77  61 73 5f 6d 79 25 29 2a  |%=(my%-was_my%)*|
00003ed0  73 63 61 6c 65 32 64 2a  28 31 30 2f 7a 6f 6f 6d  |scale2d*(10/zoom|
00003ee0  25 29 0d 1d ec 12 c8 8e  20 63 75 72 5f 76 69 65  |%)...... cur_vie|
00003ef0  77 25 20 ca 0d 1d f6 0f  20 c9 20 30 2c 31 2c 32  |w% ..... . 0,1,2|
00003f00  2c 33 3a 0d 1e 00 1d 20  20 6f 78 79 7a 25 28 63  |,3:....  oxyz%(c|
00003f10  75 72 5f 76 69 65 77 25  2c 30 29 2b 3d 64 78 25  |ur_view%,0)+=dx%|
00003f20  0d 1e 0a 1d 20 20 6f 78  79 7a 25 28 63 75 72 5f  |....  oxyz%(cur_|
00003f30  76 69 65 77 25 2c 31 29  2b 3d 64 79 25 0d 1e 14  |view%,1)+=dy%...|
00003f40  1e 20 20 63 75 72 5f 76  69 65 77 5f 6e 65 65 64  |.  cur_view_need|
00003f50  73 5f 75 70 64 61 74 65  25 3d b9 0d 1e 1e 0f 20  |s_update%=..... |
00003f60  20 f2 69 6e 66 6f 5f 62  61 72 0d 1e 28 05 cb 0d  | .info_bar..(...|
00003f70  1e 32 06 3d b9 0d 1e 3c  05 3a 0d 1e 46 1c dd 20  |.2.=...<.:..F.. |
00003f80  a4 64 72 61 67 5f 6f 62  6a 28 6d 78 25 2c 6d 79  |.drag_obj(mx%,my|
00003f90  25 2c 6d 62 25 29 0d 1e  50 0f ea 20 64 78 25 2c  |%,mb%)..P.. dx%,|
00003fa0  64 79 25 2c 6f 0d 1e 5a  51 e7 20 ac 20 28 28 6d  |dy%,o..ZQ. . ((m|
00003fb0  62 25 3d 34 20 84 20 6d  62 25 3d 31 29 20 80 20  |b%=4 . mb%=1) . |
00003fc0  72 65 70 65 61 74 69 6e  67 25 20 80 20 63 75 72  |repeating% . cur|
00003fd0  5f 6f 62 6a 25 3c 3e 2d  31 20 80 20 73 65 6c 65  |_obj%<>-1 . sele|
00003fe0  63 74 65 64 25 3c 3e 2d  31 80 20 ac 20 a6 2d 31  |cted%<>-1. . .-1|
00003ff0  29 20 8c 20 3d a3 0d 1e  64 11 e7 20 6d 79 25 3c  |) . =...d.. my%<|
00004000  34 30 20 8c 20 3d a3 0d  1e 6e 14 e7 20 6d 78 25  |40 . =...n.. mx%|
00004010  3e 36 36 2a 31 36 20 8c  20 3d a3 0d 1e 78 30 e7  |>66*16 . =...x0.|
00004020  20 28 73 65 6c 65 63 74  65 64 25 21 73 75 62 6f  | (selected%!subo|
00004030  62 6a 5f 66 6c 61 67 73  20 80 20 62 69 74 5f 73  |bj_flags . bit_s|
00004040  75 72 66 29 3e 30 20 8c  20 3d a3 0d 1e 82 28 64  |urf)>0 . =....(d|
00004050  78 25 3d 28 6d 78 25 2d  77 61 73 5f 6d 78 25 29  |x%=(mx%-was_mx%)|
00004060  2a 73 63 61 6c 65 32 64  2a 28 31 30 2f 7a 6f 6f  |*scale2d*(10/zoo|
00004070  6d 25 29 0d 1e 8c 28 64  79 25 3d 28 6d 79 25 2d  |m%)...(dy%=(my%-|
00004080  77 61 73 5f 6d 79 25 29  2a 73 63 61 6c 65 32 64  |was_my%)*scale2d|
00004090  2a 28 31 30 2f 7a 6f 6f  6d 25 29 0d 1e 96 1d 6f  |*(10/zoom%)....o|
000040a0  3d 73 65 6c 65 63 74 65  64 25 2b 73 75 62 6f 62  |=selected%+subob|
000040b0  6a 5f 6f 66 66 73 65 74  0d 1e a0 12 c8 8e 20 63  |j_offset...... c|
000040c0  75 72 5f 76 69 65 77 25  20 ca 0d 1e aa 09 20 c9  |ur_view% ..... .|
000040d0  20 31 3a 0d 1e b4 0e 20  20 6f 21 30 2b 3d 64 78  | 1:....  o!0+=dx|
000040e0  25 0d 1e be 0e 20 20 6f  21 34 2b 3d 64 79 25 0d  |%....  o!4+=dy%.|
000040f0  1e c8 09 20 c9 20 32 3a  0d 1e d2 0e 20 20 6f 21  |... . 2:....  o!|
00004100  30 2b 3d 64 78 25 0d 1e  dc 0e 20 20 6f 21 38 2b  |0+=dx%....  o!8+|
00004110  3d 64 79 25 0d 1e e6 09  20 c9 20 33 3a 0d 1e f0  |=dy%.... . 3:...|
00004120  0e 20 20 6f 21 38 2b 3d  64 78 25 0d 1e fa 0e 20  |.  o!8+=dx%.... |
00004130  20 6f 21 34 2b 3d 64 79  25 0d 1f 04 05 cb 0d 1f  | o!4+=dy%.......|
00004140  0e 0d f2 69 6e 66 6f 5f  62 61 72 0d 1f 18 18 76  |...info_bar....v|
00004150  69 65 77 5f 6e 65 65 64  73 5f 75 70 64 61 74 65  |iew_needs_update|
00004160  25 3d b9 0d 1f 22 06 3d  b9 0d 1f 2c 05 3a 0d 1f  |%=...".=...,.:..|
00004170  36 1a dd 20 a4 64 72 61  67 5f 76 28 6d 78 25 2c  |6.. .drag_v(mx%,|
00004180  6d 79 25 2c 6d 62 25 29  0d 1f 40 0f ea 20 64 78  |my%,mb%)..@.. dx|
00004190  25 2c 64 79 25 2c 6f 0d  1f 4a 4a e7 20 ac 20 28  |%,dy%,o..JJ. . (|
000041a0  28 6d 62 25 3d 31 20 84  20 6d 62 25 3d 34 29 20  |(mb%=1 . mb%=4) |
000041b0  80 20 72 65 70 65 61 74  69 6e 67 25 20 80 20 63  |. repeating% . c|
000041c0  75 72 5f 6f 62 6a 25 3c  3e 2d 31 20 80 20 73 65  |ur_obj%<>-1 . se|
000041d0  6c 65 63 74 65 64 25 3c  3e 2d 31 29 20 8c 20 3d  |lected%<>-1) . =|
000041e0  a3 0d 1f 54 11 e7 20 6d  79 25 3c 34 30 20 8c 20  |...T.. my%<40 . |
000041f0  3d a3 0d 1f 5e 14 e7 20  6d 78 25 3e 36 36 2a 31  |=...^.. mx%>66*1|
00004200  36 20 8c 20 3d a3 0d 1f  68 30 e7 20 28 73 65 6c  |6 . =...h0. (sel|
00004210  65 63 74 65 64 25 21 73  75 62 6f 62 6a 5f 66 6c  |ected%!subobj_fl|
00004220  61 67 73 20 80 20 62 69  74 5f 73 75 72 66 29 3d  |ags . bit_surf)=|
00004230  30 20 8c 20 3d a3 0d 1f  72 28 64 78 25 3d 28 6d  |0 . =...r(dx%=(m|
00004240  78 25 2d 77 61 73 5f 6d  78 25 29 2a 73 63 61 6c  |x%-was_mx%)*scal|
00004250  65 32 64 2a 28 31 30 2f  7a 6f 6f 6d 25 29 0d 1f  |e2d*(10/zoom%)..|
00004260  7c 28 64 79 25 3d 28 6d  79 25 2d 77 61 73 5f 6d  ||(dy%=(my%-was_m|
00004270  79 25 29 2a 73 63 61 6c  65 32 64 2a 28 31 30 2f  |y%)*scale2d*(10/|
00004280  7a 6f 6f 6d 25 29 0d 1f  86 32 6f 3d 73 65 6c 65  |zoom%)...2o=sele|
00004290  63 74 65 64 25 21 73 75  62 6f 62 6a 5f 74 79 70  |cted%!subobj_typ|
000042a0  65 2b 73 75 72 66 5f 63  6f 6f 72 64 73 2b 31 32  |e+surf_coords+12|
000042b0  2a 76 65 72 74 65 78 25  0d 1f 90 12 c8 8e 20 63  |*vertex%...... c|
000042c0  75 72 5f 76 69 65 77 25  20 ca 0d 1f 9a 09 20 c9  |ur_view% ..... .|
000042d0  20 31 3a 0d 1f a4 0e 20  20 6f 21 30 2b 3d 64 78  | 1:....  o!0+=dx|
000042e0  25 0d 1f ae 0e 20 20 6f  21 34 2b 3d 64 79 25 0d  |%....  o!4+=dy%.|
000042f0  1f b8 09 20 c9 20 32 3a  0d 1f c2 0e 20 20 6f 21  |... . 2:....  o!|
00004300  30 2b 3d 64 78 25 0d 1f  cc 0e 20 20 6f 21 38 2b  |0+=dx%....  o!8+|
00004310  3d 64 79 25 0d 1f d6 09  20 c9 20 33 3a 0d 1f e0  |=dy%.... . 3:...|
00004320  0e 20 20 6f 21 38 2b 3d  64 78 25 0d 1f ea 0e 20  |.  o!8+=dx%.... |
00004330  20 6f 21 34 2b 3d 64 79  25 0d 1f f4 05 cb 0d 1f  | o!4+=dy%.......|
00004340  fe 0d f2 69 6e 66 6f 5f  62 61 72 0d 20 08 18 76  |...info_bar. ..v|
00004350  69 65 77 5f 6e 65 65 64  73 5f 75 70 64 61 74 65  |iew_needs_update|
00004360  25 3d b9 0d 20 12 06 3d  b9 0d 20 1c 05 3a 0d 20  |%=.. ..=.. ..:. |
00004370  26 1c dd 20 f2 6f 66 66  73 65 74 5f 63 6c 69 63  |&.. .offset_clic|
00004380  6b 28 6d 78 25 2c 6d 79  25 29 0d 20 30 1f ea 20  |k(mx%,my%). 0.. |
00004390  70 6f 73 25 2c 73 68 69  66 74 25 2c 61 25 2c 61  |pos%,shift%,a%,a|
000043a0  6e 67 5f 73 68 69 66 74  25 0d 20 3a 0e 73 68 69  |ng_shift%. :.shi|
000043b0  66 74 25 3d 31 30 30 0d  20 44 18 61 6e 67 5f 73  |ft%=100. D.ang_s|
000043c0  68 69 66 74 25 3d 61 6e  67 5f 73 63 61 6c 65 0d  |hift%=ang_scale.|
000043d0  20 4e 2c e7 20 a6 2d 31  20 73 68 69 66 74 25 3d  | N,. .-1 shift%=|
000043e0  31 30 30 30 3a 61 6e 67  5f 73 68 69 66 74 25 3d  |1000:ang_shift%=|
000043f0  35 2a 61 6e 67 5f 73 63  61 6c 65 0d 20 58 2e e7  |5*ang_scale. X..|
00004400  20 a6 2d 32 20 73 68 69  66 74 25 3d 31 30 30 30  | .-2 shift%=1000|
00004410  30 3a 61 6e 67 5f 73 68  69 66 74 25 3d 31 30 2a  |0:ang_shift%=10*|
00004420  61 6e 67 5f 73 63 61 6c  65 0d 20 62 0a c8 8e 20  |ang_scale. b... |
00004430  b9 20 ca 0d 20 6c 22 20  c9 20 63 75 72 5f 6d 6f  |. .. l" . cur_mo|
00004440  64 65 25 3d 33 20 80 20  73 65 6c 65 63 74 65 64  |de%=3 . selected|
00004450  25 3d 2d 31 3a 0d 20 76  17 20 20 e7 20 63 75 72  |%=-1:. v.  . cur|
00004460  5f 76 69 65 77 25 3c 3e  2d 31 20 8c 0d 20 80 14  |_view%<>-1 .. ..|
00004470  20 20 20 70 6f 73 25 3d  6d 78 25 20 81 20 31 36  |   pos%=mx% . 16|
00004480  0d 20 8a 10 20 20 20 c8  8e 20 70 6f 73 25 20 ca  |. ..   .. pos% .|
00004490  0d 20 94 12 20 20 20 20  c9 20 30 2c 31 30 2c 32  |. ..    . 0,10,2|
000044a0  30 3a 0d 20 9e 2b 20 20  20 20 20 6f 78 79 7a 25  |0:. .+     oxyz%|
000044b0  28 63 75 72 5f 76 69 65  77 25 2c 70 6f 73 25 20  |(cur_view%,pos% |
000044c0  81 20 31 30 29 2d 3d 73  68 69 66 74 25 0d 20 a8  |. 10)-=shift%. .|
000044d0  21 20 20 20 20 20 63 75  72 5f 76 69 65 77 5f 6e  |!     cur_view_n|
000044e0  65 65 64 73 5f 75 70 64  61 74 65 25 3d b9 0d 20  |eeds_update%=.. |
000044f0  b2 12 20 20 20 20 20 f2  69 6e 66 6f 5f 62 61 72  |..     .info_bar|
00004500  0d 20 bc 12 20 20 20 20  c9 20 38 2c 31 38 2c 32  |. ..    . 8,18,2|
00004510  38 3a 0d 20 c6 2f 20 20  20 20 20 6f 78 79 7a 25  |8:. ./     oxyz%|
00004520  28 63 75 72 5f 76 69 65  77 25 2c 28 70 6f 73 25  |(cur_view%,(pos%|
00004530  2d 38 29 20 81 20 31 30  29 2b 3d 73 68 69 66 74  |-8) . 10)+=shift|
00004540  25 0d 20 d0 21 20 20 20  20 20 63 75 72 5f 76 69  |%. .!     cur_vi|
00004550  65 77 5f 6e 65 65 64 73  5f 75 70 64 61 74 65 25  |ew_needs_update%|
00004560  3d b9 0d 20 da 12 20 20  20 20 20 f2 69 6e 66 6f  |=.. ..     .info|
00004570  5f 62 61 72 0d 20 e4 13  20 20 20 20 c9 20 33 35  |_bar. ..    . 35|
00004580  2c 34 35 2c 35 35 3a 0d  20 ee 5d 20 20 20 20 20  |,45,55:. .]     |
00004590  6f 61 6e 67 25 28 63 75  72 5f 76 69 65 77 25 2c  |oang%(cur_view%,|
000045a0  28 70 6f 73 25 2d 33 35  29 20 81 20 31 30 29 3d  |(pos%-35) . 10)=|
000045b0  28 6f 61 6e 67 25 28 63  75 72 5f 76 69 65 77 25  |(oang%(cur_view%|
000045c0  2c 28 70 6f 73 25 2d 33  35 29 20 81 20 31 30 29  |,(pos%-35) . 10)|
000045d0  2d 61 6e 67 5f 73 68 69  66 74 25 29 20 80 20 26  |-ang_shift%) . &|
000045e0  46 46 46 46 0d 20 f8 21  20 20 20 20 20 63 75 72  |FFFF. .!     cur|
000045f0  5f 76 69 65 77 5f 6e 65  65 64 73 5f 75 70 64 61  |_view_needs_upda|
00004600  74 65 25 3d b9 0d 21 02  12 20 20 20 20 20 f2 69  |te%=..!..     .i|
00004610  6e 66 6f 5f 62 61 72 0d  21 0c 13 20 20 20 20 c9  |nfo_bar.!..    .|
00004620  20 34 33 2c 35 33 2c 36  33 3a 0d 21 16 5d 20 20  | 43,53,63:.!.]  |
00004630  20 20 20 6f 61 6e 67 25  28 63 75 72 5f 76 69 65  |   oang%(cur_vie|
00004640  77 25 2c 28 70 6f 73 25  2d 33 35 29 20 81 20 31  |w%,(pos%-35) . 1|
00004650  30 29 3d 28 6f 61 6e 67  25 28 63 75 72 5f 76 69  |0)=(oang%(cur_vi|
00004660  65 77 25 2c 28 70 6f 73  25 2d 33 35 29 20 81 20  |ew%,(pos%-35) . |
00004670  31 30 29 2b 61 6e 67 5f  73 68 69 66 74 25 29 20  |10)+ang_shift%) |
00004680  80 20 26 46 46 46 46 0d  21 20 21 20 20 20 20 20  |. &FFFF.! !     |
00004690  63 75 72 5f 76 69 65 77  5f 6e 65 65 64 73 5f 75  |cur_view_needs_u|
000046a0  70 64 61 74 65 25 3d b9  0d 21 2a 12 20 20 20 20  |pdate%=..!*.    |
000046b0  20 f2 69 6e 66 6f 5f 62  61 72 0d 21 34 08 20 20  | .info_bar.!4.  |
000046c0  20 7f 0d 21 3e 4f 20 20  20 20 e7 20 28 70 6f 73  | ..!>O    . (pos|
000046d0  25 3e 3d 32 20 80 20 70  6f 73 25 3c 3d 36 29 20  |%>=2 . pos%<=6) |
000046e0  84 20 28 70 6f 73 25 3e  3d 31 32 20 80 20 70 6f  |. (pos%>=12 . po|
000046f0  73 25 3c 3d 31 36 29 20  84 20 28 70 6f 73 25 3e  |s%<=16) . (pos%>|
00004700  3d 32 32 20 80 20 70 6f  73 25 3c 3d 32 36 29 20  |=22 . pos%<=26) |
00004710  8c 0d 21 48 18 20 20 20  20 20 e7 20 63 75 72 5f  |..!H.     . cur_|
00004720  76 69 65 77 25 3e 30 20  8c 0d 21 52 1a 20 20 20  |view%>0 ..!R.   |
00004730  20 20 20 f2 69 6e 70 75  74 5f 76 69 65 77 5f 6f  |   .input_view_o|
00004740  66 66 73 0d 21 5c 0a 20  20 20 20 20 cc 0d 21 66  |ffs.!\.     ..!f|
00004750  1d 20 20 20 20 20 20 f2  69 6e 70 75 74 5f 76 69  |.      .input_vi|
00004760  65 77 5f 6f 66 66 73 5f  33 44 0d 21 70 0a 20 20  |ew_offs_3D.!p.  |
00004770  20 20 20 cd 0d 21 7a 09  20 20 20 20 cc 0d 21 84  |   ..!z.    ..!.|
00004780  52 20 20 20 20 20 e7 20  28 70 6f 73 25 3e 3d 33  |R     . (pos%>=3|
00004790  37 20 80 20 70 6f 73 25  3c 3d 34 31 29 20 84 20  |7 . pos%<=41) . |
000047a0  28 70 6f 73 25 3e 3d 34  37 20 80 20 70 6f 73 25  |(pos%>=47 . pos%|
000047b0  3c 3d 35 31 29 20 84 20  28 70 6f 73 25 3e 3d 35  |<=51) . (pos%>=5|
000047c0  37 20 80 20 70 6f 73 25  3c 3d 36 31 29 20 8c 0d  |7 . pos%<=61) ..|
000047d0  21 8e 19 20 20 20 20 20  20 e7 20 63 75 72 5f 76  |!..      . cur_v|
000047e0  69 65 77 25 3d 30 20 8c  0d 21 98 1e 20 20 20 20  |iew%=0 ..!..    |
000047f0  20 20 20 f2 69 6e 70 75  74 5f 76 69 65 77 5f 61  |   .input_view_a|
00004800  6e 67 73 5f 33 44 0d 21  a2 0b 20 20 20 20 20 20  |ngs_3D.!..      |
00004810  cd 0d 21 ac 0a 20 20 20  20 20 cd 0d 21 b6 09 20  |..!..     ..!.. |
00004820  20 20 20 cd 0d 21 c0 08  20 20 20 cb 0d 21 ca 07  |   ..!..   ..!..|
00004830  20 20 cd 0d 21 d4 35 20  c9 20 63 75 72 5f 6d 6f  |  ..!.5 . cur_mo|
00004840  64 65 25 3d 33 20 80 20  73 65 6c 65 63 74 65 64  |de%=3 . selected|
00004850  25 3c 3e 2d 31 20 80 20  ac 20 a4 65 64 69 74 69  |%<>-1 . . .editi|
00004860  6e 67 5f 73 75 72 66 3a  0d 21 de 14 20 20 70 6f  |ng_surf:.!..  po|
00004870  73 25 3d 6d 78 25 20 81  20 31 36 3a 0d 21 e8 0f  |s%=mx% . 16:.!..|
00004880  20 20 c8 8e 20 70 6f 73  25 20 ca 0d 21 f2 11 20  |  .. pos% ..!.. |
00004890  20 20 c9 20 30 2c 31 30  2c 32 30 3a 0d 21 fc 37  |  . 0,10,20:.!.7|
000048a0  20 20 20 20 73 65 6c 65  63 74 65 64 25 21 28 73  |    selected%!(s|
000048b0  75 62 6f 62 6a 5f 6f 66  66 73 65 74 2b 34 2a 28  |ubobj_offset+4*(|
000048c0  70 6f 73 25 20 81 20 31  30 29 29 2d 3d 73 68 69  |pos% . 10))-=shi|
000048d0  66 74 25 0d 22 06 1c 20  20 20 20 76 69 65 77 5f  |ft%."..    view_|
000048e0  6e 65 65 64 73 5f 75 70  64 61 74 65 25 3d b9 0d  |needs_update%=..|
000048f0  22 10 11 20 20 20 20 f2  69 6e 66 6f 5f 62 61 72  |"..    .info_bar|
00004900  0d 22 1a 11 20 20 20 c9  20 38 2c 31 38 2c 32 38  |."..   . 8,18,28|
00004910  3a 0d 22 24 37 20 20 20  20 73 65 6c 65 63 74 65  |:."$7    selecte|
00004920  64 25 21 28 73 75 62 6f  62 6a 5f 6f 66 66 73 65  |d%!(subobj_offse|
00004930  74 2b 34 2a 28 70 6f 73  25 20 81 20 31 30 29 29  |t+4*(pos% . 10))|
00004940  2b 3d 73 68 69 66 74 25  0d 22 2e 1c 20 20 20 20  |+=shift%."..    |
00004950  76 69 65 77 5f 6e 65 65  64 73 5f 75 70 64 61 74  |view_needs_updat|
00004960  65 25 3d b9 0d 22 38 11  20 20 20 20 f2 69 6e 66  |e%=.."8.    .inf|
00004970  6f 5f 62 61 72 0d 22 42  16 20 20 20 20 f2 75 70  |o_bar."B.    .up|
00004980  64 61 74 65 5f 62 6f 75  6e 64 73 0d 22 4c 12 20  |date_bounds."L. |
00004990  20 20 c9 20 33 35 2c 34  35 2c 35 35 3a 0d 22 56  |  . 35,45,55:."V|
000049a0  34 20 20 20 20 61 25 3d  73 65 6c 65 63 74 65 64  |4    a%=selected|
000049b0  25 2b 73 75 62 6f 62 6a  5f 61 6e 67 6c 65 2b 34  |%+subobj_angle+4|
000049c0  2a 28 28 70 6f 73 25 2d  33 35 29 20 81 20 31 30  |*((pos%-35) . 10|
000049d0  29 0d 22 60 24 20 20 20  20 21 61 25 3d 28 21 61  |)."`$    !a%=(!a|
000049e0  25 2d 61 6e 67 5f 73 68  69 66 74 25 29 20 80 20  |%-ang_shift%) . |
000049f0  26 46 46 46 46 0d 22 6a  1c 20 20 20 20 76 69 65  |&FFFF."j.    vie|
00004a00  77 5f 6e 65 65 64 73 5f  75 70 64 61 74 65 25 3d  |w_needs_update%=|
00004a10  b9 0d 22 74 11 20 20 20  20 f2 69 6e 66 6f 5f 62  |.."t.    .info_b|
00004a20  61 72 0d 22 7e 16 20 20  20 20 f2 75 70 64 61 74  |ar."~.    .updat|
00004a30  65 5f 62 6f 75 6e 64 73  0d 22 88 12 20 20 20 c9  |e_bounds."..   .|
00004a40  20 34 33 2c 35 33 2c 36  33 3a 0d 22 92 34 20 20  | 43,53,63:.".4  |
00004a50  20 20 61 25 3d 73 65 6c  65 63 74 65 64 25 2b 73  |  a%=selected%+s|
00004a60  75 62 6f 62 6a 5f 61 6e  67 6c 65 2b 34 2a 28 28  |ubobj_angle+4*((|
00004a70  70 6f 73 25 2d 34 33 29  20 81 20 31 30 29 0d 22  |pos%-43) . 10)."|
00004a80  9c 24 20 20 20 20 21 61  25 3d 28 21 61 25 2b 61  |.$    !a%=(!a%+a|
00004a90  6e 67 5f 73 68 69 66 74  25 29 20 80 20 26 46 46  |ng_shift%) . &FF|
00004aa0  46 46 0d 22 a6 1c 20 20  20 20 76 69 65 77 5f 6e  |FF."..    view_n|
00004ab0  65 65 64 73 5f 75 70 64  61 74 65 25 3d b9 0d 22  |eeds_update%=.."|
00004ac0  b0 11 20 20 20 20 f2 69  6e 66 6f 5f 62 61 72 0d  |..    .info_bar.|
00004ad0  22 ba 16 20 20 20 20 f2  75 70 64 61 74 65 5f 62  |"..    .update_b|
00004ae0  6f 75 6e 64 73 0d 22 c4  07 20 20 7f 0d 22 ce 4f  |ounds."..  ..".O|
00004af0  20 20 20 20 e7 20 28 70  6f 73 25 3e 3d 32 20 80  |    . (pos%>=2 .|
00004b00  20 70 6f 73 25 3c 3d 36  29 20 84 20 28 70 6f 73  | pos%<=6) . (pos|
00004b10  25 3e 3d 31 32 20 80 20  70 6f 73 25 3c 3d 31 36  |%>=12 . pos%<=16|
00004b20  29 20 84 20 28 70 6f 73  25 3e 3d 32 32 20 80 20  |) . (pos%>=22 . |
00004b30  70 6f 73 25 3c 3d 32 36  29 20 8c 0d 22 d8 18 20  |pos%<=26) ..".. |
00004b40  20 20 20 20 f2 69 6e 70  75 74 5f 6f 62 6a 5f 6f  |    .input_obj_o|
00004b50  66 66 73 0d 22 e2 09 20  20 20 20 cc 0d 22 ec 52  |ffs."..    ..".R|
00004b60  20 20 20 20 20 e7 20 28  70 6f 73 25 3e 3d 33 37  |     . (pos%>=37|
00004b70  20 80 20 70 6f 73 25 3c  3d 34 31 29 20 84 20 28  | . pos%<=41) . (|
00004b80  70 6f 73 25 3e 3d 34 37  20 80 20 70 6f 73 25 3c  |pos%>=47 . pos%<|
00004b90  3d 35 31 29 20 84 20 28  70 6f 73 25 3e 3d 35 37  |=51) . (pos%>=57|
00004ba0  20 80 20 70 6f 73 25 3c  3d 36 31 29 20 8c 0d 22  | . pos%<=61) .."|
00004bb0  f6 19 20 20 20 20 20 20  f2 69 6e 70 75 74 5f 6f  |..      .input_o|
00004bc0  62 6a 5f 61 6e 67 73 0d  23 00 0a 20 20 20 20 20  |bj_angs.#..     |
00004bd0  cd 0d 23 0a 09 20 20 20  20 cd 0d 23 14 07 20 20  |..#..    ..#..  |
00004be0  cb 0d 23 1e 15 20 c9 20  a4 65 64 69 74 69 6e 67  |..#.. . .editing|
00004bf0  5f 73 75 72 66 3a 0d 23  28 14 20 20 e7 20 76 65  |_surf:.#(.  . ve|
00004c00  72 74 65 78 25 3d 2d 31  20 8c 0d 23 32 07 20 20  |rtex%=-1 ..#2.  |
00004c10  cc 0d 23 3c 14 20 20 20  70 6f 73 25 3d 6d 78 25  |..#<.   pos%=mx%|
00004c20  20 81 20 31 36 0d 23 46  10 20 20 20 c8 8e 20 70  | . 16.#F.   .. p|
00004c30  6f 73 25 20 ca 0d 23 50  12 20 20 20 20 c9 20 30  |os% ..#P.    . 0|
00004c40  2c 31 30 2c 32 30 3a 0d  23 5a 4d 20 20 20 20 21  |,10,20:.#ZM    !|
00004c50  28 73 65 6c 65 63 74 65  64 25 21 73 75 62 6f 62  |(selected%!subob|
00004c60  6a 5f 74 79 70 65 2b 73  75 72 66 5f 63 6f 6f 72  |j_type+surf_coor|
00004c70  64 73 2b 31 32 2a 76 65  72 74 65 78 25 2b 34 2a  |ds+12*vertex%+4*|
00004c80  28 70 6f 73 25 20 81 20  31 30 29 29 2d 3d 73 68  |(pos% . 10))-=sh|
00004c90  69 66 74 25 0d 23 64 1d  20 20 20 20 20 76 69 65  |ift%.#d.     vie|
00004ca0  77 5f 6e 65 65 64 73 5f  75 70 64 61 74 65 25 3d  |w_needs_update%=|
00004cb0  b9 0d 23 6e 12 20 20 20  20 20 f2 69 6e 66 6f 5f  |..#n.     .info_|
00004cc0  62 61 72 0d 23 78 12 20  20 20 20 c9 20 38 2c 31  |bar.#x.    . 8,1|
00004cd0  38 2c 32 38 3a 0d 23 82  4e 20 20 20 20 20 21 28  |8,28:.#.N     !(|
00004ce0  73 65 6c 65 63 74 65 64  25 21 73 75 62 6f 62 6a  |selected%!subobj|
00004cf0  5f 74 79 70 65 2b 73 75  72 66 5f 63 6f 6f 72 64  |_type+surf_coord|
00004d00  73 2b 31 32 2a 76 65 72  74 65 78 25 2b 34 2a 28  |s+12*vertex%+4*(|
00004d10  70 6f 73 25 20 81 20 31  30 29 29 2b 3d 73 68 69  |pos% . 10))+=shi|
00004d20  66 74 25 0d 23 8c 1d 20  20 20 20 20 76 69 65 77  |ft%.#..     view|
00004d30  5f 6e 65 65 64 73 5f 75  70 64 61 74 65 25 3d b9  |_needs_update%=.|
00004d40  0d 23 96 12 20 20 20 20  20 f2 69 6e 66 6f 5f 62  |.#..     .info_b|
00004d50  61 72 0d 23 a0 17 20 20  20 20 20 f2 75 70 64 61  |ar.#..     .upda|
00004d60  74 65 5f 62 6f 75 6e 64  73 0d 23 aa 08 20 20 20  |te_bounds.#..   |
00004d70  7f 0d 23 b4 4f 20 20 20  20 e7 20 28 70 6f 73 25  |..#.O    . (pos%|
00004d80  3e 3d 32 20 80 20 70 6f  73 25 3c 3d 36 29 20 84  |>=2 . pos%<=6) .|
00004d90  20 28 70 6f 73 25 3e 3d  31 32 20 80 20 70 6f 73  | (pos%>=12 . pos|
00004da0  25 3c 3d 31 36 29 20 84  20 28 70 6f 73 25 3e 3d  |%<=16) . (pos%>=|
00004db0  32 32 20 80 20 70 6f 73  25 3c 3d 32 36 29 20 8c  |22 . pos%<=26) .|
00004dc0  0d 23 be 16 20 20 20 20  20 f2 69 6e 70 75 74 5f  |.#..     .input_|
00004dd0  76 65 72 74 65 78 0d 23  c8 09 20 20 20 20 cd 0d  |vertex.#..    ..|
00004de0  23 d2 08 20 20 20 cb 0d  23 dc 07 20 20 cd 0d 23  |#..   ..#..  ..#|
00004df0  e6 05 cb 0d 23 f0 05 e1  0d 23 fa 05 3a 0d 24 04  |....#....#..:.$.|
00004e00  16 dd 20 f2 69 6e 70 75  74 5f 76 69 65 77 5f 6f  |.. .input_view_o|
00004e10  66 66 73 0d 24 0e 07 ea  20 85 0d 24 18 25 ee 20  |ffs.$... ..$.%. |
00004e20  85 20 ea 20 f7 20 85 3a  f2 65 72 72 5f 62 61 72  |. . . .:.err_bar|
00004e30  28 b9 29 3a f2 69 6e 66  6f 5f 62 61 72 3a e1 0d  |(.):.info_bar:..|
00004e40  24 22 34 f2 69 6e 70 75  74 28 22 58 20 73 63 72  |$"4.input("X scr|
00004e50  65 65 6e 20 6f 66 66 73  65 74 22 2c 6f 78 79 7a  |een offset",oxyz|
00004e60  25 28 63 75 72 5f 76 69  65 77 25 2c 30 29 2c 31  |%(cur_view%,0),1|
00004e70  30 30 29 0d 24 2c 0d f2  69 6e 66 6f 5f 62 61 72  |00).$,..info_bar|
00004e80  0d 24 36 34 f2 69 6e 70  75 74 28 22 59 20 73 63  |.$64.input("Y sc|
00004e90  72 65 65 6e 20 6f 66 66  73 65 74 22 2c 6f 78 79  |reen offset",oxy|
00004ea0  7a 25 28 63 75 72 5f 76  69 65 77 25 2c 31 29 2c  |z%(cur_view%,1),|
00004eb0  31 30 30 29 0d 24 40 0d  f2 69 6e 66 6f 5f 62 61  |100).$@..info_ba|
00004ec0  72 0d 24 4a 1c 63 75 72  5f 76 69 65 77 5f 6e 65  |r.$J.cur_view_ne|
00004ed0  65 64 73 5f 75 70 64 61  74 65 25 3d b9 0d 24 54  |eds_update%=..$T|
00004ee0  07 f7 20 85 0d 24 5e 05  e1 0d 24 68 05 3a 0d 24  |.. ..$^...$h.:.$|
00004ef0  72 19 dd 20 f2 69 6e 70  75 74 5f 76 69 65 77 5f  |r.. .input_view_|
00004f00  6f 66 66 73 5f 33 44 0d  24 7c 07 ea 20 85 0d 24  |offs_3D.$|.. ..$|
00004f10  86 25 ee 20 85 20 ea 20  f7 20 85 3a f2 65 72 72  |.%. . . . .:.err|
00004f20  5f 62 61 72 28 b9 29 3a  f2 69 6e 66 6f 5f 62 61  |_bar(.):.info_ba|
00004f30  72 3a e1 0d 24 90 2d f2  69 6e 70 75 74 28 22 58  |r:..$.-.input("X|
00004f40  20 6f 66 66 73 65 74 22  2c 6f 78 79 7a 25 28 63  | offset",oxyz%(c|
00004f50  75 72 5f 76 69 65 77 25  2c 30 29 2c 31 30 30 29  |ur_view%,0),100)|
00004f60  0d 24 9a 0d f2 69 6e 66  6f 5f 62 61 72 0d 24 a4  |.$...info_bar.$.|
00004f70  2d f2 69 6e 70 75 74 28  22 59 20 6f 66 66 73 65  |-.input("Y offse|
00004f80  74 22 2c 6f 78 79 7a 25  28 63 75 72 5f 76 69 65  |t",oxyz%(cur_vie|
00004f90  77 25 2c 31 29 2c 31 30  30 29 0d 24 ae 0d f2 69  |w%,1),100).$...i|
00004fa0  6e 66 6f 5f 62 61 72 0d  24 b8 2d f2 69 6e 70 75  |nfo_bar.$.-.inpu|
00004fb0  74 28 22 5a 20 6f 66 66  73 65 74 22 2c 6f 78 79  |t("Z offset",oxy|
00004fc0  7a 25 28 63 75 72 5f 76  69 65 77 25 2c 32 29 2c  |z%(cur_view%,2),|
00004fd0  31 30 30 29 0d 24 c2 0d  f2 69 6e 66 6f 5f 62 61  |100).$...info_ba|
00004fe0  72 0d 24 cc 1c 63 75 72  5f 76 69 65 77 5f 6e 65  |r.$..cur_view_ne|
00004ff0  65 64 73 5f 75 70 64 61  74 65 25 3d b9 0d 24 d6  |eds_update%=..$.|
00005000  07 f7 20 85 0d 24 e0 05  e1 0d 24 ea 05 3a 0d 24  |.. ..$....$..:.$|
00005010  f4 19 dd 20 f2 69 6e 70  75 74 5f 76 69 65 77 5f  |... .input_view_|
00005020  61 6e 67 73 5f 33 44 0d  24 fe 07 ea 20 85 0d 25  |angs_3D.$... ..%|
00005030  08 25 ee 20 85 20 ea 20  f7 20 85 3a f2 65 72 72  |.%. . . . .:.err|
00005040  5f 62 61 72 28 b9 29 3a  f2 69 6e 66 6f 5f 62 61  |_bar(.):.info_ba|
00005050  72 3a e1 0d 25 12 3d f2  69 6e 70 75 74 28 22 61  |r:..%.=.input("a|
00005060  6e 67 6c 65 20 61 62 6f  75 74 20 58 20 61 78 69  |ngle about X axi|
00005070  73 22 2c 6f 61 6e 67 25  28 63 75 72 5f 76 69 65  |s",oang%(cur_vie|
00005080  77 25 2c 30 29 2c 61 6e  67 5f 73 63 61 6c 65 29  |w%,0),ang_scale)|
00005090  0d 25 1c 0d f2 69 6e 66  6f 5f 62 61 72 0d 25 26  |.%...info_bar.%&|
000050a0  3d f2 69 6e 70 75 74 28  22 61 6e 67 6c 65 20 61  |=.input("angle a|
000050b0  62 6f 75 74 20 59 20 61  78 69 73 22 2c 6f 61 6e  |bout Y axis",oan|
000050c0  67 25 28 63 75 72 5f 76  69 65 77 25 2c 31 29 2c  |g%(cur_view%,1),|
000050d0  61 6e 67 5f 73 63 61 6c  65 29 0d 25 30 0d f2 69  |ang_scale).%0..i|
000050e0  6e 66 6f 5f 62 61 72 0d  25 3a 3d f2 69 6e 70 75  |nfo_bar.%:=.inpu|
000050f0  74 28 22 61 6e 67 6c 65  20 61 62 6f 75 74 20 5a  |t("angle about Z|
00005100  20 61 78 69 73 22 2c 6f  61 6e 67 25 28 63 75 72  | axis",oang%(cur|
00005110  5f 76 69 65 77 25 2c 32  29 2c 61 6e 67 5f 73 63  |_view%,2),ang_sc|
00005120  61 6c 65 29 0d 25 44 0d  f2 69 6e 66 6f 5f 62 61  |ale).%D..info_ba|
00005130  72 0d 25 4e 1c 63 75 72  5f 76 69 65 77 5f 6e 65  |r.%N.cur_view_ne|
00005140  65 64 73 5f 75 70 64 61  74 65 25 3d b9 0d 25 58  |eds_update%=..%X|
00005150  07 f7 20 85 0d 25 62 05  e1 0d 25 6c 05 3a 0d 25  |.. ..%b...%l.:.%|
00005160  76 15 dd 20 f2 69 6e 70  75 74 5f 6f 62 6a 5f 6f  |v.. .input_obj_o|
00005170  66 66 73 0d 25 80 07 ea  20 85 0d 25 8a 25 ee 20  |ffs.%... ..%.%. |
00005180  85 20 ea 20 f7 20 85 3a  f2 65 72 72 5f 62 61 72  |. . . .:.err_bar|
00005190  28 b9 29 3a f2 69 6e 66  6f 5f 62 61 72 3a e1 0d  |(.):.info_bar:..|
000051a0  25 94 36 f2 69 6e 70 75  74 28 22 58 20 6f 66 66  |%.6.input("X off|
000051b0  73 65 74 22 2c 73 65 6c  65 63 74 65 64 25 21 28  |set",selected%!(|
000051c0  73 75 62 6f 62 6a 5f 6f  66 66 73 65 74 2b 30 29  |subobj_offset+0)|
000051d0  2c 31 30 30 29 0d 25 9e  0d f2 69 6e 66 6f 5f 62  |,100).%...info_b|
000051e0  61 72 0d 25 a8 36 f2 69  6e 70 75 74 28 22 59 20  |ar.%.6.input("Y |
000051f0  6f 66 66 73 65 74 22 2c  73 65 6c 65 63 74 65 64  |offset",selected|
00005200  25 21 28 73 75 62 6f 62  6a 5f 6f 66 66 73 65 74  |%!(subobj_offset|
00005210  2b 34 29 2c 31 30 30 29  0d 25 b2 0d f2 69 6e 66  |+4),100).%...inf|
00005220  6f 5f 62 61 72 0d 25 bc  36 f2 69 6e 70 75 74 28  |o_bar.%.6.input(|
00005230  22 5a 20 6f 66 66 73 65  74 22 2c 73 65 6c 65 63  |"Z offset",selec|
00005240  74 65 64 25 21 28 73 75  62 6f 62 6a 5f 6f 66 66  |ted%!(subobj_off|
00005250  73 65 74 2b 38 29 2c 31  30 30 29 0d 25 c6 0d f2  |set+8),100).%...|
00005260  69 6e 66 6f 5f 62 61 72  0d 25 d0 18 76 69 65 77  |info_bar.%..view|
00005270  5f 6e 65 65 64 73 5f 75  70 64 61 74 65 25 3d b9  |_needs_update%=.|
00005280  0d 25 da 07 f7 20 85 0d  25 e4 05 e1 0d 25 ee 05  |.%... ..%....%..|
00005290  3a 0d 25 f8 15 dd 20 f2  69 6e 70 75 74 5f 6f 62  |:.%... .input_ob|
000052a0  6a 5f 61 6e 67 73 0d 26  02 07 ea 20 85 0d 26 0c  |j_angs.&... ..&.|
000052b0  25 ee 20 85 20 ea 20 f7  20 85 3a f2 65 72 72 5f  |%. . . . .:.err_|
000052c0  62 61 72 28 b9 29 3a f2  69 6e 66 6f 5f 62 61 72  |bar(.):.info_bar|
000052d0  3a e1 0d 26 16 45 f2 69  6e 70 75 74 28 22 61 6e  |:..&.E.input("an|
000052e0  67 6c 65 20 61 62 6f 75  74 20 58 20 61 78 69 73  |gle about X axis|
000052f0  22 2c 73 65 6c 65 63 74  65 64 25 21 28 73 75 62  |",selected%!(sub|
00005300  6f 62 6a 5f 61 6e 67 6c  65 2b 30 29 2c 61 6e 67  |obj_angle+0),ang|
00005310  5f 73 63 61 6c 65 29 0d  26 20 0d f2 69 6e 66 6f  |_scale).& ..info|
00005320  5f 62 61 72 0d 26 2a 45  f2 69 6e 70 75 74 28 22  |_bar.&*E.input("|
00005330  61 6e 67 6c 65 20 61 62  6f 75 74 20 59 20 61 78  |angle about Y ax|
00005340  69 73 22 2c 73 65 6c 65  63 74 65 64 25 21 28 73  |is",selected%!(s|
00005350  75 62 6f 62 6a 5f 61 6e  67 6c 65 2b 34 29 2c 61  |ubobj_angle+4),a|
00005360  6e 67 5f 73 63 61 6c 65  29 0d 26 34 0d f2 69 6e  |ng_scale).&4..in|
00005370  66 6f 5f 62 61 72 0d 26  3e 45 f2 69 6e 70 75 74  |fo_bar.&>E.input|
00005380  28 22 61 6e 67 6c 65 20  61 62 6f 75 74 20 5a 20  |("angle about Z |
00005390  61 78 69 73 22 2c 73 65  6c 65 63 74 65 64 25 21  |axis",selected%!|
000053a0  28 73 75 62 6f 62 6a 5f  61 6e 67 6c 65 2b 38 29  |(subobj_angle+8)|
000053b0  2c 61 6e 67 5f 73 63 61  6c 65 29 0d 26 48 0d f2  |,ang_scale).&H..|
000053c0  69 6e 66 6f 5f 62 61 72  0d 26 52 18 76 69 65 77  |info_bar.&R.view|
000053d0  5f 6e 65 65 64 73 5f 75  70 64 61 74 65 25 3d b9  |_needs_update%=.|
000053e0  0d 26 5c 07 f7 20 85 0d  26 66 05 e1 0d 26 70 05  |.&\.. ..&f...&p.|
000053f0  3a 0d 26 7a 13 dd 20 f2  69 6e 70 75 74 5f 76 65  |:.&z.. .input_ve|
00005400  72 74 65 78 0d 26 84 07  ea 20 85 0d 26 8e 25 ee  |rtex.&... ..&.%.|
00005410  20 85 20 ea 20 f7 20 85  3a f2 65 72 72 5f 62 61  | . . . .:.err_ba|
00005420  72 28 b9 29 3a f2 69 6e  66 6f 5f 62 61 72 3a e1  |r(.):.info_bar:.|
00005430  0d 26 98 4c f2 69 6e 70  75 74 28 22 76 65 72 74  |.&.L.input("vert|
00005440  65 78 20 58 22 2c 21 28  73 65 6c 65 63 74 65 64  |ex X",!(selected|
00005450  25 21 73 75 62 6f 62 6a  5f 74 79 70 65 2b 73 75  |%!subobj_type+su|
00005460  72 66 5f 63 6f 6f 72 64  73 2b 31 32 2a 76 65 72  |rf_coords+12*ver|
00005470  74 65 78 25 2b 30 29 2c  31 30 30 29 0d 26 a2 0d  |tex%+0),100).&..|
00005480  f2 69 6e 66 6f 5f 62 61  72 0d 26 ac 4c f2 69 6e  |.info_bar.&.L.in|
00005490  70 75 74 28 22 76 65 72  74 65 78 20 59 22 2c 21  |put("vertex Y",!|
000054a0  28 73 65 6c 65 63 74 65  64 25 21 73 75 62 6f 62  |(selected%!subob|
000054b0  6a 5f 74 79 70 65 2b 73  75 72 66 5f 63 6f 6f 72  |j_type+surf_coor|
000054c0  64 73 2b 31 32 2a 76 65  72 74 65 78 25 2b 34 29  |ds+12*vertex%+4)|
000054d0  2c 31 30 30 29 0d 26 b6  0d f2 69 6e 66 6f 5f 62  |,100).&...info_b|
000054e0  61 72 0d 26 c0 4c f2 69  6e 70 75 74 28 22 76 65  |ar.&.L.input("ve|
000054f0  72 74 65 78 20 5a 22 2c  21 28 73 65 6c 65 63 74  |rtex Z",!(select|
00005500  65 64 25 21 73 75 62 6f  62 6a 5f 74 79 70 65 2b  |ed%!subobj_type+|
00005510  73 75 72 66 5f 63 6f 6f  72 64 73 2b 31 32 2a 76  |surf_coords+12*v|
00005520  65 72 74 65 78 25 2b 38  29 2c 31 30 30 29 0d 26  |ertex%+8),100).&|
00005530  ca 0d f2 69 6e 66 6f 5f  62 61 72 0d 26 d4 18 76  |...info_bar.&..v|
00005540  69 65 77 5f 6e 65 65 64  73 5f 75 70 64 61 74 65  |iew_needs_update|
00005550  25 3d b9 0d 26 de 07 f7  20 85 0d 26 e8 05 e1 0d  |%=..&... ..&....|
00005560  26 f2 05 3a 0d 26 fc 1d  dd 20 f2 69 6e 70 75 74  |&..:.&... .input|
00005570  28 69 6e 70 24 2c f8 20  76 25 2c 73 63 61 6c 65  |(inp$,. v%,scale|
00005580  29 0d 27 06 07 ea 20 85  0d 27 10 1d ee 20 85 20  |).'... ..'... . |
00005590  ea 20 f7 20 85 3a f2 65  72 72 5f 62 61 72 28 b9  |. . .:.err_bar(.|
000055a0  29 3a 87 3a e1 0d 27 1a  05 ee 0d 27 24 24 f1 8a  |):.:..'....'$$..|
000055b0  30 2c 32 29 89 36 30 8a  30 2c 32 29 22 45 6e 74  |0,2).60.0,2)"Ent|
000055c0  65 72 20 22 69 6e 70 24  3b 22 3a 20 22 3b 0d 27  |er "inp$;": ";.'|
000055d0  2e 0a 2a 46 58 20 31 35  0d 27 38 1a f2 69 6e 73  |..*FX 15.'8..ins|
000055e0  28 a4 66 6c 6f 61 74 28  76 25 2f 73 63 61 6c 65  |(.float(v%/scale|
000055f0  29 29 0d 27 42 08 e8 22  22 76 0d 27 4c 0e 76 25  |)).'B..""v.'L.v%|
00005600  3d 76 2a 73 63 61 6c 65  0d 27 56 05 87 0d 27 60  |=v*scale.'V...'`|
00005610  07 f7 20 85 0d 27 6a 05  e1 0d 27 74 05 3a 0d 27  |.. ..'j...'t.:.'|
00005620  7e 13 dd 20 a4 65 64 69  74 69 6e 67 5f 73 75 72  |~.. .editing_sur|
00005630  66 0d 27 88 17 e7 20 73  65 6c 65 63 74 65 64 25  |f.'... selected%|
00005640  3d 2d 31 20 8c 20 3d a3  0d 27 92 2a 3d 28 73 65  |=-1 . =..'.*=(se|
00005650  6c 65 63 74 65 64 25 21  73 75 62 6f 62 6a 5f 66  |lected%!subobj_f|
00005660  6c 61 67 73 20 80 20 62  69 74 5f 73 75 72 66 29  |lags . bit_surf)|
00005670  3e 30 0d 27 9c 05 3a 0d  27 a6 14 dd 20 f2 75 70  |>0.'..:.'... .up|
00005680  64 61 74 65 5f 62 6f 75  6e 64 73 0d 27 b0 38 e7  |date_bounds.'.8.|
00005690  20 63 75 72 5f 6f 62 6a  25 3c 3e 30 20 c8 99 20  | cur_obj%<>0 .. |
000056a0  22 42 41 55 33 44 5f 43  61 6c 63 42 6f 75 6e 64  |"BAU3D_CalcBound|
000056b0  73 22 2c 6f 62 6a 21 28  34 2a 63 75 72 5f 6f 62  |s",obj!(4*cur_ob|
000056c0  6a 25 29 0d 27 ba 05 e1  0d 27 c4 05 3a 0d 27 ce  |j%).'....'..:.'.|
000056d0  21 dd 20 f2 6f 62 6a 6c  69 73 74 5f 63 6c 69 63  |!. .objlist_clic|
000056e0  6b 28 6d 78 25 2c 6d 79  25 2c 6d 62 25 29 0d 27  |k(mx%,my%,mb%).'|
000056f0  d8 0b ea 20 78 25 2c 79  25 0d 27 e2 14 79 25 3d  |... x%,y%.'..y%=|
00005700  33 31 2d 28 6d 79 25 20  81 20 33 32 29 0d 27 ec  |31-(my% . 32).'.|
00005710  0f 78 25 3d 6d 78 25 20  81 20 31 36 0d 27 f6 0c  |.x%=mx% . 16.'..|
00005720  e7 20 79 25 3d 32 20 8c  0d 28 00 25 20 e7 20 78  |. y%=2 ..(.% . x|
00005730  25 3e 3d 36 39 20 80 20  78 25 3c 37 37 20 80 20  |%>=69 . x%<77 . |
00005740  6f 62 6a 5f 66 69 72 73  74 3e 30 20 8c 0d 28 0a  |obj_first>0 ..(.|
00005750  12 20 20 6f 62 6a 5f 66  69 72 73 74 2d 3d 31 0d  |.  obj_first-=1.|
00005760  28 14 2e 20 20 c8 93 20  36 36 2a 31 36 2c 34 2a  |(..  .. 66*16,4*|
00005770  33 32 2c 31 34 2a 31 36  2c 32 34 2a 33 32 2d 34  |32,14*16,24*32-4|
00005780  20 b8 20 36 36 2a 31 36  2c 33 2a 33 32 0d 28 1e  | . 66*16,3*32.(.|
00005790  23 20 20 f2 6c 69 73 74  6f 62 6a 28 6f 62 6a 5f  |#  .listobj(obj_|
000057a0  66 69 72 73 74 2c 6f 62  6a 5f 66 69 72 73 74 29  |first,obj_first)|
000057b0  0d 28 28 06 20 cd 0d 28  32 05 cc 0d 28 3c 0e 20  |.((. ..(2...(<. |
000057c0  e7 20 79 25 3d 33 30 20  8c 0d 28 46 2f 20 20 e7  |. y%=30 ..(F/  .|
000057d0  20 78 25 3e 3d 36 39 20  80 20 78 25 3c 37 37 20  | x%>=69 . x%<77 |
000057e0  80 20 6f 62 6a 5f 66 69  72 73 74 2b 32 35 3c 6f  |. obj_first+25<o|
000057f0  62 6a 65 63 74 73 20 8c  0d 28 50 13 20 20 20 6f  |bjects ..(P.   o|
00005800  62 6a 5f 66 69 72 73 74  2b 3d 31 0d 28 5a 2f 20  |bj_first+=1.(Z/ |
00005810  20 20 c8 93 20 36 36 2a  31 36 2c 33 2a 33 32 2c  |  .. 66*16,3*32,|
00005820  31 34 2a 31 36 2c 32 34  2a 33 32 2d 34 20 b8 20  |14*16,24*32-4 . |
00005830  36 36 2a 31 36 2c 34 2a  33 32 0d 28 64 2a 20 20  |66*16,4*32.(d*  |
00005840  20 f2 6c 69 73 74 6f 62  6a 28 6f 62 6a 5f 66 69  | .listobj(obj_fi|
00005850  72 73 74 2b 32 34 2c 6f  62 6a 5f 66 69 72 73 74  |rst+24,obj_first|
00005860  2b 32 34 29 0d 28 6e 07  20 20 cd 0d 28 78 06 20  |+24).(n.  ..(x. |
00005870  cc 0d 28 82 0f 20 20 e7  20 6d 62 25 3d 32 20 8c  |..(..  . mb%=2 .|
00005880  0d 28 8c 19 20 20 20 e7  20 79 25 3e 3d 34 20 80  |.(..   . y%>=4 .|
00005890  20 79 25 3c 3d 32 38 20  8c 0d 28 96 23 20 20 20  | y%<=28 ..(.#   |
000058a0  20 f2 73 65 6c 65 63 74  5f 6f 62 6a 28 6f 62 6a  | .select_obj(obj|
000058b0  5f 66 69 72 73 74 2b 79  25 2d 34 29 0d 28 a0 15  |_first+y%-4).(..|
000058c0  20 20 20 20 f2 6c 69 73  74 5f 6f 62 6a 65 63 74  |    .list_object|
000058d0  73 0d 28 aa 1c 20 20 20  20 76 69 65 77 5f 6e 65  |s.(..    view_ne|
000058e0  65 64 73 5f 75 70 64 61  74 65 25 3d b9 0d 28 b4  |eds_update%=..(.|
000058f0  08 20 20 20 cd 0d 28 be  07 20 20 cd 0d 28 c8 06  |.   ..(..  ..(..|
00005900  20 cd 0d 28 d2 05 cd 0d  28 dc 05 e1 0d 28 e6 05  | ..(....(....(..|
00005910  3a 0d 28 f0 1d dd 20 f2  74 72 79 5f 6e 65 77 5f  |:.(... .try_new_|
00005920  70 61 6e 65 6c 28 6d 78  25 2c 6d 79 25 29 0d 28  |panel(mx%,my%).(|
00005930  fa 08 ea 20 69 25 0d 29  04 0e e3 20 69 25 3d 30  |... i%.)... i%=0|
00005940  20 b8 20 33 0d 29 0e 67  20 e7 20 6d 78 25 3e 3d  | . 3.).g . mx%>=|
00005950  70 61 6e 65 6c 5f 78 30  25 28 69 25 29 20 80 20  |panel_x0%(i%) . |
00005960  6d 78 25 3c 70 61 6e 65  6c 5f 78 31 25 28 69 25  |mx%<panel_x1%(i%|
00005970  29 20 80 20 6d 79 25 3e  3d 70 61 6e 65 6c 5f 79  |) . my%>=panel_y|
00005980  30 25 28 69 25 29 20 80  20 6d 79 25 3c 70 61 6e  |0%(i%) . my%<pan|
00005990  65 6c 5f 79 31 25 28 69  25 29 20 f2 73 65 6c 65  |el_y1%(i%) .sele|
000059a0  63 74 5f 76 69 65 77 28  69 25 29 0d 29 18 05 ed  |ct_view(i%).)...|
000059b0  0d 29 22 05 e1 0d 29 2c  05 3a 0d 29 36 16 dd 20  |.)"...),.:.)6.. |
000059c0  f2 73 65 6c 65 63 74 5f  76 69 65 77 28 76 25 29  |.select_view(v%)|
000059d0  0d 29 40 10 63 75 72 5f  76 69 65 77 25 3d 76 25  |.)@.cur_view%=v%|
000059e0  0d 29 4a 10 73 65 6c 65  63 74 65 64 25 3d 2d 31  |.)J.selected%=-1|
000059f0  0d 29 54 10 f2 73 68 6f  77 5f 70 61 6e 65 6c 73  |.)T..show_panels|
00005a00  0d 29 5e 1d f2 73 65 74  5f 69 6e 66 6f 5f 6d 6f  |.)^..set_info_mo|
00005a10  64 65 28 63 75 72 5f 76  69 65 77 25 29 0d 29 68  |de(cur_view%).)h|
00005a20  05 e1 0d 29 72 05 3a 0d  29 7c 19 dd 20 a4 66 69  |...)r.:.)|.. .fi|
00005a30  6e 64 5f 65 6c 65 6d 28  61 24 28 29 2c 62 24 29  |nd_elem(a$(),b$)|
00005a40  0d 29 86 08 ea 20 69 25  0d 29 90 08 69 25 3d 30  |.)... i%.)..i%=0|
00005a50  0d 29 9a 11 c8 95 20 62  24 3c 3e 61 24 28 69 25  |.).... b$<>a$(i%|
00005a60  29 0d 29 a4 0a 20 69 25  2b 3d 31 0d 29 ae 05 ce  |).).. i%+=1.)...|
00005a70  0d 29 b8 07 3d 69 25 0d  29 c2 05 3a 0d 29 cc 18  |.)..=i%.)..:.)..|
00005a80  dd 20 f2 69 64 6c 65 28  6d 78 25 2c 6d 79 25 2c  |. .idle(mx%,my%,|
00005a90  6d 62 25 29 0d 29 d6 08  ea 20 69 25 0d 29 e0 12  |mb%).)... i%.)..|
00005aa0  c8 8e 20 63 75 72 5f 6d  6f 64 65 25 20 ca 0d 29  |.. cur_mode% ..)|
00005ab0  ea 0d 20 c9 20 33 2c 34  2c 35 3a 0d 29 f4 20 20  |.. . 3,4,5:.).  |
00005ac0  20 e7 20 63 75 72 5f 76  69 65 77 5f 6e 65 65 64  | . cur_view_need|
00005ad0  73 5f 75 70 64 61 74 65  25 20 8c 0d 29 fe 1d 20  |s_update% ..).. |
00005ae0  20 20 f2 73 68 6f 77 5f  70 61 6e 65 6c 28 63 75  |  .show_panel(cu|
00005af0  72 5f 76 69 65 77 25 29  0d 2a 08 1f 20 20 20 63  |r_view%).*..   c|
00005b00  75 72 5f 76 69 65 77 5f  6e 65 65 64 73 5f 75 70  |ur_view_needs_up|
00005b10  64 61 74 65 25 3d a3 0d  2a 12 07 20 20 cd 0d 2a  |date%=..*..  ..*|
00005b20  1c 1c 20 20 e7 20 76 69  65 77 5f 6e 65 65 64 73  |..  . view_needs|
00005b30  5f 75 70 64 61 74 65 25  20 8c 0d 2a 26 11 20 20  |_update% ..*&.  |
00005b40  20 e3 20 69 25 3d 30 20  b8 20 33 0d 2a 30 17 20  | . i%=0 . 3.*0. |
00005b50  20 20 20 f2 73 68 6f 77  5f 70 61 6e 65 6c 28 69  |   .show_panel(i|
00005b60  25 29 0d 2a 3a 08 20 20  20 ed 0d 2a 44 1b 20 20  |%).*:.   ..*D.  |
00005b70  20 76 69 65 77 5f 6e 65  65 64 73 5f 75 70 64 61  | view_needs_upda|
00005b80  74 65 25 3d a3 0d 2a 4e  07 20 20 cd 0d 2a 58 05  |te%=..*N.  ..*X.|
00005b90  cb 0d 2a 62 05 e1 0d 2a  6c 05 3a 0d 2a 76 12 dd  |..*b...*l.:.*v..|
00005ba0  20 f2 74 6f 67 67 6c 65  28 62 69 74 29 0d 2a 80  | .toggle(bit).*.|
00005bb0  15 e7 20 73 65 6c 65 63  74 65 64 25 3c 3e 2d 31  |.. selected%<>-1|
00005bc0  20 8c 0d 2a 8a 38 20 73  65 6c 65 63 74 65 64 25  | ..*.8 selected%|
00005bd0  21 73 75 62 6f 62 6a 5f  66 6c 61 67 73 3d 73 65  |!subobj_flags=se|
00005be0  6c 65 63 74 65 64 25 21  73 75 62 6f 62 6a 5f 66  |lected%!subobj_f|
00005bf0  6c 61 67 73 20 82 20 62  69 74 0d 2a 94 0e 20 f2  |lags . bit.*.. .|
00005c00  69 6e 66 6f 5f 62 61 72  0d 2a 9e 19 20 76 69 65  |info_bar.*.. vie|
00005c10  77 5f 6e 65 65 64 73 5f  75 70 64 61 74 65 25 3d  |w_needs_update%=|
00005c20  b9 0d 2a a8 05 cd 0d 2a  b2 05 e1 0d 2a bc 05 3a  |..*....*....*..:|
00005c30  0d 2a c6 19 dd 20 f2 6d  6f 64 65 5f 73 65 6c 65  |.*... .mode_sele|
00005c40  63 74 28 6d 6f 64 65 25  29 0d 2a d0 19 e7 20 6d  |ct(mode%).*... m|
00005c50  6f 64 65 25 3d 37 20 8c  20 f2 64 65 6c 65 74 65  |ode%=7 . .delete|
00005c60  3a e1 0d 2a da 24 e7 20  6d 6f 64 65 25 3d 38 20  |:..*.$. mode%=8 |
00005c70  8c 20 f2 74 6f 67 67 6c  65 28 62 69 74 5f 6d 65  |. .toggle(bit_me|
00005c80  72 67 65 29 3a e1 0d 2a  e4 25 e7 20 6d 6f 64 65  |rge):..*.%. mode|
00005c90  25 3d 39 20 8c 20 f2 74  6f 67 67 6c 65 28 62 69  |%=9 . .toggle(bi|
00005ca0  74 5f 63 6c 6f 73 65 64  29 3a e1 0d 2a ee 1d f2  |t_closed):..*...|
00005cb0  6d 6f 64 65 5f 64 65 73  65 6c 65 63 74 28 63 75  |mode_deselect(cu|
00005cc0  72 5f 6d 6f 64 65 25 29  0d 2a f8 13 63 75 72 5f  |r_mode%).*..cur_|
00005cd0  6d 6f 64 65 25 3d 6d 6f  64 65 25 0d 2b 02 1c f2  |mode%=mode%.+...|
00005ce0  73 68 6f 77 5f 63 6f 6d  6d 61 6e 64 28 63 75 72  |show_command(cur|
00005cf0  5f 6d 6f 64 65 25 29 0d  2b 0c 10 73 65 6c 65 63  |_mode%).+..selec|
00005d00  74 65 64 25 3d 2d 31 0d  2b 16 12 c8 8e 20 63 75  |ted%=-1.+.... cu|
00005d10  72 5f 6d 6f 64 65 25 20  ca 0d 2b 20 09 20 c9 20  |r_mode% ..+ . . |
00005d20  30 3a 0d 2b 2a 0a 20 20  f2 63 6c 73 0d 2b 34 10  |0:.+*.  .cls.+4.|
00005d30  20 20 f2 63 61 74 61 6c  6f 67 75 65 0d 2b 3e 09  |  .catalogue.+>.|
00005d40  20 c9 20 31 3a 0d 2b 48  0a 20 20 f2 63 6c 73 0d  | . 1:.+H.  .cls.|
00005d50  2b 52 10 20 20 f2 63 61  74 61 6c 6f 67 75 65 0d  |+R.  .catalogue.|
00005d60  2b 5c 09 20 c9 20 32 3a  0d 2b 66 0a 20 20 f2 63  |+\. . 2:.+f.  .c|
00005d70  6c 73 0d 2b 70 10 20 20  f2 63 61 74 61 6c 6f 67  |ls.+p.  .catalog|
00005d80  75 65 0d 2b 7a 0b 20 20  f2 73 61 76 65 0d 2b 84  |ue.+z.  .save.+.|
00005d90  09 20 c9 20 33 3a 0d 2b  8e 0a 20 20 f2 63 6c 73  |. . 3:.+..  .cls|
00005da0  0d 2b 98 1f 20 20 f2 73  65 74 5f 69 6e 66 6f 5f  |.+..  .set_info_|
00005db0  6d 6f 64 65 28 63 75 72  5f 76 69 65 77 25 29 0d  |mode(cur_view%).|
00005dc0  2b a2 12 20 20 f2 73 68  6f 77 5f 70 61 6e 65 6c  |+..  .show_panel|
00005dd0  73 0d 2b ac 13 20 20 f2  6c 69 73 74 5f 6f 62 6a  |s.+..  .list_obj|
00005de0  65 63 74 73 0d 2b b6 0f  20 20 f2 69 6e 66 6f 5f  |ects.+..  .info_|
00005df0  62 61 72 0d 2b c0 09 20  c9 20 34 3a 0d 2b ca 15  |bar.+.. . 4:.+..|
00005e00  20 20 e7 20 63 75 72 5f  6f 62 6a 25 3d 2d 31 20  |  . cur_obj%=-1 |
00005e10  8c 0d 2b d4 16 20 20 20  f2 6d 6f 64 65 5f 73 65  |..+..   .mode_se|
00005e20  6c 65 63 74 28 33 29 0d  2b de 07 20 20 cc 0d 2b  |lect(3).+..  ..+|
00005e30  e8 0b 20 20 20 f2 63 6c  73 0d 2b f2 20 20 20 20  |..   .cls.+.    |
00005e40  f2 73 65 74 5f 69 6e 66  6f 5f 6d 6f 64 65 28 63  |.set_info_mode(c|
00005e50  75 72 5f 76 69 65 77 25  29 0d 2b fc 13 20 20 20  |ur_view%).+..   |
00005e60  f2 73 68 6f 77 5f 70 61  6e 65 6c 73 0d 2c 06 19  |.show_panels.,..|
00005e70  20 20 20 72 67 62 25 28  29 3d 26 46 46 2c 26 46  |   rgb%()=&FF,&F|
00005e80  46 2c 26 46 46 0d 2c 10  17 20 20 20 f2 73 68 6f  |F,&FF.,..   .sho|
00005e90  77 5f 63 6f 6c 6f 75 72  5f 62 61 72 0d 2c 1a 10  |w_colour_bar.,..|
00005ea0  20 20 20 f2 69 6e 66 6f  5f 62 61 72 0d 2c 24 0e  |   .info_bar.,$.|
00005eb0  20 20 20 76 65 72 74 73  3d 30 0d 2c 2e 07 20 20  |   verts=0.,..  |
00005ec0  cd 0d 2c 38 09 20 c9 20  35 3a 0d 2c 42 17 20 20  |..,8. . 5:.,B.  |
00005ed0  f2 73 65 74 5f 69 6e 66  6f 5f 6d 6f 64 65 28 34  |.set_info_mode(4|
00005ee0  29 0d 2c 4c 0f 20 20 f2  69 6e 66 6f 5f 62 61 72  |).,L.  .info_bar|
00005ef0  0d 2c 56 09 20 c9 20 36  3a 0d 2c 60 0d 20 20 f2  |.,V. . 6:.,`.  .|
00005f00  63 72 65 61 74 65 0d 2c  6a 0f 20 20 f2 69 6e 66  |create.,j.  .inf|
00005f10  6f 5f 62 61 72 0d 2c 74  05 cb 0d 2c 7e 05 e1 0d  |o_bar.,t...,~...|
00005f20  2c 88 05 3a 0d 2c 92 1b  dd 20 f2 6d 6f 64 65 5f  |,..:.,... .mode_|
00005f30  64 65 73 65 6c 65 63 74  28 6d 6f 64 65 25 29 0d  |deselect(mode%).|
00005f40  2c 9c 08 ea 20 69 25 0d  2c a6 14 e7 20 63 75 72  |,... i%.,... cur|
00005f50  5f 6d 6f 64 65 25 3d 2d  31 20 e1 0d 2c b0 10 69  |_mode%=-1 ..,..i|
00005f60  25 3d 63 75 72 5f 6d 6f  64 65 25 0d 2c ba 10 63  |%=cur_mode%.,..c|
00005f70  75 72 5f 6d 6f 64 65 25  3d 2d 31 0d 2c c4 15 f2  |ur_mode%=-1.,...|
00005f80  73 68 6f 77 5f 63 6f 6d  6d 61 6e 64 28 69 25 29  |show_command(i%)|
00005f90  0d 2c ce 05 e1 0d 2c d8  05 3a 0d 2c e2 10 dd 20  |.,....,..:.,... |
00005fa0  f2 63 61 74 61 6c 6f 67  75 65 0d 2c ec 0f ea 20  |.catalogue.,... |
00005fb0  64 69 72 24 2c 63 61 74  25 0d 2c f6 12 64 69 72  |dir$,cat%.,..dir|
00005fc0  24 3d 22 4f 62 6a 65 63  74 73 22 0d 2d 00 20 c8  |$="Objects".-. .|
00005fd0  99 20 22 42 41 55 33 44  5f 4d 61 6c 6c 6f 63 22  |. "BAU3D_Malloc"|
00005fe0  2c 32 35 36 20 b8 20 63  61 74 25 0d 2d 0a 08 70  |,256 . cat%.-..p|
00005ff0  25 3d 30 0d 2d 14 0c 66  69 6c 65 73 25 3d 30 0d  |%=0.-..files%=0.|
00006000  2d 1e 0b 64 6f 6e 65 25  3d a3 0d 2d 28 0e c8 95  |-..done%=..-(...|
00006010  20 ac 20 64 6f 6e 65 25  0d 2d 32 38 20 c8 99 20  | . done%.-28 .. |
00006020  22 4f 53 5f 47 42 50 42  22 2c 39 2c 64 69 72 24  |"OS_GBPB",9,dir$|
00006030  2c 63 61 74 25 2c 31 2c  70 25 2c 32 35 36 2c 22  |,cat%,1,p%,256,"|
00006040  2a 22 20 b8 20 2c 2c 2c  72 65 61 64 25 2c 70 25  |*" . ,,,read%,p%|
00006050  0d 2d 3c 1a 20 64 6f 6e  65 25 3d 72 65 61 64 25  |.-<. done%=read%|
00006060  3d 30 20 84 20 70 25 3d  2d 31 0d 2d 46 10 20 e7  |=0 . p%=-1.-F. .|
00006070  20 ac 20 64 6f 6e 65 25  20 8c 0d 2d 50 0a 20 20  | . done% ..-P.  |
00006080  69 25 3d 30 0d 2d 5a 13  20 20 c8 95 20 63 61 74  |i%=0.-Z.  .. cat|
00006090  25 3f 69 25 3e 33 32 0d  2d 64 0c 20 20 20 69 25  |%?i%>32.-d.   i%|
000060a0  2b 3d 31 0d 2d 6e 07 20  20 ce 0d 2d 78 10 20 20  |+=1.-n.  ..-x.  |
000060b0  63 61 74 25 3f 69 25 3d  31 33 0d 2d 82 19 20 20  |cat%?i%=13.-..  |
000060c0  66 69 6c 65 24 28 66 69  6c 65 73 25 29 3d 24 63  |file$(files%)=$c|
000060d0  61 74 25 0d 2d 8c 0f 20  20 66 69 6c 65 73 25 2b  |at%.-..  files%+|
000060e0  3d 31 0d 2d 96 06 20 cd  0d 2d a0 05 ce 0d 2d aa  |=1.-.. ..-....-.|
000060f0  10 e7 20 66 69 6c 65 73  25 3d 30 20 8c 0d 2d b4  |.. files%=0 ..-.|
00006100  1e 20 f2 77 61 72 6e 28  22 4e 6f 20 66 69 6c 65  |. .warn("No file|
00006110  73 20 74 6f 20 6c 6f 61  64 22 29 0d 2d be 14 20  |s to load").-.. |
00006120  f2 6d 6f 64 65 5f 73 65  6c 65 63 74 28 33 29 0d  |.mode_select(3).|
00006130  2d c8 05 cc 0d 2d d2 16  20 e3 20 69 25 3d 30 20  |-....-.. . i%=0 |
00006140  b8 20 66 69 6c 65 73 25  2d 31 0d 2d dc 2d 20 20  |. files%-1.-.-  |
00006150  f1 20 8a 31 32 2a 28 69  25 20 83 20 36 29 2c 33  |. .12*(i% . 6),3|
00006160  2b 32 2a 28 69 25 20 81  20 36 29 29 3b 66 69 6c  |+2*(i% . 6));fil|
00006170  65 24 28 69 25 29 3b 0d  2d e6 06 20 ed 0d 2d f0  |e$(i%);.-.. ..-.|
00006180  05 cd 0d 2d fa 18 c8 99  20 22 42 41 55 33 44 5f  |...-.... "BAU3D_|
00006190  46 72 65 65 22 2c 63 61  74 25 0d 2e 04 05 e1 0d  |Free",cat%......|
000061a0  2e 0e 05 3a 0d 2e 18 1a  dd 20 a4 77 68 69 63 68  |...:..... .which|
000061b0  5f 66 69 6c 65 28 6d 78  25 2c 6d 79 25 29 0d 2e  |_file(mx%,my%)..|
000061c0  22 20 ea 20 73 65 6c 65  63 74 25 2c 69 25 2c 78  |" . select%,i%,x|
000061d0  30 25 2c 78 31 25 2c 79  30 25 2c 79 31 25 0d 2e  |0%,x1%,y0%,y1%..|
000061e0  2c 0e 73 65 6c 65 63 74  25 3d 2d 31 0d 2e 36 15  |,.select%=-1..6.|
000061f0  e3 20 69 25 3d 30 20 b8  20 66 69 6c 65 73 25 2d  |. i%=0 . files%-|
00006200  31 0d 2e 40 17 20 78 30  25 3d 31 32 2a 31 36 2a  |1..@. x0%=12*16*|
00006210  28 69 25 20 83 20 36 29  0d 2e 4a 1e 20 79 30 25  |(i% . 6)..J. y0%|
00006220  3d 31 30 32 34 2d 34 2a  33 32 2d 36 34 2a 28 69  |=1024-4*32-64*(i|
00006230  25 20 81 20 36 29 0d 2e  54 1c 20 78 31 25 3d 78  |% . 6)..T. x1%=x|
00006240  30 25 2b 31 36 2a a9 28  66 69 6c 65 24 28 69 25  |0%+16*.(file$(i%|
00006250  29 29 0d 2e 5e 0f 20 79  31 25 3d 79 30 25 2b 33  |))..^. y1%=y0%+3|
00006260  32 0d 2e 68 45 20 e7 20  6d 78 25 3e 3d 78 30 25  |2..hE . mx%>=x0%|
00006270  20 80 20 6d 78 25 3c 3d  78 31 25 20 80 20 6d 79  | . mx%<=x1% . my|
00006280  25 3e 3d 79 30 25 20 80  20 6d 79 25 3c 3d 79 31  |%>=y0% . my%<=y1|
00006290  25 20 73 65 6c 65 63 74  25 3d 69 25 3a 69 25 3d  |% select%=i%:i%=|
000062a0  66 69 6c 65 73 25 0d 2e  72 05 ed 0d 2e 7c 0c 3d  |files%..r....|.=|
000062b0  73 65 6c 65 63 74 25 0d  2e 86 05 3a 0d 2e 90 12  |select%....:....|
000062c0  dd 20 f2 77 61 72 6e 28  77 61 72 6e 24 29 0d 2e  |. .warn(warn$)..|
000062d0  9a 05 e1 0d 2e a4 05 3a  0d 2e ae 0a dd 20 f2 63  |.......:..... .c|
000062e0  6c 73 0d 2e b8 11 f2 67  63 6f 6c 28 62 6c 61 63  |ls.....gcol(blac|
000062f0  6b 25 29 0d 2e c2 1a c8  93 20 c8 90 20 30 2c 30  |k%)...... .. 0,0|
00006300  2c 31 32 37 39 2c 31 30  32 34 2d 34 38 0d 2e cc  |,1279,1024-48...|
00006310  05 e1 0d 2e d6 05 3a 0d  2e e0 10 dd 20 f2 63 6c  |......:..... .cl|
00006320  73 5f 72 69 67 68 74 0d  2e ea 11 f2 67 63 6f 6c  |s_right.....gcol|
00006330  28 62 6c 61 63 6b 25 29  0d 2e f4 1f c8 93 20 c8  |(black%)...... .|
00006340  90 20 36 34 2a 31 36 2c  30 2c 31 36 2a 31 36 2c  |. 64*16,0,16*16,|
00006350  31 30 32 34 2d 34 38 0d  2e fe 05 e1 0d 2f 08 05  |1024-48....../..|
00006360  3a 0d 2f 12 1a dd 20 f2  73 65 74 5f 69 6e 66 6f  |:./... .set_info|
00006370  5f 6d 6f 64 65 28 6e 65  77 25 29 0d 2f 1c 18 e7  |_mode(new%)./...|
00006380  20 6e 65 77 25 3c 3e 69  6e 66 6f 5f 6d 6f 64 65  | new%<>info_mode|
00006390  25 20 8c 0d 2f 26 14 20  69 6e 66 6f 5f 6d 6f 64  |% ../&. info_mod|
000063a0  65 25 3d 6e 65 77 25 0d  2f 30 10 20 f1 8a 30 2c  |e%=new%./0. ..0,|
000063b0  33 31 29 89 37 39 3b 0d  2f 3a 0e 20 f2 69 6e 66  |31).79;./:. .inf|
000063c0  6f 5f 62 61 72 0d 2f 44  05 cd 0d 2f 4e 05 e1 0d  |o_bar./D.../N...|
000063d0  2f 58 05 3a 0d 2f 62 0f  dd 20 f2 69 6e 66 6f 5f  |/X.:./b.. .info_|
000063e0  62 61 72 0d 2f 6c 19 f1  8a 30 2c 33 31 29 89 37  |bar./l...0,31).7|
000063f0  39 3b 8a 30 2c 32 29 3b  89 36 30 3b 0d 2f 76 0e  |9;.0,2);.60;./v.|
00006400  f2 73 68 6f 77 5f 6e 61  6d 65 0d 2f 80 0f f2 73  |.show_name./...s|
00006410  68 6f 77 5f 66 6c 61 67  73 0d 2f 8a 13 c8 8e 20  |how_flags./.... |
00006420  69 6e 66 6f 5f 6d 6f 64  65 25 20 ca 0d 2f 94 0f  |info_mode% ../..|
00006430  20 c9 20 30 2c 31 2c 32  2c 33 3a 0d 2f 9e 25 20  | . 0,1,2,3:./.% |
00006440  20 f2 73 68 6f 77 5f 6f  72 69 67 5f 61 6e 64 5f  | .show_orig_and_|
00006450  61 6e 67 73 28 69 6e 66  6f 5f 6d 6f 64 65 25 29  |angs(info_mode%)|
00006460  0d 2f a8 09 20 c9 20 34  3a 0d 2f b2 10 20 20 f2  |./.. . 4:./..  .|
00006470  73 68 6f 77 5f 7a 6f 6f  6d 0d 2f bc 09 20 c9 20  |show_zoom./.. . |
00006480  35 3a 0d 2f c6 13 20 20  f2 73 68 6f 77 5f 6f 62  |5:./..  .show_ob|
00006490  6a 5f 70 6f 73 0d 2f d0  05 cb 0d 2f da 05 e1 0d  |j_pos./..../....|
000064a0  2f e4 05 3a 0d 2f ee 1d  dd 20 f2 73 68 6f 77 5f  |/..:./... .show_|
000064b0  6f 72 69 67 5f 61 6e 64  5f 61 6e 67 73 28 70 25  |orig_and_angs(p%|
000064c0  29 0d 2f f8 14 ea 20 69  25 2c 78 25 2c 76 25 2c  |)./... i%,x%,v%,|
000064d0  76 24 2c 6e 25 0d 30 02  16 e7 20 70 25 3d 30 20  |v$,n%.0... p%=0 |
000064e0  6e 25 3d 35 20 8b 20 6e  25 3d 31 0d 30 0c 0f e3  |n%=5 . n%=1.0...|
000064f0  20 69 25 3d 30 20 b8 20  6e 25 0d 30 16 3f 20 e7  | i%=0 . n%.0.? .|
00006500  20 69 25 3c 33 20 76 25  3d 6f 78 79 7a 25 28 70  | i%<3 v%=oxyz%(p|
00006510  25 2c 69 25 29 20 81 20  31 30 30 20 8b 20 76 25  |%,i%) . 100 . v%|
00006520  3d 6f 61 6e 67 25 28 70  25 2c 69 25 2d 33 29 2f  |=oang%(p%,i%-3)/|
00006530  61 6e 67 5f 73 63 61 6c  65 0d 30 20 0d 20 78 25  |ang_scale.0 . x%|
00006540  3d 31 30 2a 69 25 0d 30  2a 11 20 e7 20 69 25 3e  |=10*i%.0*. . i%>|
00006550  32 20 78 25 2b 3d 35 0d  30 34 17 20 f2 6c 65 66  |2 x%+=5.04. .lef|
00006560  74 5f 61 72 72 6f 77 28  78 25 2c 33 31 29 0d 30  |t_arrow(x%,31).0|
00006570  3e 1a 20 f2 72 69 67 68  74 5f 61 72 72 6f 77 28  |>. .right_arrow(|
00006580  78 25 2b 38 2c 33 31 29  0d 30 48 0d 20 76 24 3d  |x%+8,31).0H. v$=|
00006590  c3 28 76 25 29 0d 30 52  1f 20 f1 8a 78 25 2b 34  |.(v%).0R. ..x%+4|
000065a0  2d 28 a9 28 76 24 29 20  81 20 32 29 2c 33 31 29  |-(.(v$) . 2),31)|
000065b0  3b 76 24 3b 0d 30 5c 05  ed 0d 30 66 05 e1 0d 30  |;v$;.0\...0f...0|
000065c0  70 05 3a 0d 30 7a 10 dd  20 f2 73 68 6f 77 5f 6e  |p.:.0z.. .show_n|
000065d0  61 6d 65 0d 30 84 0a ea  20 6e 61 6d 65 0d 30 8e  |ame.0... name.0.|
000065e0  14 e7 20 63 75 72 5f 6f  62 6a 25 3c 3e 2d 31 20  |.. cur_obj%<>-1 |
000065f0  8c 0d 30 98 26 20 6e 61  6d 65 3d 21 28 6f 62 6a  |..0.& name=!(obj|
00006600  21 28 34 2a 63 75 72 5f  6f 62 6a 25 29 2b 6f 62  |!(4*cur_obj%)+ob|
00006610  6a 5f 6e 61 6d 65 29 0d  30 a2 35 20 e7 20 6e 61  |j_name).0.5 . na|
00006620  6d 65 3c 3e 30 20 f1 8a  30 2c 32 29 22 45 64 69  |me<>0 ..0,2)"Edi|
00006630  74 69 6e 67 3a 20 22 3b  3a c8 99 20 22 4f 53 5f  |ting: ";:.. "OS_|
00006640  57 72 69 74 65 30 22 2c  6e 61 6d 65 0d 30 ac 05  |Write0",name.0..|
00006650  cd 0d 30 b6 05 e1 0d 30  c0 05 3a 0d 30 ca 11 dd  |..0....0..:.0...|
00006660  20 f2 73 68 6f 77 5f 66  6c 61 67 73 0d 30 d4 15  | .show_flags.0..|
00006670  e7 20 73 65 6c 65 63 74  65 64 25 3c 3e 2d 31 20  |. selected%<>-1 |
00006680  8c 0d 30 de 3b 20 e7 20  28 73 65 6c 65 63 74 65  |..0.; . (selecte|
00006690  64 25 21 73 75 62 6f 62  6a 5f 66 6c 61 67 73 20  |d%!subobj_flags |
000066a0  80 20 62 69 74 5f 6d 65  72 67 65 29 20 f1 8a 34  |. bit_merge) ..4|
000066b0  38 2c 32 29 22 4d 45 52  47 45 22 3b 0d 30 e8 3d  |8,2)"MERGE";.0.=|
000066c0  20 e7 20 28 73 65 6c 65  63 74 65 64 25 21 73 75  | . (selected%!su|
000066d0  62 6f 62 6a 5f 66 6c 61  67 73 20 80 20 62 69 74  |bobj_flags . bit|
000066e0  5f 63 6c 6f 73 65 64 29  20 f1 8a 35 34 2c 32 29  |_closed) ..54,2)|
000066f0  22 43 4c 4f 53 45 44 22  3b 0d 30 f2 05 cd 0d 30  |"CLOSED";.0....0|
00006700  fc 05 e1 0d 31 06 05 3a  0d 31 10 10 dd 20 f2 73  |....1..:.1... .s|
00006710  68 6f 77 5f 7a 6f 6f 6d  0d 31 1a 08 ea 20 7a 24  |how_zoom.1... z$|
00006720  0d 31 24 26 7a 24 3d c3  28 7a 6f 6f 6d 25 20 81  |.1$&z$=.(zoom% .|
00006730  20 31 30 29 2b 22 2e 22  2b c3 28 7a 6f 6f 6d 25  | 10)+"."+.(zoom%|
00006740  20 83 20 31 30 29 0d 31  2e 15 f2 6c 65 66 74 5f  | . 10).1...left_|
00006750  61 72 72 6f 77 28 30 2c  33 31 29 0d 31 38 16 f2  |arrow(0,31).18..|
00006760  72 69 67 68 74 5f 61 72  72 6f 77 28 38 2c 33 31  |right_arrow(8,31|
00006770  29 0d 31 42 17 f1 8a 35  2d a9 28 7a 24 29 2f 32  |).1B...5-.(z$)/2|
00006780  2c 33 31 29 3b 7a 24 3b  0d 31 4c 05 e1 0d 31 56  |,31);z$;.1L...1V|
00006790  05 3a 0d 31 60 13 dd 20  f2 73 68 6f 77 5f 6f 62  |.:.1`.. .show_ob|
000067a0  6a 5f 70 6f 73 0d 31 6a  08 ea 20 69 25 0d 31 74  |j_pos.1j.. i%.1t|
000067b0  15 e7 20 73 65 6c 65 63  74 65 64 25 3c 3e 2d 31  |.. selected%<>-1|
000067c0  20 8c 0d 31 7e 2e 20 e7  20 28 73 65 6c 65 63 74  | ..1~. . (select|
000067d0  65 64 25 21 73 75 62 6f  62 6a 5f 66 6c 61 67 73  |ed%!subobj_flags|
000067e0  20 80 20 62 69 74 5f 73  75 72 66 29 3e 30 20 8c  | . bit_surf)>0 .|
000067f0  0d 31 88 15 20 20 e7 20  76 65 72 74 65 78 25 3c  |.1..  . vertex%<|
00006800  3e 2d 31 20 8c 0d 31 92  11 20 20 20 e3 20 69 25  |>-1 ..1..   . i%|
00006810  3d 30 20 b8 20 32 0d 31  9c 45 20 20 20 20 76 25  |=0 . 2.1.E    v%|
00006820  3d 21 28 73 65 6c 65 63  74 65 64 25 21 73 75 62  |=!(selected%!sub|
00006830  6f 62 6a 5f 74 79 70 65  2b 73 75 72 66 5f 63 6f  |obj_type+surf_co|
00006840  6f 72 64 73 2b 31 32 2a  76 65 72 74 65 78 25 2b  |ords+12*vertex%+|
00006850  34 2a 69 25 29 20 81 20  31 30 30 0d 31 a6 10 20  |4*i%) . 100.1.. |
00006860  20 20 20 78 25 3d 31 30  2a 69 25 0d 31 b0 1a 20  |   x%=10*i%.1.. |
00006870  20 20 20 f2 6c 65 66 74  5f 61 72 72 6f 77 28 78  |   .left_arrow(x|
00006880  25 2c 33 31 29 0d 31 ba  1d 20 20 20 20 f2 72 69  |%,31).1..    .ri|
00006890  67 68 74 5f 61 72 72 6f  77 28 78 25 2b 38 2c 33  |ght_arrow(x%+8,3|
000068a0  31 29 0d 31 c4 10 20 20  20 20 76 24 3d c3 28 76  |1).1..    v$=.(v|
000068b0  25 29 0d 31 ce 22 20 20  20 20 f1 8a 78 25 2b 34  |%).1."    ..x%+4|
000068c0  2d 28 a9 28 76 24 29 20  81 20 32 29 2c 33 31 29  |-(.(v$) . 2),31)|
000068d0  3b 76 24 3b 0d 31 d8 08  20 20 20 ed 0d 31 e2 07  |;v$;.1..   ..1..|
000068e0  20 20 cd 0d 31 ec 06 20  cc 0d 31 f6 10 20 20 e3  |  ..1.. ..1..  .|
000068f0  20 69 25 3d 30 20 b8 20  35 0d 32 00 6a 20 20 20  | i%=0 . 5.2.j   |
00006900  e7 20 69 25 3c 33 20 76  25 3d 28 73 65 6c 65 63  |. i%<3 v%=(selec|
00006910  74 65 64 25 21 28 73 75  62 6f 62 6a 5f 6f 66 66  |ted%!(subobj_off|
00006920  73 65 74 2b 34 2a 69 25  29 29 20 81 20 31 30 30  |set+4*i%)) . 100|
00006930  20 8b 20 76 25 3d 73 65  6c 65 63 74 65 64 25 21  | . v%=selected%!|
00006940  28 73 75 62 6f 62 6a 5f  61 6e 67 6c 65 2b 34 2a  |(subobj_angle+4*|
00006950  28 69 25 2d 33 29 29 20  81 20 61 6e 67 5f 73 63  |(i%-3)) . ang_sc|
00006960  61 6c 65 0d 32 0a 0f 20  20 20 78 25 3d 31 30 2a  |ale.2..   x%=10*|
00006970  69 25 0d 32 14 13 20 20  20 e7 20 69 25 3e 32 20  |i%.2..   . i%>2 |
00006980  78 25 2b 3d 35 0d 32 1e  19 20 20 20 f2 6c 65 66  |x%+=5.2..   .lef|
00006990  74 5f 61 72 72 6f 77 28  78 25 2c 33 31 29 0d 32  |t_arrow(x%,31).2|
000069a0  28 1c 20 20 20 f2 72 69  67 68 74 5f 61 72 72 6f  |(.   .right_arro|
000069b0  77 28 78 25 2b 38 2c 33  31 29 0d 32 32 0f 20 20  |w(x%+8,31).22.  |
000069c0  20 76 24 3d c3 28 76 25  29 0d 32 3c 21 20 20 20  | v$=.(v%).2<!   |
000069d0  f1 8a 78 25 2b 34 2d 28  a9 28 76 24 29 20 81 20  |..x%+4-(.(v$) . |
000069e0  32 29 2c 33 31 29 3b 76  24 3b 0d 32 46 07 20 20  |2),31);v$;.2F.  |
000069f0  ed 0d 32 50 06 20 cd 0d  32 5a 05 cd 0d 32 64 05  |..2P. ..2Z...2d.|
00006a00  e1 0d 32 6e 05 3a 0d 32  78 0f dd 20 f2 6c 6f 61  |..2n.:.2x.. .loa|
00006a10  64 28 66 24 29 0d 32 82  36 c8 99 20 22 42 41 55  |d(f$).2.6.. "BAU|
00006a20  33 44 5f 4c 6f 61 64 22  2c 66 24 2c 2c 6f 62 6a  |3D_Load",f$,,obj|
00006a30  2c 6d 61 78 20 b8 20 77  6f 72 6c 64 5f 68 61 6e  |,max . world_han|
00006a40  64 2c 2c 2c 6f 62 6a 65  63 74 73 0d 32 8c 0f 6f  |d,,,objects.2..o|
00006a50  62 6a 5f 66 69 72 73 74  3d 30 0d 32 96 05 e1 0d  |bj_first=0.2....|
00006a60  32 a0 05 3a 0d 32 aa 13  dd 20 f2 6c 69 73 74 5f  |2..:.2... .list_|
00006a70  6f 62 6a 65 63 74 73 0d  32 b4 24 f2 6c 69 73 74  |objects.2.$.list|
00006a80  6f 62 6a 28 6f 62 6a 5f  66 69 72 73 74 2c 6f 62  |obj(obj_first,ob|
00006a90  6a 5f 66 69 72 73 74 2b  32 34 29 0d 32 be 05 e1  |j_first+24).2...|
00006aa0  0d 32 c8 05 3a 0d 32 d2  19 dd 20 f2 6c 69 73 74  |.2..:.2... .list|
00006ab0  6f 62 6a 28 66 72 6f 6d  25 2c 74 6f 25 29 0d 32  |obj(from%,to%).2|
00006ac0  dc 08 ea 20 69 25 0d 32  e6 11 e7 20 6f 62 6a 65  |... i%.2... obje|
00006ad0  63 74 73 3d 30 20 e1 0d  32 f0 1f 66 72 6f 6d 25  |cts=0 ..2..from%|
00006ae0  3d a4 6d 61 78 28 66 72  6f 6d 25 2c 6f 62 6a 5f  |=.max(from%,obj_|
00006af0  66 69 72 73 74 29 0d 32  fa 1e 74 6f 25 3d a4 6d  |first).2..to%=.m|
00006b00  69 6e 28 74 6f 25 2c 6f  62 6a 5f 66 69 72 73 74  |in(to%,obj_first|
00006b10  2b 32 34 29 0d 33 04 11  e7 20 66 72 6f 6d 25 3e  |+24).3... from%>|
00006b20  74 6f 25 20 e1 0d 33 0e  14 e3 20 69 25 3d 66 72  |to% ..3... i%=fr|
00006b30  6f 6d 25 20 b8 20 74 6f  25 0d 33 18 14 20 e7 20  |om% . to%.3.. . |
00006b40  69 25 3d 63 75 72 5f 6f  62 6a 25 20 8c 0d 33 22  |i%=cur_obj% ..3"|
00006b50  16 20 20 f2 63 6f 6c 6f  75 72 28 79 65 6c 6c 6f  |.  .colour(yello|
00006b60  77 25 29 0d 33 2c 15 20  20 f2 63 6f 6c 6f 75 72  |w%).3,.  .colour|
00006b70  62 28 62 6c 75 65 25 29  0d 33 36 06 20 cc 0d 33  |b(blue%).36. ..3|
00006b80  40 0a 20 20 ef 20 32 30  0d 33 4a 06 20 cd 0d 33  |@.  . 20.3J. ..3|
00006b90  54 1a 20 f1 8a 36 36 2c  69 25 2d 6f 62 6a 5f 66  |T. ..66,i%-obj_f|
00006ba0  69 72 73 74 2b 34 29 3b  0d 33 5e 14 20 e7 20 69  |irst+4);.3^. . i|
00006bb0  25 3e 3d 6f 62 6a 65 63  74 73 20 8c 0d 33 68 0b  |%>=objects ..3h.|
00006bc0  20 20 f1 89 31 34 3b 0d  33 72 06 20 cc 0d 33 7c  |  ..14;.3r. ..3||
00006bd0  32 20 20 f1 c0 a4 67 65  74 5f 73 74 72 69 6e 67  |2  ...get_string|
00006be0  28 21 28 6f 62 6a 21 28  34 2a 69 25 29 2b 34 29  |(!(obj!(4*i%)+4)|
00006bf0  29 2b c4 31 34 2c 22 20  22 29 2c 31 34 29 3b 0d  |)+.14," "),14);.|
00006c00  33 86 06 20 cd 0d 33 90  05 ed 0d 33 9a 13 f2 75  |3.. ..3....3...u|
00006c10  70 5f 61 72 72 6f 77 28  36 39 2c 32 29 0d 33 a4  |p_arrow(69,2).3.|
00006c20  16 f2 64 6f 77 6e 5f 61  72 72 6f 77 28 36 39 2c  |..down_arrow(69,|
00006c30  33 30 29 0d 33 ae 08 ef  20 32 30 0d 33 b8 05 e1  |30).3... 20.3...|
00006c40  0d 33 c2 05 3a 0d 33 cc  16 dd 20 f2 73 68 6f 77  |.3..:.3... .show|
00006c50  5f 63 6f 6c 6f 75 72 5f  62 61 72 0d 33 d6 08 ea  |_colour_bar.3...|
00006c60  20 69 25 0d 33 e0 08 ef  20 32 36 0d 33 ea 0e e3  | i%.3... 26.3...|
00006c70  20 69 25 3d 30 20 b8 20  32 0d 33 f4 0d 20 e6 20  | i%=0 . 2.3.. . |
00006c80  30 20 c8 9c 20 30 0d 33  fe 31 20 c8 93 20 c8 90  |0 .. 0.3.1 .. ..|
00006c90  20 31 36 2a 28 37 32 2b  32 2a 69 25 29 2c 32 30  | 16*(72+2*i%),20|
00006ca0  2a 33 32 2b 32 35 36 2c  31 36 2c 72 67 62 25 28  |*32+256,16,rgb%(|
00006cb0  69 25 29 2d 32 35 36 0d  34 08 19 20 e6 20 28 33  |i%)-256.4.. . (3|
00006cc0  3c 3c 28 69 25 2a 32 29  29 20 c8 9c 20 31 39 32  |<<(i%*2)) .. 192|
00006cd0  0d 34 12 29 20 c8 93 20  c8 90 20 31 36 2a 28 37  |.4.) .. .. 16*(7|
00006ce0  32 2b 32 2a 69 25 29 2c  32 30 2a 33 32 2c 31 36  |2+2*i%),20*32,16|
00006cf0  2c 72 67 62 25 28 69 25  29 0d 34 1c 05 ed 0d 34  |,rgb%(i%).4....4|
00006d00  26 33 f2 67 63 6f 6c 28  28 72 67 62 25 28 30 29  |&3.gcol((rgb%(0)|
00006d10  3c 3c 38 29 2b 28 72 67  62 25 28 31 29 3c 3c 31  |<<8)+(rgb%(1)<<1|
00006d20  36 29 2b 28 72 67 62 25  28 32 29 3c 3c 32 34 29  |6)+(rgb%(2)<<24)|
00006d30  29 0d 34 30 1c c8 93 20  c8 90 20 31 36 2a 36 36  |).40... .. 16*66|
00006d40  2c 32 30 2a 33 32 2c 36  34 2c 32 35 36 0d 34 3a  |,20*32,64,256.4:|
00006d50  36 c8 99 20 22 4f 53 5f  53 70 72 69 74 65 4f 70  |6.. "OS_SpriteOp|
00006d60  22 2c 33 34 2b 32 35 36  2c 63 6f 6c 5f 73 70 72  |",34+256,col_spr|
00006d70  25 2c 22 63 6f 6c 73 22  2c 36 34 2a 31 36 2c 32  |%,"cols",64*16,2|
00006d80  2a 33 32 0d 34 44 05 e1  0d 34 4e 05 3a 0d 34 58  |*32.4D...4N.:.4X|
00006d90  11 dd 20 a4 6d 69 6e 28  61 25 2c 62 25 29 0d 34  |.. .min(a%,b%).4|
00006da0  62 17 e7 20 61 25 3c 62  25 20 8c 20 3d 61 25 20  |b.. a%<b% . =a% |
00006db0  8b 20 3d 62 25 0d 34 6c  05 3a 0d 34 76 11 dd 20  |. =b%.4l.:.4v.. |
00006dc0  a4 6d 61 78 28 61 25 2c  62 25 29 0d 34 80 17 e7  |.max(a%,b%).4...|
00006dd0  20 61 25 3e 62 25 20 8c  20 3d 61 25 20 8b 20 3d  | a%>b% . =a% . =|
00006de0  62 25 0d 34 8a 05 3a 0d  34 94 14 dd 20 a4 67 65  |b%.4..:.4... .ge|
00006df0  74 5f 73 74 72 69 6e 67  28 61 29 0d 34 9e 08 ea  |t_string(a).4...|
00006e00  20 61 24 0d 34 a8 09 61  24 3d 22 22 0d 34 b2 0d  | a$.4..a$="".4..|
00006e10  c8 95 20 3f 61 3e 3d 33  32 0d 34 bc 0e 20 61 24  |.. ?a>=32.4.. a$|
00006e20  2b 3d bd 28 3f 61 29 0d  34 c6 09 20 61 2b 3d 31  |+=.(?a).4.. a+=1|
00006e30  0d 34 d0 05 ce 0d 34 da  07 3d 61 24 0d 34 e4 05  |.4....4..=a$.4..|
00006e40  3a 0d 34 ee 1b dd 20 a4  69 64 65 6e 74 69 66 79  |:.4... .identify|
00006e50  5f 6b 65 79 77 6f 72 64  28 77 24 29 0d 34 f8 0d  |_keyword(w$).4..|
00006e60  ea 20 69 2c 66 6f 75 6e  64 0d 35 02 16 e7 20 6f  |. i,found.5... o|
00006e70  62 6a 65 63 74 73 3c 3d  30 20 8c 20 3d 2d 31 0d  |bjects<=0 . =-1.|
00006e80  35 0c 07 69 3d 30 0d 35  16 0b 66 6f 75 6e 64 3d  |5..i=0.5..found=|
00006e90  a3 0d 35 20 1a c8 95 20  69 3c 6f 62 6a 65 63 74  |..5 ... i<object|
00006ea0  73 20 80 20 ac 20 66 6f  75 6e 64 0d 35 2a 27 20  |s . . found.5*' |
00006eb0  e7 20 a4 67 65 74 5f 73  74 72 69 6e 67 28 21 28  |. .get_string(!(|
00006ec0  6f 62 6a 21 28 34 2a 69  29 2b 34 29 29 3d 77 24  |obj!(4*i)+4))=w$|
00006ed0  20 8c 0d 35 34 0d 20 20  66 6f 75 6e 64 3d b9 0d  | ..54.  found=..|
00006ee0  35 3e 06 20 cc 0d 35 48  0a 20 20 69 2b 3d 31 0d  |5>. ..5H.  i+=1.|
00006ef0  35 52 06 20 cd 0d 35 5c  05 ce 0d 35 66 13 e7 20  |5R. ..5\...5f.. |
00006f00  ac 20 66 6f 75 6e 64 20  8c 20 3d 2d 31 0d 35 70  |. found . =-1.5p|
00006f10  06 3d 69 0d 35 7a 05 3a  0d 35 84 18 dd 20 f2 6c  |.=i.5z.:.5... .l|
00006f20  65 66 74 5f 61 72 72 6f  77 28 78 25 2c 79 25 29  |eft_arrow(x%,y%)|
00006f30  0d 35 8e 0c 78 25 3d 78  25 2a 31 36 0d 35 98 15  |.5..x%=x%*16.5..|
00006f40  79 25 3d 31 30 32 34 2d  33 32 2a 28 79 25 2b 31  |y%=1024-32*(y%+1|
00006f50  29 0d 35 a2 10 f2 67 63  6f 6c 28 62 6c 75 65 25  |).5...gcol(blue%|
00006f60  29 0d 35 ac 15 c8 93 20  c8 90 20 78 25 2c 79 25  |).5.... .. x%,y%|
00006f70  2c 31 36 2c 32 38 0d 35  b6 12 f2 67 63 6f 6c 28  |,16,28.5...gcol(|
00006f80  79 65 6c 6c 6f 77 25 29  0d 35 c0 10 ec 20 78 25  |yellow%).5... x%|
00006f90  2b 31 32 2c 79 25 2b 34  0d 35 ca 11 ec 20 78 25  |+12,y%+4.5... x%|
00006fa0  2b 31 32 2c 79 25 2b 32  34 0d 35 d4 13 f0 20 38  |+12,y%+24.5... 8|
00006fb0  35 2c 78 25 2b 34 2c 79  25 2b 31 34 0d 35 de 05  |5,x%+4,y%+14.5..|
00006fc0  e1 0d 35 e8 05 3a 0d 35  f2 19 dd 20 f2 72 69 67  |..5..:.5... .rig|
00006fd0  68 74 5f 61 72 72 6f 77  28 78 25 2c 79 25 29 0d  |ht_arrow(x%,y%).|
00006fe0  35 fc 0c 78 25 3d 78 25  2a 31 36 0d 36 06 15 79  |5..x%=x%*16.6..y|
00006ff0  25 3d 31 30 32 34 2d 33  32 2a 28 79 25 2b 31 29  |%=1024-32*(y%+1)|
00007000  0d 36 10 10 f2 67 63 6f  6c 28 62 6c 75 65 25 29  |.6...gcol(blue%)|
00007010  0d 36 1a 15 c8 93 20 c8  90 20 78 25 2c 79 25 2c  |.6.... .. x%,y%,|
00007020  31 36 2c 32 38 0d 36 24  12 f2 67 63 6f 6c 28 79  |16,28.6$..gcol(y|
00007030  65 6c 6c 6f 77 25 29 0d  36 2e 0f ec 20 78 25 2b  |ellow%).6... x%+|
00007040  34 2c 79 25 2b 34 0d 36  38 10 ec 20 78 25 2b 34  |4,y%+4.68.. x%+4|
00007050  2c 79 25 2b 32 34 0d 36  42 14 f0 20 38 35 2c 78  |,y%+24.6B.. 85,x|
00007060  25 2b 31 32 2c 79 25 2b  31 34 0d 36 4c 05 e1 0d  |%+12,y%+14.6L...|
00007070  36 56 05 3a 0d 36 60 16  dd 20 f2 75 70 5f 61 72  |6V.:.6`.. .up_ar|
00007080  72 6f 77 28 78 25 2c 79  25 29 0d 36 6a 0c 78 25  |row(x%,y%).6j.x%|
00007090  3d 78 25 2a 31 36 0d 36  74 15 79 25 3d 31 30 32  |=x%*16.6t.y%=102|
000070a0  34 2d 33 32 2a 28 79 25  2b 31 29 0d 36 7e 10 f2  |4-32*(y%+1).6~..|
000070b0  67 63 6f 6c 28 62 6c 75  65 25 29 0d 36 88 16 c8  |gcol(blue%).6...|
000070c0  93 20 c8 90 20 78 25 2c  79 25 2c 31 32 38 2c 33  |. .. x%,y%,128,3|
000070d0  32 0d 36 92 12 f2 67 63  6f 6c 28 79 65 6c 6c 6f  |2.6...gcol(yello|
000070e0  77 25 29 0d 36 9c 0f ec  20 78 25 2b 34 2c 79 25  |w%).6... x%+4,y%|
000070f0  2b 34 0d 36 a6 11 ec 20  78 25 2b 31 32 34 2c 79  |+4.6... x%+124,y|
00007100  25 2b 34 0d 36 b0 14 f0  20 38 35 2c 78 25 2b 36  |%+4.6... 85,x%+6|
00007110  34 2c 79 25 2b 32 38 0d  36 ba 05 e1 0d 36 c4 05  |4,y%+28.6....6..|
00007120  3a 0d 36 ce 18 dd 20 f2  64 6f 77 6e 5f 61 72 72  |:.6... .down_arr|
00007130  6f 77 28 78 25 2c 79 25  29 0d 36 d8 0c 78 25 3d  |ow(x%,y%).6..x%=|
00007140  78 25 2a 31 36 0d 36 e2  15 79 25 3d 31 30 32 34  |x%*16.6..y%=1024|
00007150  2d 33 32 2a 28 79 25 2b  31 29 0d 36 ec 10 f2 67  |-32*(y%+1).6...g|
00007160  63 6f 6c 28 62 6c 75 65  25 29 0d 36 f6 16 c8 93  |col(blue%).6....|
00007170  20 c8 90 20 78 25 2c 79  25 2c 31 32 38 2c 33 32  | .. x%,y%,128,32|
00007180  0d 37 00 12 f2 67 63 6f  6c 28 79 65 6c 6c 6f 77  |.7...gcol(yellow|
00007190  25 29 0d 37 0a 10 ec 20  78 25 2b 34 2c 79 25 2b  |%).7... x%+4,y%+|
000071a0  32 38 0d 37 14 12 ec 20  78 25 2b 31 32 34 2c 79  |28.7... x%+124,y|
000071b0  25 2b 32 38 0d 37 1e 13  f0 20 38 35 2c 78 25 2b  |%+28.7... 85,x%+|
000071c0  36 34 2c 79 25 2b 34 0d  37 28 05 e1 0d 37 32 05  |64,y%+4.7(...72.|
000071d0  3a 0d 37 3c 19 dd 20 f2  65 6e 73 75 72 65 5f 76  |:.7<.. .ensure_v|
000071e0  69 73 69 62 6c 65 28 69  25 29 0d 37 46 14 e7 20  |isible(i%).7F.. |
000071f0  69 25 3c 6f 62 6a 5f 66  69 72 73 74 20 8c 0d 37  |i%<obj_first ..7|
00007200  50 11 20 6f 62 6a 5f 66  69 72 73 74 3d 69 25 0d  |P. obj_first=i%.|
00007210  37 5a 05 cc 0d 37 64 26  20 e7 20 69 25 3e 6f 62  |7Z...7d& . i%>ob|
00007220  6a 5f 66 69 72 73 74 2b  32 34 20 6f 62 6a 5f 66  |j_first+24 obj_f|
00007230  69 72 73 74 3d 69 25 2d  32 34 0d 37 6e 05 cd 0d  |irst=i%-24.7n...|
00007240  37 78 05 e1 0d 37 82 05  3a 0d 37 8c 3c dd 20 f2  |7x...7..:.7.<. .|
00007250  66 69 6e 64 5f 62 6f 75  6e 64 69 6e 67 5f 63 75  |find_bounding_cu|
00007260  62 65 28 73 75 62 2c f8  20 78 30 2c f8 20 79 30  |be(sub,. x0,. y0|
00007270  2c f8 20 7a 30 2c f8 20  78 31 2c f8 20 79 31 2c  |,. z0,. x1,. y1,|
00007280  f8 20 7a 31 29 0d 37 96  1c ea 20 69 2c 78 2c 79  |. z1).7... i,x,y|
00007290  2c 7a 2c 78 32 2c 79 32  2c 7a 32 2c 61 2c 62 2c  |,z,x2,y2,z2,a,b,|
000072a0  63 0d 37 a0 0b 78 30 3d  31 45 31 30 0d 37 aa 0b  |c.7..x0=1E10.7..|
000072b0  79 30 3d 31 45 31 30 0d  37 b4 0b 7a 30 3d 31 45  |y0=1E10.7..z0=1E|
000072c0  31 30 0d 37 be 0c 78 31  3d 2d 31 45 31 30 0d 37  |10.7..x1=-1E10.7|
000072d0  c8 0c 79 31 3d 2d 31 45  31 30 0d 37 d2 0c 7a 31  |..y1=-1E10.7..z1|
000072e0  3d 2d 31 45 31 30 0d 37  dc 1b 61 3d 21 28 73 75  |=-1E10.7..a=!(su|
000072f0  62 2b 73 75 62 6f 62 6a  5f 61 6e 67 6c 65 2b 30  |b+subobj_angle+0|
00007300  29 0d 37 e6 1b 62 3d 21  28 73 75 62 2b 73 75 62  |).7..b=!(sub+sub|
00007310  6f 62 6a 5f 61 6e 67 6c  65 2b 34 29 0d 37 f0 1b  |obj_angle+4).7..|
00007320  63 3d 21 28 73 75 62 2b  73 75 62 6f 62 6a 5f 61  |c=!(sub+subobj_a|
00007330  6e 67 6c 65 2b 38 29 0d  37 fa 0d e3 20 69 3d 30  |ngle+8).7... i=0|
00007340  20 b8 20 37 0d 38 04 22  20 78 3d 21 28 73 75 62  | . 7.8." x=!(sub|
00007350  2b 73 75 62 6f 62 6a 5f  62 6f 75 6e 64 73 2b 31  |+subobj_bounds+1|
00007360  32 2a 69 2b 30 29 0d 38  0e 22 20 79 3d 21 28 73  |2*i+0).8." y=!(s|
00007370  75 62 2b 73 75 62 6f 62  6a 5f 62 6f 75 6e 64 73  |ub+subobj_bounds|
00007380  2b 31 32 2a 69 2b 34 29  0d 38 18 22 20 7a 3d 21  |+12*i+4).8." z=!|
00007390  28 73 75 62 2b 73 75 62  6f 62 6a 5f 62 6f 75 6e  |(sub+subobj_boun|
000073a0  64 73 2b 31 32 2a 69 2b  38 29 0d 38 22 22 20 f2  |ds+12*i+8).8"" .|
000073b0  72 6f 74 61 74 65 28 78  2c 79 2c 7a 2c 61 2c 62  |rotate(x,y,z,a,b|
000073c0  2c 63 2c 78 32 2c 79 32  2c 7a 32 29 0d 38 2c 12  |,c,x2,y2,z2).8,.|
000073d0  20 e7 20 78 32 3c 78 30  20 78 30 3d 78 32 0d 38  | . x2<x0 x0=x2.8|
000073e0  36 12 20 e7 20 79 32 3c  79 30 20 79 30 3d 79 32  |6. . y2<y0 y0=y2|
000073f0  0d 38 40 12 20 e7 20 7a  32 3c 7a 30 20 7a 30 3d  |.8@. . z2<z0 z0=|
00007400  7a 32 0d 38 4a 12 20 e7  20 78 32 3e 78 31 20 78  |z2.8J. . x2>x1 x|
00007410  31 3d 78 32 0d 38 54 12  20 e7 20 79 32 3e 79 31  |1=x2.8T. . y2>y1|
00007420  20 79 31 3d 79 32 0d 38  5e 12 20 e7 20 7a 32 3e  | y1=y2.8^. . z2>|
00007430  7a 31 20 7a 31 3d 7a 32  0d 38 68 05 ed 0d 38 72  |z1 z1=z2.8h...8r|
00007440  05 e1 0d 38 7c 05 3a 0d  38 86 29 dd 20 f2 72 6f  |...8|.:.8.). .ro|
00007450  74 61 74 65 28 78 2c 79  2c 7a 2c 61 2c 62 2c 63  |tate(x,y,z,a,b,c|
00007460  2c f8 20 78 32 2c f8 20  79 32 2c f8 20 7a 32 29  |,. x2,. y2,. z2)|
00007470  0d 38 90 14 61 3d b2 28  61 2f 61 6e 67 5f 73 63  |.8..a=.(a/ang_sc|
00007480  61 6c 65 29 0d 38 9a 14  62 3d b2 28 62 2f 61 6e  |ale).8..b=.(b/an|
00007490  67 5f 73 63 61 6c 65 29  0d 38 a4 14 63 3d b2 28  |g_scale).8..c=.(|
000074a0  63 2f 61 6e 67 5f 73 63  61 6c 65 29 0d 38 ae 04  |c/ang_scale).8..|
000074b0  0d 38 b8 08 78 32 3d 78  0d 38 c2 10 79 32 3d 79  |.8..x2=x.8..y2=y|
000074c0  2a 9b 61 2b 7a 2a b5 61  0d 38 cc 11 7a 32 3d 2d  |*.a+z*.a.8..z2=-|
000074d0  79 2a b5 61 2b 7a 2a 9b  61 0d 38 d6 04 0d 38 e0  |y*.a+z*.a.8...8.|
000074e0  11 78 3d 78 32 2a 9b 62  2d 7a 32 2a b5 62 0d 38  |.x=x2*.b-z2*.b.8|
000074f0  ea 08 79 3d 79 32 0d 38  f4 11 7a 3d 78 32 2a b5  |..y=y2.8..z=x2*.|
00007500  62 2b 7a 32 2a 9b 62 0d  38 fe 04 0d 39 08 10 78  |b+z2*.b.8...9..x|
00007510  32 3d 78 2a 9b 63 2b 79  2a b5 63 0d 39 12 11 79  |2=x*.c+y*.c.9..y|
00007520  32 3d 2d 78 2a b5 63 2b  79 2a 9b 63 0d 39 1c 08  |2=-x*.c+y*.c.9..|
00007530  7a 32 3d 7a 0d 39 26 05  e1 0d 39 30 05 3a 0d 39  |z2=z.9&...90.:.9|
00007540  3a 0e dd 20 f2 6b 65 79  28 6b 25 29 0d 39 44 0d  |:.. .key(k%).9D.|
00007550  ea 20 61 2c 73 75 72 66  25 0d 39 4e 4f e7 20 6b  |. a,surf%.9NO. k|
00007560  25 3d 31 37 20 80 20 7a  6f 6f 6d 25 3c 31 30 30  |%=17 . zoom%<100|
00007570  20 7a 6f 6f 6d 25 3d a4  6d 69 6e 28 7a 6f 6f 6d  | zoom%=.min(zoom|
00007580  25 2b 31 30 2c 31 30 30  29 3a 76 69 65 77 5f 6e  |%+10,100):view_n|
00007590  65 65 64 73 5f 75 70 64  61 74 65 25 3d b9 3a f2  |eeds_update%=.:.|
000075a0  69 6e 66 6f 5f 62 61 72  0d 39 58 4e e7 20 6b 25  |info_bar.9XN. k%|
000075b0  3d 32 33 20 80 20 7a 6f  6f 6d 25 3e 31 30 20 20  |=23 . zoom%>10  |
000075c0  7a 6f 6f 6d 25 3d a4 6d  61 78 28 7a 6f 6f 6d 25  |zoom%=.max(zoom%|
000075d0  2d 31 30 2c 31 30 29 3a  76 69 65 77 5f 6e 65 65  |-10,10):view_nee|
000075e0  64 73 5f 75 70 64 61 74  65 25 3d b9 3a f2 69 6e  |ds_update%=.:.in|
000075f0  66 6f 5f 62 61 72 0d 39  62 12 c8 8e 20 63 75 72  |fo_bar.9b... cur|
00007600  5f 6d 6f 64 65 25 20 ca  0d 39 6c 09 20 c9 20 33  |_mode% ..9l. . 3|
00007610  3a 0d 39 76 13 20 20 f2  65 64 69 74 5f 6b 65 79  |:.9v.  .edit_key|
00007620  28 6b 25 29 0d 39 80 09  20 c9 20 34 3a 0d 39 8a  |(k%).9.. . 4:.9.|
00007630  0f 20 20 e7 20 6b 25 3d  32 37 20 8c 0d 39 94 0e  |.  . k%=27 ..9..|
00007640  20 20 20 76 65 72 74 73  3d 30 0d 39 9e 1b 20 20  |   verts=0.9..  |
00007650  20 76 69 65 77 5f 6e 65  65 64 73 5f 75 70 64 61  | view_needs_upda|
00007660  74 65 25 3d b9 0d 39 a8  07 20 20 cd 0d 39 b2 05  |te%=..9..  ..9..|
00007670  cb 0d 39 bc 05 e1 0d 39  c6 05 3a 0d 39 d0 13 dd  |..9....9..:.9...|
00007680  20 f2 65 64 69 74 5f 6b  65 79 28 6b 25 29 0d 39  | .edit_key(k%).9|
00007690  da 0b c8 8e 20 6b 25 20  ca 0d 39 e4 0a 20 c9 20  |.... k% ..9.. . |
000076a0  31 39 3a 0d 39 ee 24 20  20 e7 20 63 75 72 5f 6f  |19:.9.$  . cur_o|
000076b0  62 6a 25 3c 3e 2d 31 20  80 20 63 75 72 5f 76 69  |bj%<>-1 . cur_vi|
000076c0  65 77 25 3e 30 20 8c 0d  39 f8 17 20 20 20 e7 20  |ew%>0 ..9..   . |
000076d0  73 65 6c 65 63 74 65 64  25 3d 2d 31 20 8c 0d 3a  |selected%=-1 ..:|
000076e0  02 1c 20 20 20 20 e7 20  21 28 a4 6f 2b 6f 62 6a  |..    . !(.o+obj|
000076f0  5f 6c 69 73 74 29 3d 30  20 8c 0d 3a 0c 1f 20 20  |_list)=0 ..:..  |
00007700  20 20 20 f2 73 65 6c 65  63 74 5f 6f 62 6a 65 63  |   .select_objec|
00007710  74 5f 72 61 77 28 2d 31  29 0d 3a 16 09 20 20 20  |t_raw(-1).:..   |
00007720  20 cc 0d 3a 20 2b 20 20  20 20 20 f2 73 65 6c 65  | ..: +     .sele|
00007730  63 74 5f 6f 62 6a 65 63  74 5f 72 61 77 28 21 28  |ct_object_raw(!(|
00007740  a4 6f 2b 6f 62 6a 5f 6c  69 73 74 29 29 0d 3a 2a  |.o+obj_list)).:*|
00007750  09 20 20 20 20 cd 0d 3a  34 19 20 20 20 20 f2 73  |.    ..:4.    .s|
00007760  65 74 5f 69 6e 66 6f 5f  6d 6f 64 65 28 35 29 0d  |et_info_mode(5).|
00007770  3a 3e 08 20 20 20 cc 0d  3a 48 24 20 20 20 20 e7  |:>.   ..:H$    .|
00007780  20 73 65 6c 65 63 74 65  64 25 21 73 75 62 6f 62  | selected%!subob|
00007790  6a 5f 6e 65 78 74 3c 3e  30 20 8c 0d 3a 52 32 20  |j_next<>0 ..:R2 |
000077a0  20 20 20 20 f2 73 65 6c  65 63 74 5f 6f 62 6a 65  |    .select_obje|
000077b0  63 74 5f 72 61 77 28 73  65 6c 65 63 74 65 64 25  |ct_raw(selected%|
000077c0  21 73 75 62 6f 62 6a 5f  6e 65 78 74 29 0d 3a 5c  |!subobj_next).:\|
000077d0  09 20 20 20 20 cc 0d 3a  66 2b 20 20 20 20 20 f2  |.    ..:f+     .|
000077e0  73 65 6c 65 63 74 5f 6f  62 6a 65 63 74 5f 72 61  |select_object_ra|
000077f0  77 28 21 28 a4 6f 2b 6f  62 6a 5f 6c 69 73 74 29  |w(!(.o+obj_list)|
00007800  29 0d 3a 70 09 20 20 20  20 cd 0d 3a 7a 08 20 20  |).:p.    ..:z.  |
00007810  20 cd 0d 3a 84 10 20 20  20 f2 69 6e 66 6f 5f 62  | ..:..   .info_b|
00007820  61 72 0d 3a 8e 07 20 20  cd 0d 3a 98 0a 20 c9 20  |ar.:..  ..:.. . |
00007830  32 32 3a 0d 3a a2 34 20  20 e7 20 63 75 72 5f 6f  |22:.:.4  . cur_o|
00007840  62 6a 25 3c 3e 2d 31 20  80 20 63 75 72 5f 76 69  |bj%<>-1 . cur_vi|
00007850  65 77 25 3e 30 20 80 20  73 65 6c 65 63 74 65 64  |ew%>0 . selected|
00007860  25 3c 3e 2d 31 20 8c 0d  3a ac 30 20 20 20 e7 20  |%<>-1 ..:.0   . |
00007870  28 73 65 6c 65 63 74 65  64 25 21 73 75 62 6f 62  |(selected%!subob|
00007880  6a 5f 66 6c 61 67 73 20  80 20 62 69 74 5f 73 75  |j_flags . bit_su|
00007890  72 66 29 3e 30 20 8c 0d  3a b6 3d 20 20 20 20 76  |rf)>0 ..:.=    v|
000078a0  65 72 74 65 78 25 3d 28  76 65 72 74 65 78 25 2b  |ertex%=(vertex%+|
000078b0  31 29 20 83 20 21 28 73  65 6c 65 63 74 65 64 25  |1) . !(selected%|
000078c0  21 73 75 62 6f 62 6a 5f  74 79 70 65 2b 73 75 72  |!subobj_type+sur|
000078d0  66 5f 6e 29 0d 3a c0 1c  20 20 20 20 76 69 65 77  |f_n).:..    view|
000078e0  5f 6e 65 65 64 73 5f 75  70 64 61 74 65 25 3d b9  |_needs_update%=.|
000078f0  0d 3a ca 11 20 20 20 20  f2 69 6e 66 6f 5f 62 61  |.:..    .info_ba|
00007900  72 0d 3a d4 08 20 20 20  cd 0d 3a de 07 20 20 cd  |r.:..   ..:..  .|
00007910  0d 3a e8 09 20 c9 20 31  3a 0d 3a f2 17 20 20 e7  |.:.. . 1:.:..  .|
00007920  20 a4 65 64 69 74 69 6e  67 5f 73 75 72 66 20 8c  | .editing_surf .|
00007930  0d 3a fc 16 20 20 20 e7  20 76 65 72 74 65 78 25  |.:..   . vertex%|
00007940  3c 3e 2d 31 20 8c 0d 3b  06 23 20 20 20 20 73 75  |<>-1 ..;.#    su|
00007950  72 66 25 3d 73 65 6c 65  63 74 65 64 25 21 73 75  |rf%=selected%!su|
00007960  62 6f 62 6a 5f 74 79 70  65 0d 3b 10 26 20 20 20  |bobj_type.;.&   |
00007970  20 61 3d 73 75 72 66 25  2b 73 75 72 66 5f 63 6f  | a=surf%+surf_co|
00007980  6f 72 64 73 2b 31 32 2a  76 65 72 74 65 78 25 0d  |ords+12*vertex%.|
00007990  3b 1a 16 20 20 20 20 c8  8e 20 63 75 72 5f 76 69  |;..    .. cur_vi|
000079a0  65 77 25 20 ca 0d 3b 24  0d 20 20 20 20 20 c9 20  |ew% ..;$.     . |
000079b0  31 3a 0d 3b 2e 13 20 20  20 20 20 20 61 21 38 2b  |1:.;..      a!8+|
000079c0  3d 31 30 30 30 0d 3b 38  0d 20 20 20 20 20 c9 20  |=1000.;8.     . |
000079d0  32 3a 0d 3b 42 13 20 20  20 20 20 20 61 21 34 2d  |2:.;B.      a!4-|
000079e0  3d 31 30 30 30 0d 3b 4c  0d 20 20 20 20 20 c9 20  |=1000.;L.     . |
000079f0  33 3a 0d 3b 56 13 20 20  20 20 20 20 61 21 30 2d  |3:.;V.      a!0-|
00007a00  3d 31 30 30 30 0d 3b 60  09 20 20 20 20 cb 0d 3b  |=1000.;`.    ..;|
00007a10  6a 1c 20 20 20 20 76 69  65 77 5f 6e 65 65 64 73  |j.    view_needs|
00007a20  5f 75 70 64 61 74 65 25  3d b9 0d 3b 74 11 20 20  |_update%=..;t.  |
00007a30  20 20 f2 69 6e 66 6f 5f  62 61 72 0d 3b 7e 08 20  |  .info_bar.;~. |
00007a40  20 20 cd 0d 3b 88 07 20  20 cd 0d 3b 92 0a 20 c9  |  ..;..  ..;.. .|
00007a50  20 32 36 3a 0d 3b 9c 17  20 20 e7 20 a4 65 64 69  | 26:.;..  . .edi|
00007a60  74 69 6e 67 5f 73 75 72  66 20 8c 0d 3b a6 16 20  |ting_surf ..;.. |
00007a70  20 20 e7 20 76 65 72 74  65 78 25 3c 3e 2d 31 20  |  . vertex%<>-1 |
00007a80  8c 0d 3b b0 23 20 20 20  20 73 75 72 66 25 3d 73  |..;.#    surf%=s|
00007a90  65 6c 65 63 74 65 64 25  21 73 75 62 6f 62 6a 5f  |elected%!subobj_|
00007aa0  74 79 70 65 0d 3b ba 26  20 20 20 20 61 3d 73 75  |type.;.&    a=su|
00007ab0  72 66 25 2b 73 75 72 66  5f 63 6f 6f 72 64 73 2b  |rf%+surf_coords+|
00007ac0  31 32 2a 76 65 72 74 65  78 25 0d 3b c4 16 20 20  |12*vertex%.;..  |
00007ad0  20 20 c8 8e 20 63 75 72  5f 76 69 65 77 25 20 ca  |  .. cur_view% .|
00007ae0  0d 3b ce 0d 20 20 20 20  20 c9 20 31 3a 0d 3b d8  |.;..     . 1:.;.|
00007af0  13 20 20 20 20 20 20 61  21 38 2d 3d 31 30 30 30  |.      a!8-=1000|
00007b00  0d 3b e2 0d 20 20 20 20  20 c9 20 32 3a 0d 3b ec  |.;..     . 2:.;.|
00007b10  13 20 20 20 20 20 20 61  21 34 2b 3d 31 30 30 30  |.      a!4+=1000|
00007b20  0d 3b f6 0d 20 20 20 20  20 c9 20 33 3a 0d 3c 00  |.;..     . 3:.<.|
00007b30  13 20 20 20 20 20 20 61  21 30 2b 3d 31 30 30 30  |.      a!0+=1000|
00007b40  0d 3c 0a 09 20 20 20 20  cb 0d 3c 14 1c 20 20 20  |.<..    ..<..   |
00007b50  20 76 69 65 77 5f 6e 65  65 64 73 5f 75 70 64 61  | view_needs_upda|
00007b60  74 65 25 3d b9 0d 3c 1e  11 20 20 20 20 f2 69 6e  |te%=..<..    .in|
00007b70  66 6f 5f 62 61 72 0d 3c  28 08 20 20 20 cd 0d 3c  |fo_bar.<(.   ..<|
00007b80  32 07 20 20 cd 0d 3c 3c  05 cb 0d 3c 46 05 e1 0d  |2.  ..<<...<F...|
00007b90  3c 50 05 3a 0d 3c 5a 19  dd 20 a4 6f 3d 6f 62 6a  |<P.:.<Z.. .o=obj|
00007ba0  21 28 34 2a 63 75 72 5f  6f 62 6a 25 29 0d 3c 64  |!(4*cur_obj%).<d|
00007bb0  05 3a 0d 3c 6e 0b dd 20  f2 73 61 76 65 0d 3c 78  |.:.<n.. .save.<x|
00007bc0  13 ea 20 66 69 6c 65 24  2c 6f 75 74 25 2c 69 25  |.. file$,out%,i%|
00007bd0  0d 3c 82 07 ea 20 85 0d  3c 8c 05 ee 0d 3c 96 37  |.<... ..<....<.7|
00007be0  ee 20 85 20 ea 20 f7 20  85 3a f2 65 72 72 5f 62  |. . . . .:.err_b|
00007bf0  61 72 28 b9 29 3a f2 69  6e 66 6f 5f 62 61 72 3a  |ar(.):.info_bar:|
00007c00  87 3a f2 6d 6f 64 65 5f  73 65 6c 65 63 74 28 33  |.:.mode_select(3|
00007c10  29 3a e1 0d 3c a0 1b e8  8a 30 2c 33 30 29 22 53  |):..<....0,30)"S|
00007c20  61 76 65 20 61 73 3a 20  22 66 69 6c 65 24 0d 3c  |ave as: "file$.<|
00007c30  aa 17 66 69 6c 65 24 3d  a4 73 74 72 69 70 28 66  |..file$=.strip(f|
00007c40  69 6c 65 24 29 0d 3c b4  0d 73 61 76 65 64 28 29  |ile$).<..saved()|
00007c50  3d a3 0d 3c be 1c f2 65  6e 73 75 72 65 5f 74 68  |=..<...ensure_th|
00007c60  65 72 65 5f 69 73 5f 61  5f 77 6f 72 6c 64 0d 3c  |ere_is_a_world.<|
00007c70  c8 1c 6f 75 74 25 3d ae  28 22 6f 62 6a 65 63 74  |..out%=.("object|
00007c80  73 2e 22 2b 66 69 6c 65  24 29 0d 3c d2 25 d5 23  |s."+file$).<.%.#|
00007c90  6f 75 74 25 2c 22 72 65  6d 3a 20 3e 6f 62 6a 65  |out%,"rem: >obje|
00007ca0  63 74 73 2e 22 2b 66 69  6c 65 24 2b bd 31 30 0d  |cts."+file$+.10.|
00007cb0  3c dc 16 e3 20 69 25 3d  30 20 b8 20 6f 62 6a 65  |<... i%=0 . obje|
00007cc0  63 74 73 2d 31 0d 3c e6  17 20 f2 73 61 76 65 5f  |cts-1.<.. .save_|
00007cd0  6f 62 6a 28 69 25 2c 6f  75 74 25 29 0d 3c f0 05  |obj(i%,out%).<..|
00007ce0  ed 0d 3c fa 0a d9 23 6f  75 74 25 0d 3d 04 27 ff  |..<...#out%.=.'.|
00007cf0  28 22 53 65 74 54 79 70  65 20 6f 62 6a 65 63 74  |("SetType object|
00007d00  73 2e 22 2b 66 69 6c 65  24 2b 22 20 74 65 78 74  |s."+file$+" text|
00007d10  22 29 0d 3d 0e 05 87 0d  3d 18 07 f7 20 85 0d 3d  |").=....=... ..=|
00007d20  22 13 f2 6d 6f 64 65 5f  73 65 6c 65 63 74 28 33  |"..mode_select(3|
00007d30  29 0d 3d 2c 05 e1 0d 3d  36 05 3a 0d 3d 40 17 dd  |).=,...=6.:.=@..|
00007d40  20 f2 73 61 76 65 5f 6f  62 6a 28 6f 2c 6f 75 74  | .save_obj(o,out|
00007d50  25 29 0d 3d 4a 12 ea 20  61 2c 62 2c 6f 6f 2c 69  |%).=J.. a,b,oo,i|
00007d60  25 2c 6a 25 0d 3d 54 10  e7 20 73 61 76 65 64 28  |%,j%.=T.. saved(|
00007d70  6f 29 20 e1 0d 3d 5e 0f  61 3d 6f 62 6a 21 28 34  |o) ..=^.a=obj!(4|
00007d80  2a 6f 29 0d 3d 68 10 62  3d 61 21 6f 62 6a 5f 6c  |*o).=h.b=a!obj_l|
00007d90  69 73 74 0d 3d 72 0b c8  95 20 62 3c 3e 30 0d 3d  |ist.=r... b<>0.=|
00007da0  7c 26 20 e7 20 28 62 21  73 75 62 6f 62 6a 5f 66  ||& . (b!subobj_f|
00007db0  6c 61 67 73 20 80 20 62  69 74 5f 73 75 72 66 29  |lags . bit_surf)|
00007dc0  3d 30 20 8c 0d 3d 86 2c  20 20 f2 73 61 76 65 5f  |=0 ..=.,  .save_|
00007dd0  6f 62 6a 28 a4 6f 62 6a  5f 6e 6f 28 62 21 73 75  |obj(.obj_no(b!su|
00007de0  62 6f 62 6a 5f 74 79 70  65 29 2c 6f 75 74 25 29  |bobj_type),out%)|
00007df0  0d 3d 90 06 20 cd 0d 3d  9a 14 20 62 3d 62 21 73  |.=.. ..=.. b=b!s|
00007e00  75 62 6f 62 6a 5f 6e 65  78 74 0d 3d a4 05 ce 0d  |ubobj_next.=....|
00007e10  3d ae 31 d5 23 6f 75 74  25 2c 22 6f 62 6a 65 63  |=.1.#out%,"objec|
00007e20  74 3a 20 22 2b a4 67 65  74 5f 73 74 72 69 6e 67  |t: "+.get_string|
00007e30  28 61 21 6f 62 6a 5f 6e  61 6d 65 29 2b bd 31 30  |(a!obj_name)+.10|
00007e40  0d 3d b8 10 62 3d 61 21  6f 62 6a 5f 6c 69 73 74  |.=..b=a!obj_list|
00007e50  0d 3d c2 0b c8 95 20 62  3c 3e 30 0d 3d cc 26 20  |.=.... b<>0.=.& |
00007e60  e7 20 28 62 21 73 75 62  6f 62 6a 5f 66 6c 61 67  |. (b!subobj_flag|
00007e70  73 20 80 20 62 69 74 5f  73 75 72 66 29 3e 30 20  |s . bit_surf)>0 |
00007e80  8c 0d 3d d6 16 20 20 6f  6f 3d 62 21 73 75 62 6f  |..=..  oo=b!subo|
00007e90  62 6a 5f 74 79 70 65 0d  3d e0 67 20 20 d5 23 6f  |bj_type.=.g  .#o|
00007ea0  75 74 25 2c 22 20 20 63  6f 6c 6f 75 72 3a 20 22  |ut%,"  colour: "|
00007eb0  2b c3 28 6f 6f 3f 28 73  75 72 66 5f 63 6f 6c 6f  |+.(oo?(surf_colo|
00007ec0  75 72 2b 31 29 29 2b 22  2c 22 2b c3 28 6f 6f 3f  |ur+1))+","+.(oo?|
00007ed0  28 73 75 72 66 5f 63 6f  6c 6f 75 72 2b 32 29 29  |(surf_colour+2))|
00007ee0  2b 22 2c 22 2b c3 28 6f  6f 3f 28 73 75 72 66 5f  |+","+.(oo?(surf_|
00007ef0  63 6f 6c 6f 75 72 2b 33  29 29 2b bd 31 30 0d 3d  |colour+3))+.10.=|
00007f00  ea 1d 20 20 d5 23 6f 75  74 25 2c 22 20 20 73 75  |..  .#out%,"  su|
00007f10  72 66 61 63 65 3a 22 2b  bd 31 30 0d 3d f4 1a 20  |rface:"+.10.=.. |
00007f20  20 e3 20 69 25 3d 30 20  b8 20 6f 6f 21 73 75 72  | . i%=0 . oo!sur|
00007f30  66 5f 6e 2d 31 0d 3d fe  13 20 20 20 d5 23 6f 75  |f_n-1.=..   .#ou|
00007f40  74 25 2c 22 20 20 22 3b  0d 3e 08 11 20 20 20 e3  |t%,"  ";.>..   .|
00007f50  20 6a 25 3d 30 20 b8 20  32 0d 3e 12 39 20 20 20  | j%=0 . 2.>.9   |
00007f60  20 d5 23 6f 75 74 25 2c  a4 66 6c 6f 61 74 28 6f  | .#out%,.float(o|
00007f70  6f 21 28 73 75 72 66 5f  63 6f 6f 72 64 73 2b 31  |o!(surf_coords+1|
00007f80  32 2a 69 25 2b 34 2a 6a  25 29 2f 73 63 61 6c 65  |2*i%+4*j%)/scale|
00007f90  29 3b 0d 3e 1c 26 20 20  20 20 e7 20 6a 25 3c 32  |);.>.&    . j%<2|
00007fa0  20 d5 23 6f 75 74 25 2c  22 2c 22 3b 20 8b 20 d5  | .#out%,","; . .|
00007fb0  23 6f 75 74 25 2c 31 30  0d 3e 26 08 20 20 20 ed  |#out%,10.>&.   .|
00007fc0  0d 3e 30 07 20 20 ed 0d  3e 3a 0f 20 20 d5 23 6f  |.>0.  ..>:.  .#o|
00007fd0  75 74 25 2c 31 30 0d 3e  44 06 20 cc 0d 3e 4e 16  |ut%,10.>D. ..>N.|
00007fe0  20 20 6f 6f 3d 62 21 73  75 62 6f 62 6a 5f 74 79  |  oo=b!subobj_ty|
00007ff0  70 65 0d 3e 58 30 20 20  d5 23 6f 75 74 25 2c 22  |pe.>X0  .#out%,"|
00008000  20 20 22 2b a4 67 65 74  5f 73 74 72 69 6e 67 28  |  "+.get_string(|
00008010  6f 6f 21 6f 62 6a 5f 6e  61 6d 65 29 2b 22 3a 20  |oo!obj_name)+": |
00008020  22 3b 0d 3e 62 10 20 20  e3 20 69 25 3d 30 20 b8  |";.>b.  . i%=0 .|
00008030  20 32 0d 3e 6c 33 20 20  20 d5 23 6f 75 74 25 2c  | 2.>l3   .#out%,|
00008040  a4 66 6c 6f 61 74 28 62  21 28 73 75 62 6f 62 6a  |.float(b!(subobj|
00008050  5f 6f 66 66 73 65 74 2b  34 2a 69 25 29 2f 73 63  |_offset+4*i%)/sc|
00008060  61 6c 65 29 3b 0d 3e 76  27 20 20 20 e7 20 69 25  |ale);.>v'   . i%|
00008070  3c 32 20 d5 23 6f 75 74  25 2c 22 2c 22 3b 20 8b  |<2 .#out%,","; .|
00008080  20 d5 23 6f 75 74 25 2c  22 20 22 3b 0d 3e 80 07  | .#out%," ";.>..|
00008090  20 20 ed 0d 3e 8a 10 20  20 e3 20 69 25 3d 30 20  |  ..>..  . i%=0 |
000080a0  b8 20 32 0d 3e 94 3c 20  20 20 d5 23 6f 75 74 25  |. 2.>.<   .#out%|
000080b0  2c a4 66 6c 6f 61 74 28  a4 69 6e 74 28 62 21 28  |,.float(.int(b!(|
000080c0  73 75 62 6f 62 6a 5f 61  6e 67 6c 65 2b 34 2a 69  |subobj_angle+4*i|
000080d0  25 29 2f 61 6e 67 5f 73  63 61 6c 65 29 29 3b 0d  |%)/ang_scale));.|
000080e0  3e 9e 27 20 20 20 e7 20  69 25 3c 32 20 d5 23 6f  |>.'   . i%<2 .#o|
000080f0  75 74 25 2c 22 2c 22 3b  20 8b 20 d5 23 6f 75 74  |ut%,","; . .#out|
00008100  25 2c 22 20 22 3b 0d 3e  a8 07 20 20 ed 0d 3e b2  |%," ";.>..  ..>.|
00008110  37 20 20 e7 20 28 62 21  73 75 62 6f 62 6a 5f 66  |7  . (b!subobj_f|
00008120  6c 61 67 73 20 80 20 62  69 74 5f 6d 65 72 67 65  |lags . bit_merge|
00008130  29 3e 30 20 d5 23 6f 75  74 25 2c 22 6d 65 72 67  |)>0 .#out%,"merg|
00008140  65 20 22 3b 0d 3e bc 39  20 20 e7 20 28 62 21 73  |e ";.>.9  . (b!s|
00008150  75 62 6f 62 6a 5f 66 6c  61 67 73 20 80 20 62 69  |ubobj_flags . bi|
00008160  74 5f 63 6c 6f 73 65 64  29 3e 30 20 d5 23 6f 75  |t_closed)>0 .#ou|
00008170  74 25 2c 22 63 6c 6f 73  65 64 20 22 3b 0d 3e c6  |t%,"closed ";.>.|
00008180  10 20 20 d5 23 6f 75 74  25 2c bd 31 30 0d 3e d0  |.  .#out%,.10.>.|
00008190  06 20 cd 0d 3e da 14 20  62 3d 62 21 73 75 62 6f  |. ..>.. b=b!subo|
000081a0  62 6a 5f 6e 65 78 74 0d  3e e4 05 ce 0d 3e ee 0e  |bj_next.>....>..|
000081b0  73 61 76 65 64 28 6f 29  3d b9 0d 3e f8 05 e1 0d  |saved(o)=..>....|
000081c0  3f 02 05 3a 0d 3f 0c 14  dd 20 a4 6f 62 6a 5f 6e  |?..:.?... .obj_n|
000081d0  6f 28 61 64 64 72 25 29  0d 3f 16 08 ea 20 69 25  |o(addr%).?... i%|
000081e0  0d 3f 20 09 69 25 3d 2d  31 0d 3f 2a 05 f5 0d 3f  |.? .i%=-1.?*...?|
000081f0  34 0a 20 69 25 2b 3d 31  0d 3f 3e 16 fd 20 6f 62  |4. i%+=1.?>.. ob|
00008200  6a 21 28 34 2a 69 25 29  3d 61 64 64 72 25 0d 3f  |j!(4*i%)=addr%.?|
00008210  48 07 3d 69 25 0d 3f 52  05 3a 0d 3f 5c 19 dd 20  |H.=i%.?R.:.?\.. |
00008220  a4 69 6e 74 28 69 29 3d  a8 28 69 2b 30 2e 34 39  |.int(i)=.(i+0.49|
00008230  39 39 29 0d 3f 66 05 3a  0d 3f 70 0f dd 20 a4 66  |99).?f.:.?p.. .f|
00008240  6c 6f 61 74 28 66 29 0d  3f 7a 12 ea 20 76 25 2c  |loat(f).?z.. v%,|
00008250  6d 6f 64 25 2c 64 69 76  25 0d 3f 84 0d 76 25 3d  |mod%,div%.?..v%=|
00008260  66 2a 31 30 30 30 0d 3f  8e 12 6d 6f 64 25 3d 76  |f*1000.?..mod%=v|
00008270  25 20 83 20 31 30 30 30  0d 3f 98 12 64 69 76 25  |% . 1000.?..div%|
00008280  3d 76 25 20 81 20 31 30  30 30 0d 3f a2 17 e7 20  |=v% . 1000.?... |
00008290  6d 6f 64 25 3d 30 20 8c  20 3d c3 28 64 69 76 25  |mod%=0 . =.(div%|
000082a0  29 0d 3f ac 18 3d c3 28  64 69 76 25 29 2b 22 2e  |).?..=.(div%)+".|
000082b0  22 2b c3 28 6d 6f 64 25  29 0d 3f b6 05 3a 0d 3f  |"+.(mod%).?..:.?|
000082c0  c0 0f dd 20 a4 78 28 70  25 2c 6e 25 29 0d 3f ca  |... .x(p%,n%).?.|
000082d0  20 ea 20 78 2c 79 2c 7a  2c 6f 6f 2c 78 32 2c 79  | . x,y,z,oo,x2,y|
000082e0  32 2c 7a 32 2c 61 2c 62  2c 63 2c 61 61 0d 3f d4  |2,z2,a,b,c,aa.?.|
000082f0  25 e7 20 73 65 6c 65 63  74 65 64 25 3d 2d 31 20  |%. selected%=-1 |
00008300  84 20 63 75 72 5f 6f 62  6a 25 3d 2d 31 20 8c 20  |. cur_obj%=-1 . |
00008310  3d 30 0d 3f de 20 61 3d  73 65 6c 65 63 74 65 64  |=0.?. a=selected|
00008320  25 21 28 73 75 62 6f 62  6a 5f 61 6e 67 6c 65 2b  |%!(subobj_angle+|
00008330  30 29 0d 3f e8 20 62 3d  73 65 6c 65 63 74 65 64  |0).?. b=selected|
00008340  25 21 28 73 75 62 6f 62  6a 5f 61 6e 67 6c 65 2b  |%!(subobj_angle+|
00008350  34 29 0d 3f f2 20 63 3d  73 65 6c 65 63 74 65 64  |4).?. c=selected|
00008360  25 21 28 73 75 62 6f 62  6a 5f 61 6e 67 6c 65 2b  |%!(subobj_angle+|
00008370  38 29 0d 3f fc 1c 6f 6f  3d 73 65 6c 65 63 74 65  |8).?..oo=selecte|
00008380  64 25 21 73 75 62 6f 62  6a 5f 74 79 70 65 0d 40  |d%!subobj_type.@|
00008390  06 1b 61 61 3d 6f 6f 2b  73 75 72 66 5f 63 6f 6f  |..aa=oo+surf_coo|
000083a0  72 64 73 2b 31 32 2a 6e  25 0d 40 10 09 78 3d 21  |rds+12*n%.@..x=!|
000083b0  61 61 0d 40 1a 0a 79 3d  61 61 21 34 0d 40 24 0a  |aa.@..y=aa!4.@$.|
000083c0  7a 3d 61 61 21 38 0d 40  2e 21 f2 72 6f 74 61 74  |z=aa!8.@.!.rotat|
000083d0  65 28 78 2c 79 2c 7a 2c  61 2c 62 2c 63 2c 78 32  |e(x,y,z,a,b,c,x2|
000083e0  2c 79 32 2c 7a 32 29 0d  40 38 32 e7 20 70 25 3d  |,y2,z2).@82. p%=|
000083f0  31 20 8c 20 3d 28 78 2b  6f 78 79 7a 25 28 70 25  |1 . =(x+oxyz%(p%|
00008400  2c 30 29 29 2f 28 73 63  61 6c 65 32 64 2f 28 7a  |,0))/(scale2d/(z|
00008410  6f 6f 6d 25 2f 31 30 29  29 0d 40 42 32 e7 20 70  |oom%/10)).@B2. p|
00008420  25 3d 32 20 8c 20 3d 28  78 2b 6f 78 79 7a 25 28  |%=2 . =(x+oxyz%(|
00008430  70 25 2c 30 29 29 2f 28  73 63 61 6c 65 32 64 2f  |p%,0))/(scale2d/|
00008440  28 7a 6f 6f 6d 25 2f 31  30 29 29 0d 40 4c 32 e7  |(zoom%/10)).@L2.|
00008450  20 70 25 3d 33 20 8c 20  3d 28 7a 2b 6f 78 79 7a  | p%=3 . =(z+oxyz|
00008460  25 28 70 25 2c 30 29 29  2f 28 73 63 61 6c 65 32  |%(p%,0))/(scale2|
00008470  64 2f 28 7a 6f 6f 6d 25  2f 31 30 29 29 0d 40 56  |d/(zoom%/10)).@V|
00008480  06 3d 30 0d 40 60 05 3a  0d 40 6a 0f dd 20 a4 79  |.=0.@`.:.@j.. .y|
00008490  28 70 25 2c 6e 25 29 0d  40 74 20 ea 20 78 2c 79  |(p%,n%).@t . x,y|
000084a0  2c 7a 2c 6f 6f 2c 78 32  2c 79 32 2c 7a 32 2c 61  |,z,oo,x2,y2,z2,a|
000084b0  2c 62 2c 63 2c 61 61 0d  40 7e 25 e7 20 73 65 6c  |,b,c,aa.@~%. sel|
000084c0  65 63 74 65 64 25 3d 2d  31 20 84 20 63 75 72 5f  |ected%=-1 . cur_|
000084d0  6f 62 6a 25 3d 2d 31 20  8c 20 3d 30 0d 40 88 20  |obj%=-1 . =0.@. |
000084e0  61 3d 73 65 6c 65 63 74  65 64 25 21 28 73 75 62  |a=selected%!(sub|
000084f0  6f 62 6a 5f 61 6e 67 6c  65 2b 30 29 0d 40 92 20  |obj_angle+0).@. |
00008500  62 3d 73 65 6c 65 63 74  65 64 25 21 28 73 75 62  |b=selected%!(sub|
00008510  6f 62 6a 5f 61 6e 67 6c  65 2b 34 29 0d 40 9c 20  |obj_angle+4).@. |
00008520  63 3d 73 65 6c 65 63 74  65 64 25 21 28 73 75 62  |c=selected%!(sub|
00008530  6f 62 6a 5f 61 6e 67 6c  65 2b 38 29 0d 40 a6 1c  |obj_angle+8).@..|
00008540  6f 6f 3d 73 65 6c 65 63  74 65 64 25 21 73 75 62  |oo=selected%!sub|
00008550  6f 62 6a 5f 74 79 70 65  0d 40 b0 1b 61 61 3d 6f  |obj_type.@..aa=o|
00008560  6f 2b 73 75 72 66 5f 63  6f 6f 72 64 73 2b 31 32  |o+surf_coords+12|
00008570  2a 6e 25 0d 40 ba 09 78  3d 21 61 61 0d 40 c4 0a  |*n%.@..x=!aa.@..|
00008580  79 3d 61 61 21 34 0d 40  ce 0a 7a 3d 61 61 21 38  |y=aa!4.@..z=aa!8|
00008590  0d 40 d8 21 f2 72 6f 74  61 74 65 28 78 2c 79 2c  |.@.!.rotate(x,y,|
000085a0  7a 2c 61 2c 62 2c 63 2c  78 32 2c 79 32 2c 7a 32  |z,a,b,c,x2,y2,z2|
000085b0  29 0d 40 e2 32 e7 20 70  25 3d 31 20 8c 20 3d 28  |).@.2. p%=1 . =(|
000085c0  79 2b 6f 78 79 7a 25 28  70 25 2c 31 29 29 2f 28  |y+oxyz%(p%,1))/(|
000085d0  73 63 61 6c 65 32 64 2f  28 7a 6f 6f 6d 25 2f 31  |scale2d/(zoom%/1|
000085e0  30 29 29 0d 40 ec 32 e7  20 70 25 3d 32 20 8c 20  |0)).@.2. p%=2 . |
000085f0  3d 28 7a 2b 6f 78 79 7a  25 28 70 25 2c 31 29 29  |=(z+oxyz%(p%,1))|
00008600  2f 28 73 63 61 6c 65 32  64 2f 28 7a 6f 6f 6d 25  |/(scale2d/(zoom%|
00008610  2f 31 30 29 29 0d 40 f6  32 e7 20 70 25 3d 33 20  |/10)).@.2. p%=3 |
00008620  8c 20 3d 28 79 2b 6f 78  79 7a 25 28 70 25 2c 31  |. =(y+oxyz%(p%,1|
00008630  29 29 2f 28 73 63 61 6c  65 32 64 2f 28 7a 6f 6f  |))/(scale2d/(zoo|
00008640  6d 25 2f 31 30 29 29 0d  41 00 06 3d 30 0d 41 0a  |m%/10)).A..=0.A.|
00008650  05 3a 0d 41 14 0c dd 20  f2 63 6c 65 61 72 0d 41  |.:.A... .clear.A|
00008660  1e 0d 6f 62 6a 65 63 74  73 3d 30 0d 41 28 26 c8  |..objects=0.A(&.|
00008670  99 20 22 42 41 55 33 44  5f 48 65 61 70 49 6e 69  |. "BAU3D_HeapIni|
00008680  74 22 2c 68 65 61 70 2c  68 65 61 70 5f 73 69 7a  |t",heap,heap_siz|
00008690  65 0d 41 32 05 e1 0d 41  3c 05 3a 0d 41 46 0d dd  |e.A2...A<.:.AF..|
000086a0  20 f2 64 65 6c 65 74 65  0d 41 50 0b ea 20 61 25  | .delete.AP.. a%|
000086b0  2c 62 25 0d 41 5a 07 ea  20 85 0d 41 64 2b ee 20  |,b%.AZ.. ..Ad+. |
000086c0  85 20 ea 20 f7 20 85 3a  f2 65 72 72 5f 62 61 72  |. . . .:.err_bar|
000086d0  28 b9 29 3a f2 6d 6f 64  65 5f 73 65 6c 65 63 74  |(.):.mode_select|
000086e0  28 33 29 3a e1 0d 41 6e  24 e7 20 63 75 72 5f 6f  |(3):..An$. cur_o|
000086f0  62 6a 25 3c 3e 2d 31 20  80 20 73 65 6c 65 63 74  |bj%<>-1 . select|
00008700  65 64 25 3c 3e 2d 31 20  8c 0d 41 78 2e 20 e7 20  |ed%<>-1 ..Ax. . |
00008710  28 73 65 6c 65 63 74 65  64 25 21 73 75 62 6f 62  |(selected%!subob|
00008720  6a 5f 66 6c 61 67 73 20  80 20 62 69 74 5f 73 75  |j_flags . bit_su|
00008730  72 66 29 3e 30 20 8c 0d  41 82 2b 20 20 c8 99 20  |rf)>0 ..A.+  .. |
00008740  22 42 41 55 33 44 5f 46  72 65 65 22 2c 73 65 6c  |"BAU3D_Free",sel|
00008750  65 63 74 65 64 25 21 73  75 62 6f 62 6a 5f 74 79  |ected%!subobj_ty|
00008760  70 65 0d 41 8c 14 20 20  61 25 3d a4 6f 2b 6f 62  |pe.A..  a%=.o+ob|
00008770  6a 5f 6c 69 73 74 0d 41  96 0c 20 20 62 25 3d 21  |j_list.A..  b%=!|
00008780  61 25 0d 41 a0 16 20 20  c8 95 20 62 25 3c 3e 73  |a%.A..  .. b%<>s|
00008790  65 6c 65 63 74 65 64 25  0d 41 aa 0c 20 20 20 61  |elected%.A..   a|
000087a0  25 3d 62 25 0d 41 b4 18  20 20 20 62 25 3d 61 25  |%=b%.A..   b%=a%|
000087b0  21 73 75 62 6f 62 6a 5f  6e 65 78 74 0d 41 be 07  |!subobj_next.A..|
000087c0  20 20 ce 0d 41 c8 18 20  20 21 61 25 3d 62 25 21  |  ..A..  !a%=b%!|
000087d0  73 75 62 6f 62 6a 5f 6e  65 78 74 0d 41 d2 18 20  |subobj_next.A.. |
000087e0  20 c8 99 20 22 42 41 55  33 44 5f 46 72 65 65 22  | .. "BAU3D_Free"|
000087f0  2c 62 25 0d 41 dc 06 20  cc 0d 41 e6 14 20 20 61  |,b%.A.. ..A..  a|
00008800  25 3d a4 6f 2b 6f 62 6a  5f 6c 69 73 74 0d 41 f0  |%=.o+obj_list.A.|
00008810  0c 20 20 62 25 3d 21 61  25 0d 41 fa 16 20 20 c8  |.  b%=!a%.A..  .|
00008820  95 20 62 25 3c 3e 73 65  6c 65 63 74 65 64 25 0d  |. b%<>selected%.|
00008830  42 04 0c 20 20 20 61 25  3d 62 25 0d 42 0e 18 20  |B..   a%=b%.B.. |
00008840  20 20 62 25 3d 61 25 21  73 75 62 6f 62 6a 5f 6e  |  b%=a%!subobj_n|
00008850  65 78 74 0d 42 18 07 20  20 ce 0d 42 22 18 20 20  |ext.B..  ..B".  |
00008860  21 61 25 3d 62 25 21 73  75 62 6f 62 6a 5f 6e 65  |!a%=b%!subobj_ne|
00008870  78 74 0d 42 2c 18 20 20  c8 99 20 22 42 41 55 33  |xt.B,.  .. "BAU3|
00008880  44 5f 46 72 65 65 22 2c  62 25 0d 42 36 06 20 cd  |D_Free",b%.B6. .|
00008890  0d 42 40 05 cc 0d 42 4a  1b 20 e7 20 a6 2d 31 20  |.B@...BJ. . .-1 |
000088a0  80 20 63 75 72 5f 6f 62  6a 25 3c 3e 2d 31 20 8c  |. cur_obj%<>-1 .|
000088b0  0d 42 54 1e 20 20 f2 64  65 6c 65 74 65 5f 6f 62  |.BT.  .delete_ob|
000088c0  6a 65 63 74 28 63 75 72  5f 6f 62 6a 25 29 0d 42  |ject(cur_obj%).B|
000088d0  5e 06 20 cd 0d 42 68 05  cd 0d 42 72 10 73 65 6c  |^. ..Bh...Br.sel|
000088e0  65 63 74 65 64 25 3d 2d  31 0d 42 7c 18 76 69 65  |ected%=-1.B|.vie|
000088f0  77 5f 6e 65 65 64 73 5f  75 70 64 61 74 65 25 3d  |w_needs_update%=|
00008900  b9 0d 42 86 07 f7 20 85  0d 42 90 05 e1 0d 42 9a  |..B... ..B....B.|
00008910  05 3a 0d 42 a4 17 dd 20  f2 64 65 6c 65 74 65 5f  |.:.B... .delete_|
00008920  6f 62 6a 65 63 74 28 6f  29 0d 42 ae 0e ea 20 61  |object(o).B... a|
00008930  2c 77 61 73 2c 69 25 0d  42 b8 07 ea 20 85 0d 42  |,was,i%.B... ..B|
00008940  c2 25 ee 20 85 20 ea 20  f7 20 85 3a f2 65 72 72  |.%. . . . .:.err|
00008950  5f 62 61 72 28 b9 29 3a  f2 69 6e 66 6f 5f 62 61  |_bar(.):.info_ba|
00008960  72 3a e1 0d 42 cc 35 e7  20 a4 63 72 6f 73 73 5f  |r:..B.5. .cross_|
00008970  72 65 66 28 6f 29 20 85  20 39 39 39 39 2c 22 4f  |ref(o) . 9999,"O|
00008980  62 6a 65 63 74 20 69 73  20 75 73 65 64 20 65 6c  |bject is used el|
00008990  73 65 77 68 65 72 65 22  0d 42 d6 0f 61 3d 6f 62  |sewhere".B..a=ob|
000089a0  6a 21 28 34 2a 6f 29 0d  42 e0 10 61 3d 61 21 6f  |j!(4*o).B..a=a!o|
000089b0  62 6a 5f 6c 69 73 74 0d  42 ea 0c c8 95 20 21 61  |bj_list.B.... !a|
000089c0  3c 3e 30 0d 42 f4 26 20  e7 20 28 61 21 73 75 62  |<>0.B.& . (a!sub|
000089d0  6f 62 6a 5f 66 6c 61 67  73 20 80 20 62 69 74 5f  |obj_flags . bit_|
000089e0  73 75 72 66 29 3e 30 20  8c 0d 42 fe 23 20 20 c8  |surf)>0 ..B.#  .|
000089f0  99 20 22 42 41 55 33 44  5f 46 72 65 65 22 2c 61  |. "BAU3D_Free",a|
00008a00  21 73 75 62 6f 62 6a 5f  74 79 70 65 0d 43 08 06  |!subobj_type.C..|
00008a10  20 cd 0d 43 12 0a 20 77  61 73 3d 61 0d 43 1c 14  | ..C.. was=a.C..|
00008a20  20 61 3d 61 21 73 75 62  6f 62 6a 5f 6e 65 78 74  | a=a!subobj_next|
00008a30  0d 43 26 18 20 c8 99 20  22 42 41 55 33 44 5f 46  |.C&. .. "BAU3D_F|
00008a40  72 65 65 22 2c 77 61 73  0d 43 30 05 ce 0d 43 3a  |ree",was.C0...C:|
00008a50  13 e7 20 6f 3c 6f 62 6a  65 63 74 73 2d 31 20 8c  |.. o<objects-1 .|
00008a60  0d 43 44 17 20 e3 20 69  25 3d 6f 20 b8 20 6f 62  |.CD. . i%=o . ob|
00008a70  6a 65 63 74 73 2d 32 0d  43 4e 1d 20 20 6f 62 6a  |jects-2.CN.  obj|
00008a80  21 28 34 2a 69 25 29 3d  6f 62 6a 21 28 34 2a 69  |!(4*i%)=obj!(4*i|
00008a90  25 2b 34 29 0d 43 58 06  20 ed 0d 43 62 05 cd 0d  |%+4).CX. ..Cb...|
00008aa0  43 6c 0e 6f 62 6a 65 63  74 73 2d 3d 31 0d 43 76  |Cl.objects-=1.Cv|
00008ab0  23 e7 20 63 75 72 5f 6f  62 6a 25 3e 3d 6f 62 6a  |#. cur_obj%>=obj|
00008ac0  65 63 74 73 20 63 75 72  5f 6f 62 6a 25 3d 2d 31  |ects cur_obj%=-1|
00008ad0  0d 43 80 1c f2 65 6e 73  75 72 65 5f 74 68 65 72  |.C...ensure_ther|
00008ae0  65 5f 69 73 5f 61 5f 77  6f 72 6c 64 0d 43 8a 0e  |e_is_a_world.C..|
00008af0  f2 63 6c 73 5f 72 69 67  68 74 0d 43 94 11 f2 6c  |.cls_right.C...l|
00008b00  69 73 74 5f 6f 62 6a 65  63 74 73 0d 43 9e 07 f7  |ist_objects.C...|
00008b10  20 85 0d 43 a8 05 e1 0d  43 b2 05 3a 0d 43 bc 13  | ..C....C..:.C..|
00008b20  dd 20 a4 63 72 6f 73 73  5f 72 65 66 28 6f 29 0d  |. .cross_ref(o).|
00008b30  43 c6 0c ea 20 72 65 66  2c 69 25 0d 43 d0 09 72  |C... ref,i%.C..r|
00008b40  65 66 3d a3 0d 43 da 11  e7 20 6f 62 6a 65 63 74  |ef=..C... object|
00008b50  73 3e 30 20 8c 0d 43 e4  09 20 69 25 3d 30 0d 43  |s>0 ..C.. i%=0.C|
00008b60  ee 1a 20 c8 95 20 69 25  3c 6f 62 6a 65 63 74 73  |.. .. i%<objects|
00008b70  20 80 20 ac 20 72 65 66  0d 43 f8 0f 20 20 e7 20  | . . ref.C..  . |
00008b80  69 25 3c 3e 6f 20 8c 0d  44 02 38 20 20 20 e7 20  |i%<>o ..D.8   . |
00008b90  a4 63 68 65 63 6b 5f 66  6f 72 5f 73 65 6c 66 5f  |.check_for_self_|
00008ba0  72 65 66 28 6f 62 6a 21  28 34 2a 69 25 29 2c 6f  |ref(obj!(4*i%),o|
00008bb0  62 6a 21 28 34 2a 6f 29  29 20 72 65 66 3d b9 0d  |bj!(4*o)) ref=..|
00008bc0  44 0c 07 20 20 cd 0d 44  16 0b 20 20 69 25 2b 3d  |D..  ..D..  i%+=|
00008bd0  31 0d 44 20 06 20 ce 0d  44 2a 05 cd 0d 44 34 08  |1.D . ..D*...D4.|
00008be0  3d 72 65 66 0d 44 3e 05  3a 0d 44 48 42 f4 20 61  |=ref.D>.:.DHB. a|
00008bf0  20 69 73 20 74 68 65 20  61 64 64 72 65 73 73 20  | is the address |
00008c00  6f 66 20 61 6e 20 6f 62  6a 65 63 74 2c 20 62 20  |of an object, b |
00008c10  69 73 20 74 68 65 20 61  64 64 72 65 73 73 20 74  |is the address t|
00008c20  6f 20 63 68 65 63 6b 20  66 6f 72 0d 44 52 05 3a  |o check for.DR.:|
00008c30  0d 44 5c 1e dd 20 a4 63  68 65 63 6b 5f 66 6f 72  |.D\.. .check_for|
00008c40  5f 73 65 6c 66 5f 72 65  66 28 61 2c 62 29 0d 44  |_self_ref(a,b).D|
00008c50  66 0e ea 20 73 65 6c 66  5f 72 65 66 0d 44 70 0e  |f.. self_ref.Dp.|
00008c60  73 65 6c 66 5f 72 65 66  3d a3 0d 44 7a 10 61 3d  |self_ref=..Dz.a=|
00008c70  61 21 6f 62 6a 5f 6c 69  73 74 0d 44 84 18 c8 95  |a!obj_list.D....|
00008c80  20 ac 20 73 65 6c 66 5f  72 65 66 20 80 20 61 3c  | . self_ref . a<|
00008c90  3e 30 0d 44 8e 18 20 e7  20 61 21 73 75 62 6f 62  |>0.D.. . a!subob|
00008ca0  6a 5f 74 79 70 65 3d 62  20 8c 0d 44 98 10 20 20  |j_type=b ..D..  |
00008cb0  73 65 6c 66 5f 72 65 66  3d b9 0d 44 a2 06 20 cc  |self_ref=..D.. .|
00008cc0  0d 44 ac 27 20 20 e7 20  28 61 21 73 75 62 6f 62  |.D.'  . (a!subob|
00008cd0  6a 5f 66 6c 61 67 73 20  80 20 62 69 74 5f 73 75  |j_flags . bit_su|
00008ce0  72 66 29 3d 30 20 8c 0d  44 b6 38 20 20 20 e7 20  |rf)=0 ..D.8   . |
00008cf0  a4 63 68 65 63 6b 5f 66  6f 72 5f 73 65 6c 66 5f  |.check_for_self_|
00008d00  72 65 66 28 61 21 73 75  62 6f 62 6a 5f 74 79 70  |ref(a!subobj_typ|
00008d10  65 2c 62 29 20 73 65 6c  66 5f 72 65 66 3d b9 0d  |e,b) self_ref=..|
00008d20  44 c0 07 20 20 cd 0d 44  ca 06 20 cd 0d 44 d4 23  |D..  ..D.. ..D.#|
00008d30  20 e7 20 ac 20 73 65 6c  66 5f 72 65 66 20 8c 20  | . . self_ref . |
00008d40  61 3d 61 21 73 75 62 6f  62 6a 5f 6e 65 78 74 0d  |a=a!subobj_next.|
00008d50  44 de 05 ce 0d 44 e8 0d  3d 73 65 6c 66 5f 72 65  |D....D..=self_re|
00008d60  66 0d 44 f2 05 3a 0d 44  fc 1b dd 20 f2 63 72 65  |f.D..:.D... .cre|
00008d70  61 74 65 5f 6f 62 6a 65  63 74 28 6e 61 6d 65 24  |ate_object(name$|
00008d80  29 0d 45 06 0e ea 20 6e  65 77 2c 6e 61 6d 65 0d  |).E... new,name.|
00008d90  45 10 23 c8 99 20 22 42  41 55 33 44 5f 4d 61 6c  |E.#.. "BAU3D_Mal|
00008da0  6c 6f 63 22 2c 6f 62 6a  5f 72 65 71 20 b8 20 6e  |loc",obj_req . n|
00008db0  65 77 0d 45 1a 27 c8 99  20 22 42 41 55 33 44 5f  |ew.E.'.. "BAU3D_|
00008dc0  4d 61 6c 6c 6f 63 22 2c  a9 28 6e 61 6d 65 24 29  |Malloc",.(name$)|
00008dd0  2b 32 20 b8 20 6e 61 6d  65 0d 45 24 12 24 6e 61  |+2 . name.E$.$na|
00008de0  6d 65 3d 6e 61 6d 65 24  2b bd 30 0d 45 2e 15 6e  |me=name$+.0.E..n|
00008df0  65 77 21 6f 62 6a 5f 6e  61 6d 65 3d 6e 61 6d 65  |ew!obj_name=name|
00008e00  0d 45 38 12 6e 65 77 21  6f 62 6a 5f 6c 69 73 74  |.E8.new!obj_list|
00008e10  3d 30 0d 45 42 17 6f 62  6a 21 28 34 2a 6f 62 6a  |=0.EB.obj!(4*obj|
00008e20  65 63 74 73 29 3d 6e 65  77 0d 45 4c 0e 6f 62 6a  |ects)=new.EL.obj|
00008e30  65 63 74 73 2b 3d 31 0d  45 56 1f e7 20 63 75 72  |ects+=1.EV.. cur|
00008e40  5f 6d 6f 64 65 25 3d 33  20 f2 6c 69 73 74 5f 6f  |_mode%=3 .list_o|
00008e50  62 6a 65 63 74 73 0d 45  60 05 e1 0d 45 6a 05 3a  |bjects.E`...Ej.:|
00008e60  0d 45 74 0d dd 20 f2 63  72 65 61 74 65 0d 45 7e  |.Et.. .create.E~|
00008e70  0a ea 20 6e 65 77 24 0d  45 88 07 ea 20 85 0d 45  |.. new$.E... ..E|
00008e80  92 2d ee 20 85 20 ea 20  f7 20 85 3a f2 65 72 72  |.-. . . . .:.err|
00008e90  5f 62 61 72 28 b9 29 3a  f2 6d 6f 64 65 5f 73 65  |_bar(.):.mode_se|
00008ea0  6c 65 63 74 28 33 29 3a  87 3a e1 0d 45 9c 05 ee  |lect(3):.:..E...|
00008eb0  0d 45 a6 0e f1 8a 30 2c  32 29 89 36 30 3b 0d 45  |.E....0,2).60;.E|
00008ec0  b0 1f e8 8a 30 2c 32 29  22 43 72 65 61 74 65 20  |....0,2)"Create |
00008ed0  6f 62 6a 65 63 74 3a 20  22 6e 65 77 24 0d 45 ba  |object: "new$.E.|
00008ee0  15 6e 65 77 24 3d a4 73  74 72 69 70 28 6e 65 77  |.new$=.strip(new|
00008ef0  24 29 0d 45 c4 23 e7 20  6e 65 77 24 3c 3e 22 22  |$).E.#. new$<>""|
00008f00  20 f2 63 72 65 61 74 65  5f 6f 62 6a 65 63 74 28  | .create_object(|
00008f10  6e 65 77 24 29 0d 45 ce  13 f2 6d 6f 64 65 5f 73  |new$).E...mode_s|
00008f20  65 6c 65 63 74 28 33 29  0d 45 d8 05 87 0d 45 e2  |elect(3).E....E.|
00008f30  07 f7 20 85 0d 45 ec 05  e1 0d 45 f6 05 3a 0d 46  |.. ..E....E..:.F|
00008f40  00 1e dd 20 f2 65 6e 73  75 72 65 5f 74 68 65 72  |... .ensure_ther|
00008f50  65 5f 69 73 5f 61 5f 77  6f 72 6c 64 0d 46 0a 3b  |e_is_a_world.F.;|
00008f60  e7 20 a4 69 64 65 6e 74  69 66 79 5f 6b 65 79 77  |. .identify_keyw|
00008f70  6f 72 64 28 22 77 6f 72  6c 64 22 29 3d 2d 31 20  |ord("world")=-1 |
00008f80  f2 63 72 65 61 74 65 5f  6f 62 6a 65 63 74 28 22  |.create_object("|
00008f90  77 6f 72 6c 64 22 29 0d  46 14 05 e1 0d ff        |world").F.....|
00008f9e