Revised 3DEditor Program using Libraries version$="2.16" ProgVersion= (version$) FileVersion=2.04 $+" at line "+ Wimp_initialise Heap_initialise Module_initialise Window_initialise Wimp_startscreen Menu_initialise Tool_initialise Choices_initialise Display_initialise Object_initialise Drag_initialise Module_loaddata Choices_load Menu_end Tool_end Wimp_endstart Wimp_iconbar Object_dostartup Wimp_err(3) Wimp_poll(Mask%) Quit% Wimp_finish StartEditing Object_restart Window_NewMain Tool_Clear Display_restart Display_RedrawAll Wimp_initialise Block%&1000,Errblock%&100,Localblock%&300,Moduleblock%&400 Appname$="!3DEditor" Name$="3D Editor" Errname$=Name$ +)Resource$="<3DEditor$Dir>.Resources." Path$="<3DEditor$Dir>." NiceError%= "Wimp_Initialise",200,&4B534154,Name$ WimpVersion%,Mytask% SysVar("3DEditor$Wimp")="RiscOs2"WimpVersion%=200 SysVar("3DEditor$Wimp")="RiscOs3"WimpVersion%=310 17NewLookLoaded%=( SysVar("3DEditor$Info")="NewLook") Wimp_err(1) Quit%= Mask%=%00000001100000110001 Windowflags%=%1111 Ybox%=-1 From%=-1 Pointer$="" Maxindr%=&6000 Indr%Maxindr% Fonts%255,Fonts2%255 loop%=0 Fonts%?loop%=0 Fonts2%?loop%=0 DragData%(20,2):DragBars%=1 loop%=0 DragData%(loop%,0)=50 ClickIcon%=-1 ClickWin%=-1 OldMode%= ClaimRedraw%=-1 ClaimOpen%=-1 MultiTask%=-1 OldPollTime%=-1 "OS_ReadModeVariable",-1,5 ,,yeig% yeig%=2 SpriteMode$="24" SpriteMode$="22" YResolution%=2^yeig% DragASprite%= "XOS_SWINumberFromString",,"DragASprite_Start" DragASprite%= "OS_Byte",161,28 ,,ok% DragASprite%= Wimp_finish loop% loop%=0 Fonts%?loop%>0 "Font_LoseFont",loop%:Fonts%?loop%-=1: loop% "Wimp_CloseDown",Mytask%,&4B534154 Wimp_err(opt%) b%=Localblock% "Wimp_DragBox",,-1 "Wimp_CreateMenu",,-1 "Hourglass_Smash" *POINTER 1 opt%=1 NiceError% ans%= Wimp_Error(2,"Error from 3DEditor","Sorry, 3DEditor has suffered an error during startup and must exit immediately (code "+ +":"+ +")","Quit","Describe","")+1 ans%=3 ans%= Wimp_Error(1,"Error Description","Fatal internal error : "+ $+" ( code "+ +")","Quit","","")+1 j?ans%= Wimp_Error(1,"Error from 3DEditor", $,"Quit","","")+1 njans%= Wimp_Error(1,"Error from 3DEditor","Fatal internal error - "+ $+" (code "+ +")","Quit","","")+1 p?ans%= Wimp_Error(1,"Error from 3DEditor", $,"Quit","","")+1 describe$="" opt%=3 NiceError% xXerrmess$="The current 3DEditor operation has suffered an error (code "+ +":"+ y5describe$="Internal error - "+ $+" (code "+ errmess$= 4errmess$="Internal error - "+ $+" (code "+ errmess$= describe$="" Kans%= Wimp_Error(2,"Error from 3DEditor",errmess$,"Continue","Quit","") Sans%= Wimp_Error(3,"Error from 3DEditor",errmess$,"Continue","Quit","Describe") ans%=3 dum%= Wimp_Error(1,"Error Description",describe$,"Continue","","") ans%=2 Quit%= Wimp_finish: Wimp_OldPointer(Pointer$) Wimp_normalerr(opt%) "Wimp_DragBox",,0 !Errblock%= err= =$(Errblock%+4)="Internal Error at Line "+ )+" ("+ $+")" "Wimp_ReportError",Errblock%,opt%,Errname$ ,reply% reply%=2 opt%=1 Quit%= Wimp_finish: Errname$=Name$ Wimp_iconbar $b%=Appname$ !Block%=-1 Block%!4=0 Block%!8=0 Block%!12=68 Block%!16=68 &Block%!20=%00000000011000000011010 $(Block%+24)=Appname$ "Wimp_CreateIcon",,Block% Wimp_poll(mask%) (mask% MultiTask%<>-1 "OS_ReadMonotonicTime" newtime% (newtime%-OldPollTime%)<0 OldPollTime%+=100 "Wimp_PollIdle",mask% 1,Block%,OldPollTime% result% result%=0 Module_call(MultiTask%,"multitask") result%=-1 "Wimp_Poll",mask%,Block% result% result% Wimp_null Wimp_redraw(Block%) Wimp_open(Block%) Wimp_close(Block%) Wimp_ptrleaving(Block%) Wimp_ptrentering(Block%) Wimp_mouse(Block%) Wimp_drag(Block%) Wimp_key(Block%) Menu_process(Block%) Wimp_message(Block%) Wimp_message(Block%) Wimp_null MultiTask%<>-1 Module_call(MultiTask%,"multitask") Activewin%<>0 Dragging% Window_activenull Toggled% Tool_togglenull Dragging% DragType%=2 Drag_redraw( Dragging% DragType%=4 Drag_updatebar Wimp_redraw(b%) finish%,hand% "Wimp_RedrawWindow",,b% finish% finish%<>0 hand%= Window_whichmain(!b%) hand%<>-1 Display_wimpred(hand%,b%!28,b%!32,b%!36,b%!40) Wimp_redrawwindow(b%) ClaimRedraw%<>-1 Module_call(ClaimRedraw%,"redraw(b%)") "Wimp_GetRectangle",,b% finish% Wimp_open(b%) !b%>&8000 "Wimp_OpenWindow",,b% "Wimp_GetWindowState",,b% !b%=CurrentMain% (Windowflags% %0011)=%0001 Window_ReadState(ToolHandle%) Window_attachos(b%,ToolHandle%,b%!4-Xw%-2+ToolXpos%,b%!16-Yw%+ToolYpos%,b%!4+ToolXpos%,b%!16+ToolYpos%) (Windowflags% %1100)=%0100 Ybox%<>-1 Window_ReadState(Ybox%) Window_attachos(b%,Ybox%,b%!4+YboxXpos%,b%!8-Yw%+YboxYpos%,b%!4+Xw%+YboxXpos%,b%!8+YboxYpos%) (Windowflags% %0011)=%0011 Window_ReadState(ToolHandle%) Window_attachos(b%,ToolHandle%,b%!4-Xw%-2,b%!16-Yw%,b%!4,b%!16) (Windowflags% %1100)=%1100 Ybox%<>-1 Window_ReadState(Ybox%) Window_attach(b%,Ybox%,b%!4,b%!8-Yw%-42,b%!4+Xw%,b%!8-42) !b%=ToolHandle% CurrentMain%<>-1 Window_ReadState(CurrentMain%) ToolXpos%=b%!12-X1% ToolYpos%=b%!16-Y2% !b%=Ybox% CurrentMain%<>-1 Window_ReadState(CurrentMain%) YboxXpos%=b%!4-X1% YboxYpos%=b%!16-Y1% !b%=ChoiceSurround% ChoicePane%<>-1 Window_attach(b%,ChoicePane%,b%!4+28,b%!8+30,b%!4+682,b%!8+480) ClaimOpen%<>-1 Module_call(ClaimOpen%,"open(b%)") "Wimp_OpenWindow",,b% !b%=CurrentMain% a%=b%+36 (Windowflags% %0011)=%0001 !a%=ToolHandle% "Wimp_GetWindowState",,a% "Wimp_OpenWindow",,a% Ybox%<>-1 (Windowflags% %1100)=%0100 !a%=Ybox% "Wimp_GetWindowState",,a% "Wimp_OpenWindow",,a% Wimp_close(b%) b2%=Localblock% Window_IsMain(!b%) Changed% MainOpen%=1 ans%= Wimp_Error(3,"Warning","This file has not been saved. Are you sure that you want to discard it?","Discard","Save","Cancel") ans%=1 !b%=CurrentMain% Ybox%<>-1 Window_Close(Ybox%) Window_Close(ToolHandle%) CurrentMain%=MainHandle%(1) MainOpen%=1 Ybox%<>-1 Window_Close(Ybox%) Tool_End Window_Close(ToolHandle%) MainOn%= Object_endedit Selected%=-1 Window_RemoveMain(!b%) Icon_UpText(SaveHandle%,1,File$) Icon_UpValid(SaveHandle%,2,"sfile_050") SaveType%=1 FileType%=&050 Window_AsMenu(SaveHandle%) Window_closeactive(!b%) ChoiceSurround% Window_Close(ChoicePane%) "Wimp_CloseWindow",,b% "Wimp_GetCaretPosition",,b2% !b2%=!b% Wimp_LoseCaret "Wimp_CloseWindow",,b% Module_call( Window_owner(!b%),"closed(!b%)") Wimp_mouse(b%) win%,icon%,x%,y%,button% x%=b%!0 y%=b%!4 button%=b%!8 win%=b%!12 icon%=b%!16 Wimp_processmouse(win%,icon%,x%,y%,button%) Wimp_processmouse(win%,icon%,x%,y%,button%) onbar%,b%,altered% block%=Errblock% onbar%=-2 altered%= win%>0 icon%>0 button%<>%010 J>block%!0=win%:block%!4=icon%: "Wimp_GetIconState",,block% K+block%!4=win%:block%!16+=4:block%!20+=8 (block%!24 1)<>0 "Wimp_UpdateWindow",,block%+4 more% more% xcon%=block%!8-block%!24 ycon%=block%!20-block%!28 QAaltered%= Wimp_clickicon(win%,icon%,Errblock%+40,xcon%,ycon%) "Wimp_GetRectangle",,block%+4 more% altered% x%,y%,but% but%=0 Window_IsMain(win%) Wimp_clickmain(win%,x%,y%,button%) onbar%: Wimp_clickonbar(button%) ToolHandle%: Window_dragwin(win%,icon%,button%): Tool_click(icon%,button%) CoordHandle%: Wimp_clickcoords(icon%) SaveHandle%: Wimp_clicksave(icon%) MainChoices%: Wimp_clickchoice1(icon%) InfoHandle%: Wimp_clickinfo(icon%) ChoiceSurround%: Wimp_clickchoice2(icon%) MainChoicePane%: Wimp_clickchoice3(icon%) GridControl%: Wimp_clickgrid(icon%) DepthFadeHandle%: Wimp_clickdepth(icon%) win%=Ybox% Window_dragwin(win%,icon%,button%) button%<>%010 Module_call( Window_owner(win%),"click(win%,icon%,x%,y%,button%)") altered% Wimp_refreshicon(win%,icon%) Wimp_drag(b%) x%,y%,z%,x1%,y1%,z1% Dragging%= DragType% DragASprite% "DragASprite_Stop" *POINTER 1 "Wimp_GetPointerInfo",,b% b%!20=b%!12 b%!24=b%!16 b%!28=!b% b%!32=b%!4 b%!12=0 b%!16=1 DragSubType%=0 b%!36=Obend% b%!36=0 b%!40=FileType% -$(b%+44)= Leaf( Icon_Read(SaveHandle%,1)) !b%=(48+ ($(b%+44))) "Wimp_SendMessage",17,b%,b%!20,b%!24 Save_Ref%=b%!8 0x1%=DragItemX%:y1%=DragItemY%:z1%=DragItemZ% x%=b%!0:y%=b%!4 Display_ConvXY(x%,y%) Display_XYtoXYZ(x1%,y1%,z1%,x%,y%,z%) Display_ConvXY(StartX%,StartY%) Display_XYtoXYZ(x1%,y1%,z1%,StartX%,StartY%,sz%) x%+=x1%-StartX% y%+=y1%-StartY% z%+=z1%-sz% Wimp_OldPointer("ptr_drag") Module_call(DragTask%,"dragged(DragSubType%,x%,y%,z%)") x%=b%!0:y%=b%!4 Dragging%= Mask%=DragMask% Drag_redraw( x%=b%!0:y%=b%!4 Module_call(DragTask%,"dragged(DragSubType%,x%,y%,-1)") *Pointer 1 "Wimp_GetPointerInfo",,b% b%!12=ToolHandle% b%!16>1 b%!16b%!8 b%!0,b%!8 b%!4>b%!12 b%!4,b%!12 Module_call(DragTask%,"dragged(DragSubType%,b%,-1,-1)") DragType%-=1 Wimp_key(b%) win%,icon%,key%,act%,data%,start%,end%,ok% b2%=Localblock% win%=!b% icon%=b%!4 key%=b%!24 act%= key%=&18A AllowToggle% Tool_tabtoggle:act%= data%= Window_datapos(win%) data%<>-1 start%=Writeable%(data%,1) end%=Writeable%(data%,2) ok%=Writeable%(data%,3) 13,&18E icon%&18E Wimp_processmouse(win%,ok%,-1,-1,%100) act%= icon%>start% Wimp_SetCaret(win%,icon%-1) act%= DisplayClaimed% keymenu%=0 keymenu%<=MenuPtr% keymitem%=0 keymitem%<=Menus%(keymenu%,0,1) key%= (Menus%(keymenu%,keymitem%,2)) Menu_warning key%=Menus%(keymenu%,keymitem%,2) &task%=Menus%(keymenu%,keymitem%,0) %num%=Menus%(keymenu%,keymitem%,1) task%=0 Menu_main(Menu$(keymenu%),num%) Menu$(keymenu%)="Viewer" Display_NewViewer(CurrentMain%,task%,num%,keymitem%) Display_RedrawOne(CurrentMain%) CursorOn% Display_MoveCursor(CursorSX%,CursorSY%,CursorSZ%) Module_call(task%,"menuselect(Menu$(keymenu%),num%)") act%= keymitem%+=1 keymenu%+=1 "Wimp_ProcessKey",key% Wimp_message(b%) My_Ref%=b%!8 Your_Ref%=b%!12 b%!16 0:Quit%= Wimp_dataSaveAck(b%) Wimp_dataLoad(b%) Wimp_dataOpen(b%) Wimp_prequit(b%) &400C0: Wimp_menuwarning(b%) &400C1: Wimp_modechange &400C2 Wimp_dataSaveAck(b%) Your_Ref%<>Save_Ref% 17,"Unexpected Data Save Acknowlege message received" Object_save( GetStr(b%+44),b%!36) b%!12=My_Ref% b%!16=3 "Wimp_SendMessage",17,b%,b%!4 Wimp_dataLoad(blk%) blk%!40=&050 blk%!16=4 blk%!12=My_Ref% "Wimp_SendMessage",17,blk% Window_IsMain(blk%!20) Object_merge(blk%+44) blk%!20 (MainOn% Changed%) StartEditing Object_load(blk%+44) MainOn%= dum%= 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","","") /Xdum%= Wimp_Error(1,"Message from 3DEditor","This is not a 3DEditor file","OK","","") Wimp_dataOpen(b%) MainOn% b%!40=&050 b%!20=-2 Wimp_dataLoad(b%) Wimp_prequit(b%) MainOn% Changed% ;uret%= Wimp_Error(2,"Warning","A 3DEditor file has not been saved. Do you still want to quit?","Quit","Cancel","") ret%=2 b%!12=My_Ref% "Wimp_SendMessage",19,b% Wimp_menuwarning(b%) b%!32 b%!36 Icon_UpText(SaveHandle%,1,File$) Icon_UpValid(SaveHandle%,2,"sfile_050") SaveType%=0 FileType%=&050 Window_openactive(SaveHandle%) opt%=b%!40 SaveType%=opt%+2 FileType%=Export%(opt%,2) Icon_UpText(SaveHandle%,1,Export$(opt%)) FileType%=&1000 Icon_UpValid(SaveHandle%,2,"sdirectory") Icon_UpValid(SaveHandle%,2,"sfile_"+ ~FileType%) Window_openactive(SaveHandle%) "Wimp_CreateSubMenu",,b%!20,b%!24,b%!28 Wimp_modechange loop%,b%,b2% <>OldMode% "OS_ReadModeVariable",-1,5 ,,yeig% YResolution%=2^yeig% Object_BuildColourTable b%=Localblock% b2%=Localblock%+&100 loop%=0 Fonts%?loop%>0 "XFont_ReadDefn",loop%,b% ,,xsize%,ysize% "XFont_FindFont",,b%,xsize%,ysize% handle% Fonts%?loop%>0 "XFont_LoseFont",loop%:Fonts%?loop%-=1: handle%>0 handle%<256 Fonts2%?loop%=handle% Fonts%?handle%=1 loop%=0 WinPtr%-1 win%=Windows%(loop%,0) "XWimp_WhichIcon",win%,b%,1<<6,1<<6 1)<>1 s at%=0 b%!at%<>-1 !b2%=win% b2%!4=b%!at% "Wimp_GetIconState",,b2% x$fonthand%=(b2%!24>>24) %11111111 y%fonthand%=(Fonts2%?fonthand%)<<24 b2%!8=fonthand% b2%!12=%11111111<<24 "Wimp_SetIconState",,b2% at%+=4 loop% OldMode%= Wimp_palettechange Wimp_palettechange b%=Localblock% "Wimp_ReadPalette",,b% red%=b%!(11*4):red%=red% "node%=b%!(7*4):node%=node% %white%=b%!(0*4):white%=white% %black%=b%!(7*4):black%=black% black%<>7 white%<>0 red%<>11 red%=white% node%=white% node% black%=white% black% NodeTint%=(node% &FF)<<6 RedTint%=(red% &FF)<<6 BlackTint%=(black% &FF)<<6 NodeColour%=node%>>2 RedColour%=red%>>2 BlackColour%=black%>>2 BlackColour%=black% BlackTint%=0 RedColour%=red% RedTint%=0 NodeColour%=node% NodeTint%=0 Wimp_clickonbar(button%) hand%,b% b%=Localblock% button% MainOn% StartEditing Object_loaddefault File$="Untitled" Leaf$=File$ MainOn%= Window_UpdateTitle hand%= 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","","") CurrentInfo%=1 Window_UpdateInfo !hand%= Menu_Handle("Iconbar") "Wimp_CreateMenu",,hand%,x%-hand%!16/2-24,92+(44*4)+(18*2) !MenuId%= Menu_find("Iconbar") Wimp_clickmain(win%,x%,y%,button%) b%=Localblock% DisplayClaimed% win%<>CurrentMain% button%=%010 DisplayClaimed% Menu_warning Menu_Open("Main",x%,y%) MenuWindow%=win% "Wimp_GetCaretPosition",,b% !b%<>win% Window_ChangeCurrent(win%) MainHandle%=win% Module_call(ToolTask%,"click(win%,-1,x%,y%,button%)") Wimp_clickcoords(icon%) x,y,z icon%=9 icon%=10 Window_Close(CoordHandle%) icon%=10 Icon_Read(CoordHandle%,6) Icon_Read(CoordHandle%,7) Icon_Read(CoordHandle%,8) Module_call(CoordTask%,"coords(CoordNum%,x,y,z)") Wimp_clicksave(icon%) icon% #file$= Icon_Read(SaveHandle%,1) file$= Leaf(file$) jdum%= Wimp_Error(1,"Message from 3DEditor","To save, drag the icon to a directory display","OK","","") Object_save(file$,0) Dragging%= DragTask%=0 DragType%=0 DragSubType%=SaveType% Window_ReadState(win%) b%=Errblock% !b%=SaveHandle% b%!4=2 "Wimp_GetIconState",,b% b%!8+=X1% b%!12+=Y1%+Yw% b%!16+=X1% b%!20+=Y1%+Yw% b%!24=0 b%!28=0 b%!32=&7FFFFFF b%!36=&7FFFFFF b%!0=0 b%!4=5 SaveType%=0 type$="file_050" type%=Export%(SaveType%-2,2) type%=&1000 type$="directory" type$="file_"+ ~type% DragASprite% "DragASprite_Start",%11000101,1,type$,b%+8,b%+24 "Wimp_DragBox",,b% "OS_SpriteOp",36+256,WindowSprites%,"ptr_dragable",2,9,16 Wimp_clickchoice1(icon%) task% (icon%-2)/3>=0 (icon%-2)/3<20 task%=Choices%((icon%-2)/3) task%<>0 0ChoicePane%= Module_call(task%,"choiceopen") ChoicePane%= Choices_open Window_OpenCentre(ChoiceSurround%) Window_Close(MainChoices%) Wimp_clickchoice2(icon%) icon% Choices_Ok Choices_saveclicked Window_Close(ChoiceSurround%) Choices_Ok Window_Close(ChoiceSurround%) Wimp_clickchoice3(icon%) icon% Icon_IncDec(MainChoicePane%,8,1,1,Tool%(CurrentTool%,0,0), Icon_IncDec(MainChoicePane%,8,-1,1,Tool%(CurrentTool%,0,0), Icon_GreyOut(MainChoicePane%,16,( Icon_ReadState(MainChoicePane%,15)) Choices_Ok Window_Close(ChoiceSurround%) Wimp_clickinfo(icon%) 3 up%= icon%=20 CurrentInfo%>1 CurrentInfo%-=1:up%= icon%=21 CurrentInfo%+GridZSpace%= Icon_Read(GridControl%,7) ?-GridOn%= Icon_ReadState(GridControl%,9)=1 Icon_UpState(Ybox%,12,GridOn% A1SnapToGrid%= Icon_ReadState(GridControl%,8)=1 Icon_UpState(Ybox%,4,SnapToGrid% Display_Update Window_Close(GridControl%) icon%=10 icon%=11 "Wimp_CreateMenu",,-1 Wimp_clickdepth(icon%) icon% Window_Close(DepthFadeHandle%) L3DepthFadeStart%= Icon_Read(DepthFadeHandle%,4) M1DepthFadeGap%= Icon_Read(DepthFadeHandle%,5) N8DepthFadeOn%=( Icon_ReadState(DepthFadeHandle%,8)=1) Display_Update Window_Close(DepthFadeHandle%) icon%=6 icon%=7 "Wimp_CreateMenu",,-1 Wimp_ptrleaving(Block%) Activewin%<>0 WimpVersion%<310 Window_leaveactive(!Block%) !Block%=CurrentMain% *POINTER 1 Wimp_ptrentering(Block%) Activewin%<>0 WimpVersion%<310 Window_enteractive(!Block%) !Block%=CurrentMain% Pointer$<>"" "OS_SpriteOp",36+256,WindowSprites%,Pointer$,2,PtrActiveX%,PtrActiveY% Wimp_redrawwindow(b%) win%,xmin%,xmax%,ymin%,ymax%,xcon%,ycon%,at%,one%,two% $+" "+ b2%=b%+&200 win%=!b% c6xmin%=b%!28-(b%!4-b%!20):ymin%=b%!32-(b%!16-b%!24) d6xmax%=b%!36-(b%!4-b%!20):ymax%=b%!30-(b%!16-b%!24) e&xcon%=b%!4-b%!20:ycon%=b%!16-b%!24 b%=Localblock% "Wimp_WhichIcon",win%,b%,1<<7,1<<7 h at%=0 b%!at%<>-1 b2%!0=win% b2%!4=b%!at% "Wimp_GetIconState",,b2% m ok%= b2%!8xmax% b2%!16>xmax% Wimp_redrawicon(win%,b%!at%,b2%,0,xcon%,ycon%) at%+=4 Wimp_refreshicon(win%,icon%) b%,xcon%,ycon%,more% b%=Errblock% y2b%!0=win%:b%!4=icon%: "Wimp_GetIconState",,b% ((b%!24>>8) b%!4=win%:b%!16+=4:b%!20+=8 "Wimp_UpdateWindow",,b%+4 more% more% xcon%=b%!8-b%!24 ycon%=b%!20-b%!28 >b2%=b%+40:!b2%=win%:b2%!4=icon%: "Wimp_GetIconState",,b2% Wimp_redrawicon(win%,icon%,b2%,0,xcon%,ycon%) "Wimp_GetRectangle",,b%+4 more% Wimp_redrawicon(win%,icon%,b%,sel%,xcon%,ycon%) yr%=YResolution% iminx%=((b%!8+xcon%) "iminy%=((b%!12+ycon%) yr%)*yr% imaxx%=((b%!16+xcon%) "imaxy%=((b%!20+ycon%) yr%)*yr% b%!32<>-1 valid$=$(b%!32) valid$,1,1)="b" opt%= valid$,2,1)) col%=1 Wimp_raisebox(iminx%,iminy%,imaxx%,imaxy%,col%) Wimp_okbox(iminx%,iminy%,imaxx%,imaxy%,col%) Wimp_textbox(iminx%,iminy%,imaxx%,imaxy%) Wimp_dropbox(iminx%,iminy%,imaxx%,imaxy%,col%) Wimp_divider(iminx%,iminy%,imaxx%,imaxy%) Wimp_okbox2(iminx%,iminy%,imaxx%,imaxy%,col%) Wimp_textbox(iminx%,iminy%,imaxx%,imaxy%) Wimp_drawdragbar(win%,icon%) Wimp_drawdragbar(win%,icon%) b%,b2% b%=Localblock%+&100 !b%=win% b%!4=icon% "Wimp_GetIconState",,b% b2%=b%+8 flags%=b2%!16 num%= $(b2%!24),3)) b2%!16=flags% (1<<5) "Wimp_PlotIcon",,b2% col%=((b2%!16)>>24) %1111 4b2%!16=((flags% (1<<5)) (%1111<<28)) (col%<<28) 5b2%!8=((b2%!8-b2%!0)*DragData%(num%,0)/100)+b2%!0 "Wimp_PlotIcon",,b2% Wimp_clickicon(win%,icon%,b%,xcon%,ycon%) altered%= 2b%!0=win%:b%!4=icon%: "Wimp_GetIconState",,b% (iminx%=b%!8+xcon%:iminy%=b%!12+ycon% )imaxx%=b%!16+xcon%:imaxy%=b%!20+ycon% b%!32<>-1 (b%!24 1)<>0 (((b%!24>>8) 1)=1) valid$=$(b%!32) valid$,1,1)="b" opt%= valid$,2,1)) 0,6:altered%= Wimp_dropbox(iminx%,iminy%,imaxx%,imaxy%,14) 2:altered%= Wimp_dropbox(iminx%+8,iminy%+8,imaxx%-8,imaxy%-8,14) =altered% Wimp_raisebox(x0%,y0%,x1%,y1%,col%) Wimp_shadowbox(x0%,y0%,x1%-x0%,y1%-y0%,0,col%) Wimp_dropbox(x0%,y0%,x1%,y1%,col%) Wimp_shadowbox(x0%,y0%,x1%-x0%,y1%-y0%,1,col%) Wimp_okbox(x0%,y0%,x1%,y1%,col%) Wimp_dropbox(x0%,y0%,x1%,y1%,12) col%=-1 col%=1 Wimp_raisebox(x0%+8,y0%+8,x1%-8,y1%-8,col%) Wimp_okbox2(x0%,y0%,x1%,y1%,col%) Wimp_dropbox(x0%-8,y0%-8,x1%+8,y1%+8,12) col%=-1 col%=1 Wimp_raisebox(x0%,y0%,x1%,y1%,col%) Wimp_textbox(x0%,y0%,x1%,y1%) Wimp_dropbox(x0%-8,y0%-8,x1%+10,y1%+10,1) "Wimp_SetColour",0 x0%,y0%,(x1%-x0%),(y1%-y0%) "Wimp_SetColour",7 Wimp_divider(x0%,y0%,x1%,y1%) Wimp_shadowbox(x0%,y0%,x1%-x0%,y1%-y0%,3,-1) Wimp_shadowbox(x0%+4,y0%+4,x1%-x0%-8,y1%-y0%-8,2,-1) Wimp_shadowbox(x%,y%,wide%,high%,opt%,back%) opt%=0 one%=4:two%=0 opt%=1 one%=0:two%=4 opt%=2 one%=2:two%=0 opt%=3 one%=0:two%=2 wide%-=4:high%-=4 back%<>-1 "Wimp_SetColour",back% x%,y%,wide%,high% "Wimp_SetColour",one% x%,y%,wide%,2 x%+wide%-2,y%,2,high% "Wimp_SetColour",two% x%,y%+2,2,high%-2 x%,y%+high%,wide%-2,2 "Wimp_SetColour",one% x%,y%: x%+2,y% 85,x%+2,y%+2 x%+wide%,y%+high% x%+wide%,y%+high%-2 85,x%+wide%-2,y%+high%-2 "Wimp_SetColour",7 Wimp_startscreen x%,y%,width%,height%,b%,b2%,b3% b%=Localblock% b2%=Localblock%+&50 b3%=Localblock%+&100 width%=900:height%=500 Wimp_ModeSize(x%,y%) x%-=width%:y%-=height% x%=x%/2:y%=y%/2 "Wimp_SetColour",7 x%,y%,width%-4,height%-4 Wimp_shadowbox(x%+2,y%+2,width%-4,height%-4,0,1) Wimp_shadowbox(x%+4,y%+4,width%-8,height%-8,0,1) $b%="title" "Wimp_ReadPixTrans",&100,WindowSprites%,b%,,,,b2%,b3% "OS_SpriteOp",&100+52,WindowSprites%,b%,x%+250,y%+400,&08,b2%,b3% Wimp_shadowbox(x%+20,y%+20,550,300,1,0) "Wimp_SetColour",7 x%+26,y%+26,534,284 $b%="opening" "Wimp_ReadPixTrans",&100,WindowSprites%,b%,,,,b2%,b3% "OS_SpriteOp",&100+52,WindowSprites%,b%,x%+40,y%+60,&08,b2%,b3% "Wimp_SetFontColours",,1,7 "Font_FindFont",,"Homerton.Bold",12*16,12*16 handle% "Font_SetFont",handle% "Font_Paint",,"Version "+version$,%10000,x%+580,y%+280 "Font_LoseFont",handle% "Font_FindFont",,"Homerton.Medium",12*16,12*16 handle% "Font_SetFont",handle% "Font_Paint",," Simon Wilkinson 1993, 1994",%10000,x%+240,y%+370 "Font_Paint",,"Loading Modules ...",%10000,x%+580,y%+100 "Font_LoseFont",,handle% "Font_FindFont",,"Homerton.Medium",10*16,10*16 Handle% "Font_SetFont",Handle% 7Xstart%=x%:Ystart%=y%:Width%=width%:Height%=height% Wimp_moduledata(name$,ver$) "Wimp_SetColour",1 Xstart%+580,Ystart%+10,250,50 "Font_SetFont",Handle% "Font_Paint",,name$+" version "+ver$,%10000,Xstart%+580,Ystart%+20 Wimp_endstart "Font_LoseFont",Handle% "Wimp_ForceRedraw",-1,Xstart%,Ystart%,Xstart%+Width%,Ystart%+Height% Window_initialise winblock%,dum% "OS_SpriteOp",&10B,WindowSprites%,Resource$+"Sprites"+SpriteMode$ NewLookLoaded% "OS_SpriteOp",&10B,WindowSprites%,Resource$+"NoNew"+SpriteMode$ Windows%(100,1):WinPtr%=0 Writeable%(50,3):WritePtr%=0 Activeblock%8*200 *FActivePtr%=0:Activewin%=0:ActiveIcons%=-1:ActiveOn%= :ActiveIn%=-1 winblock%&3000,Mainblock%&100,Toolblock%&200,YboxSpace%&300 Titlespace%70*20 MainHandle%(20):MainOpen%=0:CurrentMain%=-1 IndrEnd%=Maxindr%+Indr% WimpVersion%<310 "Wimp_OpenTemplate",,Resource$+"Templates" "Wimp_OpenTemplate",,Resource$+"TempOs3" "Wimp_CloseTemplate": Wimp_err(1): IndrPos%=Indr% 65dum%= Window_Create("Main",IndrPos%,Mainblock%,0) 74!winblock%=dum%: "Wimp_DeleteWindow",,winblock% 85dum%= Window_Create("ybox",IndrPos%,YboxSpace%,0) 94!winblock%=dum%: "Wimp_DeleteWindow",,winblock% :;InfoHandle%= Window_Create("info",IndrPos%,winblock%,0) ;CoordHandle%= Window_Create("coords",IndrPos%,winblock%,0) ==SaveHandle%= Window_Create("saveas",IndrPos%,winblock%,0) >?MainChoices%= Window_Create("choices",IndrPos%,winblock%,0) ?AChoiceSurround%= Window_Create("chmain",IndrPos%,winblock%,0) @EMainChoicePane%= Window_Create("choicepane",IndrPos%,winblock%,0) ACGridControl%= Window_Create("gridcontrol",IndrPos%,winblock%,0) BEDepthFadeHandle%= Window_Create("depthfade",IndrPos%,winblock%,0) Window_Writeable(CoordHandle%,6,8,10) Window_Writeable(SaveHandle%,1,1,0) Window_Writeable(MainChoicePane%,8,8,255) Window_Writeable(GridControl%,5,7,11) Window_Writeable(DepthFadeHandle%,4,5,7) winblock%!0=6:winblock%!4=2 I winblock%!8=7:winblock%!12=2 J!winblock%!16=8:winblock%!20=2 K>winblock%!24=-1: Window_ActiveIcon(CoordHandle%,winblock%) winblock%!0=1:winblock%!4=2 M winblock%!8=2:winblock%!12=3 N=winblock%!16=-1: Window_ActiveIcon(SaveHandle%,winblock%) winblock%!0=8:winblock%!4=2 P@winblock%!8=-1: Window_ActiveIcon(MainChoicePane%,winblock%) winblock%!0=5:winblock%!4=2 R winblock%!8=6:winblock%!12=2 S!winblock%!16=7:winblock%!20=2 T>winblock%!24=-1: Window_ActiveIcon(GridControl%,winblock%) winblock%!0=4:winblock%!4=2 V winblock%!8=5:winblock%!12=2 WBwinblock%!16=-1: Window_ActiveIcon(DepthFadeHandle%,winblock%) "Wimp_CloseTemplate" Y+MainXWidth%=Mainblock%!48-Mainblock%!40 Z+MainYWidth%=Mainblock%!52-Mainblock%!44 MainOn%= Icon_UpText(InfoHandle%,9,version$) YboxXpos%=0:YboxYpos%=-42 ToolXpos%=0:ToolYpos%=0 Window_attach(block%,win%,x1%,y1%,x2%,y2%) block%!36=win% "Wimp_GetWindowState",,block%+36 a%=block%+36 a%!4=x1% a%!8=y1% a%!12=x2% a%!16=y2% block%!28<>win% a%!28=block%!28:block%!28=win% "Wimp_OpenWindow",,a% Window_attachos(block%,win%,x1%,y1%,x2%,y2%) x1%<0 x2%-=x1% o x1%=0 y1%<0 y2%-=y1% s y1%=0 Window_attach(block%,win%,x1%,y1%,x2%,y2%) Window_owner(win%) loop% loop%=0 loop%win% loop%+=1 loop%>=WinPtr% =Windows%(loop%,1) Window_datapos(win%) loop% loop%=0 loop%win% loop%+=1 loop%>=WinPtr% =loop% Window_openactive(win%) ptr%=0 Activeblock%!ptr%<>win% ptr%-1 ptr%win% ptr%-1 ptr%+=4 ptr%+=4 ptr%win% ptr%-1 ptr%+=4 ptr%+=4 ptr%-1 ActiveIcons%=-1 Dragging% Toggled% Mask%=Mask% %00000000000000000001 Dragging% DragMask%=DragMask% ActiveIn%=-1 *POINTER 1 Window_activenull icon%,ptr%,ptr$,cx%,cy% ActiveIn%>0 "Wimp_GetPointerInfo",,Block% ActiveIn%=Block%!12 icon%=Block%!16 ptr%=0 ActiveIcons%!ptr%<>-1 ActiveIcons%!ptr%<>icon% ptr%+=8 ActiveIcons%!ptr%<>-1 ActiveIcons%!(ptr%+4) 1:cx%=0:cy%=0:ptr$="ptr_menu" 2:cx%=5:cy%=10:ptr$="ptr_caret" 3:cx%=9:cy%=16:ptr$="ptr_dragable" 17,"Unknown Icon : "+ ActiveIcons%!(ptr%+4) "OS_SpriteOp",36+256,WindowSprites%,ptr$,2,cx%,cy% ActiveOn%= ActiveOn% *POINTER 1 ActiveOn%= Window_dragwin(win%,icon%,button%) b%=Localblock% (win%=ToolHandle% (Windowflags% %0010)=0) (win%=Ybox% (Windowflags% %1000)=0) icon% button%=(%100<<4) button%=(%001<<4) !b%=win% b%!4=1 "Wimp_DragBox",,b% button%=%100 Window_Front(win%) Window_Back(win%) Window_whichmain(handle%) loop% loop%=0 loop%<=MainOpen% MainHandle%(loop%)<>handle% loop%+=1 MainHandle%(loop%)<>handle%loop%=-1 =loop% Window_readygrid Icon_UpText(GridControl%,5, GridXSpace%) Icon_UpText(GridControl%,6, GridYSpace%) Icon_UpText(GridControl%,7, GridZSpace%) Icon_UpState(GridControl%,8,SnapToGrid% Icon_UpState(GridControl%,9,GridOn% Window_readydepth Icon_UpText(DepthFadeHandle%,4, DepthFadeStart%) Icon_UpText(DepthFadeHandle%,5, DepthFadeGap%) Icon_UpState(DepthFadeHandle%,8,DepthFadeOn% Window_dofancyicons(icons%,block%) WimpVersion%<310 (block%!28 block%!28=block%!28 (1<<4) ci%=0 ci%<>icons% at%=ci%*32+88+block% flags%=at%!16 (flags% %100000101)=%100000101 at%!24<>-1 $(at%!24),1)="b" flags%=flags% %100100 flags%=flags% at%!16=flags% $(at%!24),2,1))=3 *at%!0+=8:at%!4+=8:at%!8-=10:at%!12-=10 at%!16=at%!16 7<<24 $(at%!24),2,1))=7 at%!16=at%!16 $(at%!24),2,1))=8 $(at%!24)="b8"+ DragBars% DragBars%+=1 ci%+=1 Menu_initialise loop% %(MaxMenus%=20:MaxItems%=30:MenuPtr%=0 Menus%(MaxMenus%,MaxItems%,2),MenuAddr%(MaxMenus%),Menu$(MaxMenus%) MenuData%(MaxMenus%,3) (#MenuData%= Heap_GetBlock(30*50) MenuDataPtr%=1 loop%=0 MaxMenus% addr%28+MaxItems%*24 Menus%(loop%,0,0)=addr% loop% ShowHot%= MenuLast%=%10000000 MenuTick%=%1 MenuDot%=%10 MenuWriteable=%100 MenuPlain%=0 4"MenuNormal%=(7<<24) %100010001 5#MenuShaded%=(4<<20) MenuNormal% Menu_BuildMenu("Iconbar","3D Editor",10) Menu_BuildMenu("Main","3D Editor",10) Menu_BuildMenu("View","View",12) Menu_BuildMenu("Viewer","Display Types",12) Menu_BuildMenu("Export","Export to",12) Menu_BuildMenu("File","Filing",12) Menu_AddItem("Iconbar",0,-1,"Info",InfoHandle%,MenuDot%,MenuNormal%) Menu_AddItem("Iconbar",0,6,"Choices ...",-1,0,MenuNormal%) Menu_AddItem("Iconbar",0,8,"Save Choices",-1,MenuDot%,MenuNormal%) Menu_AddSubMenu("Main","File","File",0,MenuNormal%) Menu_AddHotItem("File",0,9,"Save",SaveHandle%,%1000,MenuNormal%,&183) Menu_AddSubMenu("File","Export","Export",0,MenuNormal%) Menu_AddHotItem("View",0,7,"New View",-1,0,MenuNormal%,&184) Menu_AddSubMenu("View","Display Type","Viewer",MenuDot%,MenuNormal%) Menu_AddHotItem("View",0,11,"Grid ... ",GridControl%,0,MenuNormal%,&1EA) Menu_AddItem("View",0,10,"Depth Fade ... ",DepthFadeHandle%,0,MenuNormal%) Menu_AddHotItem("View",0,12,"Show all nodes",-1,0,MenuNormal%,&185) Menu_AddHotItem("View",0,13,"Show colours",-1,0,MenuNormal%,&186) Menu_end Menu_AddItem("Iconbar",0,1,"Quit",-1,0,MenuNormal%) Menu_AddSubMenu("Main","View","View",0,MenuNormal%) loop%=0 MenuPtr%-1 Menu_End(Menu$(loop%)) loop% Menu_ToggleHot Menu_find(name$) loop%,found% found%=-1 loop%=0 MenuPtr% Menu$(loop%)=name$ found%=loop% =found% Menu_process(b%) Menu_doit(MenuId%,b%) "Wimp_GetPointerInfo",,Localblock% Localblock%!8=%001 Menu_warning "Wimp_CreateMenu",,Menus%(MenuId%,0,0) Menu_doit(menu%,b%) task%,num%,opt% opt%=(!b%)+1 task%=Menus%(menu%,opt%,0) num%=Menus%(menu%,opt%,1) task% Menu_doit(num%,b%+4) Menu_main(Menu$(menu%),num%) Menu$(menu%)="Viewer" Display_NewViewer(MenuWindow%,task%,num%,opt%) CurrentMain%=MenuWindow% CursorOn% Display_MoveCursor(CursorSX%,CursorSY%,CursorSZ%) Display_RedrawOne(MenuWindow%) task%>0 task%<=NoModules% Module_call(task%,"menuselect(Menu$(menu%),num%)") Menu_main(menu$,num%) MainOn% Changed% xnret%= Wimp_Error(2,"Warning","Document has not been saved. Do you still want to quit?","Quit","Cancel","") ret%=1 Quit%= Quit%= 2,3,4,5 Window_OpenCentre(MainChoices%) Window_NewMain Choices_saveclicked Icon_UpText(SaveHandle%,1,File$) Icon_UpValid(SaveHandle%,2,"sfile_050") SaveType%=0 FileType%=&050 Window_AsMenu(SaveHandle%) Window_readydepth Window_AsMenu(DepthFadeHandle%) Window_readygrid Window_AsMenu(GridControl%) ShowAllNodes%= ShowAllNodes% Menu_Tick("View",4,ShowAllNodes% Display_Update ShowColours%= ShowColours% Menu_Tick("View",5,ShowColours% Display_Update Wimp_Naughty("Display Size : "+ (DisplaySize%/1024)+"k , Object Size : "+ (ObjectSize%/1024)+"k, "+Note$) Gibberish here. Wimp_Naughty("End "+ +", Variables "+ Wimp_Naughty("Display%: &"+ ~Display%(1)+" ObjectItem%: "+ ~ObjectItem%) Wimp_Naughty("Wimp Version: "+ WimpVersion%) Menu_warning x%,y% Window_readygrid Window_readydepth Menu_Tick("View",4,ShowAllNodes% Menu_Tick("View",5,ShowColours% Module_broadcast("menuwarning") Tool_initialise Tool$(2,20),Tool%(2,20,1),ToolMap%(2,20) ToolPtr%=0 ToolHeap%=-1 CurrentTool%=-1 ToolTask%=-1 ToolNum%=-1 LastIcon%=-1 ToolWidth%=2 Toggled%= AllowToggle%= loop%=0 loop2%=0 !ToolMap%(loop%,loop2%)=loop2% Tool_BuildBox("Main") Tool_findbox(name$) loop% loop%=0 loop%<6 Tool$(loop%,0)<>name$ loop%+=1 loop%=6 17,"Toolbox '"+name$+"' does not exist" =loop% Tool_end Tool_NewToolBox("Main") Tool_click(icon%,button%) Toggled% icon%1 Tool_drag(icon%) Tool_drag(icon%) Dragging%= DragTask%=0 DragType%=3 DragSubType%=icon% Window_ReadState(ToolHandle%) b%=Errblock% !b%=ToolHandle% b%!4=icon% "Wimp_GetIconState",,b% b%!8+=X1% b%!12+=Y1%+Yw% b%!16+=X1% b%!20+=Y1%+Yw% b%!24=X1% b%!28=Y1% b%!32=X1%+Yw% b%!36=Y1%+Yw% b%!0=0 b%!4=5 "Wimp_DragBox",,b% "OS_SpriteOp",36+256,WindowSprites%,"ptr_dragable",2,9,16 Tool_act(icon%) tool%,name$,num%,ok%,task% icon%>1 CurrentTool%=-1 17,"Internal Error - no toolbox defined" tool%=CurrentTool% name$=Tool$(tool%,0) $clicked%=ToolMap%(tool%,icon%-1) num%=Tool%(tool%,clicked%,1) !task%=Tool%(tool%,clicked%,0) (num%=ToolNum% task%=ToolTask%) task%<>0 Eok%= Module_call(Tool%(tool%,clicked%,0),"toolclick(name$,num%)") Module_call(ToolTask%,"toolend(name$,ToolNum%)") %ToolTask%=Tool%(tool%,clicked%,0) ToolNum%=num% Tool_toggle(icon%,LastIcon%) LastIcon%=icon% ok%=1 Module_call(Tool%(tool%,clicked%,0),"toolstart(name$,num%)") Tool_toggle(set%,clear%) b%,valid% b%=Localblock% set%<>-1 b%!0=ToolHandle%:b%!4=set% "Wimp_GetIconState",,b% valid%=b%!32 $valid%=$valid%+"s" ,b%!8=0:b%!12=0: "Wimp_SetIconState",,b% clear%<>-1 b%!0=ToolHandle%:b%!4=clear% "Wimp_GetIconState",,b% valid%=b%!32 $valid%= $valid%) ,b%!8=0:b%!12=0: "Wimp_SetIconState",,b% Tool_tabtoggle Toggled% Flags%(ToolTask%) ToolTask%<>SelectorTask% name$="Main" ;ok%= Module_call(ToolTask%,"toolpause(name$,ToolNum%)") :OldTask%=ToolTask%:OldNum%=ToolNum%:OldIcon%=LastIcon% ToolTask%=SelectorTask% ToolNum%=1 9ok2%= Module_call(SelectorTask%,"toolclick(name$,1)") loop%=0 loop%SelectorButton% loop%+=1 loop%+=1 Tool_toggle(loop%,LastIcon%) LastIcon%=loop% ok2%=1 Module_call(SelectorTask%,"toolstart(name$,1)") ToolMask%=Mask% Mask%=Mask% Toggled%= Tool_togglenull "OS_Byte",121,96 ,rep% rep%=0 x%,y%,but% but%=0 Toggled%= Mask%=ToolMask% name$="Main" Module_call(SelectorTask%,"toolend(name$,1)") Tool_toggle(OldIcon%,LastIcon%) selecticon%=LastIcon% LastIcon%=OldIcon% 3'ToolTask%=OldTask%:ToolNum%=OldNum% 4=ok%= Module_call(ToolTask%,"toolrestart(name$,ToolNum%)") ToolTask%=SelectorTask% ToolNum%=1 99ok2%= Module_call(SelectorTask%,"toolclick(name$,1)") Tool_toggle(selecticon%,LastIcon%) LastIcon%=selecticon% ok2%=1 Module_call(SelectorTask%,"toolstart(name$,1)") Tool_savechoices loop%=0 ToolPtr%-1 Choices_StartSection("Tool_"+Tool$(loop%,0)) loop2%=1 Tool%(loop%,0,0)-1 E tool%=ToolMap%(loop%,loop2%) Choices_OutputLine("ToolNumber"+ loop2%,Tool$(loop%,tool%)) loop2% Choices_EndSection loop% Tool_choiceclaim(sec$) sec$,5)="Tool_") Tool_loadline(sec$,title$,val$) sec$,5)="Tool_" toolbox%=0 toolbox%Tool$(toolbox%,0) toolbox%+=1 toolbox%val$ tool%+=1 tool%tool% map%+=1 map%>0) Icon_UpState(MainChoicePane%,10,(Windowflags%>>1) Icon_UpState(MainChoicePane%,11,(Windowflags%>>2) Icon_UpState(MainChoicePane%,12,(Windowflags%>>3) Icon_UpState(MainChoicePane%,15,(ShowColours%) Icon_UpState(MainChoicePane%,16,(ShowBackground%) Icon_GreyOut(MainChoicePane%,16,( ShowColours%) =MainChoicePane% Choices_mainok w-ToolWidth%= Icon_Read(MainChoicePane%,8) Windowflags%=0 y7Windowflags%+= Icon_ReadState(MainChoicePane%,9)<<0 z8Windowflags%+= Icon_ReadState(MainChoicePane%,10)<<1 {8Windowflags%+= Icon_ReadState(MainChoicePane%,11)<<2 |8Windowflags%+= Icon_ReadState(MainChoicePane%,12)<<3 }8ShowColours%=( Icon_ReadState(MainChoicePane%,15)=1) ~;ShowBackground%=( Icon_ReadState(MainChoicePane%,16)=1) Display_Update Tool_Clear Tool_NewToolBox(Tool$(CurrentTool%,0)) ToolHandle%<>-1 Window_Close(ToolHandle%) Ybox%<>-1 Window_Close(Ybox%) MainOn% Window_Open(CurrentMain%) Choices_saveclicked b%=Localblock% %ChoiceHandle%= (Path$+"!Choices") #ChoiceHandle%,"3D Editor version "+version$+" Choices File" #ChoiceHandle%,"Created : "+ Choices_mainsavechoices Tool_savechoices loop%=0 ChoicePtr%-1 task%=Choices%(loop%) task%<>0 Module_call(task%,"savechoices") #ChoiceHandle% $b%=Path$+"!Choices" "OS_File",18,b%,&FFF Choices_load %ChoiceHandle%= (Path$+"!Choices") ChoiceHandle%=0 Wimp_Naughty("Choices file not present, continuing with default settings") get$= #ChoiceHandle% #ChoiceHandle% get$,7)="Section" sec$= get$,11) +claimed%= Choices_mainchoiceclaim(sec$) claimed% claimed%= Tool_choiceclaim(sec$) loop%=0:task%=0 loop%<=ChoicePtr% claimed% task%=Choices%(loop%) 4claimed%= Module_call(task%,"choiceclaim(sec$)") loop%+=1 get$= #ChoiceHandle% #ChoiceHandle% get$<>"EndSection" get$= get$,4) pos%= get$," ")-1 title$= get$,pos%) val$= get$,23) claimed% task%=0 Choices_mainloadline(sec$,title$,val$) Tool_loadline(sec$,title$,val$) Module_call(task%,"choiceloadline(sec$,title$,val$)") get$= #ChoiceHandle% get$= #ChoiceHandle% #ChoiceHandle% Choices_mainchoiceclaim(sec$) l=((sec$="System_ToolWindows") (sec$="System_Display") (sec$="System_Misc") (sec$="Programmer_Settings")) Choices_mainloadline(sec$,title$,val$) "System_ToolWindows" title$ "ToolBox_Width":ToolWidth%= "ToolBox_Show" val$="Yes" Windowflags%=Windowflags% (1<<0) val$="No" Windowflags%=Windowflags% (1<<0) "ToolBox_Attach" val$="Yes" Windowflags%=Windowflags% (1<<1) val$="No" Windowflags%=Windowflags% (1<<1) "InfoBox_Show" val$="Yes" Windowflags%=Windowflags% (1<<2) val$="No" Windowflags%=Windowflags% (1<<2) "InfoBox_Attach" val$="Yes" Windowflags%=Windowflags% (1<<3) val$="No" Windowflags%=Windowflags% (1<<3) "System_Display" title$ "ShowColours":ShowColours%=(val$="Yes") "ShowBackground":ShowBackground%=(val$="Yes") "ShowGrid":GridOn%=(val$="Yes") "SnapToGrid":SnapToGrid%=(val$="Yes") "GridXSize":GridXSpace%= "GridYSize":GridYSpace%= "GridZSize":GridZSpace%= "UseDepthFade":DepthFadeOn%=(val$="Yes") "FadeGap":DepthFadeGap%= "FadeStart":DepthFadeStart%= "System_Misc" title$ "ShowHotKeys":ShowHot%=(val$="Yes") "TabToolToggle":AllowToggle%=(val$="Yes") "CTRLconstrain":AllowCTRL%=(val$="Yes") "Programmer_Settings" title$ "Development" version$+=" Development" Icon_UpText(InfoHandle%,9,version$) "NiceErrors" NiceError%=(val$="Yes") Choices_mainsavechoices Choices_StartSection("System_ToolWindows") Choices_OutputLine("ToolBox_Width", ToolWidth%) Choices_OutputBin("ToolBox_Show",(Windowflags%>>0) Choices_OutputBin("ToolBox_Attach",(Windowflags%>>1) Choices_OutputBin("InfoBox_Show",(Windowflags%>>2) Choices_OutputBin("InfoBox_Attach",(Windowflags%>>3) Choices_EndSection Choices_StartSection("System_Display") Choices_OutputFlag("ShowColours",ShowColours%) Choices_OutputFlag("ShowBackground",ShowBackground%) Choices_OutputFlag("ShowGrid",GridOn%) Choices_OutputFlag("SnapToGrid",SnapToGrid%) Choices_OutputLine("GridXSize", GridXSpace%) Choices_OutputLine("GridYSize", GridYSpace%) Choices_OutputLine("GridZSize", GridZSpace%) Choices_OutputFlag("UseDepthFade",DepthFadeOn%) Choices_OutputLine("FadeGap", DepthFadeGap%) Choices_OutputLine("FadeStart", DepthFadeStart%) Choices_EndSection Choices_StartSection("System_Misc") Choices_OutputFlag("ShowHotKeys",ShowHot%) Choices_OutputFlag("TabToolToggle",AllowToggle%) Choices_OutputFlag("CTRLconstrain",AllowCTRL%) Choices_EndSection Display_initialise DisplaySize%(20),Display%(20),DisplayBounds%(20) Scale%(20),CentreX(20),CentreY(20) ViewerNum%(20),ViewerTask%(20),WindowView$(20) &DisplayIndex%= Heap_GetBlock(1024) DisplayClaimed%= !DisplayIndex%=-1 DisplayPointList%=-1 ViewerNum%=-2 ViewerTask%=-2 Selected%=-1 Select_Type%=-1 Viewer$="" Scale%=-1 CursorOn%= ViewChanged%=-1 ShowColours%= ShowBackground%= GridOn%= GridXSpace%=100 GridYSpace%=100 GridZSpace%=1000 SnapToGrid%= ClaimGridOn%= ClaimGridXSpace%=100 ClaimGridYSpace%=100 ClaimSnapToGrid%= AllowCTRL%= DisplayLampSize%=12 DepthFadeOn%= DepthFadeGap%=100 DepthFadeStart%=0 EditingItem%= ShowAllNodes%= ItemGreyed%=-1 ThisGreyed%=-1 Notify3DRedraw%=-1 Wimp_palettechange "OS_File",5,Resource$+"Code" ,,,,len% CodeSpace%len% "OS_File",16,Resource$+"Code",CodeSpace%,0 TranslationMatrix%64,Xyz%12 DisplayMatrix%64,CombinedMatrix%64 DisplayXyz%16 Display_newmain(num%) DisplaySize%(num%)=1024*50 65Display%(num%)= Heap_GetBlock(DisplaySize%(num%)) 7/DisplayBounds%(num%)= Heap_GetBlock(4*1024) !Display%(num%)=0 Display_DefaultZoom(MainHandle%(num%)) Display_NewViewer(MainHandle%(num%),Viewer%(0,0),Viewer%(0,1),1) num%>1 Display_RedrawOne(MainHandle%(num%)) Display_removemain(num%) DisplaySize%(num%)=-1 Heap_FreeBlock(Display%(num%)) Heap_FreeBlock(DisplayBounds%(num%)) Display_mainswap(num1%,num2%) DisplaySize%(num1%),DisplaySize%(num2%) Display%(num1%),Display%(num2%) DisplayBounds%(num1%),DisplayBounds%(num2%) WindowView$(num1%),WindowView$(num2%) ViewerTask%(num1%),ViewerTask%(num2%) ViewerNum%(num1%),ViewerNum%(num2%) CentreX(num1%),CentreX(num2%) CentreY(num1%),CentreY(num2%) Scale%(num1%),Scale%(num2%) Display_startredraw(num%) N#DisplaySize%=DisplaySize%(num%) Display%=Display%(num%) P'DisplayBounds%=DisplayBounds%(num%) Q!ViewerTask%=ViewerTask%(num%) ViewerNum%=ViewerNum%(num%) Display_endredraw(num%) U3DisplaySize%(num%)=DisplaySize%:DisplaySize%=-1 V'Display%(num%)=Display%:Display%=-1 W9DisplayBounds%(num%)=DisplayBounds%:DisplayBounds%=-1 Display_restart CursorOn%= !DisplayIndex%=-1 Display_DefaultZoom(CurrentMain%) Display_NewViewer(CurrentMain%,Viewer%(0,0),Viewer%(0,1),1) Display_wimpred(interhdl%,dxmin%,dymin%,dxmax%,dymax%) Window_ReadState(MainHandle%(interhdl%)) pos%,xoff%,yoff%,item%,ok%,minx%,maxx%,miny%,maxy%,scale,ThisSelected%,sat% ThisSelected%= ShowColours% ShowBackground% "Wimp_SetColour",7 dxmin%,dymin%,dxmax%-dxmin%,dymax%-dymin% scale=Scale%(interhdl%)/100 i$xoff%=X1%-X3%+CentreX(interhdl%) j6yoff%=Y2%-Y3%-MainYWidth%*scale+CentreY(interhdl%) pos%=Display%(interhdl%) l display%=Display%(interhdl%) dispindex%=DisplayIndex% n)dispbounds%=DisplayBounds%(interhdl%) "Wimp_SetColour",7 item%=0 Note$="" dispindex%!(item%*4)<>-1 off%=dispindex%!(item%*4) off%>=0 u3minx%=!(dispbounds%+(item%*16)+0)*scale+xoff%-8 v3miny%=!(dispbounds%+(item%*16)+4)*scale+yoff%-8 w3maxx%=!(dispbounds%+(item%*16)+8)*scale+xoff%+8 x4maxy%=!(dispbounds%+(item%*16)+12)*scale+yoff%+8 y ok%= maxx%dxmax% maxy%dymax% Object_Selected(item%) DisplayClaimed% ItemGreyed%=item% "Wimp_SetColour",4:ThisGreyed%= ThisSelected%= DisplayClaimed% Display_doitem(display%+off%,xoff%,yoff%,scale) ItemGreyed%=item% "Wimp_SetColour",7 *ThisGreyed%= :ThisSelected%= :item%+=1 Selected%>-1 DisplayClaimed% item%=Selected% off%=dispindex%!(item%*4) off%>0 3minx%=!(dispbounds%+(item%*16)+0)*scale+xoff%-8 3miny%=!(dispbounds%+(item%*16)+4)*scale+yoff%-8 3maxx%=!(dispbounds%+(item%*16)+8)*scale+xoff%+8 4maxy%=!(dispbounds%+(item%*16)+12)*scale+yoff%+8 ok%= maxx%dxmax% maxy%0 4minx%=!(dispbounds%+(item%*16)+0)*scale+xoff%-16 4miny%=!(dispbounds%+(item%*16)+4)*scale+yoff%-16 4maxx%=!(dispbounds%+(item%*16)+8)*scale+xoff%+16 5maxy%=!(dispbounds%+(item%*16)+12)*scale+yoff%+16 ok%= maxx%dxmax% maxy%dymax% Display_doitem(display%+off%,xoff%,yoff%,scale) "Wimp_SetColour",7 GridOn% DisplayClaimed% Display_drawgrid(dxmin%,dymin%,dxmax%,dymax%,xoff%,yoff%,scale) ClaimGridOn% DisplayClaimed% MainHandle%(interhdl%)=CurrentMain% Display_draw2Dgrid(dxmin%,dymin%,dxmax%,dymax%,xoff%,yoff%,scale) CursorOn% MainHandle%(interhdl%)=CurrentMain% Display_node(CursorX%,CursorY%,xoff%,yoff%,scale) DisplayPointList%<>-1 points%=!DisplayPointList% loop%=0 points%-1 'x%=!(DisplayPointList%+(loop%*8)+4) 'y%=!(DisplayPointList%+(loop%*8)+8) Display_node2(x%,y%,xoff%,yoff%,scale) Display_doitem(pos%,xoff%,yoff%,scale) b%,b2% b%=Localblock%+&100 b2%=b%+32 !b%=pos% b%!4=xoff% b%!8=yoff% b%!12=scale*(1<<8) b%!16=ShowAllNodes% b%!16+=ShowColours% b%!16+=DepthFadeOn% b%!16+=ThisSelected% b%!16+=ThisGreyed% b%!20=b2% b2%!0=ObjectColTab% b2%!4=DepthFadeStart% b2%!8=DepthFadeGap% A%=b% CodeSpace%+36 Display_updatecursor b%,scale,internal% -internal%= Window_whichmain(CurrentMain%) Window_ReadState(CurrentMain%) b%=Localblock% !b%=CurrentMain% b%!4=X3% b%!8=Y3%-Yw% b%!12=X3%+Xw% b%!16=Y3% scale=Scale%(internal%)/100 $xoff%=X1%-X3%+CentreX(internal%) 6yoff%=Y2%-Y3%-MainYWidth%*scale+CentreY(internal%) "Wimp_UpdateWindow",,b% more% more% Display_node(CursorX%,CursorY%,xoff%,yoff%,scale) "Wimp_GetRectangle",,b% more% Display_node(x%,y%,xo%,yo%,scale) x%=x%*scale+xo% y%=y%*scale+yo% 3,NodeColour% NodeTint% x%-8,y%-8,16,16 x%-10,y%-10,20,20 Display_node2(x%,y%,xo%,yo%,scale) x%=x%*scale+xo% y%=y%*scale+yo% "Wimp_SetColour",11 x%-4,y%-4,8,8 "Wimp_SetColour",7 Display_node3(x%,y%,xo%,yo%,scale) x%+=xo% y%+=yo% "Wimp_SetColour",11 x%-4,y%-4,8,8 "Wimp_SetColour",7 Display_checksize( Display%, disppos%,needed%) disppos%+needed%>Display%+DisplaySize% $needed%=( (needed%/1024)+1)*1024 disppos%-=Display% =Display%= Heap_ExtendBlock(Display%,DisplaySize%+needed%) DisplaySize%+=needed% disppos%+=Display% Display_draw2Dgrid(xmin%,ymin%,xmax%,ymax%,xoff%,yoff%,scale) 7xmin%=(xmin%-xoff%)/scale:ymin%=(ymin%-yoff%)/scale 7xmax%=(xmax%-xoff%)/scale:ymax%=(ymax%-yoff%)/scale "Wimp_SetColour",7 6xmin%=( (xmin%/ClaimGridXSpace%))*ClaimGridXSpace% 9xmax%=( (xmax%/ClaimGridXSpace%+.5))*ClaimGridXSpace% 6ymin%=( (ymin%/ClaimGridYSpace%))*ClaimGridYSpace% 9ymax%=( (ymax%/ClaimGridYSpace%+.5))*ClaimGridYSpace% x%=xmin% xmax% ClaimGridXSpace% y%=ymin% ymax% ClaimGridYSpace% x1%=x%:y1%=y%:z1%=z% x1%=x1%*scale+xoff% y1%=y1%*scale+yoff% x1%-4,y1%: x1%+4,y1% x1%,y1%-4: x1%,y1%+4 Display_drawgrid(xmin%,ymin%,xmax%,ymax%,xoff%,yoff%,scale) 7xmin%=(xmin%-xoff%)/scale:ymin%=(ymin%-yoff%)/scale 7xmax%=(xmax%-xoff%)/scale:ymax%=(ymax%-yoff%)/scale "Wimp_SetColour",7 Display_XYtoXYZNS(0,0,0,xmin%,ymin%,zmin%) Display_XYtoXYZNS(0,0,0,xmax%,ymax%,zmax%) ,xmin%=( (xmin%/GridXSpace%))*GridXSpace% /xmax%=( (xmax%/GridXSpace%+.5))*GridXSpace% ,ymin%=( (ymin%/GridYSpace%))*GridYSpace% /ymax%=( (ymax%/GridYSpace%+.5))*GridYSpace% ,zmin%=( (zmin%/GridZSpace%))*GridZSpace% /zmax%=( (zmax%/GridZSpace%+.5))*GridZSpace% Module_call(ViewerTask%,"dispinfo(ViewerNum%,xi%,yi%,zi%)") xi%=-1 xmin%=0:xmax%=0 yi%=-1 ymin%=0:ymax%=0 zi%=-1 zmin%=0:zmax%=0 zi%=0 zmin%=0:zmax%=0 b%=Localblock%+&100 #Hb%!0=xmin%:b%!4=ymin%:b%!8=zmin%:b%!12=xmax%:b%!16=ymax%:b%!20=zmax% $9b%!24=GridXSpace%:b%!28=GridYSpace%:b%!32=GridZSpace% %Cb%!36=xoff%:b%!40=yoff%:b%!44=scale*(1<<8):b%!48=DisplayMatrix% &(b%!52=DisplayCode%:b%!56=DisplayXyz% ' A%=b% CodeSpace%+40 Object_initialise Files%=0:CurrentFile%=0 File$="Untitled" Leaf$=File$ Changed%= CurrentObj%=-1 CopyBuf%=-1 ObjectList%=-1 ObjectItem%=-1 ObjectColour%=-1 ObjectColTab%=-1 SelectList%=-1 ColDataLen%=60 "OS_File",5,Resource$+"Default" ,,,,len% 8'ObjectDefault%= Heap_GetBlock(len%) "OS_File",16,Resource$+"Default",ObjectDefault%,0 Object_dostartup "OS_GetEnv" "OS_ReadArgs","BASIC,quit/k,load/k,-help/k,-chain/k,file/k",b%,Block%,256 (Block%!20)<>0 StartEditing Object_load(Block%!20) MainOn%= Object_restart E3ObjectList%= Heap_ExtendBlock(ObjectList%,1024) F6ObjectItem%= Heap_ExtendBlock(ObjectItem%,10*1024) ObjectSize%=10*1024 HAObjectColour%= Heap_ExtendBlock(ObjectColour%,30*ColDataLen%) I7ObjectColTab%= Heap_ExtendBlock(ObjectColTab%,40*4) J4SelectList%= Heap_ExtendBlock(SelectList%,100*4) SelectPos%=0 LastColour%=0 Objects%=0:Obend%=0 N$dummy%= Object_NewObject("Root") Object_NewColour("Default",0,0,0,0,0,0,0,0,0,0,0,0,1,0,0) Object_BuildColourTable CurrentObj%=dummy% File$="Untitled" Leaf$=File$ Changed%= Selected%=-1 Select_Type%=-1 Object_endedit Heap_FreeBlock(ObjectList%) Heap_FreeBlock(ObjectItem%) Heap_FreeBlock(ObjectColour%) Heap_FreeBlock(ObjectColTab%) Heap_FreeBlock(SelectList%) Heap_FreeBlock(CopyBuf%) Object_loaddefault b"progver%= (ProgVersion*100+.5) c"filever%= (FileVersion*100+.5) b%=ObjectDefault% majorver%=b%!8 minorver%=b%!12 dum%=b%?8 b%?8=&0D:id$=$b% b%?8=dum% id$<>"3DEditor" 17,"Default file is not a 3DEditor file (File ID string incorrect)" minorver%>progver% dum%= 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","","") majorver%>filever% 17,"The default file is from a newer version of 3DEditor and cannot be loaded by this version" Obend%=b%!16 majorver%>=201 zoom%=b%!28 Viewer_Xpos%=b%!32 Viewer_Ypos%=b%!36 Viewer_Zpos%=b%!40 majorver%>=203 u!LastColour%=b%!20/ColDataLen% collen%=b%!20 b%+=64 Objects%=!b% z b%+=4 b2%=ObjectList% Objects%*16+4 b2%!l%=b%!l% b%+=Objects%*16 ObjectSize%=Obend%+1024 :ObjectItem%= Heap_ExtendBlock(ObjectItem%,ObjectSize%) b2%=ObjectItem% Obend%+4 b2%!l%=b%!l% b%+=Obend% AObjectColour%= Heap_ExtendBlock(ObjectColour%,30*ColDataLen%) majorver%>=203 b2%=ObjectColour% collen%+4 b2%!l%=b%!l% b%+=collen% Changed%= File$="Untitled" Leaf$="Untitled" Window_UpdateTitle Selected=-1 Select_Tool%=-1 ObjectAtEnd%=-1 Object_BuildColourTable Display_RedrawAll Object_load(name%) b%,dum% handle%= GetStr(name%)) b%=Localblock% "OS_GBPB",4,handle%,b%,64 "progver%= (ProgVersion*100+.5) "filever%= (FileVersion*100+.5) majorver%=b%!8 minorver%=b%!12 b%?8=&0D:id$=$b% id$<>"3DEditor" #handle%: 17,"File is not a 3DEditor file (File ID string incorrect)" minorver%>progver% dum%= 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","","") majorver%>filever% #handle%: 17,"This file is from a newer version of 3DEditor and cannot be loaded by this version" Obend%=b%!16 majorver%>=201 zoom%=b%!28 Viewer_Xpos%=b%!32 Viewer_Ypos%=b%!36 Viewer_Zpos%=b%!40 majorver%>=203 !LastColour%=b%!20/ColDataLen% collen%=b%!20 "OS_GBPB",4,handle%,b%,4 Objects%=!b% "OS_GBPB",4,handle%,ObjectList%,Objects%*16 ObjectSize%=Obend%+1024 :ObjectItem%= Heap_ExtendBlock(ObjectItem%,ObjectSize%) "OS_GBPB",4,handle%,ObjectItem%,Obend% majorver%<204 Object_wordalign AObjectColour%= Heap_ExtendBlock(ObjectColour%,30*ColDataLen%) majorver%>=203 "OS_GBPB",4,handle%,ObjectColour%,collen% #handle% Changed%= File$= GetStr(name%) Leaf$= Leaf(File$) Window_UpdateTitle Selected%=-1 Select_Tool%=-1 ObjectAtEnd%=-1 Object_BuildColourTable Display_RedrawAll Object_merge(name%) handle%= ($name%) b%=Localblock% "OS_GBPB",4,handle%,b%,64 "progver%= (ProgVersion*100+.5) "filever%= (FileVersion*100+.5) majorver%=b%!8 minorver%=b%!12 b%?8=&0D:id$=$b% id$<>"3DEditor" #handle%: 17,"File is not a 3DEditor file (File ID string incorrect)" minorver%>progver% dum%= 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","","") majorver%>filever% #handle%: 17,"This file is from a newer version of 3DEditor and cannot be loaded by this version" majorver%>=203 collen%=b%!20 obsize%=b%!16 "OS_GBPB",4,handle%,b%,4 newobjects%=!b% "OS_GBPB",4,handle%,ObjectList%+Objects%*16,newobjects%*16 ObjectSize%=Obend%+obsize% :ObjectItem%= Heap_ExtendBlock(ObjectItem%,ObjectSize%) "OS_GBPB",4,handle%,ObjectItem%+Obend%,obsize% majorver%<204 Object_wordalign majorver%>=203 "OS_GBPB",4,handle%,ObjectColour%+LastColour%*ColDataLen%,collen% #handle% sizeinc%=Obend% Obend%+=obsize% loop%=Objects% Objects%+newobjects%-1 $ObjectList%!(loop%*16)+=sizeinc% loop2%=0 ObjectList%?(loop%*16+4)-1 3pos%= Object_FindItem(loop%,loop2%)+ObjectItem% type%=?pos% type%=3 pos%!44+=Objects% pos%?1+=LastColour% loop2% loop% Objects%+=newobjects% Changed%= ObjectAtEnd%=-1 Window_UpdateTitle majorver%>=203 LastColour%+=collen%/ColDataLen% Object_BuildColourTable Object_save(name$,safe%) buffer% buffer%=Localblock% SaveType%=0 SaveType%=1 Obend%=0 loop%=0 Objects%-1 1Obend%+=!(ObjectList%!(loop%*16)+ObjectItem%) handle%= (name$) $buffer%="3DEditor" #buffer%!8= (FileVersion*100+.5) $buffer%!12= (ProgVersion*100+.5) buffer%!16=Obend% &buffer%!20=LastColour%*ColDataLen% buffer%!24=-1 buffer%!28=Scale% buffer%!32=Viewer_Xpos% buffer%!36=Viewer_Ypos% buffer%!40=Viewer_Zpos% loop%=44 buffer%!loop%=0 loop% "OS_GBPB",2,handle%,buffer%,64 !buffer%=Objects% "OS_GBPB",2,handle%,buffer%,4 "OS_GBPB",2,handle%,ObjectList%,Objects%*16 "OS_GBPB",2,handle%,ObjectItem%,Obend% "OS_GBPB",2,handle%,ObjectColour%,LastColour%*ColDataLen% #handle% "OS_File",18,name$,&050 safe%<>-1 Changed%= File$=name$ Leaf$= Leaf(File$) Window_UpdateTitle Object_StartExport(name$,FileType%,SaveType%-2) "Wimp_CreateMenu",,-1 Object_wordalign loop%,loop2%,loop3%,pos% loop%=0 Objects%-1 -pos%=ObjectList%!(loop%*16)+ObjectItem%+4 added%=0 Object_checksize(ObjectItem%,pos%,ObjectList%?(loop%*16+4)*2) #-pos%=ObjectList%!(loop%*16)+ObjectItem%+4 loop2%=0 ObjectList%?(loop%*16+4)-1 loop3%=Obend%+ObjectItem% pos%+2 ?(loop3%+2)=?loop3% Obend%+=2 added%+=2 pos%?2=0 pos%?3=0 datalen%=pos%!40 pos%+=44+datalen% /1!(ObjectList%!(loop%*16)+ObjectItem%)+=added% loop2%=0 Objects% ObjectList%!(loop2%*16)>ObjectList%!(loop%*16) 2#ObjectList%!(loop2%*16)+=added% Object_toend(obj%) dum%,start%,len%,end%,copy%,loc%,loop% ObjectAtEnd%<>obj% "Hourglass_On" ;,start%=ObjectList%!(obj%*16)+ObjectItem% len%=!start% Obend%=0 loop%=0 Objects%-1 ?1Obend%+=!(ObjectList%!(loop%*16)+ObjectItem%) Object_checksize(ObjectItem%,start%,Obend%+len%+1024) end%=Obend%+ObjectItem% copy%=0 end%!copy%=start%!copy% copy%=start% !copy%=copy%!len% I start%=ObjectList%!(obj%*16) loop%=0 Objects% loc%=ObjectList%!(loop%*16) loc%>start% ObjectList%!(loop%*16)-=len% N%ObjectList%!(obj%*16)=Obend%-len% "Hourglass_Off" ObjectAtEnd%=obj% Object_itemtoend(obj%, itm%) itm%<>ObjectList%?(obj%*16+4)-1 flag%= CopyBuf%<>-1 flag%= X*CopyBufInt%= Heap_GetBlock(CopyBuf%!4) len%=CopyBuf%!4 loop%=0 [$CopyBufInt%!loop%=CopyBuf%!loop% ^,itm2%= Object_CloneItem(obj%,itm%,0,0,0) Object_DeleteItem(obj%,itm%) itm%=itm2%-1 flag% len%=CopyBufInt%!4 c-CopyBuf%= Heap_ExtendBlock(CopyBuf%,len%) loop%=0 e$CopyBuf%!loop%=CopyBufInt%!loop% Object_checksize( ObjectItem%, pointer%,needed%) "OS_Heap",6,Heapd%,ObjectItem% ,,,os% pointer%+needed%+1024>ObjectItem%+os% pointer%-=ObjectItem% nBObjectItem%= Heap_ExtendBlock(ObjectItem%,ObjectSize%+needed%) ObjectSize%=os%+needed% pointer%+=ObjectItem% Heap_initialise Heapd%= "Wimp_SlotSize",-1,-1 Appsize% Heapsize%=32*1024 "Wimp_SlotSize",Appsize%+Heapsize%,-1 "XOS_Heap",0,Heapd%,,Heapsize% 17,"Not enough memory to initialise heap" Heap_extendheap heapfull%,new% "XWimp_SlotSize",Appsize%+Heapsize%+32*1024,-1 new%;heapfull% ~ heapfull%=((heapfull% 1)=1) new%=Appsize%+Heapsize% heapfull%= heapfull% Heapsize%+=32*1024 "OS_Heap",5,Heapd%,,32*1024 =heapfull% Heap_loose "Wimp_SlotSize",Appsize%+32*1024,-1 HeapSize%=32*1024 Module_initialise mptr% Module$(50) mptr%=1 Modulepath$=Path$+"Modules." find_modules(Path$+"Modules",mptr%) NoModules%=mptr%-1 Module_findprefix Module_initsprites Module_initsystem find_modules(findpath$, mptr%) found%,at%,loop%,clash% at%=0 at%<>-1 clash%= "OS_GBPB",10,findpath$,Block%,1,at%,&100,"*" ,,,found%,at% found% Block%!16=2 module$= GetStr(Block%+20) loop%=1 mptr% module$=Module$(loop%) clash%= clash% Module$(mptr%)=module$:mptr%+=1 Module_findprefix loop%,loop2% Prefix$(NoModules%),Data%(NoModules%),Version$(NoModules%),Flags%(NoModules%),Aware%(NoModules%) loop%=0 NoModules% &Prefix$(loop%)= Lc(Module$(loop%)) loop2%=0 loop% Prefix$(loop%)=Prefix$(loop2%) loop%<>loop2% 0,"Clash of prefix between modules '"+Module$(loop%)+"' and '"+Module$(loop2%)+"'" Module_initsprites spritesize%,loop%,len% "OS_File",17,Resource$+"Sprites"+SpriteMode$ ,,,,spritesize% NewLookLoaded% "OS_File",17,Resource$+"NoNew"+SpriteMode$ ,,,,len% spritesize%+=len% loop%=1 NoModules% "OS_File",17,Modulepath$+Module$(loop%)+".Sprites"+SpriteMode$ found%,,,,len% found%=0 "OS_File",17,Modulepath$+Module$(loop%)+".Sprites22" found%,,,,len% found%=0 "OS_File",17,Modulepath$+Module$(loop%)+".Sprites" found%,,,,len% found%<>0 spritesize%=spritesize%+len% spritesize%+=16 WindowSprites%spritesize% !WindowSprites%=spritesize% WindowSprites%!4=0 WindowSprites%!8=16 WindowSprites%!12=16 Module_initsystem Viewer$(10,1),Viewer%(10,2):ViewerPtr%=0 Export$(10),Export%(10,2):ExportPtr%=0 SelectorTask%=-1 Module_loaddata loop%,l1%,l2%,map%(),p$(),map2%() map%(NoModules%+1),map2%(NoModules%+1),p$(50) l1%=1 NoModules% "OS_File",17,Modulepath$+Module$(l1%)+".Sprites"+SpriteMode$ found% found%<>0 "OS_SpriteOp",&10B,WindowSprites%,Modulepath$+Module$(l1%)+".Sprites"+SpriteMode$ "OS_File",17,Modulepath$+Module$(l1%)+".Sprites22" found% found%<>0 "OS_SpriteOp",&10B,WindowSprites%,Modulepath$+Module$(l1%)+".Sprites22" "OS_File",17,Modulepath$+Module$(l1%)+".Sprites" found% found%<>0 "OS_SpriteOp",&10B,WindowSprites%,Modulepath$+Module$(l1%)+".Sprites" Modulepath$+Module$(l1%)+".Module" /Data%(l1%)= ("FN"+Prefix$(l1%)+"_priority") 7startup$= ("FN"+Prefix$(l1%)+"_initialise(Block%)") map%(l1%)=l1% Module_decode1(startup$,l1%) p$()=Module$() l1%=1 NoModules% l2%=1 NoModules%-1 Data%(l2%)>Data%(l2%+1) Data%(l2%),Data%(l2%+1) Module$(l2%),Module$(l2%+1) Prefix$(l2%),Prefix$(l2%+1) map%(l2%),map%(l2%+1) Aware%(l2%),Aware%(l2%+1) l1%=0 NoModules% l2%=0 l1%<>map%(l2%) l2%+=1 map2%(l1%)=l2% l1%=0 WinPtr% task%=Windows%(l1%,1) Windows%(l1%,1)=map2%(task%) l1%=0 ChoicePtr% task%=Choices%(l1%) Choices%(l1%)=map2%(task%) loop%=1 NoModules% 9startup$= ("FN"+Prefix$(loop%)+"_initialise(Block%)") Module_decode2(startup$,loop%,0) loop% Module_decode1(startup$,moduleid%) fdecode$="type/k,items/k,windows/s,menus/s,variables/s,version/k,info/s,atleast/k,toggle/s,aware/k" d%=Moduleblock% "OS_ReadArgs",decode$,startup$,d%,&400 (d%!28<>0) GetStr(d%!28)) ver2= (version$) ver20) Wimp_moduledata(Module$(moduleid%), GetStr(d%!20)) Wimp_moduledata(Module$(moduleid%),"1.00") (d%!36<>0) Aware%(moduleid%)=( GetStr(d%!36))*100 WimpVersion%<310 "Wimp_OpenTemplate",,Modulepath$+Module$(moduleid%)+".Templates" "Wimp_OpenTemplate",,Modulepath$+Module$(moduleid%)+".TempOs3" Module_call(moduleid%,"windows(IndrPos%,moduleid%)") "Wimp_CloseTemplate" Module_decode2(startup$,moduleid%,add%) d%,decode$,type$,items,at%,windows%,dummy%,loop%,sprite$,name$,extra% d%=Moduleblock% extra%= fdecode$="type/k,items/k,windows/s,menus/s,variables/s,version/k,info/s,atleast/k,toggle/s,aware/k" "OS_ReadArgs",decode$,startup$,d%,&400 6Flags%(moduleid%)=Flags%(moduleid%) ((d%!32<>0) (d%!0<>0) type$= GetStr(d%!0) (d%!4<>0) items= GetStr(d%!4)) (d%!20<>0) !&Version$(moduleid%)= GetStr(d%!20) #$Version$(moduleid%)="None given" Data%(moduleid%)=d%!24 type$ "viewer" at%=Block% loop%=1 items name$= StrAndPos(at%) Viewer$(ViewerPtr%,0)=name$ Menu_AddHotItem("Viewer",moduleid%,loop%,name$,-1,0,MenuNormal%,ViewerPtr%+&191) -#Viewer%(ViewerPtr%,0)=moduleid% Viewer%(ViewerPtr%,1)=loop% Viewer%(ViewerPtr%,2)=!at% info%=!at% at%+=4 info% %0011<>0 sprite$= StrAndPos(at%) 4!Viewer$(ViewerPtr%,1)=sprite$ Tool_AddTool("Main",sprite$,moduleid%,loop%+add%) info% %1000<>0 extra%= ViewerPtr%+=1 "viewtool" at%=Block% loop%=1 items sprite$= StrAndPos(at%) Tool_AddTool("Main",sprite$,moduleid%,loop%+add%) "creator","editor" at%=Block% loop%=1 items sprite$= StrAndPos(at%) Tool_AddTool("Main",sprite$,moduleid%,loop%+add%) info%=!at% at%+=4 "selector" SelectorTask%<>-1 0,"Attempt to load more than one selector module" at%=Block% sprite$= StrAndPos(at%) N=SelectorButton%= Tool_AddTool("Main",sprite$,moduleid%,1) SelectorFlags%=!at% SelectorTask%=moduleid% "export" at%=Block% loop%=1 items string$= StrAndPos(at%) U#Export%(ExportPtr%,0)=moduleid% Export%(ExportPtr%,1)=loop% W%Export%(ExportPtr%,2)=!at%:at%+=4 X'Export$(ExportPtr%)= StrAndPos(at%) Menu_AddItem("Export",0,-1,string$,SaveHandle%,%1000,MenuNormal%) ExportPtr%+=1 "utility" 17,"Unknown module type '"+type$+"'" d%!12 Module_call(moduleid%,"menus(moduleid%)") d%!16 Module_call(moduleid%,"variables") extra% c9startup$= Module_call(moduleid%,"additional(Block%)") Module_decode2(startup$,moduleid%,items) Module_call(id%,proc$) dummy%,CurrentTask% CurrentTask%=id% id%>0 id%<20 dummy%= ("FN"+Prefix$(id%)+"_"+proc$) CurrentTask%=0 Module_call(id%,proc$) CurrentTask% CurrentTask%=id% id%>0 id%<20 ("FN"+Prefix$(id%)+"_"+proc$) CurrentTask%=0 Module_broadcast(proc$) loop%,dum%,CurrentTask% loop%=1 NoModules% CurrentTask%=loop% w)dum%= ("FN"+Prefix$(loop%)+"_"+proc$) Drag_initialise Dragging%= DragType%=-1 DragUpdate%= ~#DragSpace%= Heap_GetBlock(1024) DragPointer%=0 Drag_update b%=Localblock% "Wimp_GetPointerInfo",,b% Module_call(DragTask%,"dragupdate(DragSubType%,b%!0,b%!4,-1)") Drag_redraw(opt%) b%=Localblock% "Wimp_GetPointerInfo",,b% newX%=b%!0 newY%=b%!4 Display_ConvXY(newX%,newY%) DisplayClaimed% Display_XYtoXYZ(0,0,0,newX%,newY%,newZ%) Display_XYZtoXY(newX%,newY%,newZ%) Display_SnapToClaimedGrid(newX%,newY%) Display_Screen(newX%,newY%) newX%<>DragItemX% newY%<>DragItemY% !b%=CurrentMain% b%!4=X3% b%!8=Y3%-Yw% b%!12=X3%+Xw% b%!16=Y3% xoff%=X1%-X3%+CentreX 0yoff%=Y2%-Y3%-MainYWidth%*Scale%/100+CentreY "Wimp_UpdateWindow",,b% more% more% Drag_doit(xoff%,yoff%,DragItemX%,DragItemY%) Dragging% Drag_doit(xoff%,yoff%,newX%,newY%) "Wimp_GetRectangle",,b% more% DragItemX%=newX% DragItemY%=newY% DragUpdate% Drag_update Drag_doit(xoff%,yoff%,xat%,yat%) ptr%=DragSpace% 3,DragColour% DragTint% !ptr%<>-1 type%=!ptr% x%=ptr%!4 y%=ptr%!8 x%<>&FFFF x%=x%*Scale%/100+xoff% x%=xat% y%<>&FFFF y%=y%*Scale%/100+yoff% y%=yat% ptr%+=12 type% x%,y% 8+5,x%,y% 3,NodeColour% NodeTint% x%-8,y%-8,16,16 x%-10,y%-10,20,20 3,DragColour% DragTint% 3,RedColour% RedTint% x%-4,y%-4,8,8 3,DragColour% DragTint% Drag_updatebar x%,win%,icon%,width%,num% b%=Localblock% "Wimp_GetPointerInfo",,b% x%=!b% win%=DragItemX% icon%=DragItemY% !b%=win% "Wimp_GetWindowState",,b% x%-=b%!4-b%!20 !b%=win% b%!4=icon% "Wimp_GetIconState",,b% x%-=b%!8 width%=b%!16-b%!8 num%= $(b%!32),3)) DragData%(num%,0)<> (x%/width%*100) #DragData%(num%,0)=x%/width%*100 b%!4=win% "Wimp_UpdateWindow",,b%+4 more% more% Wimp_drawdragbar(win%,icon%) "Wimp_GetRectangle",,b%+4 more% DragUpdate% Module_call(DragTask%,"dragupdate(DragSubType%,DragData%(num%,0),-1,-1)") GetStr(pos%) string$ ?pos%>=32 string$=string$+ ?pos% pos%+=1 =string$ StrAndPos( pos%) string$ ?pos%>=32 string$=string$+ ?pos% pos%+=1 pos%+=1 =string$ PutStr( pos%,string$) $pos%=string$ pos%+= (string$) ?pos%=0 pos%+=1 Lc(s$) l%,r$,c$ r$="" s$,l%,1) c$>="a" c$<="z"r$=r$+c$ c$>="A" c$<="Z"r$=r$+ c$+32) SysVar(var$) len%,b% b%=Localblock% "OS_ReadVarVal",var$,b%,255 ,,len% b%?len%=&0D Round(num,places%) text$ text$= text$,places%)) Leaf(s$) s$,":")>0 s$,":")+1) s$,".")>0 s$,".")+1) Heap_GetBlock(size%) loc%,ok%,heapfull%,largest% heapfull%= "OS_Heap",1,Heapd% ,,largest% largest%>=size% "OS_Heap",2,Heapd%,,size% ,,loc% ok%= heapfull%= Heap_extendheap heapfull% heapfull% 17,"No more memory" =loc% Heap_ExtendBlock(loc%,size%) ok%,heapfull%,newloc%,currentsize% loc%<=0 Heap_GetBlock(size%) heapfull%= "OS_Heap",6,Heapd%,loc% ,,,currentsize% size%-=currentsize% "XOS_Heap",4,Heapd%,loc%,size% ,,newloc%;ok% ok%=((ok% 1)=0) heapfull%= Heap_extendheap heapfull% heapfull% 17,"No more memory" "XOS_Heap",5,Heapd%,loc%,-Heapsize% ,,,size% Heapsize%-=size% "Wimp_SlotSize",Appsize%+Heapsize%,-1 =newloc% Heap_FreeBlock( loc%) loc%>0 "OS_Heap",3,Heapd%,loc% "XOS_Heap",5,Heapd%,loc%,-Heapsize% ,,,size% Heapsize%-=size% "Wimp_SlotSize",Appsize%+Heapsize%,-1 loc%=-1 Menu_BuildAlterable(name$,title$,width%,size%) Menu_BuildMenu(name$,title$,width%) 41MenuData%(MenuPtr%-1,0)= Heap_GetBlock(size%) MenuData%(MenuPtr%-1,1)=1 Menu_BuildMenu(name$,title$,width%) addr% Menu_find(name$)<>-1 0,"Repeated menu name '"+name$+"'" MenuPtr%=MaxMenus%+1 0,"No more space for menus" Menu$(MenuPtr%)=name$ addr%=Menus%(MenuPtr%,0,0) $addr%=title$ addr%?12=7 addr%?13=2 addr%?14=7 addr%?15=0 addr%!16=16+(16*width%) addr%!20=40 addr%!24=0 E MenuAddr%(MenuPtr%)=addr%+28 MenuData%(MenuPtr%,0)=-1 MenuPtr%+=1 Menu_Clear(name$) menu%= Menu_find(name$) MenuData%(menu%,0)=-1 17,"Menu "+name$+" is not alterable" menu%=-1 17,"Menu "+name$+" does not exist" M)MenuAddr%(menu%)=Menus%(menu%,0,0)+28 Menus%(menu%,0,1)=0 MenuData%(menu%,1)=1 Menu_End(name$) menu%,loop%,at%,data% menu%= Menu_find(name$) menu%=-1 17,"Menu "+name$+" does not exist" U;!(MenuAddr%(menu%)-24)=!(MenuAddr%(menu%)-24) MenuLast% len%=MenuData%(menu%,2) W(!(Menus%(menu%,0,0)+16)=16+(16*len%) loop%=0 Menus%(menu%,0,1)-1 Y%at%=loop%*24+28+Menus%(menu%,0,0) data%=at%!12 str$=$data% ?(data%-1)<>255 hot$=$(data%+?(data%-1)+1) hot$="" ]-str$=str$+ len%- (str$)- (hot$)," ")+hot$ $data%=str$ Menu_ToggleHot menu%=0 MenuPtr%-1 menu%=-1 17,"Menu "+name$+" does not exist" len%=0 loop%=0 Menus%(menu%,0,1)-1 f%at%=loop%*24+28+Menus%(menu%,0,0) data%=at%!12 ?(data%-1)<>255 ShowHot% ?(data%+?(data%-1))=32 ?(data%+?(data%-1))=&0D len%< ($data%) len%= ($data%) q(!(Menus%(menu%,0,0)+16)=16+(16*len%) Menu_AddHotItem(name$,task%,num%,option$,win%,flags1%,flags2%,hot%) menu%,menudata% menu%= Menu_find(name$) menu%=-1 17,"Menu "+name$+" does not exist" MenuData%(menu%,0)=-1 y&menudata%=MenuData%+MenuDataPtr%+1 {5menudata%=MenuData%(menu%,0)+MenuData%(menu%,1)+1 option$= option$,20) addr%=MenuAddr%(menu%) addr%!0=flags1% addr%!4=win% addr%!8=flags2% addr%!12=menudata% addr%!16=-1 addr%!20=29 $menudata%=option$ ?(menudata%-1)= (option$) len%= (option$) hot%<>-&FFFF 3$(menudata%+ (option$)+1)= Menu_DecodeHot(hot%) $len%+=2+ Menu_DecodeHot(hot%)) ?(menudata%-1)=-1 MenuAddr%(menu%)=addr%+24 Menus%(menu%,0,1)+=1 item%=Menus%(menu%,0,1) Menus%(menu%,item%,0)=task% Menus%(menu%,item%,1)=num% Menus%(menu%,item%,2)=hot% MenuData%(menu%,0)=-1 MenuDataPtr%+=30 MenuData%(menu%,1)+=30 len%>MenuData%(menu%,2)MenuData%(menu%,2)=len% Menu_AddItem(name$,task%,num%,option$,win%,flags1%,flags2%) Menu_AddHotItem(name$,task%,num%,option$,win%,flags1%,flags2%,-&FFFF) Menu_AddSubMenu(menu$,option$,submenu$,flags1%,flags2%) Menu_AddItem(menu$,-1, Menu_find(submenu$),option$, Menu_Handle(submenu$),flags1%,flags2%) Menu_AddHotItem(name$,task%,num%,option$,win%,flags1%,flags2%,hot%) Menu_AddHotItem(name$,task%,num%,option$,win%,flags1%,flags2%,hot%) $=Menus%( Menu_find(name$),0,1)-1 Menu_AddItem(name$,task%,num%,option$,win%,flags1%,flags2%) Menu_AddHotItem(name$,task%,num%,option$,win%,flags1%,flags2%,-&FFFF) $=Menus%( Menu_find(name$),0,1)-1 Menu_AddSubMenu(menu$,option$,submenu$,flags1%,flags2%) Menu_AddItem(menu$,-1, Menu_find(submenu$),option$, Menu_Handle(submenu$),flags1%,flags2%) $=Menus%( Menu_find(name$),0,1)-1 Menu_Handle(menu$) menu% menu%= Menu_find(menu$) menu%=-1 17,"Cannot find menu '"+menu$+"'" =Menus%(menu%,0,0) Menu_Open(name$,x%,y%) "Wimp_CreateMenu",, Menu_Handle(name$),x%-64,y% MenuId%= Menu_find(name$) Menu_OpenIcon(win%,icon%,name$) b%,x%,y% b%=Localblock% !b%=win% b%!4=icon% "Wimp_GetIconState",,b% x%=b%!16 y%=b%!12 Window_ReadState(win%) x%+=X1%-X3% y%+=Y2%-Y3% Menu_Open(name$,x%+64,y%) Menu_Tick(name$,item%,opt%) menu%,addr% addr%= Menu_Handle(name$) addr%+=28+(24*item%) 0:!addr%=!addr% 1:!addr%=!addr% 2:!addr%=!addr% 17,"Unknown operation sent to Menu_Tick" Menu_GreyOut(name$,item%,opt%) menu%,addr%,hot% menu%= Menu_find(name$) +addr%= Menu_Handle(name$)+28+(24*item%) hot%=Menus%(menu%,item%+1,2) 0:addr%!8=addr%!8 (1<<22) hot%<0 hot%=-hot% 1:addr%!8=addr%!8 (1<<22) hot%>0 hot%=-hot% 2:addr%!8=addr%!8 (1<<22) hot%=-hot% 17,"Unknown operation sent to Menu_GreyOut" Menus%(menu%,item%+1,2)=hot% Menu_DecodeHot(hot%) hot%<32 dec$="^"+ (hot%+64):hot%=-1 hot%=127 dec$="Delete":hot%=-1 hot%>=&180 hot%<=&18F dec$="":hot%-=&180 hot%>=&190 hot%<=&19F dec$= 139:hot%-=&190 hot%>=&1A0 hot%<=&1AF dec$="^":hot%-=&1A0 hot%>=&1B0 hot%<=&1BF dec$= 139+"^":hot%-=&1AF hot%>=&1CA hot%<=&1CD dec$="":hot%-=&100 hot%>=&1DA hot%<=&1DD dec$= 139:hot%-=&110 hot%>=&1EA hot%<=&1ED dec$="^":hot%-=&120 hot%>=&1FA hot%<=&1FD dec$= 139+"^":hot%-=&130 hot%=0 dec$+="Print" hot%>0 hot%<&A dec$+="F"+ hot%=&A dec$+="Tab" hot%=&B dec$+="Copy" hot%>=&CA hot%<=&CC dec$+="F"+ (hot%-&C0) hot%=&CD dec$+="Insert" dec$="" 17,"Cannot decode character number "+ =dec$ Wimp_Naughty(mess$) Adum%= Wimp_Error(1,"Message from 3D Editor",mess$,"OK","","") Wimp_SetCaret(win%,icon%) "Wimp_SetCaretPosition",win%,icon%,,,-1, Icon_Read(win%,icon%)) Wimp_LoseCaret "Wimp_SetCaretPosition",CurrentMain%,-1 Wimp_NewPointer(ptr$,x%,y%) %Mask%=Mask% %11111111111111001111 Pointer$=ptr$ PtrActiveX%=x% PtrActiveY%=y% Wimp_OldPointer(ptr$) Pointer$=ptr$ Pointer$="" *POINTER 1 Activewin%=0 %Mask%=Mask% %00000000000000110000 Wimp_ModeSize( b%=Localblock% 3b%!0=4:b%!4=5:b%!8=11:b%!12=12:b%!16=3:b%!20=-1 "OS_ReadVduVariables",b%,b% x%=((b%!8)+1)<<(b%!0) y%=((b%!12)+1)<<(b%!4) Window_CreateYbox(name$, indr%,block%,task%) handle%,icons% "Wimp_LoadTemplate",,block%,indr%,IndrEnd%,Fonts%,name$,0 ,,indr% block%!64=WindowSprites% icons%=block%!84 !yboxicons%=YboxSpace%!84*32-4 loop%=0 yboxicons% -!(block%+loop%+88)=!(YboxSpace%+loop%+88) Window_dofancyicons(icons%,block%) "Wimp_CreateWindow",,block% handle% Windows%(WinPtr%,0)=handle% Windows%(WinPtr%,1)=task% WinPtr%+=1 !Localblock%=handle% "Wimp_GetWindowState",,Localblock% "Wimp_OpenWindow",,Localblock% "Wimp_CloseWindow",,Localblock% Icon_GreyOut(handle%,1,1) Icon_GreyOut(handle%,13,1) =handle% Window_Create(name$, indr%,block%,task%) handle%,icons% "Wimp_LoadTemplate",,block%,indr%,IndrEnd%,Fonts%,name$,0 ,,indr% block%!64=WindowSprites% icons%=block%!84 name$,"ybox") block%!88=-2 block%!92=-136 block%!96=22 block%!100=-36 block%!152=0 block%!156=-36 block%!160=24 block%!164=0 Window_dofancyicons(icons%,block%) "Wimp_CreateWindow",,block% handle% name$<>"Main" name$<>"tool" Windows%(WinPtr%,0)=handle% Windows%(WinPtr%,1)=task% WinPtr%+=1 !Localblock%=handle% "Wimp_GetWindowState",,Localblock% "Wimp_OpenWindow",,Localblock% "Wimp_CloseWindow",,Localblock% =handle% Wimp_Error(size%,name$,error$,but1$,but2$,but3$) b%,width%,height%,mx%,my%,x%,y%,len%,ptr%,a%,word$,xt%,yt%,loop%,clicked%,xm%,ym%,but%,line$() line$(5) b%=Errblock% width%=758:height%=450 Wimp_ModeSize(mx%,my%) L x%=mx%-width%:y%=my%-height% x%=x%/2:y%=y%/2 x%,y%,width%,height% "Wimp_SetColour",7 x%,y%,width%-4,height%-4 Wimp_shadowbox(x%+2,y%+2,width%-4,height%-4,0,1) "Wimp_SetColour",11 x%+12,y%+12,width%-24,height%-24 Wimp_shadowbox(x%+40,y%+40,500,350,1,0) Wimp_shadowbox(x%+44,y%+44,492,342,0,1) Wimp_shadowbox(x%+552,y%+40,180,78,1,12) Wimp_shadowbox(x%+562,y%+50,160,58,0,1) size%=2 size%=3 Wimp_shadowbox(x%+562,y%+140,160,58,0,1) size%=3 Wimp_shadowbox(x%+562,y%+230,160,58,0,1) len%= (name$)*16 "Wimp_SetColour",1 x%+60,y%+366,len%+20,32 "Wimp_SetColour",7 x%+70,y%+402: name$: x%+560+(160- but1$*16)/2,y%+94: but1$: size%=2 size%=3 x%+560+(160- but2$*16)/2,y%+184: but2$: size%=3 x%+560+(160- but3$*16)/2,y%+274: but3$: ptr%=0 error$<>"" error$," ") linelen%=28 a%<>0 word$= error$,a%) (word$)>linelen% a%=linelen%:word$= error$,a%) m error$= error$, (error$)-a%) line$(ptr%)+ word$>linelen% ptr%+=1 line$(ptr%)+=word$ (error$)>linelen% word$= error$,linelen%) s&error$= error$, (error$)-linelen%) word$=error$ error$="" (line$(ptr%))+ (word$)>linelen% ptr%+=1 line$(ptr%)+=word$ |#yt%=y%+350-((310-ptr%*32)/2)+32 loop%=0 ~(xt%=(480- (line$(loop%))*16)/2+x%+50 xt%,yt% line$(loop%): yt%-=32 clicked%=-1 xm%,ym%,but% but%<>0 $xt%=xm%-(x%+552):yt%=ym%-(y%+40) xt%>0 xt%<180 yt%>0 yt%<78 Wimp_shadowbox(x%+562,y%+50,160,58,1,14) x%+560+(160- but1$*16)/2,y%+94: but1$: clicked%=1 %xt%=xm%-(x%+562):yt%=ym%-(y%+140) xt%>0 xt%<160 yt%>0 yt%<58 (size%=2 size%=3) Wimp_shadowbox(x%+562,y%+140,160,58,0,1) x%+560+(160- but2$*16)/2,y%+184: but2$: clicked%=2 yt%=ym%-(y%+230) xt%>0 xt%<160 yt%>0 yt%<58 size%=3 Wimp_shadowbox(x%+562,y%+230,160,58,0,1) x%+560+(160- but3$*16)/2,y%+274: but3$: clicked%=3 clicked%<>-1 (0)=13 clicked%=-1 clicked%=1 "Wimp_ForceRedraw",-1,x%,y%,x%+width%+4,y%+height%+4 0,0,mx%,my% =clicked% Window_Writeable(handle%,writestart%,writeend%,ok%) #Writeable%(WritePtr%,0)=handle% 'Writeable%(WritePtr%,1)=writestart% %Writeable%(WritePtr%,2)=writeend% Writeable%(WritePtr%,3)=ok% WritePtr%+=1 Window_ActiveIcon(win%,list%) Activeblock%!ActivePtr%=win% ActivePtr%+=4 "Activeblock%!ActivePtr%=!list% list%+=4 ActivePtr%+=4 !(list%-4)=-1 Window_ReadState(win%) blk%=Localblock%+&100 !blk%=win% "Wimp_GetWindowState",,blk% X1%=blk%!4 Y1%=blk%!8 X2%=blk%!12 Y2%=blk%!16 X3%=blk%!20 Y3%=blk%!24 Xw%=X2%-X1% Yw%=Y2%-Y1% Window_Close(win%) win%>&8000 !b%=win% Wimp_close(b%) Window_Open(win%) win%>&8000 b%=Localblock% !b%=win% "Wimp_GetWindowInfo",,b% (b%!32 1<<16)=0 Window_openactive(win%) Wimp_open(b%) Window_OpenCentre(win%) b%,x%,y% win%>&8000 b%=Localblock% Wimp_ModeSize(x%,y%) Window_ReadState(win%) x%-=Xw%:y%-=Yw% x%=x%/2:y%=y%/2 b%!0=win% b%!4=x% b%!8=y% b%!12=x%+Xw% b%!16=y%+Yw% b%!20=0 b%!24=0 b%!28=-1 Wimp_open(b%) Window_Front(win%) win%>&8000 b%=Localblock% !b%=win% "Wimp_GetWindowState",,b% b%!28=-1 "Wimp_OpenWindow",,b% Window_Back(win%) b%=Localblock% !b%=win% "Wimp_GetWindowState",,b% b%!28=-2 "Wimp_OpenWindow",,b% Window_AsMenu(win%) Window_openactive(win%) Wimp_ModeSize(x%,y%) Window_ReadState(win%) x%-=Xw%:y%-=Yw% x%=x%/2:y%=y%/2 "Wimp_CreateMenu",,win%,x%,y%+Yw% Window_SetExtent(win%,x0%,y0%,x1%,y1%) b%=Localblock% !b%=x0% b%!4=y0% b%!8=x1% b%!12=y1% "Wimp_SetExtent",win%,b% Window_NewYbox(newybox%,opt%) Ybox%<>-1 Window_Close(Ybox%) Ybox%=newybox% Icon_UpState(Ybox%,12,GridOn% Icon_UpState(Ybox%,4,SnapToGrid% Window_Open(CurrentMain%) Window_openactive(newybox%) Window_LooseYbox(myybox%) Ybox%=myybox% Window_Close(Ybox%) Ybox%=-1 Window_ClickYboxNoSnap(win%,icon%, z,xstep,ystep,zstep) o%=SnapToGrid% SnapToGrid%= Window_ClickYbox(win%,icon%,x,y,z,xstep,ystep,zstep) SnapToGrid%=o% Window_ClickYbox(win%,icon%, z,xstep,ystep,zstep) SnapToGrid% xs=GridXSpace% ys=GridYSpace% zs=GridZSpace% xs=xstep ys=ystep zs=zstep icon% '0x=StoreCoordX%:y=StoreCoordY%:z=StoreCoordZ% Module_call( Window_owner(win%),"loadcoords(x,y,z)") Icon_UpState(win%,1,0) 4:SnapToGrid%=( Icon_ReadState(Ybox%,4)=1) 5:y-=ys 6:y+=ys 7:x-=xs 8:x+=xs 9:z-=zs 10:z+=zs Window_Coord("Enter step sizes",xstep,ystep,zstep,win%,-1) 3'GridOn%= Icon_ReadState(Ybox%,12)=1 Display_Update StoreCoordX%=x StoreCoordY%=y StoreCoordZ%=z Icon_UpState(win%,13,0) icon%>4 icon%<11 SnapToGrid% ='x=( (x/GridXSpace%+.5))*GridXSpace% >'y=( (y/GridYSpace%+.5))*GridYSpace% ?'z=( (z/GridZSpace%+.5))*GridZSpace% A =(icon%>4 icon%<11 icon%=1) Window_AllowStoreCoords(win%) Icon_GreyOut(win%,1,0) Icon_GreyOut(win%,13,0) Window_Coord(title$,x,y,z,win%,num%) task% task%= Window_owner(win%) Icon_UpText(CoordHandle%,2,title$) Icon_UpText(CoordHandle%,6, Icon_UpText(CoordHandle%,7, Icon_UpText(CoordHandle%,8, CoordTask%=task% CoordNum%=num% Window_AsMenu(CoordHandle%) Window_UpdateTitle title$,b%,flags%,loop% b%=Localblock% MainOpen%>0 loop%=1 MainOpen% DisplayClaimed% MainHandle%(loop%)=CurrentMain% W!title$=Leaf$+" - "+ClaimedBy$ Ygtitle$=Leaf$+" ("+ Object_ReadName(CurrentObj%)+") - "+WindowView$(loop%)+" at "+ Scale%(loop%)+"%" Changed%title$+=" *" MainOpen%>1 title$+=" "+ MainOpen% title$= title$,70) ^&$(Titlespace%+(loop%-1)*70)=title$ b%!20=MainHandle%(loop%) "Wimp_GetWindowState",,b%+20 flags%=b%!52 (flags% 1<<16)<>0 !b%=MainHandle%(loop%) "Wimp_GetWindowOutline",,b% "Wimp_ForceRedraw",-1,b%!4,b%!36,b%!12,b%!16 Window_UpdateInfo Data%(CurrentInfo%) Module_call(CurrentInfo%,"info") n ModulePurpose$="None stated" ModuleAuthor$="Anonymous" Icon_UpText(InfoHandle%,16,Module$(CurrentInfo%)) Icon_UpText(InfoHandle%,17,ModulePurpose$) Icon_UpText(InfoHandle%,18,ModuleAuthor$) Icon_UpText(InfoHandle%,19,Version$(CurrentInfo%)) Window_NewMain b%=Localblock% MainOpen%+=1 z!!Mainblock%+=(MainOpen%-1)*50 {"Mainblock%!4+=(MainOpen%-1)*50 |"Mainblock%!8+=(MainOpen%-1)*50 }#Mainblock%!12+=(MainOpen%-1)*50 Mainblock%!24=-1 Mainblock%!68=&00C800C8 .Mainblock%!72=Titlespace%+(MainOpen%-1)*70 "Wimp_CreateWindow",,Mainblock% handle% "MainHandle%(MainOpen%)=handle% Display_newmain(MainOpen%) Window_ChangeCurrent(handle%) Window_RemoveMain(handle%) internal%,b%,winloop% b%=Localblock%+&200 (internal%= Window_whichmain(handle%) MainHandle%(internal%),MainHandle%(MainOpen%) Display_mainswap(internal%,MainOpen%) MainOpen%-=1 !b%=handle% "Wimp_DeleteWindow",,b% Display_removemain(MainOpen%+1) MainOpen%>0 winloop%=1 MainOpen% !b%=MainHandle%(winloop%) "Wimp_GetWindowInfo",,b% "Wimp_DeleteWindow",,b% %b%!76=Titlespace%+(winloop%-1)*70 "Wimp_CreateWindow",,b%+4 handle% MainHandle%(winloop%)=CurrentMain% CurrentMain%=handle% !MainHandle%(winloop%)=handle% (b%!32 (1<<16)) Window_Open(handle%) Window_UpdateTitle handle%=CurrentMain% MainOpen%>0 "handle%=MainHandle%(MainOpen%) MainOpen%>0 Window_ChangeCurrent(handle%) Window_ChangeCurrent(handle%) CursorOn% Display_updatecursor CurrentMain%=handle% Window_Open(handle%) "Wimp_SetCaretPosition",CurrentMain%,-1 CursorOn% Display_Cursor(CursorSX%,CursorSY%,CursorSZ%) Pointer$<>"" "OS_SpriteOp",36+256,WindowSprites%,Pointer$,2,PtrActiveX%,PtrActiveY% ViewChanged%<>-1 Module_call(ToolTask%,"viewchanged") Window_IsMain(handle%) loop% loop%=0 loop%<(MainOpen%+1) MainHandle%(loop%)<>handle% loop%+=1 !=(MainHandle%(loop%)=handle%) Icon_IncDec(win%,icon%,val%,min%,max%,red%) text%,b%,cur% b%=Localblock% b%!0=win% b%!4=icon% "Wimp_GetIconState",,b% text%=b%!28 cur%= ($text%)+val% cur%<=max% cur%>=min% $text%= b%!8=0 b%!12=0 "Wimp_SetIconState",,b% Icon_Redraw(win%,icon%) Icon_UpText(win%,icon%,text$) text%,b%,len% b%=Localblock% b%!0=win% b%!4=icon% "Wimp_GetIconState",,b% text%=b%!28 len%=b%!36 text$= text$,len%-1) $text%=text$ b%!8=0 b%!12=0 "Wimp_SetIconState",,b% Icon_Read(win%,icon%) text%,b% b%=Localblock% b%!0=win% b%!4=icon% "Wimp_GetIconState",,b% text%=b%!28 =$text% Icon_UpValid(win%,icon%,valid$) b%,valid% b%=Localblock% b%!0=win% b%!4=icon% "Wimp_GetIconState",,b% valid%=b%!32 $valid%=valid$ b%!8=0 b%!12=0 "Wimp_SetIconState",,b% Icon_GreyOut(win%,icon%,val%) b%=Localblock% !b%=win% b%!4=icon% b%!8=val%*2^22 b%!12=2^22 "Wimp_SetIconState",,b% Icon_UpState(win%,icon%,val%) b%=Localblock% !b%=win% b%!4=icon% b%!8=val%*2^21 b%!12=2^21 "Wimp_SetIconState",,b% Icon_ReadState(win%,icon%) b%=Localblock% !b%=win% b%!4=icon% "Wimp_GetIconState",,b% =b%!24>>21 Icon_Redraw(win%,icon%) b%=Localblock% !b%=win% b%!4=icon% "Wimp_GetIconState",,b% "Wimp_ForceRedraw",!b%,b%!8,b%!12,b%!16,b%!20 Icon_Copy(win%, icon%,offx%,offy%,text$,valid$, indr%) b%,flags%,valid% b%=Errblock% b%!0=win% b%!4=icon% "Wimp_GetIconState",,b% offx%>=&FFFF offx%=b%!16-b%!8+offx%-&FFFF offy%>=&FFFF offy%=b%!12-b%!20+offy%-&FFFF b%!8+=offx% b%!12+=offy% b%!16+=offx% b%!20+=offy% flags%=b%!24 valid%=b%!32 flags% $indr%=text$ b%!28=indr% b%!36= (text$) indr%+= (text$)+1 b%!32>0 $indr%=valid$ b%!32=indr% indr%+= (valid$)+1 b%+=4 !b%=win% "Wimp_CreateIcon",,b% icon% Tool_Clear CurrentTool%=0 loop%=0 loop%SelectorButton% loop%+=1 loop%+=1 name$="Main" LastIcon%<>loop% (8ok%= Module_call(SelectorTask%,"toolclick(name$,1)") Module_call(ToolTask%,"toolend(name$,ToolNum%)") ToolTask%=SelectorTask% ToolNum%=1 Tool_toggle(loop%,LastIcon%) LastIcon%=loop% ok%=1 Module_call(SelectorTask%,"toolstart(name$,1)") 08ok%= Module_call(SelectorTask%,"toolclick(name$,1)") ok%=1 Module_call(SelectorTask%,"toolstart(name$,1)") Tool_End Tool_End Tool_toggle(-1,LastIcon%) Module_call(ToolTask%,"toolend(Tool$(CurrentTool%,0),ToolNum%)") ToolTask%=-1 ToolNum%=-1 LastIcon%=-1 Tool_BuildBox(name$) ToolPtr%=6 17,"No more room for toolboxes" Tool$(ToolPtr%,0)=name$ Tool%(ToolPtr%,0,0)=1 ToolPtr%+=1 Tool_AddTool(name$,sprite$,task%,num%) tool%,at% tool%= Tool_findbox(name$) Tool%(tool%,0,0)=21 17,"No more room for sprites in this toolbox" at%=Tool%(tool%,0,0) Tool$(tool%,at%)=sprite$ Tool%(tool%,at%,0)=task% Tool%(tool%,at%,1)=num% Tool%(tool%,0,0)+=1 Tool_AddTool(name$,sprite$,task%,num%) Tool_AddTool(name$,sprite$,task%,num%) tool%= Tool_findbox(name$) =Tool%(tool%,0,0)-1 Tool_NewToolBox(name$) b%,b2%,loop%,cy%,x0%,y0%,x1%,y1%,flags%,valid%,ptr%,height%,start%,width% b%100 tool%= Tool_findbox(name$) ToolHandle%<>-1 !b%=ToolHandle%: "Wimp_DeleteWindow",,b%:ToolHandle%=-1 ToolHeap%=-1 ToolHeap%= Heap_GetBlock(1024) ptr%=ToolHeap% "Wimp_CreateWindow",,Toolblock% ToolHandle% Tool%(tool%,0,0)=1 17,"Toolbox '"+name$+"' contains no tools" items%=Tool%(tool%,0,0) mapped%=ToolMap%(tool%,1) LastIcon%=2 Icon_UpValid(ToolHandle%,2,"s"+Tool$(tool%,mapped%)+"s") Icon_UpValid(ToolHandle%,2,"s"+Tool$(tool%,mapped%)) x1%=68 y0%=-92 (items%-1) ToolWidth%<>0 items%+=ToolWidth%-((items%-1) ToolWidth%) items%>2 loop%=3 items% (loop%-2) ToolWidth%=0 icon%=loop%-(ToolWidth%) icon%=loop%-1 (loop%-2) ToolWidth%=0 offx%=0:offy%=&FFFF offx%=&FFFF:offy%=0 m#mapped%=ToolMap%(tool%,loop%-1) loop%-1tool% CurrentTool%=tool% ToolTask%=-1 ToolNum%=-1 LastIcon%=-1 Choices_Add(name$,sprite$,task%) ChoiceHeap%=-1 $ChoiceHeap%= Heap_GetBlock(1024) ChoiceIndr%=ChoiceHeap% Choices%(ChoicePtr%)=task% starticon%=(ChoicePtr%-1)*3 icon%=starticon% ChoicePtr%=0 starticon%+=3 icon%=starticon% Icon_UpText(MainChoices%,icon%,name$) icon%=starticon%+1 Icon_UpValid(MainChoices%,icon%,"s"+sprite$) icon%=starticon%+2 Icon_Copy(MainChoices%,icon%,&FFFF+16,0,name$," ",ChoiceIndr%) icon%=starticon%+1 Icon_Copy(MainChoices%,icon%,&FFFF+16,0, 10,"s"+sprite$,ChoiceIndr%) icon%=starticon%+2 Icon_Copy(MainChoices%,icon%,&FFFF+16,0," ","b0",ChoiceIndr%) ChoicePtr%+=1 Choices_StartSection(section$) #ChoiceHandle%,"" #ChoiceHandle%,"Section : "+section$ Choices_OutputLine(title$,var$) #ChoiceHandle%," "+title$+ (title$)," ")+": "+var$ Choices_OutputFlag(title$,flag%) #ChoiceHandle%," "+title$+ (title$)," ")+": "; flag% #ChoiceHandle%,"Yes" #ChoiceHandle%,"No" Choices_OutputBin(title$,bin%) #ChoiceHandle%," "+title$+ (title$)," ")+": "; #ChoiceHandle%,"Yes" #ChoiceHandle%,"No" Choices_EndSection #ChoiceHandle%,"EndSection" Choices_Ok task% $task%= Window_owner(ChoicePane%) task%<>0 Module_call(task%,"choiceok") Choices_mainok Display_Update MainOpen%>0 winloop%=1 MainOpen% Display_UpdateOne(MainHandle%(winloop%)) Display_UpdateOne(handle%) internal% (internal%= Window_whichmain(handle%) Window_ReadState(handle%) b%=Localblock% !b%=handle% b%!4=X3% b%!8=Y3%-Yw% b%!12=X3%+Xw% b%!16=Y3% "Wimp_UpdateWindow",,b% more% more% Display_wimpred(internal%,b%!28,b%!32,b%!36,b%!40) "Wimp_GetRectangle",,b% more% Display_BlankItem(item%) store% #store%=!(DisplayIndex%+item%*4) 6!(DisplayIndex%+item%*4)=-!(DisplayIndex%+item%*4) Display_UpdateItem(item%) Display_UpdateItemBox MainOpen%>0 winloop%=1 MainOpen% Display_startredraw(winloop%) Window_ReadState(MainHandle%(winloop%)) scale=Scale%(winloop%)/100 xoff%=CentreX(winloop%) .yoff%=-MainYWidth%*scale+CentreY(winloop%) .minx%=!(DisplayBounds%+4024)*scale+xoff%-8 .miny%=!(DisplayBounds%+4028)*scale+yoff%-8 .maxx%=!(DisplayBounds%+4032)*scale+xoff%+8 .maxy%=!(DisplayBounds%+4036)*scale+yoff%+8 !(DisplayBounds%+4020)=-1 b%=Localblock% !b%=MainHandle%(winloop%) b%!4=minx% b%!8=miny% b%!12=maxx%+4 b%!16=maxy%+4 "Wimp_UpdateWindow",,b% more% more% Display_wimpred(winloop%,b%!28,b%!32,b%!36,b%!40) "Wimp_GetRectangle",,b% more% Display_UpdateItems(list%,end%) MainOpen%>0 winloop%=1 MainOpen% Display_startredraw(winloop%) Window_ReadState(MainHandle%(winloop%)) scale=Scale%(winloop%)/100 xoff%=CentreX(winloop%) .yoff%=-MainYWidth%*scale+CentreY(winloop%) minx%=&100000:miny%=&100000 maxx%=0:maxy%=0 sat%=0 sat%maxx%maxx%=t% 2t%=!(DisplayBounds%+item%*16+12)*scale+yoff%+8 t%>maxy%maxy%=t% sat%+=4 b%=Localblock% !b%=MainHandle%(winloop%) b%!4=minx% b%!8=miny% b%!12=maxx%+4 b%!16=maxy%+4 "Wimp_UpdateWindow",,b% more% more% Display_wimpred(winloop%,b%!28,b%!32,b%!36,b%!40) "Wimp_GetRectangle",,b% more% Display_UpdateItem(item%) pos%,b%,xoff%,yoff%,minx%,miny%,maxx%,maxy%,currentitem% MainOpen%>0 item%>-1 winloop%=1 MainOpen% Display_startredraw(winloop%) Window_ReadState(MainHandle%(winloop%)) scale=Scale%(winloop%)/100 xoff%=CentreX(winloop%) (.yoff%=-MainYWidth%*scale+CentreY(winloop%) )6minx%=!(DisplayBounds%+(item%*16)+0)*scale+xoff%-8 *6miny%=!(DisplayBounds%+(item%*16)+4)*scale+yoff%-8 +6maxx%=!(DisplayBounds%+(item%*16)+8)*scale+xoff%+8 ,7maxy%=!(DisplayBounds%+(item%*16)+12)*scale+yoff%+8 b%=Localblock% !b%=MainHandle%(winloop%) b%!4=minx% b%!8=miny% b%!12=maxx%+4 b%!16=maxy%+4 currentitem%=item% "Wimp_UpdateWindow",,b% more% more% Display_wimpred(winloop%,b%!28,b%!32,b%!36,b%!40) "Wimp_GetRectangle",,b% more% pos%=DisplayBounds%+4020 !pos%=currentitem% item%=currentitem% <'!(DisplayBounds%+item%*16+0)=pos%!4 ='!(DisplayBounds%+item%*16+4)=pos%!8 >(!(DisplayBounds%+item%*16+8)=pos%!12 ?)!(DisplayBounds%+item%*16+12)=pos%!16 !pos%=-1 Display_ReadMain(handle%) F(internal%= Window_whichmain(handle%) CentreX=CentreX(internal%) CentreY=CentreY(internal%) Scale%=Scale%(internal%) Display_startredraw(internal%) Display_ConvXY( Window_ReadState(CurrentMain%) Display_ReadMain(CurrentMain%) x%=x%-(X1%-X3%)-CentreX P2y%=y%-(Y2%-Y3%-MainYWidth%*Scale%/100+CentreY) ((x%/Scale%*100)+0.5) ((y%/Scale%*100)+0.5) Display_Screen( Window_ReadState(CurrentMain%) Display_ReadMain(CurrentMain%) xoff%=X1%-X3%+CentreX X0yoff%=Y2%-Y3%-MainYWidth%*Scale%/100+CentreY x%=(x%*Scale%/100)+xoff% y%=(y%*Scale%/100)+yoff% Display_ClickedOn(x%,y%,item%) Window_ReadState(CurrentMain%) Display_ReadMain(CurrentMain%) found%= xoff%=X1%-X3%+CentreX a0yoff%=Y2%-Y3%-MainYWidth%*Scale%/100+CentreY b7minx%=!(DisplayBounds%+item%*16+0)*Scale%/100+xoff% c7miny%=!(DisplayBounds%+item%*16+4)*Scale%/100+yoff% d7maxx%=!(DisplayBounds%+item%*16+8)*Scale%/100+xoff% e8maxy%=!(DisplayBounds%+item%*16+12)*Scale%/100+yoff% x%>minx% x%miny% y%-1 found% q7minx%=!(DisplayBounds%+item%*16+0)*Scale%/100+xoff% r7miny%=!(DisplayBounds%+item%*16+4)*Scale%/100+yoff% s7maxx%=!(DisplayBounds%+item%*16+8)*Scale%/100+xoff% t8maxy%=!(DisplayBounds%+item%*16+12)*Scale%/100+yoff% x%>minx% x%miny% y%current% found%= item%-=1 found% item%=-2 =item%+1 Display_SelectInBox(minx%,miny%,maxx%,maxy%,update%) Window_ReadState(CurrentMain%) Display_ReadMain(CurrentMain%) item%=0 SelectPos%=0 Selected%=-2 xoff%=X1%-X3%+CentreX 0yoff%=Y2%-Y3%-MainYWidth%*Scale%/100+CentreY DisplayIndex%!(item%*4)<>-1 5x1%=!(DisplayBounds%+item%*16+0)*Scale%/100+xoff% 5y1%=!(DisplayBounds%+item%*16+4)*Scale%/100+yoff% 5x2%=!(DisplayBounds%+item%*16+8)*Scale%/100+xoff% 6y2%=!(DisplayBounds%+item%*16+12)*Scale%/100+yoff% x1%>minx% x2%miny% y2%-1 Module_call(Notify3DRedraw%,"redrawnotify") Display_UpdateOne(handle%) "Hourglass_Off" Display_RedrawAll disppos%,lrg% "Hourglass_On" winloop%=1 MainOpen% Display_RedrawOne(MainHandle%(winloop%)) "Hourglass_Off" Display_AddItem(obj%,item%) disppos%,count%,minx%,miny%,maxx%,maxy%,type%,p%,pos%,winloop%,dispend% 2DisplayIndex%!(Items%*4)=DisplayEnd%:Items%+=1 DisplayIndex%!(Items%*4)=-1 winloop%=1 MainOpen% Display_startredraw(winloop%) Module_call(ViewerTask%,"ready(ViewerNum%)") !disppos%=DisplayEnd%+Display% minx%=10000 miny%=10000 maxx%=-10000 maxy%=-10000 1pos%= Object_FindItem(obj%,item%)+ObjectItem% type%=?pos% p%=pos% Wwrd(disppos%,128) type% Display_Plane(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%) 2,8,9,10,11: Display_Matrix(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%) 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 Display_Lamp(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%) Display_Mesh(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%) Wwrd(disppos%,129) item%=Items%-1 (!(DisplayBounds%+(item%*16)+0)=minx% (!(DisplayBounds%+(item%*16)+4)=miny% (!(DisplayBounds%+(item%*16)+8)=maxx% )!(DisplayBounds%+(item%*16)+12)=maxy% dispend%=disppos%-Display% Display_endredraw(winloop%) winloop% DisplayEnd%=dispend% Display_RedrawItemBox(obj%,item%) disppos%,count%,minx%,miny%,maxx%,maxy%,type%,p%,pos% winloop%=1 MainOpen% Display_startredraw(winloop%) Module_call(ViewerTask%,"ready(ViewerNum%)") $disppos%=DisplayIndex%!(item%*4) disppos%<-1 disppos%=-disppos% $DisplayIndex%!(item%*4)=disppos% disppos%+=Display% minx%=100000:maxx%=-100000 miny%=100000:maxy%=-100000 1pos%= Object_FindItem(obj%,item%)+ObjectItem% type%=?pos% p%=pos% Wwrd(disppos%,128) type% Display_Plane(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%) 2,8,9,10,11: Display_Matrix(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%) 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 Display_Lamp(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%) Display_Mesh(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%) Wwrd(disppos%,129) sminx%=minx%:sminy%=miny% smaxx%=maxx%:smaxy%=maxy% !(DisplayBounds%+4024)maxx%maxx%=!(DisplayBounds%+4032) !(DisplayBounds%+4036)>maxy%maxy%=!(DisplayBounds%+4036) !(DisplayBounds%+(item%*16)+0)maxx% maxx%=!(DisplayBounds%+(item%*16)+8) !(DisplayBounds%+(item%*16)+12)>maxy% maxy%=!(DisplayBounds%+(item%*16)+12) !(DisplayBounds%+4020)=-2 !(DisplayBounds%+4024)=minx% !(DisplayBounds%+4028)=miny% !(DisplayBounds%+4032)=maxx% !(DisplayBounds%+4036)=maxy% '!(DisplayBounds%+item%*16+0)=sminx% '!(DisplayBounds%+item%*16+4)=sminy% '!(DisplayBounds%+item%*16+8)=smaxx% (!(DisplayBounds%+item%*16+12)=smaxy% Display_endredraw(winloop%) Display_RedrawItem(obj%,item%) disppos%,count%,minx%,miny%,maxx%,maxy%,type%,p%,pos% winloop%=1 MainOpen% Display_startredraw(winloop%) Module_call(ViewerTask%,"ready(ViewerNum%)") $disppos%=DisplayIndex%!(item%*4) disppos%<-1 disppos%=-disppos% $DisplayIndex%!(item%*4)=disppos% disppos%+=Display% minx%=10000 miny%=10000 maxx%=-10000 maxy%=-10000 1pos%= Object_FindItem(obj%,item%)+ObjectItem% type%=?pos% p%=pos% Wwrd(disppos%,128) type% Display_Plane(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%) 2,8,9,10,11: Display_Matrix(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%) 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 Display_Lamp(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%) Display_Mesh(disppos%,pos%,0,0,0,0,0,0,1,1,1,minx%,miny%,maxx%,maxy%) Wwrd(disppos%,129) pos%=DisplayBounds%+4020 !pos%=item% pos%!4=minx% pos%!8=miny% pos%!12=maxx% pos%!16=maxy% minx%!(DisplayBounds%+(item%*16)+8) !(DisplayBounds%+(item%*16)+8)=maxx% maxy%>!(DisplayBounds%+(item%*16)+12) !(DisplayBounds%+(item%*16)+12)=maxy% Display_endredraw(winloop%) Display_Object( disppos%,obj%,col%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,depth%, minx%, miny%, maxx%, maxy%) p%,start%,len%,item%,type%, item%=0 &,start%=ObjectList%!(obj%*16)+ObjectItem% len%=!start% item%<(ObjectList%?(obj%*16+4)) type%=?(start%+p%) p%+=start% depth%=0 --DisplayIndex%!(item%*4)=disppos%-Display% Items%+=1 minx%=100000 miny%=100000 maxx%=-100000 maxy%=-100000 depth%>10 Wwrd(disppos%,255) DisplayIndex%!(item%*4)=-1 17,"Items nested too deeply" Wwrd(disppos%,128) Wwrd(disppos%,65) Wwrd(disppos%,col%) type% Display_Plane(disppos%,p%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,minx%,miny%,maxx%,maxy%) 2,8,9,10,11: Display_Matrix(disppos%,p%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,minx%,miny%,maxx%,maxy%) 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 Display_Lamp(disppos%,p%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,minx%,miny%,maxx%,maxy%) Display_Mesh(disppos%,p%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz,minx%,miny%,maxx%,maxy%) p%+=44+p%!40 p%-=start% depth%=0 G(!(DisplayBounds%+(item%*16)+0)=minx% H(!(DisplayBounds%+(item%*16)+4)=miny% I(!(DisplayBounds%+(item%*16)+8)=maxx% J)!(DisplayBounds%+(item%*16)+12)=maxy% Wwrd(disppos%,129) item%+=1 depth%=0 DisplayIndex%!(item%*4)=-1:Items%=item% Display_Matrix( disppos%, p%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz, minx%, miny%, maxx%, maxy%) loc%,xsize%,ysize%,matrixblock%,lx%,ly%,pos%,col%,tp% ?p%=2 tp%=0 ?p%=8 tp%=1 ?p%=9 tp%=2 ?p%=10 tp%=3 ?p%=11 tp%=4 col%=p%?1 x%+=p%!4:y%+=p%!8:z%+=p%!12 Z$rx%+=p%!16:ry%+=p%!20:rz%+=p%!24 sx=sx*p%!28/1000 sy=sy*p%!32/1000 sz=sz*p%!36/1000 b%=Localblock% _@b%!0=TranslationMatrix%:b%!4=x%<<16:b%!8=y%<<16:b%!12=z%<<16 `Eb%!16=( rx%)*(1<<15):b%!20=( ry%)*(1<<15):b%!24=( rz%)*(1<<15) aEb%!28=( rx%)*(1<<15):b%!32=( ry%)*(1<<15):b%!36=( rz%)*(1<<15) b3b%!40=sx*(1<<8):b%!44=sy*(1<<8):b%!48=sz*(1<<8) c A%=b% CodeSpace%+4 B%=TranslationMatrix% A%=DisplayMatrix% C%=CombinedMatrix% xsize%=p%!44 ysize%=p%!48 p%+=52 Display_checksize(Display%,disppos%,xsize%*(ysize%+1)*18+256) m8matrixblock%= Heap_GetBlock((xsize%+1)*(ysize%+1)*8) Wwrd(disppos%,128) Wwrd(disppos%,65) Wwrd(disppos%,col%) minmax%=Localblock%+&100 minmax%!0=minx% minmax%!4=miny% minmax%!8=maxx% minmax%!12=maxy% vFb%!0=matrixblock%:b%!4=disppos%:b%!8=xsize%:b%!12=ysize%:b%!16=tp% wZb%!20=TranslationMatrix%:b%!24=minmax%:b%!28=DisplayCode%:b%!32=DisplayXyz%:b%!44=Xyz% ly%=0 ysize% lx%=0 xsize% Rxyz(p%,!Xyz%,Xyz%!4,Xyz%!8) b%!36=lx%:b%!40=ly% | A%=b% CodeSpace%+24 A%=b% CodeSpace%+20 disppos%=b%!4 Wwrd(disppos%,129) Heap_FreeBlock(matrixblock%) minx%=minmax%!0 miny%=minmax%!4 maxx%=minmax%!8 maxy%=minmax%!12 Display_Lamp( disppos%, p%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz, minx%, miny%, maxx%, maxy%) x%(),y%(),z%() x%(6),y%(6),z%(6) x%+=p%!4:y%+=p%!8:z%+=p%!12 $rx%+=p%!16:ry%+=p%!20:rz%+=p%!24 sx=sx*p%!28/1000 sy=sy*p%!32/1000 sz=sz*p%!36/1000 type%=p%!44 ang=p%!92/1000 x%(1)=0:y%(1)=0:z%(1)=0 Display_Trans(x%(1),y%(1),z%(1),x%,y%,z%,rx%,ry%,rz%,sx,sy,sz) 'x%(2)=p%!56:y%(2)=p%!60:z%(2)=p%!64 3xo%=x%(2)-x%(1):yo%=y%(2)-y%(1):zo%=z%(2)-z%(1) !x%(3)=xo%:y%(3)=yo%:z%(3)=zo% Display_Trans(x%(3),y%(3),z%(3),x%(1),y%(1),z%(1),-ang,0,0,1,1,1) !x%(4)=xo%:y%(4)=yo%:z%(4)=zo% Display_Trans(x%(4),y%(4),z%(4),x%(1),y%(1),z%(1),ang,0,0,1,1,1) !x%(5)=xo%:y%(5)=yo%:z%(5)=zo% Display_Trans(x%(5),y%(5),z%(5),x%(1),y%(1),z%(1),0,0,-ang,1,1,1) !x%(6)=xo%:y%(6)=yo%:z%(6)=zo% Display_Trans(x%(6),y%(6),z%(6),x%(1),y%(1),z%(1),0,0,ang,1,1,1) l%=1 ls%=DisplayLampSize% ls%=0 Display_ConvInt(x%(l%),y%(l%),z%(l%)) x%(l%)+ls%>maxx%maxx%=x%(l%)+ls% x%(l%)-ls%maxy%maxy%=y%(l%)+ls% y%(l%)-ls%=0 Display_checksize(Display%,disppos%,9*5*(planes%+1)+8) Display_checksize(Display%,disppos%,8) points%>=0 ,pointlist%= Heap_GetBlock((points%+1)*8) +b%=Localblock%:minmax%=Localblock%+&100 #minmax%!0=minx%:minmax%!4=miny% $minmax%!8=maxx%:minmax%!12=maxy% 9b%!0=TranslationMatrix%:b%!4=DisplayXyz%:b%!8=minmax% Ab%!12=disppos%:b%!16=loc%:b%!20=pointlist%:b%!24=DisplayCode% b%!28=col% A%=b% CodeSpace%+28 #minx%=minmax%!0:miny%=minmax%!4 $maxx%=minmax%!8:maxy%=minmax%!12 disppos%=b%!12 p%+=44+p%!40 Display_Trans( z1%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz) sinx,cosx,siny,cosy,sinz,cosz,ty,tx,tz,x1,y1,z1 x1=x1%:y1=y1%:z1=z1% $sinx= rx%:siny= ry%:sinz= $cosx= rx%:cosy= ry%:cosz= x1=x1*sx:y1=y1*sy:z1=z1*sz ty=y1*cosx+z1*sinx z1=z1*cosx-y1*sinx y1=ty tx=x1*cosy+z1*siny z1=z1*cosy-x1*siny x1=tx tx=x1*cosz-y1*sinz y1=x1*sinz+y1*cosz x1=tx x1=x1+x%:y1=y1+y%:z1=z1+z% (x1+0.5) (y1+0.5) (z1+0.5) Display_TransFasterSetup(x%,y%,z%,rx%,ry%,rz%,sx,sy,sz) TransSx=sx TransSy=sy TransSz=sz TransX%=x% TransY%=y% TransZ%=z% TransSinx= TransCosx= TransSiny= TransCosy= TransSinz= TransCosz= Display_TransFaster( x1%=x1%*TransSx y1%=y1%*TransSy z1%=z1%*TransSz 2#ty%=y1%*TransCosx+z1%*TransSinx 3#z1%=z1%*TransCosx-y1%*TransSinx y1%=ty% 5#tx%=x1%*TransCosy+z1%*TransSiny 6#z1%=z1%*TransCosy-x1%*TransSiny x1%=tx% 8#tx%=x1%*TransCosz-y1%*TransSinz 9#y1%=x1%*TransSinz+y1%*TransCosz x1%=tx% x1%+=TransX% y1%+=TransY% z1%+=TransZ% Display_TransEcho( z1,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz) sinx,cosx,siny,cosy,sinz,cosz,ty,tx,tz A$sinx= rx%:siny= ry%:sinz= B$cosx= rx%:cosy= ry%:cosz= x1=x1*sx:y1=y1*sy:z1=z1*sz Wimp_Naughty( x1+","+ y1+","+ ty=y1*cosx+z1*sinx z1=z1*cosx-y1*sinx G y1=ty Wimp_Naughty( x1+","+ y1+","+ tx=x1*cosy+z1*siny z1=z1*cosy-x1*siny K x1=tx Wimp_Naughty( x1+","+ y1+","+ tx=x1*cosz-y1*sinz y1=x1*sinz+y1*cosz O x1=tx Wimp_Naughty( x1+","+ y1+","+ x1=x1+x%:y1=y1+y%:z1=z1+z% Wimp_Naughty( x1+","+ y1+","+ Display_BackTrans( z1%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz) sinx,cosx,siny,cosy,sinz,cosz,ty,tx,tz,x1,y1,z1 x1=x1%:y1=y1%:z1=z1% W'sinx= -rx%:siny= -ry%:sinz= X'cosx= -rx%:cosy= -ry%:cosz= x1=x1-x%:y1=y1-y%:z1=z1-z% tx=x1*cosz-y1*sinz y1=x1*sinz+y1*cosz \ x1=tx tx=x1*cosy+z1*siny z1=z1*cosy-x1*siny _ x1=tx ty=y1*cosx+z1*sinx z1=z1*cosx-y1*sinx b y1=ty x1=x1/sx:y1=y1/sy:z1=z1/sz (x1+0.5) (y1+0.5) (z1+0.5) Display_PointTrans(obj%,itm%, j/at%= Object_FindItem(obj%,itm%)+ObjectItem% Object_TransformBuild(TranslationMatrix%,at%!4,at%!8,at%!12,at%!16,at%!20,at%!24,at%!28/1000,at%!32/1000,at%!36/1000) Object_TransformPoint(x1,y1,z1,TranslationMatrix%) Display_PointBackTrans(obj%,itm%, q/at%= Object_FindItem(obj%,itm%)+ObjectItem% 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) Display_ConvInt( y%,z%) vEdum%= ("FN"+Prefix$(ViewerTask%)+"_xyztoxy(ViewerNum%,x%,y%,z%)") Display_ViewerRotate( zDdum%= ("FN"+Prefix$(ViewerTask%)+"_rotate(ViewerNum%,x%,y%,z%)") Display_XYZtoXY( y%,z%) Display_ReadMain(CurrentMain%) Module_call(ViewerTask%,"ready(ViewerNum%)") Edum%= ("FN"+Prefix$(ViewerTask%)+"_xyztoxy(ViewerNum%,x%,y%,z%)") Display_XYtoXYZNS(x1%,y1%,z1%, Display_ReadMain(CurrentMain%) Qdum%= ("FN"+Prefix$(ViewerTask%)+"_xytoxyz(ViewerNum%,x1%,y1%,z1%,x%,y%,z%)") Display_XYtoXYZ(x1%,y1%,z1%, Display_ReadMain(CurrentMain%) Qdum%= ("FN"+Prefix$(ViewerTask%)+"_xytoxyz(ViewerNum%,x1%,y1%,z1%,x%,y%,z%)") "OS_Byte",121,1 ,ctrl% !ctrl%=(ctrl%=&FF) AllowCTRL% (SnapToGrid% ctrl%) SnapToGrid% ctrl%) )x%=( (x%/GridXSpace%+.5))*GridXSpace% )y%=( (y%/GridYSpace%+.5))*GridYSpace% )z%=( (z%/GridZSpace%+.5))*GridZSpace% Display_NewViewer(win%,task%,num%,opt%) internal% Module_call(task%,"start(num%)") %internal%= Window_whichmain(win%) ,WindowView$(internal%)=Viewer$(opt%-1,0) ViewerTask%(internal%)=task% ViewerNum%(internal%)=num% Window_UpdateTitle Display_DefaultZoom(handle%) internal% (internal%= Window_whichmain(handle%) $CentreX(internal%)=MainXWidth%/2 $CentreY(internal%)=MainYWidth%/2 CentreX0%=CentreX(internal%) CentreY0%=CentreY(internal%) Scale%(internal%)=100 Display_ZoomMain(handle%,100,0,0) Display_ZoomMain(handle%,zoom%,x%,y%) b%,flag%,internal% (internal%= Window_whichmain(handle%) b%=Localblock% b%!0=handle% "Wimp_GetWindowState",,b% flag%=b%!32 "Wimp_OpenWindow",,b% b%!0=0 b%!12=0 b%!8=MainXWidth%*zoom%/100 b%!4=-MainYWidth%*zoom%/100 /CentreX(internal%)=MainXWidth%*zoom%/200-x% /CentreY(internal%)=MainYWidth%*zoom%/200-y% CentreX(internal%)>5000 CentreX(internal%)=5000 CentreX(internal%)<-5000 CentreX(internal%)=-5000 CentreY(internal%)>5000 CentreY(internal%)=5000 CentreY(internal%)<-5000 CentreY(internal%)=-5000 b%!8-=b%!8 b%!4-=b%!14 "Wimp_SetExtent",handle%,b% !b%=handle% "Wimp_GetWindowState",,b% +b%!20=CentreX(internal%)-(b%!12-b%!4)/2 .b%!24=-(CentreY(internal%)-(b%!16-b%!8)/2) Wimp_open(b%) (flag% 1<<16)=0 "Wimp_CloseWindow",,b% Scale%(internal%)=zoom% Display_Cursor(x%,y%,z%) CursorSX%=x% CursorSY%=y% CursorSZ%=z% Display_XYZtoXY(x%,y%,z%) CursorX%=x% CursorY%=y% CursorOn%= Display_updatecursor Display_Cursor2D(x%,y%) CursorX%=x% CursorY%=y% CursorOn%= Display_updatecursor Display_MoveCursor2D(x%,y%) Display_updatecursor CursorX%=x% CursorY%=y% Display_updatecursor Display_MoveCursor(x%,y%,z%) Display_updatecursor CursorSX%=x% CursorSY%=y% CursorSZ%=z% Display_XYZtoXY(x%,y%,z%) CursorX%=x% CursorY%=y% Display_updatecursor Display_LoseCursor CursorOn% Display_updatecursor CursorOn%= Display_DeleteCursor Display_updatecursor Display_Claim(string$) DisplayClaimed%= ClaimedBy$=string$ Display_ReadMain(CurrentMain%) Window_UpdateTitle DisplayIndex%!0=0 DisplayIndex%!4=-1 !Display%=128 Display%!4=129 Display%!8=-1 OldScale%=Scale% OldCentreX%=CentreX OldCentreY%=CentreY Display_DefaultZoom(CurrentMain%) Display_UpdateOne(CurrentMain%) Display_Release DisplayClaimed%= Window_UpdateTitle Display_ZoomMain(CurrentMain%,OldScale%,0,0) Display_RedrawOne(CurrentMain%) Display_StartDrawing Display_ReadMain(CurrentMain%) !Display%=128 DisplayPos%=Display%+4 Display_Start3DAdding winloop% (DisplayIndex%!(Items%*4)=DisplayEnd% #DisplayIndex%!((Items%+1)*4)=-1 DisplayPos%=DisplayEnd% winloop%=1 MainOpen% Display_startredraw(winloop%) DisplayBounds%!4024=10000 DisplayBounds%!4028=10000 DisplayBounds%!4032=-10000 DisplayBounds%!4036=-10000 Display%!DisplayPos%=128 winloop% DisplayPos%+=4 Display_Move3D(x%,y%,z%) winloop%,x1%,y1%,z1% winloop%=1 MainOpen% x1%=x%:y1%=y%:z1%=z% Display_startredraw(winloop%) Module_call(ViewerTask%,"ready(ViewerNum%)") Display_ConvInt(x1%,y1%,z1%) Display%!DisplayPos%=1 Display%!(DisplayPos%+4)=x1% Display%!(DisplayPos%+8)=y1% x1%DisplayBounds%!4032 DisplayBounds%!4032=x1% y1%>DisplayBounds%!4036 DisplayBounds%!4036=y1% winloop% DisplayPos%+=12 Display_Move(x%,y%) &!!DisplayPos%=1:DisplayPos%+=4 '"!DisplayPos%=x%:DisplayPos%+=4 ("!DisplayPos%=y%:DisplayPos%+=4 Display_Draw3D(x%,y%,z%) winloop%,x1%,y1%,z1% winloop%=1 MainOpen% x1%=x%:y1%=y%:z1%=z% Display_startredraw(winloop%) Module_call(ViewerTask%,"ready(ViewerNum%)") Display_ConvInt(x1%,y1%,z1%) Display%!DisplayPos%=2 2 Display%!(DisplayPos%+4)=x1% 3 Display%!(DisplayPos%+8)=y1% x1%DisplayBounds%!4032 DisplayBounds%!4032=x1% y1%>DisplayBounds%!4036 DisplayBounds%!4036=y1% winloop% DisplayPos%+=12 Display_Draw(x%,y%) "!DisplayPos%=y%:DisplayPos%+=4 Display_Node(x%,y%) A!!DisplayPos%=3:DisplayPos%+=4 B"!DisplayPos%=x%:DisplayPos%+=4 C"!DisplayPos%=y%:DisplayPos%+=4 Display_Node3D(x%,y%,z%) winloop%,x1%,y1%,z1% winloop%=1 MainOpen% x1%=x%:y1%=y%:z1%=z% Display_startredraw(winloop%) Module_call(ViewerTask%,"ready(ViewerNum%)") Display_ConvInt(x1%,y1%,z1%) Display%!DisplayPos%=3 M Display%!(DisplayPos%+4)=x1% N Display%!(DisplayPos%+8)=y1% x1%DisplayBounds%!4032 DisplayBounds%!4032=x1% y1%>DisplayBounds%!4036 DisplayBounds%!4036=y1% DisplayPos%+=12 Display_Colour(c%) W"!DisplayPos%=64:DisplayPos%+=4 X"!DisplayPos%=c%:DisplayPos%+=4 Display_Colour3D(c%) winloop% winloop%=1 MainOpen% Display_startredraw(winloop%) Display%!DisplayPos%=67 Display%!(DisplayPos%+4)=c% DisplayPos%+=8 Display_EndDrawing !DisplayPos%=129 Display_UpdateOne(CurrentMain%) Display_End3DAdding winloop%,ominx%,ominy%,omaxx%,omaxy% winloop%=1 MainOpen% Display_startredraw(winloop%) Display%!DisplayPos%=129 l'ominx%=DisplayBounds%!(Items%*16+0) m'ominy%=DisplayBounds%!(Items%*16+4) n'omaxx%=DisplayBounds%!(Items%*16+8) o(omaxy%=DisplayBounds%!(Items%*16+12) DisplayBounds%!4024omaxx%omaxx%=DisplayBounds%!4032 DisplayBounds%!4036>omaxy%omaxy%=DisplayBounds%!4036 u:DisplayBounds%!(Items%*16+l%)=DisplayBounds%!(4024+l%) DisplayBounds%!4020=-2 DisplayBounds%!4024=ominx% DisplayBounds%!4028=ominy% DisplayBounds%!4032=omaxx% DisplayBounds%!4036=omaxy% Display_UpdateItemBox Display_StartPoint @DisplayPointList%= Heap_ExtendBlock(DisplayPointList%,100*8) !DisplayPointList%=0 Display_AddPoint(x%,y%) num%=!DisplayPointList% &!(DisplayPointList%+(num%*8)+4)=x% &!(DisplayPointList%+(num%*8)+8)=y% !DisplayPointList%+=1 Display_AlterPoint(num%,x%,y%) &!(DisplayPointList%+(num%*8)+4)=x% &!(DisplayPointList%+(num%*8)+8)=y% Display_EndPoint Heap_FreeBlock(DisplayPointList%) Display_ClaimGrid ClaimGridOn%= ClaimGridXSpace%=50 ClaimGridYSpace%=50 ClaimSnapToGrid%= Display_ReleaseGrid ClaimGridOn%= ClaimSnapToGrid%= Display_SnapToClaimedGrid( "OS_Byte",121,1 ,ctrl% !ctrl%=(ctrl%=&FF) AllowCTRL% (ClaimSnapToGrid% ctrl%) ClaimSnapToGrid% ctrl%) 3x%=( (x%/ClaimGridXSpace%+.5))*ClaimGridXSpace% 3y%=( (y%/ClaimGridYSpace%+.5))*ClaimGridYSpace% Wbyt( pos%,byte%) ?pos%=byte% pos%+=1 Rbyt( pos%, byte%) byte%=?pos% pos%+=1 Wwrd( pos%,word%) !pos%=word% pos%+=4 Rwrd( pos%, word%) word%=!pos% pos%+=4 pos%,x%,y%) !pos%=x% pos%!4=y% pos%+=8 pos%, x%=!pos% y%=pos%!4 pos%+=8 Wxyz( pos%,x%,y%,z%) !pos%=x% pos%!4=y% pos%!8=z% pos%+=12 Rxyz( x%=!p% y%=p%!4 z%=p%!8 p%+=12 Object_FindItem(obj%,item%) count%,pos%,len%,datalen%,max% count%=0 *pos%=ObjectList%!(obj%*16)+ObjectItem% max%=ObjectList%?(obj%*16+4) item%>max% 17,"There are not "+ item%+" items in Object "+ len%=!pos% pos%+=4 item%<>count% pos%=ObjectItem%+ObjectSize%+40 17,"Overrun in FindItem with obj% "+ obj%+" item% "+ item% =pos%-ObjectItem% Object_NewObject(name$) ptr%=Objects%*16 #ObjectList%!ptr%=Obend%:ptr%+=4 ObjectList%?ptr%=0:ptr%+=1 "$(ptr%+ObjectList%)= name$,10) Objects%+=1 ObjectItem%!Obend%=4 Obend%+=4 ObjectAtEnd%=Objects%-1 Changed% Changed%= Window_UpdateTitle =Objects%-1 Object_FindStart(obj%):=ObjectList%!(obj%*16) Object_FindEnd(obj%) start%,end% start%=ObjectList%!(obj%*16) end%=ObjectItem%!start% =end%+start% Object_NewItem(obj%, itm%) Object_toend(obj%) ObjectList%?(obj%*16+4)=0 ,pos%=ObjectList%!(obj%*16)+4+ObjectItem% Epos%= Object_FindItem(obj%,ObjectList%?(obj%*16+4)-1)+ObjectItem% pos%+=pos%!40+44 ObjectList%?(obj%*16+4)+=1 "itm%=ObjectList%?(obj%*16+4)-1 ?pos%=0 =pos%-ObjectItem% Object_UpdateItem(obj%,item%) Object_FindItem(obj%,item%) Object_UpdateName(obj%,name$) ptr%=obj%*16+ObjectList%+5 $ptr%= name$,10) Changed% Changed%= Window_UpdateTitle Object_ReadName(obj%) =$(obj%*16+ObjectList%+5) Object_EditObject(obj%) CurrentObj%=obj% Selected%=-1 Select_Type%=-1 Display_RedrawAll Window_UpdateTitle Object_UpdatePos(obj%,itm%,xs%,ys%,zs%,rx%,ry%,rz%,sx,sy,sz,up%) minx%,miny%,maxx%,maxy%,sat%,item%,pos%,x1%,y1%,z1%,spos% minx%=&100000:miny%=&100000 maxx%=0:maxy%=0 itm%=-2 sat%=0 sat%=-4 sx=sx*1000 sy=sy*1000 sz=sz*1000 itm%<>-1 sat%-2 itm%=-1 Display_RedrawItemBox(CurrentObj%,item%) Display_UpdateItemBox Object_NameItem(type%) type$,itemtype%,sat%,ok%,pos% type% sat%=0:itemtype%=-1:ok%= sat%?pos% type$= (SelectPos%/4)+" " itemtype% 1:type$+="planes" 2:type$+="matrices" 3:type$+="objects" 4:type$+="lamps" 5:type$+="meshes" 6:type$+="tubes" 7:type$+="bezier surfaces" 8:type$+="swept items" 9:type$+="extrusions" 10:type$+="two sided swept items" 11:type$+="profiled extrusions" type$+="items" 1:type$="a plane" 2:type$="a matrix" 3:type$="an object" Rxsize% ypt%>ysize% 17,"Bad Matrix position given to Object_MatrixPoint" (pos%+=52+((ypt%*(xsize%+1)+xpt%)*12) opt%=1 Wxyz(pos%,x%,y%,z%) opt%=0 Rxyz(pos%,x%,y%,z%) Changed% Changed%= Window_UpdateTitle Object_MakeMesh(obj%, itm%) pos%,len%,start% /pos%= Object_NewItem(obj%,itm%)+ObjectItem% Object_checksize(ObjectItem%,pos%,44+20) Wbyt(pos%,5) Wbyt(pos%,-1) pos%+=2 Wxyz(pos%,0,0,0) Wxyz(pos%,0,0,0) Wxyz(pos%,1000,1000,1000) Wwrd(pos%,12) Wwrd(pos%,-1) Wwrd(pos%,-1) len%=12+44 "start%= Object_FindStart(obj%) ObjectItem%!start%+=len% Obend%=pos%-ObjectItem% Changed% Changed%= Window_UpdateTitle Object_MeshGetData(obj%,itm%, points%, planes%) 0pos%= Object_FindItem(obj%,itm%)+ObjectItem% pos%+=44 Rwrd(pos%,points%) Rwrd(pos%,planes%) Object_MeshGetQuadP(obj%,itm%,quad%, pos%,points% 0pos%= Object_FindItem(obj%,itm%)+ObjectItem% pos%+=44 Rwrd(pos%,points%) pos%+=4 pos%+=((points%+1)*12) pos%+=(quad%*16) Rwrd(pos%,p1%) Rwrd(pos%,p2%) Rwrd(pos%,p3%) Rwrd(pos%,p4%) Object_MeshGetQuadC(obj%,itm%,quad%, pos%,points% 0pos%= Object_FindItem(obj%,itm%)+ObjectItem% pos%+=44 Rwrd(pos%,points%) pos%+=4 pos%+=((points%+1)*12) pos%+=(quad%*16) Rwrd(pos%,p%) Object_MeshGetPoint(obj%,itm%,p%,x1%,y1%,z1%) Rwrd(pos%,p%) Object_MeshGetPoint(obj%,itm%,p%,x2%,y2%,z2%) Rwrd(pos%,p%) Object_MeshGetPoint(obj%,itm%,p%,x3%,y3%,z3%) Rwrd(pos%,p%) Object_MeshGetPoint(obj%,itm%,p%,x4%,y4%,z4%) Object_MeshGetPoint(obj%,itm%,point%, '0pos%= Object_FindItem(obj%,itm%)+ObjectItem% pos%+=44 pos%+=8 pos%+=(point%*12) Rxyz(pos%,x1%,y1%,z1%) Object_MeshAlterPoint(obj%,itm%,point%,x%,y%,z%) /0pos%= Object_FindItem(obj%,itm%)+ObjectItem% pos%+=44 pos%+=8 pos%+=(point%*12) Wxyz(pos%,x%,y%,z%) Object_MeshWhichPlane(obj%,itm%,point%) pos%,points%,planes%,fnd%,pln%,crn%,l2% 70pos%= Object_FindItem(obj%,itm%)+ObjectItem% pos%+=44 Rwrd(pos%,points%) Rwrd(pos%,planes%) pos%+=(points%+1)*12 fnd%=-1 pln%=0 planes% l2%=0 Rwrd(pos%,crn%) crn%=point% fnd%=-1 fnd%=pln% crn%=point% fnd%>-1 fnd%<>pln% fnd%=-2 D =fnd% Object_MeshDeleteQuad(obj%, itm%,quad%) pos%,lenpos%,planepos%,points%,planes%,l%,start% Object_toend(obj%) Object_itemtoend(obj%,itm%) I0pos%= Object_FindItem(obj%,itm%)+ObjectItem% pos%+=44 lenpos%=pos%-4 Rwrd(pos%,points%) planepos%=pos% Rwrd(pos%,planes%) pos%+=(points%+1)*12 l%=pos%+(quad%*16) pos%+(planes%*16)-4 !l%=l%!16 !planepos%-=1 !lenpos%-=16 U"start%= Object_FindStart(obj%) ObjectItem%!start%-=16 Obend%-=16 Changed% Changed%= Window_UpdateTitle Object_MeshSplitPoint(obj%, itm%,point%) pos%,points%,planes%,count%,l%,pt%,c2%,x%,y%,z% \0pos%= Object_FindItem(obj%,itm%)+ObjectItem% pos%+=44 Rwrd(pos%,points%) Rwrd(pos%,planes%) pos%+=(points%+1)*12 count%=0 ((planes%+1)*16-4) pos%!l%=point% count%+=1 Object_MeshGetPoint(obj%,itm%,point%,x%,y%,z%) count%>1 count%-1 Object_MeshAddPoint(obj%,itm%,x%,y%,z%,pt%) pt%-=(count%-1) k0pos%= Object_FindItem(obj%,itm%)+ObjectItem% pos%+=44 Rwrd(pos%,points%) Rwrd(pos%,planes%) pos%+=(points%+1)*12 p c2%=0 ((planes%+1)*16-4) pos%!l%=point% c2%>0 pos%!l%=pt%+c2% c2%+=1 Object_MeshSnaptoPoint(obj%,itm%, point%) x1%,y1%,z1%,pos%,points%,planes%,start%,newpoint%,ok%,acc%,x2%,y2%,z2%,l% Object_MeshGetPoint(obj%,itm%,point%,x1%,y1%,z1%) ~0pos%= Object_FindItem(obj%,itm%)+ObjectItem% pos%+=44 Rwrd(pos%,points%) Rwrd(pos%,planes%) start%=pos% newpoint%=0 ok%= newpoint%<=points% pos%=start%+(newpoint%*12) Rxyz(pos%,x2%,y2%,z2%) acc%=16 (x2%-x1%)point% newpoint%+=1 newpoint%-=1 pos%=start%+(points%+1)*12 ((planes%+1)*16-4) pos%!l%=point% pos%!l%=newpoint% point%=newpoint% Object_MeshAddQuadP(obj%, itm%,p1%,p2%,p3%,p4%) Object_toend(obj%) Object_itemtoend(obj%,itm%) 0pos%= Object_FindItem(obj%,itm%)+ObjectItem% pos%+=40 Rwrd(pos%,datalen%) startpos%=pos% Rwrd(pos%,points%) Rwrd(pos%,planes%) startpos%-=pos% Object_checksize(ObjectItem%,pos%,datalen%+100) startpos%+=pos% planepos%=pos%-4 pointpos%=pos%-8 lenpos%=pos%-12 start%=pos% pos%+=((points%+1)*12) pos%+=((planes%+1)*16) Wwrd(pos%,p1%) Wwrd(pos%,p2%) Wwrd(pos%,p3%) Wwrd(pos%,p4%) !planepos%=planes%+1 !lenpos%=!lenpos%+16 "start%= Object_FindStart(obj%) ObjectItem%!start%+=16 Obend%+=16 Changed% Changed%= Window_UpdateTitle Object_MeshAddPoint(obj%, itm%,x%,y%,z%, pos%,datalen%,points%,planes%,pointpos%,lenpos%,loop%,start% Object_toend(obj%) Object_itemtoend(obj%,itm%) 0pos%= Object_FindItem(obj%,itm%)+ObjectItem% pos%+=40 Rwrd(pos%,datalen%) Rwrd(pos%,points%) Rwrd(pos%,planes%) Object_checksize(ObjectItem%,pos%,datalen%+100) pointpos%=pos%-8 lenpos%=pos%-12 pos%+=((points%+1)*12) planes%<>-1 loop%=(planes%+1)*16+pos% loop%!12=!loop% loop% Display_PointBackTrans(obj%,itm%,x%,y%,z%) Wxyz(pos%,x%,y%,z%) pt%=points%+1 !pointpos%+=1 !lenpos%+=12 9start%= Object_FindStart(obj%):ObjectItem%!start%+=12 Obend%+=12 Changed% Changed%= Window_UpdateTitle Object_MeshAddQuadC(obj%, itm%,x1%,y1%,z1%,x2%,y2%,z2%,x3%,y3%,z3%,x4%,y4%,z4%) xyz%(),acc%,sizeinc%,l1%,l2%,pos%,loop% xyz%(3,3) :xyz%(0,0)=x1%:xyz%(0,1)=y1%:xyz%(0,2)=z1%:xyz%(0,3)=-1 :xyz%(1,0)=x2%:xyz%(1,1)=y2%:xyz%(1,2)=z2%:xyz%(1,3)=-1 :xyz%(2,0)=x3%:xyz%(2,1)=y3%:xyz%(2,2)=z3%:xyz%(2,3)=-1 :xyz%(3,0)=x4%:xyz%(3,1)=y4%:xyz%(3,2)=z4%:xyz%(3,3)=-1 MeshAccuracy%=2:sizeinc%=0 Object_toend(obj%) Object_itemtoend(obj%,itm%) 0pos%= Object_FindItem(obj%,itm%)+ObjectItem% pos%+=4 Rxyz(pos%,x%,y%,z%) pos%+=24 Rwrd(pos%,datalen%) startpos%=pos% Rwrd(pos%,points%) Rwrd(pos%,planes%) startpos%-=pos% Object_checksize(ObjectItem%,pos%,datalen%+100) startpos%+=pos% planepos%=pos%-4 pointpos%=pos%-8 lenpos%=pos%-12 start%=pos% need%=4 points%<>-1 l1%=0 points% Rxyz(pos%,xp%,yp%,zp%) Display_PointTrans(obj%,itm%,xp%,yp%,zp%) l2%=0 (xyz%(l2%,0)-xp%)0 planes%<>-1 loop%=(planes%+1)*16+pos% !(loop%+(need%*12))=!loop% l1%=0 num%=xyz%(l1%,3) num%=-1 3xp%=xyz%(l1%,0):yp%=xyz%(l1%,1):zp%=xyz%(l1%,2) Display_PointBackTrans(obj%,itm%,xp%,yp%,zp%) Wxyz(pos%,xp%,yp%,zp%) points%+=1 xyz%(l1%,3)=points% -pos%=start%+(points%+1)*12+(planes%+1)*16 l1%=0 Wwrd(pos%,xyz%(l1%,3)) planes%+=1 !planepos%=planes% !pointpos%=points% !lenpos%=pos%-startpos% "start%= Object_FindStart(obj%) 0ObjectItem%!start%=pos%-(ObjectItem%+start%) Obend%=pos%-ObjectItem% Changed% Changed%= Window_UpdateTitle Object_TidyMesh(obj%, itm%, refpoint%) pt%(),pos%,points%,planes%,pointpos%,lenpos%,start%,l%,s%,pt% Object_toend(obj%) Object_itemtoend(obj%,itm%) 0pos%= Object_FindItem(obj%,itm%)+ObjectItem% pos%+=44 Rwrd(pos%,points%) Rwrd(pos%,planes%) pointpos%=pos%-8 lenpos%=pos%-12 start%=pos% pos%=start%+(points%+1)*12 pt%(points%,1) ((planes%+1)*16-4) pt%(pos%!l%,0)+=1 pt%(pos%!l%,1)=0 pt%=0 points% pt%(pt%,0)=0 pt%0 refpoint%+=pt%(refpoint%,1) refpoint%>points%-s% refpoint%=points%-s% Object_CloneItem(obj%,itm%,xo%,yo%,zo%) pos%,loop% Object_toend(obj%) I0pos%= Object_FindItem(obj%,itm%)+ObjectItem% len%=pos%!40+44 Object_checksize(ObjectItem%,pos%,Obend%+len%) itm2%=-1 M3newpos%= Object_NewItem(obj%,itm2%)+ObjectItem% loop%=0 newpos%!loop%=pos%!loop% Q"start%= Object_FindStart(obj%) ObjectItem%!start%+=len% Obend%+=len% newpos%!4+=xo% newpos%!8+=yo% newpos%!12+=zo% =itm2% Object_CopyItem(obj%,itm%) pos%,loop% Object_toend(obj%) itm%>-1 \0pos%= Object_FindItem(obj%,itm%)+ObjectItem% ]5CopyBuf%= Heap_ExtendBlock(CopyBuf%,pos%!40+44+8) !CopyBuf%=1 CopyBuf%!4=pos%!40+44 loop%=0 pos%!40+44 a!CopyBuf%!(loop%+8)=pos%!loop% sat%=0:bufsize%=12 e+CopyBuf%= Heap_ExtendBlock(CopyBuf%,12) !CopyBuf%=0 CopyBuf%!4=0 sat%=bufsize% Wimp_Naughty("Serious Error : Copy Buffer Overwritten") start%!loop%=pos%!loop% CopyBuf%!4+=pos%!40+44 Object_DeleteItem(obj%,itm%) sat%,item%,sat2% Object_toend(obj%) itm%<>-2 Object_DeleteOneItem(obj%,itm%) sat%=0 sat%=0 Object_DeleteOneItem(obj%,item%) sat2%=sat% sat2%item% SelectList%!sat2%-=1 sat2%+=4 Selected%=-1 Object_DeleteOneItem(obj%,itm%) 0pos%= Object_FindItem(obj%,itm%)+ObjectItem% len%=pos%!40+44 loop%=pos% ObjectItem%+Obend% !loop%=loop%!len% ObjectList%?(obj%*16+4)-=1 pos%-=ObjectItem% loop%=0 Objects% ObjectList%!(obj%*16)>pos% ObjectList%!(obj%*16)-=len% loop% Obend%-=len% "start%= Object_FindStart(obj%) ObjectItem%!start%-=len% Changed%Changed%= Window_UpdateTitle Selected%>=ObjectList%?(obj%*16+4) Selected%=ObjectList%?(obj%*16+4)-1 Selected%<0 Selected%=-1 Object_LooseCopiedItem Heap_FreeBlock(CopyBuf%) Object_PasteItem(obj%, itm%,xo%,yo%,zo%) loop%,pos%,start%,return% CopyBuf%=-1 Error 17,"Copy Buffer is empty" return%=itm% /pos%= Object_NewItem(obj%,itm%)+ObjectItem% return%=-2 !CopyBuf%>1 SelectPos%=0 loop%=itm% itm%+!CopyBuf%-1 SelectList%!SelectPos%=loop% SelectPos%+=4 return%=itm% (ObjectList%?(obj%*16+4)+=!CopyBuf%-1 Object_checksize(ObjectItem%,pos%,CopyBuf%!4+8) loop%=0 CopyBuf%!4+4 !pos%!loop%=CopyBuf%!(loop%+8) loop% "start%= Object_FindStart(obj%) 4ObjectItem%!start%=pos%+loop%-start%-ObjectItem% Obend%+=CopyBuf%!4 loop%=0 !CopyBuf%-1 6pos%= Object_FindItem(obj%,itm%+loop%)+ObjectItem% pos%!4+=xo% pos%!8+=yo% pos%!12+=zo% Changed% Changed%= Window_UpdateTitle itm%=return% Object_TransformPoint( Xyz%!0, Xyz%!4, Xyz%!8,matrix%) A%=matrix% B%=Xyz% CodeSpace% Object_TransformBuild(matrix%,x%,y%,z%,rx%,ry%,rz%,sx,sy,sz) b%=Localblock% 5b%!0=matrix%:b%!4=x%<<16:b%!8=y%<<16:b%!12=z%<<16 Eb%!16=( rx%)*(1<<15):b%!20=( ry%)*(1<<15):b%!24=( rz%)*(1<<15) Eb%!28=( rx%)*(1<<15):b%!32=( ry%)*(1<<15):b%!36=( rz%)*(1<<15) 3b%!40=sx*(1<<8):b%!44=sy*(1<<8):b%!48=sz*(1<<8) A%=b% CodeSpace%+4 Object_Transform(obj%,itm%,matrix%) pos%,type% 2pos%= Object_UpdateItem(obj%,itm%)+ObjectItem% type%=?pos% type% Object_TransformPlane(pos%+44,matrix%) 2,8,9,10,11: Object_TransformMatrix(pos%+44,matrix%) Object_TransformObject(pos%+44,matrix%) Object_TransformMesh(pos%+44,matrix%) Changed% Changed%= Window_UpdateTitle Object_TransformPlane(start%,matrix%) loop%=0 Rxyz(start%,Xyz%!0,Xyz%!4,Xyz%!8):start%-=12 A%=matrix% B%=Xyz% CodeSpace% Wxyz(start%,Xyz%!0,Xyz%!4,Xyz%!8) Object_TransformMatrix(start%,matrix%) xsize%,ysize% Rwrd(start%,xsize%) Rwrd(start%,ysize%) ly%=0 ysize% lx%=0 xsize% Rxyz(start%,Xyz%!0,Xyz%!4,Xyz%!8):start%-=12 A%=matrix% B%=Xyz% CodeSpace% Wxyz(start%,Xyz%!0,Xyz%!4,Xyz%!8) Object_TransformObject(start%,matrix%) obj%,itm%,type%,pos% obj%=!start% itm%=0 ObjectList%?(obj%*16+4) 2pos%= Object_UpdateItem(obj%,itm%)+ObjectItem% ?pos% Object_TransformPlane(pos%+44,matrix%) 2,8,9,10,11: Object_TransfromMatrix(pos%+44,matrix%) Object_TransformObject(pos%+44,matrix%) Object_TransformLamp(pos%+44,matrix%) Object_TransformMesh(pos%+44,matrix%) Object_TransformMesh(start%,matrix%) points% Rwrd(start%,points%):start%+=4 loop%=0 points% Rxyz(start%,Xyz%!0,Xyz%!4,Xyz%!8):start%-=12 A%=matrix% B%=Xyz% CodeSpace% Wxyz(start%,Xyz%!0,Xyz%!4,Xyz%!8) Object_ApplyMany(sel%) sel%>-1 Object_Apply(CurrentObj%,sel%) sat%=0 sat%name$ loop%+=1 loop%=LastColour% 17,"The colour "+name$+" does not exist" ,store%=(loop%*ColDataLen%)+ObjectColour% $store%="" loop2%=LastColour% loop2%>=0 $((loop2%*ColDataLen%)+ObjectColour%)="" loop2%-=1 LastColour%=loop2%+1 Object_StoreColour(name$,newname$,diffr%,diffg%,diffb%,tranr%,trang%,tranb%,specr%,specg%,specb%,mirrr%,mirrg%,mirrb%,index,spec,flags%) loop%,store% loop%=0 loop%name$ loop%+=1 loop%=LastColour% name$<>"" 17,"The colour "+name$+" does not exist" loop%=LastColour%LastColour%+=1 ,store%=(loop%*ColDataLen%)+ObjectColour% $store%= newname$,19) store%?20=diffr% store%?21=diffg% store%?22=diffb% store%?23=tranr% store%?24=trang% store%?25=tranb% store%?26=specr% store%?27=specg% store%?28=specb% store%?29=mirrr% store%?30=mirrg% store%?31=mirrb% store%!32=index*1000 store%!36=spec*1000 store%!40=flags% l%=44 store%!l%=0 Changed% Changed%= Window_UpdateTitle Object_BuildColourTable loop%,s% ObjectColour%<>-1 ObjectColTab%<>-1 loop%=0 loop%"" Cpalnum=s%?22*&100000/100*15+s%?21*&1000/100*15+s%?20*&10/100*15 palnum+=palnum/16 "ColourTrans_ReturnColourNumber",palnum<<8 gcol% !ObjectColTab%!(loop%*4)=gcol% loop%+=1 l2%=loop% ObjectColTab%!(l2%*4)=-1 Object_GetColour( name$, index, spec, flags%) loop%,s% loop%=0 loop%name$ name$<>"None" loop%+=1 name$="None" name$=$ObjectColour% loop%=LastColour% 17,"The colour "+name$+" does not exist" (s%=(loop%*ColDataLen%)+ObjectColour% dr%=s%?20 dg%=s%?21 db%=s%?22 tr%=s%?23 tg%=s%?24 tb%=s%?25 sr%=s%?26 sg%=s%?27 sb%=s%?28 mr%=s%?29 mg%=s%?30 mb%=s%?31 index=s%!32/1000 spec=s%!36/1000 flags%=s%!40 Object_AssignColour(name$,obj%,itm%) loop%,sat% itm%<>-2 SelectPos%=4 name$<>"None" loop%=0 loop%name$ loop%+=1 loop%=LastColour% 17,"The colour "+name$+" does not exist" loop%=-1 sat%=0 col%=loop% itm%<>-1 sat%-2 item%=itm% item%=SelectList%!sat% sat%+=4 1pos%= Object_FindItem(obj%,item%)+ObjectItem% pos%?1=col% Display_RedrawItem(obj%,item%) Display_UpdateItem(item%) itm%<>-2 itm%=-1 Object_WhichColour(obj%,itm%) 0pos%= Object_FindItem(obj%,itm%)+ObjectItem% col%=pos%?1 col%>30 colname$="None" colname$=$((col%*ColDataLen%)+ObjectColour%) =colname$ Object_ReadColName(colnum%) +=$((colnum%*ColDataLen%)+ObjectColour%) Object_Selected(itm%) reply%,pos% reply%= Selected% pos%=0 pos%itm% pos%+=4 "reply%=(SelectList%!pos%=itm%) reply%= reply%= =reply% Object_SelectAdd(itm%) Object_Selected(itm%) itm%<>-1 Selected%>-1 SelectPos%=0 $SelectList%!SelectPos%=Selected% SelectPos%+=4 Selected%=-1 Selected%=itm% SelectList%!SelectPos%=itm% SelectPos%+=4 Selected%=-2 Display_UpdateItem(itm%) Object_SelectRemove(itm%) pos%,loop% Selected%=-2 pos%=0 pos%itm% pos%+=4 SelectList%!pos%=itm% loop%=pos% SelectPos%-4 5+SelectList%!loop%=SelectList%!(loop%+4) SelectPos%-=4 SelectPos%=4 Selected%=!SelectList% SelectPos%=0 Selected%=-1 Selected%=itm%Selected%=-1 Display_UpdateItem(itm%) Object_SelectAll loop%,items% B+items%=ObjectList%?(CurrentObj%*16+4)-1 items%=-1 Selected%=-1 items%=0 Selected%=0 items%>0 Selected%=-2 SelectPos%=0 loop%=0 items% I SelectList%!SelectPos%=loop% SelectPos%+=4 loop% Display_Update Object_ClearSelection pos%,itm% Selected%=-2 Selected%=-1 Display_UpdateItems(SelectList%,SelectPos%) SelectPos%=0 Selected%>-1 itm%=Selected% Selected%=-1 Display_UpdateItem(itm%) Drag_Items(win%,num%) Selected%=-2 _!DragTask%= Window_owner(win%) DragType%=5 DragSubType%=num% minx%=&100000:miny%=&100000 maxx%=0:maxy%=0 sat%=0 sat%maxx%maxx%=t% m$t%=!(DisplayBounds%+item%*16+12) t%>maxy%maxy%=t% sat%+=4 Display_BlankItem(item%) Window_ReadState(CurrentMain%) Display_ReadMain(CurrentMain%) xoff%=X1%-X3%+CentreX u0yoff%=Y2%-Y3%-MainYWidth%*Scale%/100+CentreY v minx%=minx%*Scale%/100+xoff% w miny%=miny%*Scale%/100+yoff% x maxx%=maxx%*Scale%/100+xoff% y maxy%=maxy%*Scale%/100+yoff% StartX%=minx%:StartY%=miny% b%=Localblock% b%!0=-1 b%!4=5 b%!8=minx% b%!12=miny% b%!16=maxx% b%!20=maxy% b%!24=-10000 b%!28=-10000 b%!32=10000 b%!36=10000 "Wimp_DragBox",,b% Wimp_NewPointer("ptr_drag",7,7) Drag_Item(item%,win%,num%,x%,y%,z%) b%,xoff%,yoff% !DragTask%= Window_owner(win%) DragType%=1 DragSubType%=num% DragItemX%=x% DragItemY%=y% DragItemZ%=z% Display_BlankItem(item%) Window_ReadState(CurrentMain%) Display_ReadMain(CurrentMain%) xoff%=X1%-X3%+CentreX 0yoff%=Y2%-Y3%-MainYWidth%*Scale%/100+CentreY 7minx%=!(DisplayBounds%+item%*16+0)*Scale%/100+xoff% 7miny%=!(DisplayBounds%+item%*16+4)*Scale%/100+yoff% 7maxx%=!(DisplayBounds%+item%*16+8)*Scale%/100+xoff% 8maxy%=!(DisplayBounds%+item%*16+12)*Scale%/100+yoff% StartX%=minx% StartY%=miny% b%=Localblock% "Wimp_GetPointerInfo",,b% DragPtrX%=b%!0 DragPtrY%=b%!4 DragOldX%=-10000 DragOldY%=-10000 DragUpto%=-1 b%!0=-1 b%!4=5 b%!8=minx% b%!12=miny% b%!16=maxx% b%!20=maxy% b%!24=-10000 b%!28=-10000 b%!32=10000 b%!36=10000 Wimp_NewPointer("ptr_drag",7,7) "Wimp_DragBox",,b% Drag_StartLines DragPointer%=DragSpace% Drag_Move(x%,y%) !DragPointer%=0 DragPointer%!4=x% DragPointer%!8=y% DragPointer%+=12 Drag_Draw(x%,y%) !DragPointer%=1 DragPointer%!4=x% DragPointer%!8=y% DragPointer%+=12 Drag_Node(x%,y%) !DragPointer%=2 DragPointer%!4=x% DragPointer%!8=y% DragPointer%+=12 Drag_Node2(x%,y%) !DragPointer%=3 DragPointer%!4=x% DragPointer%!8=y% DragPointer%+=12 Drag_Ready(xat%,yat%,reply%,opt%) b%=Localblock% !DragPointer%=-1 DragType%=2 DragSubType%=reply% DragTask%=CurrentTask% DragMask%=Mask% DragItemX%=xat% DragItemY%=yat% DragColour%=RedColour% DragTint%=RedTint% Dragging%= DragUpdate%=opt% Mask%=Mask% !b%=0 b%!4=7 b%!24=0 b%!28=0 b%!32=10000 b%!36=10000 "Wimp_DragBox",,b% Drag_ReadyNew(xat%,yat%,reply%,opt%,col%) DragColour%=RedColour% DragTint%=RedTint% DragColour%=BlackColour% DragTint%=BlackTint% b%=Localblock% !DragPointer%=-1 DragType%=2 DragSubType%=reply% DragTask%=CurrentTask% DragMask%=Mask% DragItemX%=xat% DragItemY%=yat% Dragging%= DragUpdate%=opt% Mask%=Mask% !b%=0 b%!4=7 b%!24=0 b%!28=0 b%!32=10000 b%!36=10000 "Wimp_DragBox",,b% Drag_StartBarDrag(win%,icon%,reply%,opt%) b%=Localblock% Dragging%= DragType%=4 DragSubType%=reply% !DragTask%= Window_owner(win%) DragUpdate%=opt% DragItemX%=win% DragItemY%=icon% DragMask%=Mask% Mask%=Mask% Window_ReadState(win%) !b%=win% b%!4=icon% "Wimp_GetIconState",,b% b%!24=b%!8+X1%-X3% b%!28=b%!12+Y1%-Y3%+Yw% b%!32=b%!16+X1%-X3% b%!36=b%!20+Y1%-Y3%+Yw% b%!0=0 b%!4=7 b%!8=0 b%!12=0 b%!16=0 b%!20=0 "Wimp_DragBox",,b% Drag_GetBarVal(win%,icon%) b%,num% b%=Localblock% !b%=win% b%!4=icon% "Wimp_GetIconState",,b% num%= $(b%!32),3)) =DragData%(num%,0) Drag_SetBarVal(win%,icon%,val%) b%=Localblock% !b%=win% b%!4=icon% "Wimp_GetIconState",,b% num%= $(b%!32),3)) DragData%(num%,0)=val% b%!4=win% "Wimp_UpdateWindow",,b%+4 more% more% Wimp_drawdragbar(win%,icon%) "Wimp_GetRectangle",,b%+4 more% Drag_SelectItems(x%,y%,reply%) b%=Localblock% DragTask%=CurrentTask% DragType%=6 DragSubType%=reply% DragUpdate%= DragItemX%=x% DragItemY%=y% !b%=win% b%!4=6 b%!8=x% b%!12=y% b%!16=x% b%!20=y% b%!24=0 b%!28=0 b%!32=10000 b%!36=10000 "Wimp_DragBox",,b%