home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / _ / 3deditor / !3DEditor / !RunImage (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1994-01-07  |  163KB  |  6,431 lines

  1.  Revised 3DEditor Program using Libraries
  2. version$="2.16"
  3. ProgVersion=
  4. (version$)
  5. FileVersion=2.04
  6. $+" at line "+
  7. Wimp_initialise
  8. Heap_initialise
  9. Module_initialise
  10. Window_initialise
  11. Wimp_startscreen
  12. Menu_initialise
  13. Tool_initialise
  14. Choices_initialise
  15. Display_initialise
  16. Object_initialise
  17. Drag_initialise
  18. Module_loaddata
  19. Choices_load
  20. Menu_end
  21. Tool_end
  22. Wimp_endstart
  23. Wimp_iconbar
  24. Object_dostartup
  25. Wimp_err(3)
  26. Wimp_poll(Mask%)
  27. Quit%
  28. Wimp_finish
  29. StartEditing
  30. Object_restart
  31. Window_NewMain
  32. Tool_Clear
  33. Display_restart
  34. Display_RedrawAll
  35. Wimp_initialise
  36. Block%&1000,Errblock%&100,Localblock%&300,Moduleblock%&400
  37. Appname$="!3DEditor"
  38. Name$="3D Editor"
  39. Errname$=Name$
  40. +)Resource$="<3DEditor$Dir>.Resources."
  41. Path$="<3DEditor$Dir>."
  42. NiceError%=
  43. "Wimp_Initialise",200,&4B534154,Name$
  44. WimpVersion%,Mytask%
  45. SysVar("3DEditor$Wimp")="RiscOs2"WimpVersion%=200
  46. SysVar("3DEditor$Wimp")="RiscOs3"WimpVersion%=310
  47. 17NewLookLoaded%=(
  48. SysVar("3DEditor$Info")="NewLook")
  49. Wimp_err(1)
  50. Quit%=
  51. Mask%=%00000001100000110001
  52. Windowflags%=%1111
  53. Ybox%=-1
  54. From%=-1
  55. Pointer$=""
  56. Maxindr%=&6000
  57. Indr%Maxindr%
  58. Fonts%255,Fonts2%255
  59. loop%=0
  60. Fonts%?loop%=0
  61. Fonts2%?loop%=0
  62. DragData%(20,2):DragBars%=1
  63. loop%=0
  64. DragData%(loop%,0)=50
  65. ClickIcon%=-1
  66. ClickWin%=-1
  67. OldMode%=
  68. ClaimRedraw%=-1
  69. ClaimOpen%=-1
  70. MultiTask%=-1
  71. OldPollTime%=-1
  72. "OS_ReadModeVariable",-1,5
  73. ,,yeig%
  74. yeig%=2
  75. SpriteMode$="24"
  76. SpriteMode$="22"
  77. YResolution%=2^yeig%
  78. DragASprite%=
  79. "XOS_SWINumberFromString",,"DragASprite_Start"
  80. DragASprite%=
  81. "OS_Byte",161,28
  82. ,,ok%
  83. DragASprite%=
  84. Wimp_finish
  85. loop%
  86. loop%=0
  87. Fonts%?loop%>0
  88. "Font_LoseFont",loop%:Fonts%?loop%-=1:
  89. loop%
  90. "Wimp_CloseDown",Mytask%,&4B534154
  91. Wimp_err(opt%)
  92. b%=Localblock%
  93. "Wimp_DragBox",,-1
  94. "Wimp_CreateMenu",,-1
  95. "Hourglass_Smash"
  96. *POINTER 1
  97. opt%=1
  98. NiceError%
  99. ans%=
  100. Wimp_Error(2,"Error from 3DEditor","Sorry, 3DEditor has suffered an error during startup and must exit immediately (code "+
  101. +":"+
  102. +")","Quit","Describe","")+1
  103. ans%=3
  104. ans%=
  105. Wimp_Error(1,"Error Description","Fatal internal error : "+
  106. $+" ( code "+
  107. +")","Quit","","")+1
  108. j?ans%=
  109. Wimp_Error(1,"Error from 3DEditor",
  110. $,"Quit","","")+1
  111. njans%=
  112. Wimp_Error(1,"Error from 3DEditor","Fatal internal error - "+
  113. $+" (code "+
  114. +")","Quit","","")+1
  115. p?ans%=
  116. Wimp_Error(1,"Error from 3DEditor",
  117. $,"Quit","","")+1
  118. describe$=""
  119. opt%=3
  120. NiceError%
  121. xXerrmess$="The current 3DEditor operation has suffered an error (code "+
  122. +":"+
  123. y5describe$="Internal error - "+
  124. $+" (code "+
  125. errmess$=
  126. 4errmess$="Internal error - "+
  127. $+" (code "+
  128. errmess$=
  129. describe$=""
  130. Kans%=
  131. Wimp_Error(2,"Error from 3DEditor",errmess$,"Continue","Quit","")
  132. Sans%=
  133. Wimp_Error(3,"Error from 3DEditor",errmess$,"Continue","Quit","Describe")
  134. ans%=3
  135. dum%=
  136. Wimp_Error(1,"Error Description",describe$,"Continue","","")
  137. ans%=2
  138. Quit%=
  139. Wimp_finish:
  140. Wimp_OldPointer(Pointer$)
  141. Wimp_normalerr(opt%)
  142. "Wimp_DragBox",,0
  143. !Errblock%=
  144.     err=
  145. =$(Errblock%+4)="Internal Error at Line "+
  146. )+" ("+
  147. $+")"
  148. "Wimp_ReportError",Errblock%,opt%,Errname$
  149. ,reply%
  150. reply%=2
  151. opt%=1
  152. Quit%=
  153. Wimp_finish:
  154. Errname$=Name$
  155. Wimp_iconbar
  156. $b%=Appname$
  157. !Block%=-1
  158. Block%!4=0
  159. Block%!8=0
  160. Block%!12=68
  161. Block%!16=68
  162. &Block%!20=%00000000011000000011010
  163. $(Block%+24)=Appname$
  164. "Wimp_CreateIcon",,Block%
  165. Wimp_poll(mask%)
  166. (mask%
  167.  MultiTask%<>-1
  168. "OS_ReadMonotonicTime"
  169. newtime%
  170. (newtime%-OldPollTime%)<0
  171. OldPollTime%+=100
  172. "Wimp_PollIdle",mask%
  173. 1,Block%,OldPollTime%
  174. result%
  175. result%=0
  176. Module_call(MultiTask%,"multitask")
  177. result%=-1
  178. "Wimp_Poll",mask%,Block%
  179. result%
  180. result%
  181. Wimp_null
  182. Wimp_redraw(Block%)
  183. Wimp_open(Block%)
  184. Wimp_close(Block%)
  185. Wimp_ptrleaving(Block%)
  186. Wimp_ptrentering(Block%)
  187. Wimp_mouse(Block%)
  188. Wimp_drag(Block%)
  189. Wimp_key(Block%)
  190. Menu_process(Block%)
  191. Wimp_message(Block%)
  192. Wimp_message(Block%)
  193. Wimp_null
  194. MultiTask%<>-1
  195. Module_call(MultiTask%,"multitask")
  196. Activewin%<>0
  197. Dragging%
  198. Window_activenull
  199. Toggled%
  200. Tool_togglenull
  201. Dragging%
  202.  DragType%=2
  203. Drag_redraw(
  204. Dragging%
  205.  DragType%=4
  206. Drag_updatebar
  207. Wimp_redraw(b%)
  208. finish%,hand%
  209. "Wimp_RedrawWindow",,b%
  210. finish%
  211. finish%<>0
  212.  hand%=
  213. Window_whichmain(!b%)
  214. hand%<>-1
  215. Display_wimpred(hand%,b%!28,b%!32,b%!36,b%!40)
  216. Wimp_redrawwindow(b%)
  217. ClaimRedraw%<>-1
  218. Module_call(ClaimRedraw%,"redraw(b%)")
  219. "Wimp_GetRectangle",,b%
  220. finish%
  221. Wimp_open(b%)
  222. !b%>&8000
  223. "Wimp_OpenWindow",,b%
  224. "Wimp_GetWindowState",,b%
  225. !b%=CurrentMain%
  226. (Windowflags%
  227. %0011)=%0001
  228. Window_ReadState(ToolHandle%)
  229. Window_attachos(b%,ToolHandle%,b%!4-Xw%-2+ToolXpos%,b%!16-Yw%+ToolYpos%,b%!4+ToolXpos%,b%!16+ToolYpos%)
  230. (Windowflags%
  231. %1100)=%0100
  232.  Ybox%<>-1
  233. Window_ReadState(Ybox%)
  234. Window_attachos(b%,Ybox%,b%!4+YboxXpos%,b%!8-Yw%+YboxYpos%,b%!4+Xw%+YboxXpos%,b%!8+YboxYpos%)
  235. (Windowflags%
  236. %0011)=%0011
  237. Window_ReadState(ToolHandle%)
  238. Window_attachos(b%,ToolHandle%,b%!4-Xw%-2,b%!16-Yw%,b%!4,b%!16)
  239. (Windowflags%
  240. %1100)=%1100
  241.  Ybox%<>-1
  242. Window_ReadState(Ybox%)
  243. Window_attach(b%,Ybox%,b%!4,b%!8-Yw%-42,b%!4+Xw%,b%!8-42)
  244. !b%=ToolHandle%
  245.  CurrentMain%<>-1
  246. Window_ReadState(CurrentMain%)
  247. ToolXpos%=b%!12-X1%
  248. ToolYpos%=b%!16-Y2%
  249. !b%=Ybox%
  250.  CurrentMain%<>-1
  251. Window_ReadState(CurrentMain%)
  252. YboxXpos%=b%!4-X1%
  253. YboxYpos%=b%!16-Y1%
  254. !b%=ChoiceSurround%
  255.  ChoicePane%<>-1
  256. Window_attach(b%,ChoicePane%,b%!4+28,b%!8+30,b%!4+682,b%!8+480)
  257. ClaimOpen%<>-1
  258. Module_call(ClaimOpen%,"open(b%)")
  259. "Wimp_OpenWindow",,b%
  260. !b%=CurrentMain%
  261. a%=b%+36
  262. (Windowflags%
  263. %0011)=%0001
  264. !a%=ToolHandle%
  265. "Wimp_GetWindowState",,a%
  266. "Wimp_OpenWindow",,a%
  267. Ybox%<>-1
  268. (Windowflags%
  269. %1100)=%0100
  270. !a%=Ybox%
  271. "Wimp_GetWindowState",,a%
  272. "Wimp_OpenWindow",,a%
  273. Wimp_close(b%)
  274. b2%=Localblock%
  275. Window_IsMain(!b%)
  276. Changed%
  277.  MainOpen%=1
  278. ans%=
  279. Wimp_Error(3,"Warning","This file has not been saved. Are you sure that you want to discard it?","Discard","Save","Cancel")
  280. ans%=1
  281. !b%=CurrentMain%
  282. Ybox%<>-1
  283. Window_Close(Ybox%)
  284. Window_Close(ToolHandle%)
  285. CurrentMain%=MainHandle%(1)
  286. MainOpen%=1
  287. Ybox%<>-1
  288. Window_Close(Ybox%)
  289. Tool_End
  290. Window_Close(ToolHandle%)
  291. MainOn%=
  292. Object_endedit
  293. Selected%=-1
  294. Window_RemoveMain(!b%)
  295. Icon_UpText(SaveHandle%,1,File$)
  296. Icon_UpValid(SaveHandle%,2,"sfile_050")
  297. SaveType%=1
  298. FileType%=&050
  299. Window_AsMenu(SaveHandle%)
  300. Window_closeactive(!b%)
  301. ChoiceSurround%
  302. Window_Close(ChoicePane%)
  303. "Wimp_CloseWindow",,b%
  304. "Wimp_GetCaretPosition",,b2%
  305. !b2%=!b%
  306. Wimp_LoseCaret
  307. "Wimp_CloseWindow",,b%
  308. Module_call(
  309. Window_owner(!b%),"closed(!b%)")
  310. Wimp_mouse(b%)
  311. win%,icon%,x%,y%,button%
  312. x%=b%!0
  313. y%=b%!4
  314. button%=b%!8
  315. win%=b%!12
  316. icon%=b%!16
  317. Wimp_processmouse(win%,icon%,x%,y%,button%)
  318. Wimp_processmouse(win%,icon%,x%,y%,button%)
  319. onbar%,b%,altered%
  320. block%=Errblock%
  321. onbar%=-2
  322. altered%=
  323. win%>0
  324.  icon%>0
  325.  button%<>%010
  326. J>block%!0=win%:block%!4=icon%:
  327. "Wimp_GetIconState",,block%
  328. K+block%!4=win%:block%!16+=4:block%!20+=8
  329. (block%!24
  330.  1)<>0
  331. "Wimp_UpdateWindow",,block%+4
  332. more%
  333. more%
  334. xcon%=block%!8-block%!24
  335. ycon%=block%!20-block%!28
  336. QAaltered%=
  337. Wimp_clickicon(win%,icon%,Errblock%+40,xcon%,ycon%)
  338. "Wimp_GetRectangle",,block%+4
  339. more%
  340. altered%
  341. x%,y%,but%
  342. but%=0
  343. Window_IsMain(win%)
  344. Wimp_clickmain(win%,x%,y%,button%)
  345. onbar%:
  346. Wimp_clickonbar(button%)
  347. ToolHandle%:
  348. Window_dragwin(win%,icon%,button%):
  349. Tool_click(icon%,button%)
  350. CoordHandle%:
  351. Wimp_clickcoords(icon%)
  352. SaveHandle%:
  353. Wimp_clicksave(icon%)
  354. MainChoices%:
  355. Wimp_clickchoice1(icon%)
  356. InfoHandle%:
  357. Wimp_clickinfo(icon%)
  358. ChoiceSurround%:
  359. Wimp_clickchoice2(icon%)
  360. MainChoicePane%:
  361. Wimp_clickchoice3(icon%)
  362. GridControl%:
  363. Wimp_clickgrid(icon%)
  364. DepthFadeHandle%:
  365. Wimp_clickdepth(icon%)
  366. win%=Ybox%
  367. Window_dragwin(win%,icon%,button%)
  368. button%<>%010
  369. Module_call(
  370. Window_owner(win%),"click(win%,icon%,x%,y%,button%)")
  371. altered%
  372. Wimp_refreshicon(win%,icon%)
  373. Wimp_drag(b%)
  374. x%,y%,z%,x1%,y1%,z1%
  375. Dragging%=
  376. DragType%
  377. DragASprite%
  378. "DragASprite_Stop"
  379. *POINTER 1
  380. "Wimp_GetPointerInfo",,b%
  381. b%!20=b%!12
  382. b%!24=b%!16
  383. b%!28=!b%
  384. b%!32=b%!4
  385. b%!12=0
  386. b%!16=1
  387. DragSubType%=0
  388. b%!36=Obend%
  389. b%!36=0
  390. b%!40=FileType%
  391. -$(b%+44)=
  392. Leaf(
  393. Icon_Read(SaveHandle%,1))
  394. !b%=(48+
  395. ($(b%+44)))
  396. "Wimp_SendMessage",17,b%,b%!20,b%!24
  397. Save_Ref%=b%!8
  398. 0x1%=DragItemX%:y1%=DragItemY%:z1%=DragItemZ%
  399. x%=b%!0:y%=b%!4
  400. Display_ConvXY(x%,y%)
  401. Display_XYtoXYZ(x1%,y1%,z1%,x%,y%,z%)
  402. Display_ConvXY(StartX%,StartY%)
  403. Display_XYtoXYZ(x1%,y1%,z1%,StartX%,StartY%,sz%)
  404. x%+=x1%-StartX%
  405. y%+=y1%-StartY%
  406. z%+=z1%-sz%
  407. Wimp_OldPointer("ptr_drag")
  408. Module_call(DragTask%,"dragged(DragSubType%,x%,y%,z%)")
  409. x%=b%!0:y%=b%!4
  410. Dragging%=
  411. Mask%=DragMask%
  412. Drag_redraw(
  413. x%=b%!0:y%=b%!4
  414. Module_call(DragTask%,"dragged(DragSubType%,x%,y%,-1)")
  415. *Pointer 1
  416. "Wimp_GetPointerInfo",,b%
  417. b%!12=ToolHandle%
  418.  b%!16>1
  419.  b%!16<Tool%(CurrentTool%,0,0)+1
  420. newicon%=b%!16
  421.     ok%=
  422. LastIcon%=DragSubType%
  423. LastIcon%=newicon%:ok%=
  424. LastIcon%=newicon%
  425. LastIcon%=DragSubType%
  426. ToolMap%(CurrentTool%,DragSubType%-1),ToolMap%(CurrentTool%,b%!16-1)
  427. .num%=ToolMap%(CurrentTool%,DragSubType%-1)
  428. icon%=DragSubType%
  429. (sprite$="s"+Tool$(CurrentTool%,num%)
  430. LastIcon%=icon%
  431. sprite$+="s"
  432. Icon_UpValid(ToolHandle%,icon%,sprite$)
  433. *num%=ToolMap%(CurrentTool%,newicon%-1)
  434. icon%=newicon%
  435. (sprite$="s"+Tool$(CurrentTool%,num%)
  436. LastIcon%=icon%
  437. sprite$+="s"
  438. Icon_UpValid(ToolHandle%,icon%,sprite$)
  439. Mask%=DragMask%
  440. Drag_updatebar
  441. x%=b%!0:y%=b%!4
  442. Display_ConvXY(x%,y%)
  443. Display_XYtoXYZ(0,0,0,x%,y%,z%)
  444. Display_ConvXY(StartX%,StartY%)
  445. Display_XYtoXYZ(0,0,0,StartX%,StartY%,sz%)
  446. x%-=StartX%
  447. y%-=StartY%
  448. z%-=sz%
  449. Wimp_OldPointer("ptr_drag")
  450. Module_call(DragTask%,"dragged(DragSubType%,x%,y%,z%)")
  451. b%!0>b%!8
  452. b%!0,b%!8
  453. b%!4>b%!12
  454. b%!4,b%!12
  455. Module_call(DragTask%,"dragged(DragSubType%,b%,-1,-1)")
  456. DragType%-=1
  457. Wimp_key(b%)
  458. win%,icon%,key%,act%,data%,start%,end%,ok%
  459. b2%=Localblock%
  460. win%=!b%
  461. icon%=b%!4
  462. key%=b%!24
  463. act%=
  464. key%=&18A
  465.  AllowToggle%
  466. Tool_tabtoggle:act%=
  467. data%=
  468. Window_datapos(win%)
  469. data%<>-1
  470. start%=Writeable%(data%,1)
  471. end%=Writeable%(data%,2)
  472. ok%=Writeable%(data%,3)
  473. 13,&18E
  474. icon%<end%
  475. Wimp_SetCaret(win%,icon%+1)
  476. act%=
  477. icon%=end%
  478.  key%<>&18E
  479. Wimp_processmouse(win%,ok%,-1,-1,%100)
  480. act%=
  481. icon%>start%
  482. Wimp_SetCaret(win%,icon%-1)
  483. act%=
  484. DisplayClaimed%
  485. keymenu%=0
  486. keymenu%<=MenuPtr%
  487. keymitem%=0
  488. keymitem%<=Menus%(keymenu%,0,1)
  489. key%=
  490. (Menus%(keymenu%,keymitem%,2))
  491. Menu_warning
  492. key%=Menus%(keymenu%,keymitem%,2)
  493. &task%=Menus%(keymenu%,keymitem%,0)
  494. %num%=Menus%(keymenu%,keymitem%,1)
  495. task%=0
  496. Menu_main(Menu$(keymenu%),num%)
  497. Menu$(keymenu%)="Viewer"
  498. Display_NewViewer(CurrentMain%,task%,num%,keymitem%)
  499. Display_RedrawOne(CurrentMain%)
  500. CursorOn%
  501. Display_MoveCursor(CursorSX%,CursorSY%,CursorSZ%)
  502. Module_call(task%,"menuselect(Menu$(keymenu%),num%)")
  503. act%=
  504. keymitem%+=1
  505. keymenu%+=1
  506. "Wimp_ProcessKey",key%
  507. Wimp_message(b%)
  508. My_Ref%=b%!8
  509. Your_Ref%=b%!12
  510. b%!16
  511. 0:Quit%=
  512. Wimp_dataSaveAck(b%)
  513. Wimp_dataLoad(b%)
  514. Wimp_dataOpen(b%)
  515. Wimp_prequit(b%)
  516. &400C0:
  517. Wimp_menuwarning(b%)
  518. &400C1:
  519. Wimp_modechange
  520. &400C2
  521. Wimp_dataSaveAck(b%)
  522. Your_Ref%<>Save_Ref%
  523. 17,"Unexpected Data Save Acknowlege message received"
  524. Object_save(
  525. GetStr(b%+44),b%!36)
  526. b%!12=My_Ref%
  527. b%!16=3
  528. "Wimp_SendMessage",17,b%,b%!4
  529. Wimp_dataLoad(blk%)
  530. blk%!40=&050
  531. blk%!16=4
  532. blk%!12=My_Ref%
  533. "Wimp_SendMessage",17,blk%
  534. Window_IsMain(blk%!20)
  535. Object_merge(blk%+44)
  536. blk%!20
  537. (MainOn%
  538.  Changed%)
  539. StartEditing
  540. Object_load(blk%+44)
  541. MainOn%=
  542. dum%=
  543. Wimp_Error(1,"Message from 3DEditor","At present this is a single document editor. To load this file, first run another copy of this program.","OK","","")
  544. /Xdum%=
  545. Wimp_Error(1,"Message from 3DEditor","This is not a 3DEditor file","OK","","")
  546. Wimp_dataOpen(b%)
  547. MainOn%
  548.  b%!40=&050
  549. b%!20=-2
  550. Wimp_dataLoad(b%)
  551. Wimp_prequit(b%)
  552. MainOn%
  553.  Changed%
  554. ;uret%=
  555. Wimp_Error(2,"Warning","A 3DEditor file has not been saved. Do you still want to quit?","Quit","Cancel","")
  556. ret%=2
  557. b%!12=My_Ref%
  558. "Wimp_SendMessage",19,b%
  559. Wimp_menuwarning(b%)
  560. b%!32
  561. b%!36
  562. Icon_UpText(SaveHandle%,1,File$)
  563. Icon_UpValid(SaveHandle%,2,"sfile_050")
  564. SaveType%=0
  565. FileType%=&050
  566. Window_openactive(SaveHandle%)
  567. opt%=b%!40
  568. SaveType%=opt%+2
  569. FileType%=Export%(opt%,2)
  570. Icon_UpText(SaveHandle%,1,Export$(opt%))
  571. FileType%=&1000
  572. Icon_UpValid(SaveHandle%,2,"sdirectory")
  573. Icon_UpValid(SaveHandle%,2,"sfile_"+
  574. ~FileType%)
  575. Window_openactive(SaveHandle%)
  576. "Wimp_CreateSubMenu",,b%!20,b%!24,b%!28
  577. Wimp_modechange
  578. loop%,b%,b2%
  579. <>OldMode%
  580. "OS_ReadModeVariable",-1,5
  581. ,,yeig%
  582. YResolution%=2^yeig%
  583. Object_BuildColourTable
  584. b%=Localblock%
  585. b2%=Localblock%+&100
  586. loop%=0
  587. Fonts%?loop%>0
  588. "XFont_ReadDefn",loop%,b%
  589. ,,xsize%,ysize%
  590. "XFont_FindFont",,b%,xsize%,ysize%
  591. handle%
  592. Fonts%?loop%>0
  593. "XFont_LoseFont",loop%:Fonts%?loop%-=1:
  594. handle%>0
  595.  handle%<256
  596. Fonts2%?loop%=handle%
  597. Fonts%?handle%=1
  598. loop%=0
  599. WinPtr%-1
  600. win%=Windows%(loop%,0)
  601. "XWimp_WhichIcon",win%,b%,1<<6,1<<6
  602. 1)<>1
  603. s    at%=0
  604. b%!at%<>-1
  605. !b2%=win%
  606. b2%!4=b%!at%
  607. "Wimp_GetIconState",,b2%
  608. x$fonthand%=(b2%!24>>24)
  609. %11111111
  610. y%fonthand%=(Fonts2%?fonthand%)<<24
  611. b2%!8=fonthand%
  612. b2%!12=%11111111<<24
  613. "Wimp_SetIconState",,b2%
  614. at%+=4
  615. loop%
  616. OldMode%=
  617. Wimp_palettechange
  618. Wimp_palettechange
  619. b%=Localblock%
  620. "Wimp_ReadPalette",,b%
  621.  red%=b%!(11*4):red%=red%
  622. "node%=b%!(7*4):node%=node%
  623. %white%=b%!(0*4):white%=white%
  624. %black%=b%!(7*4):black%=black%
  625. black%<>7
  626. white%<>0
  627. red%<>11
  628. red%=white%
  629. node%=white%
  630. node%
  631. black%=white%
  632. black%
  633. NodeTint%=(node%
  634. &FF)<<6
  635. RedTint%=(red%
  636. &FF)<<6
  637. BlackTint%=(black%
  638. &FF)<<6
  639. NodeColour%=node%>>2
  640. RedColour%=red%>>2
  641. BlackColour%=black%>>2
  642. BlackColour%=black%
  643. BlackTint%=0
  644. RedColour%=red%
  645. RedTint%=0
  646. NodeColour%=node%
  647. NodeTint%=0
  648. Wimp_clickonbar(button%)
  649. hand%,b%
  650. b%=Localblock%
  651. button%
  652. MainOn%
  653. StartEditing
  654. Object_loaddefault
  655. File$="Untitled"
  656. Leaf$=File$
  657. MainOn%=
  658. Window_UpdateTitle
  659. hand%=
  660. Wimp_Error(1,"Message from 3DEditor","It is only possible to edit one image at a time, to edit another load another copy of this program","OK","","")
  661. CurrentInfo%=1
  662. Window_UpdateInfo
  663. !hand%=
  664. Menu_Handle("Iconbar")
  665. "Wimp_CreateMenu",,hand%,x%-hand%!16/2-24,92+(44*4)+(18*2)
  666. !MenuId%=
  667. Menu_find("Iconbar")
  668. Wimp_clickmain(win%,x%,y%,button%)
  669. b%=Localblock%
  670. DisplayClaimed%
  671.  win%<>CurrentMain%
  672. button%=%010
  673. DisplayClaimed%
  674. Menu_warning
  675. Menu_Open("Main",x%,y%)
  676. MenuWindow%=win%
  677. "Wimp_GetCaretPosition",,b%
  678. !b%<>win%
  679. Window_ChangeCurrent(win%)
  680. MainHandle%=win%
  681. Module_call(ToolTask%,"click(win%,-1,x%,y%,button%)")
  682. Wimp_clickcoords(icon%)
  683. x,y,z
  684. icon%=9
  685. icon%=10
  686. Window_Close(CoordHandle%)
  687. icon%=10
  688. Icon_Read(CoordHandle%,6)
  689. Icon_Read(CoordHandle%,7)
  690. Icon_Read(CoordHandle%,8)
  691. Module_call(CoordTask%,"coords(CoordNum%,x,y,z)")
  692. Wimp_clicksave(icon%)
  693. icon%
  694. #file$=
  695. Icon_Read(SaveHandle%,1)
  696. file$=
  697. Leaf(file$)
  698. jdum%=
  699. Wimp_Error(1,"Message from 3DEditor","To save, drag the icon to a directory display","OK","","")
  700. Object_save(file$,0)
  701. Dragging%=
  702. DragTask%=0
  703. DragType%=0
  704. DragSubType%=SaveType%
  705. Window_ReadState(win%)
  706. b%=Errblock%
  707. !b%=SaveHandle%
  708. b%!4=2
  709. "Wimp_GetIconState",,b%
  710. b%!8+=X1%
  711. b%!12+=Y1%+Yw%
  712. b%!16+=X1%
  713. b%!20+=Y1%+Yw%
  714. b%!24=0
  715. b%!28=0
  716. b%!32=&7FFFFFF
  717. b%!36=&7FFFFFF
  718. b%!0=0
  719. b%!4=5
  720. SaveType%=0
  721. type$="file_050"
  722.  type%=Export%(SaveType%-2,2)
  723. type%=&1000
  724. type$="directory"
  725. type$="file_"+
  726. ~type%
  727. DragASprite%
  728. "DragASprite_Start",%11000101,1,type$,b%+8,b%+24
  729. "Wimp_DragBox",,b%
  730. "OS_SpriteOp",36+256,WindowSprites%,"ptr_dragable",2,9,16
  731. Wimp_clickchoice1(icon%)
  732. task%
  733. (icon%-2)/3>=0
  734. (icon%-2)/3<20
  735. task%=Choices%((icon%-2)/3)
  736. task%<>0
  737. 0ChoicePane%=
  738. Module_call(task%,"choiceopen")
  739. ChoicePane%=
  740. Choices_open
  741. Window_OpenCentre(ChoiceSurround%)
  742. Window_Close(MainChoices%)
  743. Wimp_clickchoice2(icon%)
  744. icon%
  745. Choices_Ok
  746. Choices_saveclicked
  747. Window_Close(ChoiceSurround%)
  748. Choices_Ok
  749. Window_Close(ChoiceSurround%)
  750. Wimp_clickchoice3(icon%)
  751. icon%
  752. Icon_IncDec(MainChoicePane%,8,1,1,Tool%(CurrentTool%,0,0),
  753. Icon_IncDec(MainChoicePane%,8,-1,1,Tool%(CurrentTool%,0,0),
  754. Icon_GreyOut(MainChoicePane%,16,(
  755. Icon_ReadState(MainChoicePane%,15))
  756. Choices_Ok
  757. Window_Close(ChoiceSurround%)
  758. Wimp_clickinfo(icon%)
  759. 3    up%=
  760. icon%=20
  761.  CurrentInfo%>1
  762. CurrentInfo%-=1:up%=
  763. icon%=21
  764.  CurrentInfo%<NoModules%
  765. CurrentInfo%+=1:up%=
  766. Window_UpdateInfo
  767. Wimp_clickgrid(icon%)
  768. icon%
  769. Window_Close(GridControl%)
  770. <+GridXSpace%=
  771. Icon_Read(GridControl%,5)
  772. =+GridYSpace%=
  773. Icon_Read(GridControl%,6)
  774. >+GridZSpace%=
  775. Icon_Read(GridControl%,7)
  776. ?-GridOn%=
  777. Icon_ReadState(GridControl%,9)=1
  778. Icon_UpState(Ybox%,12,GridOn%
  779. A1SnapToGrid%=
  780. Icon_ReadState(GridControl%,8)=1
  781. Icon_UpState(Ybox%,4,SnapToGrid%
  782. Display_Update
  783. Window_Close(GridControl%)
  784. icon%=10
  785. icon%=11
  786. "Wimp_CreateMenu",,-1
  787. Wimp_clickdepth(icon%)
  788. icon%
  789. Window_Close(DepthFadeHandle%)
  790. L3DepthFadeStart%=
  791. Icon_Read(DepthFadeHandle%,4)
  792. M1DepthFadeGap%=
  793. Icon_Read(DepthFadeHandle%,5)
  794. N8DepthFadeOn%=(
  795. Icon_ReadState(DepthFadeHandle%,8)=1)
  796. Display_Update
  797. Window_Close(DepthFadeHandle%)
  798. icon%=6
  799. icon%=7
  800. "Wimp_CreateMenu",,-1
  801. Wimp_ptrleaving(Block%)
  802. Activewin%<>0
  803.  WimpVersion%<310
  804. Window_leaveactive(!Block%)
  805. !Block%=CurrentMain%
  806. *POINTER 1
  807. Wimp_ptrentering(Block%)
  808. Activewin%<>0
  809.  WimpVersion%<310
  810. Window_enteractive(!Block%)
  811. !Block%=CurrentMain%
  812.  Pointer$<>""
  813. "OS_SpriteOp",36+256,WindowSprites%,Pointer$,2,PtrActiveX%,PtrActiveY%
  814. Wimp_redrawwindow(b%)
  815. win%,xmin%,xmax%,ymin%,ymax%,xcon%,ycon%,at%,one%,two%
  816. $+" "+
  817. b2%=b%+&200
  818. win%=!b%
  819. c6xmin%=b%!28-(b%!4-b%!20):ymin%=b%!32-(b%!16-b%!24)
  820. d6xmax%=b%!36-(b%!4-b%!20):ymax%=b%!30-(b%!16-b%!24)
  821. e&xcon%=b%!4-b%!20:ycon%=b%!16-b%!24
  822. b%=Localblock%
  823. "Wimp_WhichIcon",win%,b%,1<<7,1<<7
  824. h    at%=0
  825. b%!at%<>-1
  826. b2%!0=win%
  827. b2%!4=b%!at%
  828. "Wimp_GetIconState",,b2%
  829. m    ok%=
  830. b2%!8<xmin%
  831.  b2%!16<xmin%
  832. b2%!12<ymin%
  833.  b2%!20<ymin%
  834. b2%!8>xmax%
  835.  b2%!16>xmax%
  836. Wimp_redrawicon(win%,b%!at%,b2%,0,xcon%,ycon%)
  837. at%+=4
  838. Wimp_refreshicon(win%,icon%)
  839. b%,xcon%,ycon%,more%
  840. b%=Errblock%
  841. y2b%!0=win%:b%!4=icon%:
  842. "Wimp_GetIconState",,b%
  843. ((b%!24>>8)
  844. b%!4=win%:b%!16+=4:b%!20+=8
  845. "Wimp_UpdateWindow",,b%+4
  846. more%
  847. more%
  848. xcon%=b%!8-b%!24
  849. ycon%=b%!20-b%!28
  850. >b2%=b%+40:!b2%=win%:b2%!4=icon%:
  851. "Wimp_GetIconState",,b2%
  852. Wimp_redrawicon(win%,icon%,b2%,0,xcon%,ycon%)
  853. "Wimp_GetRectangle",,b%+4
  854. more%
  855. Wimp_redrawicon(win%,icon%,b%,sel%,xcon%,ycon%)
  856. yr%=YResolution%
  857. iminx%=((b%!8+xcon%)
  858. "iminy%=((b%!12+ycon%)
  859. yr%)*yr%
  860. imaxx%=((b%!16+xcon%)
  861. "imaxy%=((b%!20+ycon%)
  862. yr%)*yr%
  863. b%!32<>-1
  864. valid$=$(b%!32)
  865. valid$,1,1)="b"
  866. opt%=
  867. valid$,2,1))
  868. col%=1
  869. Wimp_raisebox(iminx%,iminy%,imaxx%,imaxy%,col%)
  870. Wimp_okbox(iminx%,iminy%,imaxx%,imaxy%,col%)
  871. Wimp_textbox(iminx%,iminy%,imaxx%,imaxy%)
  872. Wimp_dropbox(iminx%,iminy%,imaxx%,imaxy%,col%)
  873. Wimp_divider(iminx%,iminy%,imaxx%,imaxy%)
  874. Wimp_okbox2(iminx%,iminy%,imaxx%,imaxy%,col%)
  875. Wimp_textbox(iminx%,iminy%,imaxx%,imaxy%)
  876. Wimp_drawdragbar(win%,icon%)
  877. Wimp_drawdragbar(win%,icon%)
  878. b%,b2%
  879. b%=Localblock%+&100
  880. !b%=win%
  881. b%!4=icon%
  882. "Wimp_GetIconState",,b%
  883. b2%=b%+8
  884. flags%=b2%!16
  885. num%=
  886. $(b2%!24),3))
  887. b2%!16=flags%
  888. (1<<5)
  889. "Wimp_PlotIcon",,b2%
  890. col%=((b2%!16)>>24)
  891. %1111
  892. 4b2%!16=((flags%
  893. (1<<5))
  894. (%1111<<28))
  895. (col%<<28)
  896. 5b2%!8=((b2%!8-b2%!0)*DragData%(num%,0)/100)+b2%!0
  897. "Wimp_PlotIcon",,b2%
  898. Wimp_clickicon(win%,icon%,b%,xcon%,ycon%)
  899. altered%=
  900. 2b%!0=win%:b%!4=icon%:
  901. "Wimp_GetIconState",,b%
  902. (iminx%=b%!8+xcon%:iminy%=b%!12+ycon%
  903. )imaxx%=b%!16+xcon%:imaxy%=b%!20+ycon%
  904. b%!32<>-1
  905. (b%!24
  906. 1)<>0
  907. (((b%!24>>8)
  908. 1)=1)
  909. valid$=$(b%!32)
  910. valid$,1,1)="b"
  911. opt%=
  912. valid$,2,1))
  913. 0,6:altered%=
  914. Wimp_dropbox(iminx%,iminy%,imaxx%,imaxy%,14)
  915. 2:altered%=
  916. Wimp_dropbox(iminx%+8,iminy%+8,imaxx%-8,imaxy%-8,14)
  917. =altered%
  918. Wimp_raisebox(x0%,y0%,x1%,y1%,col%)
  919. Wimp_shadowbox(x0%,y0%,x1%-x0%,y1%-y0%,0,col%)
  920. Wimp_dropbox(x0%,y0%,x1%,y1%,col%)
  921. Wimp_shadowbox(x0%,y0%,x1%-x0%,y1%-y0%,1,col%)
  922. Wimp_okbox(x0%,y0%,x1%,y1%,col%)
  923. Wimp_dropbox(x0%,y0%,x1%,y1%,12)
  924. col%=-1 col%=1
  925. Wimp_raisebox(x0%+8,y0%+8,x1%-8,y1%-8,col%)
  926. Wimp_okbox2(x0%,y0%,x1%,y1%,col%)
  927. Wimp_dropbox(x0%-8,y0%-8,x1%+8,y1%+8,12)
  928. col%=-1 col%=1
  929. Wimp_raisebox(x0%,y0%,x1%,y1%,col%)
  930. Wimp_textbox(x0%,y0%,x1%,y1%)
  931. Wimp_dropbox(x0%-8,y0%-8,x1%+10,y1%+10,1)
  932. "Wimp_SetColour",0
  933. x0%,y0%,(x1%-x0%),(y1%-y0%)
  934. "Wimp_SetColour",7
  935. Wimp_divider(x0%,y0%,x1%,y1%)
  936. Wimp_shadowbox(x0%,y0%,x1%-x0%,y1%-y0%,3,-1)
  937. Wimp_shadowbox(x0%+4,y0%+4,x1%-x0%-8,y1%-y0%-8,2,-1)
  938. Wimp_shadowbox(x%,y%,wide%,high%,opt%,back%)
  939. opt%=0
  940. one%=4:two%=0
  941. opt%=1
  942. one%=0:two%=4
  943. opt%=2
  944. one%=2:two%=0
  945. opt%=3
  946. one%=0:two%=2
  947. wide%-=4:high%-=4
  948. back%<>-1
  949. "Wimp_SetColour",back%
  950. x%,y%,wide%,high%
  951. "Wimp_SetColour",one%
  952. x%,y%,wide%,2
  953. x%+wide%-2,y%,2,high%
  954. "Wimp_SetColour",two%
  955. x%,y%+2,2,high%-2
  956. x%,y%+high%,wide%-2,2
  957. "Wimp_SetColour",one%
  958. x%,y%:
  959. x%+2,y%
  960. 85,x%+2,y%+2
  961. x%+wide%,y%+high%
  962. x%+wide%,y%+high%-2
  963. 85,x%+wide%-2,y%+high%-2
  964. "Wimp_SetColour",7
  965. Wimp_startscreen
  966. x%,y%,width%,height%,b%,b2%,b3%
  967. b%=Localblock%
  968. b2%=Localblock%+&50
  969. b3%=Localblock%+&100
  970. width%=900:height%=500
  971. Wimp_ModeSize(x%,y%)
  972. x%-=width%:y%-=height%
  973. x%=x%/2:y%=y%/2
  974. "Wimp_SetColour",7
  975. x%,y%,width%-4,height%-4
  976. Wimp_shadowbox(x%+2,y%+2,width%-4,height%-4,0,1)
  977. Wimp_shadowbox(x%+4,y%+4,width%-8,height%-8,0,1)
  978. $b%="title"
  979. "Wimp_ReadPixTrans",&100,WindowSprites%,b%,,,,b2%,b3%
  980. "OS_SpriteOp",&100+52,WindowSprites%,b%,x%+250,y%+400,&08,b2%,b3%
  981. Wimp_shadowbox(x%+20,y%+20,550,300,1,0)
  982. "Wimp_SetColour",7
  983. x%+26,y%+26,534,284
  984. $b%="opening"
  985. "Wimp_ReadPixTrans",&100,WindowSprites%,b%,,,,b2%,b3%
  986. "OS_SpriteOp",&100+52,WindowSprites%,b%,x%+40,y%+60,&08,b2%,b3%
  987. "Wimp_SetFontColours",,1,7
  988. "Font_FindFont",,"Homerton.Bold",12*16,12*16
  989. handle%
  990. "Font_SetFont",handle%
  991. "Font_Paint",,"Version "+version$,%10000,x%+580,y%+280
  992. "Font_LoseFont",handle%
  993. "Font_FindFont",,"Homerton.Medium",12*16,12*16
  994. handle%
  995. "Font_SetFont",handle%
  996. "Font_Paint",,"
  997.  Simon Wilkinson 1993, 1994",%10000,x%+240,y%+370
  998. "Font_Paint",,"Loading Modules ...",%10000,x%+580,y%+100
  999. "Font_LoseFont",,handle%
  1000. "Font_FindFont",,"Homerton.Medium",10*16,10*16
  1001. Handle%
  1002. "Font_SetFont",Handle%
  1003. 7Xstart%=x%:Ystart%=y%:Width%=width%:Height%=height%
  1004. Wimp_moduledata(name$,ver$)
  1005. "Wimp_SetColour",1
  1006. Xstart%+580,Ystart%+10,250,50
  1007. "Font_SetFont",Handle%
  1008. "Font_Paint",,name$+" version "+ver$,%10000,Xstart%+580,Ystart%+20
  1009. Wimp_endstart
  1010. "Font_LoseFont",Handle%
  1011. "Wimp_ForceRedraw",-1,Xstart%,Ystart%,Xstart%+Width%,Ystart%+Height%
  1012. Window_initialise
  1013. winblock%,dum%
  1014. "OS_SpriteOp",&10B,WindowSprites%,Resource$+"Sprites"+SpriteMode$
  1015. NewLookLoaded%
  1016. "OS_SpriteOp",&10B,WindowSprites%,Resource$+"NoNew"+SpriteMode$
  1017. Windows%(100,1):WinPtr%=0
  1018. Writeable%(50,3):WritePtr%=0
  1019. Activeblock%8*200
  1020. *FActivePtr%=0:Activewin%=0:ActiveIcons%=-1:ActiveOn%=
  1021. :ActiveIn%=-1
  1022. winblock%&3000,Mainblock%&100,Toolblock%&200,YboxSpace%&300
  1023. Titlespace%70*20
  1024. MainHandle%(20):MainOpen%=0:CurrentMain%=-1
  1025. IndrEnd%=Maxindr%+Indr%
  1026. WimpVersion%<310
  1027. "Wimp_OpenTemplate",,Resource$+"Templates"
  1028. "Wimp_OpenTemplate",,Resource$+"TempOs3"
  1029. "Wimp_CloseTemplate":
  1030. Wimp_err(1):
  1031. IndrPos%=Indr%
  1032. 65dum%=
  1033. Window_Create("Main",IndrPos%,Mainblock%,0)
  1034. 74!winblock%=dum%:
  1035. "Wimp_DeleteWindow",,winblock%
  1036. 85dum%=
  1037. Window_Create("ybox",IndrPos%,YboxSpace%,0)
  1038. 94!winblock%=dum%:
  1039. "Wimp_DeleteWindow",,winblock%
  1040. :;InfoHandle%=
  1041. Window_Create("info",IndrPos%,winblock%,0)
  1042. ;<ToolHandle%=
  1043. Window_Create("tool",IndrPos%,Toolblock%,0)
  1044. <>CoordHandle%=
  1045. Window_Create("coords",IndrPos%,winblock%,0)
  1046. ==SaveHandle%=
  1047. Window_Create("saveas",IndrPos%,winblock%,0)
  1048. >?MainChoices%=
  1049. Window_Create("choices",IndrPos%,winblock%,0)
  1050. ?AChoiceSurround%=
  1051. Window_Create("chmain",IndrPos%,winblock%,0)
  1052. @EMainChoicePane%=
  1053. Window_Create("choicepane",IndrPos%,winblock%,0)
  1054. ACGridControl%=
  1055. Window_Create("gridcontrol",IndrPos%,winblock%,0)
  1056. BEDepthFadeHandle%=
  1057. Window_Create("depthfade",IndrPos%,winblock%,0)
  1058. Window_Writeable(CoordHandle%,6,8,10)
  1059. Window_Writeable(SaveHandle%,1,1,0)
  1060. Window_Writeable(MainChoicePane%,8,8,255)
  1061. Window_Writeable(GridControl%,5,7,11)
  1062. Window_Writeable(DepthFadeHandle%,4,5,7)
  1063. winblock%!0=6:winblock%!4=2
  1064. I winblock%!8=7:winblock%!12=2
  1065. J!winblock%!16=8:winblock%!20=2
  1066. K>winblock%!24=-1:
  1067. Window_ActiveIcon(CoordHandle%,winblock%)
  1068. winblock%!0=1:winblock%!4=2
  1069. M winblock%!8=2:winblock%!12=3
  1070. N=winblock%!16=-1:
  1071. Window_ActiveIcon(SaveHandle%,winblock%)
  1072. winblock%!0=8:winblock%!4=2
  1073. P@winblock%!8=-1:
  1074. Window_ActiveIcon(MainChoicePane%,winblock%)
  1075. winblock%!0=5:winblock%!4=2
  1076. R winblock%!8=6:winblock%!12=2
  1077. S!winblock%!16=7:winblock%!20=2
  1078. T>winblock%!24=-1:
  1079. Window_ActiveIcon(GridControl%,winblock%)
  1080. winblock%!0=4:winblock%!4=2
  1081. V winblock%!8=5:winblock%!12=2
  1082. WBwinblock%!16=-1:
  1083. Window_ActiveIcon(DepthFadeHandle%,winblock%)
  1084. "Wimp_CloseTemplate"
  1085. Y+MainXWidth%=Mainblock%!48-Mainblock%!40
  1086. Z+MainYWidth%=Mainblock%!52-Mainblock%!44
  1087. MainOn%=
  1088. Icon_UpText(InfoHandle%,9,version$)
  1089. YboxXpos%=0:YboxYpos%=-42
  1090. ToolXpos%=0:ToolYpos%=0
  1091. Window_attach(block%,win%,x1%,y1%,x2%,y2%)
  1092. block%!36=win%
  1093. "Wimp_GetWindowState",,block%+36
  1094. a%=block%+36
  1095. a%!4=x1%
  1096. a%!8=y1%
  1097. a%!12=x2%
  1098. a%!16=y2%
  1099. block%!28<>win%
  1100. a%!28=block%!28:block%!28=win%
  1101. "Wimp_OpenWindow",,a%
  1102. Window_attachos(block%,win%,x1%,y1%,x2%,y2%)
  1103. x1%<0
  1104. x2%-=x1%
  1105. o    x1%=0
  1106. y1%<0
  1107. y2%-=y1%
  1108. s    y1%=0
  1109. Window_attach(block%,win%,x1%,y1%,x2%,y2%)
  1110. Window_owner(win%)
  1111. loop%
  1112. loop%=0
  1113. loop%<WinPtr%
  1114.  Windows%(loop%,0)<>win%
  1115. loop%+=1
  1116. loop%>=WinPtr%
  1117. =Windows%(loop%,1)
  1118. Window_datapos(win%)
  1119. loop%
  1120. loop%=0
  1121. loop%<WinPtr%
  1122.  Writeable%(loop%,0)<>win%
  1123. loop%+=1
  1124. loop%>=WinPtr%
  1125. =loop%
  1126. Window_openactive(win%)
  1127. ptr%=0
  1128. Activeblock%!ptr%<>win%
  1129.  ptr%<ActivePtr%
  1130. ptr%+=4
  1131. Activeblock%!ptr%<>-1
  1132.  ptr%<ActivePtr%
  1133. ptr%+=4
  1134. ptr%+=4
  1135. ptr%<ActivePtr%
  1136. Activewin%+=1
  1137. %Mask%=Mask%
  1138. %11111111111111001111
  1139. Window_closeactive(win%)
  1140. ActiveIn%=win%
  1141. *POINTER 1
  1142. ptr%=0
  1143. Activeblock%!ptr%<>win%
  1144.  ptr%<ActivePtr%
  1145. ptr%+=4
  1146. Activeblock%!ptr%<>-1
  1147. ptr%+=4
  1148. ptr%+=4
  1149. ptr%<ActivePtr%
  1150. Activewin%-=1
  1151. Activewin%=0
  1152.  Pointer$=""
  1153. %Mask%=Mask%
  1154. %00000000000000110000
  1155. Dragging%
  1156. Toggled%
  1157. Mask%=Mask%
  1158. Window_enteractive(win%)
  1159. ptr%=0
  1160. Activeblock%!ptr%<>win%
  1161.  ptr%<ActivePtr%
  1162. ptr%+=4
  1163. Activeblock%!ptr%<>-1
  1164. ptr%+=4
  1165. ptr%+=4
  1166. ptr%<ActivePtr%
  1167. $ActiveIcons%=Activeblock%+ptr%+4
  1168. %Mask%=Mask%
  1169. %11111111111111111110
  1170. ActiveIn%=win%
  1171. ActiveIcons%=-1
  1172. Dragging%
  1173. Toggled%
  1174. Mask%=Mask%
  1175. %00000000000000000001
  1176. Dragging%
  1177. DragMask%=DragMask%
  1178. ActiveIn%=-1
  1179. Window_leaveactive(win%)
  1180. ActiveIcons%<>-1
  1181. ActiveIcons%=-1
  1182. Dragging%
  1183. Toggled%
  1184. Mask%=Mask%
  1185. %00000000000000000001
  1186. Dragging%
  1187. DragMask%=DragMask%
  1188. ActiveIn%=-1
  1189. *POINTER 1
  1190. Window_activenull
  1191. icon%,ptr%,ptr$,cx%,cy%
  1192. ActiveIn%>0
  1193. "Wimp_GetPointerInfo",,Block%
  1194. ActiveIn%=Block%!12
  1195. icon%=Block%!16
  1196. ptr%=0
  1197. ActiveIcons%!ptr%<>-1
  1198.  ActiveIcons%!ptr%<>icon%
  1199. ptr%+=8
  1200. ActiveIcons%!ptr%<>-1
  1201. ActiveIcons%!(ptr%+4)
  1202. 1:cx%=0:cy%=0:ptr$="ptr_menu"
  1203. 2:cx%=5:cy%=10:ptr$="ptr_caret"
  1204. 3:cx%=9:cy%=16:ptr$="ptr_dragable"
  1205. 17,"Unknown Icon : "+
  1206. ActiveIcons%!(ptr%+4)
  1207. "OS_SpriteOp",36+256,WindowSprites%,ptr$,2,cx%,cy%
  1208. ActiveOn%=
  1209. ActiveOn%
  1210. *POINTER 1
  1211. ActiveOn%=
  1212. Window_dragwin(win%,icon%,button%)
  1213. b%=Localblock%
  1214. (win%=ToolHandle%
  1215. (Windowflags%
  1216. %0010)=0)
  1217. (win%=Ybox%
  1218. (Windowflags%
  1219. %1000)=0)
  1220. icon%
  1221. button%=(%100<<4)
  1222. button%=(%001<<4)
  1223. !b%=win%
  1224. b%!4=1
  1225. "Wimp_DragBox",,b%
  1226. button%=%100
  1227. Window_Front(win%)
  1228. Window_Back(win%)
  1229. Window_whichmain(handle%)
  1230. loop%
  1231. loop%=0
  1232. loop%<=MainOpen%
  1233.  MainHandle%(loop%)<>handle%
  1234. loop%+=1
  1235. MainHandle%(loop%)<>handle%loop%=-1
  1236. =loop%
  1237. Window_readygrid
  1238. Icon_UpText(GridControl%,5,
  1239. GridXSpace%)
  1240. Icon_UpText(GridControl%,6,
  1241. GridYSpace%)
  1242. Icon_UpText(GridControl%,7,
  1243. GridZSpace%)
  1244. Icon_UpState(GridControl%,8,SnapToGrid%
  1245. Icon_UpState(GridControl%,9,GridOn%
  1246. Window_readydepth
  1247. Icon_UpText(DepthFadeHandle%,4,
  1248. DepthFadeStart%)
  1249. Icon_UpText(DepthFadeHandle%,5,
  1250. DepthFadeGap%)
  1251. Icon_UpState(DepthFadeHandle%,8,DepthFadeOn%
  1252. Window_dofancyicons(icons%,block%)
  1253. WimpVersion%<310
  1254. (block%!28
  1255. block%!28=block%!28
  1256. (1<<4)
  1257.         ci%=0
  1258. ci%<>icons%
  1259. at%=ci%*32+88+block%
  1260. flags%=at%!16
  1261. (flags%
  1262. %100000101)=%100000101
  1263.  at%!24<>-1
  1264. $(at%!24),1)="b"
  1265. flags%=flags%
  1266. %100100
  1267. flags%=flags%
  1268. at%!16=flags%
  1269. $(at%!24),2,1))=3
  1270. *at%!0+=8:at%!4+=8:at%!8-=10:at%!12-=10
  1271. at%!16=at%!16
  1272. 7<<24
  1273. $(at%!24),2,1))=7
  1274. at%!16=at%!16
  1275. $(at%!24),2,1))=8
  1276. $(at%!24)="b8"+
  1277. DragBars%
  1278. DragBars%+=1
  1279. ci%+=1
  1280. Menu_initialise
  1281. loop%
  1282. %(MaxMenus%=20:MaxItems%=30:MenuPtr%=0
  1283. Menus%(MaxMenus%,MaxItems%,2),MenuAddr%(MaxMenus%),Menu$(MaxMenus%)
  1284. MenuData%(MaxMenus%,3)
  1285. (#MenuData%=
  1286. Heap_GetBlock(30*50)
  1287. MenuDataPtr%=1
  1288. loop%=0
  1289. MaxMenus%
  1290. addr%28+MaxItems%*24
  1291. Menus%(loop%,0,0)=addr%
  1292. loop%
  1293. ShowHot%=
  1294. MenuLast%=%10000000
  1295. MenuTick%=%1
  1296. MenuDot%=%10
  1297. MenuWriteable=%100
  1298. MenuPlain%=0
  1299. 4"MenuNormal%=(7<<24)
  1300. %100010001
  1301. 5#MenuShaded%=(4<<20)
  1302. MenuNormal%
  1303. Menu_BuildMenu("Iconbar","3D Editor",10)
  1304. Menu_BuildMenu("Main","3D Editor",10)
  1305. Menu_BuildMenu("View","View",12)
  1306. Menu_BuildMenu("Viewer","Display Types",12)
  1307. Menu_BuildMenu("Export","Export to",12)
  1308. Menu_BuildMenu("File","Filing",12)
  1309. Menu_AddItem("Iconbar",0,-1,"Info",InfoHandle%,MenuDot%,MenuNormal%)
  1310. Menu_AddItem("Iconbar",0,6,"Choices ...",-1,0,MenuNormal%)
  1311. Menu_AddItem("Iconbar",0,8,"Save Choices",-1,MenuDot%,MenuNormal%)
  1312. Menu_AddSubMenu("Main","File","File",0,MenuNormal%)
  1313. Menu_AddHotItem("File",0,9,"Save",SaveHandle%,%1000,MenuNormal%,&183)
  1314. Menu_AddSubMenu("File","Export","Export",0,MenuNormal%)
  1315. Menu_AddHotItem("View",0,7,"New View",-1,0,MenuNormal%,&184)
  1316. Menu_AddSubMenu("View","Display Type","Viewer",MenuDot%,MenuNormal%)
  1317. Menu_AddHotItem("View",0,11,"Grid ... ",GridControl%,0,MenuNormal%,&1EA)
  1318. Menu_AddItem("View",0,10,"Depth Fade ... ",DepthFadeHandle%,0,MenuNormal%)
  1319. Menu_AddHotItem("View",0,12,"Show all nodes",-1,0,MenuNormal%,&185)
  1320. Menu_AddHotItem("View",0,13,"Show colours",-1,0,MenuNormal%,&186)
  1321. Menu_end
  1322. Menu_AddItem("Iconbar",0,1,"Quit",-1,0,MenuNormal%)
  1323. Menu_AddSubMenu("Main","View","View",0,MenuNormal%)
  1324. loop%=0
  1325. MenuPtr%-1
  1326. Menu_End(Menu$(loop%))
  1327. loop%
  1328. Menu_ToggleHot
  1329. Menu_find(name$)
  1330. loop%,found%
  1331. found%=-1
  1332. loop%=0
  1333. MenuPtr%
  1334. Menu$(loop%)=name$
  1335. found%=loop%
  1336. =found%
  1337. Menu_process(b%)
  1338. Menu_doit(MenuId%,b%)
  1339. "Wimp_GetPointerInfo",,Localblock%
  1340. Localblock%!8=%001
  1341. Menu_warning
  1342. "Wimp_CreateMenu",,Menus%(MenuId%,0,0)
  1343. Menu_doit(menu%,b%)
  1344. task%,num%,opt%
  1345. opt%=(!b%)+1
  1346. task%=Menus%(menu%,opt%,0)
  1347. num%=Menus%(menu%,opt%,1)
  1348. task%
  1349. Menu_doit(num%,b%+4)
  1350. Menu_main(Menu$(menu%),num%)
  1351. Menu$(menu%)="Viewer"
  1352. Display_NewViewer(MenuWindow%,task%,num%,opt%)
  1353. CurrentMain%=MenuWindow%
  1354.  CursorOn%
  1355. Display_MoveCursor(CursorSX%,CursorSY%,CursorSZ%)
  1356. Display_RedrawOne(MenuWindow%)
  1357. task%>0
  1358.  task%<=NoModules%
  1359. Module_call(task%,"menuselect(Menu$(menu%),num%)")
  1360. Menu_main(menu$,num%)
  1361. MainOn%
  1362.  Changed%
  1363. xnret%=
  1364. Wimp_Error(2,"Warning","Document has not been saved. Do you still want to quit?","Quit","Cancel","")
  1365. ret%=1
  1366. Quit%=
  1367. Quit%=
  1368. 2,3,4,5
  1369. Window_OpenCentre(MainChoices%)
  1370. Window_NewMain
  1371. Choices_saveclicked
  1372. Icon_UpText(SaveHandle%,1,File$)
  1373. Icon_UpValid(SaveHandle%,2,"sfile_050")
  1374. SaveType%=0
  1375. FileType%=&050
  1376. Window_AsMenu(SaveHandle%)
  1377. Window_readydepth
  1378. Window_AsMenu(DepthFadeHandle%)
  1379. Window_readygrid
  1380. Window_AsMenu(GridControl%)
  1381.  ShowAllNodes%=
  1382. ShowAllNodes%
  1383. Menu_Tick("View",4,ShowAllNodes%
  1384. Display_Update
  1385. ShowColours%=
  1386. ShowColours%
  1387. Menu_Tick("View",5,ShowColours%
  1388. Display_Update
  1389. Wimp_Naughty("Display Size : "+
  1390. (DisplaySize%/1024)+"k , Object Size : "+
  1391. (ObjectSize%/1024)+"k, "+Note$)
  1392. Gibberish here.
  1393. Wimp_Naughty("End "+
  1394. +", Variables "+
  1395. Wimp_Naughty("Display%: &"+
  1396. ~Display%(1)+"    ObjectItem%: "+
  1397. ~ObjectItem%)
  1398. Wimp_Naughty("Wimp Version: "+
  1399. WimpVersion%)
  1400. Menu_warning
  1401. x%,y%
  1402. Window_readygrid
  1403. Window_readydepth
  1404. Menu_Tick("View",4,ShowAllNodes%
  1405. Menu_Tick("View",5,ShowColours%
  1406. Module_broadcast("menuwarning")
  1407. Tool_initialise
  1408. Tool$(2,20),Tool%(2,20,1),ToolMap%(2,20)
  1409. ToolPtr%=0
  1410. ToolHeap%=-1
  1411. CurrentTool%=-1
  1412. ToolTask%=-1
  1413. ToolNum%=-1
  1414. LastIcon%=-1
  1415. ToolWidth%=2
  1416. Toggled%=
  1417. AllowToggle%=
  1418. loop%=0
  1419. loop2%=0
  1420. !ToolMap%(loop%,loop2%)=loop2%
  1421. Tool_BuildBox("Main")
  1422. Tool_findbox(name$)
  1423. loop%
  1424. loop%=0
  1425. loop%<6
  1426.  Tool$(loop%,0)<>name$
  1427. loop%+=1
  1428. loop%=6
  1429. 17,"Toolbox '"+name$+"' does not exist"
  1430. =loop%
  1431. Tool_end
  1432. Tool_NewToolBox("Main")
  1433. Tool_click(icon%,button%)
  1434. Toggled%
  1435.  icon%<Tool%(CurrentTool%,0,0)+1
  1436. button%=%100
  1437. Tool_act(icon%)
  1438. (button%=%100*16
  1439. button%=%001*16)
  1440.  icon%>1
  1441. Tool_drag(icon%)
  1442. Tool_drag(icon%)
  1443. Dragging%=
  1444. DragTask%=0
  1445. DragType%=3
  1446. DragSubType%=icon%
  1447. Window_ReadState(ToolHandle%)
  1448. b%=Errblock%
  1449. !b%=ToolHandle%
  1450. b%!4=icon%
  1451. "Wimp_GetIconState",,b%
  1452. b%!8+=X1%
  1453. b%!12+=Y1%+Yw%
  1454. b%!16+=X1%
  1455. b%!20+=Y1%+Yw%
  1456. b%!24=X1%
  1457. b%!28=Y1%
  1458. b%!32=X1%+Yw%
  1459. b%!36=Y1%+Yw%
  1460. b%!0=0
  1461. b%!4=5
  1462. "Wimp_DragBox",,b%
  1463. "OS_SpriteOp",36+256,WindowSprites%,"ptr_dragable",2,9,16
  1464. Tool_act(icon%)
  1465. tool%,name$,num%,ok%,task%
  1466. icon%>1
  1467. CurrentTool%=-1
  1468. 17,"Internal Error - no toolbox defined"
  1469. tool%=CurrentTool%
  1470. name$=Tool$(tool%,0)
  1471. $clicked%=ToolMap%(tool%,icon%-1)
  1472.  num%=Tool%(tool%,clicked%,1)
  1473. !task%=Tool%(tool%,clicked%,0)
  1474. (num%=ToolNum%
  1475.  task%=ToolTask%)
  1476.  task%<>0
  1477. Eok%=
  1478. Module_call(Tool%(tool%,clicked%,0),"toolclick(name$,num%)")
  1479. Module_call(ToolTask%,"toolend(name$,ToolNum%)")
  1480. %ToolTask%=Tool%(tool%,clicked%,0)
  1481. ToolNum%=num%
  1482. Tool_toggle(icon%,LastIcon%)
  1483. LastIcon%=icon%
  1484. ok%=1
  1485. Module_call(Tool%(tool%,clicked%,0),"toolstart(name$,num%)")
  1486. Tool_toggle(set%,clear%)
  1487. b%,valid%
  1488. b%=Localblock%
  1489. set%<>-1
  1490. b%!0=ToolHandle%:b%!4=set%
  1491. "Wimp_GetIconState",,b%
  1492. valid%=b%!32
  1493. $valid%=$valid%+"s"
  1494. ,b%!8=0:b%!12=0:
  1495. "Wimp_SetIconState",,b%
  1496. clear%<>-1
  1497.      b%!0=ToolHandle%:b%!4=clear%
  1498. "Wimp_GetIconState",,b%
  1499. valid%=b%!32
  1500. $valid%=
  1501. $valid%)
  1502. ,b%!8=0:b%!12=0:
  1503. "Wimp_SetIconState",,b%
  1504. Tool_tabtoggle
  1505. Toggled%
  1506.  Flags%(ToolTask%)
  1507.  ToolTask%<>SelectorTask%
  1508. name$="Main"
  1509. ;ok%=
  1510. Module_call(ToolTask%,"toolpause(name$,ToolNum%)")
  1511. :OldTask%=ToolTask%:OldNum%=ToolNum%:OldIcon%=LastIcon%
  1512. ToolTask%=SelectorTask%
  1513. ToolNum%=1
  1514. 9ok2%=
  1515. Module_call(SelectorTask%,"toolclick(name$,1)")
  1516. loop%=0
  1517. loop%<Tool%(0,0,0)
  1518.  ToolMap%(0,loop%)<>SelectorButton%
  1519. loop%+=1
  1520. loop%+=1
  1521. Tool_toggle(loop%,LastIcon%)
  1522. LastIcon%=loop%
  1523. ok2%=1
  1524. Module_call(SelectorTask%,"toolstart(name$,1)")
  1525. ToolMask%=Mask%
  1526. Mask%=Mask%
  1527. Toggled%=
  1528. Tool_togglenull
  1529. "OS_Byte",121,96
  1530. ,rep%
  1531. rep%=0
  1532. x%,y%,but%
  1533. but%=0
  1534. Toggled%=
  1535. Mask%=ToolMask%
  1536. name$="Main"
  1537. Module_call(SelectorTask%,"toolend(name$,1)")
  1538. Tool_toggle(OldIcon%,LastIcon%)
  1539. selecticon%=LastIcon%
  1540. LastIcon%=OldIcon%
  1541. 3'ToolTask%=OldTask%:ToolNum%=OldNum%
  1542. 4=ok%=
  1543. Module_call(ToolTask%,"toolrestart(name$,ToolNum%)")
  1544. ToolTask%=SelectorTask%
  1545. ToolNum%=1
  1546. 99ok2%=
  1547. Module_call(SelectorTask%,"toolclick(name$,1)")
  1548. Tool_toggle(selecticon%,LastIcon%)
  1549. LastIcon%=selecticon%
  1550. ok2%=1
  1551. Module_call(SelectorTask%,"toolstart(name$,1)")
  1552. Tool_savechoices
  1553. loop%=0
  1554. ToolPtr%-1
  1555. Choices_StartSection("Tool_"+Tool$(loop%,0))
  1556. loop2%=1
  1557. Tool%(loop%,0,0)-1
  1558. E tool%=ToolMap%(loop%,loop2%)
  1559. Choices_OutputLine("ToolNumber"+
  1560. loop2%,Tool$(loop%,tool%))
  1561. loop2%
  1562. Choices_EndSection
  1563. loop%
  1564. Tool_choiceclaim(sec$)
  1565. sec$,5)="Tool_")
  1566. Tool_loadline(sec$,title$,val$)
  1567. sec$,5)="Tool_"
  1568. toolbox%=0
  1569. toolbox%<ToolPtr%
  1570. sec$,6)<>Tool$(toolbox%,0)
  1571. toolbox%+=1
  1572. toolbox%<ToolPtr%
  1573. tool%=0
  1574. tool%<Tool%(toolbox%,0,0)
  1575.  Tool$(toolbox%,tool%)<>val$
  1576. tool%+=1
  1577. tool%<Tool%(toolbox%,0,0)
  1578. map%=0
  1579. map%<Tool%(toolbox%,0,0)
  1580.  ToolMap%(toolbox%,map%)<>tool%
  1581. map%+=1
  1582. map%<Tool%(toolbox%,0,0)
  1583. item%=
  1584. title$,11)
  1585. ToolMap%(toolbox%,map%),ToolMap%(toolbox%,item%)
  1586. Choices_initialise
  1587. Choices%(10)
  1588. ChoicePtr%=0
  1589. ChoiceHeap%=-1
  1590. ChoicePane%=-1
  1591. Choices_Add("System","!3dEditor",0)
  1592. Choices_open
  1593. Icon_UpText(MainChoicePane%,8,
  1594. ToolWidth%)
  1595. Icon_UpState(MainChoicePane%,9,(Windowflags%>>0)
  1596. Icon_UpState(MainChoicePane%,10,(Windowflags%>>1)
  1597. Icon_UpState(MainChoicePane%,11,(Windowflags%>>2)
  1598. Icon_UpState(MainChoicePane%,12,(Windowflags%>>3)
  1599. Icon_UpState(MainChoicePane%,15,(ShowColours%)
  1600. Icon_UpState(MainChoicePane%,16,(ShowBackground%)
  1601. Icon_GreyOut(MainChoicePane%,16,(
  1602. ShowColours%)
  1603. =MainChoicePane%
  1604. Choices_mainok
  1605. w-ToolWidth%=
  1606. Icon_Read(MainChoicePane%,8)
  1607. Windowflags%=0
  1608. y7Windowflags%+=
  1609. Icon_ReadState(MainChoicePane%,9)<<0
  1610. z8Windowflags%+=
  1611. Icon_ReadState(MainChoicePane%,10)<<1
  1612. {8Windowflags%+=
  1613. Icon_ReadState(MainChoicePane%,11)<<2
  1614. |8Windowflags%+=
  1615. Icon_ReadState(MainChoicePane%,12)<<3
  1616. }8ShowColours%=(
  1617. Icon_ReadState(MainChoicePane%,15)=1)
  1618. ~;ShowBackground%=(
  1619. Icon_ReadState(MainChoicePane%,16)=1)
  1620. Display_Update
  1621. Tool_Clear
  1622. Tool_NewToolBox(Tool$(CurrentTool%,0))
  1623. ToolHandle%<>-1
  1624. Window_Close(ToolHandle%)
  1625. Ybox%<>-1
  1626. Window_Close(Ybox%)
  1627. MainOn%
  1628. Window_Open(CurrentMain%)
  1629. Choices_saveclicked
  1630. b%=Localblock%
  1631. %ChoiceHandle%=
  1632. (Path$+"!Choices")
  1633. #ChoiceHandle%,"3D Editor version "+version$+" Choices File"
  1634. #ChoiceHandle%,"Created : "+
  1635. Choices_mainsavechoices
  1636. Tool_savechoices
  1637. loop%=0
  1638. ChoicePtr%-1
  1639. task%=Choices%(loop%)
  1640. task%<>0
  1641. Module_call(task%,"savechoices")
  1642. #ChoiceHandle%
  1643. $b%=Path$+"!Choices"
  1644. "OS_File",18,b%,&FFF
  1645. Choices_load
  1646. %ChoiceHandle%=
  1647. (Path$+"!Choices")
  1648. ChoiceHandle%=0
  1649. Wimp_Naughty("Choices file not present, continuing with default settings")
  1650. get$=
  1651. #ChoiceHandle%
  1652. #ChoiceHandle%
  1653. get$,7)="Section"
  1654. sec$=
  1655. get$,11)
  1656. +claimed%=
  1657. Choices_mainchoiceclaim(sec$)
  1658. claimed%
  1659. claimed%=
  1660. Tool_choiceclaim(sec$)
  1661. loop%=0:task%=0
  1662. loop%<=ChoicePtr%
  1663. claimed%
  1664. task%=Choices%(loop%)
  1665. 4claimed%=
  1666. Module_call(task%,"choiceclaim(sec$)")
  1667. loop%+=1
  1668. get$=
  1669. #ChoiceHandle%
  1670. #ChoiceHandle%
  1671.  get$<>"EndSection"
  1672. get$=
  1673. get$,4)
  1674. pos%=
  1675. get$," ")-1
  1676. title$=
  1677. get$,pos%)
  1678. val$=
  1679. get$,23)
  1680. claimed%
  1681. task%=0
  1682. Choices_mainloadline(sec$,title$,val$)
  1683. Tool_loadline(sec$,title$,val$)
  1684. Module_call(task%,"choiceloadline(sec$,title$,val$)")
  1685. get$=
  1686. #ChoiceHandle%
  1687. get$=
  1688. #ChoiceHandle%
  1689. #ChoiceHandle%
  1690. Choices_mainchoiceclaim(sec$)
  1691. l=((sec$="System_ToolWindows")
  1692. (sec$="System_Display")
  1693. (sec$="System_Misc")
  1694. (sec$="Programmer_Settings"))
  1695. Choices_mainloadline(sec$,title$,val$)
  1696. "System_ToolWindows"
  1697. title$
  1698. "ToolBox_Width":ToolWidth%=
  1699. "ToolBox_Show"
  1700. val$="Yes"
  1701. Windowflags%=Windowflags%
  1702. (1<<0)
  1703. val$="No"
  1704. Windowflags%=Windowflags%
  1705. (1<<0)
  1706. "ToolBox_Attach"
  1707. val$="Yes"
  1708. Windowflags%=Windowflags%
  1709. (1<<1)
  1710. val$="No"
  1711. Windowflags%=Windowflags%
  1712. (1<<1)
  1713. "InfoBox_Show"
  1714. val$="Yes"
  1715. Windowflags%=Windowflags%
  1716. (1<<2)
  1717. val$="No"
  1718. Windowflags%=Windowflags%
  1719. (1<<2)
  1720. "InfoBox_Attach"
  1721. val$="Yes"
  1722. Windowflags%=Windowflags%
  1723. (1<<3)
  1724. val$="No"
  1725. Windowflags%=Windowflags%
  1726. (1<<3)
  1727. "System_Display"
  1728. title$
  1729. "ShowColours":ShowColours%=(val$="Yes")
  1730. "ShowBackground":ShowBackground%=(val$="Yes")
  1731. "ShowGrid":GridOn%=(val$="Yes")
  1732. "SnapToGrid":SnapToGrid%=(val$="Yes")
  1733. "GridXSize":GridXSpace%=
  1734. "GridYSize":GridYSpace%=
  1735. "GridZSize":GridZSpace%=
  1736. "UseDepthFade":DepthFadeOn%=(val$="Yes")
  1737. "FadeGap":DepthFadeGap%=
  1738. "FadeStart":DepthFadeStart%=
  1739. "System_Misc"
  1740. title$
  1741. "ShowHotKeys":ShowHot%=(val$="Yes")
  1742. "TabToolToggle":AllowToggle%=(val$="Yes")
  1743. "CTRLconstrain":AllowCTRL%=(val$="Yes")
  1744. "Programmer_Settings"
  1745. title$
  1746. "Development"
  1747. version$+=" Development"
  1748. Icon_UpText(InfoHandle%,9,version$)
  1749. "NiceErrors"
  1750. NiceError%=(val$="Yes")
  1751. Choices_mainsavechoices
  1752. Choices_StartSection("System_ToolWindows")
  1753. Choices_OutputLine("ToolBox_Width",
  1754. ToolWidth%)
  1755. Choices_OutputBin("ToolBox_Show",(Windowflags%>>0)
  1756. Choices_OutputBin("ToolBox_Attach",(Windowflags%>>1)
  1757. Choices_OutputBin("InfoBox_Show",(Windowflags%>>2)
  1758. Choices_OutputBin("InfoBox_Attach",(Windowflags%>>3)
  1759. Choices_EndSection
  1760. Choices_StartSection("System_Display")
  1761. Choices_OutputFlag("ShowColours",ShowColours%)
  1762. Choices_OutputFlag("ShowBackground",ShowBackground%)
  1763. Choices_OutputFlag("ShowGrid",GridOn%)
  1764. Choices_OutputFlag("SnapToGrid",SnapToGrid%)
  1765. Choices_OutputLine("GridXSize",
  1766. GridXSpace%)
  1767. Choices_OutputLine("GridYSize",
  1768. GridYSpace%)
  1769. Choices_OutputLine("GridZSize",
  1770. GridZSpace%)
  1771. Choices_OutputFlag("UseDepthFade",DepthFadeOn%)
  1772. Choices_OutputLine("FadeGap",
  1773. DepthFadeGap%)
  1774. Choices_OutputLine("FadeStart",
  1775. DepthFadeStart%)
  1776. Choices_EndSection
  1777. Choices_StartSection("System_Misc")
  1778. Choices_OutputFlag("ShowHotKeys",ShowHot%)
  1779. Choices_OutputFlag("TabToolToggle",AllowToggle%)
  1780. Choices_OutputFlag("CTRLconstrain",AllowCTRL%)
  1781. Choices_EndSection
  1782. Display_initialise
  1783. DisplaySize%(20),Display%(20),DisplayBounds%(20)
  1784. Scale%(20),CentreX(20),CentreY(20)
  1785. ViewerNum%(20),ViewerTask%(20),WindowView$(20)
  1786. &DisplayIndex%=
  1787. Heap_GetBlock(1024)
  1788. DisplayClaimed%=
  1789. !DisplayIndex%=-1
  1790. DisplayPointList%=-1
  1791. ViewerNum%=-2
  1792. ViewerTask%=-2
  1793. Selected%=-1
  1794. Select_Type%=-1
  1795. Viewer$=""
  1796. Scale%=-1
  1797. CursorOn%=
  1798. ViewChanged%=-1
  1799. ShowColours%=
  1800. ShowBackground%=
  1801. GridOn%=
  1802. GridXSpace%=100
  1803. GridYSpace%=100
  1804. GridZSpace%=1000
  1805. SnapToGrid%=
  1806. ClaimGridOn%=
  1807. ClaimGridXSpace%=100
  1808. ClaimGridYSpace%=100
  1809. ClaimSnapToGrid%=
  1810. AllowCTRL%=
  1811. DisplayLampSize%=12
  1812. DepthFadeOn%=
  1813. DepthFadeGap%=100
  1814. DepthFadeStart%=0
  1815. EditingItem%=
  1816. ShowAllNodes%=
  1817. ItemGreyed%=-1
  1818. ThisGreyed%=-1
  1819. Notify3DRedraw%=-1
  1820. Wimp_palettechange
  1821. "OS_File",5,Resource$+"Code"
  1822. ,,,,len%
  1823. CodeSpace%len%
  1824. "OS_File",16,Resource$+"Code",CodeSpace%,0
  1825. TranslationMatrix%64,Xyz%12
  1826. DisplayMatrix%64,CombinedMatrix%64
  1827. DisplayXyz%16
  1828. Display_newmain(num%)
  1829. DisplaySize%(num%)=1024*50
  1830. 65Display%(num%)=
  1831. Heap_GetBlock(DisplaySize%(num%))
  1832. 7/DisplayBounds%(num%)=
  1833. Heap_GetBlock(4*1024)
  1834. !Display%(num%)=0
  1835. Display_DefaultZoom(MainHandle%(num%))
  1836. Display_NewViewer(MainHandle%(num%),Viewer%(0,0),Viewer%(0,1),1)
  1837. num%>1
  1838. Display_RedrawOne(MainHandle%(num%))
  1839. Display_removemain(num%)
  1840. DisplaySize%(num%)=-1
  1841. Heap_FreeBlock(Display%(num%))
  1842. Heap_FreeBlock(DisplayBounds%(num%))
  1843. Display_mainswap(num1%,num2%)
  1844. DisplaySize%(num1%),DisplaySize%(num2%)
  1845. Display%(num1%),Display%(num2%)
  1846. DisplayBounds%(num1%),DisplayBounds%(num2%)
  1847. WindowView$(num1%),WindowView$(num2%)
  1848. ViewerTask%(num1%),ViewerTask%(num2%)
  1849. ViewerNum%(num1%),ViewerNum%(num2%)
  1850. CentreX(num1%),CentreX(num2%)
  1851. CentreY(num1%),CentreY(num2%)
  1852. Scale%(num1%),Scale%(num2%)
  1853. Display_startredraw(num%)
  1854. N#DisplaySize%=DisplaySize%(num%)
  1855. Display%=Display%(num%)
  1856. P'DisplayBounds%=DisplayBounds%(num%)
  1857. Q!ViewerTask%=ViewerTask%(num%)
  1858. ViewerNum%=ViewerNum%(num%)
  1859. Display_endredraw(num%)
  1860. U3DisplaySize%(num%)=DisplaySize%:DisplaySize%=-1
  1861. V'Display%(num%)=Display%:Display%=-1
  1862. W9DisplayBounds%(num%)=DisplayBounds%:DisplayBounds%=-1
  1863. Display_restart
  1864. CursorOn%=
  1865. !DisplayIndex%=-1
  1866. Display_DefaultZoom(CurrentMain%)
  1867. Display_NewViewer(CurrentMain%,Viewer%(0,0),Viewer%(0,1),1)
  1868. Display_wimpred(interhdl%,dxmin%,dymin%,dxmax%,dymax%)
  1869. Window_ReadState(MainHandle%(interhdl%))
  1870. pos%,xoff%,yoff%,item%,ok%,minx%,maxx%,miny%,maxy%,scale,ThisSelected%,sat%
  1871. ThisSelected%=
  1872. ShowColours%
  1873.  ShowBackground%
  1874. "Wimp_SetColour",7
  1875. dxmin%,dymin%,dxmax%-dxmin%,dymax%-dymin%
  1876. scale=Scale%(interhdl%)/100
  1877. i$xoff%=X1%-X3%+CentreX(interhdl%)
  1878. j6yoff%=Y2%-Y3%-MainYWidth%*scale+CentreY(interhdl%)
  1879. pos%=Display%(interhdl%)
  1880. l display%=Display%(interhdl%)
  1881. dispindex%=DisplayIndex%
  1882. n)dispbounds%=DisplayBounds%(interhdl%)
  1883. "Wimp_SetColour",7
  1884. item%=0
  1885. Note$=""
  1886. dispindex%!(item%*4)<>-1
  1887. off%=dispindex%!(item%*4)
  1888. off%>=0
  1889. u3minx%=!(dispbounds%+(item%*16)+0)*scale+xoff%-8
  1890. v3miny%=!(dispbounds%+(item%*16)+4)*scale+yoff%-8
  1891. w3maxx%=!(dispbounds%+(item%*16)+8)*scale+xoff%+8
  1892. x4maxy%=!(dispbounds%+(item%*16)+12)*scale+yoff%+8
  1893. y    ok%=
  1894. maxx%<dxmin%
  1895. minx%>dxmax%
  1896. maxy%<dymin%
  1897. miny%>dymax%
  1898. Object_Selected(item%)
  1899. DisplayClaimed%
  1900. ItemGreyed%=item%
  1901. "Wimp_SetColour",4:ThisGreyed%=
  1902. ThisSelected%=
  1903. DisplayClaimed%
  1904. Display_doitem(display%+off%,xoff%,yoff%,scale)
  1905. ItemGreyed%=item%
  1906. "Wimp_SetColour",7
  1907. *ThisGreyed%=
  1908. :ThisSelected%=
  1909. :item%+=1
  1910. Selected%>-1
  1911. DisplayClaimed%
  1912. item%=Selected%
  1913. off%=dispindex%!(item%*4)
  1914. off%>0
  1915. 3minx%=!(dispbounds%+(item%*16)+0)*scale+xoff%-8
  1916. 3miny%=!(dispbounds%+(item%*16)+4)*scale+yoff%-8
  1917. 3maxx%=!(dispbounds%+(item%*16)+8)*scale+xoff%+8
  1918. 4maxy%=!(dispbounds%+(item%*16)+12)*scale+yoff%+8
  1919.     ok%=
  1920. maxx%<dxmin%
  1921. minx%>dxmax%
  1922. maxy%<dymin%
  1923. ThisSelected%=
  1924. Display_doitem(display%+off%,xoff%,yoff%,scale)
  1925. ThisSelected%=
  1926. Selected%=-2
  1927. DisplayClaimed%
  1928. ThisSelected%=
  1929. sat%=0
  1930. sat%<SelectPos%
  1931. item%=SelectList%!sat%
  1932. sat%+=4
  1933. off%=dispindex%!(item%*4)
  1934. off%>0
  1935. 4minx%=!(dispbounds%+(item%*16)+0)*scale+xoff%-16
  1936. 4miny%=!(dispbounds%+(item%*16)+4)*scale+yoff%-16
  1937. 4maxx%=!(dispbounds%+(item%*16)+8)*scale+xoff%+16
  1938. 5maxy%=!(dispbounds%+(item%*16)+12)*scale+yoff%+16
  1939.     ok%=
  1940. maxx%<dxmin%
  1941. minx%>dxmax%
  1942. maxy%<dymin%
  1943. miny%>dymax%
  1944. Display_doitem(display%+off%,xoff%,yoff%,scale)
  1945. "Wimp_SetColour",7
  1946. GridOn%
  1947. DisplayClaimed%
  1948. Display_drawgrid(dxmin%,dymin%,dxmax%,dymax%,xoff%,yoff%,scale)
  1949. ClaimGridOn%
  1950.  DisplayClaimed%
  1951.  MainHandle%(interhdl%)=CurrentMain%
  1952. Display_draw2Dgrid(dxmin%,dymin%,dxmax%,dymax%,xoff%,yoff%,scale)
  1953. CursorOn%
  1954.  MainHandle%(interhdl%)=CurrentMain%
  1955. Display_node(CursorX%,CursorY%,xoff%,yoff%,scale)
  1956. DisplayPointList%<>-1
  1957. points%=!DisplayPointList%
  1958. loop%=0
  1959. points%-1
  1960. 'x%=!(DisplayPointList%+(loop%*8)+4)
  1961. 'y%=!(DisplayPointList%+(loop%*8)+8)
  1962. Display_node2(x%,y%,xoff%,yoff%,scale)
  1963. Display_doitem(pos%,xoff%,yoff%,scale)
  1964. b%,b2%
  1965. b%=Localblock%+&100
  1966. b2%=b%+32
  1967. !b%=pos%
  1968. b%!4=xoff%
  1969. b%!8=yoff%
  1970. b%!12=scale*(1<<8)
  1971. b%!16=ShowAllNodes%
  1972. b%!16+=ShowColours%
  1973. b%!16+=DepthFadeOn%
  1974. b%!16+=ThisSelected%
  1975. b%!16+=ThisGreyed%
  1976. b%!20=b2%
  1977. b2%!0=ObjectColTab%
  1978. b2%!4=DepthFadeStart%
  1979. b2%!8=DepthFadeGap%
  1980.     A%=b%
  1981. CodeSpace%+36
  1982. Display_updatecursor
  1983. b%,scale,internal%
  1984. -internal%=
  1985. Window_whichmain(CurrentMain%)
  1986. Window_ReadState(CurrentMain%)
  1987. b%=Localblock%
  1988. !b%=CurrentMain%
  1989. b%!4=X3%
  1990. b%!8=Y3%-Yw%
  1991. b%!12=X3%+Xw%
  1992. b%!16=Y3%
  1993. scale=Scale%(internal%)/100
  1994. $xoff%=X1%-X3%+CentreX(internal%)
  1995. 6yoff%=Y2%-Y3%-MainYWidth%*scale+CentreY(internal%)
  1996. "Wimp_UpdateWindow",,b%
  1997. more%
  1998. more%
  1999. Display_node(CursorX%,CursorY%,xoff%,yoff%,scale)
  2000. "Wimp_GetRectangle",,b%
  2001. more%
  2002. Display_node(x%,y%,xo%,yo%,scale)
  2003. x%=x%*scale+xo%
  2004. y%=y%*scale+yo%
  2005. 3,NodeColour%
  2006. NodeTint%
  2007. x%-8,y%-8,16,16
  2008. x%-10,y%-10,20,20
  2009. Display_node2(x%,y%,xo%,yo%,scale)
  2010. x%=x%*scale+xo%
  2011. y%=y%*scale+yo%
  2012. "Wimp_SetColour",11
  2013. x%-4,y%-4,8,8
  2014. "Wimp_SetColour",7
  2015. Display_node3(x%,y%,xo%,yo%,scale)
  2016. x%+=xo%
  2017. y%+=yo%
  2018. "Wimp_SetColour",11
  2019. x%-4,y%-4,8,8
  2020. "Wimp_SetColour",7
  2021. Display_checksize(
  2022. Display%,
  2023. disppos%,needed%)
  2024. disppos%+needed%>Display%+DisplaySize%
  2025. $needed%=(
  2026. (needed%/1024)+1)*1024
  2027. disppos%-=Display%
  2028. =Display%=
  2029. Heap_ExtendBlock(Display%,DisplaySize%+needed%)
  2030. DisplaySize%+=needed%
  2031. disppos%+=Display%
  2032. Display_draw2Dgrid(xmin%,ymin%,xmax%,ymax%,xoff%,yoff%,scale)
  2033. 7xmin%=(xmin%-xoff%)/scale:ymin%=(ymin%-yoff%)/scale
  2034. 7xmax%=(xmax%-xoff%)/scale:ymax%=(ymax%-yoff%)/scale
  2035. "Wimp_SetColour",7
  2036. 6xmin%=(
  2037. (xmin%/ClaimGridXSpace%))*ClaimGridXSpace%
  2038. 9xmax%=(
  2039. (xmax%/ClaimGridXSpace%+.5))*ClaimGridXSpace%
  2040. 6ymin%=(
  2041. (ymin%/ClaimGridYSpace%))*ClaimGridYSpace%
  2042. 9ymax%=(
  2043. (ymax%/ClaimGridYSpace%+.5))*ClaimGridYSpace%
  2044. x%=xmin%
  2045. xmax%
  2046. ClaimGridXSpace%
  2047. y%=ymin%
  2048. ymax%
  2049. ClaimGridYSpace%
  2050. x1%=x%:y1%=y%:z1%=z%
  2051. x1%=x1%*scale+xoff%
  2052. y1%=y1%*scale+yoff%
  2053. x1%-4,y1%:
  2054. x1%+4,y1%
  2055. x1%,y1%-4:
  2056. x1%,y1%+4
  2057. Display_drawgrid(xmin%,ymin%,xmax%,ymax%,xoff%,yoff%,scale)
  2058. 7xmin%=(xmin%-xoff%)/scale:ymin%=(ymin%-yoff%)/scale
  2059. 7xmax%=(xmax%-xoff%)/scale:ymax%=(ymax%-yoff%)/scale
  2060. "Wimp_SetColour",7
  2061. Display_XYtoXYZNS(0,0,0,xmin%,ymin%,zmin%)
  2062. Display_XYtoXYZNS(0,0,0,xmax%,ymax%,zmax%)
  2063. ,xmin%=(
  2064. (xmin%/GridXSpace%))*GridXSpace%
  2065. /xmax%=(
  2066. (xmax%/GridXSpace%+.5))*GridXSpace%
  2067. ,ymin%=(
  2068. (ymin%/GridYSpace%))*GridYSpace%
  2069. /ymax%=(
  2070. (ymax%/GridYSpace%+.5))*GridYSpace%
  2071. ,zmin%=(
  2072. (zmin%/GridZSpace%))*GridZSpace%
  2073. /zmax%=(
  2074. (zmax%/GridZSpace%+.5))*GridZSpace%
  2075. Module_call(ViewerTask%,"dispinfo(ViewerNum%,xi%,yi%,zi%)")
  2076. xi%=-1
  2077. xmin%=0:xmax%=0
  2078. yi%=-1
  2079. ymin%=0:ymax%=0
  2080. zi%=-1
  2081. zmin%=0:zmax%=0
  2082. zi%=0
  2083. zmin%=0:zmax%=0
  2084. b%=Localblock%+&100
  2085. #Hb%!0=xmin%:b%!4=ymin%:b%!8=zmin%:b%!12=xmax%:b%!16=ymax%:b%!20=zmax%
  2086. $9b%!24=GridXSpace%:b%!28=GridYSpace%:b%!32=GridZSpace%
  2087. %Cb%!36=xoff%:b%!40=yoff%:b%!44=scale*(1<<8):b%!48=DisplayMatrix%
  2088. &(b%!52=DisplayCode%:b%!56=DisplayXyz%
  2089. '    A%=b%
  2090. CodeSpace%+40
  2091. Object_initialise
  2092. Files%=0:CurrentFile%=0
  2093. File$="Untitled"
  2094. Leaf$=File$
  2095. Changed%=
  2096. CurrentObj%=-1
  2097. CopyBuf%=-1
  2098. ObjectList%=-1
  2099. ObjectItem%=-1
  2100. ObjectColour%=-1
  2101. ObjectColTab%=-1
  2102. SelectList%=-1
  2103. ColDataLen%=60
  2104. "OS_File",5,Resource$+"Default"
  2105. ,,,,len%
  2106. 8'ObjectDefault%=
  2107. Heap_GetBlock(len%)
  2108. "OS_File",16,Resource$+"Default",ObjectDefault%,0
  2109. Object_dostartup
  2110. "OS_GetEnv"
  2111. "OS_ReadArgs","BASIC,quit/k,load/k,-help/k,-chain/k,file/k",b%,Block%,256
  2112. (Block%!20)<>0
  2113. StartEditing
  2114. Object_load(Block%!20)
  2115. MainOn%=
  2116. Object_restart
  2117. E3ObjectList%=
  2118. Heap_ExtendBlock(ObjectList%,1024)
  2119. F6ObjectItem%=
  2120. Heap_ExtendBlock(ObjectItem%,10*1024)
  2121. ObjectSize%=10*1024
  2122. HAObjectColour%=
  2123. Heap_ExtendBlock(ObjectColour%,30*ColDataLen%)
  2124. I7ObjectColTab%=
  2125. Heap_ExtendBlock(ObjectColTab%,40*4)
  2126. J4SelectList%=
  2127. Heap_ExtendBlock(SelectList%,100*4)
  2128. SelectPos%=0
  2129. LastColour%=0
  2130. Objects%=0:Obend%=0
  2131. N$dummy%=
  2132. Object_NewObject("Root")
  2133. Object_NewColour("Default",0,0,0,0,0,0,0,0,0,0,0,0,1,0,0)
  2134. Object_BuildColourTable
  2135. CurrentObj%=dummy%
  2136. File$="Untitled"
  2137. Leaf$=File$
  2138. Changed%=
  2139. Selected%=-1
  2140. Select_Type%=-1
  2141. Object_endedit
  2142. Heap_FreeBlock(ObjectList%)
  2143. Heap_FreeBlock(ObjectItem%)
  2144. Heap_FreeBlock(ObjectColour%)
  2145. Heap_FreeBlock(ObjectColTab%)
  2146. Heap_FreeBlock(SelectList%)
  2147. Heap_FreeBlock(CopyBuf%)
  2148. Object_loaddefault
  2149. b"progver%=
  2150. (ProgVersion*100+.5)
  2151. c"filever%=
  2152. (FileVersion*100+.5)
  2153. b%=ObjectDefault%
  2154. majorver%=b%!8
  2155. minorver%=b%!12
  2156. dum%=b%?8
  2157. b%?8=&0D:id$=$b%
  2158. b%?8=dum%
  2159. id$<>"3DEditor"
  2160. 17,"Default file is not a 3DEditor file (File ID string incorrect)"
  2161. minorver%>progver%
  2162. dum%=
  2163. Wimp_Error(1,"Warning from 3DEditor","The default file was created with an newer version of 3DEditor and may contain features not present in this version","OK","","")
  2164. majorver%>filever%
  2165. 17,"The default file is from a newer version of 3DEditor and cannot be loaded by this version"
  2166. Obend%=b%!16
  2167. majorver%>=201
  2168. zoom%=b%!28
  2169. Viewer_Xpos%=b%!32
  2170. Viewer_Ypos%=b%!36
  2171. Viewer_Zpos%=b%!40
  2172. majorver%>=203
  2173. u!LastColour%=b%!20/ColDataLen%
  2174. collen%=b%!20
  2175. b%+=64
  2176. Objects%=!b%
  2177. z    b%+=4
  2178. b2%=ObjectList%
  2179. Objects%*16+4
  2180. b2%!l%=b%!l%
  2181. b%+=Objects%*16
  2182. ObjectSize%=Obend%+1024
  2183. :ObjectItem%=
  2184. Heap_ExtendBlock(ObjectItem%,ObjectSize%)
  2185. b2%=ObjectItem%
  2186. Obend%+4
  2187. b2%!l%=b%!l%
  2188. b%+=Obend%
  2189. AObjectColour%=
  2190. Heap_ExtendBlock(ObjectColour%,30*ColDataLen%)
  2191. majorver%>=203
  2192. b2%=ObjectColour%
  2193. collen%+4
  2194. b2%!l%=b%!l%
  2195. b%+=collen%
  2196. Changed%=
  2197. File$="Untitled"
  2198. Leaf$="Untitled"
  2199. Window_UpdateTitle
  2200. Selected=-1
  2201. Select_Tool%=-1
  2202. ObjectAtEnd%=-1
  2203. Object_BuildColourTable
  2204. Display_RedrawAll
  2205. Object_load(name%)
  2206. b%,dum%
  2207. handle%=
  2208. GetStr(name%))
  2209. b%=Localblock%
  2210. "OS_GBPB",4,handle%,b%,64
  2211. "progver%=
  2212. (ProgVersion*100+.5)
  2213. "filever%=
  2214. (FileVersion*100+.5)
  2215. majorver%=b%!8
  2216. minorver%=b%!12
  2217. b%?8=&0D:id$=$b%
  2218. id$<>"3DEditor"
  2219. #handle%:
  2220. 17,"File is not a 3DEditor file (File ID string incorrect)"
  2221. minorver%>progver%
  2222. dum%=
  2223. Wimp_Error(1,"Warning from 3DEditor","This file was created with an newer version of 3DEditor and may contain features not present in this version","OK","","")
  2224. majorver%>filever%
  2225. #handle%:
  2226. 17,"This file is from a newer version of 3DEditor and cannot be loaded by this version"
  2227. Obend%=b%!16
  2228. majorver%>=201
  2229. zoom%=b%!28
  2230. Viewer_Xpos%=b%!32
  2231. Viewer_Ypos%=b%!36
  2232. Viewer_Zpos%=b%!40
  2233. majorver%>=203
  2234. !LastColour%=b%!20/ColDataLen%
  2235. collen%=b%!20
  2236. "OS_GBPB",4,handle%,b%,4
  2237. Objects%=!b%
  2238. "OS_GBPB",4,handle%,ObjectList%,Objects%*16
  2239. ObjectSize%=Obend%+1024
  2240. :ObjectItem%=
  2241. Heap_ExtendBlock(ObjectItem%,ObjectSize%)
  2242. "OS_GBPB",4,handle%,ObjectItem%,Obend%
  2243. majorver%<204
  2244. Object_wordalign
  2245. AObjectColour%=
  2246. Heap_ExtendBlock(ObjectColour%,30*ColDataLen%)
  2247. majorver%>=203
  2248. "OS_GBPB",4,handle%,ObjectColour%,collen%
  2249. #handle%
  2250. Changed%=
  2251. File$=
  2252. GetStr(name%)
  2253. Leaf$=
  2254. Leaf(File$)
  2255. Window_UpdateTitle
  2256. Selected%=-1
  2257. Select_Tool%=-1
  2258. ObjectAtEnd%=-1
  2259. Object_BuildColourTable
  2260. Display_RedrawAll
  2261. Object_merge(name%)
  2262. handle%=
  2263. ($name%)
  2264. b%=Localblock%
  2265. "OS_GBPB",4,handle%,b%,64
  2266. "progver%=
  2267. (ProgVersion*100+.5)
  2268. "filever%=
  2269. (FileVersion*100+.5)
  2270. majorver%=b%!8
  2271. minorver%=b%!12
  2272. b%?8=&0D:id$=$b%
  2273. id$<>"3DEditor"
  2274. #handle%:
  2275. 17,"File is not a 3DEditor file (File ID string incorrect)"
  2276. minorver%>progver%
  2277. dum%=
  2278. Wimp_Error(1,"Warning from 3DEditor","This file was created with an newer version of 3DEditor and may contain features not present in this version","OK","","")
  2279. majorver%>filever%
  2280. #handle%:
  2281. 17,"This file is from a newer version of 3DEditor and cannot be loaded by this version"
  2282. majorver%>=203
  2283. collen%=b%!20
  2284. obsize%=b%!16
  2285. "OS_GBPB",4,handle%,b%,4
  2286. newobjects%=!b%
  2287. "OS_GBPB",4,handle%,ObjectList%+Objects%*16,newobjects%*16
  2288. ObjectSize%=Obend%+obsize%
  2289. :ObjectItem%=
  2290. Heap_ExtendBlock(ObjectItem%,ObjectSize%)
  2291. "OS_GBPB",4,handle%,ObjectItem%+Obend%,obsize%
  2292. majorver%<204
  2293. Object_wordalign
  2294. majorver%>=203
  2295. "OS_GBPB",4,handle%,ObjectColour%+LastColour%*ColDataLen%,collen%
  2296. #handle%
  2297. sizeinc%=Obend%
  2298. Obend%+=obsize%
  2299. loop%=Objects%
  2300. Objects%+newobjects%-1
  2301. $ObjectList%!(loop%*16)+=sizeinc%
  2302. loop2%=0
  2303. ObjectList%?(loop%*16+4)-1
  2304. 3pos%=
  2305. Object_FindItem(loop%,loop2%)+ObjectItem%
  2306. type%=?pos%
  2307. type%=3
  2308. pos%!44+=Objects%
  2309. pos%?1+=LastColour%
  2310. loop2%
  2311. loop%
  2312. Objects%+=newobjects%
  2313. Changed%=
  2314. ObjectAtEnd%=-1
  2315. Window_UpdateTitle
  2316. majorver%>=203
  2317. LastColour%+=collen%/ColDataLen%
  2318. Object_BuildColourTable
  2319. Object_save(name$,safe%)
  2320. buffer%
  2321. buffer%=Localblock%
  2322. SaveType%=0
  2323. SaveType%=1
  2324. Obend%=0
  2325. loop%=0
  2326. Objects%-1
  2327. 1Obend%+=!(ObjectList%!(loop%*16)+ObjectItem%)
  2328. handle%=
  2329. (name$)
  2330. $buffer%="3DEditor"
  2331. #buffer%!8=
  2332. (FileVersion*100+.5)
  2333. $buffer%!12=
  2334. (ProgVersion*100+.5)
  2335. buffer%!16=Obend%
  2336. &buffer%!20=LastColour%*ColDataLen%
  2337. buffer%!24=-1
  2338. buffer%!28=Scale%
  2339. buffer%!32=Viewer_Xpos%
  2340. buffer%!36=Viewer_Ypos%
  2341. buffer%!40=Viewer_Zpos%
  2342. loop%=44
  2343. buffer%!loop%=0
  2344. loop%
  2345. "OS_GBPB",2,handle%,buffer%,64
  2346. !buffer%=Objects%
  2347. "OS_GBPB",2,handle%,buffer%,4
  2348. "OS_GBPB",2,handle%,ObjectList%,Objects%*16
  2349. "OS_GBPB",2,handle%,ObjectItem%,Obend%
  2350. "OS_GBPB",2,handle%,ObjectColour%,LastColour%*ColDataLen%
  2351. #handle%
  2352. "OS_File",18,name$,&050
  2353. safe%<>-1
  2354. Changed%=
  2355. File$=name$
  2356. Leaf$=
  2357. Leaf(File$)
  2358. Window_UpdateTitle
  2359. Object_StartExport(name$,FileType%,SaveType%-2)
  2360. "Wimp_CreateMenu",,-1
  2361. Object_wordalign
  2362. loop%,loop2%,loop3%,pos%
  2363. loop%=0
  2364. Objects%-1
  2365.      -pos%=ObjectList%!(loop%*16)+ObjectItem%+4
  2366. added%=0
  2367. Object_checksize(ObjectItem%,pos%,ObjectList%?(loop%*16+4)*2)
  2368.     #-pos%=ObjectList%!(loop%*16)+ObjectItem%+4
  2369. loop2%=0
  2370. ObjectList%?(loop%*16+4)-1
  2371. loop3%=Obend%+ObjectItem%
  2372. pos%+2
  2373. ?(loop3%+2)=?loop3%
  2374. Obend%+=2
  2375. added%+=2
  2376. pos%?2=0
  2377. pos%?3=0
  2378. datalen%=pos%!40
  2379. pos%+=44+datalen%
  2380.     /1!(ObjectList%!(loop%*16)+ObjectItem%)+=added%
  2381. loop2%=0
  2382. Objects%
  2383. ObjectList%!(loop2%*16)>ObjectList%!(loop%*16)
  2384.     2#ObjectList%!(loop2%*16)+=added%
  2385. Object_toend(obj%)
  2386. dum%,start%,len%,end%,copy%,loc%,loop%
  2387. ObjectAtEnd%<>obj%
  2388. "Hourglass_On"
  2389.     ;,start%=ObjectList%!(obj%*16)+ObjectItem%
  2390. len%=!start%
  2391. Obend%=0
  2392. loop%=0
  2393. Objects%-1
  2394.     ?1Obend%+=!(ObjectList%!(loop%*16)+ObjectItem%)
  2395. Object_checksize(ObjectItem%,start%,Obend%+len%+1024)
  2396. end%=Obend%+ObjectItem%
  2397. copy%=0
  2398. end%!copy%=start%!copy%
  2399. copy%=start%
  2400. !copy%=copy%!len%
  2401.     I start%=ObjectList%!(obj%*16)
  2402. loop%=0
  2403. Objects%
  2404. loc%=ObjectList%!(loop%*16)
  2405. loc%>start%
  2406. ObjectList%!(loop%*16)-=len%
  2407.     N%ObjectList%!(obj%*16)=Obend%-len%
  2408. "Hourglass_Off"
  2409. ObjectAtEnd%=obj%
  2410. Object_itemtoend(obj%,
  2411. itm%)
  2412. itm%<>ObjectList%?(obj%*16+4)-1
  2413. flag%=
  2414. CopyBuf%<>-1
  2415. flag%=
  2416.     X*CopyBufInt%=
  2417. Heap_GetBlock(CopyBuf%!4)
  2418. len%=CopyBuf%!4
  2419. loop%=0
  2420.     [$CopyBufInt%!loop%=CopyBuf%!loop%
  2421.     ^,itm2%=
  2422. Object_CloneItem(obj%,itm%,0,0,0)
  2423. Object_DeleteItem(obj%,itm%)
  2424. itm%=itm2%-1
  2425. flag%
  2426. len%=CopyBufInt%!4
  2427.     c-CopyBuf%=
  2428. Heap_ExtendBlock(CopyBuf%,len%)
  2429. loop%=0
  2430.     e$CopyBuf%!loop%=CopyBufInt%!loop%
  2431. Object_checksize(
  2432. ObjectItem%,
  2433. pointer%,needed%)
  2434. "OS_Heap",6,Heapd%,ObjectItem%
  2435. ,,,os%
  2436. pointer%+needed%+1024>ObjectItem%+os%
  2437. pointer%-=ObjectItem%
  2438.     nBObjectItem%=
  2439. Heap_ExtendBlock(ObjectItem%,ObjectSize%+needed%)
  2440. ObjectSize%=os%+needed%
  2441. pointer%+=ObjectItem%
  2442. Heap_initialise
  2443. Heapd%=
  2444. "Wimp_SlotSize",-1,-1
  2445. Appsize%
  2446. Heapsize%=32*1024
  2447. "Wimp_SlotSize",Appsize%+Heapsize%,-1
  2448. "XOS_Heap",0,Heapd%,,Heapsize%
  2449. 17,"Not enough memory to initialise heap"
  2450. Heap_extendheap
  2451. heapfull%,new%
  2452. "XWimp_SlotSize",Appsize%+Heapsize%+32*1024,-1
  2453. new%;heapfull%
  2454.     ~ heapfull%=((heapfull%
  2455.  1)=1)
  2456. new%=Appsize%+Heapsize%
  2457. heapfull%=
  2458. heapfull%
  2459. Heapsize%+=32*1024
  2460. "OS_Heap",5,Heapd%,,32*1024
  2461. =heapfull%
  2462. Heap_loose
  2463. "Wimp_SlotSize",Appsize%+32*1024,-1
  2464. HeapSize%=32*1024
  2465. Module_initialise
  2466. mptr%
  2467. Module$(50)
  2468. mptr%=1
  2469.  Modulepath$=Path$+"Modules."
  2470. find_modules(Path$+"Modules",mptr%)
  2471. NoModules%=mptr%-1
  2472. Module_findprefix
  2473. Module_initsprites
  2474. Module_initsystem
  2475. find_modules(findpath$,
  2476. mptr%)
  2477. found%,at%,loop%,clash%
  2478.     at%=0
  2479. at%<>-1
  2480. clash%=
  2481. "OS_GBPB",10,findpath$,Block%,1,at%,&100,"*"
  2482. ,,,found%,at%
  2483. found%
  2484.  Block%!16=2
  2485. module$=
  2486. GetStr(Block%+20)
  2487. loop%=1
  2488. mptr%
  2489. module$=Module$(loop%)
  2490. clash%=
  2491. clash%
  2492. Module$(mptr%)=module$:mptr%+=1
  2493. Module_findprefix
  2494. loop%,loop2%
  2495. Prefix$(NoModules%),Data%(NoModules%),Version$(NoModules%),Flags%(NoModules%),Aware%(NoModules%)
  2496. loop%=0
  2497. NoModules%
  2498. &Prefix$(loop%)=
  2499. Lc(Module$(loop%))
  2500. loop2%=0
  2501. loop%
  2502. Prefix$(loop%)=Prefix$(loop2%)
  2503.  loop%<>loop2%
  2504. 0,"Clash of prefix between modules '"+Module$(loop%)+"' and '"+Module$(loop2%)+"'"
  2505. Module_initsprites
  2506. spritesize%,loop%,len%
  2507. "OS_File",17,Resource$+"Sprites"+SpriteMode$
  2508. ,,,,spritesize%
  2509. NewLookLoaded%
  2510. "OS_File",17,Resource$+"NoNew"+SpriteMode$
  2511. ,,,,len%
  2512. spritesize%+=len%
  2513. loop%=1
  2514. NoModules%
  2515. "OS_File",17,Modulepath$+Module$(loop%)+".Sprites"+SpriteMode$
  2516. found%,,,,len%
  2517. found%=0
  2518. "OS_File",17,Modulepath$+Module$(loop%)+".Sprites22"
  2519. found%,,,,len%
  2520. found%=0
  2521. "OS_File",17,Modulepath$+Module$(loop%)+".Sprites"
  2522. found%,,,,len%
  2523. found%<>0
  2524. spritesize%=spritesize%+len%
  2525. spritesize%+=16
  2526. WindowSprites%spritesize%
  2527. !WindowSprites%=spritesize%
  2528. WindowSprites%!4=0
  2529. WindowSprites%!8=16
  2530. WindowSprites%!12=16
  2531. Module_initsystem
  2532. Viewer$(10,1),Viewer%(10,2):ViewerPtr%=0
  2533. Export$(10),Export%(10,2):ExportPtr%=0
  2534. SelectorTask%=-1
  2535. Module_loaddata
  2536. loop%,l1%,l2%,map%(),p$(),map2%()
  2537. map%(NoModules%+1),map2%(NoModules%+1),p$(50)
  2538. l1%=1
  2539. NoModules%
  2540. "OS_File",17,Modulepath$+Module$(l1%)+".Sprites"+SpriteMode$
  2541. found%
  2542. found%<>0
  2543. "OS_SpriteOp",&10B,WindowSprites%,Modulepath$+Module$(l1%)+".Sprites"+SpriteMode$
  2544. "OS_File",17,Modulepath$+Module$(l1%)+".Sprites22"
  2545. found%
  2546. found%<>0
  2547. "OS_SpriteOp",&10B,WindowSprites%,Modulepath$+Module$(l1%)+".Sprites22"
  2548. "OS_File",17,Modulepath$+Module$(l1%)+".Sprites"
  2549. found%
  2550. found%<>0
  2551. "OS_SpriteOp",&10B,WindowSprites%,Modulepath$+Module$(l1%)+".Sprites"
  2552. Modulepath$+Module$(l1%)+".Module"
  2553. /Data%(l1%)=
  2554. ("FN"+Prefix$(l1%)+"_priority")
  2555. 7startup$=
  2556. ("FN"+Prefix$(l1%)+"_initialise(Block%)")
  2557. map%(l1%)=l1%
  2558. Module_decode1(startup$,l1%)
  2559. p$()=Module$()
  2560. l1%=1
  2561. NoModules%
  2562. l2%=1
  2563. NoModules%-1
  2564. Data%(l2%)>Data%(l2%+1)
  2565. Data%(l2%),Data%(l2%+1)
  2566. Module$(l2%),Module$(l2%+1)
  2567. Prefix$(l2%),Prefix$(l2%+1)
  2568. map%(l2%),map%(l2%+1)
  2569. Aware%(l2%),Aware%(l2%+1)
  2570. l1%=0
  2571. NoModules%
  2572.     l2%=0
  2573. l1%<>map%(l2%)
  2574. l2%+=1
  2575. map2%(l1%)=l2%
  2576. l1%=0
  2577. WinPtr%
  2578. task%=Windows%(l1%,1)
  2579.  Windows%(l1%,1)=map2%(task%)
  2580. l1%=0
  2581. ChoicePtr%
  2582. task%=Choices%(l1%)
  2583. Choices%(l1%)=map2%(task%)
  2584. loop%=1
  2585. NoModules%
  2586. 9startup$=
  2587. ("FN"+Prefix$(loop%)+"_initialise(Block%)")
  2588. Module_decode2(startup$,loop%,0)
  2589. loop%
  2590. Module_decode1(startup$,moduleid%)
  2591. fdecode$="type/k,items/k,windows/s,menus/s,variables/s,version/k,info/s,atleast/k,toggle/s,aware/k"
  2592. d%=Moduleblock%
  2593. "OS_ReadArgs",decode$,startup$,d%,&400
  2594. (d%!28<>0)
  2595. GetStr(d%!28))
  2596. ver2=
  2597. (version$)
  2598. ver2<ver
  2599. 17,"The module "+Module$(moduleid%)+" requires version "+
  2600. ver+" of the main program to run"
  2601. (d%!20<>0)
  2602. Wimp_moduledata(Module$(moduleid%),
  2603. GetStr(d%!20))
  2604. Wimp_moduledata(Module$(moduleid%),"1.00")
  2605. (d%!36<>0)
  2606. Aware%(moduleid%)=(
  2607. GetStr(d%!36))*100
  2608. WimpVersion%<310
  2609. "Wimp_OpenTemplate",,Modulepath$+Module$(moduleid%)+".Templates"
  2610. "Wimp_OpenTemplate",,Modulepath$+Module$(moduleid%)+".TempOs3"
  2611. Module_call(moduleid%,"windows(IndrPos%,moduleid%)")
  2612. "Wimp_CloseTemplate"
  2613. Module_decode2(startup$,moduleid%,add%)
  2614. d%,decode$,type$,items,at%,windows%,dummy%,loop%,sprite$,name$,extra%
  2615. d%=Moduleblock%
  2616. extra%=
  2617. fdecode$="type/k,items/k,windows/s,menus/s,variables/s,version/k,info/s,atleast/k,toggle/s,aware/k"
  2618. "OS_ReadArgs",decode$,startup$,d%,&400
  2619. 6Flags%(moduleid%)=Flags%(moduleid%)
  2620. ((d%!32<>0)
  2621. (d%!0<>0)
  2622. type$=
  2623. GetStr(d%!0)
  2624. (d%!4<>0)
  2625. items=
  2626. GetStr(d%!4))
  2627. (d%!20<>0)
  2628. !&Version$(moduleid%)=
  2629. GetStr(d%!20)
  2630. #$Version$(moduleid%)="None given"
  2631. Data%(moduleid%)=d%!24
  2632. type$
  2633. "viewer"
  2634. at%=Block%
  2635. loop%=1
  2636. items
  2637. name$=
  2638. StrAndPos(at%)
  2639. Viewer$(ViewerPtr%,0)=name$
  2640. Menu_AddHotItem("Viewer",moduleid%,loop%,name$,-1,0,MenuNormal%,ViewerPtr%+&191)
  2641. -#Viewer%(ViewerPtr%,0)=moduleid%
  2642. Viewer%(ViewerPtr%,1)=loop%
  2643. Viewer%(ViewerPtr%,2)=!at%
  2644. info%=!at%
  2645. at%+=4
  2646. info%
  2647. %0011<>0
  2648. sprite$=
  2649. StrAndPos(at%)
  2650. 4!Viewer$(ViewerPtr%,1)=sprite$
  2651. Tool_AddTool("Main",sprite$,moduleid%,loop%+add%)
  2652. info%
  2653. %1000<>0
  2654. extra%=
  2655. ViewerPtr%+=1
  2656. "viewtool"
  2657. at%=Block%
  2658. loop%=1
  2659. items
  2660. sprite$=
  2661. StrAndPos(at%)
  2662. Tool_AddTool("Main",sprite$,moduleid%,loop%+add%)
  2663. "creator","editor"
  2664. at%=Block%
  2665. loop%=1
  2666. items
  2667. sprite$=
  2668. StrAndPos(at%)
  2669. Tool_AddTool("Main",sprite$,moduleid%,loop%+add%)
  2670. info%=!at%
  2671. at%+=4
  2672. "selector"
  2673. SelectorTask%<>-1
  2674. 0,"Attempt to load more than one selector module"
  2675. at%=Block%
  2676. sprite$=
  2677. StrAndPos(at%)
  2678. N=SelectorButton%=
  2679. Tool_AddTool("Main",sprite$,moduleid%,1)
  2680. SelectorFlags%=!at%
  2681. SelectorTask%=moduleid%
  2682. "export"
  2683. at%=Block%
  2684. loop%=1
  2685. items
  2686. string$=
  2687. StrAndPos(at%)
  2688. U#Export%(ExportPtr%,0)=moduleid%
  2689. Export%(ExportPtr%,1)=loop%
  2690. W%Export%(ExportPtr%,2)=!at%:at%+=4
  2691. X'Export$(ExportPtr%)=
  2692. StrAndPos(at%)
  2693. Menu_AddItem("Export",0,-1,string$,SaveHandle%,%1000,MenuNormal%)
  2694. ExportPtr%+=1
  2695. "utility"
  2696. 17,"Unknown module type '"+type$+"'"
  2697. d%!12
  2698. Module_call(moduleid%,"menus(moduleid%)")
  2699. d%!16
  2700. Module_call(moduleid%,"variables")
  2701. extra%
  2702. c9startup$=
  2703. Module_call(moduleid%,"additional(Block%)")
  2704. Module_decode2(startup$,moduleid%,items)
  2705. Module_call(id%,proc$)
  2706. dummy%,CurrentTask%
  2707. CurrentTask%=id%
  2708. id%>0
  2709.  id%<20
  2710. dummy%=
  2711. ("FN"+Prefix$(id%)+"_"+proc$)
  2712. CurrentTask%=0
  2713. Module_call(id%,proc$)
  2714. CurrentTask%
  2715. CurrentTask%=id%
  2716. id%>0
  2717.  id%<20
  2718. ("FN"+Prefix$(id%)+"_"+proc$)
  2719. CurrentTask%=0
  2720. Module_broadcast(proc$)
  2721. loop%,dum%,CurrentTask%
  2722. loop%=1
  2723. NoModules%
  2724. CurrentTask%=loop%
  2725. w)dum%=
  2726. ("FN"+Prefix$(loop%)+"_"+proc$)
  2727. Drag_initialise
  2728. Dragging%=
  2729. DragType%=-1
  2730. DragUpdate%=
  2731. ~#DragSpace%=
  2732. Heap_GetBlock(1024)
  2733. DragPointer%=0
  2734. Drag_update
  2735. b%=Localblock%
  2736. "Wimp_GetPointerInfo",,b%
  2737. Module_call(DragTask%,"dragupdate(DragSubType%,b%!0,b%!4,-1)")
  2738. Drag_redraw(opt%)
  2739. b%=Localblock%
  2740. "Wimp_GetPointerInfo",,b%
  2741. newX%=b%!0
  2742. newY%=b%!4
  2743. Display_ConvXY(newX%,newY%)
  2744. DisplayClaimed%
  2745. Display_XYtoXYZ(0,0,0,newX%,newY%,newZ%)
  2746. Display_XYZtoXY(newX%,newY%,newZ%)
  2747. Display_SnapToClaimedGrid(newX%,newY%)
  2748. Display_Screen(newX%,newY%)
  2749. newX%<>DragItemX%
  2750. newY%<>DragItemY%
  2751. !b%=CurrentMain%
  2752. b%!4=X3%
  2753. b%!8=Y3%-Yw%
  2754. b%!12=X3%+Xw%
  2755. b%!16=Y3%
  2756. xoff%=X1%-X3%+CentreX
  2757. 0yoff%=Y2%-Y3%-MainYWidth%*Scale%/100+CentreY
  2758. "Wimp_UpdateWindow",,b%
  2759. more%
  2760. more%
  2761. Drag_doit(xoff%,yoff%,DragItemX%,DragItemY%)
  2762. Dragging%
  2763. Drag_doit(xoff%,yoff%,newX%,newY%)
  2764. "Wimp_GetRectangle",,b%
  2765. more%
  2766. DragItemX%=newX%
  2767. DragItemY%=newY%
  2768. DragUpdate%
  2769. Drag_update
  2770. Drag_doit(xoff%,yoff%,xat%,yat%)
  2771. ptr%=DragSpace%
  2772. 3,DragColour%
  2773. DragTint%
  2774. !ptr%<>-1
  2775. type%=!ptr%
  2776. x%=ptr%!4
  2777. y%=ptr%!8
  2778. x%<>&FFFF
  2779. x%=x%*Scale%/100+xoff%
  2780. x%=xat%
  2781. y%<>&FFFF
  2782. y%=y%*Scale%/100+yoff%
  2783. y%=yat%
  2784. ptr%+=12
  2785. type%
  2786. x%,y%
  2787. 8+5,x%,y%
  2788. 3,NodeColour%
  2789. NodeTint%
  2790. x%-8,y%-8,16,16
  2791. x%-10,y%-10,20,20
  2792. 3,DragColour%
  2793. DragTint%
  2794. 3,RedColour%
  2795. RedTint%
  2796. x%-4,y%-4,8,8
  2797. 3,DragColour%
  2798. DragTint%
  2799. Drag_updatebar
  2800. x%,win%,icon%,width%,num%
  2801. b%=Localblock%
  2802. "Wimp_GetPointerInfo",,b%
  2803. x%=!b%
  2804. win%=DragItemX%
  2805. icon%=DragItemY%
  2806. !b%=win%
  2807. "Wimp_GetWindowState",,b%
  2808. x%-=b%!4-b%!20
  2809. !b%=win%
  2810. b%!4=icon%
  2811. "Wimp_GetIconState",,b%
  2812. x%-=b%!8
  2813. width%=b%!16-b%!8
  2814. num%=
  2815. $(b%!32),3))
  2816. DragData%(num%,0)<>
  2817. (x%/width%*100)
  2818. #DragData%(num%,0)=x%/width%*100
  2819. b%!4=win%
  2820. "Wimp_UpdateWindow",,b%+4
  2821. more%
  2822. more%
  2823. Wimp_drawdragbar(win%,icon%)
  2824. "Wimp_GetRectangle",,b%+4
  2825. more%
  2826. DragUpdate%
  2827. Module_call(DragTask%,"dragupdate(DragSubType%,DragData%(num%,0),-1,-1)")
  2828. GetStr(pos%)
  2829. string$
  2830. ?pos%>=32
  2831. string$=string$+
  2832. ?pos%
  2833. pos%+=1
  2834. =string$
  2835. StrAndPos(
  2836. pos%)
  2837. string$
  2838. ?pos%>=32
  2839. string$=string$+
  2840. ?pos%
  2841. pos%+=1
  2842. pos%+=1
  2843. =string$
  2844. PutStr(
  2845. pos%,string$)
  2846. $pos%=string$
  2847. pos%+=
  2848. (string$)
  2849. ?pos%=0
  2850. pos%+=1
  2851. Lc(s$)
  2852. l%,r$,c$
  2853.     r$=""
  2854. s$,l%,1)
  2855. c$>="a"
  2856.  c$<="z"r$=r$+c$
  2857. c$>="A"
  2858.  c$<="Z"r$=r$+
  2859. c$+32)
  2860. SysVar(var$)
  2861. len%,b%
  2862. b%=Localblock%
  2863. "OS_ReadVarVal",var$,b%,255
  2864. ,,len%
  2865. b%?len%=&0D
  2866. Round(num,places%)
  2867. text$
  2868. text$=
  2869. text$,places%))
  2870. Leaf(s$)
  2871. s$,":")>0
  2872. s$,":")+1)
  2873. s$,".")>0
  2874. s$,".")+1)
  2875. Heap_GetBlock(size%)
  2876. loc%,ok%,heapfull%,largest%
  2877. heapfull%=
  2878. "OS_Heap",1,Heapd%
  2879. ,,largest%
  2880. largest%>=size%
  2881. "OS_Heap",2,Heapd%,,size%
  2882. ,,loc%
  2883.     ok%=
  2884. heapfull%=
  2885. Heap_extendheap
  2886. heapfull%
  2887. heapfull%
  2888. 17,"No more memory"
  2889.     =loc%
  2890. Heap_ExtendBlock(loc%,size%)
  2891. ok%,heapfull%,newloc%,currentsize%
  2892. loc%<=0
  2893. Heap_GetBlock(size%)
  2894. heapfull%=
  2895. "OS_Heap",6,Heapd%,loc%
  2896. ,,,currentsize%
  2897. size%-=currentsize%
  2898. "XOS_Heap",4,Heapd%,loc%,size%
  2899. ,,newloc%;ok%
  2900. ok%=((ok%
  2901.  1)=0)
  2902. heapfull%=
  2903. Heap_extendheap
  2904. heapfull%
  2905. heapfull%
  2906. 17,"No more memory"
  2907. "XOS_Heap",5,Heapd%,loc%,-Heapsize%
  2908. ,,,size%
  2909. Heapsize%-=size%
  2910. "Wimp_SlotSize",Appsize%+Heapsize%,-1
  2911. =newloc%
  2912. Heap_FreeBlock(
  2913. loc%)
  2914. loc%>0
  2915. "OS_Heap",3,Heapd%,loc%
  2916. "XOS_Heap",5,Heapd%,loc%,-Heapsize%
  2917. ,,,size%
  2918. Heapsize%-=size%
  2919. "Wimp_SlotSize",Appsize%+Heapsize%,-1
  2920. loc%=-1
  2921. Menu_BuildAlterable(name$,title$,width%,size%)
  2922. Menu_BuildMenu(name$,title$,width%)
  2923. 41MenuData%(MenuPtr%-1,0)=
  2924. Heap_GetBlock(size%)
  2925. MenuData%(MenuPtr%-1,1)=1
  2926. Menu_BuildMenu(name$,title$,width%)
  2927. addr%
  2928. Menu_find(name$)<>-1
  2929. 0,"Repeated menu name '"+name$+"'"
  2930. MenuPtr%=MaxMenus%+1
  2931. 0,"No more space for menus"
  2932. Menu$(MenuPtr%)=name$
  2933. addr%=Menus%(MenuPtr%,0,0)
  2934. $addr%=title$
  2935. addr%?12=7
  2936. addr%?13=2
  2937. addr%?14=7
  2938. addr%?15=0
  2939. addr%!16=16+(16*width%)
  2940. addr%!20=40
  2941. addr%!24=0
  2942. E MenuAddr%(MenuPtr%)=addr%+28
  2943. MenuData%(MenuPtr%,0)=-1
  2944. MenuPtr%+=1
  2945. Menu_Clear(name$)
  2946. menu%=
  2947. Menu_find(name$)
  2948. MenuData%(menu%,0)=-1
  2949. 17,"Menu "+name$+" is not alterable"
  2950. menu%=-1
  2951. 17,"Menu "+name$+" does not exist"
  2952. M)MenuAddr%(menu%)=Menus%(menu%,0,0)+28
  2953. Menus%(menu%,0,1)=0
  2954. MenuData%(menu%,1)=1
  2955. Menu_End(name$)
  2956. menu%,loop%,at%,data%
  2957. menu%=
  2958. Menu_find(name$)
  2959. menu%=-1
  2960. 17,"Menu "+name$+" does not exist"
  2961. U;!(MenuAddr%(menu%)-24)=!(MenuAddr%(menu%)-24)
  2962. MenuLast%
  2963. len%=MenuData%(menu%,2)
  2964. W(!(Menus%(menu%,0,0)+16)=16+(16*len%)
  2965. loop%=0
  2966. Menus%(menu%,0,1)-1
  2967. Y%at%=loop%*24+28+Menus%(menu%,0,0)
  2968. data%=at%!12
  2969. str$=$data%
  2970. ?(data%-1)<>255
  2971. hot$=$(data%+?(data%-1)+1)
  2972. hot$=""
  2973. ]-str$=str$+
  2974. len%-
  2975. (str$)-
  2976. (hot$)," ")+hot$
  2977. $data%=str$
  2978. Menu_ToggleHot
  2979. menu%=0
  2980. MenuPtr%-1
  2981. menu%=-1
  2982. 17,"Menu "+name$+" does not exist"
  2983. len%=0
  2984. loop%=0
  2985. Menus%(menu%,0,1)-1
  2986. f%at%=loop%*24+28+Menus%(menu%,0,0)
  2987. data%=at%!12
  2988. ?(data%-1)<>255
  2989. ShowHot%
  2990. ?(data%+?(data%-1))=32
  2991. ?(data%+?(data%-1))=&0D
  2992. len%<
  2993. ($data%)
  2994. len%=
  2995. ($data%)
  2996. q(!(Menus%(menu%,0,0)+16)=16+(16*len%)
  2997. Menu_AddHotItem(name$,task%,num%,option$,win%,flags1%,flags2%,hot%)
  2998. menu%,menudata%
  2999. menu%=
  3000. Menu_find(name$)
  3001. menu%=-1
  3002. 17,"Menu "+name$+" does not exist"
  3003. MenuData%(menu%,0)=-1
  3004. y&menudata%=MenuData%+MenuDataPtr%+1
  3005. {5menudata%=MenuData%(menu%,0)+MenuData%(menu%,1)+1
  3006. option$=
  3007. option$,20)
  3008. addr%=MenuAddr%(menu%)
  3009. addr%!0=flags1%
  3010. addr%!4=win%
  3011. addr%!8=flags2%
  3012. addr%!12=menudata%
  3013. addr%!16=-1
  3014. addr%!20=29
  3015. $menudata%=option$
  3016. ?(menudata%-1)=
  3017. (option$)
  3018. len%=
  3019. (option$)
  3020. hot%<>-&FFFF
  3021. 3$(menudata%+
  3022. (option$)+1)=
  3023. Menu_DecodeHot(hot%)
  3024. $len%+=2+
  3025. Menu_DecodeHot(hot%))
  3026. ?(menudata%-1)=-1
  3027. MenuAddr%(menu%)=addr%+24
  3028. Menus%(menu%,0,1)+=1
  3029. item%=Menus%(menu%,0,1)
  3030. Menus%(menu%,item%,0)=task%
  3031. Menus%(menu%,item%,1)=num%
  3032. Menus%(menu%,item%,2)=hot%
  3033. MenuData%(menu%,0)=-1
  3034. MenuDataPtr%+=30
  3035. MenuData%(menu%,1)+=30
  3036. len%>MenuData%(menu%,2)MenuData%(menu%,2)=len%
  3037. Menu_AddItem(name$,task%,num%,option$,win%,flags1%,flags2%)
  3038. Menu_AddHotItem(name$,task%,num%,option$,win%,flags1%,flags2%,-&FFFF)
  3039. Menu_AddSubMenu(menu$,option$,submenu$,flags1%,flags2%)
  3040. Menu_AddItem(menu$,-1,
  3041. Menu_find(submenu$),option$,
  3042. Menu_Handle(submenu$),flags1%,flags2%)
  3043. Menu_AddHotItem(name$,task%,num%,option$,win%,flags1%,flags2%,hot%)
  3044. Menu_AddHotItem(name$,task%,num%,option$,win%,flags1%,flags2%,hot%)
  3045. $=Menus%(
  3046. Menu_find(name$),0,1)-1
  3047. Menu_AddItem(name$,task%,num%,option$,win%,flags1%,flags2%)
  3048. Menu_AddHotItem(name$,task%,num%,option$,win%,flags1%,flags2%,-&FFFF)
  3049. $=Menus%(
  3050. Menu_find(name$),0,1)-1
  3051. Menu_AddSubMenu(menu$,option$,submenu$,flags1%,flags2%)
  3052. Menu_AddItem(menu$,-1,
  3053. Menu_find(submenu$),option$,
  3054. Menu_Handle(submenu$),flags1%,flags2%)
  3055. $=Menus%(
  3056. Menu_find(name$),0,1)-1
  3057. Menu_Handle(menu$)
  3058. menu%
  3059. menu%=
  3060. Menu_find(menu$)
  3061. menu%=-1
  3062. 17,"Cannot find menu '"+menu$+"'"
  3063. =Menus%(menu%,0,0)
  3064. Menu_Open(name$,x%,y%)
  3065. "Wimp_CreateMenu",,
  3066. Menu_Handle(name$),x%-64,y%
  3067. MenuId%=
  3068. Menu_find(name$)
  3069. Menu_OpenIcon(win%,icon%,name$)
  3070. b%,x%,y%
  3071. b%=Localblock%
  3072. !b%=win%
  3073. b%!4=icon%
  3074. "Wimp_GetIconState",,b%
  3075. x%=b%!16
  3076. y%=b%!12
  3077. Window_ReadState(win%)
  3078. x%+=X1%-X3%
  3079. y%+=Y2%-Y3%
  3080. Menu_Open(name$,x%+64,y%)
  3081. Menu_Tick(name$,item%,opt%)
  3082. menu%,addr%
  3083. addr%=
  3084. Menu_Handle(name$)
  3085. addr%+=28+(24*item%)
  3086. 0:!addr%=!addr%
  3087. 1:!addr%=!addr%
  3088. 2:!addr%=!addr%
  3089. 17,"Unknown operation sent to Menu_Tick"
  3090. Menu_GreyOut(name$,item%,opt%)
  3091. menu%,addr%,hot%
  3092. menu%=
  3093. Menu_find(name$)
  3094. +addr%=
  3095. Menu_Handle(name$)+28+(24*item%)
  3096.  hot%=Menus%(menu%,item%+1,2)
  3097. 0:addr%!8=addr%!8
  3098. (1<<22)
  3099. hot%<0
  3100. hot%=-hot%
  3101. 1:addr%!8=addr%!8
  3102. (1<<22)
  3103. hot%>0
  3104. hot%=-hot%
  3105. 2:addr%!8=addr%!8
  3106. (1<<22)
  3107. hot%=-hot%
  3108. 17,"Unknown operation sent to Menu_GreyOut"
  3109.  Menus%(menu%,item%+1,2)=hot%
  3110. Menu_DecodeHot(hot%)
  3111. hot%<32
  3112. dec$="^"+
  3113. (hot%+64):hot%=-1
  3114. hot%=127
  3115. dec$="Delete":hot%=-1
  3116. hot%>=&180
  3117.  hot%<=&18F
  3118. dec$="":hot%-=&180
  3119. hot%>=&190
  3120.  hot%<=&19F
  3121. dec$=
  3122. 139:hot%-=&190
  3123. hot%>=&1A0
  3124.  hot%<=&1AF
  3125. dec$="^":hot%-=&1A0
  3126. hot%>=&1B0
  3127.  hot%<=&1BF
  3128. dec$=
  3129. 139+"^":hot%-=&1AF
  3130. hot%>=&1CA
  3131.  hot%<=&1CD
  3132. dec$="":hot%-=&100
  3133. hot%>=&1DA
  3134.  hot%<=&1DD
  3135. dec$=
  3136. 139:hot%-=&110
  3137. hot%>=&1EA
  3138.  hot%<=&1ED
  3139. dec$="^":hot%-=&120
  3140. hot%>=&1FA
  3141.  hot%<=&1FD
  3142. dec$=
  3143. 139+"^":hot%-=&130
  3144. hot%=0
  3145. dec$+="Print"
  3146. hot%>0
  3147.  hot%<&A
  3148. dec$+="F"+
  3149. hot%=&A
  3150. dec$+="Tab"
  3151. hot%=&B
  3152. dec$+="Copy"
  3153. hot%>=&CA
  3154.  hot%<=&CC
  3155. dec$+="F"+
  3156. (hot%-&C0)
  3157. hot%=&CD
  3158. dec$+="Insert"
  3159. dec$=""
  3160. 17,"Cannot decode character number "+
  3161.     =dec$
  3162. Wimp_Naughty(mess$)
  3163. Adum%=
  3164. Wimp_Error(1,"Message from 3D Editor",mess$,"OK","","")
  3165. Wimp_SetCaret(win%,icon%)
  3166. "Wimp_SetCaretPosition",win%,icon%,,,-1,
  3167. Icon_Read(win%,icon%))
  3168. Wimp_LoseCaret
  3169. "Wimp_SetCaretPosition",CurrentMain%,-1
  3170. Wimp_NewPointer(ptr$,x%,y%)
  3171. %Mask%=Mask%
  3172. %11111111111111001111
  3173. Pointer$=ptr$
  3174. PtrActiveX%=x%
  3175. PtrActiveY%=y%
  3176. Wimp_OldPointer(ptr$)
  3177. Pointer$=ptr$
  3178. Pointer$=""
  3179. *POINTER 1
  3180. Activewin%=0
  3181. %Mask%=Mask%
  3182. %00000000000000110000
  3183. Wimp_ModeSize(
  3184. b%=Localblock%
  3185. 3b%!0=4:b%!4=5:b%!8=11:b%!12=12:b%!16=3:b%!20=-1
  3186. "OS_ReadVduVariables",b%,b%
  3187. x%=((b%!8)+1)<<(b%!0)
  3188. y%=((b%!12)+1)<<(b%!4)
  3189. Window_CreateYbox(name$,
  3190. indr%,block%,task%)
  3191. handle%,icons%
  3192. "Wimp_LoadTemplate",,block%,indr%,IndrEnd%,Fonts%,name$,0
  3193. ,,indr%
  3194. block%!64=WindowSprites%
  3195. icons%=block%!84
  3196. !yboxicons%=YboxSpace%!84*32-4
  3197. loop%=0
  3198. yboxicons%
  3199. -!(block%+loop%+88)=!(YboxSpace%+loop%+88)
  3200. Window_dofancyicons(icons%,block%)
  3201. "Wimp_CreateWindow",,block%
  3202. handle%
  3203. Windows%(WinPtr%,0)=handle%
  3204. Windows%(WinPtr%,1)=task%
  3205. WinPtr%+=1
  3206. !Localblock%=handle%
  3207. "Wimp_GetWindowState",,Localblock%
  3208. "Wimp_OpenWindow",,Localblock%
  3209. "Wimp_CloseWindow",,Localblock%
  3210. Icon_GreyOut(handle%,1,1)
  3211. Icon_GreyOut(handle%,13,1)
  3212. =handle%
  3213. Window_Create(name$,
  3214. indr%,block%,task%)
  3215. handle%,icons%
  3216. "Wimp_LoadTemplate",,block%,indr%,IndrEnd%,Fonts%,name$,0
  3217. ,,indr%
  3218. block%!64=WindowSprites%
  3219. icons%=block%!84
  3220. name$,"ybox")
  3221. block%!88=-2
  3222. block%!92=-136
  3223. block%!96=22
  3224. block%!100=-36
  3225. block%!152=0
  3226. block%!156=-36
  3227. block%!160=24
  3228. block%!164=0
  3229. Window_dofancyicons(icons%,block%)
  3230. "Wimp_CreateWindow",,block%
  3231. handle%
  3232. name$<>"Main"
  3233.  name$<>"tool"
  3234. Windows%(WinPtr%,0)=handle%
  3235. Windows%(WinPtr%,1)=task%
  3236. WinPtr%+=1
  3237. !Localblock%=handle%
  3238. "Wimp_GetWindowState",,Localblock%
  3239. "Wimp_OpenWindow",,Localblock%
  3240. "Wimp_CloseWindow",,Localblock%
  3241. =handle%
  3242. Wimp_Error(size%,name$,error$,but1$,but2$,but3$)
  3243. b%,width%,height%,mx%,my%,x%,y%,len%,ptr%,a%,word$,xt%,yt%,loop%,clicked%,xm%,ym%,but%,line$()
  3244. line$(5)
  3245. b%=Errblock%
  3246. width%=758:height%=450
  3247. Wimp_ModeSize(mx%,my%)
  3248. L x%=mx%-width%:y%=my%-height%
  3249. x%=x%/2:y%=y%/2
  3250. x%,y%,width%,height%
  3251. "Wimp_SetColour",7
  3252. x%,y%,width%-4,height%-4
  3253. Wimp_shadowbox(x%+2,y%+2,width%-4,height%-4,0,1)
  3254. "Wimp_SetColour",11
  3255. x%+12,y%+12,width%-24,height%-24
  3256. Wimp_shadowbox(x%+40,y%+40,500,350,1,0)
  3257. Wimp_shadowbox(x%+44,y%+44,492,342,0,1)
  3258. Wimp_shadowbox(x%+552,y%+40,180,78,1,12)
  3259. Wimp_shadowbox(x%+562,y%+50,160,58,0,1)
  3260. size%=2
  3261. size%=3
  3262. Wimp_shadowbox(x%+562,y%+140,160,58,0,1)
  3263. size%=3
  3264. Wimp_shadowbox(x%+562,y%+230,160,58,0,1)
  3265. len%=
  3266. (name$)*16
  3267. "Wimp_SetColour",1
  3268. x%+60,y%+366,len%+20,32
  3269. "Wimp_SetColour",7
  3270. x%+70,y%+402:
  3271. name$:
  3272. x%+560+(160-
  3273. but1$*16)/2,y%+94:
  3274. but1$:
  3275. size%=2
  3276. size%=3
  3277. x%+560+(160-
  3278. but2$*16)/2,y%+184:
  3279. but2$:
  3280. size%=3
  3281. x%+560+(160-
  3282. but3$*16)/2,y%+274:
  3283. but3$:
  3284. ptr%=0
  3285. error$<>""
  3286. error$," ")
  3287. linelen%=28
  3288. a%<>0
  3289. word$=
  3290. error$,a%)
  3291. (word$)>linelen%
  3292. a%=linelen%:word$=
  3293. error$,a%)
  3294. m error$=
  3295. error$,
  3296. (error$)-a%)
  3297. line$(ptr%)+
  3298. word$>linelen%
  3299. ptr%+=1
  3300. line$(ptr%)+=word$
  3301. (error$)>linelen%
  3302. word$=
  3303. error$,linelen%)
  3304. s&error$=
  3305. error$,
  3306. (error$)-linelen%)
  3307. word$=error$
  3308. error$=""
  3309. (line$(ptr%))+
  3310. (word$)>linelen%
  3311. ptr%+=1
  3312. line$(ptr%)+=word$
  3313. |#yt%=y%+350-((310-ptr%*32)/2)+32
  3314. loop%=0
  3315. ~(xt%=(480-
  3316. (line$(loop%))*16)/2+x%+50
  3317. xt%,yt%
  3318. line$(loop%):
  3319. yt%-=32
  3320. clicked%=-1
  3321. xm%,ym%,but%
  3322. but%<>0
  3323. $xt%=xm%-(x%+552):yt%=ym%-(y%+40)
  3324. xt%>0
  3325.  xt%<180
  3326.  yt%>0
  3327.  yt%<78
  3328. Wimp_shadowbox(x%+562,y%+50,160,58,1,14)
  3329. x%+560+(160-
  3330. but1$*16)/2,y%+94:
  3331. but1$:
  3332. clicked%=1
  3333. %xt%=xm%-(x%+562):yt%=ym%-(y%+140)
  3334. xt%>0
  3335.  xt%<160
  3336.  yt%>0
  3337.  yt%<58
  3338. (size%=2
  3339. size%=3)
  3340. Wimp_shadowbox(x%+562,y%+140,160,58,0,1)
  3341. x%+560+(160-
  3342. but2$*16)/2,y%+184:
  3343. but2$:
  3344. clicked%=2
  3345. yt%=ym%-(y%+230)
  3346. xt%>0
  3347.  xt%<160
  3348.  yt%>0
  3349.  yt%<58
  3350.  size%=3
  3351. Wimp_shadowbox(x%+562,y%+230,160,58,0,1)
  3352. x%+560+(160-
  3353. but3$*16)/2,y%+274:
  3354. but3$:
  3355. clicked%=3
  3356. clicked%<>-1
  3357. (0)=13
  3358. clicked%=-1 clicked%=1
  3359. "Wimp_ForceRedraw",-1,x%,y%,x%+width%+4,y%+height%+4
  3360. 0,0,mx%,my%
  3361. =clicked%
  3362. Window_Writeable(handle%,writestart%,writeend%,ok%)
  3363. #Writeable%(WritePtr%,0)=handle%
  3364. 'Writeable%(WritePtr%,1)=writestart%
  3365. %Writeable%(WritePtr%,2)=writeend%
  3366. Writeable%(WritePtr%,3)=ok%
  3367. WritePtr%+=1
  3368. Window_ActiveIcon(win%,list%)
  3369.  Activeblock%!ActivePtr%=win%
  3370. ActivePtr%+=4
  3371. "Activeblock%!ActivePtr%=!list%
  3372. list%+=4
  3373. ActivePtr%+=4
  3374. !(list%-4)=-1
  3375. Window_ReadState(win%)
  3376. blk%=Localblock%+&100
  3377. !blk%=win%
  3378. "Wimp_GetWindowState",,blk%
  3379. X1%=blk%!4
  3380. Y1%=blk%!8
  3381. X2%=blk%!12
  3382. Y2%=blk%!16
  3383. X3%=blk%!20
  3384. Y3%=blk%!24
  3385. Xw%=X2%-X1%
  3386. Yw%=Y2%-Y1%
  3387. Window_Close(win%)
  3388. win%>&8000
  3389. !b%=win%
  3390. Wimp_close(b%)
  3391. Window_Open(win%)
  3392. win%>&8000
  3393. b%=Localblock%
  3394. !b%=win%
  3395. "Wimp_GetWindowInfo",,b%
  3396. (b%!32
  3397. 1<<16)=0
  3398. Window_openactive(win%)
  3399. Wimp_open(b%)
  3400. Window_OpenCentre(win%)
  3401. b%,x%,y%
  3402. win%>&8000
  3403. b%=Localblock%
  3404. Wimp_ModeSize(x%,y%)
  3405. Window_ReadState(win%)
  3406. x%-=Xw%:y%-=Yw%
  3407. x%=x%/2:y%=y%/2
  3408. b%!0=win%
  3409. b%!4=x%
  3410. b%!8=y%
  3411. b%!12=x%+Xw%
  3412. b%!16=y%+Yw%
  3413. b%!20=0
  3414. b%!24=0
  3415. b%!28=-1
  3416. Wimp_open(b%)
  3417. Window_Front(win%)
  3418. win%>&8000
  3419. b%=Localblock%
  3420. !b%=win%
  3421. "Wimp_GetWindowState",,b%
  3422. b%!28=-1
  3423. "Wimp_OpenWindow",,b%
  3424. Window_Back(win%)
  3425. b%=Localblock%
  3426. !b%=win%
  3427. "Wimp_GetWindowState",,b%
  3428. b%!28=-2
  3429. "Wimp_OpenWindow",,b%
  3430. Window_AsMenu(win%)
  3431. Window_openactive(win%)
  3432. Wimp_ModeSize(x%,y%)
  3433. Window_ReadState(win%)
  3434. x%-=Xw%:y%-=Yw%
  3435. x%=x%/2:y%=y%/2
  3436. "Wimp_CreateMenu",,win%,x%,y%+Yw%
  3437. Window_SetExtent(win%,x0%,y0%,x1%,y1%)
  3438. b%=Localblock%
  3439. !b%=x0%
  3440. b%!4=y0%
  3441. b%!8=x1%
  3442. b%!12=y1%
  3443. "Wimp_SetExtent",win%,b%
  3444. Window_NewYbox(newybox%,opt%)
  3445. Ybox%<>-1
  3446. Window_Close(Ybox%)
  3447. Ybox%=newybox%
  3448. Icon_UpState(Ybox%,12,GridOn%
  3449. Icon_UpState(Ybox%,4,SnapToGrid%
  3450. Window_Open(CurrentMain%)
  3451. Window_openactive(newybox%)
  3452. Window_LooseYbox(myybox%)
  3453. Ybox%=myybox%
  3454. Window_Close(Ybox%)
  3455. Ybox%=-1
  3456. Window_ClickYboxNoSnap(win%,icon%,
  3457. z,xstep,ystep,zstep)
  3458. o%=SnapToGrid%
  3459. SnapToGrid%=
  3460. Window_ClickYbox(win%,icon%,x,y,z,xstep,ystep,zstep)
  3461. SnapToGrid%=o%
  3462. Window_ClickYbox(win%,icon%,
  3463. z,xstep,ystep,zstep)
  3464. SnapToGrid%
  3465. xs=GridXSpace%
  3466. ys=GridYSpace%
  3467. zs=GridZSpace%
  3468. xs=xstep
  3469. ys=ystep
  3470. zs=zstep
  3471. icon%
  3472. '0x=StoreCoordX%:y=StoreCoordY%:z=StoreCoordZ%
  3473. Module_call(
  3474. Window_owner(win%),"loadcoords(x,y,z)")
  3475. Icon_UpState(win%,1,0)
  3476. 4:SnapToGrid%=(
  3477. Icon_ReadState(Ybox%,4)=1)
  3478. 5:y-=ys
  3479. 6:y+=ys
  3480. 7:x-=xs
  3481. 8:x+=xs
  3482. 9:z-=zs
  3483. 10:z+=zs
  3484. Window_Coord("Enter step sizes",xstep,ystep,zstep,win%,-1)
  3485. 3'GridOn%=
  3486. Icon_ReadState(Ybox%,12)=1
  3487. Display_Update
  3488. StoreCoordX%=x
  3489. StoreCoordY%=y
  3490. StoreCoordZ%=z
  3491. Icon_UpState(win%,13,0)
  3492. icon%>4
  3493.  icon%<11
  3494.  SnapToGrid%
  3495. ='x=(
  3496. (x/GridXSpace%+.5))*GridXSpace%
  3497. >'y=(
  3498. (y/GridYSpace%+.5))*GridYSpace%
  3499. ?'z=(
  3500. (z/GridZSpace%+.5))*GridZSpace%
  3501. A =(icon%>4
  3502.  icon%<11
  3503. icon%=1)
  3504. Window_AllowStoreCoords(win%)
  3505. Icon_GreyOut(win%,1,0)
  3506. Icon_GreyOut(win%,13,0)
  3507. Window_Coord(title$,x,y,z,win%,num%)
  3508. task%
  3509. task%=
  3510. Window_owner(win%)
  3511. Icon_UpText(CoordHandle%,2,title$)
  3512. Icon_UpText(CoordHandle%,6,
  3513. Icon_UpText(CoordHandle%,7,
  3514. Icon_UpText(CoordHandle%,8,
  3515. CoordTask%=task%
  3516. CoordNum%=num%
  3517. Window_AsMenu(CoordHandle%)
  3518. Window_UpdateTitle
  3519. title$,b%,flags%,loop%
  3520. b%=Localblock%
  3521. MainOpen%>0
  3522. loop%=1
  3523. MainOpen%
  3524. DisplayClaimed%
  3525.  MainHandle%(loop%)=CurrentMain%
  3526. W!title$=Leaf$+" - "+ClaimedBy$
  3527. Ygtitle$=Leaf$+" ("+
  3528. Object_ReadName(CurrentObj%)+") - "+WindowView$(loop%)+" at "+
  3529. Scale%(loop%)+"%"
  3530. Changed%title$+=" *"
  3531. MainOpen%>1 title$+=" "+
  3532. MainOpen%
  3533. title$=
  3534. title$,70)
  3535. ^&$(Titlespace%+(loop%-1)*70)=title$
  3536. b%!20=MainHandle%(loop%)
  3537. "Wimp_GetWindowState",,b%+20
  3538. flags%=b%!52
  3539. (flags%
  3540.  1<<16)<>0
  3541. !b%=MainHandle%(loop%)
  3542. "Wimp_GetWindowOutline",,b%
  3543. "Wimp_ForceRedraw",-1,b%!4,b%!36,b%!12,b%!16
  3544. Window_UpdateInfo
  3545. Data%(CurrentInfo%)
  3546. Module_call(CurrentInfo%,"info")
  3547. n ModulePurpose$="None stated"
  3548. ModuleAuthor$="Anonymous"
  3549. Icon_UpText(InfoHandle%,16,Module$(CurrentInfo%))
  3550. Icon_UpText(InfoHandle%,17,ModulePurpose$)
  3551. Icon_UpText(InfoHandle%,18,ModuleAuthor$)
  3552. Icon_UpText(InfoHandle%,19,Version$(CurrentInfo%))
  3553. Window_NewMain
  3554. b%=Localblock%
  3555. MainOpen%+=1
  3556. z!!Mainblock%+=(MainOpen%-1)*50
  3557. {"Mainblock%!4+=(MainOpen%-1)*50
  3558. |"Mainblock%!8+=(MainOpen%-1)*50
  3559. }#Mainblock%!12+=(MainOpen%-1)*50
  3560. Mainblock%!24=-1
  3561. Mainblock%!68=&00C800C8
  3562. .Mainblock%!72=Titlespace%+(MainOpen%-1)*70
  3563. "Wimp_CreateWindow",,Mainblock%
  3564. handle%
  3565. "MainHandle%(MainOpen%)=handle%
  3566. Display_newmain(MainOpen%)
  3567. Window_ChangeCurrent(handle%)
  3568. Window_RemoveMain(handle%)
  3569. internal%,b%,winloop%
  3570. b%=Localblock%+&200
  3571. (internal%=
  3572. Window_whichmain(handle%)
  3573. MainHandle%(internal%),MainHandle%(MainOpen%)
  3574. Display_mainswap(internal%,MainOpen%)
  3575. MainOpen%-=1
  3576. !b%=handle%
  3577. "Wimp_DeleteWindow",,b%
  3578. Display_removemain(MainOpen%+1)
  3579. MainOpen%>0
  3580. winloop%=1
  3581. MainOpen%
  3582. !b%=MainHandle%(winloop%)
  3583. "Wimp_GetWindowInfo",,b%
  3584. "Wimp_DeleteWindow",,b%
  3585. %b%!76=Titlespace%+(winloop%-1)*70
  3586. "Wimp_CreateWindow",,b%+4
  3587. handle%
  3588. MainHandle%(winloop%)=CurrentMain%
  3589. CurrentMain%=handle%
  3590. !MainHandle%(winloop%)=handle%
  3591. (b%!32
  3592. (1<<16))
  3593. Window_Open(handle%)
  3594. Window_UpdateTitle
  3595. handle%=CurrentMain%
  3596.  MainOpen%>0
  3597. "handle%=MainHandle%(MainOpen%)
  3598. MainOpen%>0
  3599. Window_ChangeCurrent(handle%)
  3600. Window_ChangeCurrent(handle%)
  3601. CursorOn%
  3602. Display_updatecursor
  3603. CurrentMain%=handle%
  3604. Window_Open(handle%)
  3605. "Wimp_SetCaretPosition",CurrentMain%,-1
  3606. CursorOn%
  3607. Display_Cursor(CursorSX%,CursorSY%,CursorSZ%)
  3608. Pointer$<>""
  3609. "OS_SpriteOp",36+256,WindowSprites%,Pointer$,2,PtrActiveX%,PtrActiveY%
  3610. ViewChanged%<>-1
  3611. Module_call(ToolTask%,"viewchanged")
  3612. Window_IsMain(handle%)
  3613. loop%
  3614. loop%=0
  3615. loop%<(MainOpen%+1)
  3616.  MainHandle%(loop%)<>handle%
  3617. loop%+=1
  3618. !=(MainHandle%(loop%)=handle%)
  3619. Icon_IncDec(win%,icon%,val%,min%,max%,red%)
  3620. text%,b%,cur%
  3621. b%=Localblock%
  3622. b%!0=win%
  3623. b%!4=icon%
  3624. "Wimp_GetIconState",,b%
  3625. text%=b%!28
  3626. cur%=
  3627. ($text%)+val%
  3628. cur%<=max%
  3629.  cur%>=min%
  3630. $text%=
  3631. b%!8=0
  3632. b%!12=0
  3633. "Wimp_SetIconState",,b%
  3634. Icon_Redraw(win%,icon%)
  3635. Icon_UpText(win%,icon%,text$)
  3636. text%,b%,len%
  3637. b%=Localblock%
  3638. b%!0=win%
  3639. b%!4=icon%
  3640. "Wimp_GetIconState",,b%
  3641. text%=b%!28
  3642. len%=b%!36
  3643. text$=
  3644. text$,len%-1)
  3645. $text%=text$
  3646. b%!8=0
  3647. b%!12=0
  3648. "Wimp_SetIconState",,b%
  3649. Icon_Read(win%,icon%)
  3650. text%,b%
  3651. b%=Localblock%
  3652. b%!0=win%
  3653. b%!4=icon%
  3654. "Wimp_GetIconState",,b%
  3655. text%=b%!28
  3656. =$text%
  3657. Icon_UpValid(win%,icon%,valid$)
  3658. b%,valid%
  3659. b%=Localblock%
  3660. b%!0=win%
  3661. b%!4=icon%
  3662. "Wimp_GetIconState",,b%
  3663. valid%=b%!32
  3664. $valid%=valid$
  3665. b%!8=0
  3666. b%!12=0
  3667. "Wimp_SetIconState",,b%
  3668. Icon_GreyOut(win%,icon%,val%)
  3669. b%=Localblock%
  3670. !b%=win%
  3671. b%!4=icon%
  3672. b%!8=val%*2^22
  3673. b%!12=2^22
  3674. "Wimp_SetIconState",,b%
  3675. Icon_UpState(win%,icon%,val%)
  3676. b%=Localblock%
  3677. !b%=win%
  3678. b%!4=icon%
  3679. b%!8=val%*2^21
  3680. b%!12=2^21
  3681. "Wimp_SetIconState",,b%
  3682. Icon_ReadState(win%,icon%)
  3683. b%=Localblock%
  3684. !b%=win%
  3685. b%!4=icon%
  3686. "Wimp_GetIconState",,b%
  3687. =b%!24>>21
  3688. Icon_Redraw(win%,icon%)
  3689. b%=Localblock%
  3690. !b%=win%
  3691. b%!4=icon%
  3692. "Wimp_GetIconState",,b%
  3693. "Wimp_ForceRedraw",!b%,b%!8,b%!12,b%!16,b%!20
  3694. Icon_Copy(win%,
  3695. icon%,offx%,offy%,text$,valid$,
  3696. indr%)
  3697. b%,flags%,valid%
  3698. b%=Errblock%
  3699. b%!0=win%
  3700. b%!4=icon%
  3701. "Wimp_GetIconState",,b%
  3702. offx%>=&FFFF
  3703. offx%=b%!16-b%!8+offx%-&FFFF
  3704. offy%>=&FFFF
  3705. offy%=b%!12-b%!20+offy%-&FFFF
  3706. b%!8+=offx%
  3707. b%!12+=offy%
  3708. b%!16+=offx%
  3709. b%!20+=offy%
  3710. flags%=b%!24
  3711. valid%=b%!32
  3712. flags%
  3713. $indr%=text$
  3714. b%!28=indr%
  3715. b%!36=
  3716. (text$)
  3717. indr%+=
  3718. (text$)+1
  3719. b%!32>0
  3720. $indr%=valid$
  3721. b%!32=indr%
  3722. indr%+=
  3723. (valid$)+1
  3724.     b%+=4
  3725. !b%=win%
  3726. "Wimp_CreateIcon",,b%
  3727. icon%
  3728. Tool_Clear
  3729. CurrentTool%=0
  3730. loop%=0
  3731. loop%<Tool%(0,0,0)
  3732.  ToolMap%(0,loop%)<>SelectorButton%
  3733. loop%+=1
  3734. loop%+=1
  3735. name$="Main"
  3736. LastIcon%<>loop%
  3737. (8ok%=
  3738. Module_call(SelectorTask%,"toolclick(name$,1)")
  3739. Module_call(ToolTask%,"toolend(name$,ToolNum%)")
  3740. ToolTask%=SelectorTask%
  3741. ToolNum%=1
  3742. Tool_toggle(loop%,LastIcon%)
  3743. LastIcon%=loop%
  3744. ok%=1
  3745. Module_call(SelectorTask%,"toolstart(name$,1)")
  3746. 08ok%=
  3747. Module_call(SelectorTask%,"toolclick(name$,1)")
  3748. ok%=1
  3749. Module_call(SelectorTask%,"toolstart(name$,1)")
  3750. Tool_End
  3751. Tool_End
  3752. Tool_toggle(-1,LastIcon%)
  3753. Module_call(ToolTask%,"toolend(Tool$(CurrentTool%,0),ToolNum%)")
  3754. ToolTask%=-1
  3755. ToolNum%=-1
  3756. LastIcon%=-1
  3757. Tool_BuildBox(name$)
  3758. ToolPtr%=6
  3759. 17,"No more room for toolboxes"
  3760. Tool$(ToolPtr%,0)=name$
  3761. Tool%(ToolPtr%,0,0)=1
  3762. ToolPtr%+=1
  3763. Tool_AddTool(name$,sprite$,task%,num%)
  3764. tool%,at%
  3765. tool%=
  3766. Tool_findbox(name$)
  3767. Tool%(tool%,0,0)=21
  3768. 17,"No more room for sprites in this toolbox"
  3769. at%=Tool%(tool%,0,0)
  3770. Tool$(tool%,at%)=sprite$
  3771. Tool%(tool%,at%,0)=task%
  3772. Tool%(tool%,at%,1)=num%
  3773. Tool%(tool%,0,0)+=1
  3774. Tool_AddTool(name$,sprite$,task%,num%)
  3775. Tool_AddTool(name$,sprite$,task%,num%)
  3776. tool%=
  3777. Tool_findbox(name$)
  3778. =Tool%(tool%,0,0)-1
  3779. Tool_NewToolBox(name$)
  3780. b%,b2%,loop%,cy%,x0%,y0%,x1%,y1%,flags%,valid%,ptr%,height%,start%,width%
  3781. b%100
  3782. tool%=
  3783. Tool_findbox(name$)
  3784. ToolHandle%<>-1
  3785. !b%=ToolHandle%:
  3786. "Wimp_DeleteWindow",,b%:ToolHandle%=-1
  3787. ToolHeap%=-1
  3788. ToolHeap%=
  3789. Heap_GetBlock(1024)
  3790. ptr%=ToolHeap%
  3791. "Wimp_CreateWindow",,Toolblock%
  3792. ToolHandle%
  3793. Tool%(tool%,0,0)=1
  3794. 17,"Toolbox '"+name$+"' contains no tools"
  3795. items%=Tool%(tool%,0,0)
  3796. mapped%=ToolMap%(tool%,1)
  3797. LastIcon%=2
  3798. Icon_UpValid(ToolHandle%,2,"s"+Tool$(tool%,mapped%)+"s")
  3799. Icon_UpValid(ToolHandle%,2,"s"+Tool$(tool%,mapped%))
  3800. x1%=68
  3801. y0%=-92
  3802. (items%-1)
  3803. ToolWidth%<>0
  3804. items%+=ToolWidth%-((items%-1)
  3805. ToolWidth%)
  3806. items%>2
  3807. loop%=3
  3808. items%
  3809. (loop%-2)
  3810. ToolWidth%=0
  3811. icon%=loop%-(ToolWidth%)
  3812. icon%=loop%-1
  3813. (loop%-2)
  3814. ToolWidth%=0
  3815. offx%=0:offy%=&FFFF
  3816. offx%=&FFFF:offy%=0
  3817. m#mapped%=ToolMap%(tool%,loop%-1)
  3818. loop%-1<Tool%(tool%,0,0)
  3819. o sprite$=Tool$(tool%,mapped%)
  3820. sprite$="toolblank"
  3821. Icon_Copy(ToolHandle%,icon%,offx%,offy%," ","s"+sprite$,ptr%)
  3822. CurrentTool%=tool%
  3823.  LastIcon%=icon%
  3824. Icon_UpValid(ToolHandle%,icon%,"s"+sprite$+"s")
  3825. x9b%!0=ToolHandle%:b%!4=icon%:
  3826. "Wimp_GetIconState",,b%
  3827. y0%=b%!12:x1%=b%!16
  3828. Window_SetExtent(ToolHandle%,0,y0%-4,x1%+4,0)
  3829. Window_Open(ToolHandle%)
  3830. Window_Close(ToolHandle%)
  3831. CurrentTool%<>tool%
  3832. CurrentTool%=tool%
  3833. ToolTask%=-1
  3834. ToolNum%=-1
  3835. LastIcon%=-1
  3836. Choices_Add(name$,sprite$,task%)
  3837. ChoiceHeap%=-1
  3838. $ChoiceHeap%=
  3839. Heap_GetBlock(1024)
  3840. ChoiceIndr%=ChoiceHeap%
  3841. Choices%(ChoicePtr%)=task%
  3842. starticon%=(ChoicePtr%-1)*3
  3843. icon%=starticon%
  3844. ChoicePtr%=0
  3845. starticon%+=3
  3846. icon%=starticon%
  3847. Icon_UpText(MainChoices%,icon%,name$)
  3848. icon%=starticon%+1
  3849. Icon_UpValid(MainChoices%,icon%,"s"+sprite$)
  3850. icon%=starticon%+2
  3851. Icon_Copy(MainChoices%,icon%,&FFFF+16,0,name$," ",ChoiceIndr%)
  3852. icon%=starticon%+1
  3853. Icon_Copy(MainChoices%,icon%,&FFFF+16,0,
  3854. 10,"s"+sprite$,ChoiceIndr%)
  3855. icon%=starticon%+2
  3856. Icon_Copy(MainChoices%,icon%,&FFFF+16,0," ","b0",ChoiceIndr%)
  3857. ChoicePtr%+=1
  3858. Choices_StartSection(section$)
  3859. #ChoiceHandle%,""
  3860. #ChoiceHandle%,"Section : "+section$
  3861. Choices_OutputLine(title$,var$)
  3862. #ChoiceHandle%,"   "+title$+
  3863. (title$)," ")+": "+var$
  3864. Choices_OutputFlag(title$,flag%)
  3865. #ChoiceHandle%,"   "+title$+
  3866. (title$)," ")+": ";
  3867. flag%
  3868. #ChoiceHandle%,"Yes"
  3869. #ChoiceHandle%,"No"
  3870. Choices_OutputBin(title$,bin%)
  3871. #ChoiceHandle%,"   "+title$+
  3872. (title$)," ")+": ";
  3873. #ChoiceHandle%,"Yes"
  3874. #ChoiceHandle%,"No"
  3875. Choices_EndSection
  3876. #ChoiceHandle%,"EndSection"
  3877. Choices_Ok
  3878. task%
  3879. $task%=
  3880. Window_owner(ChoicePane%)
  3881. task%<>0
  3882. Module_call(task%,"choiceok")
  3883. Choices_mainok
  3884. Display_Update
  3885. MainOpen%>0
  3886. winloop%=1
  3887. MainOpen%
  3888. Display_UpdateOne(MainHandle%(winloop%))
  3889. Display_UpdateOne(handle%)
  3890. internal%
  3891. (internal%=
  3892. Window_whichmain(handle%)
  3893. Window_ReadState(handle%)
  3894. b%=Localblock%
  3895. !b%=handle%
  3896. b%!4=X3%
  3897. b%!8=Y3%-Yw%
  3898. b%!12=X3%+Xw%
  3899. b%!16=Y3%
  3900. "Wimp_UpdateWindow",,b%
  3901. more%
  3902. more%
  3903. Display_wimpred(internal%,b%!28,b%!32,b%!36,b%!40)
  3904. "Wimp_GetRectangle",,b%
  3905. more%
  3906. Display_BlankItem(item%)
  3907. store%
  3908. #store%=!(DisplayIndex%+item%*4)
  3909. 6!(DisplayIndex%+item%*4)=-!(DisplayIndex%+item%*4)
  3910. Display_UpdateItem(item%)
  3911. Display_UpdateItemBox
  3912. MainOpen%>0
  3913. winloop%=1
  3914. MainOpen%
  3915. Display_startredraw(winloop%)
  3916. Window_ReadState(MainHandle%(winloop%))
  3917. scale=Scale%(winloop%)/100
  3918. xoff%=CentreX(winloop%)
  3919. .yoff%=-MainYWidth%*scale+CentreY(winloop%)
  3920. .minx%=!(DisplayBounds%+4024)*scale+xoff%-8
  3921. .miny%=!(DisplayBounds%+4028)*scale+yoff%-8
  3922. .maxx%=!(DisplayBounds%+4032)*scale+xoff%+8
  3923. .maxy%=!(DisplayBounds%+4036)*scale+yoff%+8
  3924. !(DisplayBounds%+4020)=-1
  3925. b%=Localblock%
  3926. !b%=MainHandle%(winloop%)
  3927. b%!4=minx%
  3928. b%!8=miny%
  3929. b%!12=maxx%+4
  3930. b%!16=maxy%+4
  3931. "Wimp_UpdateWindow",,b%
  3932. more%
  3933. more%
  3934. Display_wimpred(winloop%,b%!28,b%!32,b%!36,b%!40)
  3935. "Wimp_GetRectangle",,b%
  3936. more%
  3937. Display_UpdateItems(list%,end%)
  3938. MainOpen%>0
  3939. winloop%=1
  3940. MainOpen%
  3941. Display_startredraw(winloop%)
  3942. Window_ReadState(MainHandle%(winloop%))
  3943. scale=Scale%(winloop%)/100
  3944. xoff%=CentreX(winloop%)
  3945. .yoff%=-MainYWidth%*scale+CentreY(winloop%)
  3946. minx%=&100000:miny%=&100000
  3947. maxx%=0:maxy%=0
  3948. sat%=0
  3949. sat%<end%
  3950. item%=list%!sat%
  3951. 1t%=!(DisplayBounds%+item%*16+0)*scale+xoff%-8
  3952. t%<minx%minx%=t%
  3953.     1t%=!(DisplayBounds%+item%*16+4)*scale+yoff%-8
  3954. t%<miny%miny%=t%
  3955. 1t%=!(DisplayBounds%+item%*16+8)*scale+xoff%+8
  3956. t%>maxx%maxx%=t%
  3957. 2t%=!(DisplayBounds%+item%*16+12)*scale+yoff%+8
  3958. t%>maxy%maxy%=t%
  3959. sat%+=4
  3960. b%=Localblock%
  3961. !b%=MainHandle%(winloop%)
  3962. b%!4=minx%
  3963. b%!8=miny%
  3964. b%!12=maxx%+4
  3965. b%!16=maxy%+4
  3966. "Wimp_UpdateWindow",,b%
  3967. more%
  3968. more%
  3969. Display_wimpred(winloop%,b%!28,b%!32,b%!36,b%!40)
  3970. "Wimp_GetRectangle",,b%
  3971. more%
  3972. Display_UpdateItem(item%)
  3973. pos%,b%,xoff%,yoff%,minx%,miny%,maxx%,maxy%,currentitem%
  3974. MainOpen%>0
  3975.  item%>-1
  3976. winloop%=1
  3977. MainOpen%
  3978. Display_startredraw(winloop%)
  3979. Window_ReadState(MainHandle%(winloop%))
  3980. scale=Scale%(winloop%)/100
  3981. xoff%=CentreX(winloop%)
  3982. (.yoff%=-MainYWidth%*scale+CentreY(winloop%)
  3983. )6minx%=!(DisplayBounds%+(item%*16)+0)*scale+xoff%-8
  3984. *6miny%=!(DisplayBounds%+(item%*16)+4)*scale+yoff%-8
  3985. +6maxx%=!(DisplayBounds%+(item%*16)+8)*scale+xoff%+8
  3986. ,7maxy%=!(DisplayBounds%+(item%*16)+12)*scale+yoff%+8
  3987. b%=Localblock%
  3988. !b%=MainHandle%(winloop%)
  3989. b%!4=minx%
  3990. b%!8=miny%
  3991. b%!12=maxx%+4
  3992. b%!16=maxy%+4
  3993. currentitem%=item%
  3994. "Wimp_UpdateWindow",,b%
  3995. more%
  3996. more%
  3997. Display_wimpred(winloop%,b%!28,b%!32,b%!36,b%!40)
  3998. "Wimp_GetRectangle",,b%
  3999. more%
  4000. pos%=DisplayBounds%+4020
  4001. !pos%=currentitem%
  4002. item%=currentitem%
  4003. <'!(DisplayBounds%+item%*16+0)=pos%!4
  4004. ='!(DisplayBounds%+item%*16+4)=pos%!8
  4005. >(!(DisplayBounds%+item%*16+8)=pos%!12
  4006. ?)!(DisplayBounds%+item%*16+12)=pos%!16
  4007. !pos%=-1
  4008. Display_ReadMain(handle%)
  4009. F(internal%=
  4010. Window_whichmain(handle%)
  4011. CentreX=CentreX(internal%)
  4012. CentreY=CentreY(internal%)
  4013. Scale%=Scale%(internal%)
  4014. Display_startredraw(internal%)
  4015. Display_ConvXY(
  4016. Window_ReadState(CurrentMain%)
  4017. Display_ReadMain(CurrentMain%)
  4018. x%=x%-(X1%-X3%)-CentreX
  4019. P2y%=y%-(Y2%-Y3%-MainYWidth%*Scale%/100+CentreY)
  4020. ((x%/Scale%*100)+0.5)
  4021. ((y%/Scale%*100)+0.5)
  4022. Display_Screen(
  4023. Window_ReadState(CurrentMain%)
  4024. Display_ReadMain(CurrentMain%)
  4025. xoff%=X1%-X3%+CentreX
  4026. X0yoff%=Y2%-Y3%-MainYWidth%*Scale%/100+CentreY
  4027. x%=(x%*Scale%/100)+xoff%
  4028. y%=(y%*Scale%/100)+yoff%
  4029. Display_ClickedOn(x%,y%,item%)
  4030. Window_ReadState(CurrentMain%)
  4031. Display_ReadMain(CurrentMain%)
  4032. found%=
  4033. xoff%=X1%-X3%+CentreX
  4034. a0yoff%=Y2%-Y3%-MainYWidth%*Scale%/100+CentreY
  4035. b7minx%=!(DisplayBounds%+item%*16+0)*Scale%/100+xoff%
  4036. c7miny%=!(DisplayBounds%+item%*16+4)*Scale%/100+yoff%
  4037. d7maxx%=!(DisplayBounds%+item%*16+8)*Scale%/100+xoff%
  4038. e8maxy%=!(DisplayBounds%+item%*16+12)*Scale%/100+yoff%
  4039. x%>minx%
  4040.  x%<maxx%
  4041.  y%>miny%
  4042.  y%<maxy%
  4043. found%=
  4044. =found%
  4045. Display_WhichItem(x%,y%,current%)
  4046. item%,found%
  4047. Window_ReadState(CurrentMain%)
  4048. Display_ReadMain(CurrentMain%)
  4049. l*item%=ObjectList%?(CurrentObj%*16+4)-1
  4050. found%=
  4051. xoff%=X1%-X3%+CentreX
  4052. o0yoff%=Y2%-Y3%-MainYWidth%*Scale%/100+CentreY
  4053. item%>-1
  4054. found%
  4055. q7minx%=!(DisplayBounds%+item%*16+0)*Scale%/100+xoff%
  4056. r7miny%=!(DisplayBounds%+item%*16+4)*Scale%/100+yoff%
  4057. s7maxx%=!(DisplayBounds%+item%*16+8)*Scale%/100+xoff%
  4058. t8maxy%=!(DisplayBounds%+item%*16+12)*Scale%/100+yoff%
  4059. x%>minx%
  4060.  x%<maxx%
  4061.  y%>miny%
  4062.  y%<maxy%
  4063.  item%>current%
  4064. found%=
  4065. item%-=1
  4066. found%
  4067. item%=-2
  4068. =item%+1
  4069. Display_SelectInBox(minx%,miny%,maxx%,maxy%,update%)
  4070. Window_ReadState(CurrentMain%)
  4071. Display_ReadMain(CurrentMain%)
  4072. item%=0
  4073. SelectPos%=0
  4074. Selected%=-2
  4075. xoff%=X1%-X3%+CentreX
  4076. 0yoff%=Y2%-Y3%-MainYWidth%*Scale%/100+CentreY
  4077. DisplayIndex%!(item%*4)<>-1
  4078. 5x1%=!(DisplayBounds%+item%*16+0)*Scale%/100+xoff%
  4079. 5y1%=!(DisplayBounds%+item%*16+4)*Scale%/100+yoff%
  4080. 5x2%=!(DisplayBounds%+item%*16+8)*Scale%/100+xoff%
  4081. 6y2%=!(DisplayBounds%+item%*16+12)*Scale%/100+yoff%
  4082. x1%>minx%
  4083.  x2%<maxx%
  4084.  y1%>miny%
  4085.  y2%<maxy%
  4086.  SelectList%!SelectPos%=item%
  4087. SelectPos%+=4
  4088. item%+=1
  4089. SelectPos%=0
  4090. Selected%=-1
  4091. SelectPos%=4
  4092. Selected%=!SelectList%
  4093. update%
  4094. Display_Update
  4095. Display_RedrawOne(handle%)
  4096. (internal%=
  4097. Window_whichmain(handle%)
  4098. "Hourglass_On"
  4099. Display_startredraw(internal%)
  4100. disppos%=Display%+4
  4101. Items%=0
  4102. lrg%=100000
  4103. sml%=-lrg%
  4104. Module_call(ViewerTask%,"ready(ViewerNum%)")
  4105. Display_Object(disppos%,CurrentObj%,0,0,0,0,0,0,0,1,1,1,0,lrg%,lrg%,sml%,sml%)
  4106. !DisplayEnd%=disppos%-Display%
  4107. DisplayBounds%!4020=-1
  4108. Display_endredraw(internal%)
  4109. Notify3DRedraw%<>-1
  4110. Module_call(Notify3DRedraw%,"redrawnotify")
  4111. Display_UpdateOne(handle%)
  4112. "Hourglass_Off"
  4113. Display_RedrawAll
  4114. disppos%,lrg%
  4115. "Hourglass_On"
  4116. winloop%=1
  4117. MainOpen%
  4118. Display_RedrawOne(MainHandle%(winloop%))
  4119. "Hourglass_Off"
  4120. Display_AddItem(obj%,item%)
  4121. disppos%,count%,minx%,miny%,maxx%,maxy%,type%,p%,pos%,winloop%,dispend%
  4122. 2DisplayIndex%!(Items%*4)=DisplayEnd%:Items%+=1
  4123. DisplayIndex%!(Items%*4)=-1
  4124. winloop%=1
  4125. MainOpen%
  4126. Display_startredraw(winloop%)
  4127. Module_call(ViewerTask%,"ready(ViewerNum%)")
  4128. !disppos%=DisplayEnd%+Display%
  4129. minx%=10000
  4130. miny%=10000
  4131. maxx%=-10000
  4132. maxy%=-10000
  4133. 1pos%=
  4134. Object_FindItem(obj%,item%)+ObjectItem%
  4135. type%=?pos%
  4136. p%=pos%
  4137. Wwrd(disppos%,128)
  4138. type%
  4139. Display_Plane(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%)
  4140. 2,8,9,10,11:
  4141. Display_Matrix(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%)
  4142. Display_Object(disppos%,p%!44,p?1,p%!4,p%!8,p%!12,p%!16,p%!20,p%!24,p%!28/1000,p%!32/1000,p%!36/1000,1,minx%,miny%,maxx%,maxy%):p%+=48
  4143. Display_Lamp(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%)
  4144. Display_Mesh(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%)
  4145. Wwrd(disppos%,129)
  4146. item%=Items%-1
  4147. (!(DisplayBounds%+(item%*16)+0)=minx%
  4148. (!(DisplayBounds%+(item%*16)+4)=miny%
  4149. (!(DisplayBounds%+(item%*16)+8)=maxx%
  4150. )!(DisplayBounds%+(item%*16)+12)=maxy%
  4151. dispend%=disppos%-Display%
  4152. Display_endredraw(winloop%)
  4153. winloop%
  4154. DisplayEnd%=dispend%
  4155. Display_RedrawItemBox(obj%,item%)
  4156. disppos%,count%,minx%,miny%,maxx%,maxy%,type%,p%,pos%
  4157. winloop%=1
  4158. MainOpen%
  4159. Display_startredraw(winloop%)
  4160. Module_call(ViewerTask%,"ready(ViewerNum%)")
  4161. $disppos%=DisplayIndex%!(item%*4)
  4162. disppos%<-1
  4163. disppos%=-disppos%
  4164. $DisplayIndex%!(item%*4)=disppos%
  4165. disppos%+=Display%
  4166. minx%=100000:maxx%=-100000
  4167. miny%=100000:maxy%=-100000
  4168. 1pos%=
  4169. Object_FindItem(obj%,item%)+ObjectItem%
  4170. type%=?pos%
  4171. p%=pos%
  4172. Wwrd(disppos%,128)
  4173. type%
  4174. Display_Plane(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%)
  4175. 2,8,9,10,11:
  4176. Display_Matrix(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%)
  4177. Display_Object(disppos%,p%!44,p%?1,p%!4,p%!8,p%!12,p%!16,p%!20,p%!24,p%!28/1000,p%!32/1000,p%!36/1000,1,minx%,miny%,maxx%,maxy%):p%+=48
  4178. Display_Lamp(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%)
  4179. Display_Mesh(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%)
  4180. Wwrd(disppos%,129)
  4181. sminx%=minx%:sminy%=miny%
  4182. smaxx%=maxx%:smaxy%=maxy%
  4183. !(DisplayBounds%+4024)<minx%minx%=!(DisplayBounds%+4024)
  4184. !(DisplayBounds%+4028)<miny%miny%=!(DisplayBounds%+4028)
  4185. !(DisplayBounds%+4032)>maxx%maxx%=!(DisplayBounds%+4032)
  4186. !(DisplayBounds%+4036)>maxy%maxy%=!(DisplayBounds%+4036)
  4187. !(DisplayBounds%+(item%*16)+0)<minx%
  4188. minx%=!(DisplayBounds%+(item%*16)+0)
  4189. !(DisplayBounds%+(item%*16)+4)<miny%
  4190. miny%=!(DisplayBounds%+(item%*16)+4)
  4191. !(DisplayBounds%+(item%*16)+8)>maxx%
  4192. maxx%=!(DisplayBounds%+(item%*16)+8)
  4193. !(DisplayBounds%+(item%*16)+12)>maxy%
  4194. maxy%=!(DisplayBounds%+(item%*16)+12)
  4195. !(DisplayBounds%+4020)=-2
  4196.  !(DisplayBounds%+4024)=minx%
  4197.  !(DisplayBounds%+4028)=miny%
  4198.  !(DisplayBounds%+4032)=maxx%
  4199.  !(DisplayBounds%+4036)=maxy%
  4200. '!(DisplayBounds%+item%*16+0)=sminx%
  4201. '!(DisplayBounds%+item%*16+4)=sminy%
  4202. '!(DisplayBounds%+item%*16+8)=smaxx%
  4203. (!(DisplayBounds%+item%*16+12)=smaxy%
  4204. Display_endredraw(winloop%)
  4205. Display_RedrawItem(obj%,item%)
  4206. disppos%,count%,minx%,miny%,maxx%,maxy%,type%,p%,pos%
  4207. winloop%=1
  4208. MainOpen%
  4209. Display_startredraw(winloop%)
  4210. Module_call(ViewerTask%,"ready(ViewerNum%)")
  4211. $disppos%=DisplayIndex%!(item%*4)
  4212. disppos%<-1
  4213. disppos%=-disppos%
  4214. $DisplayIndex%!(item%*4)=disppos%
  4215. disppos%+=Display%
  4216. minx%=10000
  4217. miny%=10000
  4218. maxx%=-10000
  4219. maxy%=-10000
  4220. 1pos%=
  4221. Object_FindItem(obj%,item%)+ObjectItem%
  4222. type%=?pos%
  4223. p%=pos%
  4224. Wwrd(disppos%,128)
  4225. type%
  4226. Display_Plane(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%)
  4227. 2,8,9,10,11:
  4228. Display_Matrix(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%)
  4229. Display_Object(disppos%,p%!44,p%?1,p%!4,p%!8,p%!12,p%!16,p%!20,p%!24,p%!28/1000,p%!32/1000,p%!36/1000,1,minx%,miny%,maxx%,maxy%):p%+=48
  4230. Display_Lamp(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%)
  4231. Display_Mesh(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%)
  4232. Wwrd(disppos%,129)
  4233. pos%=DisplayBounds%+4020
  4234. !pos%=item%
  4235. pos%!4=minx%
  4236. pos%!8=miny%
  4237. pos%!12=maxx%
  4238. pos%!16=maxy%
  4239. minx%<!(DisplayBounds%+(item%*16)+0)
  4240. !(DisplayBounds%+(item%*16)+0)=minx%
  4241. miny%<!(DisplayBounds%+(item%*16)+4)
  4242. !(DisplayBounds%+(item%*16)+4)=miny%
  4243. maxx%>!(DisplayBounds%+(item%*16)+8)
  4244. !(DisplayBounds%+(item%*16)+8)=maxx%
  4245. maxy%>!(DisplayBounds%+(item%*16)+12)
  4246. !(DisplayBounds%+(item%*16)+12)=maxy%
  4247. Display_endredraw(winloop%)
  4248. Display_Object(
  4249. disppos%,obj%,col%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,depth%,
  4250. minx%,
  4251. miny%,
  4252. maxx%,
  4253. maxy%)
  4254. p%,start%,len%,item%,type%,
  4255. item%=0
  4256. &,start%=ObjectList%!(obj%*16)+ObjectItem%
  4257. len%=!start%
  4258. item%<(ObjectList%?(obj%*16+4))
  4259. type%=?(start%+p%)
  4260. p%+=start%
  4261. depth%=0
  4262. --DisplayIndex%!(item%*4)=disppos%-Display%
  4263. Items%+=1
  4264. minx%=100000
  4265. miny%=100000
  4266. maxx%=-100000
  4267. maxy%=-100000
  4268. depth%>10
  4269. Wwrd(disppos%,255)
  4270. DisplayIndex%!(item%*4)=-1
  4271. 17,"Items nested too deeply"
  4272. Wwrd(disppos%,128)
  4273. Wwrd(disppos%,65)
  4274. Wwrd(disppos%,col%)
  4275. type%
  4276. Display_Plane(disppos%,p%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,minx%,miny%,maxx%,maxy%)
  4277. 2,8,9,10,11:
  4278. Display_Matrix(disppos%,p%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,minx%,miny%,maxx%,maxy%)
  4279. Display_Object(disppos%,p%!44,p%?1,p%!4+x%,p%!8+y%,p%!12+z%,p%!16+rx%,p%!20+ry%,p%!24+rz%,p%!28/1000*sx,p%!32/1000*sy,p%!36/1000*sz,depth%+1,minx%,miny%,maxx%,maxy%):p%+=48
  4280. Display_Lamp(disppos%,p%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,minx%,miny%,maxx%,maxy%)
  4281. Display_Mesh(disppos%,p%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,minx%,miny%,maxx%,maxy%)
  4282. p%+=44+p%!40
  4283. p%-=start%
  4284. depth%=0
  4285. G(!(DisplayBounds%+(item%*16)+0)=minx%
  4286. H(!(DisplayBounds%+(item%*16)+4)=miny%
  4287. I(!(DisplayBounds%+(item%*16)+8)=maxx%
  4288. J)!(DisplayBounds%+(item%*16)+12)=maxy%
  4289. Wwrd(disppos%,129)
  4290. item%+=1
  4291. depth%=0
  4292. DisplayIndex%!(item%*4)=-1:Items%=item%
  4293. Display_Matrix(
  4294. disppos%,
  4295. p%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,
  4296. minx%,
  4297. miny%,
  4298. maxx%,
  4299. maxy%)
  4300. loc%,xsize%,ysize%,matrixblock%,lx%,ly%,pos%,col%,tp%
  4301. ?p%=2
  4302. tp%=0
  4303. ?p%=8
  4304. tp%=1
  4305. ?p%=9
  4306. tp%=2
  4307. ?p%=10
  4308. tp%=3
  4309. ?p%=11
  4310. tp%=4
  4311. col%=p%?1
  4312. x%+=p%!4:y%+=p%!8:z%+=p%!12
  4313. Z$rx%+=p%!16:ry%+=p%!20:rz%+=p%!24
  4314. sx=sx*p%!28/1000
  4315. sy=sy*p%!32/1000
  4316. sz=sz*p%!36/1000
  4317. b%=Localblock%
  4318. _@b%!0=TranslationMatrix%:b%!4=x%<<16:b%!8=y%<<16:b%!12=z%<<16
  4319. `Eb%!16=(
  4320. rx%)*(1<<15):b%!20=(
  4321. ry%)*(1<<15):b%!24=(
  4322. rz%)*(1<<15)
  4323. aEb%!28=(
  4324. rx%)*(1<<15):b%!32=(
  4325. ry%)*(1<<15):b%!36=(
  4326. rz%)*(1<<15)
  4327. b3b%!40=sx*(1<<8):b%!44=sy*(1<<8):b%!48=sz*(1<<8)
  4328. c    A%=b%
  4329. CodeSpace%+4
  4330. B%=TranslationMatrix%
  4331. A%=DisplayMatrix%
  4332. C%=CombinedMatrix%
  4333. xsize%=p%!44
  4334. ysize%=p%!48
  4335. p%+=52
  4336. Display_checksize(Display%,disppos%,xsize%*(ysize%+1)*18+256)
  4337. m8matrixblock%=
  4338. Heap_GetBlock((xsize%+1)*(ysize%+1)*8)
  4339. Wwrd(disppos%,128)
  4340. Wwrd(disppos%,65)
  4341. Wwrd(disppos%,col%)
  4342. minmax%=Localblock%+&100
  4343. minmax%!0=minx%
  4344. minmax%!4=miny%
  4345. minmax%!8=maxx%
  4346. minmax%!12=maxy%
  4347. vFb%!0=matrixblock%:b%!4=disppos%:b%!8=xsize%:b%!12=ysize%:b%!16=tp%
  4348. wZb%!20=TranslationMatrix%:b%!24=minmax%:b%!28=DisplayCode%:b%!32=DisplayXyz%:b%!44=Xyz%
  4349. ly%=0
  4350. ysize%
  4351. lx%=0
  4352. xsize%
  4353. Rxyz(p%,!Xyz%,Xyz%!4,Xyz%!8)
  4354. b%!36=lx%:b%!40=ly%
  4355. |    A%=b%
  4356. CodeSpace%+24
  4357.     A%=b%
  4358. CodeSpace%+20
  4359. disppos%=b%!4
  4360. Wwrd(disppos%,129)
  4361. Heap_FreeBlock(matrixblock%)
  4362. minx%=minmax%!0
  4363. miny%=minmax%!4
  4364. maxx%=minmax%!8
  4365. maxy%=minmax%!12
  4366. Display_Lamp(
  4367. disppos%,
  4368. p%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,
  4369. minx%,
  4370. miny%,
  4371. maxx%,
  4372. maxy%)
  4373. x%(),y%(),z%()
  4374. x%(6),y%(6),z%(6)
  4375. x%+=p%!4:y%+=p%!8:z%+=p%!12
  4376. $rx%+=p%!16:ry%+=p%!20:rz%+=p%!24
  4377. sx=sx*p%!28/1000
  4378. sy=sy*p%!32/1000
  4379. sz=sz*p%!36/1000
  4380. type%=p%!44
  4381. ang=p%!92/1000
  4382. x%(1)=0:y%(1)=0:z%(1)=0
  4383. Display_Trans(x%(1),y%(1),z%(1),x%,y%,z%,rx%,ry%,rz%,sx,sy,sz)
  4384. 'x%(2)=p%!56:y%(2)=p%!60:z%(2)=p%!64
  4385. 3xo%=x%(2)-x%(1):yo%=y%(2)-y%(1):zo%=z%(2)-z%(1)
  4386. !x%(3)=xo%:y%(3)=yo%:z%(3)=zo%
  4387. Display_Trans(x%(3),y%(3),z%(3),x%(1),y%(1),z%(1),-ang,0,0,1,1,1)
  4388. !x%(4)=xo%:y%(4)=yo%:z%(4)=zo%
  4389. Display_Trans(x%(4),y%(4),z%(4),x%(1),y%(1),z%(1),ang,0,0,1,1,1)
  4390. !x%(5)=xo%:y%(5)=yo%:z%(5)=zo%
  4391. Display_Trans(x%(5),y%(5),z%(5),x%(1),y%(1),z%(1),0,0,-ang,1,1,1)
  4392. !x%(6)=xo%:y%(6)=yo%:z%(6)=zo%
  4393. Display_Trans(x%(6),y%(6),z%(6),x%(1),y%(1),z%(1),0,0,ang,1,1,1)
  4394. l%=1 ls%=DisplayLampSize%
  4395. ls%=0
  4396. Display_ConvInt(x%(l%),y%(l%),z%(l%))
  4397. x%(l%)+ls%>maxx%maxx%=x%(l%)+ls%
  4398. x%(l%)-ls%<minx%minx%=x%(l%)-ls%
  4399. y%(l%)+ls%>maxy%maxy%=y%(l%)+ls%
  4400. y%(l%)-ls%<miny%miny%=y%(l%)-ls%
  4401. ls%=DisplayLampSize%
  4402. Display_checksize(Display%,disppos%,174)
  4403. Wwrd(disppos%,128)
  4404. Wwrd(disppos%,1):
  4405. Wxy(disppos%,x%(1)-ls%,y%(1)-ls%)
  4406. Wwrd(disppos%,2):
  4407. Wxy(disppos%,x%(1)+ls%,y%(1)-ls%)
  4408. Wwrd(disppos%,2):
  4409. Wxy(disppos%,x%(1)+ls%,y%(1)+ls%)
  4410. Wwrd(disppos%,2):
  4411. Wxy(disppos%,x%(1)-ls%,y%(1)+ls%)
  4412. Wwrd(disppos%,2):
  4413. Wxy(disppos%,x%(1)-ls%,y%(1)-ls%)
  4414. Wwrd(disppos%,2):
  4415. Wxy(disppos%,x%(1)+ls%,y%(1)+ls%)
  4416. Wwrd(disppos%,1):
  4417. Wxy(disppos%,x%(1)+ls%,y%(1)-ls%)
  4418. Wwrd(disppos%,2):
  4419. Wxy(disppos%,x%(1)-ls%,y%(1)+ls%)
  4420. Wwrd(disppos%,4):
  4421. Wxy(disppos%,x%(1),y%(1))
  4422. Wwrd(disppos%,5):
  4423. Wxy(disppos%,x%(2),y%(2))
  4424. ((type%
  4425. %1111)=2)
  4426. m%=4:d%=5
  4427. m%=8:d%=8
  4428. Wwrd(disppos%,67):
  4429. Wwrd(disppos%,3)
  4430. Wwrd(disppos%,m%):
  4431. Wxy(disppos%,x%(1),y%(1))
  4432. Wwrd(disppos%,d%):
  4433. Wxy(disppos%,x%(l%),y%(l%))
  4434. Wwrd(disppos%,129)
  4435. p%+=44+p%!40
  4436. Display_Plane(
  4437. disppos%,
  4438. p%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,
  4439. minx%,
  4440. miny%,
  4441. maxx%,
  4442. maxy%)
  4443. x1%,y1%,z1%,x2%,y2%,loc%,loop%,col%
  4444. col%=p%?1
  4445. x%+=p%!4:y%+=p%!8:z%+=p%!12
  4446. $rx%+=p%!16:ry%+=p%!20:rz%+=p%!24
  4447. sx=sx*p%!28/1000
  4448. sy=sy*p%!32/1000
  4449. sz=sz*p%!36/1000
  4450. b%=Localblock%
  4451. @b%!0=TranslationMatrix%:b%!4=x%<<16:b%!8=y%<<16:b%!12=z%<<16
  4452. Eb%!16=(
  4453. rx%)*(1<<15):b%!20=(
  4454. ry%)*(1<<15):b%!24=(
  4455. rz%)*(1<<15)
  4456. Eb%!28=(
  4457. rx%)*(1<<15):b%!32=(
  4458. ry%)*(1<<15):b%!36=(
  4459. rz%)*(1<<15)
  4460. 3b%!40=sx*(1<<8):b%!44=sy*(1<<8):b%!48=sz*(1<<8)
  4461.     A%=b%
  4462. CodeSpace%+4
  4463. B%=TranslationMatrix%
  4464. A%=DisplayMatrix%
  4465. C%=CombinedMatrix%
  4466. loc%=p%+44
  4467. Display_checksize(Display%,disppos%,80)
  4468. +b%=Localblock%:minmax%=Localblock%+&100
  4469. #minmax%!0=minx%:minmax%!4=miny%
  4470. $minmax%!8=maxx%:minmax%!12=maxy%
  4471. 9b%!0=TranslationMatrix%:b%!4=DisplayXyz%:b%!8=minmax%
  4472. 9b%!12=disppos%:b%!16=loc%:b%!20=-1:b%!24=DisplayCode%
  4473. b%!28=col%
  4474.     A%=b%
  4475. CodeSpace%+32
  4476. #minx%=minmax%!0:miny%=minmax%!4
  4477. $maxx%=minmax%!8:maxy%=minmax%!12
  4478. disppos%=b%!12
  4479. p%+=44+48
  4480. Display_Mesh(
  4481. disppos%,
  4482. p%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,
  4483. minx%,
  4484. miny%,
  4485. maxx%,
  4486. maxy%)
  4487. x1%,y1%,z1%,x2%,y2%,loc%,loop%,col%
  4488. col%=p%?1
  4489. x%+=p%!4:y%+=p%!8:z%+=p%!12
  4490. $rx%+=p%!16:ry%+=p%!20:rz%+=p%!24
  4491. sx=sx*p%!28/1000
  4492. sy=sy*p%!32/1000
  4493. sz=sz*p%!36/1000
  4494. b%=Localblock%
  4495. @b%!0=TranslationMatrix%:b%!4=x%<<16:b%!8=y%<<16:b%!12=z%<<16
  4496. Eb%!16=(
  4497. rx%)*(1<<15):b%!20=(
  4498. ry%)*(1<<15):b%!24=(
  4499. rz%)*(1<<15)
  4500. Eb%!28=(
  4501. rx%)*(1<<15):b%!32=(
  4502. ry%)*(1<<15):b%!36=(
  4503. rz%)*(1<<15)
  4504. 3b%!40=sx*(1<<8):b%!44=sy*(1<<8):b%!48=sz*(1<<8)
  4505.     A%=b%
  4506. CodeSpace%+4
  4507. B%=TranslationMatrix%
  4508. A%=DisplayMatrix%
  4509. C%=CombinedMatrix%
  4510. loc%=p%+44
  4511. points%=!loc%
  4512. planes%=loc%!4
  4513. startpos%=loc%+8
  4514. planes%>=0
  4515. Display_checksize(Display%,disppos%,9*5*(planes%+1)+8)
  4516. Display_checksize(Display%,disppos%,8)
  4517. points%>=0
  4518. ,pointlist%=
  4519. Heap_GetBlock((points%+1)*8)
  4520. +b%=Localblock%:minmax%=Localblock%+&100
  4521. #minmax%!0=minx%:minmax%!4=miny%
  4522. $minmax%!8=maxx%:minmax%!12=maxy%
  4523. 9b%!0=TranslationMatrix%:b%!4=DisplayXyz%:b%!8=minmax%
  4524. Ab%!12=disppos%:b%!16=loc%:b%!20=pointlist%:b%!24=DisplayCode%
  4525. b%!28=col%
  4526.     A%=b%
  4527. CodeSpace%+28
  4528. #minx%=minmax%!0:miny%=minmax%!4
  4529. $maxx%=minmax%!8:maxy%=minmax%!12
  4530. disppos%=b%!12
  4531. p%+=44+p%!40
  4532. Display_Trans(
  4533. z1%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz)
  4534. sinx,cosx,siny,cosy,sinz,cosz,ty,tx,tz,x1,y1,z1
  4535. x1=x1%:y1=y1%:z1=z1%
  4536. $sinx=
  4537. rx%:siny=
  4538. ry%:sinz=
  4539. $cosx=
  4540. rx%:cosy=
  4541. ry%:cosz=
  4542. x1=x1*sx:y1=y1*sy:z1=z1*sz
  4543. ty=y1*cosx+z1*sinx
  4544. z1=z1*cosx-y1*sinx
  4545.     y1=ty
  4546. tx=x1*cosy+z1*siny
  4547. z1=z1*cosy-x1*siny
  4548.     x1=tx
  4549. tx=x1*cosz-y1*sinz
  4550. y1=x1*sinz+y1*cosz
  4551.     x1=tx
  4552. x1=x1+x%:y1=y1+y%:z1=z1+z%
  4553. (x1+0.5)
  4554. (y1+0.5)
  4555. (z1+0.5)
  4556. Display_TransFasterSetup(x%,y%,z%,rx%,ry%,rz%,sx,sy,sz)
  4557. TransSx=sx
  4558. TransSy=sy
  4559. TransSz=sz
  4560. TransX%=x%
  4561. TransY%=y%
  4562. TransZ%=z%
  4563. TransSinx=
  4564. TransCosx=
  4565. TransSiny=
  4566. TransCosy=
  4567. TransSinz=
  4568. TransCosz=
  4569. Display_TransFaster(
  4570. x1%=x1%*TransSx
  4571. y1%=y1%*TransSy
  4572. z1%=z1%*TransSz
  4573. 2#ty%=y1%*TransCosx+z1%*TransSinx
  4574. 3#z1%=z1%*TransCosx-y1%*TransSinx
  4575. y1%=ty%
  4576. 5#tx%=x1%*TransCosy+z1%*TransSiny
  4577. 6#z1%=z1%*TransCosy-x1%*TransSiny
  4578. x1%=tx%
  4579. 8#tx%=x1%*TransCosz-y1%*TransSinz
  4580. 9#y1%=x1%*TransSinz+y1%*TransCosz
  4581. x1%=tx%
  4582. x1%+=TransX%
  4583. y1%+=TransY%
  4584. z1%+=TransZ%
  4585. Display_TransEcho(
  4586. z1,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz)
  4587. sinx,cosx,siny,cosy,sinz,cosz,ty,tx,tz
  4588. A$sinx=
  4589. rx%:siny=
  4590. ry%:sinz=
  4591. B$cosx=
  4592. rx%:cosy=
  4593. ry%:cosz=
  4594. x1=x1*sx:y1=y1*sy:z1=z1*sz
  4595. Wimp_Naughty(
  4596. x1+","+
  4597. y1+","+
  4598. ty=y1*cosx+z1*sinx
  4599. z1=z1*cosx-y1*sinx
  4600. G    y1=ty
  4601. Wimp_Naughty(
  4602. x1+","+
  4603. y1+","+
  4604. tx=x1*cosy+z1*siny
  4605. z1=z1*cosy-x1*siny
  4606. K    x1=tx
  4607. Wimp_Naughty(
  4608. x1+","+
  4609. y1+","+
  4610. tx=x1*cosz-y1*sinz
  4611. y1=x1*sinz+y1*cosz
  4612. O    x1=tx
  4613. Wimp_Naughty(
  4614. x1+","+
  4615. y1+","+
  4616. x1=x1+x%:y1=y1+y%:z1=z1+z%
  4617. Wimp_Naughty(
  4618. x1+","+
  4619. y1+","+
  4620. Display_BackTrans(
  4621. z1%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz)
  4622. sinx,cosx,siny,cosy,sinz,cosz,ty,tx,tz,x1,y1,z1
  4623. x1=x1%:y1=y1%:z1=z1%
  4624. W'sinx=
  4625. -rx%:siny=
  4626. -ry%:sinz=
  4627. X'cosx=
  4628. -rx%:cosy=
  4629. -ry%:cosz=
  4630. x1=x1-x%:y1=y1-y%:z1=z1-z%
  4631. tx=x1*cosz-y1*sinz
  4632. y1=x1*sinz+y1*cosz
  4633. \    x1=tx
  4634. tx=x1*cosy+z1*siny
  4635. z1=z1*cosy-x1*siny
  4636. _    x1=tx
  4637. ty=y1*cosx+z1*sinx
  4638. z1=z1*cosx-y1*sinx
  4639. b    y1=ty
  4640. x1=x1/sx:y1=y1/sy:z1=z1/sz
  4641. (x1+0.5)
  4642. (y1+0.5)
  4643. (z1+0.5)
  4644. Display_PointTrans(obj%,itm%,
  4645. j/at%=
  4646. Object_FindItem(obj%,itm%)+ObjectItem%
  4647. Object_TransformBuild(TranslationMatrix%,at%!4,at%!8,at%!12,at%!16,at%!20,at%!24,at%!28/1000,at%!32/1000,at%!36/1000)
  4648. Object_TransformPoint(x1,y1,z1,TranslationMatrix%)
  4649. Display_PointBackTrans(obj%,itm%,
  4650. q/at%=
  4651. Object_FindItem(obj%,itm%)+ObjectItem%
  4652. Display_BackTrans(x1,y1,z1,at%!4,at%!8,at%!12,at%!16,at%!20,at%!24,at%!28/1000,at%!32/1000,at%!36/1000)
  4653. Display_ConvInt(
  4654. y%,z%)
  4655. vEdum%=
  4656. ("FN"+Prefix$(ViewerTask%)+"_xyztoxy(ViewerNum%,x%,y%,z%)")
  4657. Display_ViewerRotate(
  4658. zDdum%=
  4659. ("FN"+Prefix$(ViewerTask%)+"_rotate(ViewerNum%,x%,y%,z%)")
  4660. Display_XYZtoXY(
  4661. y%,z%)
  4662. Display_ReadMain(CurrentMain%)
  4663. Module_call(ViewerTask%,"ready(ViewerNum%)")
  4664. Edum%=
  4665. ("FN"+Prefix$(ViewerTask%)+"_xyztoxy(ViewerNum%,x%,y%,z%)")
  4666. Display_XYtoXYZNS(x1%,y1%,z1%,
  4667. Display_ReadMain(CurrentMain%)
  4668. Qdum%=
  4669. ("FN"+Prefix$(ViewerTask%)+"_xytoxyz(ViewerNum%,x1%,y1%,z1%,x%,y%,z%)")
  4670. Display_XYtoXYZ(x1%,y1%,z1%,
  4671. Display_ReadMain(CurrentMain%)
  4672. Qdum%=
  4673. ("FN"+Prefix$(ViewerTask%)+"_xytoxyz(ViewerNum%,x1%,y1%,z1%,x%,y%,z%)")
  4674. "OS_Byte",121,1
  4675. ,ctrl%
  4676. !ctrl%=(ctrl%=&FF)
  4677.  AllowCTRL%
  4678. (SnapToGrid%
  4679. ctrl%)
  4680. SnapToGrid%
  4681.  ctrl%)
  4682. )x%=(
  4683. (x%/GridXSpace%+.5))*GridXSpace%
  4684. )y%=(
  4685. (y%/GridYSpace%+.5))*GridYSpace%
  4686. )z%=(
  4687. (z%/GridZSpace%+.5))*GridZSpace%
  4688. Display_NewViewer(win%,task%,num%,opt%)
  4689. internal%
  4690. Module_call(task%,"start(num%)")
  4691. %internal%=
  4692. Window_whichmain(win%)
  4693. ,WindowView$(internal%)=Viewer$(opt%-1,0)
  4694.  ViewerTask%(internal%)=task%
  4695. ViewerNum%(internal%)=num%
  4696. Window_UpdateTitle
  4697. Display_DefaultZoom(handle%)
  4698. internal%
  4699. (internal%=
  4700. Window_whichmain(handle%)
  4701. $CentreX(internal%)=MainXWidth%/2
  4702. $CentreY(internal%)=MainYWidth%/2
  4703.  CentreX0%=CentreX(internal%)
  4704.  CentreY0%=CentreY(internal%)
  4705. Scale%(internal%)=100
  4706. Display_ZoomMain(handle%,100,0,0)
  4707. Display_ZoomMain(handle%,zoom%,x%,y%)
  4708. b%,flag%,internal%
  4709. (internal%=
  4710. Window_whichmain(handle%)
  4711. b%=Localblock%
  4712. b%!0=handle%
  4713. "Wimp_GetWindowState",,b%
  4714. flag%=b%!32
  4715. "Wimp_OpenWindow",,b%
  4716. b%!0=0
  4717. b%!12=0
  4718. b%!8=MainXWidth%*zoom%/100
  4719. b%!4=-MainYWidth%*zoom%/100
  4720. /CentreX(internal%)=MainXWidth%*zoom%/200-x%
  4721. /CentreY(internal%)=MainYWidth%*zoom%/200-y%
  4722. CentreX(internal%)>5000
  4723. CentreX(internal%)=5000
  4724. CentreX(internal%)<-5000
  4725. CentreX(internal%)=-5000
  4726. CentreY(internal%)>5000
  4727. CentreY(internal%)=5000
  4728. CentreY(internal%)<-5000
  4729. CentreY(internal%)=-5000
  4730. b%!8-=b%!8
  4731. b%!4-=b%!14
  4732. "Wimp_SetExtent",handle%,b%
  4733. !b%=handle%
  4734. "Wimp_GetWindowState",,b%
  4735. +b%!20=CentreX(internal%)-(b%!12-b%!4)/2
  4736. .b%!24=-(CentreY(internal%)-(b%!16-b%!8)/2)
  4737. Wimp_open(b%)
  4738. (flag%
  4739. 1<<16)=0
  4740. "Wimp_CloseWindow",,b%
  4741. Scale%(internal%)=zoom%
  4742. Display_Cursor(x%,y%,z%)
  4743. CursorSX%=x%
  4744. CursorSY%=y%
  4745. CursorSZ%=z%
  4746. Display_XYZtoXY(x%,y%,z%)
  4747. CursorX%=x%
  4748. CursorY%=y%
  4749. CursorOn%=
  4750. Display_updatecursor
  4751. Display_Cursor2D(x%,y%)
  4752. CursorX%=x%
  4753. CursorY%=y%
  4754. CursorOn%=
  4755. Display_updatecursor
  4756. Display_MoveCursor2D(x%,y%)
  4757. Display_updatecursor
  4758. CursorX%=x%
  4759. CursorY%=y%
  4760. Display_updatecursor
  4761. Display_MoveCursor(x%,y%,z%)
  4762. Display_updatecursor
  4763. CursorSX%=x%
  4764. CursorSY%=y%
  4765. CursorSZ%=z%
  4766. Display_XYZtoXY(x%,y%,z%)
  4767. CursorX%=x%
  4768. CursorY%=y%
  4769. Display_updatecursor
  4770. Display_LoseCursor
  4771. CursorOn%
  4772. Display_updatecursor
  4773. CursorOn%=
  4774. Display_DeleteCursor
  4775. Display_updatecursor
  4776. Display_Claim(string$)
  4777. DisplayClaimed%=
  4778. ClaimedBy$=string$
  4779. Display_ReadMain(CurrentMain%)
  4780. Window_UpdateTitle
  4781. DisplayIndex%!0=0
  4782. DisplayIndex%!4=-1
  4783. !Display%=128
  4784. Display%!4=129
  4785. Display%!8=-1
  4786. OldScale%=Scale%
  4787. OldCentreX%=CentreX
  4788. OldCentreY%=CentreY
  4789. Display_DefaultZoom(CurrentMain%)
  4790. Display_UpdateOne(CurrentMain%)
  4791. Display_Release
  4792. DisplayClaimed%=
  4793. Window_UpdateTitle
  4794. Display_ZoomMain(CurrentMain%,OldScale%,0,0)
  4795. Display_RedrawOne(CurrentMain%)
  4796. Display_StartDrawing
  4797. Display_ReadMain(CurrentMain%)
  4798. !Display%=128
  4799. DisplayPos%=Display%+4
  4800. Display_Start3DAdding
  4801. winloop%
  4802. (DisplayIndex%!(Items%*4)=DisplayEnd%
  4803. #DisplayIndex%!((Items%+1)*4)=-1
  4804. DisplayPos%=DisplayEnd%
  4805. winloop%=1
  4806. MainOpen%
  4807. Display_startredraw(winloop%)
  4808. DisplayBounds%!4024=10000
  4809. DisplayBounds%!4028=10000
  4810. DisplayBounds%!4032=-10000
  4811. DisplayBounds%!4036=-10000
  4812. Display%!DisplayPos%=128
  4813. winloop%
  4814. DisplayPos%+=4
  4815. Display_Move3D(x%,y%,z%)
  4816. winloop%,x1%,y1%,z1%
  4817. winloop%=1
  4818. MainOpen%
  4819. x1%=x%:y1%=y%:z1%=z%
  4820. Display_startredraw(winloop%)
  4821. Module_call(ViewerTask%,"ready(ViewerNum%)")
  4822. Display_ConvInt(x1%,y1%,z1%)
  4823. Display%!DisplayPos%=1
  4824.  Display%!(DisplayPos%+4)=x1%
  4825.  Display%!(DisplayPos%+8)=y1%
  4826. x1%<DisplayBounds%!4024
  4827. DisplayBounds%!4024=x1%
  4828. y1%<DisplayBounds%!4028
  4829. DisplayBounds%!4028=y1%
  4830. x1%>DisplayBounds%!4032
  4831. DisplayBounds%!4032=x1%
  4832. y1%>DisplayBounds%!4036
  4833. DisplayBounds%!4036=y1%
  4834. winloop%
  4835. DisplayPos%+=12
  4836. Display_Move(x%,y%)
  4837. &!!DisplayPos%=1:DisplayPos%+=4
  4838. '"!DisplayPos%=x%:DisplayPos%+=4
  4839. ("!DisplayPos%=y%:DisplayPos%+=4
  4840. Display_Draw3D(x%,y%,z%)
  4841. winloop%,x1%,y1%,z1%
  4842. winloop%=1
  4843. MainOpen%
  4844. x1%=x%:y1%=y%:z1%=z%
  4845. Display_startredraw(winloop%)
  4846. Module_call(ViewerTask%,"ready(ViewerNum%)")
  4847. Display_ConvInt(x1%,y1%,z1%)
  4848. Display%!DisplayPos%=2
  4849. 2 Display%!(DisplayPos%+4)=x1%
  4850. 3 Display%!(DisplayPos%+8)=y1%
  4851. x1%<DisplayBounds%!4024
  4852. DisplayBounds%!4024=x1%
  4853. y1%<DisplayBounds%!4028
  4854. DisplayBounds%!4028=y1%
  4855. x1%>DisplayBounds%!4032
  4856. DisplayBounds%!4032=x1%
  4857. y1%>DisplayBounds%!4036
  4858. DisplayBounds%!4036=y1%
  4859. winloop%
  4860. DisplayPos%+=12
  4861. Display_Draw(x%,y%)
  4862. <!!DisplayPos%=2:DisplayPos%+=4
  4863. ="!DisplayPos%=x%:DisplayPos%+=4
  4864. >"!DisplayPos%=y%:DisplayPos%+=4
  4865. Display_Node(x%,y%)
  4866. A!!DisplayPos%=3:DisplayPos%+=4
  4867. B"!DisplayPos%=x%:DisplayPos%+=4
  4868. C"!DisplayPos%=y%:DisplayPos%+=4
  4869. Display_Node3D(x%,y%,z%)
  4870. winloop%,x1%,y1%,z1%
  4871. winloop%=1
  4872. MainOpen%
  4873. x1%=x%:y1%=y%:z1%=z%
  4874. Display_startredraw(winloop%)
  4875. Module_call(ViewerTask%,"ready(ViewerNum%)")
  4876. Display_ConvInt(x1%,y1%,z1%)
  4877. Display%!DisplayPos%=3
  4878. M Display%!(DisplayPos%+4)=x1%
  4879. N Display%!(DisplayPos%+8)=y1%
  4880. x1%<DisplayBounds%!4024
  4881. DisplayBounds%!4024=x1%
  4882. y1%<DisplayBounds%!4028
  4883. DisplayBounds%!4028=y1%
  4884. x1%>DisplayBounds%!4032
  4885. DisplayBounds%!4032=x1%
  4886. y1%>DisplayBounds%!4036
  4887. DisplayBounds%!4036=y1%
  4888. DisplayPos%+=12
  4889. Display_Colour(c%)
  4890. W"!DisplayPos%=64:DisplayPos%+=4
  4891. X"!DisplayPos%=c%:DisplayPos%+=4
  4892. Display_Colour3D(c%)
  4893. winloop%
  4894. winloop%=1
  4895. MainOpen%
  4896. Display_startredraw(winloop%)
  4897. Display%!DisplayPos%=67
  4898. Display%!(DisplayPos%+4)=c%
  4899. DisplayPos%+=8
  4900. Display_EndDrawing
  4901. !DisplayPos%=129
  4902. Display_UpdateOne(CurrentMain%)
  4903. Display_End3DAdding
  4904. winloop%,ominx%,ominy%,omaxx%,omaxy%
  4905. winloop%=1
  4906. MainOpen%
  4907. Display_startredraw(winloop%)
  4908. Display%!DisplayPos%=129
  4909. l'ominx%=DisplayBounds%!(Items%*16+0)
  4910. m'ominy%=DisplayBounds%!(Items%*16+4)
  4911. n'omaxx%=DisplayBounds%!(Items%*16+8)
  4912. o(omaxy%=DisplayBounds%!(Items%*16+12)
  4913. DisplayBounds%!4024<ominx%ominx%=DisplayBounds%!4024
  4914. DisplayBounds%!4028<ominy%ominy%=DisplayBounds%!4028
  4915. DisplayBounds%!4032>omaxx%omaxx%=DisplayBounds%!4032
  4916. DisplayBounds%!4036>omaxy%omaxy%=DisplayBounds%!4036
  4917. u:DisplayBounds%!(Items%*16+l%)=DisplayBounds%!(4024+l%)
  4918. DisplayBounds%!4020=-2
  4919. DisplayBounds%!4024=ominx%
  4920. DisplayBounds%!4028=ominy%
  4921. DisplayBounds%!4032=omaxx%
  4922. DisplayBounds%!4036=omaxy%
  4923. Display_UpdateItemBox
  4924. Display_StartPoint
  4925. @DisplayPointList%=
  4926. Heap_ExtendBlock(DisplayPointList%,100*8)
  4927. !DisplayPointList%=0
  4928. Display_AddPoint(x%,y%)
  4929. num%=!DisplayPointList%
  4930. &!(DisplayPointList%+(num%*8)+4)=x%
  4931. &!(DisplayPointList%+(num%*8)+8)=y%
  4932. !DisplayPointList%+=1
  4933. Display_AlterPoint(num%,x%,y%)
  4934. &!(DisplayPointList%+(num%*8)+4)=x%
  4935. &!(DisplayPointList%+(num%*8)+8)=y%
  4936. Display_EndPoint
  4937. Heap_FreeBlock(DisplayPointList%)
  4938. Display_ClaimGrid
  4939. ClaimGridOn%=
  4940. ClaimGridXSpace%=50
  4941. ClaimGridYSpace%=50
  4942. ClaimSnapToGrid%=
  4943. Display_ReleaseGrid
  4944. ClaimGridOn%=
  4945. ClaimSnapToGrid%=
  4946. Display_SnapToClaimedGrid(
  4947. "OS_Byte",121,1
  4948. ,ctrl%
  4949. !ctrl%=(ctrl%=&FF)
  4950.  AllowCTRL%
  4951. (ClaimSnapToGrid%
  4952. ctrl%)
  4953. ClaimSnapToGrid%
  4954.  ctrl%)
  4955. 3x%=(
  4956. (x%/ClaimGridXSpace%+.5))*ClaimGridXSpace%
  4957. 3y%=(
  4958. (y%/ClaimGridYSpace%+.5))*ClaimGridYSpace%
  4959. Wbyt(
  4960. pos%,byte%)
  4961. ?pos%=byte%
  4962. pos%+=1
  4963. Rbyt(
  4964. pos%,
  4965. byte%)
  4966. byte%=?pos%
  4967. pos%+=1
  4968. Wwrd(
  4969. pos%,word%)
  4970. !pos%=word%
  4971. pos%+=4
  4972. Rwrd(
  4973. pos%,
  4974. word%)
  4975. word%=!pos%
  4976. pos%+=4
  4977. pos%,x%,y%)
  4978. !pos%=x%
  4979. pos%!4=y%
  4980. pos%+=8
  4981. pos%,
  4982. x%=!pos%
  4983. y%=pos%!4
  4984. pos%+=8
  4985. Wxyz(
  4986. pos%,x%,y%,z%)
  4987. !pos%=x%
  4988. pos%!4=y%
  4989. pos%!8=z%
  4990. pos%+=12
  4991. Rxyz(
  4992. x%=!p%
  4993. y%=p%!4
  4994. z%=p%!8
  4995. p%+=12
  4996. Object_FindItem(obj%,item%)
  4997. count%,pos%,len%,datalen%,max%
  4998. count%=0
  4999. *pos%=ObjectList%!(obj%*16)+ObjectItem%
  5000.  max%=ObjectList%?(obj%*16+4)
  5001. item%>max%
  5002. 17,"There are not "+
  5003. item%+" items in Object "+
  5004. len%=!pos%
  5005. pos%+=4
  5006. item%<>count%
  5007.  pos%<ObjectItem%+Obend%
  5008. count%+=1
  5009. datalen%=pos%!40
  5010. pos%+=44+datalen%
  5011. pos%>=ObjectItem%+ObjectSize%+40
  5012. 17,"Overrun in FindItem with obj% "+
  5013. obj%+" item% "+
  5014. item%
  5015. =pos%-ObjectItem%
  5016. Object_NewObject(name$)
  5017. ptr%=Objects%*16
  5018. #ObjectList%!ptr%=Obend%:ptr%+=4
  5019. ObjectList%?ptr%=0:ptr%+=1
  5020. "$(ptr%+ObjectList%)=
  5021. name$,10)
  5022. Objects%+=1
  5023. ObjectItem%!Obend%=4
  5024. Obend%+=4
  5025. ObjectAtEnd%=Objects%-1
  5026. Changed%
  5027. Changed%=
  5028. Window_UpdateTitle
  5029. =Objects%-1
  5030. Object_FindStart(obj%):=ObjectList%!(obj%*16)
  5031. Object_FindEnd(obj%)
  5032. start%,end%
  5033.  start%=ObjectList%!(obj%*16)
  5034. end%=ObjectItem%!start%
  5035. =end%+start%
  5036. Object_NewItem(obj%,
  5037. itm%)
  5038. Object_toend(obj%)
  5039. ObjectList%?(obj%*16+4)=0
  5040. ,pos%=ObjectList%!(obj%*16)+4+ObjectItem%
  5041. Epos%=
  5042. Object_FindItem(obj%,ObjectList%?(obj%*16+4)-1)+ObjectItem%
  5043. pos%+=pos%!40+44
  5044. ObjectList%?(obj%*16+4)+=1
  5045. "itm%=ObjectList%?(obj%*16+4)-1
  5046. ?pos%=0
  5047. =pos%-ObjectItem%
  5048. Object_UpdateItem(obj%,item%)
  5049. Object_FindItem(obj%,item%)
  5050. Object_UpdateName(obj%,name$)
  5051. ptr%=obj%*16+ObjectList%+5
  5052. $ptr%=
  5053. name$,10)
  5054. Changed%
  5055. Changed%=
  5056. Window_UpdateTitle
  5057. Object_ReadName(obj%)
  5058. =$(obj%*16+ObjectList%+5)
  5059. Object_EditObject(obj%)
  5060. CurrentObj%=obj%
  5061. Selected%=-1
  5062. Select_Type%=-1
  5063. Display_RedrawAll
  5064. Window_UpdateTitle
  5065. Object_UpdatePos(obj%,itm%,xs%,ys%,zs%,rx%,ry%,rz%,sx,sy,sz,up%)
  5066. minx%,miny%,maxx%,maxy%,sat%,item%,pos%,x1%,y1%,z1%,spos%
  5067. minx%=&100000:miny%=&100000
  5068. maxx%=0:maxy%=0
  5069. itm%=-2 sat%=0
  5070. sat%=-4
  5071. sx=sx*1000
  5072. sy=sy*1000
  5073. sz=sz*1000
  5074. itm%<>-1
  5075.  sat%<SelectPos%
  5076. itm%=-2
  5077. item%=SelectList%!sat%
  5078. sat%+=4
  5079. item%=itm%
  5080. 1pos%=
  5081. Object_FindItem(obj%,item%)+ObjectItem%
  5082. x1%=xs%:y1%=ys%:z1%=zs%
  5083. rx1%=rx%:ry1%=ry%:rz1%=rz%
  5084. sx1=sx:sy1=sy:sz1=sz
  5085. pos%+=4
  5086. itm%=-2
  5087. spos%=pos%
  5088. Rxyz(spos%,xr%,yr%,zr%)
  5089. x1%+=xr%:y1%+=yr%:z1%+=zr%
  5090. Rxyz(spos%,xr%,yr%,zr%)
  5091. "!rx1%+=xr%:ry1%+=yr%:rz1%+=zr%
  5092. Rxyz(spos%,xr%,yr%,zr%)
  5093. sx1=sx*xr%/1000
  5094. sy1=sy*yr%/1000
  5095. sz1=sz*zr%/1000
  5096. %100)=%100
  5097. Wxyz(pos%,x1%,y1%,z1%)
  5098. pos%+=12
  5099. %010)=%010
  5100. Wxyz(pos%,rx1%,ry1%,rz1%)
  5101. pos%+=12
  5102. %001)=%001
  5103. Wxyz(pos%,sx1,sy1,sz1)
  5104. pos%+=12
  5105. Changed%
  5106. Changed%=
  5107. Window_UpdateTitle
  5108. itm%<>-2 itm%=-1
  5109. Display_RedrawItemBox(CurrentObj%,item%)
  5110. Display_UpdateItemBox
  5111. Object_NameItem(type%)
  5112. type$,itemtype%,sat%,ok%,pos%
  5113. type%
  5114. sat%=0:itemtype%=-1:ok%=
  5115. sat%<SelectPos%
  5116. item%=SelectList%!sat%
  5117. sat%+=4
  5118. 98pos%=
  5119. Object_FindItem(CurrentObj%,item%)+ObjectItem%
  5120. itemtype%=-1
  5121. itemtype%=?pos%
  5122. itemtype%<>?pos%
  5123. type$=
  5124. (SelectPos%/4)+" "
  5125. itemtype%
  5126. 1:type$+="planes"
  5127. 2:type$+="matrices"
  5128. 3:type$+="objects"
  5129. 4:type$+="lamps"
  5130. 5:type$+="meshes"
  5131. 6:type$+="tubes"
  5132. 7:type$+="bezier surfaces"
  5133. 8:type$+="swept items"
  5134. 9:type$+="extrusions"
  5135. 10:type$+="two sided swept items"
  5136. 11:type$+="profiled extrusions"
  5137. type$+="items"
  5138. 1:type$="a plane"
  5139. 2:type$="a matrix"
  5140. 3:type$="an object"
  5141. R<pos%=
  5142. Object_FindItem(CurrentObj%,Selected%)+ObjectItem%
  5143. S/type$+=" ('"+
  5144. Object_ReadName(pos%!44)+"')"
  5145. 4:type$="a lamp"
  5146. 5:type$="a mesh"
  5147. 6:type$="a tube"
  5148. 7:type$="a bezier surface"
  5149. 8:type$="a swept item"
  5150. 9:type$="an extrusion"
  5151. 10:type$="a two sided swept item"
  5152. 11:type$="a profiled extrusion"
  5153. :type$="an unknown object type"
  5154. =type$
  5155. Object_PlaceObject(inobj%,
  5156. itm%,placeobj%,x%,y%,z%,rx%,ry%,rz%,scx,scy,scz)
  5157. pos%,opos%
  5158. itm%=-1
  5159. b1pos%=
  5160. Object_NewItem(inobj%,itm%)+ObjectItem%
  5161. opos%=pos%
  5162. scx=scx*1000
  5163. scy=scy*1000
  5164. scz=scz*1000
  5165. Wbyt(pos%,3)
  5166. Wbyt(pos%,-1)
  5167. pos%+=2
  5168. Wxyz(pos%,x%,y%,z%)
  5169. Wxyz(pos%,rx%,ry%,rz%)
  5170. Wxyz(pos%,scx,scy,scz)
  5171. Wwrd(pos%,4)
  5172. Wwrd(pos%,placeobj%)
  5173. len%=pos%-opos%
  5174. p$start%=
  5175. Object_FindStart(inobj%)
  5176. ObjectItem%!start%+=len%
  5177. Obend%=pos%-ObjectItem%
  5178. Changed%
  5179. Changed%=
  5180. Window_UpdateTitle
  5181. Object_Lamp(obj%,
  5182. itm%,
  5183. a,option%)
  5184. dum%,pos%,opos%
  5185. dum%=itm%
  5186. itm%=-1
  5187. pos%=
  5188. Object_NewItem(obj%,itm%)
  5189. pos%=
  5190. Object_UpdateItem(obj%,itm%)
  5191. pos%+=ObjectItem%
  5192. Object_checksize(ObjectItem%,pos%,100)
  5193. opos%=pos%
  5194. option%=1
  5195. Wbyt(pos%,4)
  5196. Wbyt(pos%,-1)
  5197. pos%+=2
  5198. Wxyz(pos%,x1%,y1%,z1%)
  5199. Wxyz(pos%,0,0,0)
  5200. Wxyz(pos%,1,1,1)
  5201. Wwrd(pos%,52)
  5202. Wbyt(pos%,tp%)
  5203. Wbyt(pos%,r%)
  5204. Wbyt(pos%,g%)
  5205. Wbyt(pos%,b%)
  5206. Wwrd(pos%,dt%)
  5207. Wwrd(pos%,rd%)
  5208. Wxyz(pos%,lx%,ly%,lz%)
  5209. Wxyz(pos%,xi%,yi%,zi%)
  5210. Wxyz(pos%,xa%,ya%,za%)
  5211. Wwrd(pos%,a*1000)
  5212. len%=44+52
  5213. "start%=
  5214. Object_FindStart(obj%)
  5215. dum%=-1
  5216. ObjectItem%!start%=pos%-start%-ObjectItem%:Obend%=pos%-ObjectItem%
  5217. Changed%
  5218. Changed%=
  5219. Window_UpdateTitle
  5220. pos%+=4
  5221. Rxyz(pos%,x1%,y1%,z1%)
  5222. pos%+=28
  5223. Rbyt(pos%,tp%)
  5224. Rbyt(pos%,r%)
  5225. Rbyt(pos%,g%)
  5226. Rbyt(pos%,b%)
  5227. Rwrd(pos%,dt%)
  5228. Rwrd(pos%,rd%)
  5229. Rxyz(pos%,lx%,ly%,lz%)
  5230. Rxyz(pos%,xi%,yi%,zi%)
  5231. Rxyz(pos%,xa%,ya%,za%)
  5232. Rwrd(pos%,ang):ang=ang/1000
  5233. Object_Plane(obj%,
  5234. itm%,x1%,y1%,z1%,x2%,y2%,z2%,x3%,y3%,z3%,x4%,y4%,z4%,x%,y%,z%,rx%,ry%,rz%,scx,scy,scz)
  5235. pos%,opos%,len%,start%,dum%
  5236. dum%=itm%
  5237. itm%=-1
  5238. pos%=
  5239. Object_NewItem(obj%,itm%)
  5240. pos%=
  5241. Object_UpdateItem(obj%,itm%)
  5242. pos%+=ObjectItem%
  5243. Object_checksize(ObjectItem%,pos%,90)
  5244. opos%=pos%
  5245. scx=scx*1000
  5246. scy=scy*1000
  5247. scz=scz*1000
  5248. Wbyt(pos%,1)
  5249. dum%=-1
  5250. Wbyt(pos%,-1)
  5251. pos%+=1
  5252. pos%+=2
  5253. Wxyz(pos%,x%,y%,z%)
  5254. Wxyz(pos%,rx%,ry%,rz%)
  5255. Wxyz(pos%,scx,scy,scz)
  5256. Wwrd(pos%,48)
  5257. Wxyz(pos%,x1%,y1%,z1%)
  5258. Wxyz(pos%,x2%,y2%,z2%)
  5259. Wxyz(pos%,x3%,y3%,z3%)
  5260. Wxyz(pos%,x4%,y4%,z4%)
  5261. "start%=
  5262. Object_FindStart(obj%)
  5263. dum%=-1
  5264. ObjectItem%!start%=pos%-start%-ObjectItem%:Obend%=pos%-ObjectItem%
  5265. Changed%
  5266. Changed%=
  5267. Window_UpdateTitle
  5268. Object_MakeMatrix(obj%,
  5269. itm%,xsize%,ysize%,gap%,x%,y%,z%,rx%,ry%,rz%,scx,scy,scz,typ%)
  5270. pos%,opos%,lx%,ly%,len%
  5271. /pos%=
  5272. Object_NewItem(obj%,itm%)+ObjectItem%
  5273. Object_checksize(ObjectItem%,pos%,(xsize%+1)*(ysize%+1)*12+50)
  5274. opos%=pos%
  5275. scx=scx*1000
  5276. scy=scy*1000
  5277. scz=scz*1000
  5278. Wbyt(pos%,2)
  5279. Wbyt(pos%,8)
  5280. Wbyt(pos%,9)
  5281. Wbyt(pos%,10)
  5282. Wbyt(pos%,11)
  5283. Wbyt(pos%,-1)
  5284. pos%+=2
  5285. Wxyz(pos%,x%,y%,z%)
  5286. Wxyz(pos%,rx%,ry%,rz%)
  5287. Wxyz(pos%,scx,scy,scz)
  5288. Wwrd(pos%,(xsize%+1)*(ysize%+1)*12+8)
  5289. Wwrd(pos%,xsize%)
  5290. Wwrd(pos%,ysize%)
  5291. ly%=0
  5292. ysize%
  5293. lx%=0
  5294. xsize%
  5295. Wxyz(pos%,lx%*gap%,ly%*gap%,0)
  5296. len%=pos%-opos%
  5297. "start%=
  5298. Object_FindStart(obj%)
  5299. .ObjectItem%!start%=pos%-ObjectItem%-start%
  5300. Obend%=pos%-ObjectItem%
  5301. Changed%
  5302. Changed%=
  5303. Window_UpdateTitle
  5304. Object_MatrixPoint(obj%,itm%,xpt%,ypt%,
  5305. z%,opt%)
  5306. pos%,xsize%,ysize%
  5307. 0pos%=
  5308. Object_FindItem(obj%,itm%)+ObjectItem%
  5309. !xsize%=pos%!44:ysize%=pos%!48
  5310. xpt%>xsize%
  5311. ypt%>ysize%
  5312. 17,"Bad Matrix position given to Object_MatrixPoint"
  5313. (pos%+=52+((ypt%*(xsize%+1)+xpt%)*12)
  5314. opt%=1
  5315. Wxyz(pos%,x%,y%,z%)
  5316. opt%=0
  5317. Rxyz(pos%,x%,y%,z%)
  5318. Changed%
  5319. Changed%=
  5320. Window_UpdateTitle
  5321. Object_MakeMesh(obj%,
  5322. itm%)
  5323. pos%,len%,start%
  5324. /pos%=
  5325. Object_NewItem(obj%,itm%)+ObjectItem%
  5326. Object_checksize(ObjectItem%,pos%,44+20)
  5327. Wbyt(pos%,5)
  5328. Wbyt(pos%,-1)
  5329. pos%+=2
  5330. Wxyz(pos%,0,0,0)
  5331. Wxyz(pos%,0,0,0)
  5332. Wxyz(pos%,1000,1000,1000)
  5333. Wwrd(pos%,12)
  5334. Wwrd(pos%,-1)
  5335. Wwrd(pos%,-1)
  5336. len%=12+44
  5337. "start%=
  5338. Object_FindStart(obj%)
  5339. ObjectItem%!start%+=len%
  5340. Obend%=pos%-ObjectItem%
  5341. Changed%
  5342. Changed%=
  5343. Window_UpdateTitle
  5344. Object_MeshGetData(obj%,itm%,
  5345. points%,
  5346. planes%)
  5347. 0pos%=
  5348. Object_FindItem(obj%,itm%)+ObjectItem%
  5349. pos%+=44
  5350. Rwrd(pos%,points%)
  5351. Rwrd(pos%,planes%)
  5352. Object_MeshGetQuadP(obj%,itm%,quad%,
  5353. pos%,points%
  5354.     0pos%=
  5355. Object_FindItem(obj%,itm%)+ObjectItem%
  5356. pos%+=44
  5357. Rwrd(pos%,points%)
  5358. pos%+=4
  5359. pos%+=((points%+1)*12)
  5360. pos%+=(quad%*16)
  5361. Rwrd(pos%,p1%)
  5362. Rwrd(pos%,p2%)
  5363. Rwrd(pos%,p3%)
  5364. Rwrd(pos%,p4%)
  5365. Object_MeshGetQuadC(obj%,itm%,quad%,
  5366. pos%,points%
  5367. 0pos%=
  5368. Object_FindItem(obj%,itm%)+ObjectItem%
  5369. pos%+=44
  5370. Rwrd(pos%,points%)
  5371. pos%+=4
  5372. pos%+=((points%+1)*12)
  5373. pos%+=(quad%*16)
  5374. Rwrd(pos%,p%)
  5375. Object_MeshGetPoint(obj%,itm%,p%,x1%,y1%,z1%)
  5376. Rwrd(pos%,p%)
  5377. Object_MeshGetPoint(obj%,itm%,p%,x2%,y2%,z2%)
  5378. Rwrd(pos%,p%)
  5379. Object_MeshGetPoint(obj%,itm%,p%,x3%,y3%,z3%)
  5380. Rwrd(pos%,p%)
  5381. Object_MeshGetPoint(obj%,itm%,p%,x4%,y4%,z4%)
  5382. Object_MeshGetPoint(obj%,itm%,point%,
  5383. '0pos%=
  5384. Object_FindItem(obj%,itm%)+ObjectItem%
  5385. pos%+=44
  5386. pos%+=8
  5387. pos%+=(point%*12)
  5388. Rxyz(pos%,x1%,y1%,z1%)
  5389. Object_MeshAlterPoint(obj%,itm%,point%,x%,y%,z%)
  5390. /0pos%=
  5391. Object_FindItem(obj%,itm%)+ObjectItem%
  5392. pos%+=44
  5393. pos%+=8
  5394. pos%+=(point%*12)
  5395. Wxyz(pos%,x%,y%,z%)
  5396. Object_MeshWhichPlane(obj%,itm%,point%)
  5397. pos%,points%,planes%,fnd%,pln%,crn%,l2%
  5398. 70pos%=
  5399. Object_FindItem(obj%,itm%)+ObjectItem%
  5400. pos%+=44
  5401. Rwrd(pos%,points%)
  5402. Rwrd(pos%,planes%)
  5403. pos%+=(points%+1)*12
  5404. fnd%=-1
  5405. pln%=0
  5406. planes%
  5407. l2%=0
  5408. Rwrd(pos%,crn%)
  5409. crn%=point%
  5410.  fnd%=-1
  5411. fnd%=pln%
  5412. crn%=point%
  5413.  fnd%>-1
  5414.  fnd%<>pln%
  5415. fnd%=-2
  5416. D    =fnd%
  5417. Object_MeshDeleteQuad(obj%,
  5418. itm%,quad%)
  5419. pos%,lenpos%,planepos%,points%,planes%,l%,start%
  5420. Object_toend(obj%)
  5421. Object_itemtoend(obj%,itm%)
  5422. I0pos%=
  5423. Object_FindItem(obj%,itm%)+ObjectItem%
  5424. pos%+=44
  5425. lenpos%=pos%-4
  5426. Rwrd(pos%,points%)
  5427. planepos%=pos%
  5428. Rwrd(pos%,planes%)
  5429. pos%+=(points%+1)*12
  5430. l%=pos%+(quad%*16)
  5431. pos%+(planes%*16)-4
  5432. !l%=l%!16
  5433. !planepos%-=1
  5434. !lenpos%-=16
  5435. U"start%=
  5436. Object_FindStart(obj%)
  5437. ObjectItem%!start%-=16
  5438. Obend%-=16
  5439. Changed%
  5440. Changed%=
  5441. Window_UpdateTitle
  5442. Object_MeshSplitPoint(obj%,
  5443. itm%,point%)
  5444. pos%,points%,planes%,count%,l%,pt%,c2%,x%,y%,z%
  5445. \0pos%=
  5446. Object_FindItem(obj%,itm%)+ObjectItem%
  5447. pos%+=44
  5448. Rwrd(pos%,points%)
  5449. Rwrd(pos%,planes%)
  5450. pos%+=(points%+1)*12
  5451. count%=0
  5452. ((planes%+1)*16-4)
  5453. pos%!l%=point%
  5454. count%+=1
  5455. Object_MeshGetPoint(obj%,itm%,point%,x%,y%,z%)
  5456. count%>1
  5457. count%-1
  5458. Object_MeshAddPoint(obj%,itm%,x%,y%,z%,pt%)
  5459. pt%-=(count%-1)
  5460. k0pos%=
  5461. Object_FindItem(obj%,itm%)+ObjectItem%
  5462. pos%+=44
  5463. Rwrd(pos%,points%)
  5464. Rwrd(pos%,planes%)
  5465. pos%+=(points%+1)*12
  5466. p    c2%=0
  5467. ((planes%+1)*16-4)
  5468. pos%!l%=point%
  5469. c2%>0
  5470. pos%!l%=pt%+c2%
  5471. c2%+=1
  5472. Object_MeshSnaptoPoint(obj%,itm%,
  5473. point%)
  5474. x1%,y1%,z1%,pos%,points%,planes%,start%,newpoint%,ok%,acc%,x2%,y2%,z2%,l%
  5475. Object_MeshGetPoint(obj%,itm%,point%,x1%,y1%,z1%)
  5476. ~0pos%=
  5477. Object_FindItem(obj%,itm%)+ObjectItem%
  5478. pos%+=44
  5479. Rwrd(pos%,points%)
  5480. Rwrd(pos%,planes%)
  5481. start%=pos%
  5482. newpoint%=0
  5483.     ok%=
  5484. newpoint%<=points%
  5485. pos%=start%+(newpoint%*12)
  5486. Rxyz(pos%,x2%,y2%,z2%)
  5487. acc%=16
  5488. (x2%-x1%)<acc%
  5489. (y2%-y1%)<acc%
  5490. (z2%-z1%)<acc%
  5491.  newpoint%<>point%
  5492. newpoint%+=1
  5493. newpoint%-=1
  5494. pos%=start%+(points%+1)*12
  5495. ((planes%+1)*16-4)
  5496. pos%!l%=point%
  5497. pos%!l%=newpoint%
  5498. point%=newpoint%
  5499. Object_MeshAddQuadP(obj%,
  5500. itm%,p1%,p2%,p3%,p4%)
  5501. Object_toend(obj%)
  5502. Object_itemtoend(obj%,itm%)
  5503. 0pos%=
  5504. Object_FindItem(obj%,itm%)+ObjectItem%
  5505. pos%+=40
  5506. Rwrd(pos%,datalen%)
  5507. startpos%=pos%
  5508. Rwrd(pos%,points%)
  5509. Rwrd(pos%,planes%)
  5510. startpos%-=pos%
  5511. Object_checksize(ObjectItem%,pos%,datalen%+100)
  5512. startpos%+=pos%
  5513. planepos%=pos%-4
  5514. pointpos%=pos%-8
  5515. lenpos%=pos%-12
  5516. start%=pos%
  5517. pos%+=((points%+1)*12)
  5518. pos%+=((planes%+1)*16)
  5519. Wwrd(pos%,p1%)
  5520. Wwrd(pos%,p2%)
  5521. Wwrd(pos%,p3%)
  5522. Wwrd(pos%,p4%)
  5523. !planepos%=planes%+1
  5524. !lenpos%=!lenpos%+16
  5525. "start%=
  5526. Object_FindStart(obj%)
  5527. ObjectItem%!start%+=16
  5528. Obend%+=16
  5529. Changed%
  5530. Changed%=
  5531. Window_UpdateTitle
  5532. Object_MeshAddPoint(obj%,
  5533. itm%,x%,y%,z%,
  5534. pos%,datalen%,points%,planes%,pointpos%,lenpos%,loop%,start%
  5535. Object_toend(obj%)
  5536. Object_itemtoend(obj%,itm%)
  5537. 0pos%=
  5538. Object_FindItem(obj%,itm%)+ObjectItem%
  5539. pos%+=40
  5540. Rwrd(pos%,datalen%)
  5541. Rwrd(pos%,points%)
  5542. Rwrd(pos%,planes%)
  5543. Object_checksize(ObjectItem%,pos%,datalen%+100)
  5544. pointpos%=pos%-8
  5545. lenpos%=pos%-12
  5546. pos%+=((points%+1)*12)
  5547. planes%<>-1
  5548. loop%=(planes%+1)*16+pos%
  5549. loop%!12=!loop%
  5550. loop%
  5551. Display_PointBackTrans(obj%,itm%,x%,y%,z%)
  5552. Wxyz(pos%,x%,y%,z%)
  5553. pt%=points%+1
  5554. !pointpos%+=1
  5555. !lenpos%+=12
  5556. 9start%=
  5557. Object_FindStart(obj%):ObjectItem%!start%+=12
  5558. Obend%+=12
  5559. Changed%
  5560. Changed%=
  5561. Window_UpdateTitle
  5562. Object_MeshAddQuadC(obj%,
  5563. itm%,x1%,y1%,z1%,x2%,y2%,z2%,x3%,y3%,z3%,x4%,y4%,z4%)
  5564. xyz%(),acc%,sizeinc%,l1%,l2%,pos%,loop%
  5565. xyz%(3,3)
  5566. :xyz%(0,0)=x1%:xyz%(0,1)=y1%:xyz%(0,2)=z1%:xyz%(0,3)=-1
  5567. :xyz%(1,0)=x2%:xyz%(1,1)=y2%:xyz%(1,2)=z2%:xyz%(1,3)=-1
  5568. :xyz%(2,0)=x3%:xyz%(2,1)=y3%:xyz%(2,2)=z3%:xyz%(2,3)=-1
  5569. :xyz%(3,0)=x4%:xyz%(3,1)=y4%:xyz%(3,2)=z4%:xyz%(3,3)=-1
  5570. MeshAccuracy%=2:sizeinc%=0
  5571. Object_toend(obj%)
  5572. Object_itemtoend(obj%,itm%)
  5573. 0pos%=
  5574. Object_FindItem(obj%,itm%)+ObjectItem%
  5575. pos%+=4
  5576. Rxyz(pos%,x%,y%,z%)
  5577. pos%+=24
  5578. Rwrd(pos%,datalen%)
  5579. startpos%=pos%
  5580. Rwrd(pos%,points%)
  5581. Rwrd(pos%,planes%)
  5582. startpos%-=pos%
  5583. Object_checksize(ObjectItem%,pos%,datalen%+100)
  5584. startpos%+=pos%
  5585. planepos%=pos%-4
  5586. pointpos%=pos%-8
  5587. lenpos%=pos%-12
  5588. start%=pos%
  5589. need%=4
  5590. points%<>-1
  5591. l1%=0
  5592. points%
  5593. Rxyz(pos%,xp%,yp%,zp%)
  5594. Display_PointTrans(obj%,itm%,xp%,yp%,zp%)
  5595. l2%=0
  5596. (xyz%(l2%,0)-xp%)<MeshAccuracy%
  5597. (xyz%(l2%,1)-yp%)<MeshAccuracy%
  5598. (xyz%(l2%,2)-zp%)<MeshAccuracy%
  5599.  xyz%(l2%,3)=-1
  5600. xyz%(l2%,3)=l1%:need%-=1
  5601. sizeinc%=need%*12+16
  5602. need%>0
  5603.  planes%<>-1
  5604. loop%=(planes%+1)*16+pos%
  5605. !(loop%+(need%*12))=!loop%
  5606. l1%=0
  5607. num%=xyz%(l1%,3)
  5608. num%=-1
  5609. 3xp%=xyz%(l1%,0):yp%=xyz%(l1%,1):zp%=xyz%(l1%,2)
  5610. Display_PointBackTrans(obj%,itm%,xp%,yp%,zp%)
  5611. Wxyz(pos%,xp%,yp%,zp%)
  5612. points%+=1
  5613. xyz%(l1%,3)=points%
  5614. -pos%=start%+(points%+1)*12+(planes%+1)*16
  5615. l1%=0
  5616. Wwrd(pos%,xyz%(l1%,3))
  5617. planes%+=1
  5618. !planepos%=planes%
  5619. !pointpos%=points%
  5620. !lenpos%=pos%-startpos%
  5621. "start%=
  5622. Object_FindStart(obj%)
  5623. 0ObjectItem%!start%=pos%-(ObjectItem%+start%)
  5624. Obend%=pos%-ObjectItem%
  5625. Changed%
  5626. Changed%=
  5627. Window_UpdateTitle
  5628. Object_TidyMesh(obj%,
  5629. itm%,
  5630. refpoint%)
  5631. pt%(),pos%,points%,planes%,pointpos%,lenpos%,start%,l%,s%,pt%
  5632. Object_toend(obj%)
  5633. Object_itemtoend(obj%,itm%)
  5634. 0pos%=
  5635. Object_FindItem(obj%,itm%)+ObjectItem%
  5636. pos%+=44
  5637. Rwrd(pos%,points%)
  5638. Rwrd(pos%,planes%)
  5639. pointpos%=pos%-8
  5640. lenpos%=pos%-12
  5641. start%=pos%
  5642. pos%=start%+(points%+1)*12
  5643. pt%(points%,1)
  5644. ((planes%+1)*16-4)
  5645. pt%(pos%!l%,0)+=1
  5646. pt%(pos%!l%,1)=0
  5647. pt%=0
  5648. points%
  5649. pt%(pt%,0)=0
  5650. pt%<points%
  5651. l%=pt%+pt%(pt%,1)
  5652. points%-1
  5653. .,!(start%+(l%*12)+0)=!(start%+(l%*12)+12)
  5654. /,!(start%+(l%*12)+4)=!(start%+(l%*12)+16)
  5655. 0,!(start%+(l%*12)+8)=!(start%+(l%*12)+20)
  5656. pt%(l%+1,1)-=1
  5657. 4    s%+=1
  5658. pos%=start%+(points%+1)*12
  5659. ((planes%+1)*16-4)
  5660. 9+!(pos%+l%-s%*12)=pos%!l%+pt%(pos%!l%,1)
  5661. !pointpos%-=s%
  5662. !lenpos%-=s%*12
  5663. ="start%=
  5664. Object_FindStart(obj%)
  5665. ObjectItem%!start%-=s%*12
  5666. Obend%-=s%*12
  5667. pt%(refpoint%,0)<>0
  5668. refpoint%+=pt%(refpoint%,1)
  5669. refpoint%>points%-s%
  5670. refpoint%=points%-s%
  5671. Object_CloneItem(obj%,itm%,xo%,yo%,zo%)
  5672. pos%,loop%
  5673. Object_toend(obj%)
  5674. I0pos%=
  5675. Object_FindItem(obj%,itm%)+ObjectItem%
  5676. len%=pos%!40+44
  5677. Object_checksize(ObjectItem%,pos%,Obend%+len%)
  5678. itm2%=-1
  5679. M3newpos%=
  5680. Object_NewItem(obj%,itm2%)+ObjectItem%
  5681. loop%=0
  5682. newpos%!loop%=pos%!loop%
  5683. Q"start%=
  5684. Object_FindStart(obj%)
  5685. ObjectItem%!start%+=len%
  5686. Obend%+=len%
  5687. newpos%!4+=xo%
  5688. newpos%!8+=yo%
  5689. newpos%!12+=zo%
  5690. =itm2%
  5691. Object_CopyItem(obj%,itm%)
  5692. pos%,loop%
  5693. Object_toend(obj%)
  5694. itm%>-1
  5695. \0pos%=
  5696. Object_FindItem(obj%,itm%)+ObjectItem%
  5697. ]5CopyBuf%=
  5698. Heap_ExtendBlock(CopyBuf%,pos%!40+44+8)
  5699. !CopyBuf%=1
  5700. CopyBuf%!4=pos%!40+44
  5701. loop%=0
  5702. pos%!40+44
  5703. a!CopyBuf%!(loop%+8)=pos%!loop%
  5704. sat%=0:bufsize%=12
  5705. e+CopyBuf%=
  5706. Heap_ExtendBlock(CopyBuf%,12)
  5707. !CopyBuf%=0
  5708. CopyBuf%!4=0
  5709. sat%<SelectPos%
  5710. item%=SelectList%!sat%
  5711. sat%+=4
  5712. k1pos%=
  5713. Object_FindItem(obj%,item%)+ObjectItem%
  5714. bufsize%+=pos%!40+48
  5715. m1CopyBuf%=
  5716. Heap_ExtendBlock(CopyBuf%,bufsize%)
  5717. !CopyBuf%+=1
  5718. o start%=CopyBuf%!4+8+CopyBuf%
  5719. loop%=0
  5720. pos%!40+44
  5721. start%+loop%-CopyBuf%>=bufsize%
  5722. Wimp_Naughty("Serious Error : Copy Buffer Overwritten")
  5723. start%!loop%=pos%!loop%
  5724. CopyBuf%!4+=pos%!40+44
  5725. Object_DeleteItem(obj%,itm%)
  5726. sat%,item%,sat2%
  5727. Object_toend(obj%)
  5728. itm%<>-2
  5729. Object_DeleteOneItem(obj%,itm%)
  5730. sat%=0
  5731. sat%<SelectPos%
  5732. item%=SelectList%!sat%
  5733. sat%+=4
  5734. item%>=0
  5735. Object_DeleteOneItem(obj%,item%)
  5736. sat2%=sat%
  5737. sat2%<SelectPos%
  5738. SelectList%!sat2%>item%
  5739. SelectList%!sat2%-=1
  5740. sat2%+=4
  5741. Selected%=-1
  5742. Object_DeleteOneItem(obj%,itm%)
  5743. 0pos%=
  5744. Object_FindItem(obj%,itm%)+ObjectItem%
  5745. len%=pos%!40+44
  5746. loop%=pos%
  5747. ObjectItem%+Obend%
  5748. !loop%=loop%!len%
  5749. ObjectList%?(obj%*16+4)-=1
  5750. pos%-=ObjectItem%
  5751. loop%=0
  5752. Objects%
  5753. ObjectList%!(obj%*16)>pos%
  5754. ObjectList%!(obj%*16)-=len%
  5755. loop%
  5756. Obend%-=len%
  5757. "start%=
  5758. Object_FindStart(obj%)
  5759. ObjectItem%!start%-=len%
  5760. Changed%Changed%=
  5761. Window_UpdateTitle
  5762. Selected%>=ObjectList%?(obj%*16+4)
  5763. Selected%=ObjectList%?(obj%*16+4)-1
  5764. Selected%<0 Selected%=-1
  5765. Object_LooseCopiedItem
  5766. Heap_FreeBlock(CopyBuf%)
  5767. Object_PasteItem(obj%,
  5768. itm%,xo%,yo%,zo%)
  5769. loop%,pos%,start%,return%
  5770. CopyBuf%=-1
  5771. Error 17,"Copy Buffer is empty"
  5772. return%=itm%
  5773. /pos%=
  5774. Object_NewItem(obj%,itm%)+ObjectItem%
  5775. return%=-2
  5776. !CopyBuf%>1
  5777. SelectPos%=0
  5778. loop%=itm%
  5779. itm%+!CopyBuf%-1
  5780.  SelectList%!SelectPos%=loop%
  5781. SelectPos%+=4
  5782. return%=itm%
  5783. (ObjectList%?(obj%*16+4)+=!CopyBuf%-1
  5784. Object_checksize(ObjectItem%,pos%,CopyBuf%!4+8)
  5785. loop%=0
  5786. CopyBuf%!4+4
  5787. !pos%!loop%=CopyBuf%!(loop%+8)
  5788. loop%
  5789. "start%=
  5790. Object_FindStart(obj%)
  5791. 4ObjectItem%!start%=pos%+loop%-start%-ObjectItem%
  5792. Obend%+=CopyBuf%!4
  5793. loop%=0
  5794. !CopyBuf%-1
  5795. 6pos%=
  5796. Object_FindItem(obj%,itm%+loop%)+ObjectItem%
  5797. pos%!4+=xo%
  5798. pos%!8+=yo%
  5799. pos%!12+=zo%
  5800. Changed%
  5801. Changed%=
  5802. Window_UpdateTitle
  5803. itm%=return%
  5804. Object_TransformPoint(
  5805. Xyz%!0,
  5806. Xyz%!4,
  5807. Xyz%!8,matrix%)
  5808. A%=matrix%
  5809. B%=Xyz%
  5810. CodeSpace%
  5811. Object_TransformBuild(matrix%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz)
  5812. b%=Localblock%
  5813. 5b%!0=matrix%:b%!4=x%<<16:b%!8=y%<<16:b%!12=z%<<16
  5814. Eb%!16=(
  5815. rx%)*(1<<15):b%!20=(
  5816. ry%)*(1<<15):b%!24=(
  5817. rz%)*(1<<15)
  5818. Eb%!28=(
  5819. rx%)*(1<<15):b%!32=(
  5820. ry%)*(1<<15):b%!36=(
  5821. rz%)*(1<<15)
  5822. 3b%!40=sx*(1<<8):b%!44=sy*(1<<8):b%!48=sz*(1<<8)
  5823.     A%=b%
  5824. CodeSpace%+4
  5825. Object_Transform(obj%,itm%,matrix%)
  5826. pos%,type%
  5827. 2pos%=
  5828. Object_UpdateItem(obj%,itm%)+ObjectItem%
  5829. type%=?pos%
  5830. type%
  5831. Object_TransformPlane(pos%+44,matrix%)
  5832. 2,8,9,10,11:
  5833. Object_TransformMatrix(pos%+44,matrix%)
  5834. Object_TransformObject(pos%+44,matrix%)
  5835. Object_TransformMesh(pos%+44,matrix%)
  5836. Changed%
  5837. Changed%=
  5838. Window_UpdateTitle
  5839. Object_TransformPlane(start%,matrix%)
  5840. loop%=0
  5841. Rxyz(start%,Xyz%!0,Xyz%!4,Xyz%!8):start%-=12
  5842. A%=matrix%
  5843. B%=Xyz%
  5844. CodeSpace%
  5845. Wxyz(start%,Xyz%!0,Xyz%!4,Xyz%!8)
  5846. Object_TransformMatrix(start%,matrix%)
  5847. xsize%,ysize%
  5848. Rwrd(start%,xsize%)
  5849. Rwrd(start%,ysize%)
  5850. ly%=0
  5851. ysize%
  5852. lx%=0
  5853. xsize%
  5854. Rxyz(start%,Xyz%!0,Xyz%!4,Xyz%!8):start%-=12
  5855. A%=matrix%
  5856. B%=Xyz%
  5857. CodeSpace%
  5858. Wxyz(start%,Xyz%!0,Xyz%!4,Xyz%!8)
  5859. Object_TransformObject(start%,matrix%)
  5860. obj%,itm%,type%,pos%
  5861. obj%=!start%
  5862. itm%=0
  5863. ObjectList%?(obj%*16+4)
  5864. 2pos%=
  5865. Object_UpdateItem(obj%,itm%)+ObjectItem%
  5866. ?pos%
  5867. Object_TransformPlane(pos%+44,matrix%)
  5868. 2,8,9,10,11:
  5869. Object_TransfromMatrix(pos%+44,matrix%)
  5870. Object_TransformObject(pos%+44,matrix%)
  5871. Object_TransformLamp(pos%+44,matrix%)
  5872. Object_TransformMesh(pos%+44,matrix%)
  5873. Object_TransformMesh(start%,matrix%)
  5874. points%
  5875. Rwrd(start%,points%):start%+=4
  5876. loop%=0
  5877. points%
  5878. Rxyz(start%,Xyz%!0,Xyz%!4,Xyz%!8):start%-=12
  5879. A%=matrix%
  5880. B%=Xyz%
  5881. CodeSpace%
  5882. Wxyz(start%,Xyz%!0,Xyz%!4,Xyz%!8)
  5883. Object_ApplyMany(sel%)
  5884. sel%>-1
  5885. Object_Apply(CurrentObj%,sel%)
  5886. sat%=0
  5887. sat%<SelectPos%
  5888. item%=SelectList%!sat%
  5889. sat%+=4
  5890. Object_Apply(CurrentObj%,item%)
  5891. Object_Apply(obj%,itm%)
  5892. 2pos%=
  5893. Object_UpdateItem(obj%,itm%)+ObjectItem%
  5894. pos%+=4
  5895. Rxyz(pos%,x%,y%,z%):pos%-=12
  5896. Wxyz(pos%,0,0,0)
  5897. Rxyz(pos%,rx%,ry%,rz%):pos%-=12
  5898. Wxyz(pos%,0,0,0)
  5899. Rxyz(pos%,sx%,sy%,sz%):pos%-=12
  5900. Wxyz(pos%,1000,1000,1000)
  5901. b%=Localblock%
  5902. '@b%!0=TranslationMatrix%:b%!4=x%<<16:b%!8=y%<<16:b%!12=z%<<16
  5903. (Eb%!16=(
  5904. rx%)*(1<<15):b%!20=(
  5905. ry%)*(1<<15):b%!24=(
  5906. rz%)*(1<<15)
  5907. )Eb%!28=(
  5908. rx%)*(1<<15):b%!32=(
  5909. ry%)*(1<<15):b%!36=(
  5910. rz%)*(1<<15)
  5911. *Eb%!40=sx%/1000*(1<<8):b%!44=sy%/1000*(1<<8):b%!48=sz%/1000*(1<<8)
  5912. +    A%=b%
  5913. CodeSpace%+4
  5914. Object_Transform(obj%,itm%,TranslationMatrix%)
  5915. Object_MatrixApply(obj%,itm%)
  5916. loop%,x%,y%,z%,x1%,y1%,z1%,rx%,ry%,rz%,sx%,sy%,sz%,pos%
  5917. 12pos%=
  5918. Object_UpdateItem(obj%,itm%)+ObjectItem%
  5919. pos%+=4
  5920. Rxyz(pos%,x%,y%,z%):pos%-=12
  5921. Wxyz(pos%,0,0,0)
  5922. Rxyz(pos%,rx%,ry%,rz%):pos%-=12
  5923. Wxyz(pos%,0,0,0)
  5924. Rxyz(pos%,sx%,sy%,sz%):pos%-=12
  5925. Wxyz(pos%,1000,1000,1000)
  5926. pos%+=4
  5927. Rwrd(pos%,xsize%)
  5928. Rwrd(pos%,ysize%)
  5929. ly%=0
  5930. ysize%
  5931. lx%=0
  5932. xsize%
  5933. Rxyz(pos%,x1%,y1%,z1%):pos%-=12
  5934. Display_Trans(x1%,y1%,z1%,x%,y%,z%,rx%,ry%,rz%,sx%/1000,sy%/1000,sz%/1000)
  5935. Wxyz(pos%,x1%,y1%,z1%)
  5936. Changed%
  5937. Changed%=
  5938. Window_UpdateTitle
  5939. Object_PlaneApply(obj%,itm%)
  5940. loop%,x%,y%,z%,x1%,y1%,z1%,rx%,ry%,rz%,sx%,sy%,sz%,pos%
  5941. G2pos%=
  5942. Object_UpdateItem(obj%,itm%)+ObjectItem%
  5943. pos%+=4
  5944. Rxyz(pos%,x%,y%,z%):pos%-=12
  5945. Wxyz(pos%,0,0,0)
  5946. Rxyz(pos%,rx%,ry%,rz%):pos%-=12
  5947. Wxyz(pos%,0,0,0)
  5948. Rxyz(pos%,sx%,sy%,sz%):pos%-=12
  5949. Wxyz(pos%,1000,1000,1000)
  5950. pos%+=4
  5951. Wxyz(pos%,x%,y%,z%)
  5952. loop%=1
  5953. Rxyz(pos%,x1%,y1%,z1%):pos%-=12
  5954. Display_Trans(x1%,y1%,z1%,x%,y%,z%,rx%,ry%,rz%,sx%/1000,sy%/1000,sz%/1000)
  5955. Wxyz(pos%,x1%,y1%,z1%)
  5956. loop%
  5957. Changed%
  5958. Changed%=
  5959. Window_UpdateTitle
  5960. Object_ObjectApply(applyobj%,applyitm%)
  5961. itm%,data%
  5962. Z=data%=
  5963. Object_UpdateItem(applyobj%,applyitm%)+ObjectItem%
  5964. obj%=data%!44
  5965. itm%=0
  5966. ObjectList%?(obj%*16+4)
  5967. ]1data%=
  5968. Object_FindItem(obj%,itm%)+ObjectItem%
  5969. ?data%
  5970. Object_PlaneApply(obj%,itm%)
  5971. Object_MatrixApply(obj%,itm%)
  5972. Changed%
  5973. Changed%=
  5974. Window_UpdateTitle
  5975. Object_StartExport(name$,filetype%,export%)
  5976. task%,num%
  5977. "Hourglass_On"
  5978. task%=Export%(export%,0)
  5979. num%=Export%(export%,1)
  5980. Module_call(task%,"startexport(name$,num%)")
  5981. Module_call(task%,"exportobserver(Viewer_Xpos%,Viewer_Ypos%,Viewer_Zpos%,num%)")
  5982. Object_ExportObject(0,0,0,0,0,0,0,0,1,1,1,0,task%,num%)
  5983. Module_call(task%,"finishexport(name$,num%)")
  5984. "OS_File",18,name$,filetype%
  5985. "Hourglass_Off"
  5986. Object_ExportObject(obj%,col%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,depth%,task%,num%)
  5987. start%,len%,p%,x1%,y1%,z1%,rx1%,ry1%,rz1%,sx1,sy1,sz1,item%
  5988. Module_call(task%,"startobject(FNObject_ReadName(obj%),num%)")
  5989. t,start%=ObjectList%!(obj%*16)+ObjectItem%
  5990. len%=!start%
  5991. item%=1
  5992. ObjectList%?(obj%*16+4)
  5993. type%=?(start%+p%)
  5994. p%+=start%
  5995. cout%=col%
  5996. {#c%=p%?1:
  5997. c%<LastColour%cout%=c%
  5998. |(x1%=x%+p%!4:y1%=y%+p%!8:z1%=z%+p%!12
  5999. }0rx1%=rx%+p%!16:ry1%=ry%+p%!20:rz1%=rz%+p%!24
  6000. ~9sx1=sx*p%!28/1000:sy1=sy*p%!32/1000:sz1=sz*p%!36/1000
  6001. start%=p%+44
  6002. type%
  6003. Module_call(task%,"exportplane(start%,cout%,x1%,y1%,z1%,rx1%,ry1%,rz1%,sx1,sy1,sz1,num%)"):p%+=44+p%!40
  6004. 2,8,9,10,11:
  6005. Module_call(task%,"exportmatrix(start%,cout%,x1%,y1%,z1%,rx1%,ry1%,rz1%,sx1,sy1,sz1,num%)"):p%+=44+p%!40
  6006. Object_ExportObject(!start%,cout%,x1%,y1%,z1%,rx1%,ry1%,rz1%,sx1,sy1,sz1,depth%+1,task%,num%):p%+=44+p%!40
  6007. Module_call(task%,"exportlamp(start%,x1%,y1%,z1%,num%)"):p%+=44+p%!40
  6008. Module_call(task%,"exportmesh(start%,cout%,x1%,y1%,z1%,rx1%,ry1%,rz1%,sx1,sy1,sz1,num%)"):p%+=44+p%!40
  6009. p%+=44+p%!40
  6010. p%-=start%
  6011. Module_call(task%,"endobject(num%)")
  6012. Object_NewColour(name$,diffr%,diffg%,diffb%,tranr%,trang%,tranb%,specr%,specg%,specb%,mirrr%,mirrg%,mirrb%,index,spec,flags%)
  6013. Object_StoreColour("",name$,diffr%,diffg%,diffb%,tranr%,trang%,tranb%,specr%,specg%,specb%,mirrr%,mirrg%,mirrb%,index,spec,flags%)
  6014. Object_DeleteColour(name$)
  6015. loop%,loop2%,store%
  6016. loop%<LastColour%
  6017. $((loop%*ColDataLen%)+ObjectColour%)<>name$
  6018. loop%+=1
  6019. loop%=LastColour%
  6020. 17,"The colour "+name$+" does not exist"
  6021. ,store%=(loop%*ColDataLen%)+ObjectColour%
  6022. $store%=""
  6023. loop2%=LastColour%
  6024. loop2%>=0
  6025. $((loop2%*ColDataLen%)+ObjectColour%)=""
  6026. loop2%-=1
  6027. LastColour%=loop2%+1
  6028. Object_StoreColour(name$,newname$,diffr%,diffg%,diffb%,tranr%,trang%,tranb%,specr%,specg%,specb%,mirrr%,mirrg%,mirrb%,index,spec,flags%)
  6029. loop%,store%
  6030. loop%=0
  6031. loop%<LastColour%
  6032. $((loop%*ColDataLen%)+ObjectColour%)<>name$
  6033. loop%+=1
  6034. loop%=LastColour%
  6035.  name$<>""
  6036. 17,"The colour "+name$+" does not exist"
  6037. loop%=LastColour%LastColour%+=1
  6038. ,store%=(loop%*ColDataLen%)+ObjectColour%
  6039. $store%=
  6040. newname$,19)
  6041. store%?20=diffr%
  6042. store%?21=diffg%
  6043. store%?22=diffb%
  6044. store%?23=tranr%
  6045. store%?24=trang%
  6046. store%?25=tranb%
  6047. store%?26=specr%
  6048. store%?27=specg%
  6049. store%?28=specb%
  6050. store%?29=mirrr%
  6051. store%?30=mirrg%
  6052. store%?31=mirrb%
  6053. store%!32=index*1000
  6054. store%!36=spec*1000
  6055. store%!40=flags%
  6056. l%=44
  6057. store%!l%=0
  6058. Changed%
  6059. Changed%=
  6060. Window_UpdateTitle
  6061. Object_BuildColourTable
  6062. loop%,s%
  6063. ObjectColour%<>-1
  6064.  ObjectColTab%<>-1
  6065. loop%=0
  6066. loop%<LastColour%
  6067. (s%=(loop%*ColDataLen%)+ObjectColour%
  6068. $s%<>""
  6069. Cpalnum=s%?22*&100000/100*15+s%?21*&1000/100*15+s%?20*&10/100*15
  6070. palnum+=palnum/16
  6071. "ColourTrans_ReturnColourNumber",palnum<<8
  6072. gcol%
  6073. !ObjectColTab%!(loop%*4)=gcol%
  6074. loop%+=1
  6075. l2%=loop%
  6076. ObjectColTab%!(l2%*4)=-1
  6077. Object_GetColour(
  6078. name$,
  6079. index,
  6080. spec,
  6081. flags%)
  6082. loop%,s%
  6083. loop%=0
  6084. loop%<LastColour%
  6085. $((loop%*ColDataLen%)+ObjectColour%)<>name$
  6086.  name$<>"None"
  6087. loop%+=1
  6088. name$="None"
  6089. name$=$ObjectColour%
  6090. loop%=LastColour%
  6091. 17,"The colour "+name$+" does not exist"
  6092. (s%=(loop%*ColDataLen%)+ObjectColour%
  6093. dr%=s%?20
  6094. dg%=s%?21
  6095. db%=s%?22
  6096. tr%=s%?23
  6097. tg%=s%?24
  6098. tb%=s%?25
  6099. sr%=s%?26
  6100. sg%=s%?27
  6101. sb%=s%?28
  6102. mr%=s%?29
  6103. mg%=s%?30
  6104. mb%=s%?31
  6105. index=s%!32/1000
  6106. spec=s%!36/1000
  6107. flags%=s%!40
  6108. Object_AssignColour(name$,obj%,itm%)
  6109. loop%,sat%
  6110. itm%<>-2
  6111. SelectPos%=4
  6112. name$<>"None"
  6113. loop%=0
  6114. loop%<LastColour%
  6115. $((loop%*ColDataLen%)+ObjectColour%)<>name$
  6116. loop%+=1
  6117. loop%=LastColour%
  6118. 17,"The colour "+name$+" does not exist"
  6119. loop%=-1
  6120. sat%=0
  6121. col%=loop%
  6122. itm%<>-1
  6123.  sat%<SelectPos%
  6124. itm%<>-2
  6125. item%=itm%
  6126. item%=SelectList%!sat%
  6127. sat%+=4
  6128. 1pos%=
  6129. Object_FindItem(obj%,item%)+ObjectItem%
  6130. pos%?1=col%
  6131. Display_RedrawItem(obj%,item%)
  6132. Display_UpdateItem(item%)
  6133. itm%<>-2
  6134. itm%=-1
  6135. Object_WhichColour(obj%,itm%)
  6136. 0pos%=
  6137. Object_FindItem(obj%,itm%)+ObjectItem%
  6138. col%=pos%?1
  6139. col%>30 colname$="None"
  6140. colname$=$((col%*ColDataLen%)+ObjectColour%)
  6141. =colname$
  6142. Object_ReadColName(colnum%)
  6143. +=$((colnum%*ColDataLen%)+ObjectColour%)
  6144. Object_Selected(itm%)
  6145. reply%,pos%
  6146. reply%=
  6147. Selected%
  6148. pos%=0
  6149. pos%<SelectPos%
  6150.  SelectList%!pos%<>itm%
  6151. pos%+=4
  6152. "reply%=(SelectList%!pos%=itm%)
  6153. reply%=
  6154. reply%=
  6155. =reply%
  6156. Object_SelectAdd(itm%)
  6157. Object_Selected(itm%)
  6158.  itm%<>-1
  6159. Selected%>-1
  6160. SelectPos%=0
  6161. $SelectList%!SelectPos%=Selected%
  6162. SelectPos%+=4
  6163. Selected%=-1
  6164. Selected%=itm%
  6165. SelectList%!SelectPos%=itm%
  6166. SelectPos%+=4
  6167. Selected%=-2
  6168. Display_UpdateItem(itm%)
  6169. Object_SelectRemove(itm%)
  6170. pos%,loop%
  6171. Selected%=-2
  6172. pos%=0
  6173. pos%<SelectPos%
  6174.  SelectList%!pos%<>itm%
  6175. pos%+=4
  6176. SelectList%!pos%=itm%
  6177. loop%=pos%
  6178. SelectPos%-4
  6179. 5+SelectList%!loop%=SelectList%!(loop%+4)
  6180. SelectPos%-=4
  6181. SelectPos%=4
  6182. Selected%=!SelectList%
  6183. SelectPos%=0
  6184. Selected%=-1
  6185. Selected%=itm%Selected%=-1
  6186. Display_UpdateItem(itm%)
  6187. Object_SelectAll
  6188. loop%,items%
  6189. B+items%=ObjectList%?(CurrentObj%*16+4)-1
  6190. items%=-1
  6191. Selected%=-1
  6192. items%=0
  6193. Selected%=0
  6194. items%>0
  6195. Selected%=-2
  6196. SelectPos%=0
  6197. loop%=0
  6198. items%
  6199. I SelectList%!SelectPos%=loop%
  6200. SelectPos%+=4
  6201. loop%
  6202. Display_Update
  6203. Object_ClearSelection
  6204. pos%,itm%
  6205. Selected%=-2
  6206. Selected%=-1
  6207. Display_UpdateItems(SelectList%,SelectPos%)
  6208. SelectPos%=0
  6209. Selected%>-1
  6210. itm%=Selected%
  6211. Selected%=-1
  6212. Display_UpdateItem(itm%)
  6213. Drag_Items(win%,num%)
  6214. Selected%=-2
  6215. _!DragTask%=
  6216. Window_owner(win%)
  6217. DragType%=5
  6218. DragSubType%=num%
  6219. minx%=&100000:miny%=&100000
  6220. maxx%=0:maxy%=0
  6221. sat%=0
  6222. sat%<SelectPos%
  6223. item%=SelectList%!sat%
  6224. g#t%=!(DisplayBounds%+item%*16+0)
  6225. t%<minx%minx%=t%
  6226. i#t%=!(DisplayBounds%+item%*16+4)
  6227. t%<miny%miny%=t%
  6228. k#t%=!(DisplayBounds%+item%*16+8)
  6229. t%>maxx%maxx%=t%
  6230. m$t%=!(DisplayBounds%+item%*16+12)
  6231. t%>maxy%maxy%=t%
  6232. sat%+=4
  6233. Display_BlankItem(item%)
  6234. Window_ReadState(CurrentMain%)
  6235. Display_ReadMain(CurrentMain%)
  6236. xoff%=X1%-X3%+CentreX
  6237. u0yoff%=Y2%-Y3%-MainYWidth%*Scale%/100+CentreY
  6238. v minx%=minx%*Scale%/100+xoff%
  6239. w miny%=miny%*Scale%/100+yoff%
  6240. x maxx%=maxx%*Scale%/100+xoff%
  6241. y maxy%=maxy%*Scale%/100+yoff%
  6242. StartX%=minx%:StartY%=miny%
  6243. b%=Localblock%
  6244. b%!0=-1
  6245. b%!4=5
  6246. b%!8=minx%
  6247. b%!12=miny%
  6248. b%!16=maxx%
  6249. b%!20=maxy%
  6250. b%!24=-10000
  6251. b%!28=-10000
  6252. b%!32=10000
  6253. b%!36=10000
  6254. "Wimp_DragBox",,b%
  6255. Wimp_NewPointer("ptr_drag",7,7)
  6256. Drag_Item(item%,win%,num%,x%,y%,z%)
  6257. b%,xoff%,yoff%
  6258. !DragTask%=
  6259. Window_owner(win%)
  6260. DragType%=1
  6261. DragSubType%=num%
  6262. DragItemX%=x%
  6263. DragItemY%=y%
  6264. DragItemZ%=z%
  6265. Display_BlankItem(item%)
  6266. Window_ReadState(CurrentMain%)
  6267. Display_ReadMain(CurrentMain%)
  6268. xoff%=X1%-X3%+CentreX
  6269. 0yoff%=Y2%-Y3%-MainYWidth%*Scale%/100+CentreY
  6270. 7minx%=!(DisplayBounds%+item%*16+0)*Scale%/100+xoff%
  6271. 7miny%=!(DisplayBounds%+item%*16+4)*Scale%/100+yoff%
  6272. 7maxx%=!(DisplayBounds%+item%*16+8)*Scale%/100+xoff%
  6273. 8maxy%=!(DisplayBounds%+item%*16+12)*Scale%/100+yoff%
  6274. StartX%=minx%
  6275. StartY%=miny%
  6276. b%=Localblock%
  6277. "Wimp_GetPointerInfo",,b%
  6278. DragPtrX%=b%!0
  6279. DragPtrY%=b%!4
  6280. DragOldX%=-10000
  6281. DragOldY%=-10000
  6282. DragUpto%=-1
  6283. b%!0=-1
  6284. b%!4=5
  6285. b%!8=minx%
  6286. b%!12=miny%
  6287. b%!16=maxx%
  6288. b%!20=maxy%
  6289. b%!24=-10000
  6290. b%!28=-10000
  6291. b%!32=10000
  6292. b%!36=10000
  6293. Wimp_NewPointer("ptr_drag",7,7)
  6294. "Wimp_DragBox",,b%
  6295. Drag_StartLines
  6296. DragPointer%=DragSpace%
  6297. Drag_Move(x%,y%)
  6298. !DragPointer%=0
  6299. DragPointer%!4=x%
  6300. DragPointer%!8=y%
  6301. DragPointer%+=12
  6302. Drag_Draw(x%,y%)
  6303. !DragPointer%=1
  6304. DragPointer%!4=x%
  6305. DragPointer%!8=y%
  6306. DragPointer%+=12
  6307. Drag_Node(x%,y%)
  6308. !DragPointer%=2
  6309. DragPointer%!4=x%
  6310. DragPointer%!8=y%
  6311. DragPointer%+=12
  6312. Drag_Node2(x%,y%)
  6313. !DragPointer%=3
  6314. DragPointer%!4=x%
  6315. DragPointer%!8=y%
  6316. DragPointer%+=12
  6317. Drag_Ready(xat%,yat%,reply%,opt%)
  6318. b%=Localblock%
  6319. !DragPointer%=-1
  6320. DragType%=2
  6321. DragSubType%=reply%
  6322. DragTask%=CurrentTask%
  6323. DragMask%=Mask%
  6324. DragItemX%=xat%
  6325. DragItemY%=yat%
  6326. DragColour%=RedColour%
  6327. DragTint%=RedTint%
  6328. Dragging%=
  6329. DragUpdate%=opt%
  6330. Mask%=Mask%
  6331.     !b%=0
  6332. b%!4=7
  6333. b%!24=0
  6334. b%!28=0
  6335. b%!32=10000
  6336. b%!36=10000
  6337. "Wimp_DragBox",,b%
  6338. Drag_ReadyNew(xat%,yat%,reply%,opt%,col%)
  6339. DragColour%=RedColour%
  6340. DragTint%=RedTint%
  6341. DragColour%=BlackColour%
  6342. DragTint%=BlackTint%
  6343. b%=Localblock%
  6344. !DragPointer%=-1
  6345. DragType%=2
  6346. DragSubType%=reply%
  6347. DragTask%=CurrentTask%
  6348. DragMask%=Mask%
  6349. DragItemX%=xat%
  6350. DragItemY%=yat%
  6351. Dragging%=
  6352. DragUpdate%=opt%
  6353. Mask%=Mask%
  6354.     !b%=0
  6355. b%!4=7
  6356. b%!24=0
  6357. b%!28=0
  6358. b%!32=10000
  6359. b%!36=10000
  6360. "Wimp_DragBox",,b%
  6361. Drag_StartBarDrag(win%,icon%,reply%,opt%)
  6362. b%=Localblock%
  6363. Dragging%=
  6364. DragType%=4
  6365. DragSubType%=reply%
  6366. !DragTask%=
  6367. Window_owner(win%)
  6368. DragUpdate%=opt%
  6369. DragItemX%=win%
  6370. DragItemY%=icon%
  6371. DragMask%=Mask%
  6372. Mask%=Mask%
  6373. Window_ReadState(win%)
  6374. !b%=win%
  6375. b%!4=icon%
  6376. "Wimp_GetIconState",,b%
  6377. b%!24=b%!8+X1%-X3%
  6378. b%!28=b%!12+Y1%-Y3%+Yw%
  6379. b%!32=b%!16+X1%-X3%
  6380. b%!36=b%!20+Y1%-Y3%+Yw%
  6381. b%!0=0
  6382. b%!4=7
  6383. b%!8=0
  6384. b%!12=0
  6385. b%!16=0
  6386. b%!20=0
  6387. "Wimp_DragBox",,b%
  6388. Drag_GetBarVal(win%,icon%)
  6389. b%,num%
  6390. b%=Localblock%
  6391. !b%=win%
  6392. b%!4=icon%
  6393. "Wimp_GetIconState",,b%
  6394. num%=
  6395. $(b%!32),3))
  6396. =DragData%(num%,0)
  6397. Drag_SetBarVal(win%,icon%,val%)
  6398. b%=Localblock%
  6399. !b%=win%
  6400. b%!4=icon%
  6401. "Wimp_GetIconState",,b%
  6402. num%=
  6403. $(b%!32),3))
  6404. DragData%(num%,0)=val%
  6405. b%!4=win%
  6406. "Wimp_UpdateWindow",,b%+4
  6407. more%
  6408. more%
  6409. Wimp_drawdragbar(win%,icon%)
  6410. "Wimp_GetRectangle",,b%+4
  6411. more%
  6412. Drag_SelectItems(x%,y%,reply%)
  6413. b%=Localblock%
  6414. DragTask%=CurrentTask%
  6415. DragType%=6
  6416. DragSubType%=reply%
  6417. DragUpdate%=
  6418. DragItemX%=x%
  6419. DragItemY%=y%
  6420. !b%=win%
  6421. b%!4=6
  6422. b%!8=x%
  6423. b%!12=y%
  6424. b%!16=x%
  6425. b%!20=y%
  6426. b%!24=0
  6427. b%!28=0
  6428. b%!32=10000
  6429. b%!36=10000
  6430. "Wimp_DragBox",,b%
  6431.