Here is a little trick to add stuff to the dialogs quite easy.
You will have anything in one XML, not only the gadgets, but also menus, statusbars, toolbars, even popup menus would be possible (but I was too lazy to add this).
I had to hack into PB a little bit, it would be more future proof if the PB team would just integrate it into the dialog lib.
Shouldn't be a big deal, as you can see in that tiny code, anything needed is there already.
Code:
;Code: https://www.purebasic.fr/english/viewtopic.php?f=12&t=76247
DeclareModule DEX
EnableExplicit
Declare UsedWithDD(MenuMinID.i) ;ignore this, only needed, when included in DialogDesign0R
Declare DefaultImage(Image.i) ;set a default picture (in case the runtime constant is not known), to prevent compiler warnings
Declare ParseDialogXML(XML)
Declare InitDialog(Dialog, XML, Name.s, OpenIt = #False)
Declare DeInitDialog(Dialog)
Declare DeInit()
EndDeclareModule
Module DEX
Structure DlgWindow
*VTable
*StaticData
*Parent
Gadget.i
Folded.l
HasTitle.l
*ChildData
tMargin.l
bMargin.l
lMargin.l
rMargin.l
vExpand.l
hExpand.l
vExpandMax.l
hExpandMax.l
vAlign.l
hAlign.l
RequestedWidth.l
RequestedHeight.l
Window.i
EndStructure
Structure _MYITEMS_
MenuXML.i
MenuID.i
StatusBarXML.i
StatusBarID.i
MainXML.i
ToolBarXML.i
ToolBarID.i
WindowName.s
DialogNo.i
tMargin.l
bMargin.l
*dialog.DlgWindow
EndStructure
Global NewList Items._MYITEMS_()
Global NewMap Cons.l()
Global MinID.i, CurrID.i, DefaultImage.i
Procedure CreatePopup(*Node)
EndProcedure
Procedure DefaultImage(Image.i)
If IsImage(Image)
DefaultImage = ImageID(Image)
EndIf
EndProcedure
Procedure UsedWithDD(MenuMinID.i) ;only needed, when used in DialogDesign0R
CurrID = MenuMinID
MinID = CurrID
EndProcedure
Procedure GetVal(ID.s, PB_Any = #True)
Protected Result, i, ID2.s, Found
If ID
ID2 = LCase(ID)
For i = 0 To CountString(ID2, "|")
If FindMapElement(Cons(), StringField(ID2, i + 1, "|"))
Result = Result | Cons()
Found = #True
EndIf
Next i
If Found = #False
Result = GetRuntimeInteger(ID)
EndIf
ElseIf PB_Any
Result = #PB_Any
EndIf
ProcedureReturn Result
EndProcedure
Procedure DoMenus(MenuID, *Node)
Protected i, id.s, iID, iID2, text.s, image.s, event.s, evproc
If XMLNodeType(*Node) <> #PB_XML_Normal
ProcedureReturn
EndIf
Select LCase(GetXMLNodeName(*Node))
Case "title"
MenuTitle(GetXMLAttribute(*Node, "text"))
For i = 1 To XMLChildCount(*Node)
DoMenus(MenuID, ChildXMLNode(*Node, i))
Next i
Case "submenu"
image = GetXMLAttribute(*Node, "image")
iID = -1
If image
iID = GetVal(image)
EndIf
If IsImage(iID)
OpenSubMenu(GetXMLAttribute(*Node, "text"), ImageID(iID))
Else
OpenSubMenu(GetXMLAttribute(*Node, "text"))
EndIf
For i = 1 To XMLChildCount(*Node)
DoMenus(MenuID, ChildXMLNode(*Node, i))
Next i
CloseSubMenu()
Case "menubar"
MenuBar()
Case "menuitem"
iID2 = -1
id = GetXMLAttribute(*Node, "id")
text = GetXMLAttribute(*Node, "text")
event = GetXMLAttribute(*Node, "onevent")
image = GetXMLAttribute(*Node, "image")
If CurrID
iID = CurrID
CurrID + 1
Else
iID = GetVal(id)
EndIf
iID2 = GetVal(image)
If IsImage(iID2)
MenuItem(iID, text, ImageID(iID2))
Else
MenuItem(iID, text)
EndIf
If CurrID = 0
If event
evproc = GetRuntimeInteger(event)
If evproc
BindMenuEvent(MenuID, iID, evproc)
EndIf
EndIf
EndIf
EndSelect
EndProcedure
Procedure MenuAdd(Dialog.i)
Protected Found, ID.s, i, *Node, Result, type.s, flags.s
If IsDialog(Dialog) = 0
ProcedureReturn
EndIf
ForEach Items()
If Items()\DialogNo = Dialog
Found = #True
Break
EndIf
Next
If Found = #False Or Items()\MenuXML = 0
ProcedureReturn
EndIf
*Node = MainXMLNode(Items()\MenuXML)
ID = GetXMLAttribute(*Node, "id")
type = GetXMLAttribute(*Node, "type")
flags = GetXMLAttribute(*Node, "flags")
Items()\MenuID = GetVal(ID)
If CurrID
Items()\MenuID = CurrID
CurrID + 1
EndIf
If Items()\MenuID = #PB_Any
If LCase(type) = "imagemenu"
Items()\MenuID = CreateImageMenu(#PB_Any, WindowID(DialogWindow(Dialog)), GetVal(flags, 0))
Else
Items()\MenuID = CreateMenu(#PB_Any, WindowID(DialogWindow(Dialog)))
EndIf
ElseIf LCase(type) = "imagemenu"
CreateImageMenu(Items()\MenuID, WindowID(DialogWindow(Dialog)), GetVal(flags, 0))
Else
CreateMenu(Items()\MenuID, WindowID(DialogWindow(Dialog)))
EndIf
Result = Items()\MenuID
For i = 1 To XMLChildCount(*Node)
DoMenus(Result, ChildXMLNode(*Node, i))
Next i
Items()\Dialog\bMargin + MenuHeight()
RefreshDialog(Dialog)
ProcedureReturn Result
EndProcedure
Procedure ToolBarAdd(Dialog.i)
Protected Found, ID.s, i, *Node, *CNode, Result, text.s, image.s, iID, bID, bbID, flags.s, iflags, type.s, tooltip.s
If IsDialog(Dialog) = 0
ProcedureReturn
EndIf
ForEach Items()
If Items()\DialogNo = Dialog
Found = #True
Break
EndIf
Next
If Found = #False Or Items()\ToolBarXML = 0
ProcedureReturn
EndIf
*Node = MainXMLNode(Items()\ToolBarXML)
ID = GetXMLAttribute(*Node, "id")
flags = GetXMLAttribute(*Node, "flags")
Items()\ToolBarID = GetVal(ID)
If flags
iflags = GetVal(flags)
If iflags = #PB_Any
iflags = 0
EndIf
EndIf
If Items()\ToolBarID = #PB_Any Or CurrID
Items()\ToolBarID = CreateToolBar(#PB_Any, WindowID(DialogWindow(Dialog)), iflags)
Else
CreateToolBar(Items()\ToolBarID, WindowID(DialogWindow(Dialog)))
EndIf
Result = Items()\ToolBarID
For i = 1 To XMLChildCount(*Node)
*CNode = ChildXMLNode(*Node, i)
If XMLNodeType(*CNode) = #PB_XML_Normal
ID = GetXMLAttribute(*CNode, "id")
text = GetXMLAttribute(*CNode, "text")
image = GetXMLAttribute(*CNode, "image")
flags = GetXMLAttribute(*CNode, "flags")
type = GetXMLAttribute(*CNode, "type")
tooltip = GetXMLAttribute(*CNode, "tooltip")
If CurrID
bID = CurrID
CurrID + 1
Else
bID = GetVal(ID)
EndIf
Select GetXMLNodeName(*CNode)
Case "toolbutton"
If type = "standard"
ToolBarStandardButton(bID, GetVal(image), GetVal(flags, 0), text)
Else
iID = GetVal(image)
If IsImage(iID)
iID = ImageID(iID)
ElseIf DefaultImage
iID = DefaultImage
Else
iID = 0
EndIf
ToolBarImageButton(bID, iID, GetVal(flags, 0), text)
EndIf
If tooltip
ToolBarToolTip(Result, bID, tooltip)
EndIf
Case "toolseparator"
ToolBarSeparator()
EndSelect
EndIf
Next i
Items()\Dialog\tMargin + ToolBarHeight(Result)
RefreshDialog(Dialog)
ProcedureReturn Result
EndProcedure
Procedure StatusBarAdd(Dialog.i)
Protected Found, ID.s, i, *Node, *CNode, Result, Pos, iID
Protected width.s, text.s, flags.s, min.s, max.s, type.s, Value.s, Image.s
If IsDialog(Dialog) = 0
ProcedureReturn
EndIf
ForEach Items()
If Items()\DialogNo = Dialog
Found = #True
Break
EndIf
Next
If Found = #False Or Items()\StatusBarXML = 0
ProcedureReturn
EndIf
*Node = MainXMLNode(Items()\StatusBarXML)
ID = GetXMLAttribute(*Node, "id")
If CurrID
Items()\StatusBarID = CurrID
CurrID + 1
Else
Items()\StatusBarID = GetVal(ID)
EndIf
If Items()\StatusBarID = #PB_Any
Items()\StatusBarID = CreateStatusBar(#PB_Any, WindowID(DialogWindow(Dialog)))
Else
CreateStatusBar(Items()\StatusBarID, WindowID(DialogWindow(Dialog)))
EndIf
Result = Items()\StatusBarID
For i = 1 To XMLChildCount(*Node)
*CNode = ChildXMLNode(*Node, i)
If XMLNodeType(*CNode) = #PB_XML_Normal And GetXMLNodeName(*CNode) = "field"
width = GetXMLAttribute(*CNode, "width")
text = GetXMLAttribute(*CNode, "text")
flags = GetXMLAttribute(*CNode, "flags")
min = GetXMLAttribute(*CNode, "min")
max = GetXMLAttribute(*CNode, "max")
type = GetXMLAttribute(*CNode, "type")
Value = GetXMLAttribute(*CNode, "value")
Image = GetXMLAttribute(*CNode, "image")
If width
AddStatusBarField(Val(width))
Else
AddStatusBarField(#PB_Ignore)
EndIf
Select LCase(type)
Case "progress"
If min = "" Or max = ""
StatusBarProgress(Result, Pos, Val(Value), GetVal(flags, 0))
Else
StatusBarProgress(Result, Pos, Val(Value), GetVal(flags, 0), Val(min), Val(max))
EndIf
Case "image"
iID = GetVal(image)
If IsImage(iID) = 0 And DefaultImage = 0
;Debugger doesn't like non existing Images
Else
If IsImage(iID) = 0
iID = DefaultImage
Else
iID = ImageID(iID)
EndIf
StatusBarImage(Result, Pos, iID, GetVal(flags, 0))
EndIf
Default
StatusBarText(Result, Pos, text, GetVal(flags, 0))
EndSelect
Pos + 1
EndIf
Next i
Items()\Dialog\bMargin + StatusBarHeight(Items()\StatusBarID)
RefreshDialog(Dialog)
ProcedureReturn Result
EndProcedure
Procedure MyParseXML(XML, *Node, Name.s = "")
Protected i, a$, Found
If XMLNodeType(*Node) = #PB_XML_Normal
Select LCase(GetXMLNodeName(*Node))
Case "dialogs"
For i = 1 To XMLChildCount(*Node)
MyParseXML(XML, ChildXMLNode(*Node, i))
Next i
Case "window"
a$ = GetXMLAttribute(*Node, "name")
Found = #False
ForEach Items()
If Items()\MainXML = XML And Items()\WindowName = a$
Found = #True
Break
EndIf
Next
If Found = #False
AddElement(Items())
Items()\MainXML = XML
Items()\WindowName = a$
EndIf
For i = 1 To XMLChildCount(*Node)
MyParseXML(XML, ChildXMLNode(*Node, i), a$)
Next i
Case "menu"
If Name
If Items()\MenuXML
FreeXML(Items()\MenuXML)
EndIf
;store for later use
Items()\MenuXML = CreateXML(#PB_Any)
CopyXMLNode(*Node, RootXMLNode(Items()\MenuXML))
EndIf
Case "statusbar"
If Name
If Items()\StatusBarXML
FreeXML(Items()\StatusBarXML)
EndIf
;store for later use
Items()\StatusBarXML = CreateXML(#PB_Any)
CopyXMLNode(*Node, RootXMLNode(Items()\StatusBarXML))
EndIf
Case "popup"
CreatePopup(*Node)
Case "toolbar"
If Name
If Items()\ToolBarXML
FreeXML(Items()\ToolBarXML)
EndIf
;store for later use
Items()\ToolBarXML = CreateXML(#PB_Any)
CopyXMLNode(*Node, RootXMLNode(Items()\ToolBarXML))
EndIf
EndSelect
EndIf
EndProcedure
Procedure ParseDialogXML(XML.i)
Protected a$, b$, i, j
If MapSize(Cons()) = 0
Restore PBConstants
Read.s a$
b$ + LCase(a$)
Repeat
Read.s a$
If a$
b$ = b$ + "|" + LCase(a$)
EndIf
Until a$ = ""
For i = 0 To CountString(b$, "|")
Read.l j
Cons(StringField(b$, i + 1, "|")) = j
Next i
EndIf
If MinID
CurrID = MinID
EndIf
If IsXML(XML) = 0
ProcedureReturn
EndIf
MyParseXML(XML, MainXMLNode(XML))
ProcedureReturn #True
EndProcedure
Procedure DeInitDialog(Dialog)
If IsDialog(Dialog) = 0
ProcedureReturn
EndIf
ForEach Items()
If Items()\DialogNo = Dialog
If Items()\MenuXML
FreeXML(Items()\MenuXML)
EndIf
If Items()\StatusBarXML
FreeXML(Items()\StatusBarXML)
EndIf
If Items()\ToolBarXML
FreeXML(Items()\ToolBarXML)
EndIf
Items()\dialog\bMargin = Items()\bMargin
Items()\dialog\tMargin = Items()\tMargin
DeleteElement(Items())
Break
EndIf
Next
EndProcedure
Procedure InitDialog(Dialog, XML.i, Name.s, OpenIt = #False)
Protected *Pointer.INTEGER, Found, i, k
If IsDialog(Dialog) = 0 Or IsXML(XML) = 0
ProcedureReturn
EndIf
Found = #False
For k = 1 To 2
ForEach Items()
If Items()\MainXML = XML And Items()\WindowName = Name
Found = #True
Break
EndIf
Next
If Found = #False
ParseDialogXML(XML)
EndIf
Next k
If Found = #False
ProcedureReturn
EndIf
If OpenIt
OpenXMLDialog(Dialog, XML, Name)
EndIf
Items()\DialogNo = Dialog
*Pointer = DialogID(Dialog)
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
Items()\Dialog = *Pointer\i + $28
CompilerElse
Items()\Dialog = *Pointer\i + $18
CompilerEndIf
Items()\bMargin = Items()\Dialog\bMargin
Items()\tMargin = Items()\Dialog\tMargin
StatusBarAdd(Dialog)
MenuAdd(Dialog)
ToolBarAdd(Dialog)
ProcedureReturn #True
EndProcedure
Procedure DeInit()
ForEach Items()
If Items()\MenuXML
FreeXML(Items()\MenuXML)
EndIf
If Items()\StatusBarXML
FreeXML(Items()\StatusBarXML)
EndIf
If Items()\ToolBarXML
FreeXML(Items()\ToolBarXML)
EndIf
Next
ClearList(Items())
EndProcedure
DataSection
PBConstants: ;pseudo runtime constants... just add more if needed
Data.s "#PB_ToolBar_Normal", "#PB_ToolBar_Toggle", "#PB_ToolBar_Small", "#PB_ToolBar_Large", "#PB_ToolBar_Text", "#PB_ToolBar_InlineText"
Data.s "#PB_ToolBarIcon_New", "#PB_ToolBarIcon_Open", "#PB_ToolBarIcon_Save", "#PB_ToolBarIcon_Print", "#PB_ToolBarIcon_PrintPreview"
Data.s "#PB_ToolBarIcon_Find", "#PB_ToolBarIcon_Replace", "#PB_ToolBarIcon_Cut", "#PB_ToolBarIcon_Copy", "#PB_ToolBarIcon_Paste"
Data.s "#PB_ToolBarIcon_Undo", "#PB_ToolBarIcon_Redo", "#PB_ToolBarIcon_Delete", "#PB_ToolBarIcon_Properties", "#PB_ToolBarIcon_Help"
Data.s "#PB_Menu_ModernLook", "#PB_StatusBar_Raised", "#PB_StatusBar_BorderLess", "#PB_StatusBar_Center", "#PB_StatusBar_Right"
Data.s ""
Data.l #PB_ToolBar_Normal, #PB_ToolBar_Toggle, #PB_ToolBar_Small, #PB_ToolBar_Large, #PB_ToolBar_Text, #PB_ToolBar_InlineText
Data.l #PB_ToolBarIcon_New, #PB_ToolBarIcon_Open, #PB_ToolBarIcon_Save, #PB_ToolBarIcon_Print, #PB_ToolBarIcon_PrintPreview
Data.l #PB_ToolBarIcon_Find, #PB_ToolBarIcon_Replace, #PB_ToolBarIcon_Cut, #PB_ToolBarIcon_Copy, #PB_ToolBarIcon_Paste
Data.l #PB_ToolBarIcon_Undo, #PB_ToolBarIcon_Redo, #PB_ToolBarIcon_Delete, #PB_ToolBarIcon_Properties, #PB_ToolBarIcon_Help
Data.l #PB_Menu_ModernLook, #PB_StatusBar_Raised, #PB_StatusBar_BorderLess, #PB_StatusBar_Center, #PB_StatusBar_Right
Data.l 0
EndDataSection
EndModule
CompilerIf #PB_Compiler_IsMainFile
UsePNGImageDecoder()
Runtime Enumeration
#MyBar
#MainMenu
#Menu_Load
#Menu_Save
#Menu_Sub1
#Image_Load
#MainToolBar
#Button_Properties
EndEnumeration
Runtime Procedure OnLoad()
Debug "load clicked"
EndProcedure
Procedure.s GetXMLString()
Protected XML$
XML$ + ~"<?xml version='1.0' encoding='UTF-16'?>\n"
XML$ + ~"\n"
XML$ + ~"<dialogs>\n"
XML$ + ~" <window flags='#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered' text='Bla' minheight='450' name='window_1'>\n"
XML$ + ~" <vbox expand='item:1'>\n"
XML$ + ~" <editor name='editor_1' width='500' height='300'/>\n"
XML$ + ~" <button name='button' height='24' text='Hi' />\n"
XML$ + ~" </vbox>\n"
XML$ + ~" <statusbar id='#MyBar'>\n"
XML$ + ~" <field width='100' text='text' />\n"
XML$ + ~" <field width='64' image='#Image_Load' type='image' flags='#PB_StatusBar_Center'/>\n"
XML$ + ~" <field width='120' min='0' max='80' value='60' type='progress'/>\n"
XML$ + ~" <field text='more text...' />\n"
XML$ + ~" </statusbar>\n"
XML$ + ~" <menu id='#MainMenu' type='imagemenu' flags='#PB_Menu_ModernLook'>\n"
XML$ + ~" <title text='File'>\n"
XML$ + ~" <menuitem id='#Menu_Load' text='Load' onevent='OnLoad()' image='#Image_Load' />\n"
XML$ + ~" <menubar />\n"
XML$ + ~" <menuitem id='#Menu_Save' text='Save' />\n"
XML$ + ~" <submenu text='submenu'>\n"
XML$ + ~" <menuitem id='#Menu_Sub1' text='whatever' />\n"
XML$ + ~" </submenu>\n"
XML$ + ~" </title>\n"
XML$ + ~" </menu>\n"
XML$ + ~" <toolbar id='#MainToolBar' flags='#PB_ToolBar_Large'>\n"
XML$ + ~" <toolbutton id='#Menu_Load' image='#Image_Load' tooltip='Load something'/>\n"
XML$ + ~" <toolseparator />\n"
XML$ + ~" <toolbutton id='#Button_Properties' image='#PB_ToolBarIcon_Properties' type='standard' tooltip='open preferences' />\n"
XML$ + ~" </toolbar>\n"
XML$ + ~" </window>\n"
XML$ + ~"</dialogs>\n"
ProcedureReturn XML$
EndProcedure
a$ = GetXMLString()
CatchImage(#Image_Load, ?Pic, ?PicEnd - ?Pic)
If CatchXML(0, @a$, StringByteLength(a$), 0, #PB_Unicode)
; DEX::ParseDialogXML(0)
CreateDialog(0)
DEX::InitDialog(0, 0, "window_1", #True)
SetGadgetText(DialogGadget(0, "editor_1"), ~"this is our dialog xml:\n\n" + a$)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf
End
DataSection
Pic:
Data.l $474E5089, $0A1A0A0D, $0D000000, $52444849, $10000000, $10000000, $00000608, $FFF31F00, $00000061, $58457419, $666F5374, $72617774, $64410065, $2065626F, $67616D49, $61655265
Data.l $C9717964, $00003C65, $54692203, $4D587458, $6F633A4C, $64612E6D, $2E65626F, $00706D78, $00000000, $70783F3C, $656B6361, $65622074, $3D6E6967, $BFBBEF22, $64692022, $3557223D
Data.l $704D304D, $69686543, $65727A48, $544E7A53, $636B7A63, $3F226439, $783C203E, $706D783A, $6174656D, $6C6D7820, $783A736E, $6461223D, $3A65626F, $6D3A736E, $2F617465, $3A782022
Data.l $74706D78, $41223D6B, $65626F64, $504D5820, $726F4320, $2E352065, $30632D30, $36203136, $34312E34, $39343930, $3032202C, $312F3031, $37302F32, $3A30312D, $303A3735, $20202031
Data.l $20202020, $203E2220, $6664723C, $4644523A, $6C6D7820, $723A736E, $223D6664, $70747468, $772F2F3A, $772E7777, $726F2E33, $39312F67, $302F3939, $32322F32, $6664722D, $6E79732D
Data.l $2D786174, $2223736E, $723C203E, $443A6664, $72637365, $69747069, $72206E6F, $613A6664, $74756F62, $2022223D, $6E6C6D78, $6D783A73, $68223D70, $3A707474, $736E2F2F, $6F64612E
Data.l $632E6562, $782F6D6F, $312F7061, $222F302E, $6C6D7820, $783A736E, $4D4D706D, $7468223D, $2F3A7074, $2E736E2F, $626F6461, $6F632E65, $61782F6D, $2E312F70, $6D6D2F30, $7820222F
Data.l $736E6C6D, $5274733A, $223D6665, $70747468, $6E2F2F3A, $64612E73, $2E65626F, $2F6D6F63, $2F706178, $2F302E31, $70795473, $65522F65, $72756F73, $65526563, $20222366, $3A706D78
Data.l $61657243, $54726F74, $3D6C6F6F, $6F644122, $50206562, $6F746F68, $706F6873, $35534320, $5720312E, $6F646E69, $20227377, $4D706D78, $6E493A4D, $6E617473, $44496563, $6D78223D
Data.l $69692E70, $36443A64, $38433331, $37414634, $31314233, $46423145, $44393042, $38304239, $31433644, $20224232, $4D706D78, $6F443A4D, $656D7563, $4449746E, $6D78223D, $69642E70
Data.l $36443A64, $38433331, $37413035, $31314233, $46423145, $44393042, $38304239, $31433644, $3E224232, $6D783C20, $3A4D4D70, $69726544, $46646576, $206D6F72, $65527473, $6E693A66
Data.l $6E617473, $44496563, $6D78223D, $69692E70, $36443A64, $38433331, $37414434, $31314233, $46423145, $44393042, $38304239, $31433644, $20224232, $65527473, $6F643A66, $656D7563
Data.l $4449746E, $6D78223D, $69642E70, $36443A64, $38433331, $37414534, $31314233, $46423145, $44393042, $38304239, $31433644, $2F224232, $2F3C203E, $3A666472, $63736544, $74706972
Data.l $3E6E6F69, $722F3C20, $523A6664, $203E4644, $3A782F3C, $6D706D78, $3E617465, $783F3C20, $6B636170, $65207465, $223D646E, $3E3F2272, $FC13A08C, $1D020000, $54414449, $937CDA78
Data.l $51136BCF, $EFBFC710, $CD49366D, $26926E8F, $AD15A69A, $D2C5EB06, $1E22F45C, $82882A84, $45E4F278, $F41FC441, $37AAF09F, $783D1E2D, $27A2F4B2, $429178A5, $562A343C, $45628A90
Data.l $87E6D14A, $F7DDD69A, $3776F39E, $1D4D764B, $3784DE18, $F7C999F3, $14A532CD, $307DBDB4, $B2A4A9B3, $94801294, $4A024A50, $718C089F, $378B1E0E, $9E7D5C8F, $7AC5D5EB, $4B084A97
Data.l $8F48DB3A, $DF6E421E, $93A33234, $097B8B30, $1AE41706, $97731A01, $0059F42D, $4C1FCE90, $CFC79F5D, $7D688B0F, $FAB58379, $30B76002, $548F3BBC, $94AB0321, $837AAC45, $01031258
Data.l $4CF70A4A, $8F481297, $F8E5405F, $0DAD3825, $D1D6AE6C, $ED0EFAFC, $A898CF8D, $03B61CEA, $75885F40, $3A9D7688, $24F1412F, $C50C6258, $6B1441EA, $EEEAF1A7, $A6C04C45, $F78030FA
Data.l $AE804449, $C52664C7, $159D90DB, $294FEBD8, $1B1CFC76, $54030B51, $17753BD7, $F0CC5746, $BF78E9DC, $DD47AD95, $9327A001, $322323BF, $35C035CF, $34084A9A, $F6FC9DEE, $C2C0BF9F
Data.l $A01F3142, $A8D85528, $27A5995D, $060CF677, $2A2209E8, $E8BA3D33, $57772278, $F68B6728, $00D20D4C, $A22C06AE, $C65431B2, $C8F317C7, $E2A5A7EF, $A13A2271, $4D7FBC16, $0DC0B6C1
Data.l $6170C7EE, $B1FF948C, $66071DF6, $21F1004E, $9FF73F72, $F9BC603D, $65A5F169, $96C88B95, $18CC30F3, $3A74FFA4, $D8F87E5E, $A03D017D, $683B46E2, $A828FBDC, $ADDCD4DB, $4AC9D9DA
Data.l $69264CEA, $232AB31C, $C6E71AEE, $C9FAF046, $AC2CEE12, $13642F9E, $6E7192BB, $7EF47EDE, $511AEA99, $E4F23E80, $FDECF205, $8753B59B, $ACE7D3C7, $82547994, $3DAFA7B5, $7C49692B
Data.l $75057F95, $05BF4011, $8ABD7230, $7EDE908D, $06015FDD, $C7E29800, $F4DA266E, $0000001E, $4E454900, $6042AE44
Data.b $82
PicEnd:
EndDataSection
CompilerEndIf