home *** CD-ROM | disk | FTP | other *** search
RISC OS BBC BASIC V Source | 1995-02-17 | 16.8 KB | 658 lines |
- >IDEFS::4.$.!BackLoad.!RunImage
- RunImage code for !BackLoad system booter utility
- The Unbroken Circle, 1995
- Program code by Tim Wiser
- WIMP support code by Joe Taylor & Archimedes World
- Version 1.00
- Wimp_Start("System bootup",0,0)
- User_SetInitialData
- Create_Windows
- Create_Menus
- Wimp_WaitForEvent
- Wimp_CloseDown
- User_SetInitialData
- "Hourglass_Start",1
- /file=
- ("<BackgroundLoader$Dir>.BootScript")
- line$(100):
- l%=1:
- beep=
- byte=
- #file
- byte=35
- l%=l%-1
- byte<>10
- line$(l%)+=
- (byte)
- byte=10
- nextline
- #file
- endoffile%=l%-1
- #file
- "Hourglass_Off"
- nextline
- line$(l%)="-nobeep"
- beep=
- l%=l%+1
- Create_Windows
- Event_Save(window%)=
- Event_Sprites(window%)=sprites%
- Create_Menus
- Event_Menu(window%)
- Event_WindowClose(window%,buttons%)
- Event_Draw(window%,x_origin%,y_origin%)
- Event_MouseClick(window%,icon%,button%,x%,y%)
- window%
- Event_KeyPress(window%,icon%,key%)
- Event_MenuChoice(menu%)
- Event_LoadFile(file$,type$)
- Event_SaveFile(file$,window%)
- Wimp_WindowAlert(title$,message$)
- Wimp_WindowAlertBox(title$,message$,0)
- Wimp_WindowAlertBox(title$,message$,button%)
- response%
- $(wimp%+4)=message$
- button%
- 2 : response%=1
- 1 : response%=15
- 3 : response%=(1<<5)+16
- 4 : response%=(1<<6)+16
- : response%=16
- "Wimp_ReportError",wimp%,response%,title$
- ,response%
- Wimp_WindowCancel(title$,message$)
- $(wimp%+4)=message$
- response%=23
- "Wimp_ReportError",wimp%,response%,title$
- ,response%
- =response%-2
- Wimp_WindowErrorBox(title$,message$)
- Wimp_WindowAlertBox(title$,message$,2)
- Wimp_WindowTitle(window%)
- wimp%!0=window%
- "Wimp_GetWindInfo",,wimp%
- ((wimp%!60)
- &100)=0
- 1,"Title isn't indirected"
- =$(wimp%!76)
- Wimp_WindowLoad(window$)
- Wimp_WindowLoadFrom(window$,"<Obey$Dir>.Templates")
- Wimp_WindowLoadFrom(window$,template$)
- c%,i%,n%,j%,sp$,sp2$
- "Wimp_OpenTemplate",,template$
- "Wimp_LoadTemplate",,wimp%,icons%,icon_memory%,-1,window$,0
- ,,icons%
- sprites%
- 1 : wimp%!64=sprites%
- : wimp%!64=
- Event_Sprites(window%)
- "Wimp_CreateWindow",,wimp%
- "Wimp_CloseTemplate"
- "Wimp_WhichIcon",c%,wimp%+40,1+2+(1<<8),2+(1<<8)
- wimp%!40
- -1 :
- : i%=40
- m$ wimp%!4=wimp%!i% : wimp%!0=c%
- n$
- "Wimp_GetIconState",,wimp%
- o- sp$=
- Wimp_GetStringAtAddress(wimp%!28)
- p"
- "Wimp_DeleteIcon",,wimp%
- sprites%
- 1 : wimp%!32=1
- t/
- "OS_SpriteOp",&108,sprites%
- ,,,n%
- j%=0
-
- : j%+=1
- w=
- "OS_SpriteOp",&10D,sprites%,pointer_block%,20,j%
- x7 sp2$=
- Wimp_GetStringAtAddress(pointer_block%)
-
- j%=n%
- sp$=sp2$
- z4
- sp$=sp2$
- wimp%!32=sprites%
- wimp%!32=1
- wimp%!4=c%
- }.
- "Wimp_CreateIcon",,wimp%+4
- handle%
- i%+=4
- (wimp%!i%)=-1
- Wimp_WindowBringToTop(window%)
- !wimp%=window%
- "Wimp_GetWindowState",,wimp%
- wimp%!28=-1
- "Wimp_OpenWindow",,wimp%
- Wimp_WindowClose(window%)
- !wimp%=window%
- "Wimp_CloseWindow",,wimp%
- Wimp_WindowForceDraw(window%)
- window%
- -1 :
- "Wimp_ForceRedraw",-1,0,0,2*1280,2*1024
- "Wimp_ForceRedraw",window%,0,-2*1024,2*1280,0
- Wimp_WindowOpen(window%)
- !wimp%=window%
- "Wimp_GetWindowState",,wimp%
- "Wimp_OpenWindow",,wimp%
- Wimp_WindowInterface
- "Wimp_BorderWindow",,wimp%
- Wimp_IconBar(Sprite$)
- icon%
- wimp%!0=-1
- wimp%!4=0 : wimp%!8=0
- wimp%!12=68 : wimp%!16=68
- wimp%!20=&3002
- $(wimp%+24)=Sprite$
- "Wimp_CreateIcon",,wimp%
- icon%
- =icon%
- Wimp_IconCaret(window%,icon%,chars%)
- "Wimp_SetCaretPosition",window%,icon%,,,-1,chars%
- Wimp_IconText(window%,icon%)
- #wimp%!0=window% : wimp%!4=icon%
- "Wimp_GetIconState",,wimp%
- ((wimp%!24)
- &100)=0
- 1,"Icon isn't indirected"
- =$(wimp%!28)
- Wimp_IconValidation(window%,icon%)
- #wimp%!0=window% : wimp%!4=icon%
- "Wimp_GetIconState",,wimp%
- ((wimp%!24)
- &100)=0
- 1,"Icon isn't indirected"
- =$(wimp%!32)
- Wimp_IconDisable(window%,icon%)
- #wimp%!0=window% : wimp%!4=icon%
- $wimp%!8=1<<22 : wimp%!12=1<<22
- "Wimp_SetIconState",,wimp%
- Wimp_IconEnable(window%,icon%)
- #wimp%!0=window% : wimp%!4=icon%
- $wimp%!8=0 : wimp%!12=1<<22
- "Wimp_SetIconState",,wimp%
- Wimp_IconPutSprite(window%,icon%,sprite$)
- !wimp%!0=window%:wimp%!4=icon%
- "Wimp_GetIconState",,wimp%
- "Wimp_DeleteIcon",,wimp%
- =wimp%!4=wimp%!8 : wimp%!8=wimp%!12 : wimp%!12=wimp%!16
- ?wimp%!16=wimp%!20 : wimp%!20=wimp%!24 : $(wimp%+24)=sprite$
- "Wimp_CreateIcon",,wimp%
- icon%
- =icon%
- Wimp_IconPutText(window%,icon%,text$)
- #wimp%!0=window% : wimp%!4=icon%
- "Wimp_GetIconState",,wimp%
- ((wimp%!24)
- &100)=0
- 1,"Icon isn't indirected"
- $(wimp%!28)=text$
- #wimp%!0=window% : wimp%!4=icon%
- wimp%!8=0 : wimp%!12=0
- "Wimp_SetIconState",,wimp%
- Wimp_IconInterfaceStart
- "Wimp_BorderIcon",,wimp%
- Wimp_IconInterfaceFinish
- wimp%!8=0
- "Wimp_BorderIcon",,wimp%
- Wimp_MenuAdjustOn(menu%)
- "Wimp_GetPointerInfo",,pointer_block%
- ((pointer_block%!8)
- 1)=1
- "Wimp_CreateMenu",,menu%,pointer_block%!0,pointer_block%!4
- Wimp_MenuChoice(level%)
- =(wimp%!(4*level%))+1
- Wimp_MenuCreate(menu$)
- menu$="Colours"
- Wimp_MenuColours
- menu%,index%,width%,length%,k%,s%
- menu% 28+
- Wimp_MenuNoOfEntries(menu$)*24
- 7menu%?12=7 : menu%?13=2 : menu%?14=7 :menu%?15=0
- +menu%!16=140 : menu%!20=44 : menu%!24=0
- index%=menu%+28
- $menu%=
- menu$,
- menu$,"\")-1)
- #width%=
- menu$,
- menu$,"\")-1))
- $menu$+="\" : Menu_NoOfEntries%=0
- menu$<>""
- menu$=
- menu$,
- menu$,"\")+1)
- menu$
- 1 !index%=0 : index%!4=-1 : index%!8=&7000021
- length%=
- menu$,"\")-1
- k%=
- menu$,length%),">")
- % s%=
- menu$,k%+1,length%-k%))
- index%!4=s%
- length%=k%-1
- " $(index%+12)=
- menu$,length%)
- length%>width%
- width%=length%
- index%+=24
- menu%!16=16*(width%+1)
- (index%!-24=index%!-24
- &80 : =menu%
- Wimp_MenuColours
- Wimp_MenuCreateColours(" ")
- Wimp_MenuCreateColours(title$)
- x$,men%,j%,i%
- 6x$=title$+"\0\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15"
- men%=
- Wimp_MenuCreate(x$)
- i%=0
- i%<4,i%=9,i%=12,i%=14,i%=15 : j%=7
- : j%=0
- men%?(39+i%*24)=i%*16+j%
- Wimp_MenuCentre(men%,i%+1)
- =men%
- Wimp_MenuNoOfEntries(menu$)
- n% ,j% : n%=0 : j%=0
- menu$,"\",j%+1)
- j%<>0
- n%+=1
- j%=0
- Wimp_MenuBackGroundColour(menu%,item%,colour%)
- fore%,i%
- !&fore%=(menu%?(39+(item%-1)*24))
- "(i%=((menu%?(39+(item%-1)*24))
- #/menu%?(39+(item%-1)*24)=fore%+16*colour%+i%
- Wimp_MenuCentre(menu%,item%)
- ':menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)
- (1<<3)
- Wimp_MenuClose
- "Wimp_CreateMenu",-1
- Wimp_MenuDisable(menu%,item%)
- .;menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)
- (1<<22)
- Wimp_MenuDottedLine(menu%,item%)
- 17menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))
- Wimp_MenuEnable(menu%,item%)
- Wimp_MenuDisable(menu%,item%)
- 5;menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)
- (1<<22)
- Wimp_MenuForegroundColour(menu%,item%,colour%)
- 8Emenu%?(39+(item%-1)*24)=colour%+16*((menu%?(39+(item%-1)*24))
- Wimp_MenuGlue(menu1%,item%,menu2%)
- menu1%!(8+item%*24)=menu2%
- Wimp_MenuItem(menu%,item%,item$)
- >,$(menu%+(40+(item%-1)*24))=
- item$,12)+
- Wimp_MenuMessage(menu%,item%)
- A<menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))
- (1<<3)
- Wimp_MenuPopUp(Menu%,x%,y%)
- menu%=Menu%
- "Wimp_CreateMenu",,menu%,x%-64,y%+20
- Wimp_MenuPopUpBar(x%,y%)
- n% : n%=0
- ((Bar_Menu%!(28+n%*24))
- %10000000)=0
- J n%+=1
- "Wimp_CreateMenu",,Bar_Menu%,x%-64,96+n%*44
- menu%=Bar_Menu%
- Wimp_MenuTick(menu%,item%)
- P7menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))
- Wimp_MenuTitle(menu%,title$)
- $menu%=
- title$,12)+
- Wimp_MenuWrite(menu%,item%,buffer%,val%,BufferLength%)
- V7menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))
- W8menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)
- X#menu%!(40+(item%-1)*24)=buffer%
- Y menu%!(44+(item%-1)*24)=val%
- Z)menu%!(48+(item%-1)*24)=BufferLength%
- Wimp_SpritesLoad
- Wimp_SpritesPathLoad("<Obey$Dir>.Sprites")
- direct_sprites%=sprites%
- Wimp_SpritesPathLoad(pathname$)
- S%,T%
- b,S%=
- "<Obey$Dir>.Sprites":T%=
- #S%+16:
- sprites%T%,spname%12
- !sprites%=T%:sprites%!8=0
- "OS_SpriteOp",&109,sprites%
- "OS_SpriteOp",&10A,sprites%,pathname$
- Wimp_FileType(type%)
- type%
- &FFF:="Text"
- &FFD:="Data"
- &FFB:="Basic"
- &FF9:="Sprite"
- &FED:="Palette"
- &FEC:="Template"
- &AFF:="Draw"
- &1000:="Folder"
- &2000:="Application"
- ~(type%)
- Wimp_GetFilePathName
- Wimp_GetStringAtAddress(wimp%+44)
- Wimp_FileLoad(pathname$)
- S%,T%,file%
- pathname$
- #S%+16
- file%T%
- ("LOAD"+pathname$+""+
- ~file%)
- =file%
- Wimp_GetStringAtAddress(array%)
- s$:s$=""
- (?array%<>13)
- (?array%<>0):s$+=
- (?array%):array%+=1:
- Wimp_GetFileFromPathname(f$)
- f$,".")
- 0 :=f$
- Wimp_GetFileFromPathname(
- (f$)-
- f$,".")))
- Wimp_SendToEdit(file$)
- wimp%!4=&6CC01C0C
- wimp%!16=5
- wimp%!36=0
- wimp%!40=&FFF
- $(wimp%+44)=file$+
- file$+45
- !wimp%=4+(n%>>2)<<2
- !wimp%=n%
- "Wimp_SendMessage",17,wimp%,0
- Wimp_Start(TaskName$,wimp_memory%,icon%)
- wimp% wimp_memory%,icons% icon%
- wimp_memory%<256
- wimp_memory%=256
- icon_memory%=icons%+icon%
- task$=TaskName$
- +indirect_sprites%=1 : direct_sprites%=1
- Wimp_SetEventVariables
- Wimp_Error:
- "Wimp_Initialise",200,&4B534154,TaskName$
- version%,task%
- Wimp_BASICParameters
- com$,param$,I%
- "OS_GetEnv"
- com$
- params$=""
- com$," -quit ")
- params$=
- com$,
- com$," ",I%+
- " -quit ")+1)
- =params$
- Wimp_SetEventVariables
- pointer_block% 20
- interface%=
- .null%=1 :draw%=2 : pointer_leaving%=1<<4
- 1pointer_entering%=1<<5:mouse%=1<<6:drag%=1<<7
- &key%=1<<8:menu%=1<<9:scroll%=1<<10
- @lose_caret%=1<<11:gain_caret%=1<<12:message%=(1<<17)+(1<<18)
- 0recorder%=1<<18:acknowledge%=1<<19:window%=0
- !sprites%=1:version%=0:task%=0
- *Bar_Window%=-2:Bar_Icon%=0:Bar_Menu%=0
- *x_origin%=0:y_origin%=0:SaveWindow%=-3
- 3message_quit%=0:message_save%=2:message_load%=3
- !mouse_button%=2:save_event%=0
- top_line%=0 : bottom_line%=0
- Wimp_Error
- "Hourglass_Smash"
- X$,x%
- $+"atline"+
- 10)+" parsing line "+
- line%
- ErrorMsg%36
- EErrorMsg%!0=36:ErrorMsg%!12=0:ErrorMsg%!16=&81080:ErrorMsg%!20=x%
- $(ErrorMsg%+24)="!RunImage"
- "Wimp_SendMessage",17,ErrorMsg%
- Wimp_WindowAlert(task$,X$)
- Wimp_CloseDown
- Wimp_CloseDown
- "Wimp_CloseDown",task%,"TASK"
- Wimp_Quit
- finished%=
- Wimp_ReadVariable(Variable$)
- len%,result%,variable%
- $wimp%=Variable$
- "OS_ReadVarVal",wimp%,wimp%+255,255,,3
- ,,len%
- wimp%?(len%+255)=13
- =$(wimp%+255)
- Wimp_WaitForEvent
- mask%,event%
- line%=1:
- starttimer=
- finished%=
- mask%=%111000011001
- :col=1
- "Wimp_Poll",,wimp%
- event%
- event%
- 1 :
- Wimp_PollDrawWindow
- 2 :
- "Wimp_OpenWindow",,wimp%
- 3 :
- Wimp_PollCloseWindow
- 6 :
- Wimp_PollMouseClick
- 7 :
- Wimp_PollSaveMessage
- 8 :
- Wimp_PollKeyPress
- 9 :
- Event_MenuChoice(menu%)
- 17,18:
- Wimp_PollMessages
- X,Y,Z
- Z=7
- Wimp_WindowAlert("Message from Background Loader","Boot-up aborted"):finished%=
- starttimer=
- timer
- starttimer=
- do_next_line
- finished%
- beep=
- timer
- >t+10
- starttimer=
- do_next_line
- line%=line%+1
- line$(line%)<>"-nobeep"+
- (10)
- "WimpTask "+line$(line%)
- line%=endoffile%
- finished%=
- col
- 1 :
- 0,11:
- col=0
- 0 :
- 0,4:
- col=1
- 50,1000
- "System booting"
- starttimer=
- Wimp_PollDrawWindow
- more%
- "Wimp_RedrawWindow",,wimp%
- more%
- window%=wimp%!0
- Ax_origin%=16+wimp%!4-wimp%!20:y_origin%=-16+wimp%!16-wimp%!24
- more%
- interface%
- "Wimp_BorderWindow",,wimp%
- Event_Draw(window%,x_origin%,y_origin%)
- "Wimp_GetRectangle",,wimp%
- more%
- Wimp_PollCloseWindow
- "Wimp_GetPointerInfo",,wimp%
- ) window%=wimp%!12 : buttons%=wimp%!8
- Event_WindowClose(window%,buttons%)
- 2 !wimp%=window% :
- "Wimp_CloseWindow",,wimp%
- Wimp_PollMouseClick
- J button%=wimp%!8:window%=wimp%!12:icon%=wimp%!16:x%=wimp%!0:y%=wimp%!4
- button%
- 2 :
- Wimp_PollMenuPopUp
- Event_Save(window%)
- ,
- Wimp_PollMouseSave
- 1
- Wimp_PollEventMouseClick
-
- Wimp_PollMenuPopUp
- menu%=
- Event_Menu(window%)
- menu%
-
- window%
-
- -2 : n%=0
- %3
- ((Bar_Menu%!(28+n%*24))
- %10000000)=0
- n%+=1
-
- (:
- "Wimp_CreateMenu",,Bar_Menu%,x%-64,96+n%*44
- )4
- "Wimp_CreateMenu",,menu%,x%-64,y%+20
-
- Wimp_PollMouseSave
- icon%
- 0 :
- button%
- &50
- Wimp_PollDragBox(window%)
- 2 :
- button%
- Wimp_PollSaveFile(window%)
- Wimp_PollEventMouseClick
- interface%
- "Wimp_BorderIcon",,wimp%
- Event_MouseClick(window%,icon%,button%,x%,y%)
- interface%
- 8( wimp%!0=x%:wimp%!4=y% : wimp%!8=0
- 9( wimp%!12=window% : wimp%!16=icon%
- :!
- "Wimp_BorderIcon",,wimp%
- Wimp_PollSaveFile(window%)
- file$
- ?@ wimp%!0=window% : wimp%!4=1 :
- "Wimp_GetIconState",,wimp%
- file$=$(wimp%!28)
- file$,".")
- 0 :
- C@ $(wimp%+4)="To save, drag the icon to a directory window"
- D+
- "Wimp_ReportError",wimp%,16,task$
- F%
- Event_SaveFile(file$,window%)
- "Wimp_CreateMenu",-1
- Wimp_PollDragBox(window%)
- x%,y%
- save%=window%
- !wimp%=window%
- "Wimp_GetWindowState",,wimp%
- O- x%=wimp%!4-wimp%!20:y%=wimp%!16-wimp%!24
- wimp%!4=0
- "Wimp_GetIconState",,wimp%
- !wimp%=window%
- wimp%!4=5
- T, wimp%!8=x%+wimp%!8:wimp%!12=y%+wimp%!12
- U. wimp%!16=x%+wimp%!16:wimp%!20=y%+wimp%!20
- wimp%!24=0:wimp%!28=0
- W* wimp%!32=&7FFFFFFF:wimp%!36=&7FFFFFFF
- "Wimp_DragBox",,wimp%
- Wimp_PollKeyPress
- [1 window%=wimp%!0:icon%=wimp%!4:key%=wimp%!24
- Event_Save(window%)
- ](
- WimpPoll_SaveFile(window%)
- ^/
- Event_KeyPress(window%,icon%,key%)
- Wimp_PollSaveMessage
- file$,window%,icon%,x%,y%
- "Wimp_GetPointerInfo",,wimp%
- d: window%=wimp%!12:icon%=wimp%!16:x%=wimp%!0:y%=wimp%!4
- e> wimp%!0=save% : wimp%!4=1 :
- "Wimp_GetIconState",,wimp%
- file$=$(wimp%!28)
- g+ file$=
- Wimp_GetFileFromPathname(file$)
- wimp%!20=window%
- wimp%!24=icon%
- wimp%!28=x%:wimp%!32=y%
- wimp%!36=length%
- wimp%!0=64
- wimp%!12=0
- wimp%!16=1
- wimp%!40=&FFF
- $(wimp%+44)=file$
- "Wimp_SendMessage",17,wimp%,wimp%!20,wimp%!24
- Wimp_PollMessages
- file$
- u,file$=
- Wimp_GetStringAtAddress(wimp%+44)
- wimp%!16
-
- 0 : finished%=
-
-
- z/
- PROCWimp_IconPutText(save%,1,file$)
- {C wimp%!0=save% : wimp%!4=1 :
- "Wimp_GetIconState",,wimp%
- $(wimp%!28)=file$
- }< wimp%!0=save% : wimp%!4=1 : wimp%!8=0 : wimp%!12=0
- ~'
- "Wimp_SetIconState",,wimp%
- 0
- PROCWimp_IconCaret(save%,1,LENfile$)
- 8
- "Wimp_SetCaretPosition",save%,1,,,-1,
- file$
- &
- Event_SaveFile(file$,save%)
-
- G type$=
- Wimp_FileType(wimp%!40) :
- Event_LoadFile(file$,type$)
-
- Wimp_GetStringAtAddress(array%)
- s$:s$=""
- (?array%<>13)
- (?array%<>0):s$+=
- (?array%):array%+=1:
- Wimp_GetFileFromPathname(f$)
- f$,".")
- 0 :=f$
- Wimp_GetFileFromPathname(
- (f$)-
- f$,".")))
- Wimp_FileType(type%)
- type%
- &FFF:="Text"
- &FFD:="Data"
- &FFB:="Basic"
- &FF9:="Sprite"
- &FED:="Palette"
- &FEC:="Template"
- &AFF:="Draw"
- &1000:="Folder"
- &2000:="Application"
- ~(type%)
-