From 51f73b984375554aa2a6fa22ae5469fec985bb1f Mon Sep 17 00:00:00 2001 From: Carsten Larsen Date: Sun, 28 Feb 2021 22:17:19 +0100 Subject: [PATCH] Initial commit --- AmigaE.info | Bin 0 -> 628 bytes AmigaE/ClickTabExample | Bin 0 -> 2388 bytes AmigaE/ClickTabExample.e | 159 ++ AmigaE/ClickTabExample.info | Bin 0 -> 521 bytes AmigaE/ConnectExample | Bin 0 -> 2368 bytes AmigaE/ConnectExample.e | 166 ++ AmigaE/ConnectExample.info | Bin 0 -> 626 bytes AmigaE/E_Examples.doc | 25 + AmigaE/E_Examples.doc.info | Bin 0 -> 463 bytes AmigaE/LayoutExample | Bin 0 -> 12116 bytes AmigaE/LayoutExample.e | 531 +++++ AmigaE/LayoutExample.info | Bin 0 -> 626 bytes AmigaE/PenMapExample | Bin 0 -> 19320 bytes AmigaE/PenMapExample.e | 1773 +++++++++++++++++ AmigaE/PenMapExample.info | Bin 0 -> 450 bytes ClassActDemo.doc | 261 +++ ClassActDemo.doc.info | Bin 0 -> 468 bytes ClassActFAQ.doc | 444 +++++ ClassActFAQ.doc.info | Bin 0 -> 468 bytes Classes.info | Bin 0 -> 628 bytes Classes/arexx.class | Bin 0 -> 8664 bytes Classes/gadgets/button.gadget | Bin 0 -> 10928 bytes Classes/gadgets/checkbox.gadget | Bin 0 -> 6828 bytes Classes/gadgets/chooser.gadget | Bin 0 -> 12096 bytes Classes/gadgets/clicktab.gadget | Bin 0 -> 10432 bytes Classes/gadgets/fuelgauge.gadget | Bin 0 -> 6640 bytes Classes/gadgets/getfile.gadget | Bin 0 -> 7208 bytes Classes/gadgets/getfont.gadget | Bin 0 -> 5116 bytes Classes/gadgets/getscreenmode.gadget | Bin 0 -> 6144 bytes Classes/gadgets/integer.gadget | Bin 0 -> 10536 bytes Classes/gadgets/layout.gadget | Bin 0 -> 22596 bytes Classes/gadgets/layout.gadget.020 | Bin 0 -> 20592 bytes Classes/gadgets/listbrowser.gadget | Bin 0 -> 35892 bytes Classes/gadgets/palette.gadget | Bin 0 -> 9048 bytes Classes/gadgets/radiobutton.gadget | Bin 0 -> 5856 bytes Classes/gadgets/scroller.gadget | Bin 0 -> 9132 bytes Classes/gadgets/slider.gadget | Bin 0 -> 11940 bytes Classes/gadgets/space.gadget | Bin 0 -> 2416 bytes Classes/gadgets/speedbar.gadget | Bin 0 -> 14764 bytes Classes/gadgets/string.gadget | Bin 0 -> 4220 bytes Classes/gadgets/textfield.gadget | Bin 0 -> 20392 bytes Classes/images/bevel.image | Bin 0 -> 11048 bytes Classes/images/bitmap.image | Bin 0 -> 3856 bytes Classes/images/drawlist.image | Bin 0 -> 3676 bytes Classes/images/glyph.image | Bin 0 -> 6356 bytes Classes/images/label.image | Bin 0 -> 7016 bytes Classes/images/penmap.image | Bin 0 -> 4164 bytes Classes/window.class | Bin 0 -> 29316 bytes Demo.info | Bin 0 -> 628 bytes Demo/ClassActDemo | Bin 0 -> 38212 bytes Demo/ClassActDemo.c | 1447 ++++++++++++++ Demo/ClassActDemo.c.info | Bin 0 -> 296 bytes Demo/ClassActDemo.info | Bin 0 -> 521 bytes Demo/ClassActDemo.lnk | 6 + Demo/ClassActDemo.o | Bin 0 -> 17320 bytes Demo/Images.c | 949 +++++++++ Demo/Images.c.info | Bin 0 -> 296 bytes Demo/Images.o | Bin 0 -> 18244 bytes Demo/SCOPTIONS | 11 + Demo/SMakeFile | 16 + Demo/SMakeFile.info | Bin 0 -> 640 bytes Examples.info | Bin 0 -> 628 bytes Examples/ARexx.info | Bin 0 -> 628 bytes Examples/ARexx/ARexxExample | Bin 0 -> 7976 bytes Examples/ARexx/ARexxExample.c | 292 +++ Examples/ARexx/ARexxExample.c.info | Bin 0 -> 300 bytes Examples/ARexx/ARexxExample.info | Bin 0 -> 535 bytes Examples/ARexx/rx_me_demo.rexx | 25 + Examples/ARexx/rx_me_demo.rexx.info | Bin 0 -> 293 bytes Examples/BackFill.info | Bin 0 -> 628 bytes Examples/BackFill/BackFill.Brush | Bin 0 -> 3394 bytes Examples/BackFill/BackFill.Brush.info | Bin 0 -> 521 bytes Examples/BackFill/BackFillExample | Bin 0 -> 13076 bytes Examples/BackFill/BackFillExample.info | Bin 0 -> 521 bytes Examples/BackFill/BackfillExample.c | 397 ++++ Examples/BackFill/BackfillExample.c.info | Bin 0 -> 300 bytes Examples/BitMap.info | Bin 0 -> 628 bytes Examples/BitMap/BitMapExample | Bin 0 -> 3360 bytes Examples/BitMap/BitMapExample.c | 171 ++ Examples/BitMap/BitMapExample.c.info | Bin 0 -> 296 bytes Examples/BitMap/BitMapExample.info | Bin 0 -> 835 bytes Examples/BitMap/buttons.iff | Bin 0 -> 956 bytes Examples/CheckBox.info | Bin 0 -> 628 bytes Examples/CheckBox/CheckBoxExample.info | Bin 0 -> 450 bytes Examples/CheckBox/checkboxexample | Bin 0 -> 4232 bytes Examples/CheckBox/checkboxexample.c | 233 +++ Examples/CheckBox/checkboxexample.c.info | Bin 0 -> 300 bytes Examples/Chooser.info | Bin 0 -> 628 bytes Examples/Chooser/ChooserExample.info | Bin 0 -> 454 bytes Examples/Chooser/HiddenChooser.info | Bin 0 -> 454 bytes Examples/Chooser/chooserexample | Bin 0 -> 4184 bytes Examples/Chooser/chooserexample.c | 228 +++ Examples/Chooser/chooserexample.c.info | Bin 0 -> 300 bytes Examples/Chooser/hiddenchooser | Bin 0 -> 10384 bytes Examples/Chooser/hiddenchooser.c | 225 +++ Examples/Chooser/hiddenchooser.c.info | Bin 0 -> 300 bytes Examples/ClickTab.info | Bin 0 -> 628 bytes Examples/ClickTab/ClickTabExample | Bin 0 -> 2968 bytes Examples/ClickTab/ClickTabExample.c | 207 ++ Examples/ClickTab/ClickTabExample.c.info | Bin 0 -> 300 bytes Examples/ClickTab/ClickTabExample.info | Bin 0 -> 521 bytes Examples/ClickTab/PageExample.c.info | Bin 0 -> 300 bytes Examples/ClickTab/PageExample.info | Bin 0 -> 521 bytes Examples/ClickTab/pageexample | Bin 0 -> 7008 bytes Examples/ClickTab/pageexample.c | 434 ++++ Examples/Connect.info | Bin 0 -> 628 bytes Examples/Connect/ConnectExample | Bin 0 -> 3664 bytes Examples/Connect/ConnectExample.c | 183 ++ Examples/Connect/ConnectExample.c.info | Bin 0 -> 300 bytes Examples/Connect/ConnectExample.info | Bin 0 -> 626 bytes Examples/EnvEdit.info | Bin 0 -> 628 bytes Examples/EnvEdit/EnvEdit | Bin 0 -> 10720 bytes Examples/EnvEdit/EnvEdit.c.info | Bin 0 -> 300 bytes Examples/EnvEdit/EnvEdit.info | Bin 0 -> 525 bytes Examples/EnvEdit/envedit.c | 889 +++++++++ Examples/Examples.doc | 3 + Examples/Examples.doc.info | Bin 0 -> 468 bytes Examples/FuelGauge.info | Bin 0 -> 628 bytes Examples/FuelGauge/FuelGaugeExample.info | Bin 0 -> 835 bytes Examples/FuelGauge/fuelgaugeexample | Bin 0 -> 4712 bytes Examples/FuelGauge/fuelgaugeexample.c | 269 +++ Examples/FuelGauge/fuelgaugeexample.c.info | Bin 0 -> 296 bytes Examples/Glyph.info | Bin 0 -> 628 bytes Examples/Glyph/GlyphExample | Bin 0 -> 6380 bytes Examples/Glyph/GlyphExample.c | 319 +++ Examples/Glyph/GlyphExample.c.info | Bin 0 -> 300 bytes Examples/Glyph/GlyphExample.info | Bin 0 -> 454 bytes Examples/Integer.info | Bin 0 -> 628 bytes Examples/Integer/IntegerExample | Bin 0 -> 4100 bytes Examples/Integer/IntegerExample.c | 222 +++ Examples/Integer/IntegerExample.c.info | Bin 0 -> 300 bytes Examples/Integer/IntegerExample.info | Bin 0 -> 454 bytes Examples/Label.info | Bin 0 -> 628 bytes Examples/Label/LabelExample | Bin 0 -> 6428 bytes Examples/Label/LabelExample.c | 246 +++ Examples/Label/LabelExample.c.info | Bin 0 -> 300 bytes Examples/Label/LabelExample.info | Bin 0 -> 450 bytes Examples/Layout.info | Bin 0 -> 628 bytes Examples/Layout/DynamicExample.c.info | Bin 0 -> 300 bytes Examples/Layout/DynamicExample.info | Bin 0 -> 626 bytes Examples/Layout/LayoutExample | Bin 0 -> 7732 bytes Examples/Layout/LayoutExample.c | 514 +++++ Examples/Layout/LayoutExample.c.info | Bin 0 -> 300 bytes Examples/Layout/LayoutExample.info | Bin 0 -> 626 bytes Examples/Layout/WeightedDemo | Bin 0 -> 4760 bytes Examples/Layout/WeightedDemo.c | 305 +++ Examples/Layout/WeightedDemo.c.info | Bin 0 -> 300 bytes Examples/Layout/WeightedDemo.info | Bin 0 -> 626 bytes Examples/Layout/dynamicexample | Bin 0 -> 4660 bytes Examples/Layout/dynamicexample.c | 294 +++ Examples/ListBrowser.info | Bin 0 -> 628 bytes Examples/ListBrowser/LB_Example | Bin 0 -> 7052 bytes Examples/ListBrowser/LB_Example.c | 382 ++++ Examples/ListBrowser/LB_Example.c.info | Bin 0 -> 300 bytes Examples/ListBrowser/LB_Example.info | Bin 0 -> 450 bytes Examples/ListBrowser/ListBrowserExample | Bin 0 -> 9476 bytes Examples/ListBrowser/ListBrowserExample.c | 540 +++++ .../ListBrowser/ListBrowserExample.c.info | Bin 0 -> 300 bytes Examples/ListBrowser/ListBrowserExample.info | Bin 0 -> 450 bytes Examples/Palette.info | Bin 0 -> 628 bytes Examples/Palette/PaletteExample | Bin 0 -> 5864 bytes Examples/Palette/PaletteExample.c | 162 ++ Examples/Palette/PaletteExample.c.info | Bin 0 -> 300 bytes Examples/Palette/PaletteExample.info | Bin 0 -> 626 bytes Examples/PenMap.info | Bin 0 -> 628 bytes Examples/PenMap/PenMapExample | Bin 0 -> 6064 bytes Examples/PenMap/PenMapExample.c | 168 ++ Examples/PenMap/PenMapExample.c.info | Bin 0 -> 300 bytes Examples/PenMap/PenMapExample.info | Bin 0 -> 450 bytes Examples/PrintReq.info | Bin 0 -> 628 bytes Examples/PrintReq/PrintReqExample | Bin 0 -> 8552 bytes Examples/PrintReq/PrintReqExample.c | 519 +++++ Examples/PrintReq/PrintReqExample.c.info | Bin 0 -> 300 bytes Examples/PrintReq/PrintReqExample.info | Bin 0 -> 631 bytes Examples/RadioButton.info | Bin 0 -> 628 bytes Examples/RadioButton/RadioExample.info | Bin 0 -> 450 bytes Examples/RadioButton/radioexample | Bin 0 -> 4112 bytes Examples/RadioButton/radioexample.c | 231 +++ Examples/RadioButton/radioexample.c.info | Bin 0 -> 300 bytes Examples/ReqTools.info | Bin 0 -> 628 bytes Examples/ReqTools/ReqTools | Bin 0 -> 7056 bytes Examples/ReqTools/ReqTools.c | 326 +++ Examples/ReqTools/ReqTools.c.info | Bin 0 -> 300 bytes Examples/ReqTools/ReqTools.info | Bin 0 -> 521 bytes Examples/Speed.info | Bin 0 -> 628 bytes Examples/Speed/SpeedExample1 | Bin 0 -> 10208 bytes Examples/Speed/SpeedExample1.c | 454 +++++ Examples/Speed/SpeedExample1.c.info | Bin 0 -> 300 bytes Examples/Speed/SpeedExample1.info | Bin 0 -> 450 bytes Examples/Speed/SpeedExample2 | Bin 0 -> 6472 bytes Examples/Speed/SpeedExample2.c | 294 +++ Examples/Speed/SpeedExample2.c.info | Bin 0 -> 300 bytes Examples/Speed/SpeedExample2.info | Bin 0 -> 450 bytes Examples/Speed/SpeedExample3 | Bin 0 -> 7472 bytes Examples/Speed/SpeedExample3.c | 444 +++++ Examples/Speed/SpeedExample3.c.info | Bin 0 -> 300 bytes Examples/Speed/SpeedExample3.info | Bin 0 -> 626 bytes Examples/SpeedBar.info | Bin 0 -> 628 bytes Examples/SpeedBar/SpeedBarExample.info | Bin 0 -> 450 bytes Examples/SpeedBar/speedbarexample | Bin 0 -> 10628 bytes Examples/SpeedBar/speedbarexample.c | 573 ++++++ Examples/SpeedBar/speedbarexample.c.info | Bin 0 -> 300 bytes Examples/String.info | Bin 0 -> 628 bytes Examples/String/StringExample.info | Bin 0 -> 454 bytes Examples/String/stringexample | Bin 0 -> 8468 bytes Examples/String/stringexample.c | 318 +++ Examples/String/stringexample.c.info | Bin 0 -> 300 bytes Install_Classes | 393 ++++ Install_Classes.info | Bin 0 -> 712 bytes Layout_README.doc | 19 + Layout_README.doc.info | Bin 0 -> 468 bytes License.doc | 43 + License.doc.info | Bin 0 -> 468 bytes OrderForm.doc | 97 + OrderForm.doc.info | Bin 0 -> 468 bytes PreView!.info | Bin 0 -> 628 bytes PreView!/PreView0.iff | Bin 0 -> 58816 bytes PreView!/PreView0.iff.info | Bin 0 -> 530 bytes PreView!/PreView1.iff | Bin 0 -> 44490 bytes PreView!/PreView1.iff.info | Bin 0 -> 530 bytes PreView!/PreView2.iff | Bin 0 -> 49842 bytes PreView!/PreView2.iff.info | Bin 0 -> 530 bytes PreView!/PreView3.iff | Bin 0 -> 42860 bytes PreView!/PreView3.iff.info | Bin 0 -> 530 bytes Prefs.info | Bin 0 -> 637 bytes Prefs/CAPrefs.doc | 67 + Prefs/CAPrefs.doc.info | Bin 0 -> 463 bytes Prefs/ClassAct | Bin 0 -> 33076 bytes Prefs/ClassAct.history.info | Bin 0 -> 463 bytes Prefs/ClassAct.info | Bin 0 -> 3192 bytes Prefs/caprefs | Bin 0 -> 3356 bytes Prefs/classact.history | 41 + Quill_README.doc | 55 + Quill_README.doc.info | Bin 0 -> 468 bytes c/CheckAssign | Bin 0 -> 1008 bytes 235 files changed, 16370 insertions(+) create mode 100644 AmigaE.info create mode 100644 AmigaE/ClickTabExample create mode 100644 AmigaE/ClickTabExample.e create mode 100644 AmigaE/ClickTabExample.info create mode 100644 AmigaE/ConnectExample create mode 100644 AmigaE/ConnectExample.e create mode 100644 AmigaE/ConnectExample.info create mode 100644 AmigaE/E_Examples.doc create mode 100644 AmigaE/E_Examples.doc.info create mode 100644 AmigaE/LayoutExample create mode 100644 AmigaE/LayoutExample.e create mode 100644 AmigaE/LayoutExample.info create mode 100644 AmigaE/PenMapExample create mode 100644 AmigaE/PenMapExample.e create mode 100644 AmigaE/PenMapExample.info create mode 100644 ClassActDemo.doc create mode 100644 ClassActDemo.doc.info create mode 100644 ClassActFAQ.doc create mode 100644 ClassActFAQ.doc.info create mode 100644 Classes.info create mode 100644 Classes/arexx.class create mode 100644 Classes/gadgets/button.gadget create mode 100644 Classes/gadgets/checkbox.gadget create mode 100644 Classes/gadgets/chooser.gadget create mode 100644 Classes/gadgets/clicktab.gadget create mode 100644 Classes/gadgets/fuelgauge.gadget create mode 100644 Classes/gadgets/getfile.gadget create mode 100644 Classes/gadgets/getfont.gadget create mode 100644 Classes/gadgets/getscreenmode.gadget create mode 100644 Classes/gadgets/integer.gadget create mode 100644 Classes/gadgets/layout.gadget create mode 100644 Classes/gadgets/layout.gadget.020 create mode 100644 Classes/gadgets/listbrowser.gadget create mode 100644 Classes/gadgets/palette.gadget create mode 100644 Classes/gadgets/radiobutton.gadget create mode 100644 Classes/gadgets/scroller.gadget create mode 100644 Classes/gadgets/slider.gadget create mode 100644 Classes/gadgets/space.gadget create mode 100644 Classes/gadgets/speedbar.gadget create mode 100644 Classes/gadgets/string.gadget create mode 100644 Classes/gadgets/textfield.gadget create mode 100644 Classes/images/bevel.image create mode 100644 Classes/images/bitmap.image create mode 100644 Classes/images/drawlist.image create mode 100644 Classes/images/glyph.image create mode 100644 Classes/images/label.image create mode 100644 Classes/images/penmap.image create mode 100644 Classes/window.class create mode 100644 Demo.info create mode 100644 Demo/ClassActDemo create mode 100644 Demo/ClassActDemo.c create mode 100644 Demo/ClassActDemo.c.info create mode 100644 Demo/ClassActDemo.info create mode 100644 Demo/ClassActDemo.lnk create mode 100644 Demo/ClassActDemo.o create mode 100644 Demo/Images.c create mode 100644 Demo/Images.c.info create mode 100644 Demo/Images.o create mode 100644 Demo/SCOPTIONS create mode 100644 Demo/SMakeFile create mode 100644 Demo/SMakeFile.info create mode 100644 Examples.info create mode 100644 Examples/ARexx.info create mode 100644 Examples/ARexx/ARexxExample create mode 100644 Examples/ARexx/ARexxExample.c create mode 100644 Examples/ARexx/ARexxExample.c.info create mode 100644 Examples/ARexx/ARexxExample.info create mode 100644 Examples/ARexx/rx_me_demo.rexx create mode 100644 Examples/ARexx/rx_me_demo.rexx.info create mode 100644 Examples/BackFill.info create mode 100644 Examples/BackFill/BackFill.Brush create mode 100644 Examples/BackFill/BackFill.Brush.info create mode 100644 Examples/BackFill/BackFillExample create mode 100644 Examples/BackFill/BackFillExample.info create mode 100644 Examples/BackFill/BackfillExample.c create mode 100644 Examples/BackFill/BackfillExample.c.info create mode 100644 Examples/BitMap.info create mode 100644 Examples/BitMap/BitMapExample create mode 100644 Examples/BitMap/BitMapExample.c create mode 100644 Examples/BitMap/BitMapExample.c.info create mode 100644 Examples/BitMap/BitMapExample.info create mode 100644 Examples/BitMap/buttons.iff create mode 100644 Examples/CheckBox.info create mode 100644 Examples/CheckBox/CheckBoxExample.info create mode 100644 Examples/CheckBox/checkboxexample create mode 100644 Examples/CheckBox/checkboxexample.c create mode 100644 Examples/CheckBox/checkboxexample.c.info create mode 100644 Examples/Chooser.info create mode 100644 Examples/Chooser/ChooserExample.info create mode 100644 Examples/Chooser/HiddenChooser.info create mode 100644 Examples/Chooser/chooserexample create mode 100644 Examples/Chooser/chooserexample.c create mode 100644 Examples/Chooser/chooserexample.c.info create mode 100644 Examples/Chooser/hiddenchooser create mode 100644 Examples/Chooser/hiddenchooser.c create mode 100644 Examples/Chooser/hiddenchooser.c.info create mode 100644 Examples/ClickTab.info create mode 100644 Examples/ClickTab/ClickTabExample create mode 100644 Examples/ClickTab/ClickTabExample.c create mode 100644 Examples/ClickTab/ClickTabExample.c.info create mode 100644 Examples/ClickTab/ClickTabExample.info create mode 100644 Examples/ClickTab/PageExample.c.info create mode 100644 Examples/ClickTab/PageExample.info create mode 100644 Examples/ClickTab/pageexample create mode 100644 Examples/ClickTab/pageexample.c create mode 100644 Examples/Connect.info create mode 100644 Examples/Connect/ConnectExample create mode 100644 Examples/Connect/ConnectExample.c create mode 100644 Examples/Connect/ConnectExample.c.info create mode 100644 Examples/Connect/ConnectExample.info create mode 100644 Examples/EnvEdit.info create mode 100644 Examples/EnvEdit/EnvEdit create mode 100644 Examples/EnvEdit/EnvEdit.c.info create mode 100644 Examples/EnvEdit/EnvEdit.info create mode 100644 Examples/EnvEdit/envedit.c create mode 100644 Examples/Examples.doc create mode 100644 Examples/Examples.doc.info create mode 100644 Examples/FuelGauge.info create mode 100644 Examples/FuelGauge/FuelGaugeExample.info create mode 100644 Examples/FuelGauge/fuelgaugeexample create mode 100644 Examples/FuelGauge/fuelgaugeexample.c create mode 100644 Examples/FuelGauge/fuelgaugeexample.c.info create mode 100644 Examples/Glyph.info create mode 100644 Examples/Glyph/GlyphExample create mode 100644 Examples/Glyph/GlyphExample.c create mode 100644 Examples/Glyph/GlyphExample.c.info create mode 100644 Examples/Glyph/GlyphExample.info create mode 100644 Examples/Integer.info create mode 100644 Examples/Integer/IntegerExample create mode 100644 Examples/Integer/IntegerExample.c create mode 100644 Examples/Integer/IntegerExample.c.info create mode 100644 Examples/Integer/IntegerExample.info create mode 100644 Examples/Label.info create mode 100644 Examples/Label/LabelExample create mode 100644 Examples/Label/LabelExample.c create mode 100644 Examples/Label/LabelExample.c.info create mode 100644 Examples/Label/LabelExample.info create mode 100644 Examples/Layout.info create mode 100644 Examples/Layout/DynamicExample.c.info create mode 100644 Examples/Layout/DynamicExample.info create mode 100644 Examples/Layout/LayoutExample create mode 100644 Examples/Layout/LayoutExample.c create mode 100644 Examples/Layout/LayoutExample.c.info create mode 100644 Examples/Layout/LayoutExample.info create mode 100644 Examples/Layout/WeightedDemo create mode 100644 Examples/Layout/WeightedDemo.c create mode 100644 Examples/Layout/WeightedDemo.c.info create mode 100644 Examples/Layout/WeightedDemo.info create mode 100644 Examples/Layout/dynamicexample create mode 100644 Examples/Layout/dynamicexample.c create mode 100644 Examples/ListBrowser.info create mode 100644 Examples/ListBrowser/LB_Example create mode 100644 Examples/ListBrowser/LB_Example.c create mode 100644 Examples/ListBrowser/LB_Example.c.info create mode 100644 Examples/ListBrowser/LB_Example.info create mode 100644 Examples/ListBrowser/ListBrowserExample create mode 100644 Examples/ListBrowser/ListBrowserExample.c create mode 100644 Examples/ListBrowser/ListBrowserExample.c.info create mode 100644 Examples/ListBrowser/ListBrowserExample.info create mode 100644 Examples/Palette.info create mode 100644 Examples/Palette/PaletteExample create mode 100644 Examples/Palette/PaletteExample.c create mode 100644 Examples/Palette/PaletteExample.c.info create mode 100644 Examples/Palette/PaletteExample.info create mode 100644 Examples/PenMap.info create mode 100644 Examples/PenMap/PenMapExample create mode 100644 Examples/PenMap/PenMapExample.c create mode 100644 Examples/PenMap/PenMapExample.c.info create mode 100644 Examples/PenMap/PenMapExample.info create mode 100644 Examples/PrintReq.info create mode 100644 Examples/PrintReq/PrintReqExample create mode 100644 Examples/PrintReq/PrintReqExample.c create mode 100644 Examples/PrintReq/PrintReqExample.c.info create mode 100644 Examples/PrintReq/PrintReqExample.info create mode 100644 Examples/RadioButton.info create mode 100644 Examples/RadioButton/RadioExample.info create mode 100644 Examples/RadioButton/radioexample create mode 100644 Examples/RadioButton/radioexample.c create mode 100644 Examples/RadioButton/radioexample.c.info create mode 100644 Examples/ReqTools.info create mode 100644 Examples/ReqTools/ReqTools create mode 100644 Examples/ReqTools/ReqTools.c create mode 100644 Examples/ReqTools/ReqTools.c.info create mode 100644 Examples/ReqTools/ReqTools.info create mode 100644 Examples/Speed.info create mode 100644 Examples/Speed/SpeedExample1 create mode 100644 Examples/Speed/SpeedExample1.c create mode 100644 Examples/Speed/SpeedExample1.c.info create mode 100644 Examples/Speed/SpeedExample1.info create mode 100644 Examples/Speed/SpeedExample2 create mode 100644 Examples/Speed/SpeedExample2.c create mode 100644 Examples/Speed/SpeedExample2.c.info create mode 100644 Examples/Speed/SpeedExample2.info create mode 100644 Examples/Speed/SpeedExample3 create mode 100644 Examples/Speed/SpeedExample3.c create mode 100644 Examples/Speed/SpeedExample3.c.info create mode 100644 Examples/Speed/SpeedExample3.info create mode 100644 Examples/SpeedBar.info create mode 100644 Examples/SpeedBar/SpeedBarExample.info create mode 100644 Examples/SpeedBar/speedbarexample create mode 100644 Examples/SpeedBar/speedbarexample.c create mode 100644 Examples/SpeedBar/speedbarexample.c.info create mode 100644 Examples/String.info create mode 100644 Examples/String/StringExample.info create mode 100644 Examples/String/stringexample create mode 100644 Examples/String/stringexample.c create mode 100644 Examples/String/stringexample.c.info create mode 100644 Install_Classes create mode 100644 Install_Classes.info create mode 100644 Layout_README.doc create mode 100644 Layout_README.doc.info create mode 100644 License.doc create mode 100644 License.doc.info create mode 100644 OrderForm.doc create mode 100644 OrderForm.doc.info create mode 100644 PreView!.info create mode 100644 PreView!/PreView0.iff create mode 100644 PreView!/PreView0.iff.info create mode 100644 PreView!/PreView1.iff create mode 100644 PreView!/PreView1.iff.info create mode 100644 PreView!/PreView2.iff create mode 100644 PreView!/PreView2.iff.info create mode 100644 PreView!/PreView3.iff create mode 100644 PreView!/PreView3.iff.info create mode 100644 Prefs.info create mode 100644 Prefs/CAPrefs.doc create mode 100644 Prefs/CAPrefs.doc.info create mode 100644 Prefs/ClassAct create mode 100644 Prefs/ClassAct.history.info create mode 100644 Prefs/ClassAct.info create mode 100644 Prefs/caprefs create mode 100644 Prefs/classact.history create mode 100644 Quill_README.doc create mode 100644 Quill_README.doc.info create mode 100644 c/CheckAssign diff --git a/AmigaE.info b/AmigaE.info new file mode 100644 index 0000000000000000000000000000000000000000..17f23773f723740fec37c2d57aaee37833f362c6 GIT binary patch literal 628 zcmZvYze>YU6vn@#X>J6m;v}6!JBX9upW>9_;M~Q{$tTdwL1>=9M^IcuIy;DqzC@v$ zL!ESQ11(SJzvfr&Y7$u0L`M06SNScfxz64Zp=gbN`I;@2&>WD1*hie z{qN z-GVssOyFtkhjb=(T$Zm_86x<83m;Z|s=OTg(l&8W#9eWWuASo3ihG_j>zN~!&crc} zi~3Y`d1XS)v)K73so%Lhq`lzioOXeMdM?mYtEgb?$Xkf+7ID^d*YV^n7}Mg+*Z*dr o`VO;H{gyj#OMgaF^ZKfyEAy7*Ex7m8-GbyT$ns<3+T8;Le}Rjk literal 0 HcmV?d00001 diff --git a/AmigaE/ClickTabExample b/AmigaE/ClickTabExample new file mode 100644 index 0000000000000000000000000000000000000000..d2a88676e891b0acc7668ebd8ed90f42149884ed GIT binary patch literal 2388 zcmZuzZD>k#h<~4$8oQ-jTmHE|-24S)`)iv1qN7-A7Jbhj7PC!D^pStR zxZhPJ9h54WQ%>;DuZS7Ey9~)fWQjUbwaT^940hyHqTCwEZAiX?q@k=c4as;Q3@g6J zjw0v}pr80#h2FKTH#r=P$GV52L#HV=n9jt~vE*P`q7Fq<1F@bJ6;i%IBtGW3aw!-W zdUIA3)apQ7Ov?dLXt1Segd=iKc4D68h}FeKUUI8mxmntRRXgNC$=$ywV-NiA2EA?3 z9Mk%Mm{r}-IwME0zE~F!^U6^(npWgHziSPgs|@TUp-^C{C`t*826BPd!Rr=ZU|vp;s}7deCqzLRGqf8; zv5N@So5(~_TGt*W+h*imi(l_&{sB7 z%k~&&ZQ|(5@EFxIgE#K>2~;GBW0pU#-muMU`N|O~%HGMd$a6LGjEa5twjw$l2{DUk zx>Rq7xC)}=Y-t@+JV$*k(giYh+Cb|$+n~={)VB)hxyO-Kp$yP7&@}BKN+P}|G@?P!Hqf(-2HFdq z2GBmx8qjwv`8kW8x9GbTeV^$CdmD0RKJe%0<5s{Qohw--+fKw>FUQD3c6uEHPYAuC zcX1}5J;V93**W^sE}+|iX!Zhf()0k;=2|(!VMEM@fWLt1{E52={48mNpz}Vio0d6( z*78kYPvh;h-FR#Cf+r;)UFahEz_9Ism}FQjac7ocCk-yHPQ2u6_a9|s0TaJ0MgC1ZZkm|rmF?UWX{Ni$LiH%pBa26cLn zH=FI)rX!j??9e0mW$)c7>56A$&0+aQQcg3KyLc-Mt?!_!M z{&sV}T2mix0>+&mC9mp}!$8_Ff8f=#X_9Xqx+Qe%35apEO5QM*6<3c}+|7z{$nYQJ z=?|k`-1OuAGvF_Yt6lfnv^p~Xmsls_pNYB&R%b=Nb~ibpoo~~W40ascdr)M7d|j=U z!uXO;Zi$Oe{hh|R4mzpiq_|j6a)if`$K+;?Xx$qa?T|gf_!|Q^rQ>%* Optional, the E cleanup code would do it for us anyway. +ENDPROC + +PROC main() +DEF win=NIL:PTR TO window, tab_object=NIL:PTR TO object, win_object=NIL:PTR TO object +DEF wait, signal, result, done = FALSE, code, tmpres,tmpres2 +DEF names:PTR TO LONG + + names:=['Tab_1','Tab_2','Tab_3','Tab_4',NIL] + +-> Open the classes + + windowbase := OpenLibrary('window.class',0) + layoutbase := OpenLibrary('gadgets/layout.gadget',0) + clicktabbase := OpenLibrary('gadgets/clicktab.gadget',0) + + IF (windowbase AND layoutbase AND clicktabbase) + clickTabNodes(NEW listitems, names) + + /* Create the window object. */ + win_object := WindowObject, + WA_SCREENTITLE, 'ClassAct Copyright 1995, Phantom Development LLC.', + WA_TITLE, 'ClassAct clicktab.gadget Example', + WA_SIZEGADGET, TRUE, + WA_LEFT, 40, + WA_TOP, 30, + WA_DEPTHGADGET, TRUE, + WA_DRAGBAR, TRUE, + WA_CLOSEGADGET, TRUE, + WA_ACTIVATE, TRUE, + WA_SMARTREFRESH, TRUE, + WINDOW_PARENTGROUP, VLayoutObject, + LAYOUT_SPACEOUTER, TRUE, + LAYOUT_DEFERLAYOUT, TRUE, + LAYOUT_ADDCHILD, tab_object := ClickTabObject, + GA_ID, ID_CLICKTAB, + CLICKTAB_LABELS, listitems, + CLICKTAB_CURRENT, 0, + End, + End, + End + +-> Object creation sucessful? + + IF win_object + +-> Open the window. + + IF (win := CA_OpenWindow(win_object)) + +-> Obtain the window wait signal mask. + + GetAttr( WINDOW_SIGMASK, win_object, {signal}) + +-> Input Event Loop + + WHILE done = FALSE + wait:= Wait(signal OR SIGBREAKF_CTRL_C) + + IF (wait AND SIGBREAKF_CTRL_C) + done := TRUE + ELSE + + WHILE (result := domethod(win_object, [WM_HANDLEINPUT,{code}])) <> WMHI_LASTMSG + tmpres := (result AND WMHI_CLASSMASK) + SELECT tmpres + + CASE WMHI_CLOSEWINDOW + done := TRUE + + CASE WMHI_GADGETUP + tmpres2 := (result AND WMHI_GADGETMASK) + + SELECT tmpres2 + CASE ID_CLICKTAB ; NOP + NOP + ENDSELECT + + ENDSELECT + ENDWHILE + ENDIF + ENDWHILE + ENDIF + + /* Disposing of the window object will + * also close the window if it is + * already opened and it will dispose of + * all objects attached to it. + */ + DisposeObject(win_object) + ENDIF + ENDIF + + freeClickTabNodes(listitems) + + /* Close the classes. */ + + IF clicktabbase THEN CloseLibrary(clicktabbase) + IF layoutbase THEN CloseLibrary(layoutbase) + IF windowbase THEN CloseLibrary(windowbase) + +ENDPROC + diff --git a/AmigaE/ClickTabExample.info b/AmigaE/ClickTabExample.info new file mode 100644 index 0000000000000000000000000000000000000000..8d7d18d576b9a0f4a53e168767d59890908f1876 GIT binary patch literal 521 zcmaDXz`)1=0`&~#3}y`C3@i-H42G~N>z|8;Ll0y_3=v{DVC=fhT9c+udH&w(YoWNTCriHhz4v?H z`~J;)-$3O1ld3?de-lD^KK8_CWnc88wPD0c(% z>)(DHrX82t&@Wf=U>16Y*sawc_4R|Fy9P!+r?r{0gTK=_=2?k1dj{C{V3|Jc8D_iD zHuW{Ng^%<({@0_kEv$VAWNzLi#sEo_qZ1-w#>L9a&?= z*eT6on?a2gyFCsq@QU0HDtK=5igj8nueQe8gClA$X0L+}sjV}GAod{tN#KUW9LFw= zZO2-nbv+ot{QXXi?djvyYRbw_d_T5&OW5)18T}1bRQo6}l0}|Fe57Pi_`s9MRZT#; z$&ay%u`9<#J`N_x-L)kCjD*L%@7&XTriL->a{04W6MS`BrGavrNxrDdA^oaWK;@yF&Dpc6Qn^pk4IIHsL<%U?(dX%lOoF%iUM28+~A3JPRhZ3 zU=IA$9L<6L=N$gHe-8Dmuh3)AkXhSZTziG=jw;RtB=YsQR%nh_x#Pdq`5wH1e#kSB zGmwsdSFs+!Fg*&3+=B<$#qa~3miP#GymuR?%^w2RB5USeYI8o89<>K}nx)5~D00mb zrC@Okm;}B6e3yF!P7_f#&;*_Zz9;z`5|<@@An_xPE8a_@4`2_EWc+v(xD)7A=$PcW z5C+z>58&j!Sv|dBbe+GovAd#c<@p`d&*bMA$l<202?GD?9^~0N3jZxGM zxhXu(^0JI`OIWxJi(B3-W1{m3PqR3h47~L90@z_R)h$aHy!@xE^||;PR5oAK^-pD;?on$+ukM#8pCn#?#3KAtgSI%YZ~ z)DE>MVj1)EgHujjy-q|@_EI_?n|0KuE?#_AQ!mXLNhg(1Uosa=D`h9lq@#|GMnV)% z7%_7`Y#EcL6%rGwI-3vMhGjaAS#w^a8$+tGma&w|I5pjC@#J*sT4;*LM-Hog`S3qa ho^T}~_%;0kxeZyyi}@OBMMxVi5jumXxvJy4_YbRXBYyw@ literal 0 HcmV?d00001 diff --git a/AmigaE/ConnectExample.e b/AmigaE/ConnectExample.e new file mode 100644 index 0000000..37a3077 --- /dev/null +++ b/AmigaE/ConnectExample.e @@ -0,0 +1,166 @@ +/* ClassAct Inter-Connection Notification Example + Ported to E by Eric Sauvageau. +*/ + +OPT PREPROCESS + +MODULE 'tools/boopsi' + +MODULE 'exec/nodes','intuition','graphics','intuition/intuition', + 'intuition/gadgetclass','intuition/imageclass', + 'intuition/intuitionbase','intuition/classusr', + 'intuition/gadgetclass','intuition/cghooks','intuition/icclass', + 'intuition/classes' + +MODULE 'libraries/gadtools','intuition/icclass','dos','dos/dos', + 'graphics','intuition','intuition/intuition','utility/tagitem' + + +MODULE 'window','classes/window','layout','gadgets/layout','gadgets/palette', + 'gadgets/button','images/bevel','palette','images/label','label', + 'classes/window','other/classact_macros','button' + + +CONST ID_BUTTON = 1 +CONST ID_FOREGROUND = 2 +CONST ID_BACKGROUND = 3 + + +PROC main() + +DEF window:PTR TO window, + but_object:PTR TO object, + win_object:PTR TO object, + mapfg2button, mapbg2button, + tmpres1,tmpres2 + +DEF wait, signal, result, done=FALSE, code + + + mapfg2button := [PALETTE_COLOR, BUTTON_TEXTPEN, TAG_END] + mapbg2button := [PALETTE_COLOR, BUTTON_BACKGROUNDPEN, TAG_END] + + windowbase := OpenLibrary('window.class',0) + layoutbase := OpenLibrary('gadgets/layout.gadget',0) + buttonbase := OpenLibrary('gadgets/button.gadget',0) + palettebase := OpenLibrary('gadgets/palette.gadget',0) + labelbase := OpenLibrary('images/label.image',0) + + IF (windowbase AND layoutbase AND buttonbase AND palettebase AND labelbase) + +-> Create the window object. + + win_object := WindowObject, + WA_SCREENTITLE, 'ClassAct Copyright 1995, Phantom Development LLC.', + WA_TITLE, 'ClassAct Example', + WA_SIZEGADGET, TRUE, + WA_LEFT, 40, + WA_TOP, 30, + WA_DEPTHGADGET, TRUE, + WA_DRAGBAR, TRUE, + WA_CLOSEGADGET, TRUE, + WA_ACTIVATE, TRUE, + WA_SMARTREFRESH, TRUE, + + WINDOW_PARENTGROUP, VLayoutObject, + LAYOUT_SPACEOUTER, TRUE, + LAYOUT_DEFERLAYOUT, TRUE, + LAYOUT_BEVELSTYLE, GroupFrame, + LAYOUT_LABEL, 'InterConnection', + + StartMember, but_object := ButtonObject, + GA_TEXT, '_Inter-Connection Example', + GA_ID, ID_BUTTON, + EndMember, + CHILD_WEIGHTEDHEIGHT, 0, + + StartMember, HLayoutObject, + LAYOUT_SPACEOUTER, FALSE, + + StartMember, PaletteObject, + GA_ID, ID_FOREGROUND, + PALETTE_NUMCOLORS, 8, + PALETTE_COLOR, 1, + ICA_TARGET, but_object, /* object to connect to */ + ICA_MAP, mapfg2button, /* tag mapping array */ + EndMember, + CHILD_LABEL, LabelObject, LABEL_TEXT, '_ForeGround', LabelEnd, + CHILD_MINWIDTH, 90, + CHILD_MINHEIGHT, 20, + + StartMember, PaletteObject, + GA_ID, ID_BACKGROUND, + PALETTE_NUMCOLORS, 8, + PALETTE_COLOR, 0, + ICA_TARGET, but_object, /* object to connect to */ + ICA_MAP, mapbg2button, /* tag mapping array */ + EndMember, + CHILD_LABEL, LabelObject, LABEL_TEXT, '_BackGround', LabelEnd, + CHILD_MINWIDTH, 90, + CHILD_MINHEIGHT, 20, + EndMember, + EndMember, + EndWindow + +-> Object creation sucessful? + + IF win_object + +-> Open the window. + + IF (window := CA_OpenWindow(win_object)) + +-> Obtain the window wait signal mask. + + GetAttr(WINDOW_SIGMASK, win_object, {signal}) + +-> Input Event Loop + + WHILE (done = FALSE) + wait := Wait(signal OR SIGBREAKF_CTRL_C) + + IF (wait AND SIGBREAKF_CTRL_C) + done := TRUE + + ELSE + + WHILE ((result := CA_HandleInput(win_object,{code})) <> WMHI_LASTMSG) + + tmpres1 := (result AND WMHI_CLASSMASK) + + SELECT tmpres1 + + CASE WMHI_CLOSEWINDOW ; done := TRUE + + CASE WMHI_GADGETUP + tmpres2 := (result AND WMHI_GADGETMASK) + + SELECT tmpres2 + CASE ID_BUTTON ; NOP + ENDSELECT + + ENDSELECT + + ENDWHILE + ENDIF + ENDWHILE + ENDIF + + /* Disposing of the window object will + * also close the window if it is + * already opened and it will dispose of + * all objects attached to it. + */ + DisposeObject(win_object ) + ENDIF + ENDIF + +-> Close the classes. + + IF labelbase THEN CloseLibrary(labelbase) + IF palettebase THEN CloseLibrary(palettebase) + IF buttonbase THEN CloseLibrary(buttonbase) + IF layoutbase THEN CloseLibrary(layoutbase) + IF windowbase THEN CloseLibrary(windowbase) + +ENDPROC diff --git a/AmigaE/ConnectExample.info b/AmigaE/ConnectExample.info new file mode 100644 index 0000000000000000000000000000000000000000..d9908fb4de1e45575c2ce70cb8a8781d29b56c8d GIT binary patch literal 626 zcmaDXz`)1=0+I|q3}y`C3@kuCBl{Fl4zMUX!N`m(A`0Z#APa!mW(;Bs%nXdbHQ14) zSfFekG`a`KuYbV&pCtPKe~9`IP<e+Q($hB&eoe1uE`g5sE0fN literal 0 HcmV?d00001 diff --git a/AmigaE/LayoutExample b/AmigaE/LayoutExample new file mode 100644 index 0000000000000000000000000000000000000000..74218b031af9ec614762ab78d0fc7be70917d23c GIT binary patch literal 12116 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 X<2l&poA}C&F*e+a*f5U&ihlNgcSMQV literal 0 HcmV?d00001 diff --git a/AmigaE/LayoutExample.e b/AmigaE/LayoutExample.e new file mode 100644 index 0000000..27d1f33 --- /dev/null +++ b/AmigaE/LayoutExample.e @@ -0,0 +1,531 @@ +/************************************************************************* + * ClassAct Comprehensive Demo Program + * Copyright © 1995 Phantom Development Co. + * + * Translated from C to E by Eric Sauvageau. + */ + + +/* +Supply inithook.m with ClassAct? Or at least its source? Might be added + to classact_lib.m? + +*/ + +OPT PREPROCESS + +MODULE 'tools/constructors' +MODULE 'tools/boopsi','tools/installhook','tools/inithook' + +MODULE 'exec/types','exec/memory','intuition/intuition','exec/ports', + 'intuition/gadgetclass','intuition/icclass','libraries/gadtools', + 'graphics/gfxbase','graphics/text','graphics/gfxmacros', + 'utility/tagitem','workbench/startup','workbench/workbench', + 'intuition','graphics','exec','dos','diskfont','utility','wb','icon', + 'utility/hooks','intuition/classes','intuition/classusr', + 'exec/lists','exec/nodes','dos/rdargs','dos/dos' + + +MODULE 'classes/window','gadgets/listbrowser','listbrowser', + 'other/classact_macros','layout','gadgets/layout','images/bevel', + 'gadgets/chooser','chooser','images/label','label','window', + 'button' + +MODULE 'tools/classact_lib' + +/* a simple button */ +#define Button(a) ButtonObject, GA_TEXT, a, ButtonEnd +#define DButton(a) ButtonObject, GA_TEXT, a, GA_DISABLED, TRUE, ButtonEnd + + +/************************************************************************** + * Some label arrays for the gadgets in this demo. + */ + +DEF objtypes:PTR TO LONG, + objnames:PTR TO LONG + + +/************************************************************************* + * ReadArgs + */ + +#define TEMPLATE 'S=SIMPLEREFRESH/S,NC=NOCAREREFRESH/S,ND=NDEFER/S' + +ENUM A_SIMPLE, A_NOCARE, A_NODEFER + +DEF arguments:PTR TO LONG + + +-> Must use separate vars because for some reason, EC chokes when you try +-> to assign a value to an indexed array in the middle of a list... Will +-> have to notify Wouter about that bugger. +-> We will manualy build the list later. + +ENUM G_OBJTYPE=1, G_OBJLIST, G_TOP, G_UP, G_DOWN, G_BOTTOM, G_SORT, + G_NEW, G_EDIT, G_COPY, G_REMOVE, G_HELP, G_SAVE, G_USE, G_TEST, + G_CANCEL,G_END + +DEF gl[18]: ARRAY OF LONG + +DEF g_objtype, + g_objlist, + g_top, + g_up, + g_down, + g_bottom, + g_sort, + g_new, + g_edit, + g_copy, + g_remove, + g_help, + g_save, + g_use, + g_test, + g_cancel + + +PROC init() + objtypes:=['Exec','Image','Sound','Menu','Icon','Dock','Access',NIL] + objnames:=['ToolManager','ScreenMode','WBPattern',NIL] + + buttonbase :=openClass('gadgets/button.gadget',0) + listbrowserbase :=openClass('gadgets/listbrowser.gadget',0) + chooserbase :=openClass('gadgets/chooser.gadget',0) + windowbase :=openClass('window.class',0) + layoutbase :=openClass('gadgets/layout.gadget',0) + labelbase := openClass('images/label.image',0) + + iconbase := OpenLibrary('icon.library',36) + +ENDPROC + + +/************************************************************************* + * App message hook. + * Workbench App messages can be caught with a callback hook such as this. + * We'll not worry about the app message type in this hook. Objects dropped + * on the window or on the icon (while iconified) will be added to the + * listview. + */ + + +PROC appMsgFunc(hook:PTR TO hook, window:PTR TO object, msg:PTR TO appmessage) +DEF win: PTR TO window, i, arg:PTR TO wbarg, l: PTR TO lh, n:PTR TO ln, + name[256]:STRING + + i := msg.numargs + arg := msg.arglist + l := hook.data + + GetAttr(WINDOW_WINDOW, window, {win} ) + + +-> Detach the list for modifications. + + SetGadgetAttrsA(g_objlist, win, NIL,[LISTBROWSER_LABELS, Not(0), TAG_END]) + + WHILE i + /* Add the name of the icon to the listview. ListBrowser can copy the + * text into an internal buffer and thus let us not worry about the + * pointer validity. + */ + + DEC i + + NameFromLock(arg.lock, name, 256) + AddPart(name,arg.name, 256) + + IF (n := AllocListBrowserNodeA(1, [LBNCA_COPYTEXT, TRUE, LBNCA_TEXT, name, TAG_END])) THEN AddTail(l, n) + + arg++ + + ENDWHILE + +-> Reattach the list + + SetGadgetAttrsA(g_objlist, win, NIL, [LISTBROWSER_LABELS, l, TAG_END]) +ENDPROC + + +/************************************************************************* + * Main Program + */ + +PROC main() HANDLE +DEF objlist=NIL:PTR TO lh, + typelist:PTR TO lh, + args=NIL:PTR TO rdargs, + appport: PTR TO mp, + window=NIL:PTR TO object, + mainlayout:PTR TO window, + apphook:hook, + win:PTR TO window, + wsig, asig,done=FALSE, + sig,result,code, + tmp,tmp2,tmp3, + ids:PTR TO LONG, + dis=FALSE,i, + helptext[40]:STRING + + +-> Init some lists, and open the required gadgets/libraries. + +init() + +ids := [G_TOP, G_UP, G_DOWN, G_BOTTOM, G_EDIT, G_COPY, G_REMOVE, G_END ] + +arguments:=[0,0,0] +IF (args := ReadArgs(TEMPLATE, arguments, NIL))=NIL THEN Raise(20) + + +IF ((iconbase<>NIL) AND (buttonbase<>NIL) AND (listbrowserbase<>NIL) AND (chooserbase<>NIL) AND (windowbase<>NIL) AND (layoutbase<>NIL) AND (labelbase<>NIL)) + + WriteF('\seferred \s refresh \s\n', (IF arguments[A_NODEFER] THEN 'Non-d' ELSE 'D'), (IF arguments[A_SIMPLE] THEN 'Simple' ELSE 'Smart'), (IF arguments[A_NOCARE] THEN '(NoCare)' ELSE '')) + + objlist := browserNodesA(objnames) + typelist := chooserLabelsA(objtypes) + + /* By providing a message port you enable windowclass to handle iconification + * and appwindows. This port can shared by all the windows of your application. + */ + + appport := CreateMsgPort() + + IF (objlist AND typelist AND appport) + inithook(apphook,{appMsgFunc},objlist) + + /* Create a Window object with a Layout. When Window is asked to open itself, + * it will calculate how much space the Layout needs and size itself accordingly. + */ + + + window := WindowObject, + WA_IDCMP, IDCMP_RAWKEY, + WA_TOP, 20, + WA_LEFT, 20, + WA_SIZEGADGET, TRUE, + WA_DEPTHGADGET, TRUE, + WA_DRAGBAR, TRUE, + WA_CLOSEGADGET, TRUE, + WA_ACTIVATE, TRUE, + + /* About window refreshes: + * Because WindowClass and LayoutClass can, when used together, change the + * normal Intuition practise of refreshing gadgets in the input.device context, + * some rules about the refresh system change. + * Deferred refresh works in both smart and simple refresh windows, but + * if nocarerefresh is used, Intuition does not retain the damage regions + * and any window damage will force the whole window to be refreshed. + * This demo allows you to try combinations of refresh types. + * In the normal case you can ignore this and let WindowClass and the user + * decide what kind of refreshes they want. Nocare refresh can be + * combined with smart refresh to provide a fast, but somewhat more memory + * hungry refresh method. Simple refresh can save some memory but it's + * slower. + */ + + WA_SIMPLEREFRESH, arguments[A_SIMPLE], + WA_NOCAREREFRESH, arguments[A_NOCARE], + WA_SMARTREFRESH, Not(arguments[A_SIMPLE]), + + WA_TITLE, 'ClassAct layout.gadget Example (ToolManager preferences mockup)', + WA_SCREENTITLE, 'ClassAct Copyright 1995 Phantom Development LLC.', + + /* Turn on gadget help in the window + */ + + WINDOW_GADGETHELP, TRUE, + + /* Add an iconification gadget. If you have this, you must listen to + * WMHI_ICONIFY. + */ + + WINDOW_ICONIFYGADGET, TRUE, + + /* This message port lets windowclass handle the icon and appwindow. + */ + + WINDOW_APPPORT, appport, + WINDOW_APPWINDOW, TRUE, + WINDOW_APPMSGHOOK, apphook, + + /* The windowclass will automatically free the DiskObject used when + * iconifying the window. If you do not provide a valid DiskObject, + * windowclass will try to use env:sys/def_window.info or the default + * project icon. + */ + + WINDOW_ICON, GetDiskObject( 'LayoutExample' ), + WINDOW_ICONTITLE, 'ClassAct Example', + + /* Below is the layout of the window + */ + + WINDOW_PARENTGROUP, mainlayout := VGroupObject, + LAYOUT_SPACEOUTER, TRUE, + LAYOUT_BEVELSTYLE, BVS_THIN, + + /* this tag instructs layout.gadget to defer GM_LAYOUT and GM_RENDER and ask + * the windowclass to do them. This lessens the load on input.device + */ + + LAYOUT_DEFERLAYOUT, Not(arguments[A_NODEFER]), + + /* A 1-of-n chooser using the labels list we made from the label array earlier + */ + + StartMember, g_objtype := ChooserObject, + CHOOSER_LABELS, typelist, + EndMember, + MemberLabel('_Object Type'), + + /* Objects can be given arbitary weights within groups, and layout.gadget + * will distribute space relative to the total weight of the group. + * Here we set the button column to 0 weight which means minimum space. + * Thus the listview gets all available extra space. + */ + + StartHGroup, BAligned, + + StartMember, g_objlist := ListBrowserObject, + LISTBROWSER_LABELS, objlist, + LISTBROWSER_SHOWSELECTED, TRUE, + EndMember, + + StartVGroup, + StartMember, g_top := DButton('Top'), + StartMember, g_up := DButton('Up'), + StartMember, g_down := DButton('Down'), + StartMember, g_bottom := DButton('Bottom'), + StartMember, g_sort := Button('So_rt'), + EndGroup, + CHILD_WEIGHTEDWIDTH, 0, + + /* One way to keep the buttons constant size is to set the + * group to stay at minimum size with a weight of 0. We could + * also set the weight of each of the buttons to 0. That way + * extra space would be distributed between the buttons + * instead of all below. This looks better. + */ + + CHILD_WEIGHTEDHEIGHT, 0, + EndGroup, + + /* two rows of buttons. EvenSized instructs layout.gadget that it + * should make sure the minimum size of each matches, so that we + * get four neat columns. + * Again the weight is set to 0. When the window is resized, all + * space is given to the listview. + */ + + + StartHGroup, EvenSized, + StartMember, g_new := Button('_New...'), + StartMember, g_edit := DButton('_Edit...'), + StartMember, g_copy := DButton('Co_py'), + StartMember, g_remove := DButton('Remove'), + EndGroup, + CHILD_WEIGHTEDHEIGHT, 0, + + StartHGroup, EvenSized, + StartMember, g_save := Button('_Save'), + StartMember, g_use := Button('_Use'), + StartMember, g_test := Button('_Test'), + StartMember, g_cancel := Button('_Cancel'), + EndGroup, + CHILD_WEIGHTEDHEIGHT, 0, + + + StartMember, g_help := ButtonObject, + GA_READONLY, TRUE, + GA_TEXT, 'Welcome to ClassAct demo!', + EndMember, + CHILD_WEIGHTEDHEIGHT, 0, + + EndGroup, + EndWindow + + IF window + + /* Finish the gadgetarray initialisation. Set gadget IDs and release verify. + * This is one way of avoiding boring repetition in the layout description + * taglist itself. + */ + +-> Let's also generate the array of gadget pointers. We couldn't generate it +-> while we created gadgets because some bug (?) in EC prevents the use of +-> an array in the middle of a list. +-> Fortunately, it's a breeze to do using E lists. + + gl:=[NIL, + g_objtype, + g_objlist, + g_top, + g_up, + g_down, + g_bottom, + g_sort, + g_new, + g_edit, + g_copy, + g_remove, + g_help, + g_save, + g_use, + g_test, + g_cancel, + NIL] + + i:=1 + + REPEAT + SetAttrsA(gl[i], [GA_ID, i, GA_RELVERIFY, TRUE, TAG_END]) + INC i + UNTIL (i = G_END) + + IF (win := CA_OpenWindow(window)) + asig := Shl(1,appport.sigbit) + + /* Now that the window has been opened, we can get the signal mask + * of its user port. If the program supported iconification and didn't + * use a shared IDCMP port between all windows, this signal bit + * would have to be re-queried before each Wait(). + */ + + GetAttr( WINDOW_SIGMASK, window, {wsig} ) + + WHILE (done = FALSE) + sig := Wait(wsig OR asig OR SIGBREAKF_CTRL_C) + + IF (sig AND (wsig OR asig)) + + /* Messages waiting at the window's IDCMP port. Loop at WM_HANDLEINPUT + * until all have been processed. + */ + + WHILE ((result := CA_HandleInput(window,{code})) <> WMHI_LASTMSG) + + /* The return code of this method is two-part. The upper word describes the + * class of the message (gadgetup, menupick, closewindow, iconify, etc), + * and the lower word is a class-defined ID, currently in use in the + * gadgetup and menupick return codes. + * Switch on the class, then on the ID. + */ + + tmp := (result AND WMHI_CLASSMASK) + + SELECT tmp + + CASE WMHI_GADGETUP + /* OK, got a gadgetup from something. Lets find out what the something is. + * The code WORD to which a pointer was passed to WM_HANDLEINPUT has been + * set to the Code value from the IDCMP_GADGETUP, in case we need it. + */ + + tmp2 := (result AND WMHI_GADGETMASK) + SELECT tmp2 + + CASE G_OBJLIST + /* User clicked on the listview + */ + IF (code = Not(0)) THEN dis := TRUE /* no node was selected */ + + i := 0 + REPEAT + SetGadgetAttrsA( gl[ids[i]], win, NIL, [GA_DISABLED, dis, TAG_END]) + RefreshGList( gl[ids[i]], win, NIL, 1 ) + INC i + UNTIL (ids[i] = G_END) + ENDSELECT + + CASE WMHI_GADGETHELP + + /* A gadget help message informs the application about the gadget + * under the mouse pointer. The code WORD is set to the value the + * gadget returned. Result code contains the ID of the gadget, + * or NULL (not in the window) or WMHI_GADGETMASK (not over a gadget). + */ + + tmp3 := (result AND WMHI_GADGETMASK) + SELECT tmp3 + + CASE G_OBJTYPE ; StrCopy(helptext,'Choose object type') + CASE G_OBJLIST ; StrCopy(helptext,'Choose object to modify') + CASE G_TOP ; StrCopy(helptext,'Move object to top') + CASE G_UP ; StrCopy(helptext,'Move object upwards') + CASE G_DOWN ; StrCopy(helptext,'Move object downwards') + CASE G_BOTTOM ; StrCopy(helptext,'Move object to bottom') + CASE G_SORT ; StrCopy(helptext,'Sort object list') + CASE G_NEW ; StrCopy(helptext,'Create new object') + CASE G_EDIT ; StrCopy(helptext,'Edit object') + CASE G_COPY ; StrCopy(helptext,'Make a new copy of object') + CASE G_REMOVE ; StrCopy(helptext,'Delete the object') + CASE G_HELP ; StrCopy(helptext,'Hey there ;)') + CASE G_SAVE ; StrCopy(helptext,'Save settings') + CASE G_USE ; StrCopy(helptext,'Use these settings') + CASE G_TEST ; StrCopy(helptext,'Test these settings') + CASE G_CANCEL ; StrCopy(helptext,'Cancel changes') + DEFAULT ; StrCopy(helptext,'') + ENDSELECT + + IF (SetGadgetAttrsA(gl[G_HELP], win, NIL, [GA_TEXT, helptext, TAG_END] )) THEN RefreshGList(gl[G_HELP], win, NIL, 1) + + CASE WMHI_CLOSEWINDOW + /* The window close gadget was hit. Time to die... + */ + done := TRUE + + CASE WMHI_ICONIFY + /* Window requests that it be iconified. Handle this event as + * soon as possible. The window is not iconified automatically to + * give you a chance to make note that the window pointer will be + * invalid before the window closes. It also allows you to free + * resources only needed when the window is open, if you wish to. + */ + IF (CA_Iconify( window )) THEN win := NIL + + CASE WMHI_UNICONIFY + /* The window should be reopened. If you had free'd something + * on iconify, now is the time to re-allocate it, before calling + * CA_OpenWindow. + */ + win := CA_OpenWindow( window ) + + ENDSELECT + ENDWHILE + + ELSEIF (sig AND SIGBREAKF_CTRL_C) + done := TRUE + ENDIF + + ENDWHILE + + /* Close the window and dispose of all attached gadgets + */ + DisposeObject( window ) + ENDIF + ENDIF + ENDIF + + IF appport THEN DeleteMsgPort(appport) + + /* NIL is valid input for these helper functions, so no need to check. + */ + freeChooserLabels( typelist ) + freeBrowserNodes( objlist ) + + FreeArgs(args) +ENDIF + +EXCEPT DO + + IF buttonbase THEN CloseLibrary(buttonbase) + IF listbrowserbase THEN CloseLibrary(listbrowserbase) + IF chooserbase THEN CloseLibrary(chooserbase) + IF windowbase THEN CloseLibrary(windowbase) + IF layoutbase THEN CloseLibrary(layoutbase) + IF labelbase THEN CloseLibrary(labelbase) + IF iconbase THEN CloseLibrary(iconbase) +ENDPROC diff --git a/AmigaE/LayoutExample.info b/AmigaE/LayoutExample.info new file mode 100644 index 0000000000000000000000000000000000000000..7c6c5a708261caa434d9370b7ac6cb0203db4841 GIT binary patch literal 626 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 J1ef6F{{a^qYOnwR literal 0 HcmV?d00001 diff --git a/AmigaE/PenMapExample.e b/AmigaE/PenMapExample.e new file mode 100644 index 0000000..ffc917d --- /dev/null +++ b/AmigaE/PenMapExample.e @@ -0,0 +1,1773 @@ +/* Example for ClassAct penmap.image example 40.2 */ +/* Original C example by Phantom Development */ +/* Ported to E by Eric Sauvageau */ + +-> Required modules + +MODULE 'exec/types','intuition/imageclass','intuition', + 'intuition/gadgetclass','intuition/intuition','utility/tagitem' + +MODULE 'penmap','images/penmap','tools/classact_lib' + +DEF penmapbase, + win:PTR TO window, + image_object:PTR TO image + + +PROC main() +DEF msg:PTR TO intuimessage, done=FALSE + +-> Open the window. + + win:=OpenWindowTagList(NIL, + [WA_FLAGS ,(WFLG_DEPTHGADGET OR WFLG_DRAGBAR OR + WFLG_CLOSEGADGET OR WFLG_SIZEGADGET), + WA_IDCMP, (IDCMP_CLOSEWINDOW OR IDCMP_NEWSIZE), + WA_INNERWIDTH, 60, + WA_INNERHEIGHT, 45, + WA_MAXWIDTH, -1, + WA_MAXHEIGHT, -1, + WA_ACTIVATE, TRUE, + WA_SMARTREFRESH, TRUE, + WA_TITLE, 'ClassAct penmap.image Demo', + TAG_DONE]) + + IF win + +-> Open the penmap.image class. + + IF (penmapbase := openClass('Images/penmap.image',40)) + +-> Alloc a new object. + + image_object := NewObjectA(PenMap_GetClass(), NIL, + [PENMAP_RENDERDATA, {image_data}, + PENMAP_PALETTE, {palette_data}, + PENMAP_SCREEN, win.wscreen, + TAG_DONE]) + + IF image_object + +-> Set its attributes. + + SetAttrsA(image_object, + [IA_WIDTH, (win.width - (win.borderleft + win.borderright + 10)), + IA_HEIGHT, (win.height - (win.bordertop + win.borderbottom + 10)), + TAG_DONE]) + + DrawImageState(win.rport, + image_object, + (win.borderleft + 5), + (win.bordertop + 5), + IDS_NORMAL, NIL) + +-> Handle it. + WHILE done=FALSE + WaitPort(win.userport) + WHILE (msg := GetMsg(win.userport)) + + IF (msg.class = IDCMP_CLOSEWINDOW) + done := TRUE + + ELSEIF (msg.class = IDCMP_NEWSIZE) + SetAttrsA(image_object, + [IA_WIDTH, (win.width - (win.borderleft + win.borderright + 10)), + IA_HEIGHT, (win.height - (win.bordertop + win.borderbottom + 10)), + TAG_DONE]) + + SetAPen(win.rport,0) + + RectFill(win.rport, + win.borderleft, + win.bordertop, + (win.borderleft + win.width - (win.borderright + win.borderleft + 1)), + (win.bordertop + win.height - (win.bordertop + win.borderbottom + 1))) + + DrawImageState(win.rport, + image_object, + (win.borderleft + 5), + (win.bordertop + 5), + IDS_NORMAL, + NIL) + ENDIF + ReplyMsg(msg) + ENDWHILE + ENDWHILE + ENDIF + ENDIF + ENDIF + +-> Cleanup. + + IF image_object THEN DisposeObject(image_object) + IF win THEN CloseWindow(win) + IF penmapbase THEN CloseLibrary(penmapbase) +ENDPROC + + +palette_data: +LONG 8, + $99999999, $99999999, $99999999, + $00000000, $00000000, $00000000, + $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, + $33333333, $66666666, $AAAAAAAA, + $77777777, $77777777, $88888888, + $AAAAAAAA, $AAAAAAAA, $AAAAAAAA, + $AAAAAAAA, $88888888, $77777777, + $EEEEEEEE, $99999999, $77777777 + + +image_data: +CHAR 0,112, 0,118 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$02 + CHAR $05,$05,$04,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$02,$03 + CHAR $03,$03,$04,$04,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$02,$03,$03 + CHAR $03,$03,$03,$03,$01,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$02,$07,$03,$03 + CHAR $03,$03,$03,$03,$03,$01,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$02,$07,$07,$07,$07 + CHAR $01,$00,$04,$03,$01,$00,$01,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$02,$07,$07,$07,$07,$02 + CHAR $05,$01,$00,$04,$01,$01,$03,$01 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$02,$07,$07,$07,$07,$02,$02 + CHAR $02,$05,$01,$00,$03,$03,$03,$03 + CHAR $01,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $02,$07,$07,$07,$07,$02,$02,$02 + CHAR $02,$02,$05,$01,$00,$03,$03,$03 + CHAR $03,$01,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$02 + CHAR $07,$07,$07,$07,$02,$02,$02,$04 + CHAR $02,$02,$02,$05,$01,$00,$03,$03 + CHAR $03,$03,$01,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$02,$07 + CHAR $07,$07,$07,$02,$02,$02,$04,$02 + CHAR $02,$02,$02,$02,$05,$01,$03,$03 + CHAR $03,$03,$03,$01,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$02,$07,$07 + CHAR $07,$07,$02,$02,$02,$04,$02,$02 + CHAR $02,$05,$02,$02,$02,$05,$01,$00 + CHAR $03,$03,$03,$03,$01,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$02,$07,$07,$07 + CHAR $07,$02,$02,$02,$04,$02,$02,$02 + CHAR $05,$02,$02,$02,$02,$02,$05,$01 + CHAR $00,$03,$03,$03,$03,$01,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$02,$07,$07,$07,$07 + CHAR $02,$02,$02,$04,$02,$02,$02,$05 + CHAR $02,$02,$02,$04,$02,$02,$02,$05 + CHAR $01,$00,$03,$03,$03,$03,$01,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$02,$07,$07,$07,$07,$02 + CHAR $02,$02,$04,$02,$02,$02,$05,$02 + CHAR $02,$02,$04,$02,$02,$02,$02,$02 + CHAR $05,$01,$00,$03,$03,$03,$03,$01 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$02,$07,$07,$07,$07,$02,$02 + CHAR $02,$04,$02,$02,$02,$05,$02,$02 + CHAR $02,$04,$02,$02,$02,$05,$02,$02 + CHAR $02,$05,$01,$00,$03,$03,$03,$03 + CHAR $01,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $02,$07,$07,$07,$07,$02,$02,$02 + CHAR $04,$02,$02,$02,$05,$02,$02,$02 + CHAR $04,$02,$02,$02,$05,$02,$02,$02 + CHAR $02,$02,$05,$01,$00,$03,$03,$03 + CHAR $03,$01,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$02 + CHAR $07,$07,$07,$07,$02,$02,$02,$04 + CHAR $02,$02,$02,$05,$02,$02,$02,$04 + CHAR $02,$02,$02,$05,$02,$02,$02,$04 + CHAR $02,$02,$05,$01,$05,$03,$03,$03 + CHAR $03,$03,$01,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$02,$07 + CHAR $07,$07,$07,$02,$02,$02,$04,$02 + CHAR $02,$02,$05,$02,$02,$02,$04,$02 + CHAR $02,$02,$05,$02,$02,$02,$04,$02 + CHAR $02,$02,$01,$05,$03,$03,$03,$03 + CHAR $03,$03,$03,$01,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$02,$07,$07 + CHAR $07,$07,$02,$02,$02,$04,$02,$02 + CHAR $02,$05,$02,$02,$02,$04,$02,$02 + CHAR $02,$05,$02,$02,$02,$04,$02,$02 + CHAR $02,$01,$05,$03,$03,$03,$03,$03 + CHAR $03,$03,$03,$03,$01,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$02,$07,$07,$07 + CHAR $07,$02,$02,$02,$04,$02,$02,$02 + CHAR $05,$02,$02,$02,$04,$02,$02,$02 + CHAR $05,$02,$02,$02,$04,$02,$02,$02 + CHAR $01,$05,$03,$03,$03,$03,$03,$03 + CHAR $03,$03,$03,$03,$03,$01,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$02,$03,$07,$07,$07 + CHAR $02,$02,$02,$04,$02,$02,$02,$05 + CHAR $02,$02,$02,$04,$02,$02,$02,$05 + CHAR $02,$02,$02,$04,$02,$02,$02,$01 + CHAR $05,$03,$03,$03,$03,$03,$03,$03 + CHAR $03,$03,$03,$03,$03,$03,$01,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$02,$02,$03,$01,$07,$02 + CHAR $02,$02,$04,$02,$02,$02,$05,$02 + CHAR $02,$02,$04,$02,$02,$02,$05,$02 + CHAR $02,$02,$04,$02,$02,$02,$01,$05 + CHAR $03,$03,$03,$03,$03,$03,$03,$03 + CHAR $03,$03,$03,$03,$03,$03,$03,$01 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$03,$03,$03,$03,$01,$02 + CHAR $02,$02,$02,$02,$02,$05,$02,$02 + CHAR $02,$04,$02,$02,$02,$05,$02,$02 + CHAR $02,$04,$02,$02,$02,$01,$05,$03 + CHAR $03,$03,$03,$03,$03,$04,$04,$03 + CHAR $00,$03,$03,$03,$03,$03,$03,$03 + CHAR $01,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$03,$03,$03,$03,$03,$01 + CHAR $02,$02,$02,$02,$05,$02,$02,$02 + CHAR $04,$02,$02,$02,$05,$02,$02,$02 + CHAR $04,$02,$02,$02,$01,$05,$03,$03 + CHAR $03,$03,$03,$03,$04,$03,$03,$03 + CHAR $03,$00,$03,$03,$03,$03,$03,$03 + CHAR $01,$01,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$02,$03,$03,$03,$03,$03 + CHAR $01,$02,$02,$02,$02,$02,$02,$04 + CHAR $02,$02,$02,$05,$02,$02,$02,$04 + CHAR $02,$02,$02,$01,$05,$03,$03,$03 + CHAR $01,$01,$01,$01,$03,$03,$03,$03 + CHAR $03,$03,$00,$03,$03,$03,$03,$03 + CHAR $01,$01,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$02,$03,$03,$03,$03 + CHAR $03,$01,$02,$02,$02,$02,$04,$02 + CHAR $02,$02,$05,$02,$02,$02,$04,$02 + CHAR $02,$02,$01,$05,$03,$03,$03,$01 + CHAR $02,$02,$05,$05,$01,$01,$03,$03 + CHAR $03,$03,$03,$00,$03,$03,$03,$03 + CHAR $01,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$02,$03,$03,$03 + CHAR $03,$03,$01,$02,$02,$02,$02,$02 + CHAR $02,$05,$02,$02,$02,$04,$02,$02 + CHAR $02,$01,$05,$03,$03,$03,$01,$02 + CHAR $02,$02,$02,$02,$05,$05,$01,$03 + CHAR $03,$03,$03,$03,$04,$04,$01,$01 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$02,$03,$03 + CHAR $03,$03,$03,$01,$02,$02,$02,$02 + CHAR $05,$02,$02,$02,$04,$02,$02,$02 + CHAR $01,$05,$03,$03,$03,$01,$02,$02 + CHAR $05,$00,$05,$05,$05,$05,$05,$01 + CHAR $03,$03,$03,$03,$03,$04,$01,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$02,$03 + CHAR $03,$03,$03,$03,$01,$02,$02,$02 + CHAR $02,$02,$02,$04,$02,$02,$02,$01 + CHAR $05,$03,$03,$03,$01,$02,$02,$05 + CHAR $05,$00,$00,$00,$00,$02,$02,$05 + CHAR $01,$03,$03,$03,$01,$01,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$02 + CHAR $03,$03,$03,$03,$03,$01,$02,$02 + CHAR $02,$02,$04,$02,$02,$02,$01,$05 + CHAR $03,$03,$03,$01,$02,$02,$05,$05 + CHAR $05,$05,$05,$00,$04,$00,$02,$02 + CHAR $05,$01,$03,$03,$01,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $02,$03,$03,$03,$03,$03,$01,$02 + CHAR $02,$02,$02,$02,$02,$01,$05,$03 + CHAR $03,$03,$01,$02,$02,$05,$05,$05 + CHAR $05,$05,$05,$00,$04,$04,$00,$02 + CHAR $05,$05,$01,$01,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$02,$03,$03,$03,$03,$03,$01 + CHAR $02,$02,$02,$02,$01,$05,$03,$03 + CHAR $03,$01,$02,$02,$05,$05,$05,$05 + CHAR $05,$05,$05,$00,$04,$04,$04,$04 + CHAR $05,$05,$01,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$02,$03,$03,$03,$03,$03 + CHAR $01,$02,$02,$01,$05,$03,$03,$03 + CHAR $01,$02,$02,$05,$04,$04,$01,$02 + CHAR $05,$05,$05,$05,$04,$04,$04,$04 + CHAR $00,$01,$03,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$02,$03,$03,$03,$03 + CHAR $03,$01,$01,$05,$03,$03,$03,$01 + CHAR $02,$02,$05,$05,$04,$01,$03,$03 + CHAR $02,$05,$05,$05,$05,$04,$04,$04 + CHAR $01,$03,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$02,$03,$03,$03 + CHAR $03,$03,$04,$03,$03,$03,$03,$04 + CHAR $02,$02,$05,$05,$05,$01,$03,$03 + CHAR $03,$02,$05,$05,$00,$00,$00,$01 + CHAR $03,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$02,$03,$03 + CHAR $03,$03,$03,$03,$03,$03,$03,$01 + CHAR $02,$02,$05,$05,$05,$05,$01,$03 + CHAR $03,$03,$02,$05,$00,$00,$01,$03 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$02,$03 + CHAR $03,$03,$03,$03,$03,$03,$03,$03 + CHAR $01,$02,$02,$02,$05,$05,$05,$01 + CHAR $03,$03,$02,$05,$00,$01,$03,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$02 + CHAR $03,$03,$03,$03,$03,$03,$03,$03 + CHAR $03,$01,$02,$02,$05,$05,$05,$05 + CHAR $01,$03,$05,$05,$01,$03,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $02,$03,$03,$03,$03,$03,$03,$03 + CHAR $03,$03,$01,$02,$02,$02,$05,$05 + CHAR $00,$00,$00,$01,$03,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$02,$03,$03,$03,$03,$03,$03 + CHAR $03,$03,$03,$01,$02,$02,$05,$05 + CHAR $00,$00,$01,$03,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$02,$03,$03,$03,$03,$03 + CHAR $03,$03,$03,$03,$01,$02,$04,$04 + CHAR $00,$01,$03,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$02,$03,$03,$03,$03 + CHAR $03,$03,$03,$03,$03,$01,$04,$04 + CHAR $01,$03,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$02,$03,$03,$03 + CHAR $03,$03,$03,$03,$03,$03,$01,$01 + CHAR $03,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$05,$05,$05,$05 + CHAR $05,$05,$03,$03,$05,$05,$05,$05 + CHAR $05,$05,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$05,$05,$05,$05,$05 + CHAR $05,$05,$05,$05,$05,$07,$07,$07 + CHAR $07,$05,$05,$05,$05,$07,$07,$07 + CHAR $07,$05,$04,$04,$04,$04,$04,$04 + CHAR $04,$04,$04,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$05,$05,$05,$05 + CHAR $05,$05,$05,$05,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$05,$07,$07,$07 + CHAR $07,$07,$05,$05,$07,$07,$07,$07 + CHAR $07,$05,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$04,$04,$04,$04,$04 + CHAR $04,$04,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$05,$05,$05,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$02,$07,$07,$07 + CHAR $07,$07,$07,$07,$07,$07,$07,$07 + CHAR $07,$02,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$04,$04,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $05,$05,$05,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$02,$07,$07,$07 + CHAR $07,$07,$07,$07,$07,$07,$07,$07 + CHAR $07,$02,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$04,$04,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$05 + CHAR $05,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$02,$07,$07,$07 + CHAR $07,$07,$02,$02,$07,$07,$07,$07 + CHAR $07,$02,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$04,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$05,$05 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$02,$07,$07,$07 + CHAR $07,$02,$02,$03,$02,$07,$07,$07 + CHAR $07,$02,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$04,$04 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$05,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$02,$02,$02,$02 + CHAR $02,$02,$02,$05,$02,$02,$02,$02 + CHAR $02,$02,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$05,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$02,$02,$02,$02 + CHAR $02,$02,$02,$05,$02,$02,$02,$02 + CHAR $02,$02,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$01,$01 + CHAR $01,$01,$01,$01,$02,$02,$02,$02 + CHAR $02,$02,$02,$05,$02,$02,$02,$02 + CHAR $02,$02,$01,$01,$01,$01,$01,$01 + CHAR $04,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$05,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$01,$01 + CHAR $01,$01,$01,$01,$01,$02,$02,$02 + CHAR $02,$02,$02,$03,$02,$02,$02,$02 + CHAR $02,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$04,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$05,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$01,$01 + CHAR $01,$01,$01,$01,$01,$02,$02,$02 + CHAR $02,$02,$02,$05,$02,$02,$02,$02 + CHAR $02,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$05,$05,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$04,$04 + CHAR $01,$01,$01,$01,$01,$02,$02,$02 + CHAR $02,$02,$02,$05,$02,$02,$02,$02 + CHAR $02,$01,$01,$01,$01,$01,$04,$04 + CHAR $04,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$04,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$05,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$01,$01,$01,$01,$02,$02,$02 + CHAR $02,$02,$02,$05,$02,$02,$02,$02 + CHAR $02,$01,$01,$01,$01,$04,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$05,$05,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $01,$01,$01,$01,$01,$01,$02,$02 + CHAR $02,$02,$02,$03,$02,$02,$02,$02 + CHAR $01,$01,$01,$01,$01,$01,$04,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$04,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$05,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$04,$01 + CHAR $01,$01,$01,$01,$01,$01,$02,$02 + CHAR $02,$02,$02,$05,$02,$02,$02,$02 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$05,$05,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$04,$01 + CHAR $01,$01,$01,$01,$01,$01,$02,$02 + CHAR $02,$02,$02,$05,$02,$02,$02,$02 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$04,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$05,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $01,$01,$01,$01,$01,$01,$02,$02 + CHAR $02,$02,$02,$05,$02,$02,$02,$02 + CHAR $01,$01,$01,$01,$01,$01,$04,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $05,$05,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $01,$01,$01,$01,$01,$01,$01,$02 + CHAR $02,$02,$02,$03,$02,$02,$02,$01 + CHAR $01,$01,$01,$01,$01,$01,$04,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$04,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $05,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $01,$01,$01,$01,$01,$01,$01,$02 + CHAR $02,$02,$02,$05,$02,$02,$02,$01 + CHAR $01,$01,$01,$01,$01,$01,$04,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$05 + CHAR $05,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$01,$01,$01,$01,$01,$01,$02 + CHAR $02,$02,$02,$05,$02,$02,$02,$01 + CHAR $01,$01,$01,$01,$01,$04,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$04,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$05 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$01,$01,$01,$01,$01,$01,$01 + CHAR $02,$02,$02,$05,$02,$02,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$04,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$05,$05 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$01,$01,$01,$01,$01,$01,$01 + CHAR $02,$02,$02,$03,$02,$02,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$04,$04 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$05,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$01,$01,$01,$01,$01,$01 + CHAR $02,$02,$02,$05,$02,$02,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$05,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$01,$01,$01,$01,$01,$01 + CHAR $01,$02,$02,$05,$02,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$01,$01,$01,$01,$01 + CHAR $01,$02,$02,$05,$02,$01,$01,$01 + CHAR $01,$01,$01,$04,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$05,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$01,$01,$01,$01,$01 + CHAR $01,$02,$02,$03,$02,$01,$01,$01 + CHAR $01,$01,$01,$04,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$04,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$05,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$01,$01,$01,$01 + CHAR $01,$01,$02,$05,$01,$01,$01,$01 + CHAR $01,$01,$04,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$05,$05,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$01,$01,$01,$01 + CHAR $01,$01,$02,$05,$01,$01,$01,$01 + CHAR $01,$01,$04,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$04,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$05,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$02,$05,$01,$01,$01,$01 + CHAR $01,$04,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$05,$05,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$02,$01,$01,$01,$01,$01 + CHAR $01,$04,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$04,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$05,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$01,$01 + CHAR $01,$01,$01,$04,$01,$01,$01,$01 + CHAR $04,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$05,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$05,$05,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$01,$01 + CHAR $01,$01,$01,$04,$01,$01,$01,$01 + CHAR $04,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$05,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$04,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$05,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$04,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$04,$01 + CHAR $01,$01,$01,$04,$01,$01,$01,$04 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$05,$05,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $05,$05,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$04,$01 + CHAR $01,$01,$01,$04,$01,$01,$01,$04 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$05,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$04,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $05,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$04,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $01,$01,$01,$01,$04,$01,$04,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$05,$05,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$05 + CHAR $05,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $01,$01,$01,$01,$04,$01,$04,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$05,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$04,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$05 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$04,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$01,$01,$01,$04,$04,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$05,$05,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$04,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$05,$05 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$01,$01,$01,$04,$04,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$05,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$04,$04 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$05,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$04,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$05,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$05,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $04,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$05,$05,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$05,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$04 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$05,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$04,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$05,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$04,$04 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$05,$05 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$05,$05,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$04,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$05 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$04,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$05,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$04,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$05 + CHAR $05,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$05,$05,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$04,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $05,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$04,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$05,$05,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$04,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$04,$04,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $05,$05,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$04,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$05,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$05,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$05,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$04,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$05,$05,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$05,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$05,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$05,$05,$05,$02,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$04,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$05,$05,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$02,$04,$04,$04,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$04,$02,$02,$02,$02,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$04,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$05,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$02 + CHAR $02,$02,$02,$04,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$04,$04,$02,$02,$02,$02 + CHAR $02,$02,$01,$01,$01,$01,$01,$01 + CHAR $01,$04,$04,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$04,$04,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$05,$05,$01,$01,$01 + CHAR $01,$01,$01,$01,$02,$02,$02,$02 + CHAR $02,$02,$04,$04,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$04,$04,$04,$04,$04 + CHAR $02,$02,$02,$02,$01,$01,$01,$01 + CHAR $01,$04,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$05,$01,$01,$01 + CHAR $01,$01,$02,$02,$02,$02,$04,$04 + CHAR $04,$04,$04,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$04 + CHAR $04,$04,$02,$02,$02,$02,$04,$04 + CHAR $04,$04,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$05,$05,$05,$05 + CHAR $02,$02,$02,$02,$04,$04,$04,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$04,$04,$04,$04,$02,$04,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$05 + CHAR $05,$04,$04,$04,$04,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$04,$04,$04,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$05 + CHAR $04,$04,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$04,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$04,$04,$04,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $01,$01,$01,$01,$01,$01,$01,$01 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$05,$04,$04 + CHAR $04,$04,$04,$04,$04,$04,$04,$04 + CHAR $04,$04,$04,$04,$04,$04,$04,$04 + CHAR $04,$04,$04,$04,$04,$04,$04,$04 + CHAR $04,$04,$04,$04,$04,$04,$04,$04 + CHAR $04,$04,$04,$04,$04,$04,$04,$04 + CHAR $04,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 + CHAR $00,$00,$00,$00,$00,$00,$00,$00 diff --git a/AmigaE/PenMapExample.info b/AmigaE/PenMapExample.info new file mode 100644 index 0000000000000000000000000000000000000000..77b08ac5c97edffff9e3f675235be94a073cd2a0 GIT binary patch literal 450 zcmaDXz`)1=0`&|&3}y`C3@kuCBl{FN2e2qQ!N`m(QVrzTAPa!mW(;BsOhC8-SuG1x z84p34zX7C#hk@q+jOL%)z~95b-@tSK0M8ka%q=K=;{Z?`$iH!b2Wl>i28u!e@pS!v z5ctCYrvCq6xEcxq0XXRcq7ZpFEx^Da0E7qF`y0gjCollrctGIH1%?CsXAZCf>4QEz k2YAj;U^wXB1LO-Z91H-e=Y^W@h})j4AZxI=qXFte0G97qx&QzG literal 0 HcmV?d00001 diff --git a/ClassActDemo.doc b/ClassActDemo.doc new file mode 100644 index 0000000..d4343f0 --- /dev/null +++ b/ClassActDemo.doc @@ -0,0 +1,261 @@ + ClassAct 2.0 Demo + ----------------- + ------- + --- + +ClassAct is a set of over 30 BOOPSI classes co-authored by Christopher +Aldi, Timothy Aston, Osma Ahvenlampi, and Petter Nilsen. Its now being +published by Finale Development, Inc. + +ClassAct provides object-oriented building blocks for your application in +the form of Intuition BOOPSI classes available as either shared run-time or +link-time libraries. As they are standard classes, they may be used with +any application environment supporting BOOPSI. ClassAct is a complete GUI +system in its own right, supporting everything from simple buttons to an +advanced list management class, and includes a complete window GUI layout +system classes that lets you create font-sensitive and resizable interfaces +quickly and easily, including any preferenced window backfill pattern +loadable via the system DataTypes. + +Programs that use ClassAct can be made freely distributable, shareware, +commercial, etc. and there is NO FEE for users. When you purchase +ClassAct, users of your software get to use all the preferences functions +of our system. ClassAct a powerful and time-saving choice for software +developers, and an affordable and convenient one as well. + +Since ClassAct classes are BOOPSI, they automatically support all kinds of +great features such as window relatively (resizability), 3.x help, +notification, and interconnections with other BOOPSI classes (which do not +necessarily have to be ClassAct classes). ClassAct classes are "standard" +AmigaOS BOOPSI class libraries, much like the colorwheel and gradient +sliders that come with release 3.x of the Amiga's operating system. +ClassAct classes are built for speed, power, efficiency and stability. + +ClassAct is compatible with 2.04 (V37) thru 3.1 (V40) releases of the Amiga +operating system and take advantage of performance increases available in +release 3.x (V39+). ClassAct has been tested with ECS, AGA, CyberGraphics, +Retina, Picasso II and EGS Spectrum. + +ClassAct is an expanding project, providing you with the graphical user +interface tools you need to write your application. ClassAct is currently +over 30 different classes, and the list is growing all the time! + +Installation: +------------- + +You must first run the Install_Classes Installer script to install the +ClassAct classes and prefs tool on your Amiga. You will not be able to run +any of the examples without the classes installed. If you already have +some ClassAct classes on your system, the Installer will only copy NEWER +versions. Note that the Installer does not copy the examples or demo +documentation. You may run the demos right out of the extracted archive +one installing the classes. Class updates dated newer than this demo +archive may, or may not be available for FTP from ftp.warped.com or +ftp.finale-dev.com user support sites. + +Support Classes: +---------------- + + * ARexx class + - Powerful ARexx class which can be used to create and manage + arexxports. Supports many arexx abilities such as stems, etc. + + * Window class + - creates intuition window objects. Windows maybe opened, closed + or iconified at will. Many window attributes may be set while + the window is open. Automatically handles keyboard control, + task defered display rendering, and many other issues to + simplify IDCMP processing and programming overhead. Preference + user backfill hooks are also supported. + +Gadget Classes: +--------------- + * Button gadget class + - powerful button class with many of options including built-in + arrow glyphs, tab-cycle support, custom images and more. + + * CheckBox gadget class + - for checkbox gadgets, very much like GadTools CHECKBOX_KIND. + + * Chooser gadget class + - for pop-up and drop-down menus simular in purpose to CycleGadgets. + + * Clicktab gadget class + - for file folder like click tab pages + + * Fuel Gauge gadget class + - for progress indication, several features including optional + tick marks, and orientation settings. + + * GetFile gadget class + - Allows the user the option of typing in a file name or popping up a + file requester to choose a file. + + * GetFont gadget class + - Lets the user pop up a font requester to choose a font. + + * GetScreenMode gadget class + - Lets the user pop up a screen mode requester to choose a screen mode. + + * Integer gadget class + - an integer gadget with optional arrows. + + * ListBrowser gadget class + - a listview supporting multiple columns, images, multi-select, etc. + + * Layout gadget class - + - for laying out gadgets and images in a font-sensitive and resizable + hierarchical group fashion. + + * Page gadget class - + - may be used in conjuntion with clicktab or other classes + to provided paged gui displays. + + * RadioButton gadget class + - for radio button gadgets, like GadTools MX_KIND. + + * Scroller gadget class + - a proportional scrollbar with arrows, and slider mode. + + * SpeedBar gadget class + - for button tool bars (horizontal or vertical orientations) with + optional window title bar help messages. + + * String gadget class + - a simple string gadget with bevel frame. + + +Image Classes: +-------------- + * Bevel image class + - for drawing bevel grouping boxes + - supports all kinds of standard bevels, including titled grouping. + bevels, drop-box bevels, optional inner fill color and text, etc. + + * Bitmap image class + - A contributed class, by Yvon Rozijn (Author of A-Web Amiga WWW + Browser) + - easily create images for Bitmap structures. + - loads images seamlessly through datatypes.library. + - resultant bitmap image can be embedded within a GUI Layout, Button, + Speedbar, etc. + + * Draw List image class + - for designing custom colorized and scaled vector/areafill images. + + * Glyph image class + - for standard scalable system images + - includes many images: arrows, get file, get font, etc. + + * Label image class + - makes multi-line labels mixing text, colors, images, styles, etc. + + * Penmap image class + - for pen-remapped images. + + +Future classes in development include requester class, balance groups, +virtual groups, application class, external tracker, printer class, +and more! + +Should You Use ClassAct?: +------------------------- +Have you written or are you currently in the process of developing Amiga +applications? If so, the answer is a very definite YES, you should be +using ClassAct. + +The graphic user interfaces of many Amiga applications fit atleast one or +more of the following descriptions: + + - Non-existant (i.e. command line only) + - Not font sensitive + - Not Locale sensitive + - Slow + - Memory Intensive + - Unattractive + - Lacking in intuitiveness and originality + - Non-standard + - Poor or limited keyboard control + +The reasons for this are simple. Many of the existing systems for creating +a GUI are either limited in features, slow, hard to use, and/or violate +system standards. ClassAct makes every attempt to combine compability, +flexiblity, usablility and some originality while following Amiga style +guide. + +This is why you should use ClassAct. The Amiga is a graphic system and +applications should have a attractive and responsive graphic user +interface. The ClassAct toolkit allows you to easily create an attractive +GUI that doesn't suffer from the deficiencies listed above. + +If you want your application to be easy to use, fast and professional +looking then you should consider ClassAct. + + +Purchasing ClassAct: +-------------------- + +ClassAct is availble NOW only from for just $39.95 USD for public domain +and sharware authors, and $69.95 USD for commercial developers. It can be +ordered directly from Finale Development, Inc: + + + Finale Development, Inc. + P.O. Box 6905 + West Palm Beach, FL. 33405 + USA + + Phone: 1 (203) 235-7518 + Fax: 1 (203) 237-8459 + + E-Mail: caldi@ct1.nai.net + E-Mail: caldi@finale-dev.com + +If you are an author of an exising application using a competitive GUI +product such as MUI, BGUI, StormWizard, GadLayout, GTLayout, Triton, +GadOutline, or GUIEnv, you may take an advantage of a $10 USD discount +off the purchase price. + + +The ClassAct web site url is: + + WWW: http://www.warped.com/~timmer/classact/ + + +Here is some of what is included with ClassAct: + + - The complete set of ClassAct BOOPSI classes. + + - Documentation how to use each class in C= AutoDoc format. + + - Examples programs in C and AmigaE for using each of the classes. + + - C, AmigaE, Cyclone Module II, includes that you will need for writing + programs that use ClassAct. Assember support available, ask for details. + We offer FREE copies of ClassAct to anyone who wishes to create the + support modules and includes for other compilers. Please email us for + more details. + + - classact.lib which includes SAS/C or DICE auto-open support for + ClassAct classes easing use. Source included. + + - SBGen which allows you to quickly generate SpeedBar gadget source + code and image data from a collection of 100+ pre-designed images. + + - Free bug fixes via ftp/email. + + - Free minor updates via ftp/email. + + - Technical support directly from the ClassAct Development Team + and via the ClassAct Mailing list. (See our FAQ for more info). + +We hope you enjoy the ClassAct demo. Be sure you experiment with the +included preferences program to configure various GUI styles. If you +have any questions or comments, suggestions or problems, please do not +hesitate to contact us. + +We want your comments and suggestions so we can improve ClassAct. If you +should find a bug, or shortcoming in the system, we encorage you to contact +us immediatly with as much related information as possible - an unreported +bug may never get fixed if it is not discovered and reported. + diff --git a/ClassActDemo.doc.info b/ClassActDemo.doc.info new file mode 100644 index 0000000000000000000000000000000000000000..547154beab69423f0b017271c4a52b00ed9c996a GIT binary patch literal 468 zcmaDXz`)1=0x}Fj3}y`C3@kuCBm1(X4Pa4pf{}%Red)0Z_DN?h0Hq{=m<6Fk?*W)? z#vsPP#K8LV1T#Vku8apNhDJ94`C6+O7(g@#K=`Xx!1%ww@~c*@g32>N`Aum2MQD7G zIuJmn>;M1%{|_q8fS^Ib|NsAC08{^eFkB4 + + +CONTENTS + + 1.1 What is ClassAct? + 1.2 What's the availability? + 1.3 Why is it better than the other GUI toolkits? + 1.4 Where can I get ClassAct? + 1.5 Is there a mailing list? + 1.6 What uses ClassAct? + + 2.1 What is in ClassAct? + 2.2 How about the developer support stuff? + 2.3 How does writing ClassAct applications differ from GadTools? + 2.4 From other toolkits? + + 3.1 Can I change the way ClassAct looks? + 3.2 Is there a preferences editor? + 3.3 Can ClassAct use background patterns? + + 4.1 What is this deferred refresh thing? + 4.2 How does it work? + 4.3 How do the gadgets interconnect? + 4.4 How does ClassAct support keyboard control? + +THE FAQ + + 1.1 What is ClassAct? + + ClassAct is a GUI toolkit for the Amiga, implemented as a set of + easy to use shared BOOPSI class libraries. + + ClassAct provides object-oriented building blocks for your + application in the form of Intuition BOOPSI classes available as + either shared run-time libraries. As they are standard classes, + they may be used with any application environment supporting + BOOPSI. However, ClassAct is a complete GUI system in its own right, + supporting everything from simple buttons to an advanced listview + class supporting multi-select, images, multi-column and more. + In addition, a complete GUI fast window and layout system class that + lets you create font-sensitive and resizable interfaces quickly + and easily. + + 1.2 What's the availability? + + Programs that use ClassAct can be made freely distributable, + shareware, commercial, etc. as there is no fee for users! When you + purchase ClassAct, users of your software get to use all the + functions/preferences of our classes. This not only makes ClassAct + a powerful and time-saving choice for software developers, but an + affordable and convenient one as well. + + ClassAct is a commercial toolkit with a developer kit available for + $69.95. This kit contains the latest ClassAct libraries, the C + headers, and the programmer documentation, plus many example programs + with source. The kit also includes a distribution license for the + class libraries, which means that they can be distributed free of + charge with the applications using them. For inclusion with software + to be bundled and/or distributed with the AmigaOS, a special license + is available. + + For freeware and shareware developers there is a special deal of the + toolkit for only $39.95. The package is exactly the same and entitles + the buyer to the same support, but the distribution license restricts + the use of the toolkit to non-commercial programs. That means public + domain, freeware, shareware and similar applications. + + 1.3 Why is it better than other GUI toolkits? + + Since ClassAct all classes are BOOPSI, they automatically support all + sorts of great features, such as window relativity (resizability), + 3.x gadgethelp, notification, and interconnections with other BOOPSI + classes (which do not necessarily have to be ClassAct classes). + ClassAct classes are totally standard BOOPSI objects, just like the + colorwheel and gradient sliders that come with release 3.x of the + Amiga's operating system. ClassAct classes are built for speed, + power and efficiency. Many systems are cumbersome or limited in + ability, and user preference, often the result of trying to build + on top of the limited GadTools system. Many people think BOOPSI and + get scared off, this is only because until now, there have not been + many BOOPSI objects to work with. Making a BOOPSI interface often + requiers writing your own gadget classes since AmigaOS does not + provide anything beyond the basic button, string and scroller. + + ClassAct provides all of the ground work, over 25 font adaptive + feature rich classes, letting you concentrate on your application, + and its GUI, not how to implement it or work around short comings + of lesser systems. + + All ClassAct classes are compatible with 2.04 (V37) thru 3.1 (V40) + releases of the Amiga operating system and take advantage of + performance increases available in release 3.x. + + 1.4 Where can I get ClassAct? + + ClassAct is availble NOW only from for just $39.95 USD for public + domain and sharware authors, and $69.95 USD for commercial + developers. It can be ordered directly from Finale Development, Inc: + + Finale Development, Inc. + P.O. Box 6905 + West Palm Beach, FL. 33405 + USA + + Phone: 1 203 235 7518 + Fax: 1 203 237 8459 + + E-Mail: caldi@ct1.nai.net + + Demos and maintenance updates are available via FTP from: + + FTP: ftp.warped.com + /pub/amiga/classact/ClassActDemo.lha + /pub/amiga/classact/Classes-##-XXX-##.lha + + Where ##-XXX-## prepresents the date of the update release, + for example: Classes-8-May-97.lha + + The ClassAct web site is at: + WWW: http://www.warped.com/~timmer/classact/ + + 1.5 Is there a mailing list? + + Yes. To subscribe, send a message to; + + majordomo@warped.com + + with the line, + + subscribe classact + + in the BODY of the message. For example, + + subscribe classact joe@bob.com + + This mailing list is the primary form of support for the toolkit. + All of the developers read it and answer questions. + + 1.6 What uses ClassAct? + + Several ClassAct applications are being developed. A few + have already been, or are very near release; + + Excelsior BBS - The lastest version of E! BBS now usess ClassAct. + + SysInspector - System Inspector, simular in purpose to Xoper + with a very attractive ClassAct GUI. + + EnPrint - Epson Stylus printer driver/control software + Available from Endicor Technologies. + + IW225 Pro - IW225 Professional TCP/IP Stack is now using + ClassAct for point & click GUI QuickPrefs + configuration as well as bundled with the + new DaFTP. Available from InterWorks. + + NewYork - An NNTP News Reader, styled after Voodoo. In + beta stages of development, and like Voodoo, + this is being written by one one of the ClassAct + co-authors. Email caldi@ct1.nai.net for more info. + + NewIcons 3.0 - Recently release version of NewIcons, uses + ClassAct for NI3 prefs. + + AmiFTP - AmiFTP, another popular GUI FTP client has been + re-implemented with ClassAct. More info at: + + http://www.lysator.liu.se/~lilja/AmiFTP.html + + DaFTP'96 - The popular DaFTP has been re-implemented + using ClassAct. + + Voodoo - A multithreaded mail reader with MIME support, + Rexx interface for OS 3.x, and included + in the Amiga Technologies Surfer bundle. + + http://www.niksula.cs.hut.fi/~oahvenla/voodoo/ + + Thor 2.5 - The popular THOR news/email offline/tcp reader + is being ported to ClassAct. Available Soon! + + Note, V2.5 beta/preview is available now for + registered users. + + Grapevine2 - A greatly enhanced version of the original GUI IRC + client is in the hands of a small group of + testers now - and a year later now, it still is. + + CompactPlayer - A SCSI-2 audio CD player implemented as an early + demo of using ClassAct is available with source + from: + + Aminet: /disk/cdrom/CompactPlayer.lha + + Asokoban3 - Amiga version xsokoban, a very impressive game. + + AmiLights - A puzzel game, playable on the Workbench screen, + from Doug Dyer - author of the popular AmiCheck. + + A list with links to respective software is also on the ClassAct + web page. And there is much more to come! + + + 2.1 What is in ClassAct? + + ClassAct is an expanding project. Currently over 30 different classes, + and the number is expanding all the time. ClassAct also has some tools + to aid in building user interfaces. And here is a list of classes; + + Gadget Classes: + * Button gadget class + - powerful button class with many of options including built-in + arrow glyphs, tab-cycle support, custom images and more. + + * CheckBox gadget class + - for checkbox gadgets, very much like GadTools CHECKBOX_KIND. + + * Chooser gadget class + - for pop-up and drop-down menus similar in purpose to GadTools + CYCLE_KIND. + + * Clicktab gadget class + - for file-folder tabs gadgets. May used in conjunction with + the Page gadget to "flip" the virtual pages. + + * Fuel Gauge gadget class + - for progress indication, several features including optional + tick marks, and orientation settings. + + * Integer gadget class + - an integer gadget with optional arrows. + + * Layout gadget class + - for laying out gadgets and images in a font-sensitive and + resizable hierarchical group fashion. + + * ListBrowser gadget class + - a listview supporting multiple columns, images, multi-select, + hierarchical lists, etc. + + * Page gadget class + - a virtual page class for hiding groups of gadgets from view. + + * Palette gadget class + - for color selection, like GadTools PALETTE_KIND. + + * RadioButton gadget class + - for radio button gadgets, like GadTools MX_KIND. + + * Scroller gadget class + - a proportional scrollbar with arrows, and slider mode. + + * SpeedBar gadget class + - for button tool bars (horizontal or vertical orientations) with + optional window title bar help messages. + + * String gadget class + - a simple string gadget with bevel frame, compatible with + strgclass. + + Image Classes: + * Bevel image class + - for drawing bevel grouping boxes + - supports all kinds of standard bevels, including titled grouping. + bevels, drop-box bevels, optional inner fill color and text, etc. + + * Draw List image class + - for designing custom colorized and scaled vector/areafill images. + + * Glyph image class + - for standard scalable system images + - includes many images: arrows, get file, get font, etc. + + * Label image class + - makes multi-line labels mixing text, colors, images, styles, etc. + + * Penmap image class + - for pen-remapped images. + + Other Support Classes: + * Window class + - deferred layout & gadget refresh support. + - automatic gadget keyboard control support with visual feedback. + - iconification. + - greatly simplified IDCMP processing. + + * ARexx class + - simplifies creation and handling of ARexx ports. + + + 2.2 How about the developer support stuff? + + Here is some of what is included with ClassAct: + + - The complete set of ClassAct BOOPSI classes. + - Autodocs in text and AmigaGuide format telling you how to use each + class. + - classact.lib (with source) which includes SAS/C and DICE autoopen + support for ClassAct classes, plus useful support routines. + - SBGen which allows you to quickly generate SpeedBar gadget source + code and image data. + - PMGen for creating penmap.image source data from pictures. + - Examples programs in C for using each of the classes. + - C includes that you will need for writing programs that use ClassAct. + - Technical support from Phantom Development. + + 2.3 How does writing ClassAct applications differ from GadTools? + + The first and foremost difference is that designing a GUI is much + easier. Even with GUI builders such as GadToolsBox, making a GadTools + GUI includes a lot of pixel-level tweaking to make it look right + for font sensitivity, notably with various locales, and prop fonts. + + With ClassAct the GUI is described as a layout hierarchy, and the + layout engine will take care of sizing and positioning gadgets. The + developer need not, and should not, try to place objects in absolute + positions. Resizability needs no extra work, because layout.gadget + will scale the hierarchy to fit any size. + + Second, of course, is that the GadTools counterparts of ClassAct + gadgets are much more restricted, if they in fact even exist at all. + + GadTools may be harder to use because many operations require that + the gadgets be destroyed and recreated in some instances, eg resize, + changing fonts/screens, etc. With ClassAct they don't even have to be + detached from the window before modifying - they are BOOPSI objects. + + 2.4 From other toolkits? + + Many available GUI toolkits are based on GadTools. While they make + creating a GUI easier, they can not fix some deficiencies of + GadTools. Because ClassAct is BOOPSI, these deficiencies often do + not exist. In addition, ClassAct provides many gadgets and abilities + absent from some other packages. + + In some ways, ClassAct resembles MUI. However, there are many big + differences. ClassAct can be used at many levels. The simplest + applications might only need a single gadget, such as the fuelgauge + progress indicator. ClassAct allows putting single gadgets such as + this into existing GadTools interfaces, because the gadgets are + as useful independantly as they are when part of the whole. The + gadgets send normal IDCMP messages back to the application, and do + not require special front end event handlers. Exec and Intuition + functions are enough to deal with ClassAct. On the other hand, the + whole GUI can be quickly created using ClassAct gadgets, the + ClassAct Window Class can even provide completely transparent + keyboard shortcuts with no additional effort by the programmer. + This is the prefered and recommended usage. + + + 3.1 Can I change the way ClassAct looks? + + ClassAct has a number of system-wide default settings. While we + accept that some GUI features have to be user configurable, the + common methods of providing this configurability have until now been + sub-optimal. We are working on giving application-level + configurability to ClassAct with a method that differs from the + usual approaches to the problem. Suggestions welcome! + + 3.2 Is there a preferences editor? + + Yes. An editor for setting global GUI preferences for things such as + bevel styles, default window backfill patterns, fallback font label + pen settings and built-in gadget imagery and so on is constantly + being worked on. The current version is available in the demo and + update archives and is provided free to all ClassAct users. + + 3.3 Can ClassAct use background patterns? + + The layout system accepts both a simple RectFill pattern and a + backfill hook for more complicated patterns (such as a background + picture). It is very simple to use a generic backfill hook with + ClassAct. Examples are provided on how to override the default hook. + + + 4.1 What is this deferred refresh thing? + + Normally, when a window requires refreshing, Intuition will + automatically refresh the "damaged" regions in the window's borders + and gadgets. However, with complex gadgets, this can take time, and + that time is taken by input.device. Unfortunately input.device is + responsible for other things too, such as moving the mouse pointer. + A refresh of a window filled with complex BOOPSI gadgets can make the + mouse pointer "freeze" for a second. Not only that, but since + input.device runs at a high priority, the whole machine appears to + stop for a fraction of a second while the refresh is taking place. + + This is even worse when the window is resized. Not only do the + gadgets have to be redrawn, but also their size has to be + recalculated. Resizing a window can stop input.device for even a + couple of seconds at worst. + + ClassAct's window and layout classes work together to eliminate this + problem. When using the deferred refresh feature of these classes, + input.device can continue while the relayout and refresh are done by + the application task. + + 4.2 How does it work? + + The concept is quite simple. When a layout gadget receives a command + to refresh itself and notices that it was dispatched by input.device, + it will check whether it had been instructed to defer refreshes. If + that is the case, it will, instead of refreshing itself, notify the + window class that it should restart the refresh in the application + context. Windowclass will then decide on the exact method of refresh + based on the refresh type (smart or simple, possibly nocare) and send + another refresh command to the layout gadget. Meanwhile, input.device + can do something else. + + 4.3 How do the gadgets interconnect? + + You can use the normal BOOPSI ICA_MAP and ICA_TARGET tags and the + ic and model classes built in the OS. All of the ClassAct classes + provide state information through the OM_NOTIFY method. In addition, + the layout.gadget automatically connects objects to their labels, + groups to each other, etc. + + 4.4 How does ClassAct support keyboard control? + + The ClassAct window class, together with the layout class, will make + keyboard control completely transparent to applications. As long as + the gadget label contains a shortcut character (normally the + character after a '_' character), the gadget will have a keyboard + shortcut. Gadgets provide visual feedback through two custom gadget + methods (documented in case you want to make your own custom gadget), + ie. a button will "depress" when you press the shortcut key, and + release when you release the key. The message you get afterwards is + identical to a normal mouse button triggered gadget event. Window + class can deal with several keys pressed down and other such special + case events. diff --git a/ClassActFAQ.doc.info b/ClassActFAQ.doc.info new file mode 100644 index 0000000000000000000000000000000000000000..25993321372ba4adbfb3e93d7cde190a991378ba GIT binary patch literal 468 zcmaDXz`)1=0x}F%3}y`C3@kuCBm1&|3t&-nf{}%Reaij@_DStCfKn1btb{|6OkK+quJ|Ns9mfT{mK7_NqbKmdXUNn8c;L3AmQz8VUlLHt@UKQtUf zgZQivK3G49{};-K$;0@uQ1viAh=!?$(IEFT0>#nX(*P2O050FsoRZA4%+zuap9KJU CVu`8% literal 0 HcmV?d00001 diff --git a/Classes.info b/Classes.info new file mode 100644 index 0000000000000000000000000000000000000000..162e997675b4dc617602fda9e16bd17fe0a41be8 GIT binary patch literal 628 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 CzR0!! literal 0 HcmV?d00001 diff --git a/Classes/gadgets/checkbox.gadget b/Classes/gadgets/checkbox.gadget new file mode 100644 index 0000000000000000000000000000000000000000..0579dec836b57ae848701d983f98b02dd3f638e3 GIT binary patch literal 6828 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 bITUWxw8=@9GQa_F%Cdv|{QvlK{^~yfw>j^T literal 0 HcmV?d00001 diff --git a/Classes/gadgets/clicktab.gadget b/Classes/gadgets/clicktab.gadget new file mode 100644 index 0000000000000000000000000000000000000000..4bac5612f5029a0922bd5a7d8176a21aebcfa124 GIT binary patch literal 10432 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 literal 0 HcmV?d00001 diff --git a/Classes/gadgets/fuelgauge.gadget b/Classes/gadgets/fuelgauge.gadget new file mode 100644 index 0000000000000000000000000000000000000000..77372ea3a80e1a21214f350d9462606b37c8b3db GIT binary patch literal 6640 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 literal 0 HcmV?d00001 diff --git a/Classes/gadgets/getfile.gadget b/Classes/gadgets/getfile.gadget new file mode 100644 index 0000000000000000000000000000000000000000..d8de6ba336eac9045394180db5196017a520f931 GIT binary patch literal 7208 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 literal 0 HcmV?d00001 diff --git a/Classes/gadgets/getfont.gadget b/Classes/gadgets/getfont.gadget new file mode 100644 index 0000000000000000000000000000000000000000..2176eb7c43eb28c197e703b00537228ab510c5e4 GIT binary patch literal 5116 zcmaJ_0c=yp8UCOB;yjGwJ}eVbnnl-#8;mi2o*M#%h&c}1UQFU-fo18&;5ns!Ng5J2 zBvpzc$866v|5LDHqQo5C?rL2uYvhU80 z320iP`|rE|?)`W7|Ns5>pNZ^WQ|`}}uO%Y+Jzxis{d11fGl_xt6gV=G>d!2j#|KuR ztUzhD9_>%{_VkCWnY z(?8JJ-`U$!;3Ri+7w|xTXLo1+lZAF}>pS%Jf&PAclGg;qdx)i6Npi1=M^iGNrv)5k znC#?c?!>@G-Y=s+rGz*yH->*@)!Z5gxXgScbp;c7q zlhJY%`W%S?qKBJccVD31*QoW97pwOZyO7-_F-Vg$89Vu{AITYcYUYxa*qE`_$QiQF zOj(=y=IwvV8UlxCpP(-Z`nsUQf}Rlc%r7%m)FhhV@>wS->@X>4pPOyhU89ri*WjFF z7@=WTtR=2m4s9QJhhooxzCJrPO=^HXWEt>&bDI|qkRQCAcW?sWblkxSg422jCj`#= z+Z@Oq2Pbj|=Y4S49h|e^xOE+CZA?xiN)PVOV!$sIfB;1u~`iRwTvMRQir>#0oN4ok28C|g;-3&++LVjf`=H?)4FZ!s)D zbU1Gvl4POp-wJw6&=HwiYZ9Zrwzj|#?q zN8!fnR31e1lkBzE$sZgG{tKS*7G$xF zY2Ick--#9tZY=+MYKn7K@$(}u>OiD*@OH~Hz{OOIFV6Bct%{N#IGe`-;G=mQ1U{6< zA>dc@I19W#kHf&b^EhG-=FxGpM`+-vnaXoU&CPjq+HA?AGp51Oq9~1<>+czD5LJa|ll< z-uF{*mBi0Li_f92Xx%NV2eF_FxakkyS}ML;4eXqmwlmUi`;CIF-W<6EZ0j!pACJAPQqVZX^Ay) zpKZEMmnz}6@UiI^{=_zbcRC(L>mNA#iq_(}n3`(*g4}Aw!YDaVK3uqkis41Bl~H6X zT>qCnU(f;+55|>6DpuA~P|%Q|fyi>=JU?tp(5%PUIT}`=pe5?KS}>N6t0md`xv?S z{-G~Vc!80{Sx}A90~wC11LQW|TYax_8mGZ!{PE-6*g3bd9rokawUZsQ@w!-8*-k~m zLy;~0U(Hm_of&KPh`iRxj74SiPJx;^&r8@$ z@ET;VM#krz=%r(hD7|Es7RE5a-%h3A``1RvyGt_3{z`7<3t3oBNjY}ez}usjXuY^I zHb9!()`agoy&9s8XQZ}!G0!J^y+G>hZsapOzS*0_xA9qdmD@=fBC|Se8(B_rDk%64 zL|CG$sfxn4`}$^}?-L`nmI9w}8CjMYa#n6+^DQ~P#~S6@vE9tcWPOT=y>cs`&-O`r z2K15=fJ9e{Z0GJ86&9mT=p}4}7EhAArmabjQrIHf8@?z!j7RrVESlcdCmFTDL6YIy zYkZkhsWB+o5JjrEPudT1OJSZg{LvqoqOr6Wc5_e|XF3v@l7iq>M6wI{Z7_~8XVWvW zdp%iCmV0>azGF2{%OpYir-&Ua7}a{j4Spt#vyCEm&+xh@(Ja-lFRDSpJRk&DG^OKBN zbHa429Ky@%gqSxM2kitM;3V-`JkO2QO@1?amvpa?US^fY50lp_#XTL?;#|{7`sNHW zP$#mV=v+P8T621o{ImXnDCXts$VtYkcY#xO7sq3{G*~EaozQK+v~}}5*ChHFdD-rq z%-|H?A&dVxi*|r2gW2E|*F17HUc2kA(l|2qd-MEz=3sRWE(P|}hrw*@AT+vV@4 zv6o`q$vr~q!%oUD_m)}D`no}^B{AEUCPL(Tk!Ol+O(}JjdtADTjDw4cB7sPe_}bVnaeWCDqt#%d>TMC&GRG(dAd*Z8gE zshzy}ZsX^q1jk|rgC8tuBp;jCn(d?KX?Z>Q!cxPPZQ{i!;l&8Q@D(&)y^bt7_BO^K z8#6OvzUs>QfRT^-c>mox&oefw9DZTrdJw)>f|WKy8(tR2h_lG#AV2XqRvSTVSNZ!1 zF{$i_ldy$2U$<^HTxk$%APrpgHg`R^rP;)Q?u0KX%xSgbOBd^!nKB#rd$WiHw}B~^ zfgY80P?;H-(-T2Yi1(P~4cG02v(-y3P^YgR(!A(Z5z`a{uU+-L?nf$!H!y#_VwE!Q z!AJumuZcM?{tp=wka3oe6muV&Gxss{yu-PA4Pp_&U%VVi_PW0rJ0V%j#{HkqM^uai}9Da;_9HK$E>?`EjEpgAoHDWpo;r|;jG||i8lZ>J=e)bm3`3?2 znPu2>dE-@NL0sl#@qd+^raHTpnroz>I2UzMJC%bzLf>N>3m%$S8l?*8p0NdT2AY*D z7xH=K;f#e>X3DW-1K#j5sLXJ?PFMQ~_lL%iO<8W7sM~T3EtkhYi_jl_4KYi#I6SVL zHRk4m-?GH;)L-GtxcTtw2)8#p1U6N1C#aC#+6+Fz@ISeAQ1GXo0db;iM%je27^M`& zgM#1B=zbIl%`u_{ze4>9%1IQw!WZ;mNDt9HH&M=`>?3k_p|lZ|OrxAYc@3osQ{dMy zKFz$NnED33TMw}p!GJ93Q`94<`MTaf4SDo3k@z|9S+tL!{R9gB>|ddL0f4pHzxpp* CUGpgb literal 0 HcmV?d00001 diff --git a/Classes/gadgets/getscreenmode.gadget b/Classes/gadgets/getscreenmode.gadget new file mode 100644 index 0000000000000000000000000000000000000000..70f58ab1a668c821699b14bd130e1c4aa60a2174 GIT binary patch literal 6144 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 literal 0 HcmV?d00001 diff --git a/Classes/gadgets/integer.gadget b/Classes/gadgets/integer.gadget new file mode 100644 index 0000000000000000000000000000000000000000..4886f969971b8772c1d0427bdaec3da5b9b036d3 GIT binary patch literal 10536 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 literal 0 HcmV?d00001 diff --git a/Classes/gadgets/layout.gadget b/Classes/gadgets/layout.gadget new file mode 100644 index 0000000000000000000000000000000000000000..95c12b5684262b710f26a35ffe3ddb3df99e924c GIT binary patch literal 22596 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 I$MV_#0be{kg8%>k literal 0 HcmV?d00001 diff --git a/Classes/gadgets/listbrowser.gadget b/Classes/gadgets/listbrowser.gadget new file mode 100644 index 0000000000000000000000000000000000000000..f0126d2267041d63235a337316657102a5afbd30 GIT binary patch literal 35892 zcmeIbeRN#al_$FIRjE{#g;FRLQRAg{t}lfsen91r2KSgfq9jA4RtJ6;UK@}ec%VQAXpB@~U@&Ef&=0ox(O z;P_St8jefHUBpHoD6|4i~P-}-dm^B)iv zArup7rT82p%KHt+Cp^uMMla$Gx$->8TNdDz79-q>(9*T#k^W76y+3&5p}xxa#?A4E z`l$&~5gDb`+*AkTdOL+TltsYyXCqD=?0by1^z=Wv zrGHCrPdet&{w-Zw`X5Vw-@N6Khhx1x{ppB@A9}2NV

vYvW@N^<@F<-WY%Ak>I9> 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�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 literal 0 HcmV?d00001 diff --git a/Classes/gadgets/radiobutton.gadget b/Classes/gadgets/radiobutton.gadget new file mode 100644 index 0000000000000000000000000000000000000000..203fac214999d5963723491f898b4843ea987a1c GIT binary patch literal 5856 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 WBmjR7pD%y}6lDtX{eS+I-Tpr_v$N6w literal 0 HcmV?d00001 diff --git a/Classes/gadgets/scroller.gadget b/Classes/gadgets/scroller.gadget new file mode 100644 index 0000000000000000000000000000000000000000..6dd9cb1117cf4de762364f091cd74bd019fbb854 GIT binary patch literal 9132 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 Dv!l24 literal 0 HcmV?d00001 diff --git a/Classes/gadgets/slider.gadget b/Classes/gadgets/slider.gadget new file mode 100644 index 0000000000000000000000000000000000000000..2ce7382d30b3c89cea6bd544b00d4834dd872e34 GIT binary patch literal 11940 zcmcgyeQ;D&mOtR7T~&N+MIP{(=TuTkguDPZ2E&TK>AV zMzlCYi%YabM2kzb+>DmLYE?yxTeR5Fvahv7w3Mmy>dxM2Ci{EzE70!9qm8d9qer1+S}UuD7EkE>u>LC@7|Sf>F;arZ0~zC z|Gcez_s+KNU48k6&elh__s(LV#4b|XT&+ZJCt__1Q)xtt<0xpCs3pn%Chk|jPuLOU zHfs#eO6NxL9P#W<93?&NbbQ9+xYf9z+WkrW9`b7&)Xmxh+WtG&krH^6b=#_I8+s^w z54nGqJ=sO2kTa;tb!Srwbb+~Qko07~#$(HpN2j)mnmb=}wUx-YKr8&o zzx`)u`JtY>1A9qf%?fRM($T+p>*sHyr$un#=xOVPhQHk6jY02aRsTaIf3)F0$q{%f z{!HLsmTe$?`Fhf|n_IFqWSB;_?rbM`)3p8j+q+uR+jobyZr`)LGbkR2tcCZ(&eq+# z!G#3b)h^O4N}#f04W*U%OQfscgH)chQ;S*LO>GSqLvl0O|I8$vFfQD`CX}GMb>N0b z@20wtK{cUuWcb&q3%y2~O7}FG=^6mJU*>=3D*j(^=0W`5WGE)4eSuNixV5ZB{2%21 za*aon9~Lb`DY`YHb&;aA(_(eK7j$3`AE}@e3AB?Enion^L|d<~e?Oc22l(5IJ<_K7 zV=s}bjg(IznG$juJE$ylGxsigO-*ol$MO10rs1fc>_*lYGsZ*Jv}T2$WaABP*F&@hJUYZ|*m3f-g-u&O zi!W8Vb|SnevIzJVeFJ=cYD_!S81sJn(_ud;n_|5bA=K=fV$e!t5A{)$!pq6Uw2i&A zsGLGJbq6V`q{(95hYj^hW7MenspZPf9aLehU9BFt_QI}Znl0q40&dv0LYD-l_2@gK zKawIj%+H$8+(gF69>@T<5|V-0!f4A;xGH8&sdR5kJeUhaU9-W4#8{O2P zCBRh!ua-q8H`OOSlU~@TO~pJJ^Ga8CP`MQiM@`ffQU)j}r7FUu=yjvT zUeH@c${+~#m3kv#ES=qFhKBTcOnFVpcDxfQzQggC;Pq$YBoA3XHv`^u0DCdvb)wUK``p@CiNC=D8JG=#gGC ze;5%m2Vez7VbUFT&dS1$eIDRf#o8}_`b9aW!_TVxaPjhTF+nez$gHkVIC z!DXrOMq{SYJU!IRIYm_a%bE2)^)Bz1@fU!ROCQ}aD5a>x*CUHe#}%%0(|s{2hqd1l zYf^nb+atWT%?k_GV71Ztj4K0)7VnaK7vEQfGzM|Gsb z5g*x+6PNRTe%#!JsLA-aH*yc69dyDy$1=NQRRULK=&88wyo#&OV;SewSn_xw_xsra zQg3dv4-(n~(1ewxJFw@5VYvyc(2MAm(OZ&}o@}s-dpRl1X4<(Kd8KqbMMa+poc7-K z1DSMX?~n2C?7bEL1L&IoCD(uxD=wPm$jv)Ogsn7cdNb%h&TU54Yoh+kdpjsb;hCIr zmLulI8)JUb8e+K|x;b-$Th$)#$yFM-c8C7dSvDZxz^)q0(_OS{Hk^%9DrJ!^#E%? zGxQAOf<1tX?GcpJVwTL}VwVTKVdyZ}y|JldR>G9u;ti3M$3D({bwzSxBb~m+g0a`r zudp7h$h)&te7PM{WIJqG?f+^qTO&BT++t)~^G$5Vni-AVTg5h$C+B#VrZ7-1D zxxN?3FS7nDFOZ-8_PjveIO7F!Lg>@|4ZI+?qhrmvvD#LpNSXq-*ejtC_c!u_97cG7 zTX+HE7f1u)QsyV`1MaWm1JarTA9&izurBie_YHUe_!1uA z{;oWLp0q61$*c9oW7b@2HO%TYXREKb`g8c$)?)Rq!k&H6$__c!z6x(oS6t7RgZ32J z-?es~_p{!Fj(ui8PP{}8J|)d&2FTc);aeih*{U3k_?C!wy>4U-$SrS9<@2v3~jz2KH_|92sbFeSI4Eww*_Ag?c6&+UB zYYFc<))%zLcQo^Uo4b?QR4?@Q0@DeQpyW&^)x;b+>Sc7UB1I43bdDGtqAO#t;Gx{% z7g?Lg5sDmx3iy&k^O!Ti^^1B8yf|UW4@2OSF5=vifCbd|vRVK( zM?g_+yB*TtW&wLj-Ot|^eAe>)6r#*3tUCqVmLs#9R2K#zyJG$X7jwu}%6OF@*sK*=YC!zjZjM^RRy zd;(<+$|01A)V^hFsW#Pze@|)`{wq>D@SjX=MQ>f|A?QiuWXlZlrIUUmr8J@ix(#sl z*)u(nIo9u?wog+LjE|-Q%UJ&pr*swCPcMd+ARA87m5{F3(p3IN$A#0N<-@p9oj&Qu zif^N-&l5Y5qq#sKasW1hSA>yIiQFRS#Exv8Pml@Yq*-v|6~`GFEd}>!XlX=_n!9~~ zZ3YJkZ7TN2H#w)XV!;66?0k{!@qQK-LC!`e)mw7b*vGjgnb0e=CH@a6Y?sNj3wrlG zV5S2Y|E$O=U5IcI>;!*DN=kwB3U;aR0CHV2m%=-t(LM1F=o0m%tjpWI26TxQ%$wEa zZq_AcCB&SEQHzP%*3>FUr=}y&C~ymX+Eb;XjkP?}R; z4(9xLtXpsluj(cPw-DmK$oC?jOg7b@F_Gz4T9~0pD>?3+I9?u$&O1CA5Ll+*}z?;31HWKco66nJx=Cah7~l=+nhACQIO-tCJ{9Ph#H<$NnyO(R39W2_x1ymAL7=Y-*%AQZ>WzVgea~Zw2aEO zm#7;Ae!jWhmbx7pb6pQf&} z@Ifm!+*0Glw=6`<_RxwVQ0Txqe?j!jKbiUce(sk|qUkA?;O>vKO6+KR zG@|vr6TrRX81QfZNS&8*s2f^o>VqDFyp;|0;(bRS-glJa&Bi^n1-aPM>2l;3uH%Re zZ7$SGP_rW@90MPAHHO)T@djnfeds3_{_Rxa;xk>Ko1~wzUt9X=WsS%9#(gzb@#gQZ zx(D}hG18lH=Dq*>6j)KDg-E}@hWzp8!%CTidu^F#k5z%fzJ~hcF}|6VR%3-kXDm3q zx<|pzwuM$5>%u*{9a=$@!G96>3^Y}JQq@>>e~f&4X&>Q^+6!xZ9!4IEge^qg#>XQe z^09A#kDyvCw4DVPL9xCjBZ^!_^Z5-F-e8S+r3=HShu?bx>!5PU0N$rP0L*$K(-x25 z2H@iiyw9ggr-t4ehn0PV+kiq&r;czxIKz_XcHEvk$7K)hrKg@*1<7Cies=@&7QhW; z(}<8q1t#3)hKqFEr8W)mtyhnjZONai5dHpekyp}jifS6}E$9W_cULRE;#a!~$D3(q z-Ps-N6@AJ6%~;bb75GILc?R7BZp5%ve9M6-gIF>`*05=&N{d&8#S9Vx^#Z%V8$!|VfggW>EY9v)5C`{ z=TUw#3>$m2BGo3W%)Eq+F;QnPq&Gxdznj}}(>;N^Mcnd~GHslLWUP_#QzqWy*z^#2 zjIkzjVhFbjZuFOHHX}QVdqp0PvE|12p&_)(z*NdMF~%Cr5Wm48OH!5)T$f@kegp|+ zDiuCcjyXz!oNSGp6>>9>V*@AF+P5O-!n~9$g%VwO9U1YCDKDcNGL{J$7lIp{0j?>b zyY8%daT6j6$I!pPdIO#7u7P0T8b|<=W2stTDnp&`>Anf3g_!HM<~CiGi}Sp;$^;J~+;YvXun2n- z)-2Y{WwsAPGe6~6%bHoa!f%LpS%de=Veh(bvL`g_tYGD0c6joU9(jHz6>m6?}jj@9-QEj7nFk{6UyjA751Ydet@!5?gWG!O5UX8=X zwa^N%kDAQc1UPII+`ZmKHC;6IG&KEO-VVxD>@awx9U!$5=JlLq$yY!J(PD9uuEE>l zZ1XUzlW8)+jZd{fTe_t!*ay3mWt~P7T;Zsh`+|YrF1f?@NKtMN)0rb{WVF~AXL^Vh zIa(7!l0tgTUqLNetR+BE&|}Mh_i^MBpuxP0GklKo>vKH^&owwU#%J|C7k}edaLU#y z1_cKHfliHdw@#_Rq+Jmu^7$&GP0 zYcb11V1>23QgZr#4jTSW{J>h1GuHj?z2MvNfjpM)$OH2DXY@aUZ=){qK2vuI`Kof< z>_S$GXyW3mOqG)TA!pqsY!{AJBD?-bvVSSQpdrG)1Ch!{E(gBq!&e-4lk%?}7=};& z#FHIQGM`=pSB{;b*UZGlc_qUR|G_8twYvmpvR4`c08#_ zK~DrdLGDRa)LpWHgHSiQ@bA>uVO|+}-5M|(k7B^bihni%o{;jbOm<2V?$Cw^b!h~8D*O-Y6 zN>@z=dQ@vN$$pfc8k1`UJ@y)WO%{@ks;GnvS2JQpl@X5;?ojNHjfG_+79~-}BeK2( zBW-)!t}2PPq5t2WdZ5}>6JrO47)Mj}$qdd5HlzB&t43_B%DaTA@V9wk{{BHS;zsp}u{X2Xu~XHI z<>U~)RC4hd8rr3_ij$5KH&Y%jy*XyYPXOZa(?dp8cFc&yV<(3(8s8?e)@&E?hl?%# z`S#(PjWVd^3}BRK$#KA8DD7Ua9kUJEEe`@;ZyHM)2YAdc_W{s{O0=a3-)#w^o_ zyujmq63~Nn`e(q0fM)?)05KvRZMq4l0pKgtyG{c@_pTjK`2^r)0Pt&JKq=^hj|z-g zwin<5UX1a=JWEk7Jp_mX59HA?M~57Dy#oNB+7Un}01N-l*MS4=OMVHyQD21qMXT`b z8s?OPr`s9e&Ix-c=u-{?FxU1hk(?rY z7z}6t7=YUW;Dt&7c0esa!nn_%Yw)$y1>HUiz3zoB&jB{U?!b4)9)JqnqO8!NQw6C0 z3-B`FIlxB9h&B&&?l}S({}F(>x7L6hXf8Yj2td~-0Bw*RI2U02yeR-=aMcmr{2xR& zjQ~L7Ch&g~c)kg99s2>Wn8LcBmgeR{RQAP$n+NA6##I{ z7+(Q-q|YJmyC{K&cns?R{K{^WPoe}p0uR!gC_4c7*)YfUDJpBlW5M5o1=d4hSyKba z&^}W(H(SqKUJ06JwH228_cu55^Gtc7R}H0rrdb=qtb=kCg%fDo+H;EmHZ zF>Wli$jWVip6<|bSD;9IK>c(&?!z@#@d5P%LT-Qx5JI6)h!CP*kP1E2NImH!(zM|> z<0P$4x6+$=^WK~HZ{ECFqR@Y+`KfEOLZt2h&WJ)k2)wddsJSamO3U{_=P!g{2cQeE z?`WlX@M+60j`>edlU(rZebx@X?Y^wF!+PNU&ekv$o`IwVcnBcA(bZKtP4CioN{_N@ zb=A2-FQju@KNYMlhtj+26rx1`GVLp-wl+Xyzz2$3B(4J=E=DA7@Ycc0_fnx&NfzdA zF7l_`z*h?kMWSy6y#kJ3Emp?M2aj5Z%cIp|^*EI$r)%Zu^3>!8r8ZqYT%JC@u_kwt zc*!V|*6!v?OlbKXDEb_{ittFGc0lkM_<7wDw5E*M<*!MJJ#rm&=P2oi^=m>-P@OAW zOBa&cDQyn%$IRcFf4p~qSmwBhy_htID%8E5qOUd*Hw`y^9@Uq7cA@*{Ml7*Tn zWR1eytx<{T8yG8GyERI5dW8(#2Ow29$v#^Gs@m2YLmXhpVfs_&J9X` z<1K@i$AfR-1+p*e;^5)p(WAnzoO9(@d(s28OWA>+M8wG{%JREYj!()v@L&&sl#j)z zw##u5K9Q1V0fd)*3O)BQ)=ctPkKn1-gM?LBSI`D~jr zzpKr8uQv@H?=L=o;DudjGM)DxOjC#R!Pn0pIKdTDO|sM`^9boOE37cL@+FV?qs|nK z+kGb#Z?khuVK%|~E1*qFT3FIzpv}N89}-^KG~SbN&R-1r&YL!kWjmbtFJ{3>^vy2> z*@QEHD(IWPINROfG)~U$%+Zz#*<^1g=!Uiy8DF=EVum~lInAu(QB#2Er3T+lh95@e zG=SyxcBd&?RnG1`sNv+}o`xI9C=P0Djh67@psAGbjNNrkgw-$qO9`P}z1r07R&`d= zW*8`ol76vCztpG`GRb^{;{^0=I7!3L+O4R_UcMhux9@~cWMGVmJ7NWQ#9^ZcP^cs# zF>-a)(xClW?lv`l2F*$2+IA@8j>AF(Ixw;@Yo>@xH-k@s@G8u zdt01iqzKRRZ^{#po~!>9p2M>4{=t87Jp$$2?Tq=lo|gWab}Qd+x`@{JpB#jXq>inh zrBWYSqTc5I%nI&sl)Ilbr01zjLsIVQ?xUbFK}MB&D04oua)M53{ohkO^O3|u=nIC^ z5YpfY|#z0JZ|)2($c)lxDibDC=Ul7CC5s(o>c;fQuocF>3(%(8O>GyT%@7qrXV>M_HtVHk^f&VI&Sr5hb*}pvd5_TJZeA4K z#c!`DsPoOjN6g5K;>rx~hr}n)`NXK&IHg|x@U@TAg{Fu7%QxbcWR>8@4=%M3>3G$&!vAW_73fr5Y2-HEGh67HNkK+aDxr5UKjwLu=``}Ut z9@tZ4U<@Y*urCg76!%hh@NVgk*xN`KubGGh{eTG$Bppazl{OdukB$ZC_(Vub+i%}t z`)zRE5>&enw}?=;ae*nJ{;!;8p;=lJ^(O2IiO`Q25WM(w7eg5E8-N4Y0!RR201XfU xi2tDxqLy)h3331(y`TYCUIG7g%x_@+Gv>cz245**M*hVYx(@g^5b-~C{byFXKk@(o literal 0 HcmV?d00001 diff --git a/Classes/gadgets/speedbar.gadget b/Classes/gadgets/speedbar.gadget new file mode 100644 index 0000000000000000000000000000000000000000..0514f61c64728d657d0670bfe057513485b2b103 GIT binary patch literal 14764 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 G5B@JNW3Ze6 literal 0 HcmV?d00001 diff --git a/Classes/gadgets/string.gadget b/Classes/gadgets/string.gadget new file mode 100644 index 0000000000000000000000000000000000000000..ad93200197dad2e0ce7549e235ae99e0f5141dfa GIT binary patch literal 4220 zcmc&%Z){uD6+h2@abMgQ&k9}^Ri(R_SCcxfpBqA9ZNy$36rP>Lfi&ve4mHoA^-DsU znEct&s>)oTWuT1}D2NY;5Bo4SIx2=LG@)rS-NdqqOq&hy#R_#6gXU5SIvTJ z05O0$HaR@S=)#_r3H43Ad`L%F@XN3X~a?8(`?$MnA4 z-`hPDcNUZ$CXo+yW6Y7-pEmO9R^Yrp)0AW6rGN-zCYYL+A@i6LXIfrn8UET{lB%qO z>0_kXe&u79W2*Uq@I^D)dWwcS#rE*s;UC_RB008~J)6_Qodrs)r{I&NnLSjSIaZDf zPsbTchHvn#h?AC?2(xT`=GbDNg9R&?TEUbGCTBig?0as3R77y2u9MJH6pETS`$w9Q z?Gk>Q=yW9Q>?+jSlL1XTg(3K>m96Ko3tNG6ULF`=I%OcVjda9-$caX+R7HP_0^|^X<|U=_b`%BpnmAu_(!MvFN30 zo1|UeEn@5$tvh@G^VC*eZTk*JT5#~&wdmUGImxV9_M|3KFr3gzu{)5Fx>IH-b)-+_Zd0I3$zUt#dl9cb(tD$in$x{+4!viq%7HD4qOmna*U{wz0 zNI01H@#)t2%iG)&XdD}^o|x#36s@q>Q(pKL>Ly>W4Um%j1^l!%N7bspu5-m3(!6f$ zr!a-Z3gli1c^}M7Z0|yjCn6&hbTjYG68tBtoMjDKDzAp`BPIL-!ADj?Eh0PQd;n2a zTF+5mK@yKxs~p*C?r>H>baP&-l>LcC$`cOO#hr2yAPOK*tSqsQ-+Poi^S;)#mZ?|bA4buqI?18w1 zb=D3wMXCP%EhkFQFU>rRZ$nlK^wggETU%gn)N8)}&cSC7?xRf}$k&=D z-eMdrf`Z5zNvG|Hba^RXe#cddXjPp$*z=(7aq~n+uLVsK-CxMoSV2PU_h(^?+jqY0 zSmQ?GB)Uy{knXYNBu2!lC5!#+{k1{=t|9dvXwoYX_tvE&!d8e;9^{6!EEtwkS9 z=>9O|v=M6725AlFp;pRaX#PQbe{p6ueOY}Z^7-1jP6^D6GIk;Aw(+%7U#M2u!5 zxOt)RIN!1QN_{>0#Ux3(9~HI_Jt`#HA@v3{KC!Iv^G~oUF0U@NS))_3HLCDSx5k#I z$jVQZt-fXc{BNx8W&F~6R$B!Z)~02A;kQ)*_hSj~M;Kr{{{o+4@B?}P9e`DUIzTPJ2e=7<|LrPh0YJ?xaD20J7;qO+_3Kde zOIKahTX63_KsO)&C(Hxh0YFCH0k{o&{|EpXZ$AM4*FFCLyb3r1K)j?2*slaQ4tx>w j&q3$2K8u;pbQtq$%nyM-jTz_QpBHEHeh37q;r;Z#8JQ;i literal 0 HcmV?d00001 diff --git a/Classes/gadgets/textfield.gadget b/Classes/gadgets/textfield.gadget new file mode 100644 index 0000000000000000000000000000000000000000..894402d21d202177a49eaad88354259f6a3dd08d GIT binary patch literal 20392 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 literal 0 HcmV?d00001 diff --git a/Classes/images/bevel.image b/Classes/images/bevel.image new file mode 100644 index 0000000000000000000000000000000000000000..64b387030302ac151d341b7260d58456d2159ec3 GIT binary patch literal 11048 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 QN@cVt#&a`9BlhgL&5d!K5RGtIm5lDy^ zk_r$*FBL=8s%fm#x*}Dm>OVzPWmPp*RW((1RaJ~lQ`*9cx~}X)C8MlRbrtGDiub$M z!Sl9Go2_&1`MT%cd+xdC-bdvB8`XZkxmF?a{{VCo+AD%CRSOfjSx8hOeb~Eao-kYv zXai&ihQ>#VrTEZD(cMKghNV`=zs4e~6YVx|A>}(WT^G zNVXRjN{PW14-)MR*0PW- zEKF<^dKLONw78JfY(y`2&Pw!=ypcOYrW@3*2|FR>(<~4zn5!rn>S0?$8$yrW)lF*b zpomz}4E2;Kv5Jfzm#0Q(ap6og&V2bxj*2y-FN>2|m7N}9_1FN7+VtVcFE6k&l5*$XP&d#C~tKfg*$$L6syA{qgtnK)~O4y<5GLR zE_=u7C=Klxm(mrG`XseWuESuxnE6!ib;`Ecq`KrgpPuoDJFgQDT@?QwP$eaXObqxk zCu3zcLaNXfDVW8clJDuBk4du%6tRMt=lCdXliq*HM@SdcBA;cEEoJXQ#w2wZRI8-E zEBw`FVv3o(hMC075z<(YZHM=Dn#lJJpi;RPNFO9$EcY|o1l}z9*eGp!F+%eoZDBd- zMIA$oXKf8f2sR`vj?lUY>5UNtE#h}`uKh3ZVN3okLNUvxNZ58sIhCGKZXgOBwHOI% zObN*tvGth~p^A_cXJAuQjk5pS!F? zMueJ@O}v76Fs6hoVi+S5CD!y!o5EP@n#R@BXQFoq(!@RFOB%12+tOsj4v>nz9i)&S z@m`Bv*IlBsnNezYh)yM%#)y}d3cI5`>8ghm-9AJ~i`sdGHN}(z^x-j#WjZ^>Xi1#6 zguyGA#o$|ShIeDvFk({Wm3PZR19>5eJosJt5INENuac7f7>ganDO(s@Z?rr>;asRE z%AKIVY`tNGbA9(uE_!v8!Xs0C+4>j}^6|<`UUZaVBggtM)3umUiIPpiLPSMqN2n@# zL~6T+wVlhnKuZD5kZwyvNDZx`R$hL|8&y}QNrfZ;39Cy2$S}<{fLq-lFmu%s)?cFh zrQuIL!1*jpAQ!*%Ckye8;o|=NIG@wh&cwOb^xd?QnxlnXsUMyF$+^y%>U(l-TB&c0 zP!%5v+sKc_=^6F)o~zjRvze2blPi13Y+FyJZvXUGq4`_NS>hfqV+OJwDS?{jBUJaj zoUIb^WOmIr{I;*7T$ih1|n0$t8*9 zyu!)Rkaxeud8>25zN zp&Duv@jX7d$Jgim$vf{s76AV|v6>_tu;v{uMHJXAjkXbc|JZLm)`tDri##2gs{^XJ zmvDx^IGVqtlJnsI={IoL`CoqF^I5i{q#%}u`+Ex$sJJ@zs-+eMtDB5>$}&2w7Un|D z4$+J3PRvzRz3(Z-7IOarvZ6^er zby|TFP783eV*oF8g1~DW6}TgPotkA9Ab!;;kzIpST_;w&n~=Y{xY5YONgE~I?8ds0 z{TIp%Cqwl-A1y-#8dE*B`on40!M^VSJOUtkRN^Nken#Tc68~J{*CakG@sz|DCH{lN zf06hTi9Z)uL2#579FplYO?7$LI-Slh9mju++ex zZQxtMztX@n@TVGh9sE-byb1oX20rE-Xy9yTPXm{Awl#1Gr_jJPJ9Y!N)JZmQYaFwI z>u~CE$Q*ZqtS5iTM0EV9JA$g6Sz27n(09t=Zk!g?)#uJS-WAnzkmznR&Y}vrUQHK-h}$IEhmsssuHMN6ElDM3de%?3%jK8#LCxmA*n@@vtof`blq-^QuD>@_e#+nWzdecx@}Y{tplyO)|t1#S^5soBkhooJ&R{+0ul-PYfVIlM&vG=eA7VVBoVN$xPgyTFiB``} zVz*d!vM_;mY1R`|gC>y0eQEi4I;CKjL)_+Ro=G9EC~&lr@NqjuvdtuY<_cK)A2IZ_ zLOY@VH zs2qP(_}JJvH91B}KkuA=h1->Mc!d~6yety9YQhT7@Xj|XZr2%EzunXnB4%R0O;Fv z5l{vo%KllvF#vSFYXD4JISYUArM!*yG}`ykK85x&TG%R2qebw=&;KdlDhQ;Q|I>c} DASAKl literal 0 HcmV?d00001 diff --git a/Classes/images/drawlist.image b/Classes/images/drawlist.image new file mode 100644 index 0000000000000000000000000000000000000000..49c8caf33c8f2bd57aac3f3f9f42e435b7b404e4 GIT binary patch literal 3676 zcmc&%eP|o!8ULMhRxXO130D{sjCZ?fo~p=_A{>*Yfyz#3&YCQHw&$f;mz`7FXD70K z^T*}{lby51m@N!%WKhZoW$drex?zm4Kf-XD62i!a7qUbxA%XqTkZr}V!9G0O+V4Hd zvYfPm?T=34x%Zxr_xXCC_kEuO+ilI8XbvdhmMc+j-7%z)@uz8y*geZU~*z8J2Y{s zM7X#r$@(LyI*PC!YlUAMg+DR{IkT{qt52rv0bM6WKb^NZ*2XG(;fk~`!+&rY0d-qR zN-Ii@l%zaQN~t^24+rfBw3nIGA7Q7agp-9xcQ+%rJA?DhA0bq+bIF5$16D)k(t^ldBocuqTj3b=@MbMBletCdEzHjE1e zJL|{!KA%}wKW-uYP-I_!NeWoYBJw-8#d11Fr!w#T#VbXVaj4|iZGxF z{bnt*(GzhzU294uO-~D{hDZ5Gc%d|ir>O`Jz;!I?a_mjn!rq?Em>Lk&+6vb4GPTc{ zwZ(khVlL*GsSLHx6=^p}dtKy5^@S4UC9x~VP3`uFt1G&6p26>sT}UTg~M!BONa#Gi-yhegi1A2|tG z8-bs7d5EKrWAfmNXR&P=w<7OH-fv#ugg99{qaP_hN_9NKK*0waB}X>z4bMcE87xuh@Ma3kEzL8m+6_ zn03aT_X~{mv9Nwg^vV85&@DysT7+rTPi327)o~>0#>OK<{cj$W`wcONl zd^^Usw3gfa({K4YHL6lGW96PaQ1D|tBJh|FYwt89)DTOPyH9Yfz9pOfeJE&@n3!S| z72S~-8ly2p!ZF0-&*_Wbuunp|=(BmiY|lcvu#}9y08i%MJoP$wUQJ0ZX}0i(pK-bN zCQ&mcU2e`Qdz(>XKwcLaZe$KmxH?<@*mAjL#7|7#z(yh8FG}8d@g!WBRhDV%+-Ilp z8Jy+(U(>&v^e;<_gc(xaQr=+&pX18Yp0+I*hFpktt$PfYoBJVuUp)c;@86>YEol|O zDzTr7ypb|qadv^5!2OvrUfH|^Zoh+&SVPsrwUtx03Avu0B%a}e=i_w=|J;8n zWjg-JIBTgrIql@|@*tD}NNEGOxW#u?%GUfRP|pgwJHz@3eK1=lD{HK%jg??V&pG)N zyWd|X<)M_Labryi+R7x9Pt@b>oQ;Q3qc2{y`;k9tz;)J{UG9ZzL;q&QBoK8!*t+st zJ>6J)-d@l4^=`SAC;i;eA|l@E=_>{#agK$auI6Xeq?6%ti%;c_`?zsSWKa0S?1b*l z6zZD0gz>Haj=rS-dtWy9$Am;JSEz-j;{PWiu3sa3LlPO>D^+hv>81g{bJ;tBHnhR+#gL$1FB znP+=|JCPkjekmxr#~V)M=xBF(f%_FjqyfZJE~FAtZH6CZQElg zk((_SBftH88+*c5^r+j@5Bu09yi5YgCHZ82b(b4|E zHg=Zy`-OhdEA6w7FhiMdIVXF~@UG2HK+8F?)D$?`4@)P$i?{U=q_7`-=z)%XIF4?- z#5T-8Co8cL$9SW+Ac0qqVNJ$2btZCExy)oaUXE?$@q5G@9EGBK&Ewn)KJ`R?)kw#@ z>E#MI)U>LYIyruIko`fTjFTWIDmX@Mdf5%g+#5bVy}?#$3y>?mHWd97P&pe5LCH*7 z2=a@E*^~u`k~$@MyV7RvV{|N0hv<$J$M%&n+gHf>g`ma`uoA$pl7M)V+z0RJr>WVo t#xE3~uqPzkf8k??c%wI``RFEy@3b?7ETMytChQ_q6RHRv0)Otm{s%4z<@x{s literal 0 HcmV?d00001 diff --git a/Classes/images/glyph.image b/Classes/images/glyph.image new file mode 100644 index 0000000000000000000000000000000000000000..f979d4d049796e47084cd3ca14950745cac4de57 GIT binary patch literal 6356 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 literal 0 HcmV?d00001 diff --git a/Classes/images/label.image b/Classes/images/label.image new file mode 100644 index 0000000000000000000000000000000000000000..b803a31cacc031c44d17f0f978cc7b9cef66120e GIT binary patch literal 7016 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 tbcTez!te3_DE^d@DRp0wnJ$S12Qp^AqHz4 zhdMc4DmyfBI@yd%oeWJqSxye8rHqHT3@6KUI*cF;C6r}cnqg>$CMlaq2t$)hHYcUj zSo{0#dry)LB%R&Pp0npH$<@1mzWd#KzkBa@zwf)>dnU5{PtyNcjHgUAt2|6JlSsOo z$nqYiQ`v?`V&i~Nh}N%8`)*?3*$8(a)O~g1mbT8XRy^3z`tZY~C)CPNMOBsRy{qD$ ziZ6X}!HiJ>J_BAM5-LAqe!)hl#0}kky<5EZlr#WlqOPs zq<(?aLXiq0HG-61q`XL-LTa{1RU&l;DF>&Nqw0+MH|J2pBPn;ozN=@|b+L3(ZWwDN zDZ%+Elq9=aQ|%ice7K@xf)dM1F&|V*VadFy|+I+;UCq*<@*;hQ3Tn z;7+o&(z@3gSE?&~jq!ITK_9~i(0g9}-JPk{$0~SUiSBJ!wXpe75Pw5roxXL5YU?A- z&5_!cI~$wsUD8bS@S_iJ)Hm1qN4mQ^w(Q^QL=USx%Y2%9Gdb1bq*rYU zXyj0B$=R+=^uUM}VZw8=j2UKe+&Ma|)aJ+K1pEC;4%<8q3CCCyk~7$=AJ?&2!HR6&eIT`p!) z{b|Onshg-5eX5M@rQsw=4u_Yjw6vC)>7{C|Pdhx;=Og5O(a8Ifp64Z-k1SF+S*#Y_ z6P7#(KIF(E$BL8}!H-sak|#8cv2;<$CwVIs?a1l=ZmRT2zN%^3E3ZAim8yJ_KM

    y8bFfd!_Di&^H+Up4OAi25Qm@NdXI<7P19o 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 literal 0 HcmV?d00001 diff --git a/Demo.info b/Demo.info new file mode 100644 index 0000000000000000000000000000000000000000..165e3b1505ed6bc821d2dc4a5068116d819ebf0f GIT binary patch literal 628 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "stdio.h" +#include "strings.h" + + +/* Some useful #defines. + */ +#define D(x) +#define MAX(a, b) ((a > b) ? a : b) +#define MIN(a, b) ((a > b) ? b : a) +#define RED(x) ((x >> 8) & 0xf) +#define BLUE(x) ((x >> 4) & 0xf) +#define GREEN(x) (x & 0xf) + +/* Gadget IDs + */ +#define GAD_BACK 1 +#define GAD_FORWARD 2 +#define GAD_QUIT 3 +#define GAD_GETFILE 4 +#define GAD_GETFONT 5 +#define GAD_GETSCREEN 6 + +#define NUM_PAGES 7 + + +extern struct GfxBase *GfxBase; + +/* External variables, from Images.c + */ +extern struct Image picture_image, classact_image; +extern struct Image sb_images[]; +extern struct Image hide_image, show_image, leaf_image; + +/* Global variables. + */ +struct Screen *screen = NULL; +struct Gadget *layout, *layout1, *page, *layout2; +struct Gadget *fuelgauge_gad, *scroller_gad, *palette_gad, *lb_gad; +struct Gadget *getfile_gad, *getfont_gad, *getscreen_gad, *fontpreview_gad; +struct Gadget *back_gad, *forward_gad; +struct Image *limage; +struct List *radio_list, *chooser_list1, *chooser_list2, *chooser_list3, *tab_list; +struct List speedbar_list, lb_list1, lb_list2; + + +/* Some static string data used to initialize some gadgets. + */ + +/* Integer to FuelGauge mapping. + */ +struct TagItem integer_map[] = +{ + { INTEGER_Number, FUELGAUGE_Level }, + { TAG_END, NULL } +}; + +/* GetFont to Button mapping. + */ +struct TagItem getfont_map[] = +{ + { GETFONT_TextAttr, GA_TextAttr }, + { GETFONT_FrontPen, BUTTON_TextPen }, + { GETFONT_BackPen, BUTTON_BackgroundPen }, + { GETFONT_SoftStyle, BUTTON_SoftStyle }, + { TAG_DONE, TAG_DONE } +}; + +/* SpeedBar help strings. Also used in a ListBrowser. + */ +UBYTE *sbhelp_strs[] = +{ + "Erase block and copy it to the clipboard", + "Copy block to the clipboard", + "Paste from clipboard to your project", + "Erase block", + "Mail someone", + "Insert current time", + "Insert current date", + "Disk", + "Spray Paint", + "Print project", + NULL +}; + +/* ListBrowser column info. + */ +struct ColumnInfo ci1[] = +{ + { 20, NULL, 0 }, + { 80, NULL, 0 }, + { -1, (STRPTR)~0, -1 } +}; + +struct ColumnInfo ci2[] = +{ + { 100, "Column Header", 0 }, + { -1, (STRPTR)~0, -1 } +}; + +/* Some fonts that we'll be using. + */ +struct TextAttr helvetica15bu = { (STRPTR)"helvetica.font", 15, FSF_UNDERLINED | FSF_BOLD, FPF_DISKFONT }; +struct TextAttr garnet16 = { (STRPTR)"garnet.font", 16, 0, FPF_DISKFONT }; + + +/* Function prototypes. + */ +VOID set_mapping(struct Screen *, struct DrawInfo *, UWORD []); +LONG easy_req(struct Window *, char *, char *, char *, ...); +BOOL make_lb_list(struct List *, struct Image *, UBYTE **); +VOID make_fancy_list(struct Gadget *); +ULONG __asm __saveds lb_hook(register __a0 struct Hook *hook, register __a2 struct Node *node, + register __a1 struct LBDrawMsg *msg); +BOOL make_speedbar_list(struct List *, struct Image *, UBYTE **); +VOID free_speedbar_list(struct List *); + + +/* This is the start of our program. + */ +main() +{ + if (!ButtonBase) return(20); + + /* We'll just open up on the default public screen, so we need to get + * a lock on it. + */ + if (screen = LockPubScreen(NULL)) + { + struct DrawInfo *drinfo = GetScreenDrawInfo(screen); + struct Image *l; + UWORD mapping[8]; + + /* Setup the pen mappings to use for our images. + */ + set_mapping(screen, drinfo, mapping); + + /* Create a bunch of label lists that our various gadgets will + * use. + */ + make_speedbar_list(&speedbar_list, sb_images, sbhelp_strs); + make_lb_list(&lb_list1, sb_images, sbhelp_strs); + NewList(&lb_list2); + + if (layout = LayoutObject, + GA_DrawInfo, drinfo, + LAYOUT_DeferLayout, TRUE, /* Layout refreshes done on + * task's context (by the + * window class) */ + LAYOUT_SpaceOuter, TRUE, + LAYOUT_BottomSpacing, 4, + LAYOUT_HorizAlignment, LALIGN_RIGHT, + LAYOUT_Orientation, LAYOUT_ORIENT_VERT, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_BevelStyle, BVS_BUTTON, + LAYOUT_BevelState, IDS_SELECTED, + LAYOUT_VertAlignment, LALIGN_CENTRE, + LAYOUT_HorizAlignment, LALIGN_CENTRE, + LAYOUT_SpaceOuter, TRUE, + CLASSACT_BackFill, LAYERS_BACKFILL, + + /* "ClassAct Man", always visible. This is a + * simple Label class image with a mapping. + */ + LAYOUT_AddImage, l = LabelObject, + LABEL_Justification, LABEL_CENTRE, + LABEL_Mapping, mapping, + LABEL_Image, &picture_image, + LabelEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LayoutEnd, + CHILD_WeightedWidth, 0, + + LAYOUT_AddChild, layout1 = LayoutObject, + LAYOUT_LeftSpacing, 4, + LAYOUT_RightSpacing, 4, + LAYOUT_TopSpacing, 2, + LAYOUT_BottomSpacing, 2, + LAYOUT_BevelStyle, BVS_GROUP, + + /* All the cool stuff in this demo appears + * on different pages that we can flip + * through via some buttons at the bottom + * of the window. + */ + LAYOUT_AddChild, page = PageObject, + /* The first page, showing our nifty + * logo. This is a single label image, + * notice how you can seemlessly mix + * text and images, and also do pen + * re-mapping. + */ + PAGE_Add, LayoutObject, + LAYOUT_HorizAlignment, LALIGN_CENTRE, + LAYOUT_VertAlignment, LALIGN_CENTRE, + + LAYOUT_AddImage, l = LabelObject, + LABEL_DrawInfo, drinfo, + IA_Font, &helvetica15bu, + LABEL_Justification, LABEL_CENTRE, + LABEL_Text, "Welcome to the ClassAct Demo\n", + LABEL_Mapping, mapping, + LABEL_Image, &classact_image, + LabelEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LayoutEnd, + + /* A credits page, made up of a single + * label image. + */ + PAGE_Add, LayoutObject, + LAYOUT_VertAlignment, LALIGN_CENTRE, + LAYOUT_HorizAlignment, LALIGN_CENTRE, + + LAYOUT_AddImage, l = LabelObject, + LABEL_DrawInfo, drinfo, + IA_Font, &helvetica15bu, + LABEL_Justification, LABEL_CENTRE, + LABEL_Text, "Welcome to the ClassAct Demo\n", + IA_Font, screen->Font, + LABEL_Text, "\nPeople responsible for ClassAct:\n", + LABEL_Text, "Christopher Aldi\n", + LABEL_Text, "Timothy Aston\n", + LABEL_Text, "Osma Ahvenlampi\n\n", + LABEL_Text, "This demo written by Timothy Aston", + LabelEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LayoutEnd, + + /* The Button gadget class is so + * versatile, might as well dedicate + * an entire page to it. + */ + PAGE_Add, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_VERT, + LAYOUT_VertAlignment, LALIGN_CENTRE, + LAYOUT_HorizAlignment, LALIGN_CENTRE, + + LAYOUT_AddImage, l = LabelObject, + LABEL_DrawInfo, drinfo, + IA_Font, &helvetica15bu, + LABEL_Justification, LABEL_CENTRE, + LABEL_Text, "ClassAct has buttons!", + LabelEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_AddChild, ButtonObject, + GA_Text, "_Simple", + GA_RelVerify, TRUE, + ButtonEnd, + + LAYOUT_AddChild, ButtonObject, + GA_Text, "Push Button", + GA_RelVerify, TRUE, + BUTTON_PushButton, TRUE, + ButtonEnd, + + LAYOUT_AddChild, ButtonObject, + GA_Text, "Colour", + GA_RelVerify, TRUE, + BUTTON_BackgroundPen, 7, + BUTTON_TextPen, 2, + ButtonEnd, + + LayoutEnd, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_AddChild, ButtonObject, + GA_Text, "B_old", + GA_RelVerify, TRUE, + BUTTON_SoftStyle, FSF_BOLD, + ButtonEnd, + + LAYOUT_AddChild, ButtonObject, + GA_Text, "Read-Only", + GA_RelVerify, TRUE, + GA_ReadOnly, TRUE, + ButtonEnd, + + LAYOUT_AddChild, ButtonObject, + GA_Text, "_Right aligned", + GA_RelVerify, TRUE, + BUTTON_Justification, BCJ_RIGHT, + ButtonEnd, + + LayoutEnd, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_AddChild, ButtonObject, + GA_TextAttr, &garnet16, + GA_Text, "B_ig Button, different font", + GA_RelVerify, TRUE, + ButtonEnd, + LayoutEnd, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_VertAlignment, LALIGN_CENTRE, + + LAYOUT_AddChild, ButtonObject, + BUTTON_AutoButton, BAG_POPFILE, + GA_RelVerify, TRUE, + ButtonEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + CHILD_Label, LabelObject, + LABEL_Text, "Get Fi_le", + LabelEnd, + + LAYOUT_AddChild, ButtonObject, + BUTTON_AutoButton, BAG_POPDRAWER, + GA_RelVerify, TRUE, + ButtonEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + CHILD_Label, LabelObject, + LABEL_Text, "Get _Drawer", + LabelEnd, + + LAYOUT_AddChild, ButtonObject, + BUTTON_AutoButton, BAG_POPFONT, + GA_RelVerify, TRUE, + ButtonEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + CHILD_Label, LabelObject, + LABEL_Text, "Fo_nt", + LabelEnd, + + LAYOUT_AddChild, ButtonObject, + BUTTON_AutoButton, BAG_POPTIME, + GA_RelVerify, TRUE, + ButtonEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + CHILD_Label, LabelObject, + LABEL_Text, "_Time", + LabelEnd, + + LayoutEnd, + LayoutEnd, + + /* Our next page shows some gadgets + * that are basically just direct + * replacements for GadTools gadget + * kinds. Don't be fooled though, even + * though they may look similar, we've + * made several useful enhancements. + */ + PAGE_Add, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_VERT, + LAYOUT_HorizAlignment, LALIGN_CENTRE, + + LAYOUT_AddImage, l = LabelObject, + LABEL_DrawInfo, drinfo, + IA_Font, &helvetica15bu, + LABEL_Justification, LABEL_CENTRE, + LABEL_Text, "GadTools Replacements", + LabelEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, PaletteObject, + GA_RelVerify, TRUE, + PALETTE_NumColours, 1 << screen->RastPort.BitMap->Depth, + PaletteEnd, + CHILD_MinWidth, 40, + CHILD_MinHeight, 20, + CHILD_Label, LabelObject, + LABEL_Text, "_Palette", + LabelEnd, + + LAYOUT_AddChild, scroller_gad = ScrollerObject, + GA_RelVerify, TRUE, + SCROLLER_Top, 0, + SCROLLER_Total, 90, + SCROLLER_Visible, 10, + SCROLLER_Orientation, FREEHORIZ, + ScrollerEnd, + CHILD_MinHeight, 14, + CHILD_WeightedHeight, 0, + CHILD_Label, LabelObject, + LABEL_Text, "_Scroller", + LabelEnd, + + LAYOUT_AddChild, StringObject, + GA_RelVerify, TRUE, + STRINGA_MaxChars, 40, + STRINGA_TextVal, "ClassAct is just soooooo cool", + StringEnd, + CHILD_Label, LabelObject, + LABEL_Text, "S_tring", + LabelEnd, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_AddChild, RadioButtonObject, + GA_RelVerify, TRUE, + GA_DrawInfo, drinfo, + RADIOBUTTON_Labels, radio_list = RadioButtons("ClassAct radio buttons", + "support strumming.", + "Click & Drag over buttons!", + NULL), + RADIOBUTTON_Spacing, 2, + RadioButtonEnd, + + LAYOUT_AddChild, CheckBoxObject, + GA_RelVerify, TRUE, + GA_Text, "_Click the label", + CHECKBOX_TextPlace, PLACETEXT_RIGHT, + CheckBoxEnd, + LayoutEnd, + CHILD_WeightedHeight, 0, + + LayoutEnd, + + /* This page is a little more + * interesting, it contains some of the + * cooler classes like the fuelgauge, + * chooser and speedbar. We also have + * an Integer class gadget, showing off + * our innovative arrow buttons. This + * gadget is connected to the fuelgauge + * via a simple mapping. + */ + PAGE_Add, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_VERT, + LAYOUT_VertAlignment, LALIGN_CENTRE, + LAYOUT_HorizAlignment, LALIGN_CENTRE, + + LAYOUT_AddImage, l = LabelObject, + LABEL_DrawInfo, drinfo, + IA_Font, &helvetica15bu, + LABEL_Justification, LABEL_CENTRE, + LABEL_Text, "New and Improved!\n", + LabelEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_SpaceOuter, FALSE, + + LAYOUT_AddChild, fuelgauge_gad = FuelGaugeObject, + FUELGAUGE_Orientation, FGORIENT_HORIZ, + FUELGAUGE_Percent, TRUE, + FUELGAUGE_Min, 0, + FUELGAUGE_Max, 100, + FUELGAUGE_Level, 20, + FUELGAUGE_Ticks, 10, + FUELGAUGE_TickSize, 4, + FUELGAUGE_ShortTicks, TRUE, + FuelGaugeEnd, + CHILD_WeightedHeight, 0, + CHILD_Label, LabelObject, + LABEL_DrawInfo, drinfo, + LABEL_Text, "Interconnected:", + LabelEnd, + LayoutEnd, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_SpaceOuter, FALSE, + + LAYOUT_AddChild, IntegerObject, + GA_RelVerify, TRUE, + INTEGER_MaxChars, 3, + INTEGER_Minimum, 0, + INTEGER_Maximum, 100, + INTEGER_Number, 20, + INTEGER_MinVisible, 5, + ICA_TARGET, fuelgauge_gad, + ICA_MAP, integer_map, + IntegerEnd, + CHILD_WeightedHeight, 0, + CHILD_WeightedWidth, 0, + CHILD_Label, LabelObject, + LABEL_DrawInfo, drinfo, + LABEL_Text, "_Look, arrows! (Range: 0...100):", + LabelEnd, + LayoutEnd, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_AddChild, ChooserObject, + GA_RelVerify, TRUE, + CHOOSER_Labels, chooser_list1 = ChooserLabels( "A PopUp gadget", + "from the Chooser", + "gadget class.", + "Good for allowing", + "the user to", + "select a state", + "or mode.", + NULL), + CHOOSER_PopUp, TRUE, + CHOOSER_AutoFit, TRUE, + ChooserEnd, + + LAYOUT_AddChild, ChooserObject, + GA_RelVerify, TRUE, + CHOOSER_Labels, chooser_list2 = ChooserLabels("A DropDown", + "gadget from", + "the Chooser", + "gadget class.", + "Good for", + "allowing the", + "user to", + "select actions", + NULL), + CHOOSER_DropDown, TRUE, + CHOOSER_Title, "Drop-Down", + CHOOSER_AutoFit, FALSE, + ChooserEnd, + + LAYOUT_AddChild, ChooserObject, + GA_RelVerify, TRUE, + CHOOSER_Labels, chooser_list3 = ChooserLabels("A thin Chooser.", + "Use this in", + "conjunction with", + "a string gadget.", + NULL), + CHOOSER_DropDown, TRUE, + CHOOSER_AutoFit, TRUE, + ChooserEnd, + CHILD_MinWidth, 20, + CHILD_WeightedWidth, 0, + LayoutEnd, + CHILD_WeightedWidth, 0, + + LAYOUT_AddChild, SpeedBarObject, + GA_RelVerify, TRUE, + SPEEDBAR_Orientation, SBORIENT_HORIZ, + SPEEDBAR_Buttons, &speedbar_list, + SPEEDBAR_Background, mapping[4], + SPEEDBAR_StrumBar, FALSE, + SpeedBarEnd, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, ClickTabObject, + GA_RelVerify, TRUE, + CLICKTAB_Labels, tab_list = ClickTabs("Tabs", "For", + "Pages", "Etc.", NULL), + CLICKTAB_Current, 0L, + ClickTabEnd, + CHILD_WeightedHeight, 0, + + LayoutEnd, + CHILD_WeightedWidth, 0, + + /* One of the most powerful classes + * we've done is the ListBrowser. The + * first object is a simple multi- + * column list showing images and text, + * as well as editable nodes. The 2nd + * object is intended to demonstrate + * some of the numerous node attributes. + */ + PAGE_Add, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_VERT, + LAYOUT_VertAlignment, LALIGN_CENTRE, + LAYOUT_HorizAlignment, LALIGN_CENTRE, + + LAYOUT_AddImage, l = LabelObject, + LABEL_DrawInfo, drinfo, + IA_Font, &helvetica15bu, + LABEL_Justification, LABEL_CENTRE, + LABEL_Text, "Look what ListBrowser can do!\n", + LabelEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_AddChild, ListBrowserObject, + GA_RelVerify, TRUE, + LISTBROWSER_Labels, (ULONG)&lb_list1, + LISTBROWSER_ColumnInfo, &ci1, + LISTBROWSER_AutoFit, TRUE, + LISTBROWSER_MultiSelect, TRUE, + LISTBROWSER_ShowSelected, TRUE, + LISTBROWSER_Separators, TRUE, + LISTBROWSER_Editable, TRUE, + LISTBROWSER_Spacing, 1, + ListBrowserEnd, + + LAYOUT_AddChild, lb_gad = ListBrowserObject, + GA_RelVerify, TRUE, + LISTBROWSER_Labels, &lb_list2, + LISTBROWSER_ColumnInfo, &ci2, + LISTBROWSER_ColumnTitles, TRUE, + LISTBROWSER_Separators, TRUE, + LISTBROWSER_Hierarchical, TRUE, + LISTBROWSER_Editable, TRUE, + LISTBROWSER_MultiSelect, TRUE, + LISTBROWSER_ShowSelected, TRUE, + ListBrowserEnd, + LayoutEnd, + LayoutEnd, + + /* Our second ListBrowser page shows + * the powerful hierarchical mode of + * ListBrowser. The two gadgets + * contain identical lists, but the + * left-hand gadget shows the default + * hide/show images while the right- + * hand ones shows some custom images. + */ + PAGE_Add, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_VERT, + LAYOUT_VertAlignment, LALIGN_CENTRE, + LAYOUT_HorizAlignment, LALIGN_CENTRE, + + LAYOUT_AddImage, l = LabelObject, + LABEL_DrawInfo, drinfo, + IA_Font, &helvetica15bu, + LABEL_Justification, LABEL_CENTRE, + LABEL_Text, "Get File/Font/Screen Mode\n", + IA_Font, screen->Font, + LABEL_Text, "ASL has never been this easy", + LabelEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, getfile_gad = GetFileObject, + GA_ID, GAD_GETFILE, + GA_RelVerify, TRUE, + GETFILE_TitleText, "Select a File", + GETFILE_ReadOnly, FALSE, + End, + CHILD_WeightedHeight, 0, + CHILD_Label, LabelObject, + LABEL_Text, "File:", + LabelEnd, + + LAYOUT_AddChild, getfont_gad = GetFontObject, + GA_ID, GAD_GETFONT, + GA_RelVerify, TRUE, + GETFONT_TitleText, "Select a Font", + GETFONT_DoStyle, TRUE, + GETFONT_DoFrontPen, TRUE, + GETFONT_DoBackPen, TRUE, + ICA_MAP, getfont_map, + End, + CHILD_WeightedHeight, 0, + CHILD_Label, LabelObject, + LABEL_Text, "Font:", + LabelEnd, + + LAYOUT_AddChild, fontpreview_gad = ButtonObject, + GA_ReadOnly, TRUE, + GA_Text, "123 AcBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz!@#$%^&*()", + BUTTON_DomainString, "Text", + ButtonEnd, + CHILD_Label, LabelObject, + LABEL_Text, "Preview:", + LabelEnd, + + LAYOUT_AddChild, getscreen_gad = GetScreenModeObject, + GA_ID, GAD_GETSCREEN, + GA_RelVerify, TRUE, + GETSCREENMODE_TitleText, "Select a Screen Mode", + GETSCREENMODE_DoWidth, TRUE, + GETSCREENMODE_DoHeight, TRUE, + GETSCREENMODE_DoDepth, TRUE, + GETSCREENMODE_MinWidth, 500, + GETSCREENMODE_MinHeight, 180, + End, + CHILD_WeightedHeight, 0, + CHILD_Label, LabelObject, + LABEL_Text, "Screen Mode:", + LabelEnd, + + LayoutEnd, + + /* This is the last page, just the + * credits, again as a single label + * gadget. + */ + PAGE_Add, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_VERT, + LAYOUT_VertAlignment, LALIGN_CENTRE, + LAYOUT_HorizAlignment, LALIGN_CENTRE, + + LAYOUT_AddImage, l = LabelObject, + LABEL_DrawInfo, drinfo, + IA_Font, &helvetica15bu, + LABEL_Justification, LABEL_CENTRE, + LABEL_Text, "Order ClassAct Now!\n", + IA_Font, screen->Font, + LABEL_Text, "\nFinale Development, Inc.\n", + LABEL_Text, "P.O. Box 6905, ", + LABEL_Text, "West Palm Beach, FL 33405", + LABEL_Text, "U.S.A.\n", + LABEL_Text, "Tel: 1 (203) 235-7518\n", + LABEL_Text, "Fax: 1 (203) 237-8459\n", + LABEL_Text, "E-Mail: ClassAct@finale-dev.com\n", + LABEL_Text, "WWW: http://www.warped.com/~timmer/classact/\n", + LABEL_Text, "FTP: ftp.warped.com /pub/amiga/classact/\n", + LabelEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LayoutEnd, + LayoutEnd, + + PageEnd, + + LayoutEnd, + + /* These are the gadgets that appear at the + * bottom of the window for changing pages. + */ + LAYOUT_AddChild, layout2 = LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ, + LAYOUT_EvenSize, TRUE, + LAYOUT_HorizAlignment, LALIGN_RIGHT, + LAYOUT_SpaceInner, FALSE, + + LAYOUT_AddChild, SpaceObject, + SpaceEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, SpaceObject, + SpaceEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, back_gad = ButtonObject, + GA_ID, GAD_BACK, + GA_Text, "< _Back", + GA_RelVerify, TRUE, + GA_Disabled, TRUE, + ButtonEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, forward_gad = ButtonObject, + GA_ID, GAD_FORWARD, + GA_Text, "_Forward >", + GA_RelVerify, TRUE, + ButtonEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, SpaceObject, + SpaceEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, ButtonObject, + GA_ID, GAD_QUIT, + GA_Text, "Quit", + GA_RelVerify, TRUE, + ButtonEnd, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LayoutEnd, + + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LayoutEnd) + { + struct MsgPort *app_port; + Object *window_obj; + + /* Connect the GetFont gadget to the font preview button. + */ + SetAttrs(getfont_gad, + ICA_TARGET, fontpreview_gad, + TAG_DONE); + + /* Make the fancy ListBrowserList. + */ + make_fancy_list(lb_gad); + + /* Create a message port for App* messages. This is needed for + * iconification. We're being a touch naughty by not checking + * the return code, but that just means that iconification won't + * work, nothing really bad will happen. + */ + app_port = CreateMsgPort(); + + /* Create the window object. + */ + if (window_obj = WindowObject, + WA_Left, 0, + WA_Top, screen->Font->ta_YSize + 3, + WA_CustomScreen, screen, + WA_IDCMP, IDCMP_CLOSEWINDOW, + WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | + WFLG_SIZEGADGET | WFLG_ACTIVATE | WFLG_SMART_REFRESH, + WA_Title, "ClassAct Demonstration", + WINDOW_ParentGroup, layout, + WINDOW_IconifyGadget, TRUE, + WINDOW_Icon, GetDiskObject("PROGDIR:ClassActDemo"), + WINDOW_IconTitle, "ClassAct Demo", + WINDOW_AppPort, app_port, + EndWindow) + { + struct Window *win; + + /* Open the window. + */ + if (win = (struct Window *)CA_OpenWindow(window_obj)) + { + ULONG signal; + BOOL ok = TRUE; + + /* Obtain the window wait signal mask. + */ + GetAttr(WINDOW_SigMask, window_obj, &signal); + + /* Input Event Loop + */ + while (ok) + { + ULONG result; + + Wait(signal | (1L << app_port->mp_SigBit)); + + /* CA_HandleInput() returns the gadget ID of a clicked + * gadget, or one of several pre-defined values. For + * this demo, we're only actually interested in a + * close window and a couple of gadget clicks. + */ + while ((result = CA_HandleInput(window_obj, NULL)) != WMHI_LASTMSG) + { + ULONG current_page; + + switch(result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + ok = FALSE; + break; + + case WMHI_GADGETUP: + switch (result & WMHI_GADGETMASK) + { + case GAD_FORWARD: + GetAttr(PAGE_Current, page, ¤t_page); + if (current_page < NUM_PAGES) + { + if (current_page == 0) + if (SetGadgetAttrs(back_gad, win, NULL, + GA_Disabled, FALSE, + TAG_DONE)) + RefreshGList(layout2, win, NULL, 1); + + current_page++; + + if (current_page == NUM_PAGES) + if (SetGadgetAttrs(forward_gad, win, NULL, + GA_Disabled, TRUE, + TAG_DONE)) + RefreshGList(layout2, win, NULL, 1); + + SetGadgetAttrs(page, win, NULL, + PAGE_Current, current_page, + TAG_DONE); + RethinkLayout(layout1, win, NULL, TRUE); + } + break; + + case GAD_GETFILE: + RequestFile((Object *)getfile_gad, win); + break; + + case GAD_GETFONT: + RequestFont((Object *)getfont_gad, win); + break; + + case GAD_GETSCREEN: + RequestScreenMode((Object *)getscreen_gad, win); + break; + + case GAD_BACK: + GetAttr(PAGE_Current, page, ¤t_page); + if (current_page > 0) + { + if (current_page == NUM_PAGES) + if (SetGadgetAttrs(forward_gad, win, NULL, + GA_Disabled, FALSE, + TAG_DONE)) + RefreshGList(layout2, win, NULL, 1); + + current_page--; + + if (current_page == 0) + if (SetGadgetAttrs(back_gad, win, NULL, + GA_Disabled, TRUE, + TAG_DONE)) + RefreshGList(layout2, win, NULL, 1); + + SetGadgetAttrs(page, win, NULL, + PAGE_Current, current_page, + TAG_DONE); + RethinkLayout(layout1, win, NULL, TRUE); + } + break; + + case GAD_QUIT: + ok = FALSE; + break; + + default: + break; + } + break; + + case WMHI_ICONIFY: + if (CA_Iconify(window_obj)) + win = NULL; + break; + + case WMHI_UNICONIFY: + win = CA_OpenWindow(window_obj); + break; + + default: + break; + } + } + } + + /* Disposing of the window object will also close the + * window if it is already opened and it will dispose of + * all objects attached to it. + */ + DisposeObject(window_obj); + } + else + easy_req(NULL, "Demo failed to start\nCouldn't open window", "Quit", ""); + + /* Lose the App* message port. + */ + if (app_port) + DeleteMsgPort(app_port); + } + else + { + easy_req(NULL, "Demo failed to start\nCouldn't create window object", "Quit", ""); + DisposeObject(layout); + } + } + else + easy_req(NULL, "Demo failed to start\nCouldn't create layout", "Quit", ""); + + /* Free the lists. + */ + if (radio_list) + FreeRadioButtons(radio_list); + if (chooser_list1) + FreeChooserLabels(chooser_list1); + if (chooser_list2) + FreeChooserLabels(chooser_list2); + if (chooser_list3) + FreeChooserLabels(chooser_list3); + if (tab_list) + FreeClickTabs(tab_list); + + free_speedbar_list(&speedbar_list); + + FreeListBrowserList(&lb_list1); + FreeListBrowserList(&lb_list2); + DisposeObject(limage); + + if (screen->RastPort.BitMap->Depth > 2 && GfxBase->LibNode.lib_Version >= 39) + { + ReleasePen(screen->ViewPort.ColorMap, mapping[4]); + ReleasePen(screen->ViewPort.ColorMap, mapping[5]); + ReleasePen(screen->ViewPort.ColorMap, mapping[7]); + } + + UnlockPubScreen(0, screen); + } + else + easy_req(NULL, "Demo failed to start\nCouldn't lock destination screen", "Quit", ""); +} + + +/* Set the mapping array for a screen. This creates an 8 colour mapping + * that should closely match the style of 8-colour palette that has become + * more or less conventional: + * pen 0 - medium grayish tone + * pen 1 - black + * pen 2 - white + * pen 3 - an arbitrary colour + * pen 4 - darker tone of pen 0 + * pen 5 - lighter tone of pen 0 + * pen 6,7 - some nice colours. + * You can be reasonably sure that this routine will setup a mapping that + * will make images designed for this style of palette look OK. + * + * This should probably lock the pen it eventually chooses, and maybe try to + * allocate a pen if it can't find anything close enough. + */ +VOID set_mapping(struct Screen *screen, struct DrawInfo *drinfo, UWORD image_mapping[]) +{ + /* Setup the image remapping. + */ + image_mapping[0] = drinfo->dri_Pens[BACKGROUNDPEN]; + image_mapping[1] = drinfo->dri_Pens[SHADOWPEN]; + image_mapping[2] = drinfo->dri_Pens[SHINEPEN]; + image_mapping[3] = drinfo->dri_Pens[FILLPEN]; + + if (screen->RastPort.BitMap->Depth > 2) + { + if (GfxBase->LibNode.lib_Version >= 39) + { + struct ColorMap *colourmap = screen->ViewPort.ColorMap; + ULONG bg[3]; + + GetRGB32(colourmap, drinfo->dri_Pens[BACKGROUNDPEN], 1, bg); + image_mapping[4] = ObtainBestPen(colourmap, bg[0] - 0x22222222, bg[1] - 0x22222222, bg[2] - 0x22222222, + OBP_Precision, PRECISION_GUI); + image_mapping[5] = ObtainBestPen(colourmap, bg[0] + 0x22222222, bg[1] + 0x22222222, bg[2] + 0x22222222, + OBP_Precision, PRECISION_GUI); + image_mapping[7] = ObtainBestPen(colourmap, 0xeeeeeeee, 0x22222222, 0x22222222, + OBP_Precision, PRECISION_GUI); + } + else + { + UWORD bg; + WORD lightgray, darkgray; + WORD rdiff1 = 3, gdiff1 = 3, bdiff1 = 3; + WORD rdiff2 = 3, gdiff2 = 3, bdiff2 = 3; + WORD i; + + /* Set the defaults. + */ + lightgray = darkgray = drinfo->dri_Pens[BACKGROUNDPEN]; + + /* Find out what the background colour is. + */ + bg = GetRGB4(screen->ViewPort.ColorMap, 0); + + /* Search for the light and dark grays. + */ + for (i = 1; i < 1 << screen->RastPort.BitMap->Depth; i++) + { + UWORD colour; + + /* Get the colour. + */ + colour = GetRGB4(screen->ViewPort.ColorMap, i); + + /* Compare it to the background colour, see if its darker and + * close enough to that colour. + */ + if ((RED(bg) >= RED(colour) && RED(bg) - RED(colour) <= rdiff1) && + (GREEN(bg) >= GREEN(colour) && GREEN(bg) - GREEN(colour) <= gdiff1) && + (BLUE(bg) >= BLUE(colour) && BLUE(bg) - BLUE(colour) <= bdiff1)) + { + darkgray = i; + rdiff1 = RED(bg) - RED(colour); + gdiff1 = GREEN(bg) - GREEN(colour); + bdiff1 = BLUE(bg) - BLUE(colour); + } + /* Compare it to the background colour, see if its lighter and + * close enough to that colour. + */ + if ((RED(colour) >= RED(bg) && RED(colour) - RED(bg) <= rdiff2) && + (GREEN(colour) >= GREEN(bg) && GREEN(colour) - GREEN(bg) <= gdiff2) && + (BLUE(colour) >= BLUE(bg) && BLUE(colour) - BLUE(bg) <= bdiff2)) + { + lightgray = i; + rdiff2 = RED(colour) - RED(bg); + gdiff2 = GREEN(colour) - GREEN(bg); + bdiff2 = BLUE(colour) - BLUE(bg); + } + } + + image_mapping[4] = darkgray; + image_mapping[5] = lightgray; + image_mapping[6] = (1 << screen->RastPort.BitMap->Depth) - 2; + image_mapping[7] = (1 << screen->RastPort.BitMap->Depth) - 1; + } + } + else + { + image_mapping[4] = image_mapping[5] = drinfo->dri_Pens[BACKGROUNDPEN]; + image_mapping[6] = image_mapping[7] = drinfo->dri_Pens[FILLPEN]; + } +} + + +/* Do an easy requester. + */ +LONG easy_req(struct Window *win, char *reqtext, char *reqgads, char *reqargs, ...) +{ + struct EasyStruct general_es = + { + sizeof(struct EasyStruct), + 0, + "Demo", + NULL, + NULL + }; + + general_es.es_TextFormat = reqtext; + general_es.es_GadgetFormat = reqgads; + + return(EasyRequestArgs(win, &general_es, NULL, &reqargs)); +} + + +/* Function to make an Exec List of ListBrowserNodes from an array of images + * and an array of strings. + */ +BOOL make_lb_list(struct List *list, struct Image *images, UBYTE **strs) +{ + struct Node *node; + WORD i = 0; + + NewList(list); + + while (i < 10) + { + if (node = AllocListBrowserNode(2, + LBNA_Column, 0, + LBNCA_Image, images, + LBNCA_Justification, LCJ_CENTRE, + LBNA_Column, 1, + LBNCA_CopyText, TRUE, + LBNCA_Text, *strs, + LBNCA_Editable, TRUE, + LBNCA_MaxChars, 60, + TAG_DONE)) + { + AddTail(list, node); + } + else + break; + + images++; + strs++; + i++; + } + return(TRUE); +} + + +/* Make a fairly fancy list. We've taken a different approach here, this + * time using ListBrowser methods to create the list items AFTER the object + * has been created. + */ +VOID make_fancy_list(struct Gadget *lb_gad) +{ + struct Image *gimage; + static struct Hook lbhook; + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Demo of ListBrowserNode features", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Flags, LBFLG_HASCHILDREN | LBFLG_SHOWCHILDREN, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Editable node", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Click twice to edit", + LBNCA_Editable, TRUE, + LBNCA_MaxChars, 60, + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Flags, LBFLG_HASCHILDREN | LBFLG_SHOWCHILDREN, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Change colours", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Flags, LBFLG_CUSTOMPENS, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Colourful!", + LBNCA_FGPen, 19, + LBNCA_BGPen, 18, + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Flags, LBFLG_HASCHILDREN | LBFLG_SHOWCHILDREN, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Checkbox item", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_CheckBox, TRUE, + LBNA_Checked, TRUE, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Checked by default", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_CheckBox, TRUE, + LBNA_Checked, FALSE, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Unchecked by default", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Flags, LBFLG_HASCHILDREN | LBFLG_SHOWCHILDREN, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Justifications", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Left", + LBNCA_Justification, LCJ_LEFT, + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Centre", + LBNCA_Justification, LCJ_CENTRE, + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Right", + LBNCA_Justification, LCJ_RIGHT, + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Flags, LBFLG_HASCHILDREN | LBFLG_SHOWCHILDREN, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Read-Only node", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Flags, LBFLG_READONLY, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Can't select me!", + TAG_DONE); + + gimage = GlyphObject, + IA_Width, 20, + IA_Height, 20, + GLYPH_Glyph, GLYPH_POPTIME, + GlyphEnd; + limage = LabelObject, + IA_Font, &garnet16, + LABEL_Text, "Created using\n_label.image\n", + IA_Font, screen->Font, + LABEL_SoftStyle, FSF_BOLD | FSF_ITALIC, + LABEL_DisposeImage, TRUE, + LABEL_Image, gimage, + IA_FGPen, 35, + LABEL_Text, " Cool eh?", + LabelEnd; + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Flags, LBFLG_HASCHILDREN | LBFLG_SHOWCHILDREN, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Some images", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Column, 0, + LBNCA_Image, limage, + TAG_DONE); + + lbhook.h_Entry = (ULONG (*)())lb_hook; + lbhook.h_SubEntry = NULL; + lbhook.h_Data = NULL; + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Flags, LBFLG_HASCHILDREN | LBFLG_SHOWCHILDREN, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Rendering hook", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Column, 0, + LBNCA_RenderHook, &lbhook, + LBNCA_HookHeight, 20, + TAG_DONE); +} + +/* Hook for our fancy list. This just renders an ellipse. + */ +ULONG __asm __saveds lb_hook(register __a0 struct Hook *hook, register __a2 struct Node *node, + register __a1 struct LBDrawMsg *msg) +{ + WORD width = msg->lbdm_Bounds.MaxX - msg->lbdm_Bounds.MinX; + WORD height = msg->lbdm_Bounds.MaxY - msg->lbdm_Bounds.MinY; + + if(msg->lbdm_MethodID != LV_DRAW) + return(LBCB_UNKNOWN); + + SetAPen(msg->lbdm_RastPort, 69); + DrawEllipse(msg->lbdm_RastPort, + msg->lbdm_Bounds.MinX + (width / 2), msg->lbdm_Bounds.MinY + (height / 2), + width / 2, height / 2); + + return(LVCB_OK); +} + +/* Create the SpeedBar list from an array of images, creating help texts + * for each button from a string array. + */ +BOOL make_speedbar_list(struct List *list, struct Image *images, UBYTE **help) +{ + struct Node *node; + WORD i = 0; + + NewList(list); + + while (i < 10) + { + if (node = AllocSpeedButtonNode(i, + SBNA_Image, images, + SBNA_Top, 2, + SBNA_Left, 0, + SBNA_Help, *help, + SBNA_Enabled, TRUE, + SBNA_Spacing, 2, + SBNA_Highlight, SBH_RECESS, + TAG_DONE)) + { + AddTail(list, node); + } + else + PutStr("Allocation failed\n"); + + images++; + help++; + i++; + } + return(TRUE); +} + + +/* Function to free a SpeedBar Exec List. + */ +VOID free_speedbar_list(struct List *list) +{ + struct Node *node, *nextnode; + + node = list->lh_Head; + while (nextnode = node->ln_Succ) + { + FreeSpeedButtonNode(node); + node = nextnode; + } + NewList(list); +} diff --git a/Demo/ClassActDemo.c.info b/Demo/ClassActDemo.c.info new file mode 100644 index 0000000000000000000000000000000000000000..ad6e7fd57f6cd4bbc1371116caf649588f7739d3 GIT binary patch literal 296 zcmZWiI|{-;5S>k;TS$n7poNedh)3`WcIgzX{IoVUS@0-czypXIkn~fE76x*G=_MKW zBUt!gX5I(h)O`?O5X@izV;DilXdz3o=08MqkmX9r@-$T@we!QIa(oO!2td{p{vyL- zb#^)~ydC=kJ-9p8ExZwKJP96Oop~a*OJ|78`*t%kX=ZF#ldf`Xij*`Y*np%fNPH(x sx}-;JUu-TTZ*Fu+LTn#C=j=&ZrO4ad_3*;?* z1bzx&3P}9_4`MMf2-U+xQ0O=Yr~g0zwHYR5#vlgN!hZh(GfV_Xvq0HA2)clQ!GM8> zfgfbV|1(hf4b5qGuzhb3?f|oR80x{|e}H}lfgcQ4LqQ+_L9>R2x&rz4fCilZe}Um% zF@(PJ`TzfRApg$)`A~ZQ|LuQ4{LO;x9YFeX)qCS=kox3uFwJ(o-01rShWkA(?#7lt b8f+hK`U2Q}0tk0N-PHi~0gwX6JT!y>ipJJ1 literal 0 HcmV?d00001 diff --git a/Demo/ClassActDemo.lnk b/Demo/ClassActDemo.lnk new file mode 100644 index 0000000..56265d7 --- /dev/null +++ b/Demo/ClassActDemo.lnk @@ -0,0 +1,6 @@ +FROM LIB:c.o "ClassActDemo.o"+"Images.o" +TO "ClassActDemo" +LIB lib:classact.lib lib:debug.lib LIB:sc.lib LIB:amiga.lib +SMALLCODE +SMALLDATA + diff --git a/Demo/ClassActDemo.o b/Demo/ClassActDemo.o new file mode 100644 index 0000000000000000000000000000000000000000..233c01d1a4767757197bbf5074d27c860c85e7d0 GIT binary patch literal 17320 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 +#include + +__chip UWORD picture_data[2205] = +{ + /* Plane 0 */ + 0x0000, 0x0000, 0x0001, 0x8000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0003, 0x8000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0007, 0xF000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000F, 0xF800, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001F, 0x3400, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x003D, 0x9E00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0078, 0xDF00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x00F0, 0x6F80, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x01E0, 0x37C0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x03C0, 0x1FE0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0780, 0x8DF0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0F01, 0x06F8, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x1E02, 0x037C, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x3C04, 0x01BE, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x7808, 0x08DF, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF010, 0x106F, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0001, 0xE020, 0x207F, 0xC000, 0x0000, 0x0000, + 0x0000, 0x0003, 0xC040, 0x407F, 0xE000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x8080, 0x80FF, 0xF000, 0x0000, 0x0000, + 0x0000, 0x000F, 0x0101, 0x01FF, 0xF800, 0x0000, 0x0000, + 0x0000, 0x001E, 0x0202, 0x03FF, 0xFC00, 0x0000, 0x0000, + 0x0000, 0x001C, 0x0404, 0x07FF, 0xFE00, 0x0000, 0x0000, + 0x0000, 0x007C, 0x0808, 0x0FF2, 0xFF00, 0x0000, 0x0000, + 0x0000, 0x007E, 0x1010, 0x1FEF, 0x7F80, 0x0000, 0x0000, + 0x0000, 0x003F, 0x0020, 0x3FFF, 0xBF80, 0x0000, 0x0000, + 0x0000, 0x001F, 0x8040, 0x7E7F, 0xDF00, 0x0000, 0x0000, + 0x0000, 0x000F, 0xC080, 0xFC1F, 0xE600, 0x0000, 0x0000, + 0x0000, 0x0007, 0xE101, 0xF97F, 0xF400, 0x0000, 0x0000, + 0x0000, 0x0003, 0xF003, 0xF303, 0xF800, 0x0000, 0x0000, + 0x0000, 0x0001, 0xF807, 0xE7C1, 0xF000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xFC0F, 0xCFC1, 0xE000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x7E1F, 0x9FC1, 0xC000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x3F3F, 0x25E0, 0xC000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x1FFE, 0x6EF1, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0FBC, 0x7F63, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x07FE, 0x7FA6, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x03FF, 0x1FAC, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x01FF, 0x9FF8, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x00FF, 0xC630, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x007F, 0xE660, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x003F, 0xF0C0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001F, 0xF980, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000F, 0xFF00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001F, 0xFF80, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x3FFF, 0xFF80, 0x0000, 0x0000, 0x0000, + 0x0000, 0x001F, 0xFFFF, 0xFFFF, 0x8000, 0x0000, 0x0000, + 0x0000, 0x007F, 0xFFEF, 0xFF7F, 0xFF00, 0x0000, 0x0000, + 0x0000, 0x01FF, 0xFFEF, 0xFF7F, 0xFFC0, 0x0000, 0x0000, + 0x0000, 0x03FF, 0xFFEF, 0x9F7F, 0xFFF0, 0x0000, 0x0000, + 0x0000, 0x07FF, 0xEFEF, 0x2F7F, 0x7FF8, 0x0000, 0x0000, + 0x0000, 0x07FF, 0xEFE0, 0x207F, 0x7FFC, 0x0000, 0x0000, + 0x0000, 0x0FFF, 0xEFE0, 0x207F, 0x7FFC, 0x0000, 0x0000, + 0x0000, 0x0FFF, 0xF7E0, 0x207E, 0xFFFE, 0x0000, 0x0000, + 0x0000, 0x1FFF, 0xF7F0, 0x20FE, 0xFFFE, 0x0000, 0x0000, + 0x0000, 0x1FFF, 0xF7F0, 0x20FE, 0xFFFF, 0x0000, 0x0000, + 0x0000, 0x3FFF, 0xF1F0, 0x20F8, 0xFFFF, 0x0000, 0x0000, + 0x0000, 0x3FFF, 0xFEF0, 0x20F7, 0xFFFF, 0x8000, 0x0000, + 0x0000, 0x7FFF, 0xFDF8, 0x21FB, 0xFFFF, 0x8000, 0x0000, + 0x0000, 0x7FFF, 0xFBF8, 0x21FD, 0xFFFF, 0xC000, 0x0000, + 0x0000, 0xFFFF, 0xFBF8, 0x21FD, 0xFFFF, 0xC000, 0x0000, + 0x0000, 0xFFFF, 0xFDF8, 0x21FB, 0xFFFF, 0xE000, 0x0000, + 0x0001, 0xFFFF, 0xFDFC, 0x23FB, 0xFFFF, 0xE000, 0x0000, + 0x0001, 0xFFFF, 0xFDFC, 0x23FB, 0xFFFF, 0xF000, 0x0000, + 0x0003, 0xFFFF, 0xFEFC, 0x23F7, 0xFFFF, 0xF000, 0x0000, + 0x0003, 0xFFFF, 0xFEFE, 0x27F7, 0xFFFF, 0xF800, 0x0000, + 0x0007, 0xFFFF, 0xFEFE, 0x27F7, 0xFFFF, 0xF800, 0x0000, + 0x0007, 0xFFFF, 0xFF7E, 0x27EF, 0xFFFF, 0xFC00, 0x0000, + 0x000F, 0xFFFF, 0xFF7F, 0x2FEF, 0xFFFF, 0xFC00, 0x0000, + 0x000F, 0xFFFF, 0xFFBF, 0x2FDF, 0xFFFF, 0xFE00, 0x0000, + 0x001F, 0xFFFF, 0xFFBF, 0x2FDF, 0xFFFF, 0xFE00, 0x0000, + 0x001F, 0xFFFF, 0xFFDF, 0xBFBF, 0xFFFF, 0xFF00, 0x0000, + 0x003F, 0xFFFF, 0xFFDF, 0xBFBF, 0xFFFF, 0xFF00, 0x0000, + 0x003F, 0xFFFF, 0xFFEF, 0xBF7F, 0xFEFF, 0xFF80, 0x0000, + 0x007F, 0xFFFF, 0xFFEF, 0xBF7F, 0xFEFF, 0xFF80, 0x0000, + 0x007F, 0xFFEF, 0xFFF7, 0xDEFF, 0xFEFF, 0xFFC0, 0x0000, + 0x00FF, 0xFFEF, 0xFFF7, 0xDEFF, 0xFEFF, 0xFFC0, 0x0000, + 0x00FF, 0xFFCF, 0xFFFB, 0xDDFF, 0xFEFF, 0xFFE0, 0x0000, + 0x01FF, 0xFFCF, 0xFFFB, 0xDDFF, 0xFE7F, 0xFFE0, 0x0000, + 0x01FF, 0xFF8F, 0xFFFD, 0xEBFF, 0xFE7F, 0xFFF0, 0x0000, + 0x03FF, 0xFF8F, 0xFFFD, 0xEBFF, 0xFE3F, 0xFFF0, 0x0000, + 0x03FF, 0xFF0F, 0xFFFE, 0xE7FF, 0xFE3F, 0xFFF8, 0x0000, + 0x07FF, 0xFF0F, 0xFFFE, 0xE7FF, 0xFE1F, 0xFFF8, 0x0000, + 0x07FF, 0xFE0F, 0xFFFF, 0x6FFF, 0xFE1F, 0xFFFC, 0x0000, + 0x0FFF, 0xFE0F, 0xFFFF, 0x6FFF, 0xFE0F, 0xFFFC, 0x0000, + 0x0FFF, 0xFC0F, 0xFFFF, 0xAFFF, 0xFE0F, 0xFFFE, 0x0000, + 0x1FFF, 0xFC0F, 0xFFFF, 0xAFFF, 0xFE07, 0xFFFE, 0x0000, + 0x1FFF, 0xF80F, 0xFFFF, 0xCFFF, 0xFE07, 0xFFFF, 0x0000, + 0x3FFF, 0xF80F, 0xFFFF, 0xCFFF, 0xFE03, 0xFFFF, 0x0000, + 0x3FFF, 0xF00F, 0xFFFF, 0xEFFF, 0xFE03, 0xFFFF, 0x8000, + 0x7FFF, 0xF00F, 0xFFFF, 0xEFFF, 0xFE01, 0xFFFF, 0x8000, + 0xFFFF, 0xE00F, 0xFFFF, 0xC7FF, 0xFE01, 0xFFFF, 0xC000, + 0xFFFF, 0xE00F, 0xFFFF, 0xEFFF, 0xFE00, 0xFFFF, 0xE000, + 0xFFFF, 0xC00F, 0xFFFF, 0xEFFF, 0xFE00, 0xFFFF, 0xE000, + 0xFFFF, 0xC00F, 0xFFFF, 0xEFFF, 0xFE00, 0x7FFF, 0xE000, + 0xEFFF, 0x800F, 0xFFFF, 0xEFFF, 0xFE00, 0x7FFF, 0x0000, + 0x03FF, 0x800F, 0xFFFF, 0xEFFF, 0xFE00, 0x3FFC, 0x0000, + 0x007F, 0x000F, 0xFFFF, 0xC7FF, 0xFE00, 0x3FE0, 0x0000, + 0x001F, 0x000F, 0xFFFF, 0xEFFF, 0xFE00, 0x1F80, 0x0000, + 0x0000, 0x000F, 0xFFFF, 0xEFFF, 0xFE00, 0x1E00, 0x0000, + 0x0000, 0x000F, 0xFFFF, 0xEFFF, 0xFE00, 0x0300, 0x0000, + 0x0000, 0x000F, 0xFFFF, 0xEFFF, 0xFE00, 0x0200, 0x0000, + 0x0000, 0x000F, 0xFFFF, 0xEFFF, 0xFE00, 0x0000, 0x0000, + 0x0000, 0x000F, 0xFFFF, 0xEFFF, 0xFE00, 0x0000, 0x0000, + 0x0000, 0x000F, 0xFFFF, 0xC7FF, 0xFE00, 0x0000, 0x0000, + 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0007, 0x8000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000F, 0xE000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001F, 0xF000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x003E, 0x2000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x007E, 0x0400, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x00FF, 0x1E00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x01FF, 0x8F00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x03FD, 0xC780, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x07FB, 0xE7C0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0FF7, 0x71E0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x1FEE, 0xF8F0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x3FDD, 0xDC78, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x7FBB, 0xBE3C, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xFF77, 0x771E, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0001, 0xFEEE, 0xEF8F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0003, 0xFDDD, 0xDD8F, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0007, 0xFBBB, 0xBB9F, 0xC000, 0x0000, 0x0000, + 0x0000, 0x000F, 0xF777, 0x773F, 0xE000, 0x0000, 0x0000, + 0x0000, 0x001F, 0xEEEE, 0xEE7F, 0xF000, 0x0000, 0x0000, + 0x0000, 0x003F, 0xDDDD, 0xDCFF, 0xF800, 0x0000, 0x0000, + 0x0000, 0x0077, 0xBBBB, 0xB9FF, 0xFC00, 0x0000, 0x0000, + 0x0000, 0x007B, 0xF777, 0x73F2, 0xFE00, 0x0000, 0x0000, + 0x0000, 0x007D, 0xEEEE, 0xE7EF, 0x7E00, 0x0000, 0x0000, + 0x0000, 0x007E, 0xFDDD, 0xCE1F, 0xBE00, 0x0000, 0x0000, + 0x0000, 0x003F, 0x7BBB, 0x9D87, 0xDE00, 0x0000, 0x0000, + 0x0000, 0x001F, 0xBF77, 0x3BE3, 0xE000, 0x0000, 0x0000, + 0x0000, 0x000F, 0xDEEE, 0x7601, 0xF000, 0x0000, 0x0000, + 0x0000, 0x0007, 0xEFDC, 0xEC0C, 0xE000, 0x0000, 0x0000, + 0x0000, 0x0003, 0xF7B9, 0xD806, 0x6000, 0x0000, 0x0000, + 0x0000, 0x0001, 0xFBF3, 0xB002, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xFDE7, 0x6000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x7ECE, 0xC200, 0x4000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x3F1D, 0x8700, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x1FBD, 0x8781, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0FFD, 0x83C2, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x07FE, 0xE1C4, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x03FF, 0x6088, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x01FF, 0xB810, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x00FF, 0xD820, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x007F, 0xE840, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x003F, 0xF080, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001F, 0xF900, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x6000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000F, 0x0F00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000F, 0x9F00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001F, 0xFF80, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001F, 0xFF80, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001F, 0xFF80, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001F, 0xFF80, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001F, 0xDF80, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001F, 0xDF80, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001F, 0xDF80, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000F, 0xFF00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000F, 0xDF00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000F, 0xDF00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000F, 0xDF00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0007, 0xFE00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0007, 0xDE00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0007, 0xDE00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0007, 0xDE00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0003, 0xFC00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0003, 0xDC00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0003, 0xDC00, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0001, 0xD800, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0001, 0xF800, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0001, 0xD800, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xD000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xD000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x4000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x4000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x4000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x4000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, + 0x3C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0xC000, + 0x1F80, 0x0000, 0x0000, 0x0000, 0x0000, 0x001F, 0x8000, + 0x01E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0078, 0x0000, + 0x0078, 0x0000, 0x0000, 0x0000, 0x0000, 0x01E0, 0x0000, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* Plane 2 */ + 0x0000, 0x0000, 0x0001, 0xC000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x6000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001E, 0x4000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x003D, 0x2000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0078, 0x8000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x00F0, 0x4000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x01E2, 0x2000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x03C4, 0x1000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0788, 0x8800, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0F11, 0x0400, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x1E22, 0x2200, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x3C44, 0x4100, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x7888, 0x8880, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF111, 0x1040, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0001, 0xE222, 0x2250, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0003, 0xC444, 0x4420, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x8888, 0x8840, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000F, 0x1111, 0x1080, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000E, 0x2222, 0x2100, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0004, 0x4444, 0x4200, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0888, 0x840C, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x1111, 0x0810, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0222, 0x1000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0444, 0x2060, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0088, 0x4018, 0x1800, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0110, 0x817C, 0x0800, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0021, 0x0302, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0042, 0x07D1, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0004, 0x0FD9, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0008, 0x1FDF, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0010, 0x39FE, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0020, 0x70FE, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0042, 0x7060, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x7820, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x1C20, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x1E60, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0600, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0600, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0600, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0600, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001F, 0x9F80, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x3FFF, 0xFFFF, 0xC000, 0x0000, 0x0000, + 0x0000, 0x001F, 0xE01F, 0xFF80, 0x7F80, 0x0000, 0x0000, + 0x0000, 0x0070, 0x000F, 0xFF00, 0x00E0, 0x0000, 0x0000, + 0x0000, 0x01C0, 0x000F, 0xFF00, 0x0038, 0x0000, 0x0000, + 0x0000, 0x0300, 0x000F, 0x9F00, 0x000C, 0x0000, 0x0000, + 0x0000, 0x0600, 0x100F, 0x0F00, 0x8006, 0x0000, 0x0000, + 0x0000, 0x0400, 0x1000, 0x2000, 0x8002, 0x0000, 0x0000, + 0x0000, 0x0C00, 0x1000, 0x2000, 0x8003, 0x0000, 0x0000, + 0x0000, 0x0800, 0x0800, 0x2001, 0x0001, 0x0000, 0x0000, + 0x0000, 0x1800, 0x0800, 0x0001, 0x0001, 0x8000, 0x0000, + 0x0000, 0x1000, 0x0800, 0x2001, 0x0000, 0x8000, 0x0000, + 0x0000, 0x3000, 0x0E00, 0x2007, 0x0000, 0xC000, 0x0000, + 0x0000, 0x2000, 0x0100, 0x2008, 0x0000, 0x4000, 0x0000, + 0x0000, 0x6000, 0x0200, 0x0004, 0x0000, 0x6000, 0x0000, + 0x0000, 0x4000, 0x0400, 0x2002, 0x0000, 0x2000, 0x0000, + 0x0000, 0xC000, 0x0400, 0x2002, 0x0000, 0x3000, 0x0000, + 0x0000, 0x8000, 0x0200, 0x2004, 0x0000, 0x1000, 0x0000, + 0x0001, 0x8000, 0x0200, 0x0004, 0x0000, 0x1800, 0x0000, + 0x0001, 0x0000, 0x0200, 0x2004, 0x0000, 0x0800, 0x0000, + 0x0003, 0x0000, 0x0100, 0x2008, 0x0000, 0x0C00, 0x0000, + 0x0002, 0x0000, 0x0100, 0x2008, 0x0000, 0x0400, 0x0000, + 0x0006, 0x0000, 0x0100, 0x0008, 0x0000, 0x0600, 0x0000, + 0x0004, 0x0000, 0x0080, 0x2010, 0x0000, 0x0200, 0x0000, + 0x000C, 0x0000, 0x0080, 0x2010, 0x0000, 0x0300, 0x0000, + 0x0008, 0x0000, 0x0040, 0x2020, 0x0000, 0x0100, 0x0000, + 0x0018, 0x0000, 0x0040, 0x0020, 0x0000, 0x0180, 0x0000, + 0x0010, 0x0000, 0x0020, 0x2040, 0x0000, 0x0080, 0x0000, + 0x0030, 0x0000, 0x0020, 0x2040, 0x0000, 0x00C0, 0x0000, + 0x0020, 0x0008, 0x0010, 0x2080, 0x0100, 0x0040, 0x0000, + 0x0060, 0x0008, 0x0010, 0x0080, 0x0100, 0x0060, 0x0000, + 0x0040, 0x0018, 0x0008, 0x2100, 0x0180, 0x0020, 0x0000, + 0x00C0, 0x0018, 0x0008, 0x2100, 0x0180, 0x0030, 0x0000, + 0x0080, 0x0038, 0x0004, 0x2200, 0x01C0, 0x0010, 0x0000, + 0x0180, 0x0028, 0x0004, 0x2200, 0x0140, 0x0018, 0x0000, + 0x0100, 0x0068, 0x0002, 0x1400, 0x0160, 0x0008, 0x0000, + 0x0300, 0x0048, 0x0002, 0x1400, 0x0120, 0x000C, 0x0000, + 0x0200, 0x00C8, 0x0001, 0x1800, 0x0130, 0x0004, 0x0000, + 0x0600, 0x0088, 0x0001, 0x1800, 0x0110, 0x0006, 0x0000, + 0x0400, 0x0188, 0x0000, 0x9000, 0x0118, 0x0002, 0x0000, + 0x0C00, 0x0108, 0x0000, 0x9000, 0x0108, 0x0003, 0x0000, + 0x0800, 0x0308, 0x0000, 0x5000, 0x010C, 0x0001, 0x0000, + 0x1800, 0x0208, 0x0000, 0x5000, 0x0104, 0x0001, 0x8000, + 0x1000, 0x0608, 0x0000, 0x3000, 0x0106, 0x0000, 0x8000, + 0x3000, 0x0408, 0x0000, 0x3000, 0x0102, 0x0000, 0xC000, + 0x2000, 0x0C08, 0x0000, 0x1000, 0x0103, 0x0000, 0x4000, + 0x6000, 0x0808, 0x0000, 0x1000, 0x0101, 0x0000, 0x6000, + 0xC000, 0x1808, 0x0000, 0x3800, 0x0101, 0x8000, 0x3000, + 0x8000, 0x1008, 0x0000, 0x1000, 0x0100, 0x8000, 0x1000, + 0x8000, 0x3008, 0x0000, 0x1000, 0x0100, 0xC000, 0x1000, + 0x8000, 0x2008, 0x0000, 0x1000, 0x0100, 0x4000, 0x1000, + 0xE000, 0x6008, 0x0000, 0x1000, 0x0100, 0x6000, 0x7000, + 0x4000, 0x4008, 0x0000, 0x1000, 0x0100, 0x2000, 0x2000, + 0x6000, 0xC008, 0x0000, 0x3800, 0x0100, 0x3000, 0x6000, + 0x3E00, 0x8008, 0x0000, 0x1000, 0x0100, 0x1007, 0xC000, + 0x0387, 0x8008, 0x0000, 0x1000, 0x0100, 0x1E1C, 0x0000, + 0x00F4, 0x0008, 0x0000, 0x1000, 0x0100, 0x03F0, 0x0000, + 0x001C, 0x0008, 0x0000, 0x1000, 0x0100, 0x0380, 0x0000, + 0x0000, 0x0008, 0x0000, 0x1000, 0x0100, 0x0000, 0x0000, + 0x0000, 0x0008, 0x0000, 0x1000, 0x0100, 0x0000, 0x0000, + 0x0000, 0x0008, 0x0000, 0x3800, 0x0100, 0x0000, 0x0000, + 0x0000, 0x000F, 0xFFFF, 0xFFFF, 0xFF00, 0x0000, 0x0000 +}; + +struct Image picture_image = +{ + 0, 0, 100, 105, 3, &picture_data[0], 0x7, 0x0, NULL +}; + + + +__chip UWORD classact_data[5814] = +{ + /* Plane 0 */ + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFF80, + 0xC226, 0x0F04, 0xE2BB, 0xD1A6, 0xE113, 0x0784, 0xE2BB, 0xD1A6, 0xE113, 0x0782, 0x715D, 0xE8D3, 0x7089, 0x83C2, 0x715D, 0xE8D3, 0x7089, 0x83C1, 0x3800, + 0xE092, 0x6ACD, 0x91EB, 0x9993, 0x5049, 0x354D, 0x91EB, 0x9993, 0x5049, 0x3566, 0xC8F5, 0xCCC9, 0xA824, 0x9AA6, 0xC8F5, 0xCCC9, 0xA824, 0x9AB3, 0x6400, + 0xC70B, 0xED09, 0x0AD2, 0x1314, 0x2385, 0xF689, 0x0AD2, 0x1314, 0x2385, 0xF684, 0x8569, 0x098A, 0x11C2, 0xFB44, 0x8569, 0x098A, 0x11C2, 0xFB42, 0x4200, + 0xD667, 0x73C2, 0x4A49, 0x461F, 0xAB33, 0xB9C2, 0x4A49, 0x461F, 0xAB33, 0xB9E1, 0x2524, 0xA30F, 0xD599, 0xDCE1, 0x2524, 0xA30F, 0xD599, 0xDCF0, 0x9200, + 0xC6E8, 0x0A1A, 0x8556, 0x087E, 0x0374, 0x051A, 0x8556, 0x087E, 0x0374, 0x050D, 0x42AB, 0x043F, 0x01BA, 0x028D, 0x42AB, 0x043F, 0x01BA, 0x0286, 0xA100, + 0xD25A, 0x470A, 0xD394, 0xF4C1, 0xC92D, 0x238A, 0xD394, 0xF4C1, 0xC92D, 0x2385, 0x69CA, 0x7A60, 0xE496, 0x91C5, 0x69CA, 0x7A60, 0xE496, 0x91C2, 0xB400, + 0xD2ED, 0xF50B, 0x7F7D, 0x987C, 0xC976, 0xFA8B, 0x7F7D, 0x987C, 0xC976, 0xFA85, 0xBFBE, 0xCC3E, 0x64BB, 0x7D45, 0xBFBE, 0xCC3E, 0x64BB, 0x7D42, 0xDF00, + 0xC864, 0xFB2D, 0x1B42, 0x38FC, 0xC432, 0x7DAD, 0x1B42, 0x38FC, 0xC432, 0x7D96, 0x8DA1, 0x1C7E, 0x6219, 0x3ED6, 0x8DA1, 0x1C7E, 0x6219, 0x3ECB, 0x4600, + 0xF461, 0x7EC8, 0x6714, 0x5B95, 0xDA30, 0xBF48, 0x6714, 0x5B95, 0xDA30, 0xBF64, 0x338A, 0x2DCA, 0xED18, 0x5FA4, 0x338A, 0x2DCA, 0xED18, 0x5FB2, 0x1900, + 0xF4EA, 0x902C, 0x5D80, 0xB355, 0xBA75, 0x4824, 0x5D80, 0xB355, 0xBA75, 0x4816, 0x2EC0, 0x59AA, 0xDD3A, 0xA412, 0x2EC0, 0x59AA, 0xDD3A, 0xA40B, 0x1700, + 0xDCFE, 0x38F0, 0x4F33, 0x765F, 0x8E7F, 0x1C70, 0x4F33, 0x765F, 0x8E7F, 0x1C78, 0x2799, 0xBB2F, 0xC73F, 0x8E38, 0x2799, 0xBB2F, 0xC73F, 0x8E3C, 0x1300, + 0xECB1, 0xE217, 0x3E31, 0x8A02, 0xD658, 0xF117, 0x3E31, 0x8A02, 0xD658, 0xF10B, 0x9F18, 0xC501, 0x6B2C, 0x788B, 0x9F18, 0xC501, 0x6B2C, 0x7885, 0xCF00, + 0xCAD5, 0xFC1D, 0x7981, 0x5A67, 0xA56F, 0xFE1D, 0x7981, 0x5A67, 0xA56A, 0xFE0E, 0xBCC0, 0xAD33, 0xD2B5, 0x7F0E, 0xBCC0, 0xAD33, 0xD2B5, 0x7F07, 0x5E00, + 0xE0C3, 0x5316, 0x3FD1, 0xCF27, 0x30FF, 0xFF96, 0x3FD1, 0xCF27, 0x3061, 0xA98B, 0x1FE8, 0xE793, 0x9830, 0xD4CB, 0x1FE8, 0xE793, 0x9830, 0xD4C5, 0x8F00, + 0xD4C7, 0x2E12, 0x73F3, 0x5E4F, 0x0BFF, 0xFFF2, 0x73F3, 0x5E4F, 0x0A63, 0x9709, 0x39F9, 0xAFF7, 0x8531, 0xCB89, 0x39F9, 0xAF27, 0x8531, 0xCB84, 0x9C00, + 0xC00F, 0xAE24, 0xFD5A, 0xE719, 0xA7FF, 0xFFFC, 0x7D5A, 0xE719, 0xA007, 0xD712, 0x7EAD, 0x7FFC, 0xD003, 0xEB92, 0x3EAD, 0x738C, 0xD003, 0xEB89, 0x3F00, + 0xE8A6, 0xCA11, 0x7221, 0xF161, 0x7FFF, 0xFFFD, 0x7221, 0xF161, 0x7453, 0x6508, 0xB910, 0xFFF8, 0xBA29, 0xB288, 0xB910, 0xF8B0, 0xBA29, 0xB284, 0x5C00, + 0xF86A, 0x1E23, 0x20AA, 0x9900, 0x7FFF, 0xFFFF, 0x20AA, 0x9900, 0x7C35, 0x0F11, 0x9055, 0x4FF8, 0x3E1A, 0x8791, 0x9055, 0x4C80, 0x3E1A, 0x8788, 0xC800, + 0xF141, 0x2C04, 0x37DE, 0x5809, 0x7FFA, 0x8FFF, 0x37DE, 0x5809, 0x78A0, 0x9602, 0x1BEF, 0x3FFC, 0xBC50, 0x4B02, 0x1BEF, 0x2C04, 0xBC50, 0x4B01, 0x0D00, + 0xF9EE, 0xE8CA, 0xAEBE, 0x5A70, 0xFFC0, 0x23FF, 0xAEBE, 0x5A70, 0xBCF7, 0x7465, 0x575F, 0x3FFC, 0x5E7B, 0xBA25, 0x575F, 0x2D38, 0x5E7B, 0xBA32, 0xAB00, + 0xE954, 0xE81C, 0x0E66, 0xDAAC, 0xFF30, 0x777F, 0x8E66, 0xDAAC, 0x94AA, 0x740E, 0x0733, 0x7FFD, 0x4A55, 0x3A0E, 0x0733, 0x6D56, 0x4A55, 0x3A07, 0x0300, + 0xD8A7, 0x8029, 0x074A, 0x8BA6, 0xFE43, 0xC83F, 0xC74A, 0x8BA6, 0x8C53, 0xC014, 0x83A5, 0x7F7E, 0x4629, 0xE414, 0x83A5, 0x45D3, 0x4629, 0xE00A, 0x4100, + 0xDA1F, 0xDFE3, 0x27C4, 0xA98F, 0xFC0F, 0xEFFF, 0xE7C4, 0xA98F, 0x8D0F, 0xEFF1, 0x93E2, 0x7F7E, 0xC687, 0xF7F1, 0x93E2, 0x54C7, 0xC687, 0xF7F8, 0xC900, + 0xE635, 0x34FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x4D35, 0x9D00, + 0xD7F8, 0x64FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x1932, 0xFC00, + 0xC90A, 0xF77F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDCF, 0xB200, + 0xC768, 0x777F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x1DCC, 0xE200, + 0xE65D, 0xD77F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x75C0, 0xEF00, + 0xDEC7, 0xE4FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF93B, 0x3F00, + 0xDDFE, 0x56FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x95BB, 0xB900, + 0xEE61, 0x667F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x5983, 0xFB00, + 0xE667, 0x74FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD36, 0x5400, + 0xE06D, 0xF97F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7E49, 0xFD00, + 0xC11F, 0xA87F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEA03, 0xFB00, + 0xF7F5, 0x41FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC89F, 0x3A00, + 0xFD5C, 0x37FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x9001, 0xD400, + 0xCFD8, 0x8B7F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x9806, 0x3800, + 0xEF5F, 0x31FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x221A, 0x7400, + 0xE5EC, 0xCBFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8C07, 0xF400, + 0xD71D, 0xF4FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x000E, 0x7600, + 0xFC9E, 0xF97F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x402F, 0xBD00, + 0xFF49, 0xF3FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x000C, 0xE000, + 0xC48E, 0xFBFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0011, 0x5900, + 0xF3F8, 0x7BFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0002, 0x8700, + 0xFBFD, 0xF57F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0082, 0x6E00, + 0xFEB3, 0x277F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0400, 0x7100, + 0xC7C6, 0x5B7F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0800, 0x6F00, + 0xD0AB, 0x537F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x080C, 0x3F00, + 0xE29A, 0xE37F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0025, 0x7F00, + 0xDB19, 0x777F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0038, 0x8800, + 0xCF22, 0xF37F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0135, 0xA000, + 0xDA35, 0xF5FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x001C, 0x3B00, + 0xD915, 0xF27F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x007A, 0x7B00, + 0xDEF0, 0xA2FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x5046, 0xBF00, + 0xCDF4, 0x48FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x60D6, 0x0F00, + 0xF772, 0x90FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x40D0, 0x0D00, + 0xC763, 0x307F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x20F9, 0xEB00, + 0xE6CD, 0xD07F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0074, 0xA900, + 0xD699, 0xF2FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x004A, 0x9F00, + 0xE669, 0x2B7F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x3022, 0x1200, + 0xCC23, 0x417F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x20BF, 0x4F00, + 0xD11A, 0x1A7F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x6072, 0x8B00, + 0xFBAF, 0xF07F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x01BB, 0xEF00, + 0xC2C5, 0x11FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x211A, 0xEE00, + 0xC226, 0x0F7F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x6821, 0x3800, + 0xE092, 0x6AFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x4053, 0x6400, + 0xC70B, 0xED7F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0082, 0x4200, + 0xD667, 0x73FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0100, 0x9200, + 0xC6E8, 0x0A7F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB146, 0xA100, + 0xD25A, 0x477F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x2202, 0xB400, + 0xD2ED, 0xF57F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0282, 0xDF00, + 0xC864, 0xFB7F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x410B, 0x4600, + 0xF461, 0x7EFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8052, 0x1900, + 0xF4EA, 0x907F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x118B, 0x1700, + 0xDCFE, 0x38FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x219C, 0x1300, + 0xECB1, 0xE27F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0505, 0xCF00, + 0xCAD5, 0xFC7F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0027, 0x5E00, + 0xE0C3, 0x5316, 0x3820, 0x0080, 0x4202, 0x4060, 0x0020, 0x0080, 0x4202, 0x4070, 0x0010, 0x0040, 0x2101, 0x2030, 0x0010, 0x0040, 0x2101, 0x2025, 0x8F00, + 0xD4C7, 0x2E12, 0x7400, 0x0180, 0x4404, 0x40E4, 0x0400, 0x0180, 0x4404, 0x40F2, 0x0200, 0x00C0, 0x2202, 0x2072, 0x0200, 0x00C0, 0x2202, 0x2074, 0x9C00, + 0xC00F, 0xAE24, 0xF880, 0x0882, 0x0A20, 0x00C0, 0x8080, 0x0882, 0x0A20, 0x00E0, 0x0040, 0x0441, 0x0510, 0x0060, 0x4040, 0x0441, 0x0510, 0x0079, 0x3F00, + 0xE8A6, 0xCA11, 0x7110, 0x0892, 0x0824, 0x82C0, 0x8110, 0x0892, 0x0824, 0x82E0, 0x4088, 0x0449, 0x0412, 0x4160, 0x4088, 0x0449, 0x0412, 0x4164, 0x5C00, + 0xF86A, 0x1E23, 0x2240, 0x20E2, 0x0042, 0x80C0, 0xC240, 0x20E2, 0x0042, 0x80E0, 0x6120, 0x1071, 0x0021, 0x4060, 0x6120, 0x1071, 0x0021, 0x4068, 0xC800, + 0xF141, 0x2C04, 0x3000, 0x21C2, 0x0457, 0x01C3, 0x8000, 0x21C2, 0x0457, 0x01E1, 0xC000, 0x10E1, 0x022B, 0x80E1, 0xC000, 0x10E1, 0x022B, 0x80F1, 0x0D00, + 0xF9EE, 0xE8CA, 0xA900, 0x2182, 0x0000, 0x0385, 0x0100, 0x2182, 0x0000, 0x0382, 0x8080, 0x10C1, 0x0000, 0x01C2, 0x8080, 0x10C1, 0x0000, 0x01D2, 0xAB00, + 0xE954, 0xE81C, 0x0910, 0x2142, 0x0815, 0x0303, 0x0110, 0x2142, 0x0815, 0x0301, 0x8088, 0x10A1, 0x040A, 0x8181, 0x8088, 0x10A1, 0x040A, 0x8187, 0x0300, + 0xD8A7, 0x8029, 0x0424, 0x6040, 0x1028, 0x2606, 0x0824, 0x6040, 0x1028, 0x2603, 0x0412, 0x3020, 0x0814, 0x1303, 0x0412, 0x3020, 0x0814, 0x130A, 0x4100, + 0xDA1F, 0xDFE3, 0x2008, 0x5040, 0x1070, 0x000C, 0x1008, 0x5040, 0x1070, 0x0006, 0x0804, 0x2820, 0x0838, 0x0006, 0x0804, 0x2820, 0x0838, 0x0008, 0xC900, + 0xE635, 0x34D6, 0x7538, 0x4080, 0x0043, 0x190C, 0x7121, 0xA204, 0x0209, 0x0106, 0x0850, 0x1040, 0x0030, 0xC084, 0x1A90, 0x68C1, 0x48A8, 0x8895, 0x9D00, + 0xE635, 0x34AC, 0xED33, 0xA6ED, 0x2635, 0x34AC, 0xED33, 0xA6ED, 0x2635, 0x34D6, 0x7699, 0xD376, 0x931A, 0x9A56, 0x7699, 0xD376, 0x931A, 0x9A6B, 0x3B00, + 0xD7F8, 0x6497, 0xE2E3, 0x6FF7, 0x97F8, 0x6497, 0xE2E3, 0x6FF7, 0x97F8, 0x64CB, 0xF171, 0xB7FB, 0xCBFC, 0x324B, 0xF171, 0xB7FB, 0xCBFC, 0x3265, 0xF800, + 0xC90A, 0xF77D, 0x94FA, 0x057D, 0x090A, 0xF77D, 0x94FA, 0x057D, 0x090A, 0xF73E, 0xCA7D, 0x02BE, 0x8485, 0x7BBE, 0xCA7D, 0x02BE, 0x8485, 0x7B9F, 0x6500, + 0xC768, 0x7767, 0x117E, 0x37DA, 0x8768, 0x7767, 0x117E, 0x37DA, 0x8768, 0x7733, 0x88BF, 0x1BED, 0x43B4, 0x3BB3, 0x88BF, 0x1BED, 0x43B4, 0x3B99, 0xC400, + 0xE65D, 0xD707, 0x79F2, 0x71F6, 0xA65D, 0xD707, 0x79F2, 0x71F6, 0xA65D, 0xD703, 0xBCF9, 0x38FB, 0x532E, 0xEB83, 0xBCF9, 0x38FB, 0x532E, 0xEB81, 0xDE00, + 0xDEC7, 0xE4D9, 0xF965, 0x3BFF, 0x5EC7, 0xE4D9, 0xF965, 0x3BFF, 0x5EC7, 0xE4EC, 0xFCB2, 0x9DFF, 0xAF63, 0xF26C, 0xFCB2, 0x9DFF, 0xAF63, 0xF276, 0x7E00, + 0xDDFE, 0x56DD, 0xCBC2, 0xFD5A, 0xDDFE, 0x56DD, 0xCBC2, 0xFD5A, 0xDDFE, 0x56EE, 0xE5E1, 0x7EAD, 0x6EFF, 0x2B6E, 0xE5E1, 0x7EAD, 0x6EFF, 0x2B77, 0x7200, + 0xEE61, 0x661F, 0xDBEE, 0x9B7E, 0x2E61, 0x661F, 0xDBEE, 0x9B7E, 0x2E61, 0x660F, 0xEDF7, 0x4DBF, 0x1730, 0xB30F, 0xEDF7, 0x4DBF, 0x1730, 0xB307, 0xF600, + 0xE667, 0x74B2, 0xA31D, 0xF96A, 0xA667, 0x74B2, 0xA31D, 0xF96A, 0xA667, 0x74D9, 0x518E, 0xFCB5, 0x5333, 0xBA59, 0x518E, 0xFCB5, 0x5333, 0xBA6C, 0xA800, + 0xE06D, 0xF94F, 0xEBBD, 0xABC0, 0x606D, 0xF94F, 0xEBBD, 0xABC0, 0x606D, 0xF927, 0xF5DE, 0xD5E0, 0x3036, 0xFCA7, 0xF5DE, 0xD5E0, 0x3036, 0xFC93, 0xFA00, + 0xC11F, 0xA81F, 0xD9FB, 0xFB99, 0x811F, 0xA81F, 0xD9FB, 0xFB99, 0x811F, 0xA80F, 0xECFD, 0xFDCC, 0xC08F, 0xD40F, 0xECFD, 0xFDCC, 0xC08F, 0xD407, 0xF600, + 0xF7F5, 0x41F9, 0xD34F, 0x83BD, 0xB7F5, 0x41F9, 0xD34F, 0x83BD, 0xB7F5, 0x41FC, 0xE9A7, 0xC1DE, 0xDBFA, 0xA0FC, 0xE9A7, 0xC1DE, 0xDBFA, 0xA0FE, 0x7400, + 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0040, + 0x2881, 0xA0C3, 0x1100, 0x0611, 0x1440, 0xD043, 0x1100, 0x0611, 0x1440, 0xD061, 0x8880, 0x0308, 0x8A20, 0x6821, 0x8880, 0x0308, 0x8A20, 0x6830, 0xC4C0, + 0x1105, 0x0102, 0x0400, 0x0608, 0x8882, 0x8082, 0x0400, 0x0608, 0x8882, 0x8081, 0x0200, 0x0304, 0x4441, 0x4041, 0x0200, 0x0304, 0x4441, 0x4040, 0x81C0, + 0x2014, 0x0206, 0x3101, 0x0C03, 0x500A, 0x0106, 0x3101, 0x0C03, 0x500A, 0x0103, 0x1880, 0x8601, 0xA805, 0x0083, 0x1880, 0x8601, 0xA805, 0x0081, 0x8CC0, + 0x0010, 0x040C, 0x3082, 0x1800, 0x4008, 0x020C, 0x3082, 0x1800, 0x4008, 0x0206, 0x1841, 0x0C00, 0x2004, 0x0106, 0x1841, 0x0C00, 0x2004, 0x0103, 0x0CC0, + 0x1002, 0xC504, 0x7080, 0x7401, 0xC801, 0x6284, 0x7080, 0x7401, 0xC801, 0x6282, 0x3840, 0x3A00, 0xE400, 0xB142, 0x3840, 0x3A00, 0xE400, 0xB141, 0x1CC0, + 0x0400, 0x8804, 0x2000, 0x080A, 0x0200, 0x4404, 0x2000, 0x080A, 0x0200, 0x4402, 0x1000, 0x0405, 0x0100, 0x2202, 0x1000, 0x0405, 0x0100, 0x2201, 0x08C0, + 0x0C00, 0x0A04, 0x8000, 0x6102, 0x0600, 0x0504, 0x8000, 0x6102, 0x0600, 0x0502, 0x4000, 0x3081, 0x0300, 0x0282, 0x4000, 0x3081, 0x0300, 0x0281, 0x20C0, + 0x1409, 0x0402, 0xA030, 0xC200, 0x0A04, 0x8202, 0xA030, 0xC200, 0x0A04, 0x8201, 0x5018, 0x6100, 0x0502, 0x4101, 0x5018, 0x6100, 0x0502, 0x4100, 0xA8C0, + 0x080A, 0x0107, 0x0061, 0x8040, 0x0405, 0x0087, 0x0061, 0x8040, 0x0405, 0x0083, 0x8030, 0xC020, 0x0202, 0x8043, 0x8030, 0xC020, 0x0202, 0x8041, 0xC0C0, + 0x0804, 0x4603, 0x0061, 0x0080, 0x0402, 0x230B, 0x0061, 0x0080, 0x0402, 0x2301, 0x8030, 0x8040, 0x0201, 0x1185, 0x8030, 0x8040, 0x0201, 0x1180, 0xC0C0, + 0x2000, 0x860F, 0x1040, 0x0180, 0x3000, 0x430F, 0x1040, 0x0180, 0x3000, 0x4307, 0x8820, 0x00C0, 0x1800, 0x2187, 0x8820, 0x00C0, 0x1800, 0x2183, 0xC4C0, + 0x0044, 0x1428, 0x0080, 0x4190, 0x2022, 0x0A28, 0x0080, 0x4190, 0x2022, 0x0A14, 0x0040, 0x20C8, 0x1011, 0x0514, 0x0040, 0x20C8, 0x1011, 0x050A, 0x00C0, + 0x2000, 0x00E2, 0x0430, 0x8190, 0x5000, 0x0062, 0x0430, 0x8190, 0x5000, 0x0071, 0x0218, 0x40C8, 0x2800, 0x0031, 0x0218, 0x40C8, 0x2800, 0x0038, 0x81C0, + 0x0404, 0x80E0, 0x0020, 0x0080, 0x4200, 0x0060, 0x0020, 0x0080, 0x4202, 0x4070, 0x0010, 0x0040, 0x2101, 0x2030, 0x0010, 0x0040, 0x2101, 0x2038, 0x00C0, + 0x0808, 0x81E4, 0x0400, 0x0180, 0x4400, 0x0004, 0x0400, 0x0180, 0x4404, 0x40F2, 0x0200, 0x0000, 0x2202, 0x2072, 0x0200, 0x00C0, 0x2202, 0x2079, 0x01C0, + 0x1440, 0x01C0, 0x0080, 0x0882, 0x0800, 0x0000, 0x8080, 0x0882, 0x0A20, 0x00E0, 0x0040, 0x0001, 0x0510, 0x0060, 0x4040, 0x0441, 0x0510, 0x0070, 0x00C0, + 0x1049, 0x05C0, 0x8110, 0x0892, 0x0000, 0x0000, 0x8110, 0x0892, 0x0824, 0x82E0, 0x4088, 0x0001, 0x0412, 0x4160, 0x4088, 0x0449, 0x0412, 0x4170, 0x20C0, + 0x0085, 0x01C0, 0xC240, 0x20E2, 0x0000, 0x0000, 0xC240, 0x20E2, 0x0042, 0x80E0, 0x6120, 0x1001, 0x0021, 0x4060, 0x6120, 0x1071, 0x0021, 0x4070, 0x30C0, + 0x08AE, 0x03C3, 0x8000, 0x21C2, 0x0000, 0x0000, 0x8000, 0x21C2, 0x0457, 0x01E1, 0xC000, 0x0001, 0x022B, 0x80E1, 0xC000, 0x10E1, 0x022B, 0x80F0, 0xE0C0, + 0x0000, 0x0705, 0x0100, 0x2182, 0x0000, 0x0000, 0x0100, 0x2182, 0x0000, 0x0382, 0x8080, 0x0001, 0x0000, 0x01C2, 0x8080, 0x10C1, 0x0000, 0x01C1, 0x40C0, + 0x102A, 0x0603, 0x0110, 0x2142, 0x0001, 0x0000, 0x0110, 0x2142, 0x0815, 0x0301, 0x8088, 0x0000, 0x040A, 0x8181, 0x8088, 0x10A1, 0x040A, 0x8180, 0xC0C0, + 0x2050, 0x4C06, 0x0824, 0x6040, 0x0008, 0x2600, 0x0824, 0x6040, 0x1028, 0x2603, 0x0412, 0x0000, 0x0814, 0x1303, 0x0412, 0x3020, 0x0814, 0x1301, 0x82C0, + 0x20E0, 0x000C, 0x1008, 0x5040, 0x0030, 0x0000, 0x1008, 0x5040, 0x1070, 0x0006, 0x0804, 0x0000, 0x0838, 0x0006, 0x0804, 0x2820, 0x0838, 0x0003, 0x04C0, + 0x00C2, 0x027F, 0xFFFF, 0xFFFC, 0x02FF, 0xFFF0, 0x2FFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC080, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8082, 0x00C0, + 0x0006, 0x027F, 0xFFFF, 0xFFFC, 0x05FF, 0xFFF0, 0x1FFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8140, 0x7FFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8085, 0x01C0, + 0x1454, 0x007F, 0xFFFF, 0xFFFC, 0x0BFF, 0xFFF8, 0x0FFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8080, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x01C0, + 0x1814, 0x807F, 0xFFFF, 0xFFF8, 0x05FF, 0xFFF8, 0x17FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8140, 0x7FFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x2003, 0x05C0, + 0x1020, 0x207F, 0xFFFF, 0xFFF8, 0x0BFF, 0xFFFE, 0xAFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x02E0, 0x3FFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0806, 0x00C0, + 0x0028, 0x027F, 0xFFFF, 0xFFF8, 0x17FF, 0xFFFF, 0x57FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0160, 0x7FFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0084, 0x80C0, + 0x0001, 0x007F, 0xFFFF, 0xFFF8, 0x0FFF, 0xFFFF, 0xFFFF, 0xE3FF, 0xFFFF, 0xFFFF, 0xFFFF, 0x02E0, 0x3FFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x4004, 0x02C0, + 0x0106, 0x107F, 0xFFFF, 0xFFF0, 0x17FF, 0xFFFF, 0xFFFF, 0x03FF, 0xFFFF, 0xFFFF, 0xFFFE, 0x05F0, 0x1FFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x840C, 0x04C0, + 0x0100, 0x007F, 0xFFFF, 0xFFF0, 0x2FFF, 0xFFFF, 0xFFF8, 0x02FF, 0xFFFF, 0xFFFF, 0xFFFE, 0x02F0, 0x2FFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0008, 0x88C0, + 0x0E82, 0x00FF, 0xFFFF, 0xFFF0, 0x17FF, 0xFFFF, 0xFFFF, 0x05FF, 0xFFFF, 0xFFFF, 0xFFFC, 0x05F0, 0x1FFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8030, 0x00C0, + 0x0C80, 0x11FF, 0xFFFF, 0xFFF0, 0x2FFF, 0xFFFF, 0xFFFE, 0x0BFF, 0xFFFF, 0xFFFF, 0xFFFC, 0x0BF8, 0x0FFF, 0xFFFF, 0xFFFE, 0x7FFF, 0xFFFF, 0x0470, 0x00C0, + 0x0802, 0x327F, 0xFFFF, 0xFFF0, 0x1FFF, 0xFFFF, 0xFFFE, 0x05FF, 0xFFFF, 0xFFFF, 0xFFFC, 0x05F8, 0x17FF, 0xFFFF, 0xFFFC, 0x7FFF, 0xFFFF, 0x0400, 0x44C0, + 0x0002, 0x407F, 0xFFFF, 0xFFF0, 0x2FFF, 0xFFFF, 0xFFFC, 0x0BFF, 0xFFFF, 0xFFFF, 0xFFF8, 0x0BF8, 0x0FFF, 0xFFFF, 0xFFF0, 0xBFFF, 0xFFFF, 0x0002, 0x08C0, + 0x3002, 0x607F, 0xFFFF, 0xFFF0, 0x1FFF, 0xFFFF, 0xFFFC, 0x17FF, 0xFFFF, 0xFFFF, 0xFFF8, 0x17FC, 0x07FF, 0xFFFF, 0xFFF0, 0x5FFF, 0xFFFF, 0x0000, 0x44C0, + 0x1080, 0x887F, 0xFFFF, 0xFFF0, 0x2FFF, 0xFFFF, 0xFFF8, 0x2FFF, 0xFFFF, 0xFFFF, 0xFFF8, 0x0BFC, 0x0BFF, 0xFFFF, 0xFFC0, 0xBFFF, 0xFFFF, 0x0000, 0x88C0, + 0x1202, 0x307F, 0xFFFF, 0xFFF0, 0x1FFF, 0xFFFF, 0xFFF8, 0x17FF, 0xFFFF, 0xFFFF, 0xFFF0, 0x17FC, 0x07FF, 0xFFFF, 0xFF81, 0x7FFF, 0xFFFF, 0x0000, 0x00C0, + 0x0000, 0x007F, 0xFFFF, 0xFFF0, 0x2FFF, 0xFFFF, 0xFFF0, 0x2FC0, 0x3FF0, 0x33F8, 0x19F0, 0x2FFE, 0x03FF, 0xFFE0, 0x7E00, 0x3FFF, 0xFFFF, 0x0000, 0x80C0, + 0x0221, 0x00FF, 0xFFFF, 0xFFF0, 0x1FFF, 0xFFFF, 0xFFF0, 0x5F0E, 0x1FE3, 0x83F1, 0xC1F0, 0x0000, 0x05FF, 0xFF8E, 0x1C00, 0x3FFF, 0xFFFF, 0x0000, 0x00C0, + 0x0024, 0x007F, 0xFFFF, 0xFFF0, 0x0FFF, 0xFFF8, 0x1FE0, 0xBC3A, 0x0F8E, 0x86C6, 0x82E0, 0x0000, 0x03FF, 0xFC7A, 0x1F02, 0xAFFF, 0xFFFF, 0x0000, 0x0BC0, + 0x2260, 0x007F, 0xFFFF, 0xFFF8, 0x1FFF, 0xFFF8, 0x1FE0, 0x5816, 0x070D, 0xC585, 0x6160, 0x0000, 0x01FF, 0xF876, 0x0705, 0x5FFF, 0xFFFF, 0x0008, 0x86C0, + 0x0404, 0x007F, 0xFFFF, 0xFFF8, 0x0FFF, 0xFFF0, 0x0FC0, 0xB02C, 0x0E0B, 0x8B0B, 0xC2E0, 0x0000, 0x00FF, 0xF1BC, 0x0E0B, 0xFFFF, 0xFFFF, 0x0001, 0x18C0, + 0x0400, 0x027F, 0xFFFF, 0xFFF8, 0x07FF, 0xFFF0, 0x17C1, 0x705C, 0x1617, 0xC505, 0xE5C0, 0x0000, 0x01FF, 0xE15C, 0x1605, 0xFFFF, 0xFFFF, 0x0001, 0x11C0, + 0x0100, 0x107F, 0xFFFF, 0xFFF8, 0x0FFF, 0xFFF0, 0x2F82, 0xF0B8, 0x2C0F, 0xEA0B, 0xFBC0, 0x0000, 0x00FF, 0xC6FC, 0x2C0B, 0xFFFF, 0xFFFF, 0x0003, 0x0AC0, + 0x3020, 0x207F, 0xFFFF, 0xFFFC, 0x07FF, 0xFFE0, 0x1F81, 0x7D50, 0x1407, 0xF603, 0xFD80, 0x5555, 0x007F, 0x857F, 0x5417, 0xFFFF, 0xFFFF, 0x0007, 0x10C0, + 0x2140, 0x207F, 0xFFFF, 0xFFFC, 0x03FF, 0xFFE0, 0x2F02, 0xFE00, 0x2C03, 0xFE01, 0xFF80, 0xAAAA, 0x80FF, 0x0BFF, 0xB82F, 0xFFFF, 0xFFFF, 0x0003, 0x00C0, + 0x0140, 0x00FF, 0xFFFF, 0xFFFE, 0x01FF, 0xFFC0, 0x5F05, 0xFC00, 0x5E00, 0xFF00, 0x7F81, 0x7FFF, 0x807F, 0x05FF, 0xF817, 0xFFFF, 0xFFFF, 0x001A, 0x00C0, + 0x00C0, 0x00FF, 0xFFFF, 0xFFFE, 0x01FF, 0xFF80, 0xBE0B, 0xE0E0, 0xBE00, 0x7F00, 0x3F00, 0xBFFF, 0xC03E, 0x0BFF, 0xF02F, 0xFFFF, 0xFFFF, 0x0002, 0x10C0, + 0x0088, 0x04FF, 0xFFFF, 0xFFFF, 0x00FF, 0xFF00, 0x5E05, 0xC340, 0x5F80, 0x7FC0, 0x1F01, 0x7FFF, 0xC07E, 0x17FF, 0xF05F, 0xFFFF, 0xFFFF, 0x0002, 0x11C0, + 0x0180, 0x007F, 0xFFFF, 0xFFFF, 0x003F, 0xFC00, 0xBC0B, 0x0280, 0xBF80, 0x3FE0, 0x2F00, 0xFFFF, 0xC03C, 0x0FFC, 0xE0BF, 0xFFFF, 0xFFFF, 0x0002, 0x00C0, + 0x02A0, 0x01FF, 0xFFFF, 0xFFFF, 0x800F, 0xF001, 0x7C16, 0x05C1, 0x67F0, 0x53F0, 0x1E01, 0x7FFF, 0xE01E, 0x17F9, 0xE05F, 0xFFFF, 0xFFFF, 0x0004, 0x00C0, + 0x0105, 0x417F, 0xFFFF, 0xFFFF, 0xC000, 0x0002, 0xF82C, 0x0B82, 0xCFF0, 0xA7F8, 0x2E02, 0xFFFF, 0xE03C, 0x0FF3, 0x80BF, 0xFFFF, 0xFFFF, 0x0008, 0x00C0, + 0x2201, 0x837F, 0xFFFF, 0xFFFF, 0xE000, 0x0005, 0xF814, 0x1781, 0x45F0, 0x41F8, 0x5E01, 0xFFFF, 0xE01C, 0x07E7, 0x417F, 0xFFFF, 0xFFFF, 0x0008, 0x60C0, + 0x0081, 0x037F, 0xFFFF, 0xFFFF, 0xF000, 0x000B, 0xF028, 0x0C00, 0x83E0, 0x83F0, 0xBC02, 0xFFFF, 0xF00C, 0x070E, 0x809F, 0xFFFF, 0xFFFF, 0x0008, 0x40C0, + 0x3080, 0x83FF, 0xFFFF, 0xFFFF, 0xFC00, 0x0017, 0xF058, 0x0000, 0x81E1, 0x41F1, 0x5C05, 0xFFFF, 0xF01E, 0x001D, 0x803F, 0xFFFF, 0xFFFF, 0x0000, 0x00C0, + 0x1100, 0x01FF, 0xFFFF, 0xFFFF, 0xFE00, 0x00AF, 0xC038, 0x0203, 0x038A, 0x80C6, 0xBC03, 0xFFFF, 0xF00E, 0x006B, 0x80EF, 0xFFFF, 0xFFFF, 0x0001, 0x02C0, + 0x2100, 0x017F, 0xFFFF, 0xFFFF, 0xFF50, 0x055F, 0x001C, 0x0505, 0x303D, 0x901D, 0x7805, 0xFFFF, 0xF807, 0x8157, 0xC15F, 0xFFFF, 0xFFFF, 0x0001, 0x00C0, + 0x0100, 0xC0FF, 0xFFFF, 0xFFFF, 0xFFEA, 0xAABF, 0xFABE, 0xAAAA, 0xEAEB, 0xEAFB, 0xFFAB, 0xFFFF, 0xFEAF, 0xAABF, 0xEABF, 0xFFFF, 0xFFFF, 0x0019, 0x08C0, + 0x0248, 0x82FF, 0xFFFF, 0xFFFF, 0xFFFD, 0x55FF, 0xD557, 0x57D5, 0xDD5F, 0xF757, 0xFF57, 0xFFFF, 0xFF57, 0xF57F, 0xF57F, 0xFFFF, 0xFFFF, 0x0000, 0x10C0, + 0x0841, 0x81FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0008, 0x30C0, + 0x0040, 0x06FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x10C0, + 0x2000, 0x847F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x10C0, + 0x2881, 0xA0FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0010, 0xC4C0, + 0x1105, 0x017F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x81C0, + 0x2014, 0x027F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0001, 0x8CC0, + 0x0010, 0x047F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0003, 0x0CC0, + 0x1002, 0xC57F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0001, 0x1CC0, + 0x0400, 0x887F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0001, 0x08C0, + 0x0C00, 0x0A7F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0001, 0x20C0, + 0x1409, 0x047F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xA8C0, + 0x080A, 0x017F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0001, 0xC0C0, + 0x0804, 0x467F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xC0C0, + 0x2000, 0x867F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0003, 0xC4C0, + 0x0044, 0x147F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x000A, 0x00C0, + 0x2000, 0x00FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0018, 0x81C0, + 0x0404, 0x80E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0018, 0x00C0, + 0x0808, 0x81E4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x01C0, + 0x1440, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00C0, + 0x1049, 0x05C0, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x20C0, + 0x0085, 0x01C0, 0xC000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x30C0, + 0x08AE, 0x03C3, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xE0C0, + 0x0000, 0x0705, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x40C0, + 0x102A, 0x0603, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xC0C0, + 0x2050, 0x4C06, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x82C0, + 0x20E0, 0x000C, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x04C0, + 0x00C2, 0x0208, 0x0000, 0x2000, 0x0020, 0x0000, 0x0000, 0x0080, 0x0060, 0x0000, 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x0010, 0x0002, 0x00C0, + 0x00C2, 0x0210, 0x0200, 0x4100, 0x00C2, 0x0210, 0x0200, 0x4100, 0x00C2, 0x0208, 0x0100, 0x2080, 0x0061, 0x0108, 0x0100, 0x2080, 0x0061, 0x0104, 0x00C0, + 0x0006, 0x0228, 0x0C08, 0x8008, 0x0006, 0x0228, 0x0C08, 0x8008, 0x0006, 0x0214, 0x0604, 0x4004, 0x0003, 0x0114, 0x0604, 0x4004, 0x0003, 0x010A, 0x03C0, + 0x1454, 0x0000, 0x0801, 0x8800, 0x1454, 0x0000, 0x0801, 0x8800, 0x1454, 0x0000, 0x0400, 0xC400, 0x0A2A, 0x0000, 0x0400, 0xC400, 0x0A2A, 0x0000, 0x02C0, + 0x1814, 0x8018, 0x2881, 0x8820, 0x1814, 0x8018, 0x2881, 0x8820, 0x1814, 0x800C, 0x1440, 0xC410, 0x0C0A, 0x400C, 0x1440, 0xC410, 0x0C0A, 0x4006, 0x0AC0, + 0x1020, 0x2030, 0x0001, 0x0800, 0x1020, 0x2030, 0x0001, 0x0800, 0x1020, 0x2018, 0x0000, 0x8400, 0x0810, 0x1018, 0x0000, 0x8400, 0x0810, 0x100C, 0x00C0, + 0x0028, 0x0224, 0x0082, 0x8000, 0x8028, 0x0224, 0x0082, 0x8000, 0x8028, 0x0212, 0x0041, 0x4000, 0x4014, 0x0112, 0x0041, 0x4000, 0x4014, 0x0109, 0x00C0, + 0x0001, 0x0020, 0x1005, 0x0004, 0x0001, 0x0020, 0x1005, 0x0004, 0x0001, 0x0010, 0x0802, 0x8002, 0x0000, 0x8010, 0x0802, 0x8002, 0x0000, 0x8008, 0x04C0, + 0x0106, 0x1060, 0x2001, 0x2000, 0x8106, 0x1060, 0x2001, 0x2000, 0x8106, 0x1030, 0x1000, 0x9000, 0x4083, 0x0830, 0x1000, 0x9000, 0x4083, 0x0818, 0x08C0, + 0x0100, 0x0044, 0x4042, 0x0004, 0x0100, 0x0044, 0x4042, 0x0004, 0x0100, 0x0022, 0x2021, 0x0002, 0x0080, 0x0022, 0x2021, 0x0002, 0x0080, 0x0011, 0x10C0, + 0x0E82, 0x0080, 0x0002, 0x100C, 0x8E82, 0x0080, 0x0002, 0x100C, 0x8E82, 0x00C0, 0x0001, 0x0806, 0x4741, 0x0040, 0x0001, 0x0806, 0x4741, 0x0060, 0x00C0, + 0x0C80, 0x1180, 0x0004, 0x0004, 0x0C80, 0x1180, 0x0004, 0x0004, 0x0C80, 0x11C0, 0x0002, 0x0002, 0x0640, 0x08C0, 0x0002, 0x0002, 0x0640, 0x08E0, 0x00C0, + 0x0802, 0x3202, 0x2030, 0x3000, 0x0802, 0x3202, 0x2030, 0x3000, 0x0802, 0x3201, 0x1018, 0x1800, 0x0401, 0x1901, 0x1018, 0x1800, 0x0401, 0x1900, 0x88C0, + 0x7FFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFC0, + /* Plane 2 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x1226, 0x0F04, 0xE2BB, 0xF1A6, 0xE913, 0x0784, 0xE2BB, 0xF1A6, 0xE913, 0x0782, 0x715D, 0xF8D3, 0x7489, 0x83C2, 0x715D, 0xF8D3, 0x7489, 0x83C1, 0x3800, + 0x2092, 0x6ACD, 0x91EB, 0xB993, 0x5049, 0x354D, 0x91EB, 0xB993, 0x5049, 0x3566, 0xC8F5, 0xDCC9, 0xA824, 0x9AA6, 0xC8F5, 0xDCC9, 0xA824, 0x9AB3, 0x6400, + 0x0F0B, 0xED09, 0x0AD2, 0x1314, 0x2785, 0xF689, 0x0AD2, 0x1314, 0x2785, 0xF684, 0x8569, 0x098A, 0x13C2, 0xFB44, 0x8569, 0x098A, 0x13C2, 0xFB42, 0x4200, + 0x3667, 0x73C2, 0x4A49, 0xC61F, 0xBB33, 0xB9C2, 0x4A49, 0xC61F, 0xBB33, 0xB9E1, 0x2524, 0xE30F, 0xDD99, 0xDCE1, 0x2524, 0xE30F, 0xDD99, 0xDCF0, 0x9200, + 0x26E8, 0x0A1A, 0x8556, 0x097E, 0x1374, 0x051A, 0x8556, 0x097E, 0x1374, 0x050D, 0x42AB, 0x04BF, 0x09BA, 0x028D, 0x42AB, 0x04BF, 0x09BA, 0x0286, 0xA100, + 0x125A, 0x470A, 0xD394, 0xF6C1, 0xC92D, 0x238A, 0xD394, 0xF6C1, 0xC92D, 0x2385, 0x69CA, 0x7B60, 0xE496, 0x91C5, 0x69CA, 0x7B60, 0xE496, 0x91C2, 0xB400, + 0x12ED, 0xF50B, 0x7F7D, 0x987C, 0xC976, 0xFA8B, 0x7F7D, 0x987C, 0xC976, 0xFA85, 0xBFBE, 0xCC3E, 0x64BB, 0x7D45, 0xBFBE, 0xCC3E, 0x64BB, 0x7D42, 0xDF00, + 0x0864, 0xFB2D, 0x1B46, 0x3CFC, 0xC432, 0x7DAD, 0x1B46, 0x3CFC, 0xC432, 0x7D96, 0x8DA3, 0x1E7E, 0x6219, 0x3ED6, 0x8DA3, 0x1E7E, 0x6219, 0x3ECB, 0x4600, + 0x3461, 0x7EC8, 0x671C, 0x5B95, 0xDA30, 0xBF48, 0x671C, 0x5B95, 0xDA30, 0xBF64, 0x338E, 0x2DCA, 0xED18, 0x5FA4, 0x338E, 0x2DCA, 0xED18, 0x5FB2, 0x1900, + 0x35EA, 0x902C, 0x5D84, 0xB355, 0xBAF5, 0x4824, 0x5D84, 0xB355, 0xBAF5, 0x4816, 0x2EC2, 0x59AA, 0xDD7A, 0xA412, 0x2EC2, 0x59AA, 0xDD7A, 0xA40B, 0x1700, + 0x1CFE, 0x38F0, 0x4F33, 0x765F, 0x8E7F, 0x1C70, 0x4F33, 0x765F, 0x8E7F, 0x1C78, 0x2799, 0xBB2F, 0xC73F, 0x8E38, 0x2799, 0xBB2F, 0xC73F, 0x8E3C, 0x1300, + 0x2CB9, 0xE217, 0xBE31, 0x8A02, 0xD65C, 0xF117, 0xBE31, 0x8A02, 0xD65C, 0xF10B, 0xDF18, 0xC501, 0x6B2E, 0x788B, 0xDF18, 0xC501, 0x6B2E, 0x7885, 0xEF00, + 0x0AD5, 0xFC1D, 0x7985, 0x5A67, 0xA560, 0x061D, 0x7985, 0x5A67, 0xA56A, 0xFE0E, 0xBCC2, 0xAD33, 0xD2B5, 0x7F0E, 0xBCC2, 0xAD33, 0xD2B5, 0x7F07, 0x5E00, + 0x22CB, 0x5316, 0x3FD5, 0xCF2F, 0x3100, 0x0016, 0x3FD5, 0xCF2F, 0x3165, 0xA98B, 0x1FEA, 0xE797, 0x98B2, 0xD4CB, 0x1FEA, 0xE797, 0x98B2, 0xD4C5, 0x8F00, + 0x14C7, 0x2E12, 0x73F3, 0x5E4F, 0x0800, 0x0012, 0x73F3, 0x5E4F, 0x0A63, 0x9709, 0x39F9, 0xA807, 0x8531, 0xCB89, 0x39F9, 0xAF27, 0x8531, 0xCB84, 0x9C00, + 0x000F, 0xAE25, 0xFD5A, 0xE719, 0xA000, 0x0005, 0x7D5A, 0xE719, 0xA007, 0xD712, 0xFEAD, 0x7004, 0xD003, 0xEB92, 0xBEAD, 0x738C, 0xD003, 0xEB89, 0x7F00, + 0x28A6, 0xCA11, 0x7221, 0xF161, 0x7000, 0x0001, 0x7221, 0xF161, 0x7453, 0x6508, 0xB910, 0xF004, 0xBA29, 0xB288, 0xB910, 0xF8B0, 0xBA29, 0xB284, 0x5C00, + 0x396A, 0x1E2B, 0x20AA, 0x9900, 0x6000, 0x0001, 0x20AA, 0x9900, 0x7CB5, 0x0F15, 0x9055, 0x4006, 0x3E5A, 0x8795, 0x9055, 0x4C80, 0x3E5A, 0x878A, 0xC800, + 0x3541, 0x2C0C, 0x37DE, 0x5809, 0x4002, 0xA000, 0x37DE, 0x5809, 0x7AA0, 0x9606, 0x1BEF, 0x2002, 0xBD50, 0x4B06, 0x1BEF, 0x2C04, 0xBD50, 0x4B03, 0x0D00, + 0x39EE, 0xE8EA, 0xBEBE, 0x5A70, 0x8014, 0xBA00, 0xBEBE, 0x5A70, 0xBCF7, 0x7475, 0x5F5F, 0x2002, 0x5E7B, 0xBA35, 0x5F5F, 0x2D38, 0x5E7B, 0xBA3A, 0xAF00, + 0x2954, 0xE81C, 0x0E66, 0xDAAC, 0x0032, 0x7700, 0x0E66, 0xDAAC, 0x94AA, 0x740E, 0x0733, 0x6001, 0x4A55, 0x3A0E, 0x0733, 0x6D56, 0x4A55, 0x3A07, 0x0300, + 0x18A7, 0xA029, 0x074A, 0x8BA6, 0x0053, 0xD840, 0x074A, 0x8BA6, 0x8C53, 0xD014, 0x83A5, 0x4080, 0x4629, 0xEC14, 0x83A5, 0x45D3, 0x4629, 0xE80A, 0x4100, + 0x1E1F, 0xDFE3, 0x27C4, 0xA98E, 0x024F, 0xEFE0, 0x27C4, 0xA98F, 0x8F0F, 0xEFF1, 0x93E2, 0x4080, 0xC787, 0xF7F1, 0x93E2, 0x54C7, 0xC787, 0xF7F8, 0xC900, + 0x2635, 0x3480, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4D35, 0x9D00, + 0x17F8, 0x6480, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1932, 0xFC00, + 0x090A, 0xF700, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xBDCF, 0xB200, + 0x0768, 0x7700, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1DCC, 0xE200, + 0x265D, 0xDF00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x77C0, 0xEF00, + 0x1EC7, 0xE480, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF93B, 0x3F00, + 0x1DFE, 0x5680, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x95BB, 0xB900, + 0x2E61, 0x6600, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5983, 0xFB00, + 0x2667, 0x7480, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xDD36, 0x5400, + 0x306D, 0xF900, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7E49, 0xFD00, + 0x011F, 0xA800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xEA03, 0xFB00, + 0x37F5, 0xC180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xEB9F, 0x3A00, + 0x3D5C, 0x3780, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF201, 0xD500, + 0x0FD8, 0x8B00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xDD36, 0x3800, + 0x2F5F, 0x3180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x339A, 0x7400, + 0x25EC, 0xCB80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xCD07, 0xF400, + 0x171F, 0xF480, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x82CE, 0x7600, + 0x3C9E, 0xF900, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41AF, 0xBD00, + 0x3F49, 0xF380, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x830C, 0xE000, + 0x048E, 0xFB80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4111, 0x5900, + 0x33F8, 0x7B80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xE106, 0xA700, + 0x3BFD, 0xF500, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x82B2, 0x6E00, + 0x3EB3, 0x2700, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3620, 0x7100, + 0x07C6, 0x5B00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6930, 0x6F00, + 0x10AB, 0x5300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2B3C, 0x3F00, + 0x229A, 0xE300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4725, 0x7F00, + 0x3B19, 0x7700, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xA238, 0x8800, + 0x0F22, 0xF300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4335, 0xA000, + 0x1A35, 0xF580, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x829C, 0x3B00, + 0x1915, 0xF200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x837A, 0x7B00, + 0x1EF2, 0xA280, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xD747, 0xBF00, + 0x0DF4, 0x4C80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xEDD6, 0x0F00, + 0x3772, 0x9080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5BD0, 0x0D00, + 0x0F63, 0x3000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x33F9, 0xEB00, + 0x2ECD, 0xD000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BF4, 0xA900, + 0x1E99, 0xF680, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x834A, 0x9F00, + 0x2E69, 0x3B00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xB522, 0x1200, + 0x1C23, 0x4100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2FBF, 0x4F00, + 0x311A, 0x1A00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7972, 0x8B00, + 0x3BAF, 0xF000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03FB, 0xEF00, + 0x02C5, 0x1180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xBB9A, 0xEE00, + 0x1226, 0x0F00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7C21, 0x3800, + 0x2092, 0x6A80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6553, 0x6400, + 0x0F0B, 0xED00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04B2, 0x4200, + 0x3667, 0x7380, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2300, 0x9200, + 0x26E8, 0x0A00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFD76, 0xA100, + 0x125A, 0x4700, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6E32, 0xB400, + 0x12ED, 0xF500, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x82B2, 0xDF00, + 0x0864, 0xFB00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xC12B, 0x4600, + 0x3461, 0x7E80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xA052, 0x1900, + 0x35EA, 0x9000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5BEB, 0x1700, + 0x1CFE, 0x3880, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x71DC, 0x1300, + 0x2CB9, 0xE200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8765, 0xEF00, + 0x0AD5, 0xFC00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x80E7, 0x5E00, + 0x22CB, 0x5316, 0x382E, 0x30D8, 0xCF9E, 0x5669, 0xC02E, 0x30D8, 0xCF9E, 0x5674, 0xE017, 0x186C, 0x67CF, 0x2B34, 0xE017, 0x186C, 0x67CF, 0x2B25, 0x8F00, + 0x14C7, 0x2E12, 0x740C, 0xA1B0, 0xF59C, 0x68ED, 0x8C0C, 0xA1B0, 0xF59C, 0x68F6, 0xC606, 0x50D8, 0x7ACE, 0x3476, 0xC606, 0x50D8, 0x7ACE, 0x3474, 0x9C00, + 0x000F, 0xAE25, 0xFAA5, 0x18E6, 0x5FF8, 0x28DB, 0x82A5, 0x18E6, 0x5FF8, 0x28ED, 0x8152, 0x8C73, 0x2FFC, 0x146D, 0xC152, 0x8C73, 0x2FFC, 0x1479, 0x7F00, + 0x28A6, 0xCA11, 0x71DE, 0x0E9E, 0x8BAC, 0x9AEE, 0x8DDE, 0x0E9E, 0x8BAC, 0x9AF7, 0x46EF, 0x074F, 0x45D6, 0x4D77, 0x46EF, 0x074F, 0x45D6, 0x4D64, 0x5C00, + 0x396A, 0x1E2B, 0x2355, 0x66FF, 0x83CA, 0xF0DC, 0xDF55, 0x66FF, 0x83CA, 0xF0EE, 0x6FAA, 0xB37F, 0xC1E5, 0x786E, 0x6FAA, 0xB37F, 0xC1E5, 0x786A, 0xC800, + 0x3541, 0x2C0C, 0x3021, 0xA7F6, 0x875F, 0x69FB, 0xC821, 0xA7F6, 0x875F, 0x69FD, 0xE410, 0xD3FB, 0x43AF, 0xB4FD, 0xE410, 0xD3FB, 0x43AF, 0xB4F3, 0x0D00, + 0x39EE, 0xE8EA, 0xB941, 0xA58F, 0x4308, 0x8BB5, 0x5141, 0xA58F, 0x4308, 0x8B9A, 0xA8A0, 0xD2C7, 0xA184, 0x45DA, 0xA8A0, 0xD2C7, 0xA184, 0x45DA, 0xAF00, + 0x2954, 0xE81C, 0x0999, 0x2553, 0x6B55, 0x8BE3, 0xF199, 0x2553, 0x6B55, 0x8BF1, 0xF8CC, 0x92A9, 0xB5AA, 0xC5F1, 0xF8CC, 0x92A9, 0xB5AA, 0xC5F7, 0x0300, + 0x18A7, 0xA029, 0x04B5, 0x7459, 0x73AC, 0x37D6, 0xF8B5, 0x7459, 0x73AC, 0x3FEB, 0x7C5A, 0xBA2C, 0xB9D6, 0x1BEB, 0x7C5A, 0xBA2C, 0xB9D6, 0x1FFA, 0x4100, + 0x1E1F, 0xDFE3, 0x203B, 0x5670, 0x72F0, 0x101C, 0xD83B, 0x5670, 0x72F0, 0x100E, 0x6C1D, 0xAB38, 0x3978, 0x080E, 0x6C1D, 0xAB38, 0x3978, 0x0808, 0xC900, + 0x2635, 0x34D6, 0x753E, 0x4C81, 0x20C7, 0x1DAD, 0x7127, 0xAE05, 0x4E0D, 0x6596, 0xCC73, 0x1444, 0xB670, 0xF2D4, 0xDA93, 0x6EC5, 0x7EE8, 0xBAD5, 0x9D00, + 0x2635, 0x34AC, 0xED33, 0xB6ED, 0x2635, 0x34AC, 0xED33, 0xB6ED, 0x2635, 0x34D6, 0x7699, 0xDB76, 0x931A, 0x9A56, 0x7699, 0xDB76, 0x931A, 0x9A6B, 0x3B00, + 0x17F8, 0x6497, 0xE2E3, 0x6FF7, 0x97F8, 0x6497, 0xE2E3, 0x6FF7, 0x97F8, 0x64CB, 0xF171, 0xB7FB, 0xCBFC, 0x324B, 0xF171, 0xB7FB, 0xCBFC, 0x3265, 0xF800, + 0x090A, 0xF77D, 0x94FA, 0x057D, 0x090A, 0xF77D, 0x94FA, 0x057D, 0x090A, 0xF73E, 0xCA7D, 0x02BE, 0x8485, 0x7BBE, 0xCA7D, 0x02BE, 0x8485, 0x7B9F, 0x6500, + 0x0768, 0x7767, 0x117E, 0x37DA, 0x8768, 0x7767, 0x117E, 0x37DA, 0x8768, 0x7733, 0x88BF, 0x1BED, 0x43B4, 0x3BB3, 0x88BF, 0x1BED, 0x43B4, 0x3B99, 0xC400, + 0x265D, 0xDF07, 0x79F2, 0x71F6, 0xA65D, 0xDF07, 0x79F2, 0x71F6, 0xA65D, 0xDF03, 0xBCF9, 0x38FB, 0x532E, 0xEF83, 0xBCF9, 0x38FB, 0x532E, 0xEF81, 0xDE00, + 0x1EC7, 0xE4D9, 0xF965, 0x3BFF, 0x5EC7, 0xE4D9, 0xF965, 0x3BFF, 0x5EC7, 0xE4EC, 0xFCB2, 0x9DFF, 0xAF63, 0xF26C, 0xFCB2, 0x9DFF, 0xAF63, 0xF276, 0x7E00, + 0x1DFE, 0x56DD, 0xCBC2, 0xFD5A, 0xDDFE, 0x56DD, 0xCBC2, 0xFD5A, 0xDDFE, 0x56EE, 0xE5E1, 0x7EAD, 0x6EFF, 0x2B6E, 0xE5E1, 0x7EAD, 0x6EFF, 0x2B77, 0x7200, + 0x2E61, 0x661F, 0xDBEE, 0x9B7E, 0x2E61, 0x661F, 0xDBEE, 0x9B7E, 0x2E61, 0x660F, 0xEDF7, 0x4DBF, 0x1730, 0xB30F, 0xEDF7, 0x4DBF, 0x1730, 0xB307, 0xF600, + 0x2667, 0x74B2, 0xA31D, 0xF96A, 0xA667, 0x74B2, 0xA31D, 0xF96A, 0xA667, 0x74D9, 0x518E, 0xFCB5, 0x5333, 0xBA59, 0x518E, 0xFCB5, 0x5333, 0xBA6C, 0xA800, + 0x306D, 0xF94F, 0xEBBD, 0xAFC0, 0x706D, 0xF94F, 0xEBBD, 0xAFC0, 0x706D, 0xF927, 0xF5DE, 0xD7E0, 0x3836, 0xFCA7, 0xF5DE, 0xD7E0, 0x3836, 0xFC93, 0xFA00, + 0x011F, 0xA81F, 0xD9FB, 0xFB99, 0x811F, 0xA81F, 0xD9FB, 0xFB99, 0x811F, 0xA80F, 0xECFD, 0xFDCC, 0xC08F, 0xD40F, 0xECFD, 0xFDCC, 0xC08F, 0xD407, 0xF600, + 0x37F5, 0xC1F9, 0xD34F, 0x83BD, 0xB7F5, 0xC1F9, 0xD34F, 0x83BD, 0xB7F5, 0xC1FC, 0xE9A7, 0xC1DE, 0xDBFA, 0xE0FC, 0xE9A7, 0xC1DE, 0xDBFA, 0xE0FE, 0x7400, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +struct Image classact_image = +{ + 0, 0, 298, 102, 3, &classact_data[0], 0x7, 0x0, NULL +}; + +__chip UWORD sb_data[][64] = +{ + /* Cut + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0e01, 0xc000, 0x1107, 0x8000, + 0x191e, 0x0000, 0x0f78, 0x0000, + 0x01e0, 0x0000, 0x0f78, 0x0000, + 0x191e, 0x0000, 0x1107, 0x8000, + 0x0e01, 0xc000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + /* Copy + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x01fe, 0x0000, 0x0186, 0x0000, + 0x01fe, 0x0000, 0x0630, 0x8000, + 0x1fff, 0xe000, 0x1f87, 0xe000, + 0x1f03, 0xe000, 0x1f03, 0xe000, + 0x1f03, 0xe000, 0x1f87, 0xe000, + 0x1fff, 0xe000, 0x1fff, 0xe000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0078, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0060, 0x0000, 0x0044, 0x0000, + 0x0004, 0x0000, 0x0018, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + /* Paste + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x003f, 0x0000, + 0x0021, 0x0000, 0x007f, 0x8000, + 0x0080, 0x4000, 0x0081, 0xc000, + 0x0780, 0x4000, 0x0861, 0xc000, + 0x0f20, 0x4000, 0x0891, 0xc000, + 0x0950, 0x4000, 0x0251, 0xc000, + 0x05e0, 0x4000, 0x0880, 0xc000, + 0x307f, 0x8000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0006, 0x0000, 0x0000, 0x0000, + 0x0007, 0x0000, 0x0002, 0x0000, + 0x0002, 0x0000, 0x0782, 0x0000, + 0x00c2, 0x0000, 0x0062, 0x0000, + 0x0222, 0x0000, 0x0422, 0x0000, + 0x0802, 0x0000, 0x1002, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + /* Erase + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x002e, 0xb800, + 0x005d, 0x7800, 0x00ba, 0xf800, + 0x01f5, 0xf000, 0x03eb, 0xe000, + 0x05f7, 0xc000, 0x08ff, 0x8000, + 0x107f, 0x0000, 0x103e, 0x0000, + 0x101c, 0x0000, 0x0828, 0x0000, + 0x0450, 0x0000, 0x02a0, 0x0000, + 0x01ff, 0xf800, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x001a, 0xa800, + 0x0035, 0x5000, 0x006a, 0xa000, + 0x0015, 0x4000, 0x000a, 0x8000, + 0x0205, 0x0000, 0x0502, 0x0000, + 0x0a80, 0x0000, 0x0540, 0x0000, + 0x0aa0, 0x0000, 0x0540, 0x0000, + 0x0280, 0x0000, 0x0100, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + /* Mail + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0800, 0xd000, + 0x0094, 0xd000, 0x0000, 0x1000, + 0x0060, 0x1000, 0x0000, 0x1000, + 0x00d0, 0x1000, 0x0000, 0x1000, + 0x1fff, 0xf000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0018, 0x0000, 0x007c, 0x0000, + 0x01ca, 0x0000, 0x0515, 0x0000, + 0x3fff, 0xe000, 0x2bff, 0xe000, + 0x3e97, 0xe000, 0x3fff, 0xe000, + 0x3f6f, 0xe000, 0x3fff, 0xe000, + 0x3fd7, 0xe000, 0x3fff, 0xe000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + /* Time + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x0070, 0x0000, + 0x0376, 0x0000, 0x06db, 0x0000, + 0x0505, 0x0000, 0x0262, 0x0000, + 0x0421, 0x0000, 0x0421, 0x0000, + 0x0439, 0x0000, 0x0401, 0x0000, + 0x0401, 0x0000, 0x0202, 0x0000, + 0x0104, 0x0000, 0x01fc, 0x0000, + 0x0306, 0x0000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0020, 0x0000, + 0x0000, 0x0000, 0x0098, 0x0000, + 0x01dc, 0x0000, 0x01dc, 0x0000, + 0x01c4, 0x0000, 0x01fc, 0x0000, + 0x01fc, 0x0000, 0x00f8, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + /* Date + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x037b, 0x0000, + 0x0285, 0x8000, 0x0201, 0x8000, + 0x0201, 0x8000, 0x0299, 0x8000, + 0x02a7, 0x8000, 0x052b, 0x8000, + 0x0535, 0x8000, 0x080d, 0x8000, + 0x1ff5, 0x8000, 0x0205, 0x8000, + 0x0201, 0x8000, 0x03ff, 0x8000, + 0x01ff, 0x8000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x017a, 0x0000, 0x01fe, 0x0000, + 0x01fe, 0x0000, 0x0166, 0x0000, + 0x0158, 0x0000, 0x02d4, 0x0000, + 0x02c8, 0x0000, 0x07f2, 0x0000, + 0x0000, 0x0000, 0x00aa, 0x0000, + 0x0154, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + /* Disk + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x0038, 0x0000, + 0x0054, 0x0000, 0x008e, 0x0000, + 0x0107, 0x0000, 0x0207, 0x8000, + 0x040b, 0xc000, 0x0417, 0xe000, + 0x0e29, 0xe000, 0x0750, 0xc000, + 0x03a0, 0x8000, 0x01d9, 0x8000, + 0x00eb, 0x0000, 0x0076, 0x0000, + 0x003c, 0x0000, 0x0010, 0x0000, + /* Plane 1 */ + 0x0020, 0x0000, 0x0070, 0x0000, + 0x00c0, 0x0000, 0x01a4, 0x0000, + 0x0352, 0x0000, 0x06ab, 0x0000, + 0x0d53, 0x8000, 0x12a1, 0xc000, + 0x1d46, 0xc000, 0x0e89, 0x0000, + 0x0710, 0x0000, 0x03ac, 0x8000, + 0x01d1, 0x0000, 0x00e2, 0x0000, + 0x0074, 0x0000, 0x0000, 0x0000 + }, + /* Spray Paint + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x0186, 0xc000, + 0x01bf, 0x0000, 0x07ec, 0xc000, + 0x0423, 0x0000, 0x0ff0, 0xc000, + 0x1008, 0x0000, 0x1078, 0x0000, + 0x1078, 0x0000, 0x1078, 0x0000, + 0x1078, 0x0000, 0x1078, 0x0000, + 0x1008, 0x0000, 0x1038, 0x0000, + 0x1008, 0x0000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0006, 0xc000, + 0x003f, 0x0000, 0x000c, 0xc000, + 0x0243, 0x0000, 0x0000, 0xc000, + 0x02e0, 0x0000, 0x0440, 0x0000, + 0x0470, 0x0000, 0x0440, 0x0000, + 0x0470, 0x0000, 0x0440, 0x0000, + 0x0440, 0x0000, 0x0440, 0x0000, + 0x0440, 0x0000, 0x0000, 0x0000 + }, + /* Print + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x03fe, 0x0000, + 0x0205, 0x0000, 0x02a7, 0x0000, + 0x0201, 0x0000, 0x02d5, 0x0000, + 0x0201, 0x0000, 0x0601, 0x8000, + 0x1fff, 0xe000, 0x2000, 0x1000, + 0x2803, 0xd000, 0x2000, 0x1000, + 0x3fff, 0xf000, 0x1fff, 0xe000, + 0x0fff, 0xc000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x01fa, 0x0000, 0x0118, 0x0000, + 0x01fe, 0x0000, 0x0102, 0x0000, + 0x01fe, 0x0000, 0x01fe, 0x0000, + 0x0000, 0x0000, 0x1555, 0x4000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + } +}; + +/* Image structures for above data. + */ +struct Image sb_images[] = +{ + { 0, 0, 22, 16, 2, sb_data[0], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[1], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[2], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[3], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[4], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[5], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[6], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[7], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[8], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[9], 0x03, 0x00, NULL }, +}; + +/* Custom show/hide images. + */ +__chip UWORD hide_data[28] = +{ + /* Plane 0 */ + 0x0000, 0xC000, 0xC000, 0xC002, + 0xC203, 0xC203, 0xC203, 0xC203, + 0x6203, 0x3203, 0x1A03, 0x0FFF, + 0x0FFF, 0x0600, + /* Plane 1 */ + 0x2000, 0x7000, 0x781C, 0x6CFE, + 0x77F6, 0x7FDE, 0x6F76, 0x77DE, + 0x3F72, 0x1FCE, 0x0FBE, 0x07FE, + 0x0600, 0x0000 +}; + +struct Image hide_image = +{ + 0,0, 16,14, 2, &hide_data[0], 0x3,0x0, NULL +}; + +__chip UWORD show_data[28] = +{ + /* Plane 0 */ + 0x0180, 0x07C0, 0x1FE0, 0x7F70, + 0xFF78, 0xBF7C, 0xDF7E, 0x6C7F, + 0x37FC, 0x1BF1, 0x0DC6, 0x0618, + 0x0260, 0x0180, + /* Plane 1 */ + 0x0000, 0x0180, 0x07C0, 0x1FE0, + 0x7F70, 0x3FF8, 0x5F7C, 0x2EFC, + 0x17F2, 0x0BCE, 0x0538, 0x02E0, + 0x0080, 0x0000 +}; + +struct Image show_image = +{ + 0,0, 16,14, 2, &show_data[0], 0x3,0x0, NULL +}; + +__chip UWORD leaf_data[28] = +{ + /* Plane 0 */ + 0xFF00, 0x8180, 0x8140, 0x8120, + 0x81F0, 0x8030, 0x8030, 0x8030, + 0x8030, 0x8030, 0x8030, 0x8030, + 0xFFF0, 0x7FF0, + /* Plane 1 */ + 0x0000, 0x7E00, 0x7E80, 0x7EC0, + 0x7E00, 0x7FC0, 0x7FC0, 0x7FC0, + 0x7FC0, 0x7FC0, 0x7FC0, 0x7FC0, + 0x0000, 0x0000 +}; + +struct Image leaf_image = +{ + 0,0, 12,14, 2, &leaf_data[0], 0x3,0x0, NULL +}; + diff --git a/Demo/Images.c.info b/Demo/Images.c.info new file mode 100644 index 0000000000000000000000000000000000000000..2f77346a2cbdb366655664bd7df30732decd9e98 GIT binary patch literal 296 zcmZWiI|{-;5S>lbEhNN3&?1lVvI4Ho wz~#p;)hXP_`hohQ#Q364zANj3a*RqPvQT2OwmmqdKGUn~JCo%iP0gd$7X{5$k^lez literal 0 HcmV?d00001 diff --git a/Demo/Images.o b/Demo/Images.o new file mode 100644 index 0000000000000000000000000000000000000000..e6ccd1bf18ab074f0e9a9928f9300fcec3f948db GIT binary patch literal 18244 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 dLogeA(G1^9UW`~l_{s(HhfZhNA literal 0 HcmV?d00001 diff --git a/Demo/SCOPTIONS b/Demo/SCOPTIONS new file mode 100644 index 0000000..3833cc5 --- /dev/null +++ b/Demo/SCOPTIONS @@ -0,0 +1,11 @@ +NOSTACKCHECK +NOSTACKEXTEND +ERRORREXX +SAVEDS +SMALLCODE +SMALLDATA +NOERRORCONSOLE +MEMORYSIZE=HUGE +OPTIMIZERTIME +LIBRARY=lib:classact.lib +LIBRARY=lib:debug.lib diff --git a/Demo/SMakeFile b/Demo/SMakeFile new file mode 100644 index 0000000..b19362e --- /dev/null +++ b/Demo/SMakeFile @@ -0,0 +1,16 @@ +# +# Makefile automatically generated by MKMK V6.55 +# Sat Aug 19 12:47:39 1995 +# + +OBJS= ClassActDemo.o Images.o + +SBGen: $(OBJS) + sc link to ClassActDemo with << +$(OBJS) +< + +ClassActDemo.o: ClassActDemo.c + +Images.o: Images.c + diff --git a/Demo/SMakeFile.info b/Demo/SMakeFile.info new file mode 100644 index 0000000000000000000000000000000000000000..af021ab4525f2f546da0a7460da56c5ecb059dae GIT binary patch literal 640 zcmZY5Jxc>Y5C-7c%O#f+1E;7FL}Fo;B3NiTA^1@!2vKeuK@hYNf`X7n5D!gZVG(Pa zC_&=d_!C6TKQNFoeqdphN`gk$nVl002kxGIXLfJlo;?tNCFWoNvXF!*X5rLd0_y%N zVedKj)uvO=Gy@#c^H-UcS!ZDgBH%nuIKLzJ7HnE?0Q8cj&|_8%LxBCXGiikQD(C7_ zjrw5Kb00Lnx>U-XkK`@N>Pj7&3=f>u_66suFrS6<#0>XiPw0WxpYNPSnT2*QwYA>q z0=`Qr-GPRb-k{8*{<Gp4b8LTwbv-lyu;Zx0qWh6+ Ryx&yWykpD7twMp8_79q!ryBqO literal 0 HcmV?d00001 diff --git a/Examples.info b/Examples.info new file mode 100644 index 0000000000000000000000000000000000000000..e7b7793750618e36e3c8b1d433bd668daf51f164 GIT binary patch literal 628 zcmZvYKT88a5XIkKE_V^cf0c-ZXeuj3G+13Kv9z%fD=R;NZSG^3(jp=$thBck!Ac>W zh4x+{@xb7^@9mwr;s$npJF_#h%zIye0nK6?`2IJh9JDdak9-#So-cVS&d6wD_%qkJ0 zCAJ-B>>9*Z&lWsm`=C4v+pfy@s|_LiyonDhK2cqcE#;Q6Q^Xx{gpM8K&5E0z-_|on zqC5*n*em)I_2rcxYOYk=?VKIf@4Pak-C_5bc8Z>6PSDk;uwdj!Ekvh9ly;pup45Ud vElPd=ZyIRsFikXXy7Rj7H)!g=BX!Z0byHFc?mc!|kko=K4+q!oZeacZt?D|ViDz3npv;&-%eqWrTZ*$D7c2KIjzdL2|s^V&L7o0nHyCAs>vN|l>I=g{c19l<2rvLx| literal 0 HcmV?d00001 diff --git a/Examples/ARexx/ARexxExample b/Examples/ARexx/ARexxExample new file mode 100644 index 0000000000000000000000000000000000000000..42d3556b5f5984f054e9debc248b891ccdce1df5 GIT binary patch literal 7976 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 +#include +#include + +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#ifdef _DCC +#define SAVEDS __geta4 +#define ASM +#define REG_A0 __A0 +#define REG_A1 __A1 +#else +#define SAVEDS __saveds +#define ASM __asm +#define REG_A0 register __a0 +#define REG_A1 register __a1 +#endif + +#ifdef _DCC +extern __stkargs ULONG HookEntry(); +#else +extern __stdargs ULONG HookEntry(); +#endif + +/* Gadget IDs. + */ +#define GAD_QUIT 1 + +/* ARexx command IDs. + */ +enum { REXX_NAME, REXX_VERSION, REXX_AUTHOR, REXX_SEND, REXX_DATE }; + + +/* Protos for the reply hook and ARexx command functions. + */ +VOID SAVEDS reply_callback(struct Hook *, Object *, struct RexxMsg *); +VOID ASM rexx_Name(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *); +VOID ASM rexx_Version(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *); +VOID ASM rexx_Author(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *); +VOID ASM rexx_Send(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *); +VOID ASM rexx_Date(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *); + +/* Buffer for the system date. + */ +UBYTE systemDate[32]; + +/* Our reply hook function. + */ +struct Hook reply_hook; + +/* The following commands are valid for this demo. + */ +struct ARexxCmd Commands[] = +{ + { "NAME", REXX_NAME, rexx_Name, NULL, NULL, }, + { "VERSION", REXX_VERSION, rexx_Version, NULL, NULL, }, + { "AUTHOR", REXX_AUTHOR, rexx_Author, NULL, NULL, }, + { "SEND", REXX_SEND, rexx_Send, "TEXT/F", NULL, }, + { "DATE", REXX_DATE, rexx_Date, "SYSTEM/S", NULL, }, + { NULL, NULL, NULL, NULL, NULL, } +}; + + +/* Starting point. + */ +int main(int argc, char *argv[]) +{ + Object *arexx_obj; + + if (!ButtonBase) return(20); + + /* Create host object. + */ + if (arexx_obj = ARexxObject, + AREXX_HostName, "AREXXDEMO", + AREXX_Commands, Commands, + AREXX_NoSlot, TRUE, + AREXX_ReplyHook, &reply_hook, + End) + { + Object *win_obj; + + /* Create the window object. + */ + if (win_obj = WindowObject, + WA_Title, "ClassAct arexx.class Demo", + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_DepthGadget, TRUE, + WINDOW_ParentGroup, LayoutObject, + LAYOUT_AddChild, ButtonObject, + GA_Text, "_Quit", + GA_ID, GAD_QUIT, + GA_RelVerify, TRUE, + ButtonEnd, + LayoutEnd, + EndWindow) + { + struct Window *window; + + /* try to open the window. + */ + if (window = (struct Window *)CA_OpenWindow(win_obj)) + { + ULONG wnsig = 0, rxsig = 0, signal, result, Code; + BOOL running = TRUE; + + /* Setup the reply callback hook. + */ + reply_hook.h_Entry = HookEntry; + reply_hook.h_SubEntry = reply_callback; + reply_hook.h_Data = NULL; + + /* Try to start the macro "Demo.rexx". Note that the + * current directory and REXX: will be searched for this + * macro. Our reply hook will get the results of our + * efforts to start this macro. To be totally robust, we + * should have also passed pointers for the various result + * variables. + */ + DoMethod(arexx_obj, AM_EXECUTE, "Demo.rexx", NULL, NULL, NULL, NULL, NULL); + + /* Obtain wait masks. + */ + GetAttr(WINDOW_SigMask, win_obj, &wnsig); + GetAttr(AREXX_SigMask, arexx_obj, &rxsig); + + /* Event loop... + */ + do + { + signal = Wait(wnsig | rxsig | SIGBREAKF_CTRL_C); + + /* ARexx event? + */ + if (signal & rxsig) + CA_HandleRexx(arexx_obj); + + /* Window event? + */ + if (signal & wnsig) + { + while ((result = CA_HandleInput(win_obj, &Code)) != WMHI_LASTMSG) + { + switch (result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + running = FALSE; + break; + + case WMHI_GADGETUP: + switch(result & WMHI_GADGETMASK) + { + case GAD_QUIT: + running = FALSE; + break; + } + break; + + default: + break; + } + } + } + + if (signal & SIGBREAKF_CTRL_C) + { + running = FALSE; + } + } + while (running); + } + else + puts ("Could not open the window"); + DisposeObject(win_obj); + } + else + puts("Could not create the window object"); + DisposeObject(arexx_obj); + } + else + puts("Could not create the ARexx host."); + + return(0); +} + +#ifdef _DCC +int wbmain(struct WBStartup *wbs) +{ + return(main(0, NULL)); +} +#endif + + +/* Note the use of SAVEDS, it is required for the callback + * ARexx command functions if access the global data such as + * systemData[] made in the callback. + */ + +/* This function gets called whenever we get an ARexx reply. In this example, + * we will see a reply come back from the REXX server when it has finished + * attempting to start the Demo.rexx macro. + */ +VOID SAVEDS reply_callback(struct Hook *hook, Object *o, struct RexxMsg *rxm) +{ + Printf("Args[0]: %s\nResult1: %ld Result2: %ld\n", + rxm->rm_Args[0], rxm->rm_Result1, rxm->rm_Result2); +} + +/* NAME + */ +VOID SAVEDS ASM rexx_Name(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm) +{ + /* return the program name. + */ + ac->ac_Result = "ARexxTest"; +} + +/* VERSION + */ +VOID SAVEDS ASM rexx_Version(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm) +{ + /* return the program version. + */ + ac->ac_Result = "1.0"; +} + +/* AUTHOR + */ +VOID SAVEDS ASM rexx_Author(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm) +{ + /* return the authors name. + */ + ac->ac_Result = "Phantom Development LLC"; +} + +/* SEND + */ +VOID SAVEDS ASM rexx_Send(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm) +{ + /* Print some text + */ + if (ac->ac_ArgList[0]) + Printf("%s\n", (STRPTR)ac->ac_ArgList[0]); +} + +/* DATE + */ +VOID SAVEDS ASM rexx_Date(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm) +{ + struct DateTime dt; + + /* SYSTEM switch specified? + */ + if (!ac->ac_ArgList[0]) + { + /* return the compilation date. + */ + ac->ac_Result = "11-10-95"; + } + else + { + /* compute system date and store in systemDate buffer + */ + DateStamp((struct DateStamp *)&dt); + + dt.dat_Format = FORMAT_USA; + dt.dat_Flags = 0; + dt.dat_StrDay = NULL; + dt.dat_StrDate = systemDate; + dt.dat_StrTime = NULL; + + DateToStr(&dt); + + /* return system date + */ + ac->ac_Result = systemDate; + } +} + diff --git a/Examples/ARexx/ARexxExample.c.info b/Examples/ARexx/ARexxExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..693c7e78cdc190754c7c13e0c54b7a2aaa2353d0 GIT binary patch literal 300 zcmaDXz`)1=0^JNk3^EK746HytBm0~i9AHs&f{}%RePXQzd;jVQK&f^hWV2*g}(>nKkR4VzwnoV{lh*6_6xuHZ-3Y$-+bZU{r^Dv z|Aqfqhd=D$XTI?77DWDk#O)9J8{{wi&#niX^FJP99>`pv@m#*8IVG88nW^O<%UA$C Csa5a* literal 0 HcmV?d00001 diff --git a/Examples/ARexx/ARexxExample.info b/Examples/ARexx/ARexxExample.info new file mode 100644 index 0000000000000000000000000000000000000000..c9ba801e5b8b410ddffdd7e3780b2584c6c7018c GIT binary patch literal 535 zcmaDXz`)1=0>TVJ3}y`C3@i-H422rA7-SeE7+8UPM)o;JUw}o?2}TwM_WtD!?ENb{fKuOqm<6Fk?*W)C z!ywMU#K2t6!HkdsviJ@_xO}ezzzp6D2%onBD*hHCz<1UGB5)Ndu>rzm*ahM9U4Zg| z)c^ngKkWbi|H3~Q{W|!={-6IZyv_Vyu=&HE3x5|>eAwZjc;VmM>JNJum@oW0>;7RM i1N(*lSNp;IKO2}K{9RCU?n7vhxj^HYiz+~Nu>b%$p<7b` literal 0 HcmV?d00001 diff --git a/Examples/BackFill.info b/Examples/BackFill.info new file mode 100644 index 0000000000000000000000000000000000000000..b0056397b0b9c5cac4efaf3578753292b1c193c4 GIT binary patch literal 628 zcmZ{gze>YU6vn@srbz`+(WN+v6bC0kYH>>DPJ(t55f^du4Vux($!92`vxB3fFCcVt z&}XO_YOnYEZelXj6LNp|{QEBFd~U&jwu4jmZ6HDmCZ629#gp56WtxWx77e%M?gw$+ zPyb@qxHA_xx0aCr+hdn~*foE)A6=z}3Rr!9kA%xd!j^Q(j>Ixjm?c%uf2jUC^JI99=4?VxFXMsd<7S3=| z_9yBqy!d}-IkSCOJ@f9A_Kg0Bc8Rex7f7WSmW&*^3(@T&%2Kx-Pws*~Ey{fVG7F?T m%@XO=Gw&;&qpkPO)WxH!tI1t(?z!6q$z71uPvMob8<=0_OuN+p literal 0 HcmV?d00001 diff --git a/Examples/BackFill/BackFill.Brush b/Examples/BackFill/BackFill.Brush new file mode 100644 index 0000000000000000000000000000000000000000..959d8abc622eecb49ff25d61bde316dc41d1d3b7 GIT binary patch literal 3394 zcmbW4Pi!1_702Iiev_T0>}FC#FI@RH{)`VNuiFxGM?>Q`8%$ZZ90T5UCPt zDUo+veDJMYBZ1ljr=EhifZUQPu?UBPuYlru+YoXI-nC5F&CZ|4_q~~QY$9=JD~)H~ z=kwn0-`g4GTd%&hMpXaCcfPl}wz~H1E)hLWKc>t0OV%;Ce(?$CU9p?US{ zRs3P*=YRBGzrXz+{@d;!UhTi~+Qn4>mtLT6zI<`*6}>kLk+iXD>i7RMX_0bOT**F?-R<% zn*4A@xH)Rf^m!N_D6rYVLScLwVpbWsHtzf+N=5RLowo~Vx7$(XMbXz|VXi;v-z=@| z?NFg_%#%Zft;56Hs#(9$2ox?jPJOJfy}y5?nq632tSVe_U4N=@u(R`P)$B^Q`(1_W z)vBK=w_V@SHbj_!WiwNP#S4y>@P@9(lTtX?`Q42P1RPX%btd_CT=n;o zq2_y|{+rhl#m@FtP1DUZX#Ffj3`?++!@F0mq{z07s3Ho}Lze&iaZ$m$eQg*NvpL@? zpqadVuUBZ3YvWL$Q~f@60p)q`-?1XY*Va2S7vsB12Dk4=T8D2f;|9Q@bCB9TX8k+3 z*GM${kv_Jje=P6>$1@{}^~q05nxN`Q)XSR%&CqTqQOipj^>Q@XN!0LAqn5)&-y4qQ zu?$RjsbD(x7*Fz>V+kW*K0!i8NsVcKpl_sm)us1&pH({u}ed0mJWaHF5pzo)NzSI7vHO@IzIDtw>=OC4aTt! zRl|3LD5Bb28My81JXIwrlq$Fj%T=Yt{HW3_mC9Vvfzs1e0u1D0AV-xp=CU;yaG?w$ zoy$@=7kfs@waVo}3Ck+jL+sOl`Cw~Tfi_;;(v5Rx(q4UIyJapvT>CK(VodjmA zb>K)MUJovI79D{{3wqjF5C_}gRAu)aY*67OlL^eB*1-qY=&rhQ&JOn3$j{Mv#F4`( z92}QA)oe2210K)o)X9}vZh+cSaqV=y4Yv zj%s*p{V#8x@JhiSFkilo{Itjquy?f8p=FGM{5BVSZ_bzKobqQ-NBI%+2Ls;25$pIN zg0vdZvzRAt2VC%*bKaxRDSui{Ncbnrx0r9@8>;yo`V!Gsh`x%Z2IrFBnDdw#$`|q8 zRsJFKznH-z&5!77L|;&)Lv_Pka9ovR&LiEE SMC*`Aned(dEdN3|rvCzX$VD^& literal 0 HcmV?d00001 diff --git a/Examples/BackFill/BackFill.Brush.info b/Examples/BackFill/BackFill.Brush.info new file mode 100644 index 0000000000000000000000000000000000000000..02ebcf66254a65c9354fdbd83f39a5dc92363fd6 GIT binary patch literal 521 zcmaDXz`)1=0>TVJ3}y`C3@i-H42rffAm{=H1_K5j z27Ztc|Ia|_H#Dc&!S=mDxC6}MVWI&rF0~&Dt{{@D7 z#Sr?==l}oPf&4rF=R@iJ|F{1I@iz;$cL3?nRqu_fLF$vs!8F_Ta-;7T81DDDxEosn cX|R2`=?h@@2_W17byow_2S5rO^Ux3m06llqLI3~& literal 0 HcmV?d00001 diff --git a/Examples/BackFill/BackFillExample b/Examples/BackFill/BackFillExample new file mode 100644 index 0000000000000000000000000000000000000000..fc068cc7f8d04597d3a89e53552471370aad6af9 GIT binary patch literal 13076 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 literal 0 HcmV?d00001 diff --git a/Examples/BackFill/BackFillExample.info b/Examples/BackFill/BackFillExample.info new file mode 100644 index 0000000000000000000000000000000000000000..277d0d0eaa2ea0f69c75c65f4e9b280976250cbb GIT binary patch literal 521 zcmaDXz`)1=0>unM3}y`C3@i-H42=W(;CLEo>GX%rFrk%>rffAm{=H1_K5j z27Ztc|Ia|_H#Dc&!S=mDxC6}MVWI&rF0~&Dt{{@D7 z#Sr?==l}oPf&4rF=R@iJ|F{1I@iz;$cL3?nRqu_fLF$vs!8F_Ta-;7T81DDDxEosn cX|R2`=?h@@2_W17byow_2S5rO^Ux3m08xC^IRF3v literal 0 HcmV?d00001 diff --git a/Examples/BackFill/BackfillExample.c b/Examples/BackFill/BackfillExample.c new file mode 100644 index 0000000..9c24688 --- /dev/null +++ b/Examples/BackFill/BackfillExample.c @@ -0,0 +1,397 @@ +/************************************************************************* + * ClassAct Comprehensive Demo Program + * Copyright © 1995 Osma Ahvenlampi + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +/* get LayerHook.lha from Aminet for this */ +#include + +/************************************************************************* + * Backfill options + * We're using the public domain LayerHook here. + */ +struct BackFillOptions Options = +{ + 256,256, + // !!! 0,0, + TRUE,FALSE, + 0,0, + TRUE +}; + +struct BackFillInfo BF1, BF2, *Backfill; + +UBYTE name[256]; + +/************************************************************************* + * Gadget list + * This wouldn't be strictly necessary, but it's an easy way of keeping + * the gadget pointers for when we need to access the gadgets. + */ +typedef enum { G_Backfill = 1, G_Datatype, G_MAX } GadgetIDs; + +struct Gadget *GL[G_MAX+1]; + +/************************************************************************* + * App message hook. + * Workbench App messages can be caught with a callback hook such as this. + * We'll not worry about the app message type in this hook. Objects dropped + * on the window or on the icon (while iconified) will be added to the + * listview. + */ + +void __asm __saveds AppMsgFunc( register __a0 struct Hook *Hook, + register __a2 Object *Window, + register __a1 struct AppMessage *Msg ) +{ + struct Window *Win; + struct WBArg *arg = Msg->am_ArgList; + Object *dt; + + GetAttr( WINDOW_Window, Window, (ULONG *)&Win ); + + NameFromLock( arg->wa_Lock, name, sizeof(name) ); + AddPart( name, arg->wa_Name, sizeof(name) ); + + dt = NewDTObject( name, + DTA_GroupID, GID_PICTURE, + ICA_TARGET, ICTARGET_IDCMP, + TAG_END ); + + if (dt) + { + SetGadgetAttrs( (struct Gadget *)Hook->h_Data, Win, NULL, + LAYOUT_ModifyChild, GL[G_Datatype], + CHILD_ReplaceObject, dt, + TAG_END ); + GL[G_Datatype] = (struct Gadget *)dt; + RethinkLayout( (struct Gadget *)Hook->h_Data, Win, NULL, FALSE ); + } +} + +struct Hook apphook; + +/************************************************************************* + * IDCMP hook + */ + +void __asm __saveds IDCMPFunc( register __a0 struct Hook *Hook, + register __a2 Object *Window, + register __a1 struct IntuiMessage *Msg ) +{ + struct Window *Win; + + GetAttr( WINDOW_Window, Window, (ULONG *)&Win ); + + if (Msg->Class == IDCMP_IDCMPUPDATE) + { + if ( GetTagData( DTA_Sync, FALSE, Msg->IAddress ) ) + { + RefreshGList( (struct Gadget *)Hook->h_Data, Win, NULL, 1 ); + } + } +} + +struct Hook idcmphook; + +/************************************************************************* + * This function creates our gadgets for the window. + */ +Object *CreateLayout(void) +{ + return VGroupObject, Offset(32,32,32,32), + LAYOUT_BevelStyle, BVS_THIN, + + /* this tag instructs layout.gadget to defer GM_LAYOUT and GM_RENDER and ask + * the windowclass to do them. This lessens the load on input.device + */ + LAYOUT_DeferLayout, TRUE, + + /* this gives us a backfill + */ + CLASSACT_BackFill, Backfill, + + /* this dummy object will be replaced with a datatype when we have a picture + */ + StartMember, apphook.h_Data = idcmphook.h_Data = LayoutObject, VCentered, HCentered, + LAYOUT_BevelStyle, BVS_THIN, + LAYOUT_BevelState, IDS_SELECTED, + LAYOUT_SpaceOuter, TRUE, + + /* We need to install this clearing backfill hook because + * most of the datatypes really screw up rendering if the + * background isn't color 0. + */ + LAYOUT_BackFill, LAYERS_BACKFILL, + StartImage, GL[G_Datatype] = LabelObject, + LABEL_Text, "Please drop picture icons on this window", + EndImage, + CHILD_MinHeight, 128, + EndMember, + + StartMember, GL[G_Backfill] = ButtonObject, + GA_Text, "Use as a backfill", + GA_ID, G_Backfill, + GA_RelVerify, TRUE, + EndMember, + CHILD_WeightedHeight, 0, + EndGroup; +} + +/************************************************************************* + * Main Program + */ +int +main(void) +{ + struct MsgPort *appport; + struct Screen *Scr; + + if (!ButtonBase) /* force it open */ + return 30; + + /* By providing a message port you enable windowclass to handle iconification + * and appwindows. This port can shared by all the windows of your application. + */ + appport = CreateMsgPort(); + Scr = LockPubScreen(NULL); + + if (appport && Scr) + { + Object *Window; + + apphook.h_Entry = (ULONG (* )())AppMsgFunc; + apphook.h_SubEntry = NULL; + + idcmphook.h_Entry = (ULONG (* )())IDCMPFunc; + idcmphook.h_SubEntry = NULL; + + /* Create a Window object with a Layout. When Window is asked to open itself, + * it will calculate how much space the Layout needs and size itself accordingly. + */ + + Window = WindowObject, + + /* these tags describe the window + */ + + WA_IDCMP, IDCMP_RAWKEY, + WA_Top, 20, + WA_Left, 20, + WA_SizeGadget, TRUE, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_Activate, TRUE, + + WA_Title, "ClassAct backfill/datatype example", + WA_ScreenTitle, "ClassAct Copyright 1995 Phantom Development LLC.", + + /* Add an iconification gadget. If you have this, you must listen to + * WMHI_ICONIFY. + */ + + WINDOW_IconifyGadget, TRUE, + + /* This message port lets windowclass handle the icon and appwindow. + */ + + WINDOW_AppPort, appport, + WINDOW_AppWindow, TRUE, + WINDOW_AppMsgHook, &apphook, + + /* This sets up windowclass to relay IDCMPUPDATE messages to the + * application's hook. + */ + + WINDOW_IDCMPHook, &idcmphook, + WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE, + + /* The windowclass will automatically free the DiskObject used when + * iconifying the window. If you do not provide a valid DiskObject, + * windowclass will try to use env:sys/def_window.info or the default + * project icon. + */ + + WINDOW_Icon, GetDiskObject( "BackfillExample" ), + WINDOW_IconTitle, "ClassAct Example", + + /* Below is the layout of the window + */ + + WINDOW_Layout, CreateLayout(), + EndWindow; + + if (Window) + { + /* Window pointer cache. + */ + + struct Window *Win; + BOOL changebackfill = FALSE; + + if (Win = CA_OpenWindow( Window )) + { + ULONG wsig, asig = 1L << appport->mp_SigBit; + BOOL done = FALSE; + + /* Now that the window has been opened, we can get the signal mask + * of its user port. If the program supported iconification and didn't + * use a shared IDCMP port between all windows, this signal bit + * would have to be re-queried before each Wait(). + */ + + GetAttr( WINDOW_SigMask, Window, &wsig ); + + while (done == FALSE) + { + ULONG sig = Wait(wsig | asig | SIGBREAKF_CTRL_C); + ULONG result; + UWORD code; + + if (sig & (wsig | asig)) + { + /* Messages waiting at the window's IDCMP port. Loop at WM_HANDLEINPUT + * until all have been processed. + */ + + while ((result = CA_HandleInput(Window,&code)) != WMHI_LASTMSG) + { + /* The return code of this method is two-part. The upper word describes the + * class of the message (gadgetup, menupick, closewindow, iconify, etc), + * and the lower word is a class-defined ID, currently in use in the + * gadgetup and menupick return codes. + * Switch on the class, then on the ID. + */ + + switch(result & WMHI_CLASSMASK) + { + case WMHI_GADGETUP: + + /* OK, got a gadgetup from something. Lets find out what the something is. + * The code WORD to which a pointer was passed to WM_HANDLEINPUT has been + * set to the Code value from the IDCMP_GADGETUP, in case we need it. + */ + + switch(result & WMHI_GADGETMASK) + { + case G_Backfill: + changebackfill = TRUE; + break; + } + break; + + case WMHI_CLOSEWINDOW: + /* The window close gadget was hit. Time to die... + */ + done = TRUE; + break; + + case WMHI_ICONIFY: + /* Window requests that it be iconified. Handle this event as + * soon as possible. The window is not iconified automatically to + * give you a chance to make note that the window pointer will be + * invalid before the window closes. It also allows you to free + * resources only needed when the window is open, if you wish to. + */ + if (CA_Iconify( Window )) + Win = NULL; + break; + + case WMHI_UNICONIFY: + /* The window should be reopened. If you had free'd something + * on iconify, now is the time to re-allocate it, before calling + * CA_OpenWindow. + */ + Win = CA_OpenWindow( Window ); + break; + } + } + } + else if (sig & SIGBREAKF_CTRL_C) + { + done = TRUE; + } + + if (changebackfill) + { + Object *layout; + + /* This is a quick&dirty demo using an unmodified LayerHook (on Aminet). + * This hook can not change its source bitmap on the fly. + * Becaue of this, we have to do a bit of a juggling act to + * replace the current backfill. + */ + if (Backfill == &BF1) + { + Backfill = NULL; + if (LoadBackgroundImage( &BF2, name, Scr, &Options )) + { + Backfill = &BF2; + } + } + else + { + Backfill = NULL; + if (LoadBackgroundImage( &BF1, name, Scr, &Options )) + { + Backfill = &BF1; + } + } + if (layout = CreateLayout()) + { + SetAttrs(Window, WINDOW_Layout, layout, TAG_END); + /* backfill changed, it's not safe to dispose the old + * one. */ + UnloadBackgroundImage((Backfill == &BF1) ? &BF2 : &BF1); + } + else + { + /* layout failed */ + UnloadBackgroundImage(Backfill); + } + changebackfill = FALSE; + } + } + /* Close the window and dispose of all attached gadgets + */ + DisposeObject( Window ); + } + } + } + + if (appport) + DeleteMsgPort(appport); + if (Scr) + UnlockPubScreen(NULL,Scr); +} diff --git a/Examples/BackFill/BackfillExample.c.info b/Examples/BackFill/BackfillExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..a956d3488e4a1e16341ea93e6a5247d2ab7cfe7f GIT binary patch literal 300 zcmaDXz`)1=05IO0L+$Q z5NBXwV3T>ljF1AdcpEl=`Md`p!n_cQft%q5n8kJgBEXylVKCi-@*^M&#_R;J0AmD1 z97O*A|Nq1O|Nk%i{lEXi{s;9J{vMG3u%Chd!e0jV5BnI{FZ|}e{b7%M^M!x+{{!j& z7yf4*{;-Fi`NF?j5c&TRw?FJ}kiYOhyB=)L|9FUbAajAnbNQC$lw_7=rj~;&V*voc Ccvpr1 literal 0 HcmV?d00001 diff --git a/Examples/BitMap.info b/Examples/BitMap.info new file mode 100644 index 0000000000000000000000000000000000000000..089fd6418a2a9d4f06673573bf4d8f3c8f1c7d17 GIT binary patch literal 628 zcmZ{gy-EW?6ot?JxEn!Kun{Yf6k;U_8mxB9ls1Bhc0Pb_kS%SL)Oi9)E!Mt-kj_F2 zpCGOf9Os;w%}x<7%zSh2+#l}w*hU1}4sLLUO=L(A<&*k8pZt93C%mFK^b+d~^OyeR zGT1{e8spX&M&dFaEq}tt6%LIxKe_qg^ccy*m~C6zVygMXhC(SiV%Kur>_dEW?7%TM zuZlCVYqMOv%8VK%0-|l}!rnjR2 literal 0 HcmV?d00001 diff --git a/Examples/BitMap/BitMapExample b/Examples/BitMap/BitMapExample new file mode 100644 index 0000000000000000000000000000000000000000..dbab541c2891391af9a57832540da22ab8e4b00c GIT binary patch literal 3360 zcmZuzZERE58Ges_;}~Ot!wd=0#b|#Z4e^6j`(dVT3M<;O3M~i?Wn*ZmI)oSsWY0M^ zUbD?-T<0y+etX7r@r`pIQAc3oyG7SDw2Hwl z)_b8u3#kJ#B`q?(Sf4qvvRH39YW66>vMD1zTzVhNit54BP3{Nq0ee|sLX^EO707J@oG zNW1KmNpvUpI=#;hL_R_+L{t2ADqSmID+h+j_xaV&uX0D8Hf;^=VbS^N*NP4u8PJ(x zEb03HVu&s}9Fbz$ZTmH{h;?usGQ=G(7q3q@enNsehTPq6yi8os_y)M6@ncS$?f>2C z10Tkk+l+MmlMceyV)gqDtRys2b>2#<)fCFm1Fi>J2obEF1MfgUP{()%Qf?zd_xLcW z!C_KZG&zLEs0y?hXj>I+muLr2AJFzHx;>O( z_Ng-baRBXvwiie{{Jf=kxey)o(Nl9UU4!P{8SkF z-P2dqK4kB$zGZ4x2Q-~v-*J}fJR(eEZm6>R)PIJRP+5U>|aT?ozIa3nb49p=Z5u1pT?B*K9c#hWQu^0Y` zy1Yt&mc>R65XDJaYfxx=7PQBXsmS|pXK$xWk{KbKe*)S#qt z@MUIAO;hSXtIjvzJUJucrB@Kgh9of`>g~mT_E?AcKGZsdT08n3qSlcgrU$VOCyB#< zHrD`)y<(*V#5$Q2df3Au(tV_1rPochQligYM_x-g%FIuzvoJ9WeHbPwUyn8aOJ1)O z38#Jf2ILm_K4B9Ur(kWD<*8J)I&S~Jap&4G_GqWj6+7b53ifTgF-(z4=${<=8}QO!KHYaw8jq$c2~xcy+~$YM$tF9Z59G-If84 z59eBwxpNI?CpcljF}FpRokWV3BQJW7x(C+$;Q9ivY#bqS-O^gf9hMuMa;Xa`S3mm$-kggl8-tM;vrH zHivpDw%@DUsC{grDp7`n`-z0WV`HeTB5L!{QyCjew52siKHQ0>SC60cZO-!x%(|an zhyKgF2mKx2W-FEtTwv)IvjO~8P_FpN$Y!fS%7bGm5la6J2#=pMw+YnRB<*;m9hb0^ z{yX@tIOZ|WU{#pd0p)m6ob8kbh}z+JYaVH+|jTGW)lz(6>!DdXHD%axFfK z{x8sb63698qveRtLUM**t<3(^Xc{e7_g0fuQzDwQOWd`%P2q9SU@7eAOVPz)GKpHX z1{v>`NQn(wzIZVJncFgQ#2gM`EmZ1aEHNcatr@yuy7?&X%emGc@eS#Fygs_fizYob zVq>`L+Kr_hFZ4X5vdEoHtp;}8LbDF*iL@uQ7dC$zCez<_mu?2!D%PL#UlP3)rpVh? zw(B8X)YkXhWtrW}6c9F41K0^zx!*j{wM^RsMr3Px<>gt`eYzal+q^DN51aFRU!)1> z%&Ffuy94#=27y7(2JJp9-fQ#11LQmPN4&yTJEYc)z+N$fxVcYXMgK+qO|C!NMejuy zGw)!pw}1U6?@4B#FYuf_l;wwq^5Y}9EPpPO;<+>@+Hytg84uxXXh8I>$Z4ixTfEtr zjaEo|;gK&%kH4^)*b5@JBiX{lNCBp5?*&z;e)WCrxsQ|QPZ)d9aQd!qLu*1) zi0Ut*T|qmG_8wF|gp9u`i;we5bdG^nk|PBW&u z7ESz|U!mOr@%=YOvZ>q~;X|3^_&AZ3Oj$#PaV?WPlA9=mE5jN(I8i7dg;jK9G-(Zu zYl9<&(WD)gBkGU$?e5(Z@2E(Qhey(B>Jg^94i$J$&OVYKv4#tL$BQq1FNE#|USswS z9UjW$?9riYfgc!3j)ucT-6Ms4Nt?eknH;q + +#include + +#include +#include +#include + +struct ClassLibrary *WindowBase; +struct ClassLibrary *LayoutBase; +struct ClassLibrary *ButtonBase; +struct ClassLibrary *BitMapBase; + +static struct Image *image; +static struct Screen *screen; +static struct Gadget *gadget; + +int main( void ) +{ Object *Win_Object; + Object *But_Object; + struct Window *window; + struct Image *image1=NULL,*image2=NULL,*image3=NULL; + struct BitMap *bitmap; + ULONG result,signal; + BOOL done=FALSE; + + /* Open the classes we will use. Note, classlib.lib SAS/C or DICE autoinit + * can do this for you automatically. + */ + if( (WindowBase = (struct ClassLibrary *)OpenLibrary("window.class",0L) ) + && (LayoutBase = (struct ClassLibrary *)OpenLibrary("gadgets/layout.gadget",0L) ) + && (ButtonBase = (struct ClassLibrary *)OpenLibrary("gadgets/button.gadget",0L) ) + && (BitMapBase = (struct ClassLibrary *)OpenLibrary("images/bitmap.image",0L) ) + ) + { + if(screen=LockPubScreen(NULL)) + { + /* Make an image out of an IFF file. + * The image will be included in the window layout, and is + * used to clip two other images from + */ + image1=BitMapObject, + BITMAP_SourceFile,"PROGDIR:buttons.iff", + BITMAP_OffsetX, 0, + BITMAP_OffsetY, 0, + BITMAP_Width, 577, + BITMAP_Height, 30, + BITMAP_Screen,screen, + EndImage; + + if(image1) + { + /* Get the bitmap of the image + */ + GetAttr(BITMAP_BitMap,image1,(ULONG *)&bitmap); + + Win_Object = WindowObject, + WA_ScreenTitle, "ClassAct Copyright 1995,1996 ClassAct Development Team..", + WA_Title, "BitMap Example", + WA_SizeGadget, TRUE, + WA_Left, 40, + WA_Top, 30, + WA_InnerWidth,100, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_Activate, TRUE, + WA_PubScreen,screen, + WINDOW_ParentGroup, VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_HorizAlignment,LALIGN_CENTER, + + StartImage,image1, + CHILD_NoDispose,TRUE, + + /* Add a button with its imagery read from two + * transparent GIF files. BITMAP_Masking,TRUE will + * make the imagery appear transparent. + */ + StartMember, But_Object = ButtonObject, + GA_ReadOnly, TRUE, + GA_Image,image2=BitMapObject, + BITMAP_BitMap,bitmap, + BITMAP_OffsetX,0, + BITMAP_OffsetY,0, + BITMAP_Width,120, + BITMAP_Height,30, + BITMAP_SelectBitMap,bitmap, + BITMAP_SelectOffsetX,30, + BITMAP_SelectOffsetY,0, + BITMAP_SelectWidth,120, + BITMAP_SelectHeight,30, + BITMAP_Masking,TRUE, + EndImage, + EndMember, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + EndMember, + EndWindow; + /* Object creation sucessful? + */ + if( Win_Object ) + { + /* Open the window. + */ + if( window = (struct Window *) CA_OpenWindow(Win_Object) ) + { + ULONG wait; + + /* Obtain the window wait signal mask. + */ + GetAttr( WINDOW_SigMask, Win_Object, &signal ); + /* Input Event Loop + */ + while( !done ) + { + SetAttrs(image2, BITMAP_OffsetX, 32, TAG_END); + + wait = Wait(signal|SIGBREAKF_CTRL_C); + + if (wait & SIGBREAKF_CTRL_C) done = TRUE; + else + while ((result = CA_HandleInput(Win_Object,NULL)) != WMHI_LASTMSG) + { + switch(result) + { + case WMHI_CLOSEWINDOW: + done = TRUE; + break; + } + } + } + } + /* Disposing of the window object will + * also close the window if it is + * already opened and it will dispose of + * all objects attached to it. + */ + DisposeObject( Win_Object ); + } + + /* Dispose the images ourselves as button.gadget doesn't + * do this for its GA_Image... + */ + if(image2) DisposeObject(image2); + if(image3) DisposeObject(image3); + if(image1) DisposeObject(image1); + + } + + UnlockPubScreen(NULL,screen); + } + } + + /* Close the classes. + */ + if (BitMapBase) CloseLibrary( (struct Library *)BitMapBase ); + if (ButtonBase) CloseLibrary( (struct Library *)ButtonBase ); + if (LayoutBase) CloseLibrary( (struct Library *)LayoutBase ); + if (WindowBase) CloseLibrary( (struct Library *)WindowBase ); + +} + diff --git a/Examples/BitMap/BitMapExample.c.info b/Examples/BitMap/BitMapExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..1faae77eb483249a13f0f439a5db19364296e243 GIT binary patch literal 296 zcmZWiI}UUF!_eEtw6BoQIu&-mmA;2CyaRU!OK`W~G ofWwm{5>k2>Rbb=Ln4FSU@G?fq3f)6%)2Di6y}R0N^ISc0zWvBmg#Z8m literal 0 HcmV?d00001 diff --git a/Examples/BitMap/BitMapExample.info b/Examples/BitMap/BitMapExample.info new file mode 100644 index 0000000000000000000000000000000000000000..3be7a2730f395490b8efc293559587be3082cd6f GIT binary patch literal 835 zcmZ{hze@sP7{{OM>_iB)hEfnwx*${n(F#2DDD#6!NeJ2I!!LyVY^H>%8;L z{D-E8!tU#5*nP7Ua(d5JMz(oag$2;REPZwb@nFw620q6O$#O!nQ{dFAIE`eGdPmL|JO_-UfAUuN(v9N2q~p^X0f*lM&o=R;;NG)Co}Gag zv-x9s+sI=d!ndx4*RYA)^1Ws5`-5}tJDUUUr=!x}y;@=J4nxedlZec3$Q-vN^Rq4K z+pU0K3SX}X->J|X1#>HK{{0}%r@vv^!9?fuf01*_a$2%e<<#nZNjM8KCHLxCve@q6 zMgcjeG?Ge^ABbmk&K#ZpndqE2xt>p=(-nsmcHRV&o#()2=ZDB+J=`NF=frC%(?f3g zcf$RiaA$+LosLGhPtK|D4uxkY(znq$b97Gg$vHn4oij)0#K}2va-IW+#g6C;FYX;5 I?9(Rn3yZJ52LJ#7 literal 0 HcmV?d00001 diff --git a/Examples/BitMap/buttons.iff b/Examples/BitMap/buttons.iff new file mode 100644 index 0000000000000000000000000000000000000000..5e5c7c349d82329907940ab1948df1243f511249 GIT binary patch literal 956 zcmZ{iO=#0_7{;IUBTd&T=~(8JjYjY=de9;WMTgD0&V6WETIfDNr8mKocydf=#3Ey- zAr=(`%bc#;!O74|y#zth!*yi>9XRULB1d{*zq0FGkMZ8=t^Mi=aTv?i%n_FLBUt7FMtM`e; zJZK*Dn%`oRFi%JmMskBG(F!MUaA+_y;+{JeeW{7`41afE8~ZN@N|73XL{#@A$#F!t z9ml0YQF4m3Q>33nU!gZ4`K%_OvffAvz0UeJxID|)tc%GyZ2tV67B`S|Zp>2shs$+T zzg>Oae>}GOWUV6UUI%jNmIZ|yc2uje)&5wlvb- zU=>`0mhI9;%&cZkX$BhtYzS~7N^pF%po9@b0+Jqg4L!opR02^&VelOoj|$udMS{7k zrD~DG>H)@W7ncQ25mEz1H4;$|eHVtJFw{Yy6v6M~{vP0HQ_Ld?-hm{MU>f-AsK8Dc z9EKcp5YqX#tda#NVRf(L-bq0`WiZ^sFmwljf(yshkT%?Rz%@V;%2-_yGbOe!OeK(_AldZCHMLP z!)rHMtLpC*weMG}4D~+V*t|Y;ck9$cy)AW?&zs{$uKet&@ke?!o*pYr-aEEzx24|v c$&1%+FKjJ8uv$_RUJ0<8d!_fU^55Zp1MaCq*8l(j literal 0 HcmV?d00001 diff --git a/Examples/CheckBox.info b/Examples/CheckBox.info new file mode 100644 index 0000000000000000000000000000000000000000..43a043ba5f63b071fdad690e7e05d3542d311150 GIT binary patch literal 628 zcmZvYJx;?w5QU$Au!DpEK@(9Slp>-+K@d^dH5E-H3d8{@xB-d}6CsqE15j`Uq)<^n z!3lzkD4Th2ZS2A$?S4CN=SMT&`v^cg#1pQtiv$sZboM*6lk2B_1>vmaM)rQNxZ8hi zgi$cW#5pP<4yN||%y+ted?#i1xOQe$=UQd=5YcC!WgFXLsQbZ=q!>MMVBB`c5I;P7 z@J!vCbOsJA%I7N$F?_w1cUyO+xDsd5`Z%xrvADq4E%D{VQ_nx=St66pzy&U={7iXe zt3$`Lp1JIv`Djji#l?hnhpB3=kgHT&F)?x%qU|Cna@&q4cR`<)6h41lgsM9)GSzEl hK9T-{E%m!m7Oy(4A$P&Km$nO%yCCbs!kx1R2sWjNysrQN literal 0 HcmV?d00001 diff --git a/Examples/CheckBox/CheckBoxExample.info b/Examples/CheckBox/CheckBoxExample.info new file mode 100644 index 0000000000000000000000000000000000000000..194680c03f588d94cb87e06ce2bfaedc69cc00bc GIT binary patch literal 450 zcmaDXz`)1=0%{C`3}y`C3@kuCBl}FQ3t&-nf{__nLXre; z3!wTGpfm%7X8#Z4^We0<{yzx(VE|MAe=uAP1%Uv(bo~DbVEG6J0XTgz)Fl+chth%! hArc_@Ko>@cxC5BJ7zh;y+JdbADiR-`{S8o`001OLSSA1f literal 0 HcmV?d00001 diff --git a/Examples/CheckBox/checkboxexample b/Examples/CheckBox/checkboxexample new file mode 100644 index 0000000000000000000000000000000000000000..44cc92f9d4f14b4948c1718617f4f929698d5ac1 GIT binary patch literal 4232 zcmZ`+Z){W76+idcI1kqePG+*e5WTaEM>5YZWvD_?KD;C#9ws%xbSg|}JSVnaG9K~6 zacGE8<}gYV4W_i^LseCX57k{6L~dlDLc^7K-Gdf&0Mesw76g~UouOi;I$Ly?y zw{LF3=Bbp+O6WxQ>-W>!Y$oy{av>Vx`)T}I{#xGOP2SJ0e0GIP8LC-Tzm0t{IsA*9 zq@n^UJEKjj>bE(xPf1cFmy#`?LI$xWu0rNrF73+Q7_L5#;z_%XqIM6fFA*0wRzH`j zf6s}toqsMo^5R{Q^+?OVX)j{UmDUrm@<5@0${Q$P)P+oTimU$hgbWI2z?<<4>?k)O zC2J-d@=9~gLCZm7Hdb54yj%^LlKj?{zz$@6Y{x7GU{eFEUt|k;;D`^8SQYWQctlVuJ*IwQZJ~xrkT7HX<>)(X6bOYf@wN$W?n7nUxF zDPJgD{)jg1${8O3-g_lyNcw5;-YMm>r@mG_k z=_Vk;jO~~U&v2MDQ!vumpUtLw!$v$|B(t<{XMazYFcELI%#a!<)_@s5k@A)(QBZPL zA=-}L)kV6K&(OUC$tLLDDC<51Wo(h|ji+?eI6)MWPtP%@HqBmC zH1he=rGo?H6)rL5fT!MxxBJ{ z%FKNZ57B;YdP8lHtU%ig+bn!EXu?7eK8)QFoOvlZv>g+BLa%|XBcbg9^pxW(Kfdw8 z-4GcKm_iP4I{dESiU6ojPNQFBp=nfQ64!CBDKz9b4v+4*j_BF2vKOgOn9^A8|MciPW;Ss~jkq2%|W7r?3<@2Z(?cNdXFG+An z$nz3{9zDo$OA>SX;q~IXHchn+Y4YMO`N*TjPI^~n_&H`g%q++ALB@^eeeX&mn(?1w zsr7ml_zl2Zv6GRNMwKlOj^T_@>I+bK?4-U%P>mYfj>op+5_VEwg71pKkNyt2_z`ZR z`B+X&#e2C7(^|xrQLjpbdyWr%@ii*!<)%c4YSdf3L{!zVaNLe-cWgAcjsIr%h`tGu zBEE2J6lYI0s#2BNGB#`=4)N5zt>4o-YUk(&x{RmWqt;%FjpF$a=*{PGDN=1nu~A5l z@GC{{OJ-ATxLQ|X&L>1RDVMmT;ueaC>oqoqiEzA2Rps z%#m|gOts>^pue4AYB1S=F7pGpXO1=ej8~?x@9k4Or_&QHdJuQSjoS1JFSb3Vyr`W; zm~@}$PrqF3Pn&u-Op(`(-j>I7L3yriMsi|K_=Syt2HJ5k6N39%W@)Wo zi>yk`?HUcpZ{HTfN4 zRF|74a0YH%d;@Na_x=b6k(KP_hmx7T9vn~W%mh!TI8p6o(KBv}9#pE3eFG0k&Z2Gc zzm6mWJSh(%^2X`OEsKd>5Vh^;&En93sq#Hr?1$trd^lN3vAvP6*I+@DJVHZ}6^j0m zNIKJjo)P`!n8Bm;e`Qq|QB>jG1z^Cx0z3lz4R94S9{?w(_&NRqxDO-&(il-?o~U91 zBMhX95v-UF@_>-UdK%CP`dO?&tkCm-S0#k$)t=r&`qglkxG;S8t$4WhDQ5g|x<5OA z)-Fx$IS@CJLKK&Qu>C@`6m4F6{x0!dtIwh@KJVwPET$HBvLm)*>*j5-Ci}L7kk%ou zB4^j0T}x0=#0CE=J^M>p*H +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +/* ClassAct includes + */ +#include + + +enum +{ + GID_MAIN=0, + GID_CHECKBOX1, + GID_CHECKBOX2, + GID_DOWN, + GID_UP, + GID_QUIT, + GID_LAST +}; + +enum +{ + WID_MAIN=0, + WID_LAST +}; + +enum +{ + OID_MAIN=0, + OID_LAST +}; + +int main(void) +{ + struct MsgPort *AppPort; + + struct Window *windows[WID_LAST]; + + struct Gadget *gadgets[GID_LAST]; + + Object *objects[OID_LAST]; + + /* make sure our classes opened... */ + if (!ButtonBase || !CheckBoxBase || !WindowBase || !LayoutBase) + return(30); + else if ( AppPort = CreateMsgPort() ) + { + /* Create the window object. + */ + objects[OID_MAIN] = WindowObject, + WA_ScreenTitle, "ClassAct Release 2.0", + WA_Title, "ClassAct CheckBox Example", + WA_Activate, TRUE, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_SizeGadget, TRUE, + WINDOW_IconifyGadget, TRUE, + WINDOW_IconTitle, "CheckBox", + WINDOW_AppPort, AppPort, + WINDOW_Position, WPOS_CENTERMOUSE, + WINDOW_ParentGroup, gadgets[GID_MAIN] = VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_DeferLayout, TRUE, + + LAYOUT_AddChild, gadgets[GID_CHECKBOX1] = CheckBoxObject, + GA_ID, GID_CHECKBOX1, + GA_RelVerify, TRUE, + GA_Text, "CheckBox _1", + CHECKBOX_TextPlace, PLACETEXT_RIGHT, + CheckBoxEnd, + CHILD_NominalSize, TRUE, + + LAYOUT_AddChild, gadgets[GID_CHECKBOX2] = CheckBoxObject, + GA_ID, GID_CHECKBOX2, + GA_RelVerify, TRUE, + GA_Text, "CheckBox _2", + CHECKBOX_TextPlace, PLACETEXT_LEFT, + CheckBoxEnd, + + LAYOUT_AddChild, VGroupObject, + CLASSACT_BackFill, NULL, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_VertAlignment, LALIGN_CENTER, + LAYOUT_HorizAlignment, LALIGN_CENTER, + LAYOUT_BevelStyle, BVS_FIELD, + + LAYOUT_AddImage, LabelObject, + LABEL_Text, "The checkbox may have its label placed\n", + LABEL_Text, "either on the left or right side.\n", + LABEL_Text, " \n", + LABEL_Text, "You may click the label text as well\n", + LABEL_Text, "as the check box itself.\n", + LabelEnd, + LayoutEnd, + + LAYOUT_AddChild, ButtonObject, + GA_ID, GID_QUIT, + GA_RelVerify, TRUE, + GA_Text,"_Quit", + ButtonEnd, + CHILD_WeightedHeight, 0, + + EndGroup, + EndWindow; + + /* Object creation sucessful? + */ + if (objects[OID_MAIN]) + { + /* Open the window. + */ + if (windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN])) + { + ULONG wait, signal, app = (1L << AppPort->mp_SigBit); + ULONG done = FALSE; + ULONG result; + UWORD code; + + /* Obtain the window wait signal mask. + */ + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + + /* Input Event Loop + */ + while (!done) + { + wait = Wait( signal | SIGBREAKF_CTRL_C | app ); + + if ( wait & SIGBREAKF_CTRL_C ) + { + done = TRUE; + } + else + { + while ( (result = CA_HandleInput(objects[OID_MAIN], &code) ) != WMHI_LASTMSG ) + { + switch (result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + windows[WID_MAIN] = NULL; + done = TRUE; + break; + + case WMHI_GADGETUP: + switch (result & WMHI_GADGETMASK) + { + case GID_CHECKBOX1: + /* code is TRUE or FALSE depending on check state */ + break; + + case GID_CHECKBOX2: + /* code is TRUE or FALSE depending on check state */ + break; + + case GID_QUIT: + done = TRUE; + break; + } + break; + + case WMHI_ICONIFY: + CA_Iconify(objects[OID_MAIN]); + windows[WID_MAIN] = NULL; + break; + + case WMHI_UNICONIFY: + windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN]); + + if (windows[WID_MAIN]) + { + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + } + else + { + done = TRUE; // error re-opening window! + } + break; + } + } + } + } + } + + /* Disposing of the window object will also close the window if it is + * already opened, and it will dispose of the layout object attached to it. + */ + DisposeObject(objects[OID_MAIN]); + } + + DeleteMsgPort(AppPort); + } + + return(0); +} diff --git a/Examples/CheckBox/checkboxexample.c.info b/Examples/CheckBox/checkboxexample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..1350752bc305c248d7a9492a8a5eaca012aa96be GIT binary patch literal 300 zcmZ9Fy$ZrG6oqe0HK3I0q=V2maP}qKyXoRkb@XQv3qF82`UI{%KrsPdAfvQ{1sBKc zQm^?D6a%^E-1CK#dlLwlBcKIc=s;EPgdOS+oBj{t0o$+pYxSXP%BEDTvQrR`N|x}C|5iQB~CZC2ZyfD^y>QhU@@D=%XqvppLuWe CXjZcT literal 0 HcmV?d00001 diff --git a/Examples/Chooser.info b/Examples/Chooser.info new file mode 100644 index 0000000000000000000000000000000000000000..b77c5b99783a3af9f772ef114c763119eb66e04a GIT binary patch literal 628 zcmZvYy-LJD6otsxn1e?;rM-a5wLbkTBwD1+g zbQZgBAgn2t9p{`$Op08X`R1OvKioUrgaK_EPdLXqVuUcsczW;7vwoVF2_746=-v-5 z?(JW@!-4t1rL|N7Y>krfEap2|-hPm>8(dgtW#>v|_W{LVLx@fOd_MYA(=MsidiBiv(qFKmepkxkRmIihE;#qx?SkYk$m+0g>+A;R4<=~6&j0`b literal 0 HcmV?d00001 diff --git a/Examples/Chooser/ChooserExample.info b/Examples/Chooser/ChooserExample.info new file mode 100644 index 0000000000000000000000000000000000000000..3e5d818d6292027d5f6bd41e99bcbed235852c6e GIT binary patch literal 454 zcmaDXz`)1=0+I|u3}y`C3@kuCBm11YU_lImkr^z+-oJVRkRb}hEC@9U5T+S}7y}an z^MeZzwGcs=G9IXM95e@1Tmnc7Ffed{XblDi&Ill_1f`V)g)(M<_^XzCfM~5%Q#?TG zgeEF^-T=}-0M-X$fW-d;!4HTy0|Rcl9;EL7AFy(u28OGlAP|6?1}Xmvly3mq!wR8U UD5SyWfZPo-hk*ScYoUMz0Qh-QC;$Ke literal 0 HcmV?d00001 diff --git a/Examples/Chooser/HiddenChooser.info b/Examples/Chooser/HiddenChooser.info new file mode 100644 index 0000000000000000000000000000000000000000..0d4fc6ab6139a22aba3da98ecd1c7fe605771b23 GIT binary patch literal 454 zcmaDXz`)1=0uvd87|a;N8CZaPM)o;J0>Gl^1S2z8guQ=x1CY@R#4KO|FrffpnlXqm zFflNfb3oKW1Yyc}AY297ItCo9!XsuOK zJV5G%CMtQ}0MbAJ)(2vM#Qy`q4~RGeE_;FE^&oZs|A3VPH85Na1%UwEG)VbZpnL<+ Y9##m=LLm({2jp&$IRxwnSqlX$01bXp3IG5A literal 0 HcmV?d00001 diff --git a/Examples/Chooser/chooserexample b/Examples/Chooser/chooserexample new file mode 100644 index 0000000000000000000000000000000000000000..64c837e02ba47584d2fc10e1330b789ebe1e10a4 GIT binary patch literal 4184 zcmai1e{2)i9sj3IfN@aI@iBHMui+H@mNChhBKV)|A99*etD-3HOE>X+%)5{2JGE=0Te%QSXz{NlLMOWx1Ue|DZrX)0eU)@Vic0Y1jK8lDum~W=YaB`KL{sg$LJ|>$!dQEgi+Giw zM5dtqF3)>SLA1zmzfmqI&^>9&&^;maFdqZ2i$B|T<)^zNneOC3DACuIj-_9v!?V<& zPZzI71UF3)$92<#anf{QoWfo{W00fL_VO@Zqwx}x9Ilpk^&v+sU^&1GaM`$YAG0S$ zMSBBU`)%yXVw}QHg9$c?IIgK0RRN#M<9^`R1>W**%e!jR>*Os`7hAJa-$hJq$~vf` zfO)wVOh{F4pZB+8efGh+ANF)W5O%KGcJv`>Qdlt9*Q7m=tQB!f6PD#g1 z52T}q#tR;*<|EtTQc2jwNmOZ#z;<|SePD}0>#(`=wAAtf7ARnhC#m>=zdESQ9@l6}c674Bq`wH0J0`{{4Hlh!)-y%DreqehoEQv_6 zk44grNHkO!@>QGY2Z)1W^p@}pvW%t`BX6}z6l8eb>I)|7sr6*~%WuIZiba-gWduTwn`lv;7X3@RKT>jWx zjBkJbd$sXV%lp&;OQ%Hd%;nC$PYo|+S6;0qq|+pR8+k#w@Noxhl`1tUdmR}xo0NBu-Hb@jEiL@%rs7m zd-W;0=b*b2y4MT3Q_$VFK==Anbnim95xO_$b(tHw`U2gXU(-#ZL#iYno@GvbnyprK z@+nF3i8TqK_dlGh(a`0a*3Pg-^yC0ex^LZWss!hrvVj*DB$h*>0}`SZd<(g}1g9hW zIXqx};SYV*t4~u!jm}HrxIvB0!dt5J(QOwHJ_VAH#lrTncktW(I==pu6=ZFY*gC@u##K>D0fjx`t!Zt$Zj9bYOk zXxD;d)}W6$!0A?8fhB%W=R`-5g{E1W?*0qj8@Wcsg>g#B=P}py_Ib!%P7iVIxn}w$ z;%KvTXgNmC=X8=gho6%p86wr~Pm;{tW*64p!+(;SHQH2n+wCHl z$2fK1gapT^YP;#2@;hPhiZ^`Zs+DmMw3hKM8-xv3NIijTHi>@)Grskmn@?J+gzVSPOLj{{-xB>+B@Si+7*LqeTyTm!|m%X5LFL!gwd` z#(2xS)QqH+6D+>cCRf1}kTXsB_9ha~ZzX`r8 z3O~j>JScf^>x@UUqTAlcrkUO>P77XVKDyu?ye;1_Ix1%ATZW9$?a?YOMn^FI9eVS5 zoC%kiQgj58!~DGM{fXI>nXZ;)xJSB0HgT7DPvXUhh^uwUiwZw2s>~p&5nUPiR-iI` zrZ<|!Th4dG${aa|M2EKb1-;4{qM8IdV90zs-h`tyFQJ><<;87Rc-EjfJ+cFRre2?3 zwYv2Ijf=HQQK4!@#k%c^4Uyp!HLJ*W&05rJAqu}?_BTJEQ|jW@8L1LIPZ2i!I%xYv ze+z6yUwKB+!^`5cn@0Td+vC9vfkg^BVs3)J7_J0$_|TsNvQq3X5j5zffXh3@Z<2|x zRKCy>l@AZ%Ci-gSCk~*K)h~Rlw#NFuJ;;-(o_@ZwCq2-Y?B^>I-8>oRL=|U6&A2JD zLoG%2HCWU6cPoCENL2tH_aGvy{oLgg6SW}Lwy%E>7br{>-o(~^aMOodG9TNaaqL+Y zfC~*(Rw?oaBI!s6Y6kU1ju{O3-+(2T(K$}z+XY~V=pDdOz+S*E(0l+l0Dq2u0d4{5 zBP#j=06RsX72UVkpv`M z{>D|cD*m6Zt5q9nRYA1(x!gjD+A!;YH2@7DdU^w(9uNfJ7bSja6LA3cj4A=JkJ|=! S6u=1(e>fuo*goqEXX1Zebh +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +/* ClassAct includes + */ +#include + +/* button option texts + */ +UBYTE *chooser[] = +{ + "1200", + "2400", + "4800", + "9600", + "19200", + "38400", + "57600", + "115200", + "230400", + NULL +}; + +enum +{ + GID_MAIN=0, + GID_CHOOSER1, + GID_QUIT, + GID_LAST +}; + +enum +{ + WID_MAIN=0, + WID_LAST +}; + +enum +{ + OID_MAIN=0, + OID_LAST +}; + +int main(void) +{ + struct MsgPort *AppPort; + + struct Window *windows[WID_LAST]; + + struct Gadget *gadgets[GID_LAST]; + + Object *objects[OID_LAST]; + + struct List *chooserlist1; + + /* make sure our classes opened... */ + if (!ButtonBase || !ChooserBase || !WindowBase || !LayoutBase) + return(30); + else if ( AppPort = CreateMsgPort() ) + { + /* Create chooser label list. + */ + chooserlist1 = ChooserLabels( "1200","2400","4800","9600","19200","38400","57600", NULL ); + + if (chooserlist1) + { + /* Create the window object. + */ + objects[OID_MAIN] = WindowObject, + WA_ScreenTitle, "ClassAct Release 2.0", + WA_Title, "ClassAct Chooser Example", + WA_Activate, TRUE, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_SizeGadget, TRUE, + WINDOW_IconifyGadget, TRUE, + WINDOW_IconTitle, "Chooser", + WINDOW_AppPort, AppPort, + WINDOW_Position, WPOS_CENTERMOUSE, + WINDOW_ParentGroup, gadgets[GID_MAIN] = VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_DeferLayout, TRUE, + + LAYOUT_AddChild, gadgets[GID_CHOOSER1] = ChooserObject, + GA_ID, GID_CHOOSER1, + GA_RelVerify, TRUE, + CHOOSER_Labels, chooserlist1, + CHOOSER_Selected, 0, + ChooserEnd, + CHILD_NominalSize, TRUE, + CHILD_Label, LabelObject, LABEL_Text, "_Baud Rate", LabelEnd, + + LAYOUT_AddChild, ButtonObject, + GA_ID, GID_QUIT, + GA_RelVerify, TRUE, + GA_Text,"_Quit", + ButtonEnd, + CHILD_WeightedHeight, 0, + + EndGroup, + EndWindow; + + /* Object creation sucessful? + */ + if (objects[OID_MAIN]) + { + /* Open the window. + */ + if (windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN])) + { + ULONG wait, signal, app = (1L << AppPort->mp_SigBit); + ULONG done = FALSE; + ULONG result; + UWORD code; + + /* Obtain the window wait signal mask. + */ + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + + /* Input Event Loop + */ + while (!done) + { + wait = Wait( signal | SIGBREAKF_CTRL_C | app ); + + if ( wait & SIGBREAKF_CTRL_C ) + { + done = TRUE; + } + else + { + while ( (result = CA_HandleInput(objects[OID_MAIN], &code) ) != WMHI_LASTMSG ) + { + switch (result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + windows[WID_MAIN] = NULL; + done = TRUE; + break; + + case WMHI_GADGETUP: + switch (result & WMHI_GADGETMASK) + { + case GID_QUIT: + done = TRUE; + break; + } + break; + + case WMHI_ICONIFY: + CA_Iconify(objects[OID_MAIN]); + windows[WID_MAIN] = NULL; + break; + + case WMHI_UNICONIFY: + windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN]); + + if (windows[WID_MAIN]) + { + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + } + else + { + done = TRUE; // error re-opening window! + } + break; + } + } + } + } + } + + /* Disposing of the window object will also close the window if it is + * already opened, and it will dispose of the layout object attached to it. + */ + DisposeObject(objects[OID_MAIN]); + } + + /* free the chooser list + */ + FreeChooserLabels(chooserlist1); + } + + DeleteMsgPort(AppPort); + } + + return(0); +} diff --git a/Examples/Chooser/chooserexample.c.info b/Examples/Chooser/chooserexample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..3ba58254fb2f1c78d9d2e912bbfab3cf15f8622a GIT binary patch literal 300 zcmaDXz`)1=1dO5#LJTqt5)7f)L-~}K>ovi2L20w8Q4GUV_?7VoB#HQJ@U;L{@wo% zr2k*|pLO`d9)9Kv|87C#|3}>Zu)jh6!vE}gusQ$ZA?AV11sc!gTbfgnS(cev4zi2| E00xm&&j0`b literal 0 HcmV?d00001 diff --git a/Examples/Chooser/hiddenchooser b/Examples/Chooser/hiddenchooser new file mode 100644 index 0000000000000000000000000000000000000000..45587d7c7ea2b9fa242914de0f6514dee6816c16 GIT binary patch literal 10384 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 E0kkmmTmS$7 literal 0 HcmV?d00001 diff --git a/Examples/Chooser/hiddenchooser.c b/Examples/Chooser/hiddenchooser.c new file mode 100644 index 0000000..f89e30b --- /dev/null +++ b/Examples/Chooser/hiddenchooser.c @@ -0,0 +1,225 @@ +;/* Hidden Chooser Example +sc link hiddenchooser.c lib lib:classact.lib +quit + */ + +/** This example demonstrates the "hidden mode" mode of the chooser gadget. + ** + ** It is a NEW mode added recently to ClassAct release 2.0 - you *must* + ** have atleast V41.101 or later installed. Officially, this is a V42 + ** ClassAct 2.1 feature, but made available now due to developer demand. + ** + ** Hidden choosers currently need to be handled differently than visible + ** gadget objects. Since they are NOT added to the window, or layout group, + ** they do not trigger a GADGETUP. So, you must use an IDCMPUPDATE hook + ** and use the CHOOSER_Active notifications to get the selection. + **/ + +#define USE_BUILTIN_MATH +#define USE_SYSBASE + +#include +#include +#include + +#define INTUI_V36_NAMES_ONLY + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include + +#define ID_BUTTON 1 +#define ID_HIDDEN 2 + +/* Labels for the popup. + */ +UBYTE *chooser_strs[] = +{ + "Save Image", + "Load Image", + "Follow URL", + "Save to HotList", + NULL +}; + +/************************************************************************* + * IDCMP hook + */ + +void __asm __saveds IDCMPFunc( register __a0 struct Hook *Hook, + register __a2 Object *Window, + register __a1 struct IntuiMessage *Msg ) +{ + ULONG active; + + if (Msg->Class == IDCMP_IDCMPUPDATE) + { + /* The notification might include one of the tags we want to look at... + */ + if (GetTagData(GA_ID, 0, Msg->IAddress) == ID_HIDDEN) + { + active = GetTagData(CHOOSER_Active, -1, Msg->IAddress); + printf("active: %ld\n", active); + } + } +} + + +int main( int argc, char *argv[] ) +{ + if (ButtonBase) + { + Object *Chooser_Object_Hidden; + Object *Window_Object; + struct Window *window; + struct List *chooserlist; + struct Hook idcmphook; + + idcmphook.h_Entry = (ULONG (* )())IDCMPFunc; + idcmphook.h_SubEntry = NULL; + + chooserlist = ChooserLabelsA(chooser_strs); + + if (chooserlist) + { + /* Create an instance of the chooser class that will remain hidden. + */ + Chooser_Object_Hidden = ChooserObject, + GA_RelVerify, TRUE, + GA_ID, ID_HIDDEN, + CHOOSER_Labels, chooserlist, + CHOOSER_DropDown, TRUE, + CHOOSER_AutoFit, TRUE, + CHOOSER_Hidden, TRUE, + ICA_TARGET, ICTARGET_IDCMP, + ChooserEnd; + + /* Create the window object. */ + Window_Object = WindowObject, + WA_ScreenTitle, "ClassAct Release 2.0", + WA_Title, "Another ClassAct chooser.gadget Example", + WA_SizeGadget, TRUE, + WA_Left, 40, + WA_Top, 30, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_Activate, TRUE, + WA_SmartRefresh, TRUE, + WA_IDCMP, IDCMP_GADGETUP|IDCMP_GADGETDOWN|IDCMP_IDCMPUPDATE, + WINDOW_IDCMPHook, &idcmphook, /* For BOOPSI notification */ + WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE, + WINDOW_ParentGroup, VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_DeferLayout, TRUE, + + LAYOUT_AddChild, ButtonObject, + GA_RelVerify, TRUE, + GA_ID, ID_BUTTON, + GA_Text, "Press me to show the hidden chooser!", + ButtonEnd, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, VGroupObject, + CLASSACT_BackFill, NULL, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_VertAlignment, LALIGN_CENTER, + LAYOUT_HorizAlignment, LALIGN_CENTER, + LAYOUT_BevelStyle, BVS_FIELD, + + LAYOUT_AddImage, LabelObject, + LABEL_Text, "Selecting the button above will\n", + LABEL_Text, "reveal the hidden popup chooser!\n\n", + LABEL_Text, "Hidden choosers are useful for\n", + LABEL_Text, "context sensitive quick menus.\n", + LabelEnd, + + LayoutEnd, + LayoutEnd, + WindowEnd; + + /* Object creation sucessful? + */ + if( Window_Object ) + { + /* Open the window. + */ + if( window = (struct Window *) CA_OpenWindow(Window_Object) ) + { + ULONG wait, signal, result, done = FALSE; + WORD Code; + + /* Obtain the window wait signal mask. + */ + GetAttr( WINDOW_SigMask, Window_Object, &signal ); + + /* Input Event Loop + */ + while( !done ) + { + wait = Wait(signal|SIGBREAKF_CTRL_C); + + if (wait & SIGBREAKF_CTRL_C) done = TRUE; + else + + while ((result = CA_HandleInput(Window_Object,&Code)) != WMHI_LASTMSG) + { + switch (result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + done = TRUE; + break; + + case WMHI_GADGETUP: + switch(result & WMHI_GADGETMASK) + { + case ID_BUTTON: + ActivateGadget((struct Gadget *)Chooser_Object_Hidden, window, NULL); + break; + + } + break; + } + } + } + } + + /* Disposing of the window object will also close the window if it is + * already opened and it will dispose of all objects attached to it. + */ + DisposeObject( Window_Object ); + + /* The hidden chooser isn't attached to anything, so we must dispose + * it ourselves... + */ + DisposeObject( Chooser_Object_Hidden ); + } + } + FreeChooserLabels(chooserlist); + } +} diff --git a/Examples/Chooser/hiddenchooser.c.info b/Examples/Chooser/hiddenchooser.c.info new file mode 100644 index 0000000000000000000000000000000000000000..762fa970c60f7331c26e7b3237b65f791355b717 GIT binary patch literal 300 zcmaDXz`)1=1dLM{gcxKPBp6tMd`9*;cV2)*F#sbA1N+2U3-WU-P5=uq zMnJ?t!WnllXkAeNdZ~ogK_Q*G1_;>$5 zkp6$+f7am-d-$0z{JRB_{~vMt!~O>O3;(n0!RGvrhnNR47ic_}Z)r|RW?5!xImj{= E0F0(rJ^%m! literal 0 HcmV?d00001 diff --git a/Examples/ClickTab.info b/Examples/ClickTab.info new file mode 100644 index 0000000000000000000000000000000000000000..93ec449065a1ffab530d80deafad5b6ef14340a8 GIT binary patch literal 628 zcmZvZy-LJD6otz{w`9tY+Tr`FO5urW+VH%B}t^T{nKUEstzl`mH=Uk?zz=V9fDYfQD@SWy(A zC3YN_?KZ?W&lWrrJCV=Cj?41*bqx`Gy_pYdd#bzwd-B@YFXOJ5qid)5wBoMkuk|dD z%4cE@wTrg%sG{~l!?Eo7mzA?8sS&ZWeLYbJOwUEErR9 t=I_t5Ky}Ais(Oo_cjP}{N$>IZdR2J~au)1+>SjT57G$+pxUqKw^9T0jy+r^3 literal 0 HcmV?d00001 diff --git a/Examples/ClickTab/ClickTabExample b/Examples/ClickTab/ClickTabExample new file mode 100644 index 0000000000000000000000000000000000000000..15bc3c277320427a8902ac63faa9dda01f0ddc72 GIT binary patch literal 2968 zcmZuzZ){W76+h25j&a@K1QUf0wU?(?FYzqDkYi$b#B zeKszgc=EmX+;h%7|L?gbvi^rkpQXGCM3#2|w-8zX$zgS6Vnb3T>i93`@Q;!0Acw*k zV*9b~)-2xN94>CIH+Ipb#t0qtrUVcB9u;)g-8@rR1GU`EYj(D6=3QzPx4n_GPvTUr zv5hXy7pN(Il=-R2o-=U@jf?w9AR#ih*&52}WT|abXsklLxP%iTxl$yNXSg1;LCA@} zQK0d*&q-sGk+}zwW(g>;C5vGIn`8yLSUzFn^!5VH8w5SnM3K3TKX7}4Yr>p?-GkeZ z*`2T(agFF+<8k^W6+-XA7orJvoC>#!w~FE*xj$a~c#&B$RJ*gWgWg`6{7KHDAOZ>< zQ&$w_8y~{U7E36Xa2Ot$bP`&b0-hdbIgjV#48% zHotabFFUkQ+rQ`-Y|WL|^N=zxlcX>oNqW6MN!?5l8weh3UIMKka_9_8g3F;MDa-~* zY8)gRy&d^*%NQ(jVZCmUW@9qhq$FK>mKu|kq>DViFBK?Tj+m22(2S}rkfbbfbw#%^ zB{GBaQO;ZDs|^)M(_K6ZI6cTu1VZ2**Ii@~XWU-VkEn9ougkP?@Xf== zb6PFO;OsHo0bCD1hqW8DKK4v_`DYW6(Rg|!kR0mE#4@KyT@mWM9X@q}Vq`V6a8s4K z(0*ARBfGpmCy*78U_us|%+(=pH`glIk!M|y|4G*>NvJoMsIWt2dz?M5Mh}K&6Z3`; zULMRvMvun&diM~Yo6Y$-b8exRhf?wM%Ypu6Y-EH;kHz(Y?1-FCJ;Vq3p|<`k3#N@znIU~J%l16~{P+E=doY&Dria-N2Tl$o)5h>XD$By*V1Ozo z{!bKpVJtRmBnJrbpuIlT`=aJzo!mqC_h)ZNI>MZZFW8~*a*{N%sJ~h#x4L58tF8(H z)d$x$Te;trJCFlrZ)G=y-480eJhF(pDSU`^3hPyVQ-uO@e?Is*AqyKR=*>azr@#0J z(3DT%Frd8Ggk)#?<@U?+{<9Xtg6cePLP9xDR&viSg10Djq0Z(WOd&VB#9nzTP9T40 z$?&kw5-;GVDv-AV2@-N@o|9Ow>?ohJbZ;qZAi7Y2rYq1?1v*oKeh%nq)C$o6pav6) zSE!Tf>5a_nqKQqhL)bN&aJr)Z80+;aJUa9m_m_T57Ws)7(H;2Y0zSz)gR8_Q&`Hl) zx-GCeqaDSKWTd#wPK%oVt%Jy=dnW{~mD$@BTaM77b!U0CYc5b6>VftH>VYHY)HF$^ z9>LU;;d=a(_+97~{fb!)Md+B|nTpYa+qh$S-6<-iipTBpBcI>i=N{b~gz8!N8!9I< z8actzWNW`dw%sZ@dh)v+kx?SqDW%E5oO&Ppab~}f?rWf2ZPP43F1KU2Xi`tPkXMH-jJKiOiq|Y=+0B z7}V1h87*@#a5x@va6Dp-E-m9`twl?F-0?bJn%sEHK5!|~3+^2mHZSP+Gg~qLJLANB z&%HyBWW;$P(V$g>?gM0xUI^{bt4)4TbX$lL{{V(XFKD|sRj8!#|aL%-=Cpzuz zV6XP%wSC~^_64HT2DxhxmFmn3Gm|>(;Irm#->!AntBsk;@O#{5^Dd+5jY zP>pVhPJ=Vg7E9V6>rIVrZ{MlWW}JJIu*24Qyn?W}QKjpM@Mq}u=#b=-t4)9FLIqmT z-O(I!yl~g_96ks9sD)Bq@c!5WQh_@MDfhj-ZL9ROsD^eX){jg}j@hEW)4Nryg3Kj$C{zz@{`KE`9b%RAB*)>L z0oZYp|Ib?D79ig7KjPohW~+JX6S4DQPncaq54w{%&6M43^d|2AdEEb&Z@<97Sn9i3 zmNo`b?BqaZWGJ0t&nDw6onSGar7wf$lH=2gNm0761SM literal 0 HcmV?d00001 diff --git a/Examples/ClickTab/ClickTabExample.c b/Examples/ClickTab/ClickTabExample.c new file mode 100644 index 0000000..3a8fa50 --- /dev/null +++ b/Examples/ClickTab/ClickTabExample.c @@ -0,0 +1,207 @@ +#define USE_BUILTIN_MATH +#define USE_SYSBASE + +#include +#include +#include + +#define INTUI_V36_NAMES_ONLY + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +struct ClassLibrary *WindowBase; +struct ClassLibrary *LayoutBase; +struct ClassLibrary *ClickTabBase; + +#define ID_CLICKTAB 1 + +struct List listitems; +UBYTE *names[] = +{ + "Tab_1", + "Tab_2", + "Tab_3", + "Tab_4", + NULL +}; + +BOOL ClickTabNodes(struct List *list, UBYTE **labels) +{ + struct Node *node; + WORD i = 0; + + NewList(list); + + while (*labels) + { + if (node = (struct Node *)AllocClickTabNode( + TNA_Text, *labels, + TNA_Number, i, + TNA_Enabled, TRUE, + TNA_Spacing, 6, + TAG_DONE)) + { + AddTail(list, node); + } + labels++; + i++; + } + return(TRUE); +} + +VOID FreeClickTabNodes(struct List *list) +{ + struct Node *node, *nextnode; + + node = list->lh_Head; + while (nextnode = node->ln_Succ) + { + FreeClickTabNode(node); + node = nextnode; + } + NewList(list); +} + +int main( int argc, char *argv[] ) +{ + struct Window *window; + Object *Tab_Object; + Object *Win_Object; + + /* Open the classes - typically not required to be done manually. + * SAS/C or DICE AutoInit can do this for you if linked with the + * supplied classact.lib + */ + WindowBase = (struct ClassLibrary *)OpenLibrary("window.class",0L); + LayoutBase = (struct ClassLibrary *)OpenLibrary("gadgets/layout.gadget",0L); + ClickTabBase = (struct ClassLibrary *)OpenLibrary("gadgets/clicktab.gadget",0L); + + if(WindowBase && LayoutBase && ClickTabBase) + { + ClickTabNodes(&listitems, names); + + /* Create the window object. + */ + Win_Object = WindowObject, + WA_ScreenTitle, "ClassAct Copyright 1995, Phantom Development LLC.", + WA_Title, "ClassAct clicktab.gadget Example", + WA_SizeGadget, TRUE, + WA_Left, 40, + WA_Top, 30, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_Activate, TRUE, + WA_SmartRefresh, TRUE, + WINDOW_ParentGroup, VLayoutObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_DeferLayout, TRUE, + StartMember, Tab_Object = ClickTabObject, + GA_ID, ID_CLICKTAB, + CLICKTAB_Labels, &listitems, + CLICKTAB_Current, 0L, + EndMember, + EndMember, + EndWindow; + + /* Object creation sucessful? + */ + if( Win_Object ) + { + /* Open the window. + */ + if( window = (struct Window *) CA_OpenWindow(Win_Object) ) + { + ULONG wait, signal, result, done = FALSE; + WORD Code; + + /* Obtain the window wait signal mask. + */ + GetAttr( WINDOW_SigMask, Win_Object, &signal ); + + /* Input Event Loop + */ + while( !done ) + { + wait = Wait(signal|SIGBREAKF_CTRL_C); + + if (wait & SIGBREAKF_CTRL_C) done = TRUE; + else + + while ((result = CA_HandleInput(Win_Object,&Code)) != WMHI_LASTMSG) + { + switch (result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + done = TRUE; + break; + + case WMHI_GADGETUP: + switch(result & WMHI_GADGETMASK) + { + case ID_CLICKTAB: + break; + } + break; + } + } + } + } + + /* Disposing of the window object will + * also close the window if it is + * already opened and it will dispose of + * all objects attached to it. + */ + DisposeObject( Win_Object ); + } + } + + FreeClickTabNodes(&listitems); + + /* Close the classes. + */ + if (ClickTabBase) CloseLibrary( (struct Library *)ClickTabBase ); + if (LayoutBase) CloseLibrary( (struct Library *)LayoutBase ); + if (WindowBase) CloseLibrary( (struct Library *)WindowBase ); +} + +#ifdef _DCC +int wbmain( struct WBStartup *wbs ) +{ + return( main( 0, NULL )); +} +#endif diff --git a/Examples/ClickTab/ClickTabExample.c.info b/Examples/ClickTab/ClickTabExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..0d831b6b0be9594a9678800c803f4ad4e9eec286 GIT binary patch literal 300 zcmaDXz`)1=1dIU;LJTqt5)7f)L-~}K>ovi2L20w8Q4GUV_?7VoB#HQJ@U;L{@wo% zr2k*|pLO`d9)9Kv|87C#|3}>Zu)jh6!vE}gusQ$ZA?AV11sc!gTbfgnS(cev4zi2| E0If_`eE0=D|XP91a$5fYJ_N+JHfU z!2u}l)g-{60HmFm1Q-NB^sEU593XnJfI7K1DN{%gW+l@2n1l#_WvN_4h*6o`6~?&`YHnhYyH#!hD$)t sHn4(eRt5;o#J~s|Fx}Ar76%jHn1_Zi0E3`cQUCw| literal 0 HcmV?d00001 diff --git a/Examples/ClickTab/PageExample.c.info b/Examples/ClickTab/PageExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..74239e84759bb4da2d5c7cef426a9beedb101659 GIT binary patch literal 300 zcmZ8aI|{-;5S>k;D@usiXd&bVp2NmIoi>6omVU|z9>79xVPk0#+<+I@Qj$VJ53qfR z<9-yufqDBr!`nv_2&j2N3%byOiqwSe2Q}^f195=v`X{-JI@OTMS zoPqMf%SGaE`0Ix9MUK;pNIaXrGLvJF3%2$-MzQX}q3Kh-vc5i8%;w=T9Iw=8&KuvP BR;~a5 literal 0 HcmV?d00001 diff --git a/Examples/ClickTab/PageExample.info b/Examples/ClickTab/PageExample.info new file mode 100644 index 0000000000000000000000000000000000000000..c654e62127d6da169a20034cdfba14c9fac2e34c GIT binary patch literal 521 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 +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +/* ClassAct includes + */ +#include + + +enum +{ + GID_MAIN=0, + GID_CLICKTAB, + GID_PAGE, + + GID_ALIGN1, + GID_ALIGN2, + GID_ALIGN3, + + GID_PAGELAY1, + GID_PAGELAY2, + + GID_COMPANY, + GID_LASTNAME, + GID_FIRSTNAME, + GID_ADD1, + GID_ADD2, + GID_CITY, + GID_STATE, + GID_ZIPCODE, + GID_PHONE, + GID_FAX, + + GID_CUSTOMERS, + GID_ORDERS, + GID_DETAILS, + GID_NEWORD, + GID_EDITORD, + GID_DELORD, + + GID_QUIT, + GID_LAST +}; + +enum +{ + WID_MAIN=0, + WID_LAST +}; + +enum +{ + OID_MAIN=0, + OID_LAST +}; + + +int main(void) +{ + struct MsgPort *AppPort; + + struct Window *windows[WID_LAST]; + + struct Gadget *gadgets[GID_LAST]; + + Object *objects[OID_LAST]; + + /* special case - reference buttonbase to make sure it autoinit! + */ + if ( !ButtonBase ) + return(30); + else if ( AppPort = CreateMsgPort() ) + { + struct List *tablabels = ClickTabs("_Contacts","_Orders", NULL); + + if (tablabels) + { + /* Create the window object. + */ + objects[OID_MAIN] = WindowObject, + WA_ScreenTitle, "ClassAct Release 2.0", + WA_Title, "ClassAct Page Example", + WA_Activate, TRUE, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_SizeGadget, TRUE, + WINDOW_IconifyGadget, TRUE, + WINDOW_IconTitle, "Page", + WINDOW_AppPort, AppPort, + WINDOW_Position, WPOS_CENTERMOUSE, + WINDOW_ParentGroup, gadgets[GID_MAIN] = VGroupObject, + LAYOUT_DeferLayout, TRUE, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_SpaceInner, TRUE, + + LAYOUT_AddChild, gadgets[GID_CLICKTAB] = ClickTabObject, + GA_ID, GID_CLICKTAB, + GA_RelVerify, TRUE, + CLICKTAB_Labels, tablabels, + + /* Embed the PageObject "inside" the Clicktab + * the clicktab's beveling will surround the page. + */ + CLICKTAB_PageGroup, gadgets[GID_PAGE] = PageObject, + /* We will defer layout/render changing pages! */ + LAYOUT_DeferLayout, TRUE, + + PAGE_Add, gadgets[GID_PAGELAY1] = VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_SpaceInner, TRUE, + + LAYOUT_AddChild, gadgets[GID_COMPANY] = StringObject, + GA_ID, GID_COMPANY, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + STRINGA_MaxChars, 48, + STRINGA_TextVal, "", + StringEnd, + CHILD_Label, LabelObject, LABEL_Text,"Company", LabelEnd, + CHILD_MinWidth, 200, + + LAYOUT_AddChild, gadgets[GID_ALIGN1] = HGroupObject, + LAYOUT_AddChild, gadgets[GID_LASTNAME] = StringObject, + GA_ID, GID_LASTNAME, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + STRINGA_MaxChars, 48, + STRINGA_TextVal, "", + StringEnd, + CHILD_Label, LabelObject, LABEL_Text,"Last", LabelEnd, + + LAYOUT_AddChild, gadgets[GID_FIRSTNAME] = StringObject, + GA_ID, GID_FIRSTNAME, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + STRINGA_MaxChars, 48, + STRINGA_TextVal, "", + StringEnd, + CHILD_Label, LabelObject, LABEL_Text,"First", LabelEnd, + LayoutEnd, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, gadgets[GID_ADD1] = StringObject, + GA_ID, GID_ADD1, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + STRINGA_MaxChars, 48, + STRINGA_TextVal, "", + StringEnd, + CHILD_Label, LabelObject, LABEL_Text,"Address 1", LabelEnd, + + LAYOUT_AddChild, gadgets[GID_ADD2] = StringObject, + GA_ID, GID_ADD2, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + STRINGA_MaxChars, 48, + STRINGA_TextVal, "", + StringEnd, + CHILD_Label, LabelObject, LABEL_Text,"Address 2", LabelEnd, + + LAYOUT_AddChild, gadgets[GID_ALIGN2] = HGroupObject, + LAYOUT_AddChild, gadgets[GID_CITY] = StringObject, + GA_ID, GID_CITY, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + STRINGA_MaxChars, 48, + STRINGA_TextVal, "", + StringEnd, + CHILD_Label, LabelObject, LABEL_Text,"City", LabelEnd, + CHILD_WeightedWidth, 100, + + LAYOUT_AddChild, gadgets[GID_STATE] = StringObject, + GA_ID, GID_STATE, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + STRINGA_MaxChars, 48, + STRINGA_TextVal, "", + StringEnd, + CHILD_Label, LabelObject, LABEL_Text,"State", LabelEnd, + CHILD_WeightedWidth, 75, + + LAYOUT_AddChild, gadgets[GID_ZIPCODE] = StringObject, + GA_ID, GID_ZIPCODE, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + STRINGA_MaxChars, 24, + STRINGA_TextVal, "", + StringEnd, + CHILD_Label, LabelObject, LABEL_Text,"ZipCode", LabelEnd, + CHILD_WeightedWidth, 25, + LayoutEnd, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, gadgets[GID_ALIGN3] = HGroupObject, + LAYOUT_BevelStyle, BVS_SBAR_VERT, + LAYOUT_TopSpacing, 2, + + LAYOUT_AddChild, gadgets[GID_PHONE] = StringObject, + GA_ID, GID_PHONE, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + STRINGA_MaxChars, 48, + STRINGA_TextVal, "", + StringEnd, + CHILD_Label, LabelObject, LABEL_Text,"Phone", LabelEnd, + + LAYOUT_AddChild, gadgets[GID_FAX] = StringObject, + GA_ID, GID_FAX, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + STRINGA_MaxChars, 48, + STRINGA_TextVal, "", + StringEnd, + CHILD_Label, LabelObject, LABEL_Text,"Fax", LabelEnd, + LayoutEnd, + CHILD_WeightedHeight, 0, + LayoutEnd, + + PAGE_Add, gadgets[GID_PAGELAY2] = VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_SpaceInner, TRUE, + + LAYOUT_AddChild, HGroupObject, + LAYOUT_SpaceInner, TRUE, + // customer + LAYOUT_AddChild, gadgets[GID_CUSTOMERS] = ListBrowserObject, + GA_ID, GID_CUSTOMERS, + GA_RelVerify, TRUE, + LISTBROWSER_Labels, NULL, + LISTBROWSER_ShowSelected, TRUE, + LISTBROWSER_HorizontalProp, TRUE, + ListBrowserEnd, + CHILD_WeightedWidth, 30, + + LAYOUT_AddChild, VGroupObject, + LAYOUT_SpaceInner, TRUE, + // orders + LAYOUT_AddChild, gadgets[GID_ORDERS] = ListBrowserObject, + GA_ID, GID_ORDERS, + GA_RelVerify, TRUE, + LISTBROWSER_Labels, NULL, + LISTBROWSER_ShowSelected, TRUE, + LISTBROWSER_HorizontalProp, TRUE, + ListBrowserEnd, + // details + LAYOUT_AddChild, gadgets[GID_DETAILS] = ListBrowserObject, + GA_ID, GID_DETAILS, + GA_RelVerify, TRUE, + LISTBROWSER_Labels, NULL, + LISTBROWSER_ShowSelected, TRUE, + LISTBROWSER_HorizontalProp, TRUE, + ListBrowserEnd, + LayoutEnd, + CHILD_WeightedWidth, 70, + LayoutEnd, + + LAYOUT_AddChild, HGroupObject, + LAYOUT_AddChild, gadgets[GID_NEWORD] = ButtonObject, + GA_ID, GID_NEWORD, + GA_RelVerify, TRUE, + GA_Text, "_New Order", + ButtonEnd, + + LAYOUT_AddChild, gadgets[GID_EDITORD] = ButtonObject, + GA_ID, GID_EDITORD, + GA_RelVerify, TRUE, + GA_Text, "_Edit Order", + ButtonEnd, + + LAYOUT_AddChild, gadgets[GID_DELORD] = ButtonObject, + GA_ID, GID_DELORD, + GA_RelVerify, TRUE, + GA_Text, "_Delete Order", + ButtonEnd, + + LayoutEnd, + CHILD_WeightedHeight, 0, + + LayoutEnd, + + PageEnd, + + ClickTabEnd, + + LAYOUT_AddChild, ButtonObject, + GA_ID, GID_QUIT, + GA_RelVerify, TRUE, + GA_Text,"_Quit", + ButtonEnd, + CHILD_WeightedHeight, 0, + + EndGroup, + EndWindow; + + /* Object creation sucessful? + */ + if (objects[OID_MAIN]) + { + /* Set up inter-group label pagement. + */ + SetAttrs( gadgets[GID_PAGELAY1], LAYOUT_AlignLabels, gadgets[GID_ALIGN1], TAG_DONE); + SetAttrs( gadgets[GID_ALIGN1], LAYOUT_AlignLabels, gadgets[GID_ALIGN2], TAG_DONE); + SetAttrs( gadgets[GID_ALIGN2], LAYOUT_AlignLabels, gadgets[GID_ALIGN3], TAG_DONE); + + /* Open the window. + */ + if (windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN])) + { + ULONG wait, signal, app = (1L << AppPort->mp_SigBit); + ULONG done = FALSE; + ULONG result; + UWORD code; + + /* Obtain the window wait signal mask. + */ + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + + /* Activate the first string gadget! + */ +// ActivateLayoutGadget( gadgets[GID_MAIN], windows[WID_MAIN], NULL, gadgets[GID_COMPANY] ); + + /* Input Event Loop + */ + while (!done) + { + wait = Wait( signal | SIGBREAKF_CTRL_C | app ); + + if ( wait & SIGBREAKF_CTRL_C ) + { + done = TRUE; + } + else + { + while ( (result = CA_HandleInput(objects[OID_MAIN], &code) ) != WMHI_LASTMSG ) + { + switch (result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + windows[WID_MAIN] = NULL; + done = TRUE; + break; + + case WMHI_GADGETUP: + switch (result & WMHI_GADGETMASK) + { + case GID_COMPANY: + // printf( "Company: %s\n", ((struct StringInfo *)(gadgets[GID_COMPANY]->SpecialInfo))->Buffer); + break; + + case GID_QUIT: + done = TRUE; + break; + } + break; + + case WMHI_ICONIFY: + CA_Iconify(objects[OID_MAIN]); + windows[WID_MAIN] = NULL; + break; + + case WMHI_UNICONIFY: + windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN]); + + if (windows[WID_MAIN]) + { + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + } + else + { + done = TRUE; // error re-opening window! + } + break; + } + } + } + } + } + + /* Disposing of the window object will also close the window if it is + * already opened, and it will dispose of the layout object attached to it. + */ + DisposeObject(objects[OID_MAIN]); + } + + /* Free the click tab label list. + */ + FreeClickTabs(tablabels); + } + + /* close/free the application port. + */ + DeleteMsgPort(AppPort); + } + + return(0); +} diff --git a/Examples/Connect.info b/Examples/Connect.info new file mode 100644 index 0000000000000000000000000000000000000000..a00b73f4a785267cc3e0d1cadea9fb143f47ae1c GIT binary patch literal 628 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 Z055)FFpd|tt+mHmGXrk}a6Gmz{|_xKED`_! literal 0 HcmV?d00001 diff --git a/Examples/Connect/ConnectExample.c b/Examples/Connect/ConnectExample.c new file mode 100644 index 0000000..873efca --- /dev/null +++ b/Examples/Connect/ConnectExample.c @@ -0,0 +1,183 @@ +/* ClassAct Inter-Connection Notification Example + */ +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#define ID_BUTTON 1 +#define ID_FOREGROUND 2 +#define ID_BACKGROUND 3 + +struct ClassLibrary *WindowBase; +struct ClassLibrary *LayoutBase; +struct ClassLibrary *LabelBase; +struct ClassLibrary *ButtonBase; +struct ClassLibrary *PaletteBase; + +int main( int argc, char *argv[] ) +{ + struct Window *window; + Object *But_Object; + Object *Win_Object; + + /* Palette Color To Button ForeGround mapping. + */ + struct TagItem MapFG2Button[] = + { + PALETTE_Color, BUTTON_TextPen, + TAG_END + }; + + /* Palette Color To Button BackGround mapping. + */ + struct TagItem MapBG2Button[] = + { + PALETTE_Color, BUTTON_BackgroundPen, + TAG_END + }; + + /* Open the classes - typically not required to be done manually. + * SAS/C or DICE AutoInit can do this for you if linked with the + * supplied classact.lib + */ + WindowBase = (struct ClassLibrary *)OpenLibrary("window.class",0L); + LayoutBase = (struct ClassLibrary *)OpenLibrary("gadgets/layout.gadget",0L); + ButtonBase = (struct ClassLibrary *)OpenLibrary("gadgets/button.gadget",0L); + PaletteBase = (struct ClassLibrary *)OpenLibrary("gadgets/palette.gadget",0L); + LabelBase = (struct ClassLibrary *)OpenLibrary("images/label.image",0L); + + if(WindowBase && LayoutBase && ButtonBase && PaletteBase && LabelBase) + { + /* Create the window object. + */ + Win_Object = WindowObject, + WA_ScreenTitle, "ClassAct Copyright 1995, Phantom Development LLC.", + WA_Title, "ClassAct Example", + WA_SizeGadget, TRUE, + WA_Left, 40, + WA_Top, 30, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_Activate, TRUE, + WA_SmartRefresh, TRUE, + WINDOW_ParentGroup, VLayoutObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_DeferLayout, TRUE, + LAYOUT_BevelStyle, GroupFrame, + LAYOUT_Label, "InterConnection", + StartMember, But_Object = ButtonObject, + GA_Text, "_Inter-Connection Example", + GA_ID, ID_BUTTON, + EndMember, + CHILD_WeightedHeight, 0, + + StartMember, HLayoutObject, + LAYOUT_SpaceOuter, FALSE, + StartMember, PaletteObject, + GA_ID, ID_FOREGROUND, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + ICA_TARGET, But_Object, /* object to connect to */ + ICA_MAP, MapFG2Button, /* tag mapping array */ + EndMember, + CHILD_Label, LabelObject, LABEL_Text, "_ForeGround", LabelEnd, + CHILD_MinWidth, 90, + CHILD_MinHeight, 20, + + StartMember, PaletteObject, + GA_ID, ID_BACKGROUND, + PALETTE_NumColors, 8, + PALETTE_Color, 0, + ICA_TARGET, But_Object, /* object to connect to */ + ICA_MAP, MapBG2Button, /* tag mapping array */ + EndMember, + CHILD_Label, LabelObject, LABEL_Text, "_BackGround", LabelEnd, + CHILD_MinWidth, 90, + CHILD_MinHeight, 20, + EndMember, + EndMember, + EndWindow; + + /* Object creation sucessful? + */ + if( Win_Object ) + { + /* Open the window. + */ + if( window = (struct Window *) CA_OpenWindow(Win_Object) ) + { + ULONG wait, signal, result, done = FALSE; + WORD Code; + + /* Obtain the window wait signal mask. + */ + GetAttr( WINDOW_SigMask, Win_Object, &signal ); + + /* Input Event Loop + */ + while( !done ) + { + wait = Wait(signal|SIGBREAKF_CTRL_C); + + if (wait & SIGBREAKF_CTRL_C) done = TRUE; + else + + while ((result = CA_HandleInput(Win_Object,&Code)) != WMHI_LASTMSG) + { + switch (result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + done = TRUE; + break; + + case WMHI_GADGETUP: + switch(result & WMHI_GADGETMASK) + { + case ID_BUTTON: + break; + } + break; + } + } + } + } + + /* Disposing of the window object will + * also close the window if it is + * already opened and it will dispose of + * all objects attached to it. + */ + DisposeObject( Win_Object ); + } + } + + /* Close the classes. + */ + if (LabelBase) CloseLibrary( (struct Library *)LabelBase ); + if (PaletteBase) CloseLibrary( (struct Library *)PaletteBase ); + if (ButtonBase) CloseLibrary( (struct Library *)ButtonBase ); + if (LayoutBase) CloseLibrary( (struct Library *)LayoutBase ); + if (WindowBase) CloseLibrary( (struct Library *)WindowBase ); +} + +#ifdef _DCC +int wbmain( struct WBStartup *wbs ) +{ + return( main( 0, NULL )); +} +#endif diff --git a/Examples/Connect/ConnectExample.c.info b/Examples/Connect/ConnectExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..54e899dce7ad435385ec750db3870b561ce93a8e GIT binary patch literal 300 zcmaDXz`)1=0&^II7-SeE7+8UPM)oDXKft2s1S1Or`@~uc_WtD!K&cr(%z{v&_W;b6 zVGw6vVqh-kU`9v*S-cG!zj#lX#Q1I%JO01;r$f-snFLHQ9724i*tSb#AC zA`T+||NsAC|Ns9N{{G+pVgG~r3x5yDf7s8!f8j3!`-goD>=%CX-~O;izWKtx`~QLT z{|o=K4u9Cg&wSzEEr|U8h}$3bH^^W3pIr|&=YKrJJdn9SVzmazZ; Dt_@aF literal 0 HcmV?d00001 diff --git a/Examples/Connect/ConnectExample.info b/Examples/Connect/ConnectExample.info new file mode 100644 index 0000000000000000000000000000000000000000..111a7935dd5713c33a3baaa880d3bdbc863b5721 GIT binary patch literal 626 zcmaDXz`)1=0ul^D3}y`C3@kuCBm10P7GP0yf{__nLHNKNU$SG z!Ibep#b9&~kYE3R`9DeY|Njv6AE5e3qM3oZA^Jg1fw_Z+p&l&$hXG9e|G{uI6a)g` z^mVXA0K+u~2L9jwNTL~-q3ZvWL0ruYdph9|Hpk^aEy~dO`pI DSG1o9 literal 0 HcmV?d00001 diff --git a/Examples/EnvEdit.info b/Examples/EnvEdit.info new file mode 100644 index 0000000000000000000000000000000000000000..4f50977b585a3e4f4d46a99db1efcf83fcebb2f8 GIT binary patch literal 628 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 literal 0 HcmV?d00001 diff --git a/Examples/EnvEdit/EnvEdit.c.info b/Examples/EnvEdit/EnvEdit.c.info new file mode 100644 index 0000000000000000000000000000000000000000..0fdd1ea527c302b82777b75fe9043d7cd4565161 GIT binary patch literal 300 zcmaDXz`)1=0yzvq3^EK746HytBm0to4zMUX!N|hEKC#wYOFe9XZEZ&9V2*g}(>nKkR4VzwnoV{lh*6_6xuHZ-3Y$-+bZU{r^Dv z|Aqfqhd=D$XTI?77DWDk#O)9J8{{wi&#niX^FJP99>`pv@m#*8IVG88nW^O<%UA$Q C%T^Kq literal 0 HcmV?d00001 diff --git a/Examples/EnvEdit/EnvEdit.info b/Examples/EnvEdit/EnvEdit.info new file mode 100644 index 0000000000000000000000000000000000000000..5cd1fb5b05784e2c228fa4323bcd0afb6b4e8f8f GIT binary patch literal 525 zcmaDXz`)1=0z3>t3}y`C3@i-H4286%MjV6Fe;|O`43jZq5CdvqF6Ur|i2!L9D4PeB=78{-B!DzK z(546=&5{bC*+QZGAPCJ4rGX|u)QdELX%@o+V45wY0iqvB?*N%+0+9!)2k}8P$b5UC zlYcvUGJ literal 0 HcmV?d00001 diff --git a/Examples/EnvEdit/envedit.c b/Examples/EnvEdit/envedit.c new file mode 100644 index 0000000..d03db33 --- /dev/null +++ b/Examples/EnvEdit/envedit.c @@ -0,0 +1,889 @@ + +/** + ** EnvEdit.c -- Environmental variable editor. + ** + ** This is a cute little tool to edit your environmental variables with a + ** GUI. Seen a dozen of these already have you eh? Well, this one is + ** different. It uses a hierarchical listbrowser, so you can not only + ** see simple environmental variables, but also ones buried deep in + ** directories (we'll call those directories "records", since these are + ** supposed to be variables). Also, we do not have to call an external + ** text editor to edit the value of variables, not are we limited to + ** one-line variables because we use textfield for editing variables. + ** + ** With all that said, there are somethings missing: the ability to delete, + ** rename and create variables. Think of this as an exercise in learning + ** ClassAct, to add these features (and send us the source when you're + ** done :). + ** + **/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* #define D(x) x to compile with debugging output. + */ +#define D(x) + +#ifdef _DCC +#define SAVEDS __geta4 +#define ASM +#define REG_A0 __A0 +#define REG_A1 __A1 +#else +#define SAVEDS __saveds +#define ASM __asm +#define REG_A0 register __a0 +#define REG_A1 register __a1 +#endif + +enum { GAD_LIST, GAD_EDIT, GAD_SAVE, GAD_USE, GAD_CANCEL }; + +/* ARexx command IDs + */ +enum { REXX_NAME, REXX_VERSION, REXX_AUTHOR, REXX_ACTIVATE, REXX_DEACTIVATE, + REXX_QUIT, REXX_WINDOWTOBACK, REXX_WINDOWTOFRONT }; + + + +/* Some additional info we put in listbrowser node userdata field. + */ +struct LBUserData +{ + UBYTE lbud_FileName[255]; + BOOL lbud_Changed; + STRPTR lbud_Buf; + ULONG lbud_BufSize; +}; + + +/* Function prototypes. + */ +VOID load_text(struct Window *); +LONG file_size(char *); +VOID save_changed(struct List *, STRPTR, BOOL); +BOOL read_files(struct List *, STRPTR, WORD); +VOID bstrcpy(STRPTR, BSTR); +VOID free_list(struct List *); +LONG easy_req(struct Window *, char *, char *, char *, ...); +VOID ASM rexx_name(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *); +VOID ASM rexx_version(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *); +VOID ASM rexx_author(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *); +VOID ASM rexx_activate(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *); +VOID ASM rexx_deactivate(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *); +VOID ASM rexx_quit(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *); +VOID ASM rexx_about(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *); +VOID ASM rexx_windowtoback(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *); +VOID ASM rexx_windowtofront(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *); + +/* Global variables. + */ +struct List file_list; +struct Gadget *layout, *list_gad, *edit_gad; +struct DrawInfo *drinfo; +Object *window_obj; +struct Window *win; +BOOL ok = TRUE; + +struct ColumnInfo ci[] = +{ + { 75, "Variable", 0 }, + { 25, "Size", 0 }, + { 75, "Date", 0 }, + { 25, "Time", 0 }, + { -1, (STRPTR)~0, -1 } +}; + +/* ARexx command table. These commands may not seem terribly useful at first, + * but these are a basic set of commands that every app should support. + */ +struct ARexxCmd arexx_cmds[] = +{ + { "NAME", REXX_NAME, rexx_name, NULL, NULL, }, + { "VERSION", REXX_VERSION, rexx_version, NULL, NULL, }, + { "AUTHOR", REXX_AUTHOR, rexx_author, NULL, NULL, }, + { "ACTIVATE", REXX_ACTIVATE, rexx_activate, NULL, NULL, }, + { "DEACTIVATE", REXX_DEACTIVATE, rexx_deactivate, NULL, NULL, }, + { "QUIT", REXX_QUIT, rexx_quit, NULL, NULL, }, + { "WINDOWTOBACK", REXX_WINDOWTOBACK, rexx_windowtoback, NULL, NULL, }, + { "WINDOWTOFRONT", REXX_WINDOWTOFRONT, rexx_windowtofront, NULL, NULL, }, + { NULL, NULL, NULL, NULL, NULL, } +}; + + +/* Custom leaf/show/hide images for the hierarchy control. + */ +__chip UWORD leaf_data[27] = +{ + /* Plane 0 */ + 0x0800, 0x1C00, 0x3600, 0x6B00, + 0xD580, 0x6B00, 0x3600, 0x1C00, + 0x0800, + /* Plane 1 */ + 0x0800, 0x1800, 0x3400, 0x6A00, + 0xD500, 0x6A00, 0x3400, 0x1800, + 0x0000, +}; + +struct Image leaf_image = +{ + 0, 0, 9, 9, 2, &leaf_data[0], 0x3, 0x0, NULL +}; + +__chip UWORD show_data[27] = +{ + /* Plane 0 */ + 0x7C00, 0xD600, 0xABC0, 0x8020, + 0xD560, 0xAAA0, 0xD560, 0xAAA0, + 0x7FC0, + /* Plane 1 */ + 0x7C00, 0xD600, 0xABC0, 0x8000, + 0xD540, 0xAA80, 0xD540, 0xAA80, + 0x0000, +}; + +struct Image show_image = +{ + 0, 0, 11, 9, 2, &show_data[0], 0x3, 0x0, NULL +}; + +__chip UWORD hide_data[27] = +{ + /* Plane 0 */ + 0x7C00, 0xD600, 0xABC0, 0xFFF0, + 0xF558, 0xEAA8, 0xD550, 0xFFE0, + 0x7FC0, + /* Plane 1 */ + 0x7C00, 0xD600, 0xABC0, 0xAFF0, + 0xD550, 0xAAA0, 0xD540, 0xFFC0, + 0x0000, +}; + +struct Image hide_image = +{ + 0, 0, 13, 9, 2, &hide_data[0], 0x3, 0x0, NULL +}; + + +/* This is the start of our programme. + */ +#ifdef _DCC +wbmain() { main(); } +#endif + +main() +{ + struct Screen *screen = NULL; + + if (!ButtonBase) return(20); + + /* We'll just open up on the default public screen, and use its screen font. + */ + if (screen = LockPubScreen(NULL)) + { + UWORD mapping[4]; + + drinfo = GetScreenDrawInfo(screen); + + NewList(&file_list); + read_files(&file_list, "ENV:", 1); + + /* Setup a simple mapping. + */ + mapping[0] = drinfo->dri_Pens[BACKGROUNDPEN]; + mapping[1] = drinfo->dri_Pens[SHADOWPEN]; + mapping[2] = drinfo->dri_Pens[SHINEPEN]; + mapping[3] = drinfo->dri_Pens[FILLPEN]; + + /* Do the layout. + */ + if (layout = LayoutObject, + GA_DrawInfo, drinfo, + ICA_TARGET, ICTARGET_IDCMP, + LAYOUT_DeferLayout, TRUE, + + LAYOUT_SpaceOuter, TRUE, + LAYOUT_Orientation, LAYOUT_ORIENT_VERT, + LAYOUT_HorizAlignment, LAYOUT_ALIGN_CENTER, + + LAYOUT_AddChild, list_gad = ListBrowserObject, + GA_ID, GAD_LIST, + GA_RelVerify, TRUE, + LISTBROWSER_Labels, (ULONG)&file_list, + LISTBROWSER_ColumnInfo, (ULONG)&ci, + LISTBROWSER_ColumnTitles, TRUE, + LISTBROWSER_ShowSelected, TRUE, + LISTBROWSER_Separators, FALSE, + LISTBROWSER_Hierarchical, TRUE, + LISTBROWSER_LeafImage, &leaf_image, + LISTBROWSER_ShowImage, &show_image, + LISTBROWSER_HideImage, &hide_image, + LISTBROWSER_AutoFit, TRUE, + ListBrowserEnd, + CHILD_WeightedHeight, 100, + + LAYOUT_AddChild, edit_gad = TextFieldObject, + GA_ID, GAD_EDIT, + GA_RelVerify, TRUE, + TEXTFIELD_Border, TEXTFIELD_BORDER_DOUBLEBEVEL, + TextFieldEnd, + CHILD_MinHeight, screen->Font->ta_YSize + 6, + CHILD_WeightedHeight, 50, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ, + LAYOUT_EvenSize, TRUE, + + LAYOUT_AddChild, ButtonObject, + GA_ID, GAD_SAVE, + GA_Text, "_Save", + GA_RelVerify, TRUE, + ButtonEnd, + CHILD_NominalSize, TRUE, + CHILD_WeightedWidth, 0, + + LAYOUT_AddChild, ButtonObject, + GA_ID, GAD_USE, + GA_Text, "_Use", + GA_RelVerify, TRUE, + ButtonEnd, + CHILD_NominalSize, TRUE, + CHILD_WeightedWidth, 0, + + LAYOUT_AddChild, ButtonObject, + GA_ID, GAD_CANCEL, + GA_Text, " _Cancel ", + GA_RelVerify, TRUE, + ButtonEnd, + CHILD_NominalSize, TRUE, + CHILD_WeightedWidth, 0, + + LayoutEnd, + CHILD_WeightedHeight, 0, + LayoutEnd) + { + struct MsgPort *app_port; + + /* Create a message port for App* messages. This is needed for + * iconification. We're being a touch naughty by not checking + * the return code, but that just means that iconification won't + * work, nothing really bad will happen. + */ + app_port = CreateMsgPort(); + + /* Create the window object. + */ + if (window_obj = WindowObject, + WA_Left, 0, + WA_Top, screen->Font->ta_YSize + 3, + WA_CustomScreen, screen, + WA_IDCMP, IDCMP_CLOSEWINDOW, + WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | + WFLG_SIZEGADGET | WFLG_ACTIVATE | WFLG_SMART_REFRESH, + WA_Title, "Environmental Variable Editor", + WA_NewLookMenus, TRUE, + WINDOW_ParentGroup, layout, + WINDOW_IconifyGadget, TRUE, + WINDOW_Icon, GetDiskObject("PROGDIR:EnvEdit"), + WINDOW_IconTitle, "EnvEdit", + WINDOW_AppPort, app_port, + TAG_DONE)) + { + /* Increase the initial hieght. + */ + SetAttrs(window_obj, + WA_InnerHeight, screen->Font->ta_YSize * 16, + TAG_DONE); + + /* Open the window. + */ + if (win = (struct Window *)CA_OpenWindow(window_obj)) + { + Object *arexx_obj; + + /* Create host object. + */ + if (arexx_obj = ARexxObject, + AREXX_HostName, "ENVEDIT", + AREXX_Commands, arexx_cmds, + ARexxEnd) + { + /* Input Event Loop + */ + while (ok) + { + ULONG signal, winsig, rxsig; + ULONG result; + + /* Obtain the window and ARexx wait signal masks. + */ + GetAttr(WINDOW_SigMask, window_obj, &winsig); + GetAttr(AREXX_SigMask, arexx_obj, &rxsig); + + signal = Wait(rxsig | winsig | (1L << app_port->mp_SigBit) | SIGBREAKF_CTRL_C); + + /* ARexx event? + */ + if (signal & rxsig) + CA_HandleRexx(arexx_obj); + + /* Window event? + */ + if (signal & winsig) + { + /* CA_HandleInput() returns the gadget ID of a clicked + * gadget, or one of several pre-defined values. For + * this demo, we're only actually interested in a + * close window and a couple of gadget clicks. + */ + while ((result = CA_HandleInput(window_obj, NULL)) != WMHI_LASTMSG) + { + switch(result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + ok = FALSE; + break; + + case WMHI_GADGETUP: + switch (result & WMHI_GADGETMASK) + { + case GAD_LIST: + D( PutStr("Load text\n"); ) + load_text(win); + break; + + case GAD_EDIT: + D( PutStr("Text edited\n"); ) + { + struct Node *node; + + GetAttr(LISTBROWSER_SelectedNode, list_gad, (ULONG *)&node); + if (node) + { + struct LBUserData *lbud; + ULONG flags; + + /* Gotta change a flag in + * our special user data + * structure. + */ + GetListBrowserNodeAttrs(node, + LBNA_Flags, &flags, + LBNA_UserData, &lbud, + TAG_DONE); + if (lbud && !(flags & LBFLG_HASCHILDREN)) + lbud->lbud_Changed = TRUE; + } + } + break; + + case GAD_SAVE: + save_changed(&file_list, "ENV:", TRUE); + save_changed(&file_list, "ENVARC:", FALSE); + ok = FALSE; + break; + + case GAD_USE: + save_changed(&file_list, "ENV:", FALSE); + ok = FALSE; + break; + + case GAD_CANCEL: + ok = FALSE; + break; + + default: + break; + } + break; + + case WMHI_ICONIFY: + if (CA_Iconify(window_obj)) + win = NULL; + break; + + case WMHI_UNICONIFY: + win = CA_OpenWindow(window_obj); + break; + + default: + break; + } + } + } + /* CTRL-C should quit. + */ + if (signal & SIGBREAKF_CTRL_C) + { + ok = FALSE; + } + } + /* Free up ARexx. + */ + DisposeObject(arexx_obj); + } + else + easy_req(NULL, "EnvEdit failed to start\nCouldn't create ARexx host", "Quit", ""); + } + else + easy_req(NULL, "EnvEdit failed to start\nCouldn't open window", "Quit", ""); + + /* Disposing of the window object will also close the + * window if it is already opened and it will dispose of + * all objects attached to it. + */ + DisposeObject(window_obj); + } + else + easy_req(NULL, "EnvEdit failed to start\nCouldn't create window", "Quit", ""); + + /* Lose the App* message port. + */ + if (app_port) + DeleteMsgPort(app_port); + } + else + easy_req(NULL, "EnvEdit failed to start\nCouldn't create layout", "Quit", ""); + + free_list(&file_list); + + if (drinfo) + FreeScreenDrawInfo(screen, drinfo); + + UnlockPubScreen(0, screen); + } + else + easy_req(NULL, "EnvEdit failed to start\nCouldn't lock destination screen", "Quit", ""); + + exit(0); +} + + +/* Load text for the currently selected item in the variable list into the + * textfield gadget. + */ +VOID load_text(struct Window *win) +{ + struct Node *node; + + SetGadgetAttrs(edit_gad, win, NULL, + TEXTFIELD_Text, "", + TAG_DONE); + + /* Get the selected node. + */ + GetAttr(LISTBROWSER_SelectedNode, list_gad, (ULONG *)&node); + if (node) + { + struct LBUserData *lbud; + ULONG flags; + + /* We stashed some important info in the userdata, so get that. + */ + GetListBrowserNodeAttrs(node, + LBNA_Flags, &flags, + LBNA_UserData, &lbud, + TAG_DONE); + if (lbud && !(flags & LBFLG_HASCHILDREN)) + { + /* Open up the file for read. + */ + if (lbud->lbud_FileName) + { + LONG size; + + /* Found out how big the file is. + */ + if (size = file_size(lbud->lbud_FileName)) + { + BPTR fh; + + /* Open up the file for read. + */ + if (fh = Open(lbud->lbud_FileName, MODE_OLDFILE)) + { + /* Allocate a buffer large enough to load the whole + * file into, if we don't already have one big enough. + */ + if (size > lbud->lbud_BufSize) + { + if (lbud->lbud_Buf) + FreeVec(lbud->lbud_Buf); + lbud->lbud_Buf = (STRPTR)AllocVec(size + 1, MEMF_ANY); + lbud->lbud_BufSize = size + 1; + } + + if (lbud->lbud_Buf) + { + /* Go ahead and load our text in. + */ + lbud->lbud_BufSize = Read(fh, lbud->lbud_Buf, size); + lbud->lbud_Buf[lbud->lbud_BufSize] = '\0'; + + /* Tell the edit gadget to display it. + */ + SetGadgetAttrs(edit_gad, win, NULL, + TEXTFIELD_Text, lbud->lbud_Buf, + TAG_DONE); + } + else + { + D( PutStr("No buffer\n"); ) + lbud->lbud_BufSize = 0; + } + + Close(fh); + } + D( else PutStr("Can't open file\n"); ) + } + D( else PutStr("No file size\n"); ) + } + D( else PutStr("No filename\n"); ) + } + else if (flags & LBFLG_HASCHILDREN) + { + ULONG relevent; + + GetAttr(LISTBROWSER_RelEvent, list_gad, &relevent); + if (relevent != LBRE_SHOWCHILDREN && relevent != LBRE_HIDECHILDREN) + { + SetGadgetAttrs(list_gad, win, NULL, + LISTBROWSER_Labels, ~0, + TAG_DONE); + + if (flags & LBFLG_SHOWCHILDREN) + HideListBrowserNodeChildren(node); + else + ShowListBrowserNodeChildren(node, 1); + + SetGadgetAttrs(list_gad, win, NULL, + LISTBROWSER_Labels, &file_list, + TAG_DONE); + } + } + } + D( else PutStr("No selected node\n"); ) +} + +/* Get the file size (in bytes) of a file. + */ +LONG file_size(char *filename) +{ + BPTR lock; + LONG size = -1; + + if (lock = Lock(filename, ACCESS_READ)) + { + struct FileInfoBlock *fib; + + if (fib = (struct FileInfoBlock *)AllocDosObject(DOS_FIB,TAG_END)) + { + if (Examine(lock, fib)) + size = fib->fib_Size; + FreeDosObject(DOS_FIB, fib); + } + UnLock(lock); + } + return(size); +} + + +/* Save all changed variables to the specified directory. + */ +VOID save_changed(struct List *list, STRPTR dir, BOOL nochange) +{ + struct Node *node; + + /* Peruse all nodes. + */ + for (node = list->lh_Head; node->ln_Succ; node = node->ln_Succ) + { + struct LBUserData *lbud; + ULONG flags; + + /* Get our user data structure. + */ + GetListBrowserNodeAttrs(node, + LBNA_Flags, &flags, + LBNA_UserData, &lbud, + TAG_DONE); + if (lbud && !(flags & LBFLG_HASCHILDREN)) + { + /* See if the node has changed and if we have a filename + * and if we have a buffer. + */ + if (lbud->lbud_Changed && lbud->lbud_FileName) + { + UBYTE open_file[255]; + BPTR fh; + + /* Convert the filename. + */ + sprintf(open_file, "%s%s", dir, lbud->lbud_FileName + 4); + + /* Try and open the file for write. + */ + if (fh = Open(open_file, MODE_NEWFILE)) + { + if (lbud->lbud_BufSize == Write(fh, lbud->lbud_Buf, lbud->lbud_BufSize)) + lbud->lbud_Changed = nochange; + Close(fh); + } + } + } + } +} + + +/* Read files in a directory to a listbrowser list. + */ +BOOL read_files(struct List *list, STRPTR dir, WORD generation) +{ + BPTR lock; + + D( Printf("Read directory: %s\n", dir); ) + + if (lock = Lock(dir, ACCESS_READ)) + { + char *eadata; + + if (eadata = (char *)AllocVec(sizeof(struct ExAllData) * 200, MEMF_CLEAR)) + { + struct ExAllControl *eac; + + if (eac = (struct ExAllControl *)AllocDosObject(DOS_EXALLCONTROL, NULL)) + { + BOOL more; + + eac->eac_LastKey = 0; + do + { + struct ExAllData *ead; + + more = ExAll(lock, eadata, sizeof(struct ExAllData) * 200, ED_DATE, eac); + if (!more && IoErr() != ERROR_NO_MORE_ENTRIES) + return(FALSE); + + if (eac->eac_Entries == 0) + return(FALSE); + + ead = (struct ExAllData *)eadata; + do + { + struct Node *node; + struct DateTime dat; + char temp1[255], temp2[12], temp3[12], temp4[12]; + ULONG flags = LBFLG_CUSTOMPENS; + + if (ead->ed_Type == ST_USERDIR) + { + flags |= LBFLG_HASCHILDREN; + strcpy(temp2, "Record"); + } + else + sprintf(temp2, "%ld", ead->ed_Size); + + if (generation > 1) + flags |= LBFLG_HIDDEN; + + /* Convert the date and time to strings. + */ + dat.dat_Stamp.ds_Days = ead->ed_Days; + dat.dat_Stamp.ds_Minute = ead->ed_Mins; + dat.dat_Stamp.ds_Tick = ead->ed_Ticks; + dat.dat_Flags = 0; + dat.dat_StrDate = temp3; + dat.dat_StrTime = temp4; + dat.dat_StrDay = NULL; + + if (!DateToStr(&dat)) + temp3[0] = temp4[0] = '\0'; + + if (node = AllocListBrowserNode(4, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, ead->ed_Name, + LBNCA_FGPen, drinfo->dri_Pens[TEXTPEN], + LBNA_Column, 1, + LBNCA_CopyText, TRUE, + LBNCA_Text, temp2, + LBNCA_FGPen, (ead->ed_Type == ST_USERDIR? drinfo->dri_Pens[HIGHLIGHTTEXTPEN] : drinfo->dri_Pens[TEXTPEN]), + LBNCA_Justification, LCJ_RIGHT, + LBNA_Column, 2, + LBNCA_CopyText, TRUE, + LBNCA_Text, temp3, + LBNCA_FGPen, drinfo->dri_Pens[TEXTPEN], + LBNA_Column, 3, + LBNCA_CopyText, TRUE, + LBNCA_Text, temp4, + LBNCA_FGPen, drinfo->dri_Pens[TEXTPEN], + LBNA_Generation, generation, + LBNA_Flags, flags, + TAG_DONE)) + { + struct LBUserData *lbud; + + AddTail(list, (struct Node *)node); + + strcpy(temp1, dir); + AddPart(temp1, ead->ed_Name, 255); + + if (lbud = (struct LBUserData *)AllocVec(sizeof(struct LBUserData), MEMF_CLEAR)) + { + strcpy(lbud->lbud_FileName, temp1); + + SetListBrowserNodeAttrs(node, + LBNA_UserData, lbud, + TAG_DONE); + } + + if (ead->ed_Type == ST_USERDIR) + { + read_files(list, temp1, generation + 1); + } + } + + ead = ead->ed_Next; + } while (ead); + } while (more); + + FreeDosObject(DOS_EXALLCONTROL, eac); + } + else + return(FALSE); + FreeVec(eadata); + } + else + return(FALSE); + UnLock(lock); + } + else + return(FALSE); + + return(TRUE); +} + + +/* Copy a B string to a C string. + */ +VOID bstrcpy(STRPTR cstr, BSTR bstr) +{ + strncpy(cstr, (char *)BADDR(bstr) + 1, ((char *)BADDR(bstr))[0]); + cstr[((char *)BADDR(bstr))[0]] = '\0'; +} + + +/* Function to free an Exec List. + */ +VOID free_list(struct List *list) +{ + struct Node *node, *nextnode; + + node = list->lh_Head; + while (nextnode = node->ln_Succ) + { + struct LBUserData *lbud; + + GetListBrowserNodeAttrs(node, + LBNA_UserData, &lbud, + TAG_DONE); + if (lbud) + if (lbud->lbud_Buf); + FreeVec(lbud->lbud_Buf); + + FreeListBrowserNode(node); + node = nextnode; + } + NewList(list); +} + + +/* Do an easy requester. + */ +LONG easy_req(struct Window *win, char *reqtext, char *reqgads, char *reqargs, ...) +{ + struct EasyStruct general_es = + { + sizeof(struct EasyStruct), + 0, + "SBGen", + NULL, + NULL + }; + + general_es.es_TextFormat = reqtext; + general_es.es_GadgetFormat = reqgads; + + return(EasyRequestArgs(win, &general_es, NULL, &reqargs)); +} + +/* NAME + */ +VOID SAVEDS ASM rexx_name(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm) +{ + ac->ac_Result = "EnvEdit"; +} + +/* VERSION + */ +VOID SAVEDS ASM rexx_version(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm) +{ + ac->ac_Result = "1.0"; +} + +/* AUTHOR + */ +VOID SAVEDS ASM rexx_author(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm) +{ + ac->ac_Result = "Timothy Aston"; +} + +/* DEACTIVATE + */ +VOID SAVEDS ASM rexx_deactivate(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm) +{ + if (CA_Iconify(window_obj)) + win = NULL; +} + +/* ACTIVATE + */ +VOID SAVEDS ASM rexx_activate(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm) +{ + win = CA_OpenWindow(window_obj); +} + +/* QUIT + */ +VOID SAVEDS ASM rexx_quit(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm) +{ + ok = FALSE; +} + +/* + */ +VOID SAVEDS ASM rexx_windowtoback(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm) +{ + WindowToBack(win); +} + +/* WINDOWTOFRONT + */ +VOID SAVEDS ASM rexx_windowtofront(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm) +{ + WindowToFront(win); +} diff --git a/Examples/Examples.doc b/Examples/Examples.doc new file mode 100644 index 0000000..7f475a9 --- /dev/null +++ b/Examples/Examples.doc @@ -0,0 +1,3 @@ +This directory contains specific example programs for different features of +the ClassAct toolkit. The source to these programs is included in the +directory. diff --git a/Examples/Examples.doc.info b/Examples/Examples.doc.info new file mode 100644 index 0000000000000000000000000000000000000000..3157d923bd494701a680f46d4d4d684d56444b95 GIT binary patch literal 468 zcmZXOJqp4=5QS$=Bp?=6dIt;3fJd+p1PL};3I;4JjDiphV&OTg!WOokB)#AzMAUWO z{t$_;`SQ)1343pmAdVQ&fF&m@L=vCZ2EM{uij3 Bi4Xt) literal 0 HcmV?d00001 diff --git a/Examples/FuelGauge.info b/Examples/FuelGauge.info new file mode 100644 index 0000000000000000000000000000000000000000..52c38c7437efdaa4f391a186cc3e6d10180feed6 GIT binary patch literal 628 zcmZvZEl3!~b@A=3%{oaFt*aY{uKo>DW7@I%zZ2ox1m*!!DwBe5ZeQNXf z#lJSdz}zBrPLu%qGn;>Onvd1 od6ux=X67U6PuOBV`Mqj&+=j9XnS1GXA(UMR>rV=|&Te4-08~=F0{{R3 literal 0 HcmV?d00001 diff --git a/Examples/FuelGauge/FuelGaugeExample.info b/Examples/FuelGauge/FuelGaugeExample.info new file mode 100644 index 0000000000000000000000000000000000000000..d9095df313b060d312acbf82bb60fa91a35b3635 GIT binary patch literal 835 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 literal 0 HcmV?d00001 diff --git a/Examples/FuelGauge/fuelgaugeexample.c b/Examples/FuelGauge/fuelgaugeexample.c new file mode 100644 index 0000000..5a65158 --- /dev/null +++ b/Examples/FuelGauge/fuelgaugeexample.c @@ -0,0 +1,269 @@ +;/* FuelGauge Example +sc link fuelgaugeexample.c lib lib:classact.lib +quit +*/ + +/* system includes + */ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +/* ClassAct includes + */ +#include + + +enum +{ + GID_GAUGE=0, + GID_DOWN, + GID_UP, + GID_QUIT, + GID_LAST +}; + +enum +{ + WID_MAIN=0, + WID_LAST +}; + +enum +{ + OID_MAIN=0, + OID_LAST +}; + +#define FMIN 0 +#define FMAX 100 + +int main(void) +{ + struct MsgPort *AppPort; + + struct Window *windows[WID_LAST]; + + struct Gadget *gadgets[GID_LAST]; + + Object *objects[OID_LAST]; + + /* make sure our classes opened... */ + if (!ButtonBase || !FuelGaugeBase || !WindowBase || !LayoutBase) + return(30); + else if ( AppPort = CreateMsgPort() ) + { + /* Create the window object. + */ + objects[OID_MAIN] = WindowObject, + WA_ScreenTitle, "ClassAct Release 2.0", + WA_Title, "ClassAct FuelGauge Example", + WA_Activate, TRUE, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_SizeGadget, TRUE, + WINDOW_IconifyGadget, TRUE, + WINDOW_IconTitle, "FuelGauge", + WINDOW_AppPort, AppPort, + WINDOW_Position, WPOS_CENTERMOUSE, + WINDOW_ParentGroup, VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_DeferLayout, TRUE, + + LAYOUT_AddChild, gadgets[GID_GAUGE] = FuelGaugeObject, + GA_ID, GID_GAUGE, + FUELGAUGE_Orientation, FGORIENT_HORIZ, + FUELGAUGE_Min, FMIN, + FUELGAUGE_Max, FMAX, + FUELGAUGE_Level, 0, + FUELGAUGE_Percent, TRUE, + FUELGAUGE_TickSize, 5, + FUELGAUGE_Ticks, 5, + FUELGAUGE_ShortTicks, TRUE, + FuelGaugeEnd, + + LAYOUT_AddChild, VGroupObject, + CLASSACT_BackFill, NULL, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_VertAlignment, LALIGN_CENTER, + LAYOUT_HorizAlignment, LALIGN_CENTER, + LAYOUT_BevelStyle, BVS_FIELD, + + LAYOUT_AddImage, LabelObject, + LABEL_Text, "The fuelgauge supports optional tickmarks as\n", + LABEL_Text, "well as vertical and horizontal orientation.\n", + LABEL_Text, " \n", + LABEL_Text, "You can set the min/max range, as well as\n", + LABEL_Text, "options such as varargs ascii display,\n", + LABEL_Text, "percentage display, and custom pen selection.\n", + LabelEnd, + LayoutEnd, + + + LAYOUT_AddChild, HGroupObject, + LAYOUT_SpaceOuter, FALSE, + LAYOUT_EvenSize, TRUE, + + LAYOUT_AddChild, ButtonObject, + GA_ID, GID_DOWN, + GA_RelVerify, TRUE, + GA_Text,"_Down", + ButtonEnd, + + LAYOUT_AddChild, ButtonObject, + GA_ID, GID_UP, + GA_RelVerify, TRUE, + GA_Text,"_Up", + ButtonEnd, + + LAYOUT_AddChild, ButtonObject, + GA_ID, GID_QUIT, + GA_RelVerify, TRUE, + GA_Text,"_Quit", + ButtonEnd, + LayoutEnd, + CHILD_WeightedHeight, 0, + + EndGroup, + EndWindow; + + /* Object creation sucessful? + */ + if (objects[OID_MAIN]) + { + /* Open the window. + */ + if (windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN])) + { + ULONG wait, signal, app = (1L << AppPort->mp_SigBit); + ULONG done = FALSE; + ULONG result; + UWORD code; + + /* Obtain the window wait signal mask. + */ + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + + /* Input Event Loop + */ + while (!done) + { + wait = Wait( signal | SIGBREAKF_CTRL_C | app ); + + if ( wait & SIGBREAKF_CTRL_C ) + { + done = TRUE; + } + else + { + while ( (result = CA_HandleInput(objects[OID_MAIN], &code) ) != WMHI_LASTMSG ) + { + switch (result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + windows[WID_MAIN] = NULL; + done = TRUE; + break; + + case WMHI_GADGETUP: + switch (result & WMHI_GADGETMASK) + { + case GID_DOWN: + { + int i; + + SetAttrs(objects[OID_MAIN], WA_BusyPointer, TRUE); + + for( i = FMAX; i >= FMIN; i -= 5 ) + { + SetGadgetAttrs( + gadgets[GID_GAUGE], + windows[WID_MAIN], NULL, + FUELGAUGE_Level, i, TAG_DONE); + Delay(3); + } + + SetAttrs(objects[OID_MAIN], WA_BusyPointer, FALSE); +; + } + break; + + case GID_UP: + { + int i; + + SetAttrs(objects[OID_MAIN], WA_BusyPointer, TRUE); + + for( i = FMIN; i <= FMAX; i += 5 ) + { + SetGadgetAttrs( + gadgets[GID_GAUGE], + windows[WID_MAIN], NULL, + FUELGAUGE_Level, i, TAG_DONE); + Delay(3); + } + + SetAttrs(objects[OID_MAIN], WA_BusyPointer, FALSE); + } + break; + + case GID_QUIT: + done = TRUE; + break; + } + break; + + case WMHI_ICONIFY: + CA_Iconify(objects[OID_MAIN]); + windows[WID_MAIN] = NULL; + break; + + case WMHI_UNICONIFY: + windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN]); + + if (windows[WID_MAIN]) + { + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + } + else + { + done = TRUE; // error re-opening window! + } + break; + } + } + } + } + } + + /* Disposing of the window object will also close the window if it is + * already opened, and it will dispose of the layout object attached to it. + */ + DisposeObject(objects[OID_MAIN]); + } + + DeleteMsgPort(AppPort); + } + + return(0); +} diff --git a/Examples/FuelGauge/fuelgaugeexample.c.info b/Examples/FuelGauge/fuelgaugeexample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..82667a2960b32f6eb759865ea366065bacfbe807 GIT binary patch literal 296 zcmZ9Fu?oU46h&W}Y6dA47aa;6-2E4~Zn|1s1-BOb03BWY0ulUxVhWB9zESF+;tyn( z`b-m{U?A_EdvCaTwShr(F3^DhdeG3CiEY1a-2cH`5Ubr3Q`nrMo04gWG)+tojci}ltLvM?`D8Y$K61a+K2=x% literal 0 HcmV?d00001 diff --git a/Examples/Glyph.info b/Examples/Glyph.info new file mode 100644 index 0000000000000000000000000000000000000000..6be429028586350bd43a29d41fc76f2c8b29a8c7 GIT binary patch literal 628 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 jhD +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +/* Here's where it all starts. + */ +main() +{ + struct Screen *screen = NULL; + + if (!ButtonBase) return(20); + + /* We'll just open up on the default public screen, and use its screen font. + */ + if (screen = LockPubScreen(NULL)) + { + struct DrawInfo *drinfo = GetScreenDrawInfo(screen); + Object *layout; + + if (layout = LayoutObject, + GA_DrawInfo, drinfo, + LAYOUT_DeferLayout, TRUE, /* Layout refreshes done on + * task's context (by the + * window class) */ + LAYOUT_SpaceOuter, TRUE, + LAYOUT_AddChild, LayoutObject, + LAYOUT_VertAlignment, LAYOUT_ALIGN_TOP, + LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ, + LAYOUT_BevelStyle, BVS_GROUP, + LAYOUT_Label, "Available Glyphs", + + LAYOUT_AddChild, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_VERT, + LAYOUT_HorizAlignment, LAYOUT_ALIGN_RIGHT, + LAYOUT_SpaceOuter, TRUE, + + LAYOUT_AddImage, GlyphObject, + GLYPH_Glyph, GLYPH_DOWNARROW, + GlyphEnd, + CHILD_MinWidth, 12, + CHILD_MinHeight, 12, + CHILD_Label, LabelObject, + LABEL_Text, "Down Arrow:", + LabelEnd, + + LAYOUT_AddImage, GlyphObject, + GLYPH_Glyph, GLYPH_UPARROW, + GlyphEnd, + CHILD_MinWidth, 12, + CHILD_MinHeight, 12, + CHILD_Label, LabelObject, + LABEL_Text, "Up Arrow:", + LabelEnd, + + LAYOUT_AddImage, GlyphObject, + GLYPH_Glyph, GLYPH_LEFTARROW, + GlyphEnd, + CHILD_MinWidth, 12, + CHILD_MinHeight, 12, + CHILD_Label, LabelObject, + LABEL_Text, "Left Arrow:", + LabelEnd, + + LAYOUT_AddImage, GlyphObject, + GLYPH_Glyph, GLYPH_RIGHTARROW, + GlyphEnd, + CHILD_MinWidth, 12, + CHILD_MinHeight, 12, + CHILD_Label, LabelObject, + LABEL_Text, "Right Arrow:", + LabelEnd, + + LAYOUT_AddImage, GlyphObject, + GLYPH_Glyph, GLYPH_DROPDOWN, + GlyphEnd, + CHILD_MinWidth, 12, + CHILD_MinHeight, 12, + CHILD_Label, LabelObject, + LABEL_Text, "Drop Down:", + LabelEnd, + + LAYOUT_AddImage, GlyphObject, + GLYPH_Glyph, GLYPH_CHECKMARK, + GlyphEnd, + CHILD_MinWidth, 12, + CHILD_MinHeight, 12, + CHILD_Label, LabelObject, + LABEL_Text, "Check Mark:", + LabelEnd, + + LAYOUT_AddImage, GlyphObject, + GLYPH_Glyph, GLYPH_RADIOBUTTON, + GlyphEnd, + CHILD_MinWidth, 12, + CHILD_MinHeight, 12, + CHILD_Label, LabelObject, + LABEL_Text, "Radio Button:", + LabelEnd, + LayoutEnd, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_AddImage, BevelObject, + GA_DrawInfo, drinfo, + BEVEL_Style, BVS_SBAR_HORIZ, + BevelEnd, + LayoutEnd, + CHILD_MinWidth, 4, + CHILD_WeightedWidth, 0, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_VERT, + LAYOUT_VertAlignment, LAYOUT_ALIGN_CENTER, + LAYOUT_SpaceOuter, TRUE, + + LAYOUT_AddImage, GlyphObject, + GLYPH_Glyph, GLYPH_POPUP, + GlyphEnd, + CHILD_MinWidth, 12, + CHILD_MinHeight, 12, + CHILD_Label, LabelObject, + LABEL_Text, "Pop Up:", + LabelEnd, + + LAYOUT_AddImage, GlyphObject, + GLYPH_Glyph, GLYPH_POPFONT, + GlyphEnd, + CHILD_MinWidth, 12, + CHILD_MinHeight, 12, + CHILD_Label, LabelObject, + LABEL_Text, "Pop Font:", + LabelEnd, + + LAYOUT_AddImage, GlyphObject, + GLYPH_Glyph, GLYPH_POPFILE, + GlyphEnd, + CHILD_MinWidth, 12, + CHILD_MinHeight, 12, + CHILD_Label, LabelObject, + LABEL_Text, "Pop File:", + LabelEnd, + + LAYOUT_AddImage, GlyphObject, + GLYPH_Glyph, GLYPH_POPDRAWER, + GlyphEnd, + CHILD_MinWidth, 12, + CHILD_MinHeight, 12, + CHILD_Label, LabelObject, + LABEL_Text, "Pop Drawer:", + LabelEnd, + + LAYOUT_AddImage, GlyphObject, + GLYPH_Glyph, GLYPH_POPSCREENMODE, + GlyphEnd, + CHILD_MinWidth, 12, + CHILD_MinHeight, 12, + CHILD_Label, LabelObject, + LABEL_Text, "Pop Screen Mode:", + LabelEnd, + + LAYOUT_AddImage, GlyphObject, + GLYPH_Glyph, GLYPH_POPTIME, + GlyphEnd, + CHILD_MinWidth, 12, + CHILD_MinHeight, 12, + CHILD_Label, LabelObject, + LABEL_Text, "Pop Time:", + LabelEnd, + + LAYOUT_AddImage, GlyphObject, + GLYPH_Glyph, GLYPH_RETURNARROW, + GlyphEnd, + CHILD_MinWidth, 12, + CHILD_MinHeight, 12, + CHILD_Label, LabelObject, + LABEL_Text, "Return Arrow:", + LabelEnd, + LayoutEnd, + LayoutEnd, + LayoutEnd) + { + struct MsgPort *app_port; + Object *window_obj; + + /* Create a message port for App* messages. This is needed for + * iconification. We're being a touch naughty by not checking + * the return code, but that just means that iconification won't + * work, nothing really bad will happen. + */ + app_port = CreateMsgPort(); + + /* Create the window object. + */ + if (window_obj = WindowObject, + WA_Left, 0, + WA_Top, screen->Font->ta_YSize + 3, + WA_CustomScreen, screen, + WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW, + WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | + WFLG_SIZEGADGET | WFLG_ACTIVATE | WFLG_SMART_REFRESH, + WA_Title, "Glyph class example", + WA_NewLookMenus, TRUE, + WINDOW_ParentGroup, layout, + WINDOW_IconifyGadget, TRUE, + WINDOW_Icon, GetDiskObject("PROGDIR:GlyphExample"), + WINDOW_IconTitle, "GlyphExample", + WINDOW_AppPort, app_port, + TAG_DONE)) + { + struct Window *win; + + /* Open the window. + */ + if (win = (struct Window *)CA_OpenWindow(window_obj)) + { + ULONG signal; + BOOL ok = TRUE; + + /* Obtain the window wait signal mask. + */ + GetAttr(WINDOW_SigMask, window_obj, &signal); + + /* Input Event Loop + */ + while (ok) + { + ULONG result; + + Wait(signal | (1L << app_port->mp_SigBit)); + + /* CA_HandleInput() returns the gadget ID of a clicked + * gadget, or one of several pre-defined values. For + * this demo, we're only actually interested in a + * close window and a couple of gadget clicks. + */ + while ((result = CA_HandleInput(window_obj, NULL)) != WMHI_LASTMSG) + { + switch(result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + ok = FALSE; + break; + + case WMHI_GADGETUP: + switch (result & WMHI_GADGETMASK) + { + default: + break; + } + break; + + case WMHI_ICONIFY: + if (CA_Iconify(window_obj)) + win = NULL; + break; + + case WMHI_UNICONIFY: + win = CA_OpenWindow(window_obj); + break; + + default: + break; + } + } + } + } + else + PutStr("ERROR: failed to start. Couldn't open window\n"); + + /* Disposing of the window object will also close the + * window if it is already opened and it will dispose of + * all objects attached to it. + */ + DisposeObject(window_obj); + } + else + PutStr("ERROR: failed to start. Couldn't create window\n"); + + /* Lose the App* message port. + */ + if (app_port) + DeleteMsgPort(app_port); + } + else + PutStr("ERROR: failed to start. Couldn't create layout\n"); + + if (drinfo) + FreeScreenDrawInfo(screen, drinfo); + + UnlockPubScreen(0, screen); + } + else + PutStr("ERROR: failed to start. Couldn't lock destination screen\n"); + + exit(0); +} diff --git a/Examples/Glyph/GlyphExample.c.info b/Examples/Glyph/GlyphExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..5d5c097fbddd4b3980a620428c69dd9b739be407 GIT binary patch literal 300 zcmaDXz`)1=0vj0w8DtnF7+8UPM)oD%FTkSc1S1Or`@~uc_WqR}K&iDr%#2W?_W;b6 zVGw6vVqktCfg}Z#;BD9dmgYSGrWkl36azQI4KR!C07QT}3&LQ!1?5LT7>wBoU;)Mm zh&YJ+|NsAo{r~@8`1^nVhy4%gFZ?|q|6xA^|AoH{>>u_quwVGifBVB8`Q{7%?*9kU z|1bQ{I{aY|Kl6ouw;=NWBW{1#-ynbCe|A0Cod59<^FZbTjpy<$%_+$&%SVIO#vsnX0^~EY&p8qR7DXo*nZY9L{mUDG41OSH1q*-)1qjoOL5zWk zfw`Omq81{^0-+dqkZ4H;2QXh1N-KsXfcd(i0T6L0Eo%nhGl(!i^rt{+hCg7w1H&mW z?c8t@Oh0&Vz5!&<0*iwnnsLJe2rb+Ip#>QJgXKX^LAa;>KM4F`08{^eFkB4Q4~f*1|jI z$0mRI`PaJW25T5tOC`km(B!WN^v&%0nUtO3$T}-0S1PB6h~93ZN)cC>YQM3hC`L={ zI4;^Ph##IUcpCd8orxWn2XsWc$p8QV literal 0 HcmV?d00001 diff --git a/Examples/Integer/IntegerExample b/Examples/Integer/IntegerExample new file mode 100644 index 0000000000000000000000000000000000000000..afd2c7886fd919e34364cc5069d77120344c2d53 GIT binary patch literal 4100 zcmai1eQZ$4H@?PeO%@1Y2*Dq-NsiAyhl~8mG2~Nz0gXQ z*RZkSA(m);g?m}TmNaQ98*x<=BNn`vuJR`hl8Vb!b~VQx8-<38>>cDL=e|<#hG6Hy zJ40-wW{RETy}^r5-MZvc5z7_8A3z=ELu@RoVHNz^AvO~u_@N34UYz^0h_~(uyBNdU z)7!9lDr}3j>O>F9U!&7(%Ksj6Av(-oqoJFrn<>{`a(s6Ev+G=nQ}OEZ26k_>_h(5- zMFmtgs7@`Q(%D%GXp?zm zuzkxAaf}*vJg*rxJX4s<7j&|Gn(^{9>`{4vL6#A3gk6K>yNXJpeyJ=jVjC5B?fKgC zO7$C<2kiiH6SHau(i0|T0nK7!5-?_B%Q9HfLhc+^lEWNa^+qK5 z09X%?H!>cz9!o^n(%Cnp?U3|7iw$;LO|S4x?AV}*TeA_1=xioM%2J*eo1|1D-lbz} zg2#%5u}Ne9BespT=d~W`mT7N!E^CqhvW$PQ%KlFhbW{8tkVuG zkfSwaXc?Q}t^jvuhC5G-t;u0!IgIfrB^K2C738C#9>SZ{Br1aJffXtR=2)Qhu)mvF zan^>^^z96mBFC}7<|y^4+85SuW5`4i!)`$7a*)G;&6c}%vxP#6QcGpE(y1HuiBzUMT($><|#w&dlL^*0h zN21MWi}Ni9TK2^vZA4kZ{K$80$kF(&N}}D}iA1!+XSB2$Z3)`7t-C!z*o|)2Op)3` z%!B>)TG)}L1VKs0(!p+=9^FbIsMm~q7kZtY7W?E&(R%*?tbWw=5$k_+*qVL`W)Q}NLE4jR!;X3Cfac~Oj&?R;sPN-@KaTw8e_#@nXE z8c0+_!Yd>eb9q5vJd(Tv55aD2va+O%V(z*rhLyrjdo*F83_grzKhB%5?A?m)xTY7w z)*AgMv}f$8)1 z5;jI*Cd55Wah{g0$zn47> zTm5f_^IZ`Z+Z|7<gzKc9C_fTGJyH9 z#+-IFM$L`E?yLldggh@H=)q2o8;aN=|NZ04yEaKBo+vqRk9%xaL&qJf;(VAHkK)Vm zoQdb-`M|Nt2*zE*EWBPX1m6S97CP=Cf@&0-cI>7do3Io9 z0(@Hte)M0Xiyz|_mk6+JtUox8_!&bW*yK1Y*CTtV;L)|JOF4x#Bc9ajWl1V4>m^;~H zqr^WXk>Lm>U68qNW{#YFVpq$|3;NsYBTs}K&}F_4cf0}5k9a{C^Bx%INuB1jU?=Wp z8@0&|o9doWO4Ke!xegWGnV;!SAL&lfpDsDmpC=G?Dl@Qd@|+TTDIJUT_ioqU-p-R+IQklWwI;JT_9-CivgGS zi*Jn4uXVZ55?u}tOLckVZJan87vDbXS~|X$;L%uH2jAZo?`n^B@O6<^9u0G%k`d7} z`4sF_3X#2sdnIeew)oDFWPm+vM?{Vmn)^J)L@$Wiws$0O=)hF&jw|LvvKvmEEZNvj zq{=l|&?LLiP-KOIe8w^xPGhvui&WQzTV!^8hzcjM;y;z zf6E-MT}q_oV6;0if7UKdZQs{ovVClu0vh`zW(r4j895HDL~Ar1AsXs8GyMnf0%!<23RcfYWeEF Dp+vJQ literal 0 HcmV?d00001 diff --git a/Examples/Integer/IntegerExample.c b/Examples/Integer/IntegerExample.c new file mode 100644 index 0000000..7a66849 --- /dev/null +++ b/Examples/Integer/IntegerExample.c @@ -0,0 +1,222 @@ +;/* Integer Example +sc link integerexample.c lib lib:classact.lib +quit +*/ + +/** + ** IntegerExample.c -- Integer class Example. + ** + ** This is a simple example testing some of the capabilities of the + ** Integer gadget class. + ** + ** This code opens a window and then creates 2 Integer gadgets which + ** are subsequently attached to the window's gadget list. One uses + ** arrows, one does not. Notice that you can tab cycle between them. + **/ + +/* system includes + */ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +/* ClassAct includes + */ +#include + + +enum +{ + GID_MAIN=0, + GID_INTEGER1, + GID_INTEGER2, + GID_DOWN, + GID_UP, + GID_QUIT, + GID_LAST +}; + +enum +{ + WID_MAIN=0, + WID_LAST +}; + +enum +{ + OID_MAIN=0, + OID_LAST +}; + +int main(void) +{ + struct MsgPort *AppPort; + + struct Window *windows[WID_LAST]; + + struct Gadget *gadgets[GID_LAST]; + + Object *objects[OID_LAST]; + + /* make sure our classes opened... */ + if (!ButtonBase || !IntegerBase || !WindowBase || !LayoutBase) + return(30); + else if ( AppPort = CreateMsgPort() ) + { + /* Create the window object. + */ + objects[OID_MAIN] = WindowObject, + WA_ScreenTitle, "ClassAct Release 2.0", + WA_Title, "ClassAct Integer Example", + WA_Activate, TRUE, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_SizeGadget, TRUE, + WINDOW_IconifyGadget, TRUE, + WINDOW_IconTitle, "Integer", + WINDOW_AppPort, AppPort, + WINDOW_Position, WPOS_CENTERMOUSE, + WINDOW_ParentGroup, gadgets[GID_MAIN] = VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_DeferLayout, TRUE, + + LAYOUT_AddChild, gadgets[GID_INTEGER1] = IntegerObject, + GA_ID, GID_INTEGER1, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + INTEGER_Arrows, TRUE, + INTEGER_MaxChars, 3, + INTEGER_Minimum, -32, + INTEGER_Maximum, 32, + INTEGER_Number, 0, + IntegerEnd, + CHILD_NominalSize, TRUE, + CHILD_Label, LabelObject, LABEL_Text, "Integer _1", LabelEnd, + + LAYOUT_AddChild, gadgets[GID_INTEGER2] = IntegerObject, + GA_ID, GID_INTEGER2, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + INTEGER_Arrows, FALSE, + INTEGER_MaxChars, 6, + INTEGER_Minimum, 0, + INTEGER_Maximum, 100000, + INTEGER_Number, 100, + IntegerEnd, + CHILD_Label, LabelObject, LABEL_Text, "Integer _2", LabelEnd, + + LAYOUT_AddChild, ButtonObject, + GA_ID, GID_QUIT, + GA_RelVerify, TRUE, + GA_Text,"_Quit", + ButtonEnd, + CHILD_WeightedHeight, 0, + + EndGroup, + EndWindow; + + /* Object creation sucessful? + */ + if (objects[OID_MAIN]) + { + /* Open the window. + */ + if (windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN])) + { + ULONG wait, signal, app = (1L << AppPort->mp_SigBit); + ULONG done = FALSE; + ULONG result; + UWORD code; + + /* Obtain the window wait signal mask. + */ + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + + /* Activate the first integer gadget! + */ + ActivateLayoutGadget( gadgets[GID_MAIN], windows[WID_MAIN], NULL, gadgets[GID_INTEGER1] ); + + /* Input Event Loop + */ + while (!done) + { + wait = Wait( signal | SIGBREAKF_CTRL_C | app ); + + if ( wait & SIGBREAKF_CTRL_C ) + { + done = TRUE; + } + else + { + while ( (result = CA_HandleInput(objects[OID_MAIN], &code) ) != WMHI_LASTMSG ) + { + switch (result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + windows[WID_MAIN] = NULL; + done = TRUE; + break; + + case WMHI_GADGETUP: + switch (result & WMHI_GADGETMASK) + { + case GID_QUIT: + done = TRUE; + break; + } + break; + + case WMHI_ICONIFY: + CA_Iconify(objects[OID_MAIN]); + windows[WID_MAIN] = NULL; + break; + + case WMHI_UNICONIFY: + windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN]); + + if (windows[WID_MAIN]) + { + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + } + else + { + done = TRUE; // error re-opening window! + } + break; + } + } + } + } + } + + /* Disposing of the window object will also close the window if it is + * already opened, and it will dispose of the layout object attached to it. + */ + DisposeObject(objects[OID_MAIN]); + } + + DeleteMsgPort(AppPort); + } + + return(0); +} diff --git a/Examples/Integer/IntegerExample.c.info b/Examples/Integer/IntegerExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..686c039b676b55b23e3c6af0235af5817e717132 GIT binary patch literal 300 zcmaDXz`)1=0&5rq8DtnF7+8UPM)o;JUw}o?2}TwM_KCF??ENb{fKn@fm>Ho&?*W)C z!ywMU#K8PO0!a!e!P~F_EX{iWOfm36C-A72~~Ep8nWAr$dg zqKz7|yFAv$@}S^*adxEPi#(?)0H*e(cBi^{@C`YQ?L(S z;6hVQ>Y_r%eqU0ZoD06^o^>MM2*?538^4DC`p&{ndBPhzU%~`$RkD`U$vkP2MY5N4 Tl>I)~XTyG)o}2H|k9_$N$v$Dp literal 0 HcmV?d00001 diff --git a/Examples/Label.info b/Examples/Label.info new file mode 100644 index 0000000000000000000000000000000000000000..7ae98024a9c5aacfc55104a312bf6cab983cf2fe GIT binary patch literal 628 zcmZvYy-EW?6ot?JxEn!KtR$64u&|Pd2CGdOtR!HiSoi?GLgq1S?6#1AorPsU8!haF zbQap%#Vta{IcIjw7JHYSZ|<4)6;7?QvU8=fdx+@uDXJ84gQ4~tYw}{W#E#>t z-GTVw*@9Mdv9m41&E^*d7*k1B3S?t*jA+%8D&f~x literal 0 HcmV?d00001 diff --git a/Examples/Label/LabelExample b/Examples/Label/LabelExample new file mode 100644 index 0000000000000000000000000000000000000000..f3efef5b14fdcabab10ff6d500fde38bb57fbeb0 GIT binary patch literal 6428 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 VXEbud+A-KQBH#ZW03PYa{{kvqcIE&8 literal 0 HcmV?d00001 diff --git a/Examples/Label/LabelExample.c b/Examples/Label/LabelExample.c new file mode 100644 index 0000000..caec32a --- /dev/null +++ b/Examples/Label/LabelExample.c @@ -0,0 +1,246 @@ + +/** + ** LabelExample.c -- Label class example. + ** + ** This is a simple example testing some of the capabilities of the + ** Label image class. + ** + ** This code opens a simple window and then creates a Label image, + ** combining text, font changes and images. It then draws the image in + ** both its regular and selected state. + ** + ** Note that we are not using window or layout class here, we are + ** using the gadget in a fairly direct form, but that's perfectly legal. + ** + **/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct ClassLibrary *LabelBase; + +struct ClassLibrary * OpenClass(STRPTR, ULONG); + + +__chip UWORD image_data[] = +{ + /* Plane 0 */ + 0x0000, 0x0000, + 0x7F00, 0x0000, + 0x4180, 0x0000, + 0x4140, 0x0000, + 0x4120, 0x4000, + 0x41F0, 0x6000, + 0x401B, 0xF000, + 0x401B, 0xF800, + 0x401B, 0xF000, + 0x4018, 0x6000, + 0x4018, 0x4000, + 0x4018, 0x0000, + 0x4018, 0x0000, + 0x7FF8, 0x0000, + 0x1FF8, 0x0000, + 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, + 0x0000, 0x0000, + 0x3E00, 0x0000, + 0x3E80, 0x0000, + 0x3EC0, 0x0000, + 0x3E00, 0x0000, + 0x3FE0, 0x0000, + 0x3FE0, 0x0000, + 0x3FE0, 0x0000, + 0x3FE0, 0x0000, + 0x3FE0, 0x0000, + 0x3FE0, 0x0000, + 0x3FE0, 0x0000, + 0x0000, 0x0000, + 0x0000, 0x0000, + 0x0000, 0x0000 +}; + +struct Image image = +{ + 0, 0, 22, 16, 2, image_data, 0x03, 0x00, NULL +}; + +struct TextAttr emerald17 = { (STRPTR)"emerald.font", 18, FS_NORMAL, 0x01 }; + + +/* This is the start of our programme. + */ +main() +{ + struct Screen *screen = NULL; + + /* We'll just open up on the default public screen, and use its screen font. + */ + if (screen = LockPubScreen(NULL)) + { + struct DrawInfo *drinfo = NULL; + + if (drinfo = GetScreenDrawInfo(screen)) + { + /* Open the BOOPSI class library. + */ + PutStr("Opening class\n"); + + if (LabelBase = OpenClass("images/label.image", 0)) + { + struct Image *label_image; + UWORD mapping[4]; + + /* Setup the mapping. This is a pretty standard map for + * a 4 colour image. + */ + mapping[0] = drinfo->dri_Pens[BACKGROUNDPEN]; + mapping[1] = drinfo->dri_Pens[SHADOWPEN]; + mapping[2] = drinfo->dri_Pens[SHINEPEN]; + mapping[3] = drinfo->dri_Pens[FILLPEN]; + + /* Create a label image. Here we make use of underscoring, + * multiple lines, images, different pens, different fonts + * and right justification. + */ + PutStr("Creating object\n"); + if (label_image = (struct Image *)NewObject(LABEL_GetClass(), NULL, + IA_Font, screen->Font, + LABEL_Justification, LABEL_CENTRE, + LABEL_Text, "_Under-scored\nNot under-scored\n", + LABEL_Text, "An image: ", + LABEL_Mapping, mapping, + LABEL_Image, &image, + IA_FGPen, 3, + IA_Font, &emerald17, + LABEL_Text, "\nChange fonts,\n", + IA_FGPen, 2, + IA_Font, screen->Font, + LABEL_Text, "and colours, ", + LABEL_SoftStyle, FSF_BOLD, + LABEL_Text, " and styles", + TAG_END)) + { + struct Window *win = NULL; + + Printf("Image size -- width: %ld height: %ld\n", + (LONG)label_image->Width, (LONG)label_image->Height); + + /* Open a simple window. + */ + if (win = OpenWindowTags(NULL, + WA_Left, 0, + WA_Top, screen->Font->ta_YSize + 3, + WA_InnerWidth, label_image->Width + INTERWIDTH * 2, + WA_InnerHeight, (label_image->Height + INTERHEIGHT * 2) * 2, + WA_IDCMP, IDCMP_GADGETUP | IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW, + WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | + WFLG_SIZEGADGET | WFLG_ACTIVATE | WFLG_SMART_REFRESH, + WA_Title, "Label Class Demo", + WA_MinWidth, label_image->Width + INTERWIDTH * 2 + 20, + WA_MinHeight, (label_image->Height + INTERHEIGHT * 2) * 2 + screen->Font->ta_YSize + 10, + WA_MaxWidth, -1, + WA_MaxHeight, -1, + TAG_DONE)) + { + struct RastPort *rport = win->RPort; + struct IntuiMessage *imsg; + UWORD top = win->BorderTop + INTERHEIGHT; + UWORD left = win->BorderLeft + INTERWIDTH; + BOOL ok = TRUE; + + PutStr("Drawing image\n"); + + DrawImageState(rport, label_image, left, top, + IDS_NORMAL, drinfo); + DrawImageState(rport, label_image, left, top + label_image->Height + INTERHEIGHT, + IDS_SELECTED, drinfo); + + /* Just wait around until the close gadget is pressed. + */ + while (ok) + { + WaitPort(win->UserPort); + while (imsg = (struct IntuiMessage *)GetMsg(win->UserPort)) + { + switch(imsg->Class) + { + case IDCMP_REFRESHWINDOW: + DrawImageState(rport, label_image, left, top, + IDS_NORMAL, drinfo); + DrawImageState(rport, label_image, left, top + label_image->Height + INTERHEIGHT, + IDS_SELECTED, drinfo); + break; + + case IDCMP_CLOSEWINDOW: + ok = FALSE; + break; + + default: + break; + } + ReplyMsg((struct Message *)imsg); + } + } + /* Done. + */ + CloseWindow(win); + } + else + PutStr("ERROR: Couldn't open window\n"); + + PutStr("Disposing image\n"); + DisposeObject(label_image); + } + else + PutStr("ERROR: Couldn't create image\n"); + + PutStr("Closing class\n"); + CloseLibrary((struct Library *)LabelBase); + } + else + PutStr("ERROR: Couldn't open class\n"); + + FreeScreenDrawInfo(screen, drinfo); + } + else + PutStr("ERROR: Couldn't get DrawInfo\n"); + + UnlockPubScreen(0, screen); + } + else + PutStr("ERROR: Couldn't lock public screen\n"); +} + + +/* Function to open a BOOPSI class library. + */ +struct ClassLibrary * OpenClass(STRPTR name, ULONG version) +{ + struct Library *retval; + UBYTE buffer[256]; + + if ((retval = OpenLibrary(name, version)) == NULL) + { + sprintf (buffer, ":classes/%s", name); + if ((retval = OpenLibrary(buffer, version)) == NULL) + { + sprintf(buffer, "classes/%s", name); + retval = OpenLibrary(buffer, version); + } + } + return((struct ClassLibrary *)retval); +} diff --git a/Examples/Label/LabelExample.c.info b/Examples/Label/LabelExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..0216d94f3ed549c10eb176b31a4225dd00175f5a GIT binary patch literal 300 zcmaDXz`)1=0uvYn8DtnF7+8UPM)rwq8DLR#f{}%RePXQzd;jtVpi~bKGb5DfJpi+1 z7{nQv7?>YOAV~owcpEl=rFjp4DF$8$#lX#Q1I%JO01;r$f-snFLHQ9724i*tSb#AC zA`T+||NsAC|Ns9N{{G+pVgG~r3x5yDf7s8!f8j3!`-goD>=%CX-~O;izWKtx`~QLT z{|o=K4u9Cg&wSzEEr|U8h}$3bH^^W3pIr|&=YKrJJdn9SVzmazZ; DgpgK8 literal 0 HcmV?d00001 diff --git a/Examples/Label/LabelExample.info b/Examples/Label/LabelExample.info new file mode 100644 index 0000000000000000000000000000000000000000..2879a15964f042a99aa61553dd7a24b21d400a78 GIT binary patch literal 450 zcmaDXz`)1=0s;&|3}y`C3@kuCBm2a*0I(=J!N`m(!UN>6APa!mW(;BsObpEB9LQ>6 z%0OB`01Isc6_)_g4nTPc1_Oo#*l6}Wl?otnj(uk#^tPK|^?_y|!SqGD2NQtu_UHE0 zCID$LAWYZ)2Z28fVCw%5hO40<5P+L@gvz@DX;Gj$*H9n}8y(=t0ugrAs YTGSP&&q2_U0VEDG7Nm{<-2n9&0Papz5dZ)H literal 0 HcmV?d00001 diff --git a/Examples/Layout.info b/Examples/Layout.info new file mode 100644 index 0000000000000000000000000000000000000000..12c6b0760f844f773721018290e60fafd212d3c7 GIT binary patch literal 628 zcmZvYF-yZx5Xb*7iFp-7MHg`pkxouh(c+Yj;^g9D#gE`uXg-FETZR&Fa}?|#=;$J3 zbI`>vP&1T1?|(08GvpxmyZh(v9(UiHFrYnRh%>AsMhIiG>wB9G$NHz~Oz_-DA0$4v z*~`a5>!D}1kvm5vz}CoSlRd_Ee)meM-QvQD!HD~C71hIx4Cd3waBr+#*f~ave|Jf;lZt teg8ZSbZ(v|I&Zo2f$C$d=zEviMOW7?$y;#msoa9(Ey()g;MUy@%s(f|!PWo( literal 0 HcmV?d00001 diff --git a/Examples/Layout/DynamicExample.c.info b/Examples/Layout/DynamicExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..53d1ad5251a07ddebcb7aa0176ab968799ada815 GIT binary patch literal 300 zcmaDXz`)1=0vj2G7-SeE7+8UPM)oDq3Sd!mf{}%ReI~a6d;jVQK&fd!%z{v&_W;b6 zVGw6vVqkux!HkdsvUnRdfcd-!Ai}&5ih-Nq2AIWm03yJg1z|AVg7PCE494sPumEEO zL>xr^|NsBP{{R0k{QbZG!~O^L7ycfQ|FEBd|H5Ae_7D3Q*f0F%zx`p4eDj5W_x}Uw z{}=ve9saO~pZUVSTM+sG5w}0=Z;-$6Kf4}m&i{Cbc_4Fv#&h|W=9FZXWu}&cEMoxx D; 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 bLVgLpi1--Z@bj<6XFxg6n-7F1>-+x)UXSU& literal 0 HcmV?d00001 diff --git a/Examples/Layout/LayoutExample.c b/Examples/Layout/LayoutExample.c new file mode 100644 index 0000000..59ea3e8 --- /dev/null +++ b/Examples/Layout/LayoutExample.c @@ -0,0 +1,514 @@ +/************************************************************************* + * ClassAct Comprehensive Demo Program + * Copyright © 1995 Osma Ahvenlampi + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +void __stdargs kprintf(const char *, ...); + +/* a simple button */ +#define Button(a) ButtonObject, GA_Text, a, ButtonEnd +#define DButton(a) ButtonObject, GA_Text, a, GA_Disabled, TRUE, ButtonEnd + +/************************************************************************** + * Some label arrays for the gadgets in this demo. + */ + +static STRPTR objtypes[] = +{ + "Exec", + "Image", + "Sound", + "Menu", + "Icon", + "Dock", + "Access", + NULL +}; + +static STRPTR objnames[] = +{ + "ToolManager", + "ScreenMode", + "WBPattern", + NULL +}; + +/************************************************************************* + * Gadget list + * This wouldn't be strictly necessary, but it's an easy way of keeping + * the gadget pointers for when we need to access the gadgets. + */ +typedef enum { G_ObjType = 1, G_ObjList, G_Top, G_Up, G_Down, G_Bottom, + G_Sort, G_New, G_Edit, G_Copy, G_Remove, G_Help, G_Save, G_Use, + G_Test, G_Cancel, G_MAX } GadgetIDs; + +struct Gadget *GL[G_MAX+1]; + +/************************************************************************* + * ReadArgs + */ + +#define TEMPLATE "S=SIMPLEREFRESH/S,NC=NOCAREREFRESH/S,ND=NDEFER/S" +LONG ARG[3]; +typedef enum { A_Simple, A_NoCare, A_NoDefer } Args; + +/************************************************************************* + * App message hook. + * Workbench App messages can be caught with a callback hook such as this. + * We'll not worry about the app message type in this hook. Objects dropped + * on the window or on the icon (while iconified) will be added to the + * listview. + */ + +void __asm __saveds AppMsgFunc( register __a0 struct Hook *Hook, + register __a2 Object *Window, + register __a1 struct AppMessage *Msg ) +{ + struct Window *Win; + struct WBArg *arg = Msg->am_ArgList; + LONG i = Msg->am_NumArgs; + struct List *l = Hook->h_Data; + struct Node *n; + UBYTE name[256]; + + GetAttr( WINDOW_Window, Window, (ULONG *)&Win ); + + /* Detach the list for modifications. + */ + SetGadgetAttrs( GL[G_ObjList], Win, NULL, LISTBROWSER_Labels, ~0, TAG_END ); + + while (i--) + { + /* Add the name of the icon to the listview. ListBrowser can copy the + * text into an internal buffer and thus let us not worry about the + * pointer validity. + */ + + NameFromLock( arg->wa_Lock, name, sizeof(name) ); + AddPart( name, arg->wa_Name, sizeof(name) ); + + if (n = AllocListBrowserNode( 1, LBNCA_CopyText, TRUE, LBNCA_Text, name, TAG_END )) + AddTail( l, n ); + + arg++; + } + + /* Reattach the list */ + SetGadgetAttrs( GL[G_ObjList], Win, NULL, LISTBROWSER_Labels, l, TAG_END ); +} + +/************************************************************************* + * Main Program + */ +int +main(void) +{ + struct List *objlist; + struct List *typelist; + struct RDArgs *args; + struct MsgPort *appport; + + if (!ButtonBase) /* force it open */ + return 30; + + if (!(args = ReadArgs(TEMPLATE, ARG, NULL))) + return 20; + + Printf("%seferred %s refresh %s\n", ARG[A_NoDefer] ? "Non-d" : "D", ARG[A_Simple] ? "Simple" : "Smart", ARG[A_NoCare] ? "(NoCare)" : ""); + + objlist = BrowserNodesA( objnames ); + typelist = ChooserLabelsA( objtypes ); + + /* By providing a message port you enable windowclass to handle iconification + * and appwindows. This port can shared by all the windows of your application. + */ + appport = CreateMsgPort(); + + if (objlist && typelist && appport) + { + struct Gadget *MainLayout; + Object *Window; + + struct Hook apphook; + apphook.h_Entry = (ULONG (* )())AppMsgFunc; + apphook.h_SubEntry = NULL; + apphook.h_Data = objlist; + + /* Create a Window object with a Layout. When Window is asked to open itself, + * it will calculate how much space the Layout needs and size itself accordingly. + */ + + Window = WindowObject, + + /* these tags describe the window + */ + + WA_IDCMP, IDCMP_RAWKEY, + WA_Top, 20, + WA_Left, 20, + WA_SizeGadget, TRUE, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_Activate, TRUE, + + /* About window refreshes: + * Because WindowClass and LayoutClass can, when used together, change the + * normal Intuition practise of refreshing gadgets in the input.device context, + * some rules about the refresh system change. + * Deferred refresh works in both smart and simple refresh windows, but + * if nocarerefresh is used, Intuition does not retain the damage regions + * and any window damage will force the whole window to be refreshed. + * This demo allows you to try combinations of refresh types. + * In the normal case you can ignore this and let WindowClass and the user + * decide what kind of refreshes they want. Nocare refresh can be + * combined with smart refresh to provide a fast, but somewhat more memory + * hungry refresh method. Simple refresh can save some memory but it's + * slower. + */ + + WA_SimpleRefresh, ARG[A_Simple], + WA_NoCareRefresh, ARG[A_NoCare], + WA_SmartRefresh, !ARG[A_Simple], + + WA_Title, "ClassAct layout.gadget Example (ToolManager preferences mockup)", + WA_ScreenTitle, "ClassAct Copyright 1995 Phantom Development LLC.", + + /* Turn on gadget help in the window + */ + + WINDOW_GadgetHelp, TRUE, + + /* Add an iconification gadget. If you have this, you must listen to + * WMHI_ICONIFY. + */ + + WINDOW_IconifyGadget, TRUE, + + /* This message port lets windowclass handle the icon and appwindow. + */ + + WINDOW_AppPort, appport, + WINDOW_AppWindow, TRUE, + WINDOW_AppMsgHook, &apphook, + + /* The windowclass will automatically free the DiskObject used when + * iconifying the window. If you do not provide a valid DiskObject, + * windowclass will try to use env:sys/def_window.info or the default + * project icon. + */ + + WINDOW_Icon, GetDiskObject( "LayoutExample" ), + WINDOW_IconTitle, "ClassAct Example", + + /* Below is the layout of the window + */ + + WINDOW_ParentGroup, MainLayout = VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_BevelStyle, BVS_THIN, + + /* this tag instructs layout.gadget to defer GM_LAYOUT and GM_RENDER and ask + * the windowclass to do them. This lessens the load on input.device + */ + LAYOUT_DeferLayout, !ARG[A_NoDefer], + + /* A 1-of-n chooser using the labels list we made from the label array earlier + */ + + StartMember, GL[G_ObjType] = ChooserObject, + CHOOSER_Labels, typelist, + EndMember, + MemberLabel("_Object Type"), + + /* Objects can be given arbitary weights within groups, and layout.gadget + * will distribute space relative to the total weight of the group. + * Here we set the button column to 0 weight which means minimum space. + * Thus the listview gets all available extra space. + */ + + StartHGroup, BAligned, + StartMember, GL[G_ObjList] = ListBrowserObject, + LISTBROWSER_Labels, objlist, + LISTBROWSER_ShowSelected, TRUE, + EndMember, + + StartVGroup, + StartMember, GL[G_Top] = DButton("Top"), + StartMember, GL[G_Up] = DButton("Up"), + StartMember, GL[G_Down] = DButton("Down"), + StartMember, GL[G_Bottom] = DButton("Bottom"), + StartMember, GL[G_Sort] = Button("So_rt"), + EndGroup, + CHILD_WeightedWidth, 0, + + /* One way to keep the buttons constant size is to set the + * group to stay at minimum size with a weight of 0. We could + * also set the weight of each of the buttons to 0. That way + * extra space would be distributed between the buttons + * instead of all below. This looks better. + */ + + CHILD_WeightedHeight, 0, + EndGroup, + + /* two rows of buttons. EvenSized instructs layout.gadget that it + * should make sure the minimum size of each matches, so that we + * get four neat columns. + * Again the weight is set to 0. When the window is resized, all + * space is given to the listview. + */ + + StartHGroup, EvenSized, + StartMember, GL[G_New] = Button("_New..."), + StartMember, GL[G_Edit] = DButton("_Edit..."), + StartMember, GL[G_Copy] = DButton("Co_py"), + StartMember, GL[G_Remove] = DButton("Remove"), + EndGroup, + CHILD_WeightedHeight, 0, + + StartHGroup, EvenSized, + StartMember, GL[G_Save] = Button("_Save"), + StartMember, GL[G_Use] = Button("_Use"), + StartMember, GL[G_Test] = Button("_Test"), + StartMember, GL[G_Cancel] = Button("_Cancel"), + EndGroup, + CHILD_WeightedHeight, 0, + + StartMember, GL[G_Help] = ButtonObject, + GA_ReadOnly, TRUE, + GA_Text, "Welcome to ClassAct demo!", + EndMember, + CHILD_WeightedHeight, 0, + EndGroup, + EndWindow; + + if (Window) + { + /* Window pointer cache. + */ + + struct Window *Win; + + /* Finish the gadgetarray initialisation. Set gadget IDs and release verify. + * This is one way of avoiding boring repetition in the layout description + * taglist itself. + */ + + { + LONG i = 1; + do SetAttrs(GL[i], GA_ID, i, GA_RelVerify, TRUE, TAG_END); + while (GL[++i]); + } + + if (Win = CA_OpenWindow( Window )) + { + ULONG wsig, asig = 1L << appport->mp_SigBit; + BOOL done = FALSE; + + /* Now that the window has been opened, we can get the signal mask + * of its user port. If the program supported iconification and didn't + * use a shared IDCMP port between all windows, this signal bit + * would have to be re-queried before each Wait(). + */ + + GetAttr( WINDOW_SigMask, Window, &wsig ); + + while (done == FALSE) + { + ULONG sig = Wait(wsig | asig | SIGBREAKF_CTRL_C); + ULONG result; + UWORD code; + + if (sig & (wsig | asig)) + { + /* Messages waiting at the window's IDCMP port. Loop at WM_HANDLEINPUT + * until all have been processed. + */ + + while ((result = CA_HandleInput(Window,&code)) != WMHI_LASTMSG) + { + /* The return code of this method is two-part. The upper word describes the + * class of the message (gadgetup, menupick, closewindow, iconify, etc), + * and the lower word is a class-defined ID, currently in use in the + * gadgetup and menupick return codes. + * Switch on the class, then on the ID. + */ + + switch(result & WMHI_CLASSMASK) + { + case WMHI_GADGETUP: + + /* OK, got a gadgetup from something. Lets find out what the something is. + * The code WORD to which a pointer was passed to WM_HANDLEINPUT has been + * set to the Code value from the IDCMP_GADGETUP, in case we need it. + */ + + switch(result & WMHI_GADGETMASK) + { + case G_ObjList: + /* User clicked on the listview + */ + { + static ULONG ids[] = { G_Top, G_Up, G_Down, G_Bottom, G_Edit, G_Copy, G_Remove, 0 }; + ULONG i, dis = FALSE; + + if (code == ~0) /* no node was selected */ + dis = TRUE; + + for ( i = 0 ; ids[i] ; i++ ) + { + SetGadgetAttrs( GL[ids[i]], Win, NULL, GA_Disabled, dis, TAG_END ); + RefreshGList( GL[ids[i]], Win, NULL, 1 ); + } + + break; + } + } + break; + + case WMHI_GADGETHELP: + { + STRPTR helptext; + + /* A gadget help message informs the application about the gadget + * under the mouse pointer. The code WORD is set to the value the + * gadget returned. Result code contains the ID of the gadget, + * or NULL (not in the window) or WMHI_GADGETMASK (not over a gadget). + */ + + switch(result & WMHI_GADGETMASK) + { + case G_ObjType: + helptext = "Choose object type"; + break; + case G_ObjList: + helptext = "Choose object to modify"; + break; + case G_Top: + helptext = "Move object to top"; + break; + case G_Up: + helptext = "Move object upwards"; + break; + case G_Down: + helptext = "Move object downwards"; + break; + case G_Bottom: + helptext = "Move object to bottom"; + break; + case G_Sort: + helptext = "Sort object list"; + break; + case G_New: + helptext = "Create new object"; + break; + case G_Edit: + helptext = "Edit object"; + break; + case G_Copy: + helptext = "Make a new copy of object"; + break; + case G_Remove: + helptext = "Delete the object"; + break; + case G_Help: + helptext = "Hey there ;)"; + break; + case G_Save: + helptext = "Save settings"; + break; + case G_Use: + helptext = "Use these settings"; + break; + case G_Test: + helptext = "Test these settings"; + break; + case G_Cancel: + helptext = "Cancel changes"; + break; + default: + helptext = ""; + break; + } + if (SetGadgetAttrs( GL[G_Help], Win, NULL, GA_Text, helptext, TAG_END )) + RefreshGList(GL[G_Help], Win, NULL, 1); + } + break; + + case WMHI_CLOSEWINDOW: + /* The window close gadget was hit. Time to die... + */ + done = TRUE; + break; + + case WMHI_ICONIFY: + /* Window requests that it be iconified. Handle this event as + * soon as possible. The window is not iconified automatically to + * give you a chance to make note that the window pointer will be + * invalid before the window closes. It also allows you to free + * resources only needed when the window is open, if you wish to. + */ + if (CA_Iconify( Window )) + Win = NULL; + break; + + case WMHI_UNICONIFY: + /* The window should be reopened. If you had free'd something + * on iconify, now is the time to re-allocate it, before calling + * CA_OpenWindow. + */ + Win = CA_OpenWindow( Window ); + break; + } + } + } + else if (sig & SIGBREAKF_CTRL_C) + { + done = TRUE; + } + } + /* Close the window and dispose of all attached gadgets + */ + DisposeObject( Window ); + } + } + } + + if (appport) + DeleteMsgPort(appport); + + /* NULL is valid input for these helper functions, so no need to check. + */ + FreeChooserLabels( typelist ); + FreeBrowserNodes( objlist ); + + FreeArgs(args); +} diff --git a/Examples/Layout/LayoutExample.c.info b/Examples/Layout/LayoutExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..344094c4b8ea1d02d4bd8a44dd162dceb166cbf0 GIT binary patch literal 300 zcmaDXz`)1=0vj3Z7-SeE7+8UPM)oCs8DLR#f{}%ReI{!Id;iJ~pwu)VHb5xRdjMw3 zFo-iSF)&vsFe9XZEZ&9V2*g}(>nKkR4VzwnoV{lh*6_6xuHZ-3Y$-+bZU{r^Dv z|Aqfqhd=D$XTI?77DWDk#O)9J8{{wi&#niX^FJP99>`pv@m#*8IVG88nW^O<%UA$= CY*r}% literal 0 HcmV?d00001 diff --git a/Examples/Layout/LayoutExample.info b/Examples/Layout/LayoutExample.info new file mode 100644 index 0000000000000000000000000000000000000000..b1f4db5d7bb770829a2ccf85f50343b8740dbd7e GIT binary patch literal 626 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 literal 0 HcmV?d00001 diff --git a/Examples/Layout/WeightedDemo.c b/Examples/Layout/WeightedDemo.c new file mode 100644 index 0000000..b029305 --- /dev/null +++ b/Examples/Layout/WeightedDemo.c @@ -0,0 +1,305 @@ +;/* +sc link weighteddemo.c lib lib:classact.lib +quit +*/ + +/* Layout Gadget Example. + * In this example we will NOT use window.class - just to show it is possible. + * Note, we do *NOT* recommend this. Window.class offers automatic prefs refresh, + * and support for window backfills, iconification and keyboard control! + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +/************************************************************************* + * Main Program + */ +int main(argc,argv) + int argc; + char *argv[]; +{ + struct Screen *Scr = NULL; + struct Window *Win = NULL; + struct Gadget *gParent = NULL; + + if (!ButtonBase) + return(20); + + if(argc > 1) + Scr = LockPubScreen(argv[1]); + else + Scr = LockPubScreen("Workbench"); + + if (Scr == NULL) + { + /* Shut down, no screen lock + */ + Printf("Failed locking public screen.\n"); + return(5); + } + + /* In this example we will create the layout group before opening + * the window, and size the window to the minimum layout size + * returned by the LayoutLimits() function, then SetGadgetAttr() + * will be used to cause the GREL layout group to resize with the window. + */ + + gParent = VGroupObject, + ICA_TARGET, ICTARGET_IDCMP, + + LAYOUT_SpaceOuter, TRUE, + LAYOUT_BevelStyle, BVS_GROUP, + LAYOUT_DeferLayout, TRUE, /* this tag instructs layout.gadget to + * defer GM_LAYOUT and GM_RENDER and ask + * the application to do them. This + * lessens the load on input.device + */ + LAYOUT_AddChild, HGroupObject, + LAYOUT_SpaceOuter, FALSE, + LAYOUT_AddChild, HGroupObject, + LAYOUT_SpaceOuter, TRUE, + /* the first group is three label-less buttons + * side by side + */ + LAYOUT_BevelStyle, BVS_GROUP, + LAYOUT_Label, "Horizontal", + LAYOUT_AddChild, ButtonObject, + End, + LAYOUT_AddChild, ButtonObject, + End, + LAYOUT_AddChild, ButtonObject, + End, + End, + + LAYOUT_AddChild, VGroupObject, + LAYOUT_SpaceOuter, TRUE, + /* the second group is three label-less buttons + * in a vertical group + */ + LAYOUT_BevelStyle, BVS_GROUP, + LAYOUT_Label, "Vertical", + LAYOUT_AddChild, ButtonObject, + End, + LAYOUT_AddChild, ButtonObject, + End, + LAYOUT_AddChild, ButtonObject, + End, + End, + End, + + LAYOUT_AddChild, HGroupObject, + /* four buttons of varying widths */ + LAYOUT_BevelStyle, BVS_SBAR_VERT, + LAYOUT_Label, "Free, Fixed and Weighted sizes.", + LAYOUT_AddChild, ButtonObject, + GA_Text, "25Kg", + End, + CHILD_WeightedWidth, 25, + + LAYOUT_AddChild, ButtonObject, + GA_Text, "50Kg", + End, + CHILD_WeightedWidth, 50, + + LAYOUT_AddChild, ButtonObject, + GA_Text, "75Kg", + End, + CHILD_WeightedWidth, 75, + + LAYOUT_AddChild, ButtonObject, + GA_Text, "100Kg", + End, + CHILD_WeightedWidth, 100, + End, + CHILD_WeightedHeight,0, + + LAYOUT_AddChild, HGroupObject, + /* four buttons sized in another way */ + LAYOUT_AddChild, ButtonObject, + GA_Text, "Free", + End, + + LAYOUT_AddChild, ButtonObject, + GA_Text, "Fixed", + End, + CHILD_WeightedWidth, 0, + + LAYOUT_AddChild, ButtonObject, + GA_Text, "Free", + End, + + LAYOUT_AddChild, ButtonObject, + GA_Text, "Fixed", + End, + CHILD_WeightedWidth, 0, + End, + CHILD_WeightedHeight,0, + CHILD_MinWidth, 300, + + End; + + if (gParent) + { + struct LayoutLimits Limits; + struct TextFont *font = OpenFont( Scr->Font ); + + /* Query parent layout group for min/max layout limits. */ + LayoutLimits( gParent, &Limits, font, Scr ); + + CloseFont( font ); + + if (Win = OpenWindowTags(NULL, + WA_Flags, WFLG_DEPTHGADGET | WFLG_DRAGBAR | + WFLG_CLOSEGADGET | WFLG_ACTIVATE | WFLG_SIZEGADGET, + WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_IDCMPUPDATE, + WA_Top, 20, + WA_Left, 20, + WA_InnerWidth, Limits.MinWidth, /* open the window at the minimum */ + WA_InnerHeight, Limits.MinHeight, /* size in which the layout fits */ + WA_NoCareRefresh, TRUE, /* only BOOPSI here, no need for separate refreshing */ + WA_PubScreen, Scr, + WA_Title, "ClassAct layout.gadget Example", + WA_ScreenTitle, "ClassAct Copyright 1995 Phantom Development LLC.", + TAG_END)) + { + ULONG wsig = 1L << Win->UserPort->mp_SigBit; + struct IntuiMessage *msg; + BOOL done = FALSE; + + WORD BorderWidth = Win->BorderLeft + Win->BorderRight; + WORD BorderHeight = Win->BorderTop + Win->BorderBottom; + + /* set the window minimum and maximum size to the limits of the layout */ + WindowLimits(Win, + Limits.MinWidth + BorderWidth, + Limits.MinHeight + BorderHeight, + Limits.MaxWidth + BorderWidth, + Limits.MaxHeight + BorderHeight); + + /* make the layout group resize itself relative to window size */ + SetGadgetAttrs( gParent, NULL, NULL, + GA_Top, Win->BorderTop, + GA_Left, Win->BorderLeft, + GA_RelWidth, -BorderWidth, + GA_RelHeight, -BorderHeight, + TAG_END); + + /* make the layout visible */ + AddGadget(Win, gParent, -1); + RefreshGList(gParent, Win, NULL, 1); + + while (done == FALSE) + { + ULONG sig = Wait(wsig | SIGBREAKF_CTRL_C); + + if (sig & wsig) + { + while (msg = (struct IntuiMessage *) GetMsg(Win->UserPort)) + { + /* If you chooser to reply to the message before processing + * it, remember that for IDCMP_IDCMPUPDATE the IAddress + * field points to a tag list that will get free'd on reply. + * + * Before replying, check if the message is IDCMPUPDATE + * and CloneTagItems(msg->IAddress). Don't forget to + * FreeTagItems() your cloned list after you have + * processed it. + */ + + switch (msg->Class) + { + case IDCMP_CLOSEWINDOW: + done = TRUE; + break; + + case IDCMP_IDCMPUPDATE: + { + /* These are the deferred layout specific event + * handlers. This is not as sophisticated as + * window.class's internal logic, but it will suffice. + */ + if (FindTagItem(LAYOUT_RequestRefresh,msg->IAddress)) + { + /* Intuition attempted to refresh the window, + * layout.gadget sent this message to the application. + * We now do the refresh. This is done here because + * refreshing a very complex layout could take some + * time, and doing it in input.device context makes + * the pointer jumpy. + * RefreshWindowFrame() will refresh not only the + * window border but also all gadgets. + * RefreshGList(gParent, Win, NULL, 1); + */ + RefreshWindowFrame( Win ); + break; + } + else if (FindTagItem(LAYOUT_RequestLayout,msg->IAddress)) + { + /* GM_LAYOUT can be a slow operation, so we don't + * want it to be done my input.device... + */ + RethinkLayout(gParent, Win, NULL, FALSE ); + break; + } + else if (FindTagItem(LAYOUT_RelVerify,msg->IAddress)) + { + /* LAYOUT_RelVerify matches an IDCMP_GADGETUP, + * which is somewhat restricted because of + * Intuition limitations.... + */ + + switch ( GetTagData(GA_ID,0,msg->IAddress) ) + { + default: + done = TRUE; + break; + } + break; + } + } + break; + + default: + break; + } + + ReplyMsg((struct Message *) msg); + } + } + else if (sig & SIGBREAKF_CTRL_C) + { + done = TRUE; + } + } + + RemoveGadget(Win, gParent); + CloseWindow(Win); + } + + /* Disposing a layout instance will automatically dispose + * all the child objects. + */ + DisposeObject(gParent); + } + + UnlockPubScreen(0, Scr); + exit(0); +} diff --git a/Examples/Layout/WeightedDemo.c.info b/Examples/Layout/WeightedDemo.c.info new file mode 100644 index 0000000000000000000000000000000000000000..b7884f7f6c2dd423c878fc087694e9f3af99e8d4 GIT binary patch literal 300 zcmaDXz`)1=0vj2!7-SeE7+8UPM)o;JUw}o?2}TwM_KCF??ET9dfKtxr^|NsBP{{R0k{QbZG!~O^L7ycfQ|FEBd|H5Ae_7D3Q*f0F%zx`p4eDj5W_x}Uw z{}=ve9saO~pZUVSTM+sG5w}0=Z;-$6Kf4}m&i{Cbc_4Fv#&h|W=9FZXWu}&cEMoxx D-^EvT literal 0 HcmV?d00001 diff --git a/Examples/Layout/WeightedDemo.info b/Examples/Layout/WeightedDemo.info new file mode 100644 index 0000000000000000000000000000000000000000..cfcfc4f5fc06f090887b04a381c00bde45bcc773 GIT binary patch literal 626 zcmaDXz`)1=0%{D|3}y`C3@kuCBl}FQA7D{*f{__ngd50-MHT?F%^1WOm>HNKNU$SG zu|U~8Xmk$)^M4S)q?te}8G9I*7#c8W7O;5Rl67FZYt<4I`dLa6n9ra9(a&%IN`uW| zhuQ~m2*N$}VDUc;VCw%5hO40<5CEsIgCznO(CI5+g8~@9G&7ZGCZN4g`z}DuM|Te} IRE8t~0IYIrPyhe` literal 0 HcmV?d00001 diff --git a/Examples/Layout/dynamicexample b/Examples/Layout/dynamicexample new file mode 100644 index 0000000000000000000000000000000000000000..bc37f9962ff01a11ee10b405527d92cebc651e10 GIT binary patch literal 4660 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 literal 0 HcmV?d00001 diff --git a/Examples/Layout/dynamicexample.c b/Examples/Layout/dynamicexample.c new file mode 100644 index 0000000..299a538 --- /dev/null +++ b/Examples/Layout/dynamicexample.c @@ -0,0 +1,294 @@ +;/* Dynamic Example +sc link dynamicexample.c lib lib:classact.lib +quit +*/ + +/* system includes + */ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +/* ClassAct includes + */ +#include + +enum +{ + GID_MAIN=0, + GID_ADDBUTTON, + GID_REMBUTTON, + GID_REPLACE, + GID_ADDED, + GID_QUIT, + GID_LAST +}; + +enum +{ + WID_MAIN=0, + WID_LAST +}; + +enum +{ + OID_MAIN=0, + OID_LAST +}; + +int main(void) +{ + struct MsgPort *AppPort; + + struct Window *windows[WID_LAST]; + + struct Gadget *gadgets[GID_LAST]; + + Object *objects[OID_LAST]; + + /* we must initialize this pointer! */ + gadgets[GID_ADDED] = NULL; + + /* make sure our classes opened... */ + if (!ButtonBase || !CheckBoxBase || !WindowBase || !LayoutBase) + return(30); + else if ( AppPort = CreateMsgPort() ) + { + /* Create the window object. + */ + objects[OID_MAIN] = WindowObject, + WA_ScreenTitle, "ClassAct Release 2.0", + WA_Title, "ClassAct Dynamic Layout Example", + WA_Activate, TRUE, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_SizeGadget, TRUE, + WINDOW_IconifyGadget, TRUE, + WINDOW_IconTitle, "Dynamic Iconified", + WINDOW_AppPort, AppPort, + WINDOW_Position, WPOS_CENTERMOUSE, + WINDOW_ParentGroup, gadgets[GID_MAIN] = VGroupObject, + LAYOUT_DeferLayout, TRUE, + LAYOUT_SpaceOuter, TRUE, + + LAYOUT_AddChild, HGroupObject, + LAYOUT_EvenSize, TRUE, + LAYOUT_AddChild, gadgets[GID_ADDBUTTON] = ButtonObject, + GA_ID, GID_ADDBUTTON, + GA_RelVerify, TRUE, + GA_Text, "_AddChild", + ButtonEnd, + + LAYOUT_AddChild, gadgets[GID_REMBUTTON] = ButtonObject, + GA_ID, GID_REMBUTTON, + GA_RelVerify, TRUE, + GA_Text, "_RemoveChild", + GA_Disabled, TRUE, + ButtonEnd, + + LAYOUT_AddChild, gadgets[GID_REPLACE] = ButtonObject, + GA_ID, GID_REPLACE, + GA_RelVerify, TRUE, + GA_Text, "Replace", + GA_Disabled, TRUE, + ButtonEnd, + + LAYOUT_AddChild, gadgets[GID_QUIT] = ButtonObject, + GA_ID, GID_QUIT, + GA_RelVerify, TRUE, + GA_Text,"_Quit", + ButtonEnd, + LayoutEnd, + + EndGroup, + EndWindow; + + /* Object creation sucessful? + */ + if (objects[OID_MAIN]) + { + /* Open the window. + */ + if (windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN])) + { + ULONG wait, signal, app = (1L << AppPort->mp_SigBit); + ULONG done = FALSE; + ULONG result; + UWORD code; + + /* Obtain the window wait signal mask. + */ + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + + /* Input Event Loop + */ + while (!done) + { + wait = Wait( signal | SIGBREAKF_CTRL_C | app ); + + if ( wait & SIGBREAKF_CTRL_C ) + { + done = TRUE; + } + else + { + while ( (result = CA_HandleInput(objects[OID_MAIN], &code) ) != WMHI_LASTMSG ) + { + switch (result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + windows[WID_MAIN] = NULL; + done = TRUE; + break; + + case WMHI_GADGETUP: + switch (result & WMHI_GADGETMASK) + { + case GID_ADDBUTTON: + if (gadgets[GID_ADDED] == NULL) + { + SetGadgetAttrs(gadgets[GID_ADDBUTTON], windows[WID_MAIN], NULL, + GA_Disabled, TRUE, + TAG_DONE); + SetGadgetAttrs(gadgets[GID_REMBUTTON], windows[WID_MAIN], NULL, + GA_Disabled, FALSE, + TAG_DONE); + SetGadgetAttrs(gadgets[GID_REPLACE], windows[WID_MAIN], NULL, + GA_Disabled, FALSE, + TAG_DONE); + + /* add a new child! */ + SetGadgetAttrs(gadgets[GID_MAIN], windows[WID_MAIN], NULL, + LAYOUT_Inverted, TRUE, // Causes AddHead vs. AddTail! + LAYOUT_AddChild, gadgets[GID_ADDED] = ButtonObject, + GA_ID, GID_ADDED, + GA_RelVerify, TRUE, + GA_Text, "Peekaboo!", + ButtonEnd, + TAG_DONE); + + /* rethink the window layout */ + if (DoMethod(objects[OID_MAIN], WM_RETHINK) == 0) + DoMethod(objects[OID_MAIN], WM_NEWPREFS); + } + break; + + case GID_REMBUTTON: + if (gadgets[GID_ADDED] != NULL) + { + SetGadgetAttrs(gadgets[GID_ADDBUTTON], windows[WID_MAIN], NULL, + GA_Disabled, FALSE, + TAG_DONE); + SetGadgetAttrs(gadgets[GID_REMBUTTON], windows[WID_MAIN], NULL, + GA_Disabled, TRUE, + TAG_DONE); + SetGadgetAttrs(gadgets[GID_REPLACE], windows[WID_MAIN], NULL, + GA_Disabled, TRUE, + TAG_DONE); + + /* remove the child! */ + SetGadgetAttrs(gadgets[GID_MAIN], windows[WID_MAIN], NULL, + LAYOUT_RemoveChild, gadgets[GID_ADDED], + TAG_DONE); + + /* clear the pointer */ + gadgets[GID_ADDED] = NULL; + + /* rethink the window layout */ + if (DoMethod(objects[OID_MAIN], WM_RETHINK) == 0) + DoMethod(objects[OID_MAIN], WM_NEWPREFS); + } + break; + + case GID_REPLACE: + if (gadgets[GID_ADDED] != NULL) + { + struct Gadget *temp = NULL; + + SetGadgetAttrs(gadgets[GID_REPLACE], windows[WID_MAIN], NULL, + GA_Disabled, TRUE, + TAG_DONE); + + /* replace the child! */ + SetGadgetAttrs(gadgets[GID_MAIN], windows[WID_MAIN], NULL, + LAYOUT_ModifyChild, gadgets[GID_ADDED], + CHILD_ReplaceObject, temp = CheckBoxObject, + GA_ID, GID_ADDED, + GA_RelVerify, TRUE, + GA_Text, "Peekaboo!", + CHECKBOX_TextPlace, PLACETEXT_RIGHT, + CheckBoxEnd, + TAG_DONE); + + gadgets[GID_ADDED] = temp; + + /* rethink the window layout */ + if (DoMethod(objects[OID_MAIN], WM_RETHINK) == 0) + DoMethod(objects[OID_MAIN], WM_NEWPREFS); + } + break; + + case GID_ADDED: + break; + + case GID_QUIT: + done = TRUE; + break; + } + break; + + case WMHI_ICONIFY: + CA_Iconify(objects[OID_MAIN]); + windows[WID_MAIN] = NULL; + break; + + case WMHI_UNICONIFY: + windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN]); + + if (windows[WID_MAIN]) + { + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + } + else + { + done = TRUE; // error re-opening window! + } + break; + } + } + } + } + } + + /* Disposing of the window object will also close the window if it is + * already opened, and it will dispose of the layout object attached to it. + */ + DisposeObject(objects[OID_MAIN]); + } + + DeleteMsgPort(AppPort); + } + + return(0); +} diff --git a/Examples/ListBrowser.info b/Examples/ListBrowser.info new file mode 100644 index 0000000000000000000000000000000000000000..de212e404d329c99c67511c62636cfe4728a01c2 GIT binary patch literal 628 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 literal 0 HcmV?d00001 diff --git a/Examples/ListBrowser/LB_Example.c b/Examples/ListBrowser/LB_Example.c new file mode 100644 index 0000000..5e700d3 --- /dev/null +++ b/Examples/ListBrowser/LB_Example.c @@ -0,0 +1,382 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +ULONG __asm __saveds lb_hook(register __a0 struct Hook *hook, register + __a2 struct Node *node, register __a1 struct LBDrawMsg *msg); + +struct ColumnInfo ci[] = +{ + { 100, "Column Header", 0 }, + { -1, (STRPTR)~0, -1 } +}; + +struct TextAttr emerald17 = { (STRPTR)"emerald.font", 18, FS_NORMAL, 0x01 }; + + +/* Here's where it all starts. + */ +main() +{ + struct Screen *screen = NULL; + + if (!ButtonBase) return(20); + + /* We'll just open up on the default public screen, and use its screen font. + */ + if (screen = LockPubScreen(NULL)) + { + struct TextAttr emerald17 = { (STRPTR)"emerald.font", 18, FS_NORMAL, 0x01 }; + struct DrawInfo *drinfo = GetScreenDrawInfo(screen); + Object *layout; + struct Gadget *lb_gad; + struct List list; + struct Image *limage, *gimage; + struct Hook lbhook; + + NewList(&list); + + if (layout = LayoutObject, + GA_DrawInfo, drinfo, + LAYOUT_DeferLayout, TRUE, /* Layout refreshes done on + * task's context (by the + * window class) */ + LAYOUT_SpaceOuter, TRUE, + LAYOUT_AddChild, lb_gad = ListBrowserObject, + GA_ID, 1, + GA_RelVerify, TRUE, + LISTBROWSER_Labels, &list, + LISTBROWSER_ColumnInfo, &ci, + LISTBROWSER_ColumnTitles, TRUE, + LISTBROWSER_Separators, TRUE, + LISTBROWSER_Hierarchical, TRUE, + LISTBROWSER_Editable, TRUE, + LISTBROWSER_MultiSelect, TRUE, + LISTBROWSER_ShowSelected, TRUE, + ListBrowserEnd, + + LayoutEnd) + { + struct MsgPort *app_port; + Object *window_obj; + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Demo of ListBrowserNode features", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Flags, LBFLG_HASCHILDREN | LBFLG_SHOWCHILDREN, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Editable node", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Click twice to edit", + LBNCA_Editable, TRUE, + LBNCA_MaxChars, 60, + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Flags, LBFLG_HASCHILDREN | LBFLG_SHOWCHILDREN, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Change colours", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Flags, LBFLG_CUSTOMPENS, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Colourful!", + LBNCA_FGPen, 19, + LBNCA_BGPen, 18, + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Flags, LBFLG_HASCHILDREN | LBFLG_SHOWCHILDREN, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Checkbox item", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_CheckBox, TRUE, + LBNA_Checked, TRUE, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Checked by default", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_CheckBox, TRUE, + LBNA_Checked, FALSE, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Unchecked by default", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Flags, LBFLG_HASCHILDREN | LBFLG_SHOWCHILDREN, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Justifications", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Left", + LBNCA_Justification, LCJ_LEFT, + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Centre", + LBNCA_Justification, LCJ_CENTRE, + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Right", + LBNCA_Justification, LCJ_RIGHT, + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Flags, LBFLG_HASCHILDREN | LBFLG_SHOWCHILDREN, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Read-Only node", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Flags, LBFLG_READONLY, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Can't select me!", + TAG_DONE); + + gimage = GlyphObject, + IA_Width, 20, + IA_Height, 20, + GLYPH_Glyph, GLYPH_POPTIME, + GlyphEnd; + limage = LabelObject, + IA_Font, &emerald17, + LABEL_Text, "Created using _label.image\n", + IA_Font, screen->Font, + LABEL_SoftStyle, FSF_BOLD | FSF_ITALIC, + LABEL_Image, gimage, + IA_FGPen, 35, + LABEL_Text, " Cool eh?", + LabelEnd; + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Flags, LBFLG_HASCHILDREN | LBFLG_SHOWCHILDREN, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Some images", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Column, 0, + LBNCA_Image, limage, + TAG_DONE); + + lbhook.h_Entry = (ULONG (*)())lb_hook; + lbhook.h_SubEntry = NULL; + lbhook.h_Data = NULL; + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 1, + LBNA_Flags, LBFLG_HASCHILDREN | LBFLG_SHOWCHILDREN, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, "Rendering hook", + TAG_DONE); + + LBAddNode(lb_gad, NULL, NULL, (struct Node *)~0, + LBNA_Generation, 2, + LBNA_Column, 0, + LBNCA_RenderHook, &lbhook, + LBNCA_HookHeight, 20, + TAG_DONE); + + /* Create a message port for App* messages. This is needed for + * iconification. We're being a touch naughty by not checking + * the return code, but that just means that iconification won't + * work, nothing really bad will happen. + */ + app_port = CreateMsgPort(); + + /* Create the window object. + */ + if (window_obj = WindowObject, + WA_Left, 0, + WA_Top, screen->Font->ta_YSize + 3, + WA_CustomScreen, screen, + WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW, + WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | + WFLG_SIZEGADGET | WFLG_ACTIVATE | WFLG_SMART_REFRESH, + WA_Title, "ListBrowser class example", + WA_InnerWidth, 300, + WA_InnerHeight, 200, + WA_NewLookMenus, TRUE, + WINDOW_ParentGroup, layout, + WINDOW_IconifyGadget, TRUE, + WINDOW_Icon, GetDiskObject("PROGDIR:LB_Example"), + WINDOW_IconTitle, "LB_Example", + WINDOW_AppPort, app_port, + TAG_DONE)) + { + struct Window *win; + + /* Open the window. + */ + if (win = (struct Window *)CA_OpenWindow(window_obj)) + { + ULONG signal; + BOOL ok = TRUE; + + /* Obtain the window wait signal mask. + */ + GetAttr(WINDOW_SigMask, window_obj, &signal); + + /* Input Event Loop + */ + while (ok) + { + ULONG result; + + Wait(signal | (1L << app_port->mp_SigBit)); + + /* CA_HandleInput() returns the gadget ID of a clicked + * gadget, or one of several pre-defined values. For + * this demo, we're only actually interested in a + * close window and a couple of gadget clicks. + */ + while ((result = CA_HandleInput(window_obj, NULL)) != WMHI_LASTMSG) + { + switch(result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + ok = FALSE; + break; + + case WMHI_GADGETUP: + switch (result & WMHI_GADGETMASK) + { + default: + break; + } + break; + + case WMHI_ICONIFY: + if (CA_Iconify(window_obj)) + win = NULL; + break; + + case WMHI_UNICONIFY: + win = CA_OpenWindow(window_obj); + break; + + default: + break; + } + } + } + } + else + PutStr("ERROR: failed to start. Couldn't open window\n"); + + /* Disposing of the window object will also close the + * window if it is already opened and it will dispose of + * all objects attached to it. + */ + DisposeObject(window_obj); + } + else + PutStr("ERROR: failed to start. Couldn't create window\n"); + + /* Lose the App* message port. + */ + if (app_port) + DeleteMsgPort(app_port); + } + else + PutStr("ERROR: failed to start. Couldn't create layout\n"); + + if (drinfo) + FreeScreenDrawInfo(screen, drinfo); + + UnlockPubScreen(0, screen); + } + else + PutStr("ERROR: failed to start. Couldn't lock destination screen\n"); + + exit(0); +} + +ULONG __asm __saveds lb_hook(register __a0 struct Hook *hook, register + __a2 struct Node *node, register __a1 struct LBDrawMsg *msg) +{ + UWORD patterndata[2] = { 0x2222, 0x8888 }; + WORD width = msg->lbdm_Bounds.MaxX - msg->lbdm_Bounds.MinX; + WORD height = msg->lbdm_Bounds.MaxY - msg->lbdm_Bounds.MinY; + + if(msg->lbdm_MethodID != LV_DRAW) + return(LBCB_UNKNOWN); + + SetAPen(msg->lbdm_RastPort, 69); + DrawEllipse(msg->lbdm_RastPort, + msg->lbdm_Bounds.MinX + (width / 2), msg->lbdm_Bounds.MinY + (height / 2), + width / 2, height / 2); + + return(LVCB_OK); +} diff --git a/Examples/ListBrowser/LB_Example.c.info b/Examples/ListBrowser/LB_Example.c.info new file mode 100644 index 0000000000000000000000000000000000000000..026bc9e42c0bbf4323c9d6b4c52a2528da20a5ac GIT binary patch literal 300 zcmaDXz`)1=0fjv)B$m1emiR45nL9eguTUn4JI?V2pr> zgUJ8?|9{y3|Nn)*|M!2`|DgWD-vja=_A~Hb_{+flVIKqgh2Q+QKkSijzVPqKnF5l9elFYKq)N+tzEC4L{ BR`37- literal 0 HcmV?d00001 diff --git a/Examples/ListBrowser/LB_Example.info b/Examples/ListBrowser/LB_Example.info new file mode 100644 index 0000000000000000000000000000000000000000..4113c37c9e2c861cda940c3ab059db1b4e5263b7 GIT binary patch literal 450 zcmaDXz`)1=0^AHj3}y`C3@kuCBm2bE07K>z?f6HMCx literal 0 HcmV?d00001 diff --git a/Examples/ListBrowser/ListBrowserExample b/Examples/ListBrowser/ListBrowserExample new file mode 100644 index 0000000000000000000000000000000000000000..211b061c208265df4b64f41bfcdfc9ee8d804fb8 GIT binary patch literal 9476 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 literal 0 HcmV?d00001 diff --git a/Examples/ListBrowser/ListBrowserExample.c b/Examples/ListBrowser/ListBrowserExample.c new file mode 100644 index 0000000..20ddb35 --- /dev/null +++ b/Examples/ListBrowser/ListBrowserExample.c @@ -0,0 +1,540 @@ + +/** + ** ListBrowserTest.c -- List Browser class test. + ** + ** This is a simple example testing some of the capabilities of the + ** ListBrowser gadget class. + ** + ** This code opens a simple window and then a ListBrowser gadget which is + ** subsequently attached to the window's gadget list. Everytime the user + ** clicks on the close gadget, this code changes some of the attributes + ** of the ListBrowser gadget to demonstrate different ways it can be used, + ** including one demonstration which creates two images using the Label + ** class and shows them in the ListBrowser. + ** + **/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Soon to be moved to gadgets/listbrowser.h + */ +#define LBNCA_Editable (LBNA_Dummy+13) +#define LBNCA_MaxChars (LBNA_Dummy+14) +#define LBNCA_CopyText (LBNA_Dummy+15) +#define LISTBROWSER_Editable (LISTBROWSER_Dummy+33) +#define LISTBROWSER_Position (LISTBROWSER_Dummy+34) +#define LISTBROWSER_EditNode (LISTBROWSER_Dummy+35) +#define LISTBROWSER_EditColumn (LISTBROWSER_Dummy+36) +#define LBP_LINEUP 1 +#define LBP_LINEDOWN 2 +#define LBP_PAGEUP 3 +#define LBP_PAGEDOWN 4 +#define LBP_TOP 5 +#define LBP_BOTTOM 6 + +#define RAWKEY_CURSORUP 76 +#define RAWKEY_CURSORDOWN 77 +#define QUALIFIER_SHIFT 0x03 +#define QUALIFIER_ALT 0x30 +#define QUALIFIER_CTRL 0x08 + + +/* Function prototypes. + */ +BOOL make_list(struct List *, UBYTE **, LONG *); +VOID free_list(struct List *); +VOID wait_for_close(struct Window *, struct Gadget *); +struct ClassLibrary * OpenClass(STRPTR, ULONG); + +/* Global variables. + */ +struct ClassLibrary *ListBrowserBase; +struct ClassLibrary *LabelBase; + + +UBYTE *col1[] = +{ + "This is a", "test of the", "ListBrowser", "gadget class.", + "This is like", "a souped-up", "listview", "gadget. It", "has many", + "cool new", "features", "though like", "multiple", "columns,", + "horizontal", "scrolling,", "images in", "nodes,", "columns titles", + "and much much", "more!", + "This is a", "test of the", "ListBrowser", "gadget class.", + "This is like", "a souped-up", "listview", "gadget. It", "has many", + "cool new", "features", "though like", "multiple", "columns,", + "horizontal", "scrolling,", "images in", "nodes,", "columns titles", + "and much much", "more!", + "This is a", "test of the", "ListBrowser", "gadget class.", + "This is like", "a souped-up", "listview", "gadget. It", "has many", + "cool new", "features", "though like", "multiple", "columns,", + "horizontal", "scrolling,", "images in", "nodes,", "columns titles", + "and much much", "more!", NULL +}; + +LONG col2[] = +{ + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63 +}; + +struct ColumnInfo ci[] = +{ + { 80, "Col 1", 0 }, + { 60, "Col 2", 0 }, + { 60, "Col 3", 0 }, + { -1, (STRPTR)~0, -1 } +}; + +struct ColumnInfo fancy_ci[] = +{ + { 100, NULL, 0 }, + { -1, (STRPTR)~0, -1 } +}; + +/* Some fonts for our fancy list. + */ +struct TextAttr helvetica24b = { (STRPTR)"helvetica.font", 24, FSF_BOLD, FPF_DISKFONT }; +struct TextAttr times18i = { (STRPTR)"times.font", 18, FSF_ITALIC, FPF_DISKFONT }; +struct TextAttr times18 = { (STRPTR)"times.font", 18, 0, FPF_DISKFONT }; + + +/* This is the start of our programme. + */ +main() +{ + struct Screen *screen = NULL; + + /* We'll just open up on the default public screen, and use its screen font. + */ + if (screen = LockPubScreen(NULL)) + { + struct Window *win = NULL; + + /* Open the window, note how we size the window to perfectly fit + * all the gadgets. + */ + if (win = OpenWindowTags(NULL, + WA_Left, 0, + WA_Top, screen->Font->ta_YSize + 3, + WA_Width, 300, + WA_Height, 160, + WA_CustomScreen, screen, + WA_IDCMP, IDCMP_GADGETUP | IDCMP_MOUSEMOVE | IDCMP_RAWKEY | + IDCMP_CLOSEWINDOW | IDCMP_GADGETDOWN, + WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | + WFLG_SIZEGADGET | WFLG_ACTIVATE | WFLG_SMART_REFRESH, + WA_Title, "ListBrowser Class Demo", + WA_MinWidth, 50, + WA_MinHeight, 50, + WA_MaxWidth, -1, + WA_MaxHeight, -1, + TAG_DONE)) + { + /* Create the private BOOPSI image class. + */ + PutStr("Creating ListBrowser class\n"); + if (ListBrowserBase = OpenClass("gadgets/listbrowser.gadget", 0)) + { + struct Gadget *listbrowser_gad; + struct List label_list; + + make_list(&label_list, col1, col2); + + /* Create a listbrowser gadget. + */ + PutStr("Creating ListBrowser object\n"); + if (listbrowser_gad = (struct Gadget *)NewObject(LISTBROWSER_GetClass(), NULL, + GA_ID, 1, + GA_Top, win->BorderTop + 5, + GA_Left, 10, + GA_RelWidth, -34, + GA_RelHeight, -(win->BorderTop + win->BorderBottom + 10), + GA_RelVerify, TRUE, + LISTBROWSER_Labels, (ULONG)&label_list, + LISTBROWSER_ColumnInfo, (ULONG)&ci, + LISTBROWSER_ColumnTitles, TRUE, + LISTBROWSER_MultiSelect, FALSE, + LISTBROWSER_Separators, TRUE, + LISTBROWSER_ShowSelected, FALSE, + LISTBROWSER_Editable, TRUE, + TAG_END)) + { + /* Adding gadgets. + */ + PutStr("Adding gadget\n"); + AddGList(win, listbrowser_gad, -1, -1, NULL); + PutStr("Refreshing gadget\n"); + RefreshGList(listbrowser_gad, win, NULL, -1); + + /* Wait for close gadget click to continue. + */ + SetWindowTitles(win, "<- Click here to continue", (UBYTE *)~0); + wait_for_close(win, listbrowser_gad); + + /* Make Visible + */ + SetWindowTitles(win, "Make Visible 10", (UBYTE *)~0); + SetGadgetAttrs(listbrowser_gad, win, NULL, + LISTBROWSER_MakeVisible, 10, + LISTBROWSER_EditNode, 8, + LISTBROWSER_EditColumn, 1, + TAG_DONE); + ActivateGadget(listbrowser_gad, win, NULL); + wait_for_close(win, listbrowser_gad); + + /* Show selected + */ + SetWindowTitles(win, "Show selected, Auto-Fit", (UBYTE *)~0); + SetGadgetAttrs(listbrowser_gad, win, NULL, + LISTBROWSER_ShowSelected, TRUE, + LISTBROWSER_AutoFit, TRUE, + LISTBROWSER_HorizontalProp, TRUE, + TAG_DONE); + wait_for_close(win, listbrowser_gad); + + /* Multi-select + */ + SetWindowTitles(win, "Multi-select, Virtual Width of 500", (UBYTE *)~0); + SetGadgetAttrs(listbrowser_gad, win, NULL, + LISTBROWSER_MultiSelect, TRUE, + LISTBROWSER_VirtualWidth, 500, + LISTBROWSER_AutoFit, FALSE, + TAG_DONE); + wait_for_close(win, listbrowser_gad); + + /* Detach the list. + */ + SetWindowTitles(win, "Detached list", (UBYTE *)~0); + SetGadgetAttrs(listbrowser_gad, win, NULL, + LISTBROWSER_MultiSelect, FALSE, + LISTBROWSER_Labels, ~0, + TAG_DONE); + wait_for_close(win, listbrowser_gad); + + /* No separators, no title, 1 column. + */ + SetWindowTitles(win, "No separators, no title, 1 column.", (UBYTE *)~0); + SetGadgetAttrs(listbrowser_gad, win, NULL, + LISTBROWSER_Labels, (ULONG)&label_list, + LISTBROWSER_ColumnInfo, (ULONG)&fancy_ci, + LISTBROWSER_Separators, FALSE, + LISTBROWSER_ColumnTitles, FALSE, + LISTBROWSER_AutoFit, TRUE, + LISTBROWSER_VirtualWidth, 0, + TAG_DONE); + wait_for_close(win, listbrowser_gad); + + /* Fancy list. + */ + PutStr("Creating Label class\n"); + if (LabelBase = OpenClass("images/label.image", 0)) + { + struct List fancy_list; + struct Image *image1, *image2; + struct Node *node1, *node2; + + NewList(&fancy_list); + + PutStr("Creating Label object\n"); + if (image1 = (struct Image *)NewObject(LABEL_GetClass(), NULL, + IA_FGPen, 1, + IA_BGPen, 2, + IA_Font, (ULONG)&helvetica24b, + LABEL_Text, (ULONG)"C", + IA_Font, (ULONG)×18i, + LABEL_Text, (ULONG)"lass ", + IA_Font, (ULONG)&helvetica24b, + LABEL_Text, (ULONG)"A", + IA_Font, (ULONG)×18i, + LABEL_Text, (ULONG)"ct", + TAG_END)) + { + PutStr("Creating Label object\n"); + if (image2 = (struct Image *)NewObject(LABEL_GetClass(), NULL, + IA_FGPen, 2, + IA_BGPen, 0, + IA_Font, (ULONG)×18, + LABEL_Text, (ULONG)"By Phantom Development", + TAG_END)) + { + if (node1 = AllocListBrowserNode(1, + LBNA_Column, 0, + LBNCA_Image, (ULONG)image1, + LBNCA_Justification, LCJ_CENTRE, + TAG_DONE)) + { + AddTail(&fancy_list, node1); + + if (node2 = AllocListBrowserNode(1, + LBNA_Column, 0, + LBNCA_Image, (ULONG)image2, + LBNCA_Justification, LCJ_CENTRE, + TAG_DONE)) + { + AddTail(&fancy_list, node2); + + /* Set listbrowser. + */ + SetWindowTitles(win, "Fancy", (UBYTE *)~0); + SetGadgetAttrs(listbrowser_gad, win, NULL, + LISTBROWSER_ColumnInfo, &fancy_ci, + LISTBROWSER_Labels, (ULONG)&fancy_list, + LISTBROWSER_AutoFit, TRUE, + TAG_DONE); + + wait_for_close(win, listbrowser_gad); + + SetGadgetAttrs(listbrowser_gad, win, NULL, + LISTBROWSER_Labels, ~0, + TAG_DONE); + + FreeListBrowserNode(node2); + } + FreeListBrowserNode(node1); + } + DisposeObject(image2); + } + DisposeObject(image1); + } + + PutStr("Closing Label class\n"); + CloseLibrary((struct Library *)LabelBase); + } + else + PutStr("ERROR: Couldn't create Label class\n"); + + /* Read-only + */ + SetWindowTitles(win, "Read-only", (UBYTE *)~0); + SetGadgetAttrs(listbrowser_gad, win, NULL, + LISTBROWSER_ColumnInfo, (ULONG)&ci, + LISTBROWSER_Labels, (ULONG)&label_list, + LISTBROWSER_AutoFit, TRUE, + LISTBROWSER_Selected, -1, + GA_ReadOnly, TRUE, + TAG_DONE); + wait_for_close(win, listbrowser_gad); + + /* Disabled. + */ + SetWindowTitles(win, "Disabled", (UBYTE *)~0); + SetGadgetAttrs(listbrowser_gad, win, NULL, + GA_Disabled, TRUE, + GA_ReadOnly, FALSE, + TAG_DONE); + wait_for_close(win, listbrowser_gad); + + /* No scrollbars, borderless. + */ + SetWindowTitles(win, "No scrollbars, borderless", (UBYTE *)~0); + SetGadgetAttrs(listbrowser_gad, win, NULL, + GA_Disabled, FALSE, + GA_Top, win->BorderTop, + GA_Left, 2, + GA_RelWidth, -18, + GA_RelHeight, -(win->BorderTop + win->BorderBottom), + LISTBROWSER_Borderless, TRUE, + LISTBROWSER_HorizontalProp, FALSE, + LISTBROWSER_VerticalProp, FALSE, + TAG_DONE); + wait_for_close(win, listbrowser_gad); + + RemoveGList(win, listbrowser_gad, -1); + DisposeObject(listbrowser_gad); + } + else + PutStr("ERROR: Couldn't create ListBrowser gadgetn"); + + free_list(&label_list); + + PutStr("Freeing ListBrowser class\n"); + CloseLibrary((struct Library *)ListBrowserBase); + } + else + PutStr("ERROR: Couldn't create ListBrowser class\n"); + + CloseWindow(win); + } + else + PutStr("ERROR: Couldn't open window\n"); + + UnlockPubScreen(0, screen); + } + else + PutStr("ERROR: Couldn't lock public screen\n"); +} + + +/* Function to make a List of ListBrowserNodes from a couple of arrays. + * Just to demonstrate things, we make make three columns, 2 with text + * (the same text) and the third with numbers. + */ +BOOL make_list(struct List *list, UBYTE **labels1, LONG *labels2) +{ + struct Node *node; + WORD i = 0; + + NewList(list); + + while (*labels1) + { + if (node = AllocListBrowserNode(3, + LBNA_Column, 0, + LBNCA_CopyText, TRUE, + LBNCA_Text, *labels1, + LBNCA_MaxChars, 40, + LBNCA_Editable, TRUE, + LBNA_Column, 1, + LBNCA_CopyText, TRUE, + LBNCA_Text, *labels1, + LBNCA_MaxChars, 40, + LBNCA_Editable, TRUE, + LBNA_Column, 2, + LBNCA_Integer, &labels2[i], + LBNCA_Justification, LCJ_RIGHT, + TAG_DONE)) + { + AddTail(list, node); + } + else + break; + + labels1++; + i++; + } + return(TRUE); +} + + +/* Function to free an Exec List of ListBrowser nodes. + */ +VOID free_list(struct List *list) +{ + struct Node *node, *nextnode; + + node = list->lh_Head; + while (nextnode = node->ln_Succ) + { + FreeListBrowserNode(node); + node = nextnode; + } + NewList(list); +} + + +/* Function to open a BOOPSI class library. + */ +struct ClassLibrary * OpenClass(STRPTR name, ULONG version) +{ + struct Library *retval; + UBYTE buffer[256]; + + if ((retval = OpenLibrary(name, version)) == NULL) + { + sprintf (buffer, ":classes/%s", name); + if ((retval = OpenLibrary(buffer, version)) == NULL) + { + sprintf(buffer, "classes/%s", name); + retval = OpenLibrary(buffer, version); + } + } + return((struct ClassLibrary *)retval); +} + +/* Wait for the window close gadget to be pressed. + */ +VOID wait_for_close(struct Window *win, struct Gadget *listbrowser_gad) +{ + BOOL ok = TRUE; + + /* Just wait around until the close gadget is pressed. + */ + while (ok) + { + struct Gadget *gadget; + struct IntuiMessage *imsg; + + WaitPort(win->UserPort); + while (imsg = (struct IntuiMessage *)GetMsg(win->UserPort)) + { + switch (imsg->Class) + { + case IDCMP_CLOSEWINDOW: + ok = FALSE; + break; + + case IDCMP_RAWKEY: + if (!(imsg->Code & IECODE_UP_PREFIX)) + { + switch (imsg->Code) + { + case RAWKEY_CURSORUP: + if (imsg->Qualifier & QUALIFIER_CTRL) + SetGadgetAttrs(listbrowser_gad, win, NULL, + LISTBROWSER_Position, LBP_TOP, + TAG_DONE); + if (imsg->Qualifier & QUALIFIER_SHIFT) + SetGadgetAttrs(listbrowser_gad, win, NULL, + LISTBROWSER_Position, LBP_PAGEUP, + TAG_DONE); + else + SetGadgetAttrs(listbrowser_gad, win, NULL, + LISTBROWSER_Position, LBP_LINEUP, + TAG_DONE); + break; + + case RAWKEY_CURSORDOWN: + if (imsg->Qualifier & QUALIFIER_CTRL) + SetGadgetAttrs(listbrowser_gad, win, NULL, + LISTBROWSER_Position, LBP_BOTTOM, + TAG_DONE); + if (imsg->Qualifier & QUALIFIER_SHIFT) + SetGadgetAttrs(listbrowser_gad, win, NULL, + LISTBROWSER_Position, LBP_PAGEDOWN, + TAG_DONE); + else + SetGadgetAttrs(listbrowser_gad, win, NULL, + LISTBROWSER_Position, LBP_LINEDOWN, + TAG_DONE); + break; + + default: + break; + } + } + break; + + case IDCMP_GADGETUP: + gadget = (struct Gadget *)imsg->IAddress; + Printf("Gadget: %ld Code: %ld\n", + (LONG)gadget->GadgetID, (LONG)imsg->Code); + + break; + + default: + break; + } + ReplyMsg((struct Message *)imsg); + } + } +} diff --git a/Examples/ListBrowser/ListBrowserExample.c.info b/Examples/ListBrowser/ListBrowserExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..6a16c2af298e9b38a14ff33a48b98f16dc9878ab GIT binary patch literal 300 zcmZWiy9&ZE6g{!kfKnwLa-;wX!`V`%iNJB}}#N^P>=9Rg+qTXN3=Hul!UX^|B2icuf AkN^Mx literal 0 HcmV?d00001 diff --git a/Examples/ListBrowser/ListBrowserExample.info b/Examples/ListBrowser/ListBrowserExample.info new file mode 100644 index 0000000000000000000000000000000000000000..221cb3ab8b32a4615feef9971037091daadcaa15 GIT binary patch literal 450 zcmaDXz`)1=0!0i$3}y`C3@kuCBm2ZO0k9}K!N`m(k_Y6lAPa!mW(;BsObl$#6p+=z zl<`27Lun2O%_IS&Ihq)lB0#h_lwJg-CqZbw#Sj{30$4qa25JHGxlXFg0_o?Os(EP# zkmj2DR0w1)Pp8Ht5Fex-Bya!!|NkElK2Q=Y4x;OU!vFvOVE|MAe=uAP1%UtrT@RG` a3gjm+Ffg*xk#+z&5o8~ldm4bkAOHX#M@+W> literal 0 HcmV?d00001 diff --git a/Examples/Palette.info b/Examples/Palette.info new file mode 100644 index 0000000000000000000000000000000000000000..8214eb58cb93fc693e156c02c64c23b9a447a183 GIT binary patch literal 628 zcmZvZze>YU6vn@s#H50#IEj-;Cnu?BaY|<=5tI(%BZ#A0^8mhrxMYxmn?omYsGFmTNil`>=iHoiXhNM;Ej!j8t=hfl5UsV@K{nbi0VNf!mHJcR`;PXFh+K o1*$vFQq`+x-jn`>74@rse-&4gyWre&w+oWHAghmsTW2>ge_^k^4FCWD literal 0 HcmV?d00001 diff --git a/Examples/Palette/PaletteExample b/Examples/Palette/PaletteExample new file mode 100644 index 0000000000000000000000000000000000000000..4b99b04c4ac1ad7b86d1203673a5034f52b71774 GIT binary patch literal 5864 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Function prototypes. + */ +struct ClassLibrary * OpenClass(STRPTR, ULONG); + +/* Global variables. + */ +struct ClassLibrary *PaletteBase; +struct Gadget *palette_gad; + + +/* This is the start of our programme. + */ +main() +{ + struct Screen *screen = NULL; + + /* We'll just open up on the Workbench screen, and use its screen font. + */ + if (screen = LockPubScreen("Workbench")) + { + struct Window *win = NULL; + + /* Open the window, note how we size the window to perfectly fit + * all the gadgets. + */ + if (win = OpenWindowTags(NULL, + WA_Left, 0, + WA_Top, screen->Font->ta_YSize + 3, + WA_Width, 200, + WA_Height, (screen->WBorTop) + 5 + screen->Font->ta_YSize + 100, + WA_IDCMP, IDCMP_GADGETUP | IDCMP_REFRESHWINDOW | + IDCMP_CLOSEWINDOW | IDCMP_GADGETDOWN, + WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | + WFLG_SIZEGADGET | WFLG_ACTIVATE | WFLG_SMART_REFRESH, + WA_Title, "Palette Demo", + WA_MinWidth, 60, + WA_MinHeight, (screen->WBorTop) + 5 + screen->Font->ta_YSize + 60, + WA_MaxWidth, -1, + WA_MaxHeight, -1, + TAG_DONE)) + { + PutStr("Creating Palette class\n"); + if (PaletteBase = OpenClass("gadgets/palette.gadget", 0)) + { + PutStr("Creating Palette gadget 1\n"); + if (palette_gad = (struct Gadget *)NewObject(PALETTE_GetClass(), NULL, + GA_ID, 2, + GA_Top, (win->BorderTop) + 5, + GA_Left, 10, + GA_RelWidth, -36, + GA_RelHeight, -(win->BorderTop + win->BorderBottom + 10), + GA_RelVerify, TRUE, + PALETTE_NumColours, 1 << screen->RastPort.BitMap->Depth, + TAG_END)) + { + struct IntuiMessage *imsg; + BOOL ok = TRUE; + + AddGList(win, palette_gad, -1, -1, NULL); + RefreshGList(palette_gad, win, NULL, -1); + + /* Just wait around until the close gadget is pressed. + */ + while (ok) + { + struct Gadget *gadget; + + WaitPort(win->UserPort); + while (imsg = (struct IntuiMessage *)GetMsg(win->UserPort)) + { + switch(imsg->Class) + { + case IDCMP_CLOSEWINDOW: + ok = FALSE; + break; + + case IDCMP_GADGETUP: + gadget = (struct Gadget *)imsg->IAddress; + Printf("Gadget: %ld Code: %ld\n", + (LONG)gadget->GadgetID, (LONG)imsg->Code ); + + break; + + default: + break; + } + ReplyMsg((struct Message *)imsg); + } + } + RemoveGList(win, palette_gad, -1); + DisposeObject(palette_gad); + } + else + PutStr("ERROR: Couldn't create Palette gadget\n"); + + /* Free the class. + */ + PutStr("Freeing Palette class\n"); + CloseLibrary((struct Library *)PaletteBase); + } + else + PutStr("ERROR: Couldn't create Palette class\n"); + + CloseWindow(win); + } + else + PutStr("ERROR: Couldn't open window\n"); + + UnlockPubScreen(0, screen); + } + else + PutStr("ERROR: Couldn't lock public screen\n"); +} + + +/* Open a class library. + */ +struct ClassLibrary * OpenClass(STRPTR name, ULONG version) +{ + struct Library *retval; + UBYTE buffer[256]; + + if ((retval = OpenLibrary(name, version)) == NULL) + { + sprintf (buffer, ":classes/%s", name); + if ((retval = OpenLibrary(buffer, version)) == NULL) + { + sprintf(buffer, "classes/%s", name); + retval = OpenLibrary(buffer, version); + } + } + return((struct ClassLibrary *)retval); +} diff --git a/Examples/Palette/PaletteExample.c.info b/Examples/Palette/PaletteExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..b76ff4581e4922b3609f26821b26d98c1225a533 GIT binary patch literal 300 zcmaDXz`)1=0t*?07-SeE7+8UPM)rwq8DLR#f{}%RePXQzd;jtVpwwI-WV2*g}(>nKkR4VzwnoV{lh*6_6xuHZ-3Y$-+bZU{r^Dv z|Aqfqhd=D$XTI?77DWDk#O)9J8{{wi&#niX^FJP99>`pv@m#*8IVG88nW^O<%UA$L CoK^Aw literal 0 HcmV?d00001 diff --git a/Examples/Palette/PaletteExample.info b/Examples/Palette/PaletteExample.info new file mode 100644 index 0000000000000000000000000000000000000000..4cb386fb9c8109618a66e35f42de5c6be8d096e6 GIT binary patch literal 626 zcmaDXz`)1=0%8n83}y`C3@kuCBm2a*0I(=J!N`m(A_U~HAPa!mW#q zl<`2tU~~_VU;lvlKS}ie{}A;bp!!InnSr_?`aw>Cxr2wH9xVQc0Zje>!EiMc1Onjn zb+AML!!-s5{@?#dq8XT>>i?5LUjc_0!W}SoHGsuwM=<`cfB*X*0|N>417@IlLI42r Cke=ND literal 0 HcmV?d00001 diff --git a/Examples/PenMap.info b/Examples/PenMap.info new file mode 100644 index 0000000000000000000000000000000000000000..b40155ef97688db1e4932dacdccf7fc396d09c8b GIT binary patch literal 628 zcmZvYze>YU6vn@#F}H%KbSh3Fog73eTAb3kgSfbfqqE`zG?T7o_W^2g^Z|ScA)A6u z4h{}AL+SN?-%V_W9LW8h^X2^EoR3Wepnao*W2_@a3xUZlbCccd>red&!lzpJ<^0HG zx9|U2AAS7b#9AsLI%AXF?a?=j>jzSHfsu7qPOel=4-rr9Ta_YiFx7ryO;Lol*mGR9 z+Ynzp+we5@MLH9EF3Z=e3=w?4xese^qPzlr=`Ie+cp&B&*cslexa;|AJqsk#nV929 zJ-be$6}1TsZn^X0RrAhUQ`$2Q&uHfutLGd;wTeo{j=Y8FZV{(LcO6gOf-x;lef=U0 p)pwdE>bKl^NBRUSns=%yK2_e5yao53xm%FD1zCM;+_-yy;14$ayo3M% literal 0 HcmV?d00001 diff --git a/Examples/PenMap/PenMapExample b/Examples/PenMap/PenMapExample new file mode 100644 index 0000000000000000000000000000000000000000..e628c9c879b951bb149a9afc1e67ea10db40ecdd GIT binary patch literal 6064 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 +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +struct ClassLibrary *PenMapBase; + +struct Window *win; +struct Image *image_object; + +ULONG image_object_palette[] = +{ + 2, + 0x00000000, 0x00000000, 0x00000000, + 0xEEEEEEEE, 0xDDDDDDDD, 0x00000000 +}; + +UBYTE happy_data[] = +{ + 0,16, 0,14, + 0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0, + 0,0,0,1,1,2,2,2,2,2,2,1,1,0,0,0, + 0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0, + 0,1,2,2,2,2,2,2,2,2,2,2,2,2,1,0, + 0,1,2,2,2,1,1,2,2,1,1,2,2,2,1,0, + 1,2,2,2,2,1,1,2,2,1,1,2,2,2,2,1, + 1,2,2,2,2,1,1,2,2,1,1,2,2,2,2,1, + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, + 0,1,2,2,2,1,2,2,2,2,1,2,2,2,1,0, + 0,1,2,2,2,2,1,1,1,1,2,2,2,2,1,0, + 0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0, + 0,0,0,1,1,2,2,2,2,2,2,1,1,0,0,0, + 0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0 +}; + +UBYTE scared_data[] = +{ + 0,16, 0,14, + 0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0, + 0,0,0,1,1,2,2,2,2,2,2,1,1,0,0,0, + 0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0, + 0,1,2,2,2,1,1,2,2,1,1,2,2,2,1,0, + 0,1,2,2,1,2,2,2,2,2,2,1,2,2,1,0, + 1,2,2,2,2,1,1,2,2,1,1,2,2,2,2,1, + 1,2,2,2,2,1,1,2,2,1,1,2,2,2,2,1, + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, + 0,1,2,2,2,2,1,1,1,1,2,2,2,2,1,0, + 0,1,2,2,2,1,1,1,1,1,1,2,2,2,1,0, + 0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0, + 0,0,0,1,1,2,2,2,2,2,2,1,1,0,0,0, + 0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0 +}; + + +/* Try opening the class library from a number of common places + */ +struct ClassLibrary *OpenClass (STRPTR name, ULONG version) +{ + struct ExecBase *SysBase = (*((struct ExecBase **) 4)); + struct Library *retval; + UBYTE buffer[256]; + + if ((retval = OpenLibrary (name, version)) == NULL) + { + sprintf (buffer, "SYS:Classes/%s", name); + if ((retval = OpenLibrary (buffer, version)) == NULL) + { + sprintf (buffer, "Classes/%s", name); + retval = OpenLibrary (buffer, version); + } + } + return (struct ClassLibrary *) retval; +} + +void main (void) +{ + struct IntuiMessage *msg; + BOOL done = FALSE; + + win = OpenWindowTags (NULL, + WA_Flags, WFLG_DEPTHGADGET | WFLG_DRAGBAR | + WFLG_CLOSEGADGET | WFLG_SIZEGADGET, + WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_NEWSIZE, + WA_InnerWidth, 40, + WA_InnerHeight, 30, + WA_MaxWidth,-1, + WA_MaxHeight,-1, + WA_Activate, TRUE, + WA_SmartRefresh, TRUE, + WA_Title, "ClassAct penmap.image Demo", + TAG_DONE); + + if (win) + { + if (PenMapBase = OpenClass("images/penmap.image", 40L)) + { + image_object = (struct Image *)NewObject (NULL, "penmap.image", + PENMAP_RenderData, happy_data, + PENMAP_SelectData, scared_data, + PENMAP_Palette, image_object_palette, + PENMAP_Screen, win->WScreen, + TAG_DONE); + if (image_object) + { + SetAttrs(image_object, + IA_Width, win->Width - (win->BorderLeft + win->BorderRight + 10L), + IA_Height, win->Height - (win->BorderTop + win->BorderBottom + 10L), + TAG_DONE); + DrawImageState (win->RPort, + image_object, + win->BorderLeft + 5L, + win->BorderTop + 5L, + IDS_SELECTED, NULL); + + while (!done) + { + WaitPort (win->UserPort); + while (msg = (struct IntuiMessage *)GetMsg (win->UserPort)) + { + if (msg->Class == IDCMP_CLOSEWINDOW) + done = TRUE; + else if (msg->Class == IDCMP_NEWSIZE) + { + SetAttrs(image_object, + IA_Width, win->Width - (win->BorderLeft + win->BorderRight + 10L), + IA_Height, win->Height - (win->BorderTop + win->BorderBottom + 10L), + TAG_DONE); + SetAPen(win->RPort,0); + RectFill(win->RPort, + win->BorderLeft, + win->BorderTop, + win->BorderLeft + win->Width - (win->BorderRight + win->BorderLeft + 1), + win->BorderTop + win->Height - (win->BorderTop + win->BorderBottom + 1)); + DrawImageState(win->RPort, + image_object, + win->BorderLeft + 5L, + win->BorderTop + 5L, + IDS_SELECTED, + NULL); + } + ReplyMsg ((struct Message *)msg); + } + } + } + } + } + if (image_object) + DisposeObject (image_object); + if (win) + CloseWindow (win); + if (PenMapBase) + CloseLibrary ((struct Library *)PenMapBase); +} diff --git a/Examples/PenMap/PenMapExample.c.info b/Examples/PenMap/PenMapExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..979c5f4034d6d12761a3f6e81124bead108becc7 GIT binary patch literal 300 zcmaDXz`)1=0$mJ33^EK746HytBm2~)8DLR#f{}%ReWKC?_Wq>-K&dt$WU`9v*S-cG!zj#lX#Q1I%JO01;r$f-snFLHQ9724i*tSb#AC zA`T+||NsAC|Ns9N{{G+pVgG~r3x5yDf7s8!f8j3!`-goD>=%CX-~O;izWKtx`~QLT z{|o=K4u9Cg&wSzEEr|U8h}$3bH^^W3pIr|&=YKrJJdn9SVzmazZ; Df{Ru~ literal 0 HcmV?d00001 diff --git a/Examples/PenMap/PenMapExample.info b/Examples/PenMap/PenMapExample.info new file mode 100644 index 0000000000000000000000000000000000000000..d73fd13c9a3d259734fd440fa89032675e9eadc6 GIT binary patch literal 450 zcma)%F$%&!5Ji79m}X>`fO?bETG?2n@jUJU0!d?O>p3Q+5HL+3*jRW83n9)X8wp~- zS=hJp=QA_=(C}bmi4YN1@Fn+x<9Xex-D|_uDXzkiv>hDR{!lD2v~#>#@zC?jdREA!GqA*Iou4VM zYIW$i)-yks-81h_X-_!0rrltonoEpSDz2G0au=f8MUs!)c09QY`m`kX`M-Iny3;&U kz17V7(jT#=eq&|vXyR7nE;#qx?SkYk$mV6?&e;P5e^gn#b^rhX literal 0 HcmV?d00001 diff --git a/Examples/PrintReq/PrintReqExample b/Examples/PrintReq/PrintReqExample new file mode 100644 index 0000000000000000000000000000000000000000..7577912741f929ec02b2c2cb6fa8436413a698e7 GIT binary patch literal 8552 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 Z!VdtiKh%`HPvvKTybok_Ilhz+{}-6xc$feH literal 0 HcmV?d00001 diff --git a/Examples/PrintReq/PrintReqExample.c b/Examples/PrintReq/PrintReqExample.c new file mode 100644 index 0000000..d4b66e3 --- /dev/null +++ b/Examples/PrintReq/PrintReqExample.c @@ -0,0 +1,519 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { GAD_FROM, GAD_TO, GAD_COPIES, GAD_COLLATE }; + +LONG easy_req(struct Window *, char *, char *, char *, ...); +VOID draw_collate(struct Window *, BOOL); + +/* Image for the no-collate image. + */ +__chip UWORD nocollate_data[450] = +{ + /* Plane 0 */ + 0x0003, 0xFFFF, 0xC000, 0x07FF, 0xFF80, + 0x0002, 0x0000, 0x4000, 0x0400, 0x0080, + 0x0002, 0x0002, 0x6000, 0x0400, 0x04C0, + 0x0002, 0x5806, 0x6000, 0x04B0, 0x0CC0, + 0x01FF, 0xFFE2, 0x6003, 0xFFFF, 0xC4C0, + 0x0100, 0x0027, 0x6002, 0x0000, 0x4EC0, + 0x0100, 0x0330, 0x6002, 0x0006, 0x60C0, + 0x012E, 0x00B4, 0x6002, 0x5C01, 0x68C0, + 0xFFFF, 0xF130, 0x61FF, 0xFFE2, 0x60C0, + 0x8000, 0x13B0, 0x6100, 0x0027, 0x60C0, + 0x8001, 0x9830, 0x6100, 0x0330, 0x60C0, + 0x9700, 0x5E30, 0x612E, 0x00BC, 0x60C0, + 0x8000, 0x9830, 0x6100, 0x0130, 0x60C0, + 0x9400, 0x5834, 0x6128, 0x00B0, 0x68C0, + 0x8001, 0x9830, 0x6100, 0x0330, 0x60C0, + 0x8B5F, 0x1830, 0x6116, 0xBE30, 0x60C0, + 0x8000, 0x1830, 0x6100, 0x0030, 0x60C0, + 0x97B6, 0x1E30, 0x612F, 0x6C3C, 0x60C0, + 0x8000, 0x1830, 0x6100, 0x0030, 0x60C0, + 0x8BA8, 0x1830, 0x6117, 0x5030, 0x60C0, + 0x8000, 0x183F, 0xE100, 0x0030, 0x7FC0, + 0x9BF7, 0x183F, 0xE137, 0xEE30, 0x7FC0, + 0x8000, 0x1830, 0x0100, 0x0030, 0x6000, + 0x9400, 0x1830, 0x0128, 0x0030, 0x6000, + 0x8000, 0x1FF0, 0x0100, 0x003F, 0xE000, + 0x9B00, 0x1FF0, 0x0136, 0x003F, 0xE000, + 0x8000, 0x1800, 0x0100, 0x0030, 0x0000, + 0x8000, 0x1800, 0x0100, 0x0030, 0x0000, + 0xFFFF, 0xF800, 0x01FF, 0xFFF0, 0x0000, + 0x3FFF, 0xF800, 0x007F, 0xFFF0, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0001, 0xFFFF, 0x8000, 0x03FF, 0xFF00, + 0x0001, 0xFFFD, 0x8000, 0x03FF, 0xFB00, + 0x0001, 0xDBF9, 0x8000, 0x03B7, 0xF300, + 0x0000, 0x001D, 0x8000, 0x0000, 0x3B00, + 0x00FF, 0xFFD8, 0x8001, 0xFFFF, 0xB100, + 0x00FF, 0xFCCF, 0x8001, 0xFFF9, 0x9F00, + 0x00ED, 0xFF47, 0x8001, 0xDBFE, 0x8F00, + 0x0000, 0x0ECF, 0x8000, 0x001D, 0x9F00, + 0x7FFF, 0xEC47, 0x80FF, 0xFFD8, 0x8F00, + 0x7FFE, 0x67CF, 0x80FF, 0xFCCF, 0x9F00, + 0x76FF, 0xA7CF, 0x80ED, 0xFF4F, 0x9F00, + 0x7FFF, 0x67CF, 0x80FF, 0xFECF, 0x9F00, + 0x77FF, 0xA3C7, 0x80EF, 0xFF47, 0x8F00, + 0x7FFE, 0x67CF, 0x80FF, 0xFCCF, 0x9F00, + 0x6BDF, 0xE7CF, 0x80D7, 0xBFCF, 0x9F00, + 0x7FFF, 0xE7CF, 0x80FF, 0xFFCF, 0x9F00, + 0x76F5, 0xE7CF, 0x80ED, 0xEBCF, 0x9F00, + 0x7FFF, 0xE7CF, 0x80FF, 0xFFCF, 0x9F00, + 0x6BEF, 0xE7CF, 0x80D7, 0xDFCF, 0x9F00, + 0x7FFF, 0xE7C0, 0x00FF, 0xFFCF, 0x8000, + 0x7AF7, 0xE7C0, 0x00F5, 0xEFCF, 0x8000, + 0x7FFF, 0xE7C0, 0x00FF, 0xFFCF, 0x8000, + 0x77FF, 0xE7C0, 0x00EF, 0xFFCF, 0x8000, + 0x7FFF, 0xE000, 0x00FF, 0xFFC0, 0x0000, + 0x7BFF, 0xE000, 0x00F7, 0xFFC0, 0x0000, + 0x7FFF, 0xE000, 0x00FF, 0xFFC0, 0x0000, + 0x7FFF, 0xE000, 0x00FF, 0xFFC0, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +}; + +struct Image nocollate_image = +{ + 0, 0, 74, 30, 2, &nocollate_data[0], 0x3, 0x0, NULL +}; + +/* Image for the no-collate image. + */ +__chip UWORD collate_data[468] = +{ + /* Plane 0 */ + 0x01FF, 0xFFE0, 0x07FF, 0xFF80, 0x1FFF, 0xFE00, + 0x0100, 0x0020, 0x0400, 0x0080, 0x1000, 0x0200, + 0x0100, 0x0130, 0x0400, 0x0CC0, 0x1000, 0x3300, + 0x012C, 0x0330, 0x04B0, 0x02C0, 0x12C0, 0x0B00, + 0xFFFF, 0xF133, 0xFFFF, 0xC4CF, 0xFFFF, 0x1300, + 0x8000, 0x13B2, 0x0000, 0x4EC8, 0x0001, 0x0B00, + 0x8000, 0x9832, 0x0006, 0x60C8, 0x0019, 0xB300, + 0x9701, 0x9A32, 0x5C01, 0x68C9, 0x7005, 0xA300, + 0x8000, 0x9832, 0x0002, 0x60C8, 0x0009, 0x8300, + 0x9401, 0xD832, 0x5007, 0x60C9, 0x4005, 0x8300, + 0x8000, 0x1832, 0x0000, 0x60C8, 0x0019, 0x8300, + 0x8B5F, 0x1832, 0x2D7C, 0x60C8, 0xB5F1, 0x8300, + 0x8000, 0x1832, 0x0000, 0x60C8, 0x0001, 0x8300, + 0x97B4, 0x1A32, 0x5ED0, 0x68C9, 0x7B41, 0xA300, + 0x8000, 0x1832, 0x0000, 0x60C8, 0x0001, 0x8300, + 0x8BA8, 0x1832, 0x2EA0, 0x60C8, 0xBA81, 0x8300, + 0x8000, 0x1832, 0x0000, 0x60C8, 0x0001, 0x8300, + 0x9BF7, 0x1832, 0x6FDC, 0x60C9, 0xBF71, 0x8300, + 0x8000, 0x1832, 0x0000, 0x60C8, 0x0001, 0x8300, + 0x9400, 0x1832, 0x5000, 0x60C9, 0x4001, 0x8300, + 0x8000, 0x1FF2, 0x0000, 0x7FC8, 0x0001, 0xFF00, + 0x9B00, 0x1FF2, 0x6C00, 0x7FC9, 0xB001, 0xFF00, + 0x8000, 0x1802, 0x0000, 0x6008, 0x0001, 0x8000, + 0x8000, 0x1802, 0x0000, 0x6008, 0x0001, 0x8000, + 0xFFFF, 0xF803, 0xFFFF, 0xE00F, 0xFFFF, 0x8000, + 0x3FFF, 0xF800, 0xFFFF, 0xE003, 0xFFFF, 0x8000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x00FF, 0xFFC0, 0x03FF, 0xFF00, 0x0FFF, 0xFC00, + 0x00FF, 0xFEC0, 0x03FF, 0xF300, 0x0FFF, 0xCC00, + 0x00ED, 0xFCC0, 0x03B7, 0xFD00, 0x0EDF, 0xF400, + 0x0000, 0x0EC0, 0x0000, 0x3B00, 0x0000, 0xEC00, + 0x7FFF, 0xEC41, 0xFFFF, 0xB107, 0xFFFE, 0xF400, + 0x7FFF, 0x67C1, 0xFFF9, 0x9F07, 0xFFE6, 0x4C00, + 0x76FE, 0x63C1, 0xDBFE, 0x8F07, 0x6FFA, 0x3C00, + 0x7FFF, 0x67C1, 0xFFFD, 0x9F07, 0xFFF6, 0x7C00, + 0x77FE, 0x23C1, 0xDFF8, 0x8F07, 0x7FFA, 0x3C00, + 0x7FFF, 0xE7C1, 0xFFFF, 0x9F07, 0xFFE6, 0x7C00, + 0x6BDF, 0xE7C1, 0xAF7F, 0x9F06, 0xBDFE, 0x7C00, + 0x7FFF, 0xE7C1, 0xFFFF, 0x9F07, 0xFFFE, 0x7C00, + 0x76F5, 0xE3C1, 0xDBD7, 0x8F07, 0x6F5E, 0x3C00, + 0x7FFF, 0xE7C1, 0xFFFF, 0x9F07, 0xFFFE, 0x7C00, + 0x6BEF, 0xE7C1, 0xAFBF, 0x9F06, 0xBEFE, 0x7C00, + 0x7FFF, 0xE7C1, 0xFFFF, 0x9F07, 0xFFFE, 0x7C00, + 0x7AF7, 0xE7C1, 0xEBDF, 0x9F07, 0xAF7E, 0x7C00, + 0x7FFF, 0xE7C1, 0xFFFF, 0x9F07, 0xFFFE, 0x7C00, + 0x77FF, 0xE7C1, 0xDFFF, 0x9F07, 0x7FFE, 0x7C00, + 0x7FFF, 0xE001, 0xFFFF, 0x8007, 0xFFFE, 0x0000, + 0x7BFF, 0xE001, 0xEFFF, 0x8007, 0xBFFE, 0x0000, + 0x7FFF, 0xE001, 0xFFFF, 0x8007, 0xFFFE, 0x0000, + 0x7FFF, 0xE001, 0xFFFF, 0x8007, 0xFFFE, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, +}; + +struct Image collate_image = +{ + 0, 0, 88, 26, 2, &collate_data[0], 0x3, 0x0, NULL +}; + +/* Here's where it all starts. + */ +main() +{ + struct Screen *screen = NULL; + + if (!ButtonBase) return(20); + + /* We'll just open up on the default public screen, and use its screen font. + */ + if (screen = LockPubScreen(NULL)) + { + struct DrawInfo *drinfo = GetScreenDrawInfo(screen); + struct List *radio_list; + struct Image *l, *collate_limage, *nocollate_limage; + struct Gadget *collate_gad, *nocollate_gad; + Object *layout, *collate_layout; + UWORD mapping[4]; + + /* Setup a simple mapping. + */ + mapping[0] = drinfo->dri_Pens[BACKGROUNDPEN]; + mapping[1] = drinfo->dri_Pens[SHADOWPEN]; + mapping[2] = drinfo->dri_Pens[SHINEPEN]; + mapping[3] = drinfo->dri_Pens[FILLPEN]; + + /* Create radio buttons. + */ + radio_list = RadioButtons( "All Pages", + "Odd Pages", + "Even Pages", + "Current Page", + "Range of Pages:", + NULL); + + nocollate_limage = LabelObject, + /* LABEL_Mapping, mapping, */ + LABEL_Image, &nocollate_image, + LabelEnd; + collate_limage = LabelObject, + /* LABEL_Mapping, mapping, */ + LABEL_Image, &collate_image, + LabelEnd; + + if (layout = LayoutObject, + GA_DrawInfo, drinfo, + LAYOUT_DeferLayout, TRUE, /* Layout refreshes done on + * task's context (by the + * window class) */ + LAYOUT_SpaceOuter, TRUE, + LAYOUT_ShrinkWrap, TRUE, + LAYOUT_VertAlignment, LAYOUT_ALIGN_TOP, + LAYOUT_Orientation, LAYOUT_ORIENT_VERT, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ, + LAYOUT_VertAlignment, LAYOUT_ALIGN_CENTER, + LAYOUT_SpaceOuter, TRUE, + + LAYOUT_AddImage, l = LabelObject, + IA_Font, screen->Font, + LABEL_Text, "Driver:", + LabelEnd, + CHILD_MinWidth, l->Width, + CHILD_MinHeight, l->Height, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, ButtonObject, + GA_Text, "EpsonX", + GA_ReadOnly, TRUE, + ButtonEnd, + LayoutEnd, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_VERT, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_BevelStyle, BVS_GROUP, + LAYOUT_Label, "Page Range", + + LAYOUT_AddChild, RadioButtonObject, + GA_DrawInfo, drinfo, + RADIOBUTTON_Labels, radio_list, + RADIOBUTTON_Spacing, 3, + RadioButtonEnd, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ, + LAYOUT_VertAlignment, LAYOUT_ALIGN_CENTER, + + LAYOUT_AddImage, l = LabelObject, + IA_Font, screen->Font, + LABEL_Text, "from:", + LabelEnd, + CHILD_MinWidth, l->Width, + CHILD_MinHeight, l->Height, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, IntegerObject, + INTEGER_Number, 1, + INTEGER_Minimum, 0, + IntegerEnd, + + LAYOUT_AddImage, l = LabelObject, + IA_Font, screen->Font, + LABEL_Text, " to:", + LabelEnd, + CHILD_MinWidth, l->Width, + CHILD_MinHeight, l->Height, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, IntegerObject, + INTEGER_Number, 1, + INTEGER_Minimum, 0, + IntegerEnd, + + LayoutEnd, + LayoutEnd, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_VERT, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_BevelStyle, BVS_GROUP, + LAYOUT_Label, "Copies", + LAYOUT_VertAlignment, LAYOUT_ALIGN_TOP, + LAYOUT_ShrinkWrap, TRUE, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ, + LAYOUT_VertAlignment, LAYOUT_ALIGN_CENTER, + + LAYOUT_AddImage, l = LabelObject, + IA_Font, screen->Font, + LABEL_Text, "Number of Copies:", + LabelEnd, + CHILD_MinWidth, l->Width, + CHILD_MinHeight, l->Height, + CHILD_WeightedWidth, 0, + CHILD_WeightedHeight, 0, + + LAYOUT_AddChild, IntegerObject, + INTEGER_Number, 1, + INTEGER_Minimum, 0, + IntegerEnd, + + LayoutEnd, + + LAYOUT_AddChild, LayoutObject, + LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ, + LAYOUT_VertAlignment, LAYOUT_ALIGN_CENTER, + + LAYOUT_AddChild, CheckBoxObject, + GA_ID, GAD_COLLATE, + GA_Text, "Collate Pages?", + GA_RelVerify, TRUE, + CheckBoxEnd, + CHILD_MinHeight, screen->Font->ta_YSize + 6, + + LayoutEnd, + + LAYOUT_AddChild, collate_layout = LayoutObject, + LAYOUT_HorizAlignment, LAYOUT_ALIGN_CENTER, + LAYOUT_AddChild, collate_gad = ButtonObject, + GA_Image, nocollate_limage, + GA_ReadOnly, TRUE, + ButtonEnd, + CHILD_MinWidth, 100, + CHILD_MinHeight, 40, + CHILD_WeightedWidth, 0, + LayoutEnd, + + LayoutEnd, + LayoutEnd, + CHILD_WeightedHeight, 0, + + LayoutEnd) + { + struct MsgPort *app_port; + Object *window_obj; + + /* Create a message port for App* messages. This is needed for + * iconification. We're being a touch naughty by not checking + * the return code, but that just means that iconification won't + * work, nothing really bad will happen. + */ + app_port = CreateMsgPort(); + + /* Create the window object. + */ + if (window_obj = WindowObject, + WA_Left, 0, + WA_Top, screen->Font->ta_YSize + 3, + WA_CustomScreen, screen, + WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW, + WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | + WFLG_SIZEGADGET | WFLG_ACTIVATE | WFLG_SMART_REFRESH, + WA_Title, "Print Requester example", + WA_NewLookMenus, TRUE, + WINDOW_ParentGroup, layout, + WINDOW_IconifyGadget, TRUE, + WINDOW_Icon, GetDiskObject("PROGDIR:PrintReq"), + WINDOW_IconTitle, "PrintReq", + WINDOW_AppPort, app_port, + WINDOW_LockHeight, TRUE, + TAG_DONE)) + { + struct Window *win; + + /* Open the window. + */ + if (win = (struct Window *)CA_OpenWindow(window_obj)) + { + ULONG signal; + BOOL ok = TRUE, collate = FALSE; + + /* Draw the collate image. + */ + /* draw_collate(win, collate); */ + + /* Obtain the window wait signal mask. + */ + GetAttr(WINDOW_SigMask, window_obj, &signal); + + /* Input Event Loop + */ + while (ok) + { + ULONG result; + + Wait(signal | (1L << app_port->mp_SigBit)); + + /* CA_HandleInput() returns the gadget ID of a clicked + * gadget, or one of several pre-defined values. For + * this demo, we're only actually interested in a + * close window and a couple of gadget clicks. + */ + while ((result = CA_HandleInput(window_obj, NULL)) != WMHI_LASTMSG) + { + switch(result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + ok = FALSE; + break; + + case WMHI_GADGETUP: + switch (result & WMHI_GADGETMASK) + { + case GAD_COLLATE: + collate = !collate; + if (collate) + { + SetGadgetAttrs(collate_gad, win, NULL, + GA_Image, collate_limage, + TAG_DONE); + } + else + { + SetGadgetAttrs(collate_gad, win, NULL, + GA_Image, nocollate_limage, + TAG_DONE); + } + RethinkLayout(collate_layout, win, NULL, TRUE); + break; + + default: + break; + } + break; + + case WMHI_ICONIFY: + if (CA_Iconify(window_obj)) + win = NULL; + break; + + case WMHI_UNICONIFY: + win = CA_OpenWindow(window_obj); + break; + + default: + break; + } + } + } + } + else + easy_req(NULL, "PrintReq failed to start\nCouldn't open window", "Quit", ""); + + /* Disposing of the window object will also close the + * window if it is already opened and it will dispose of + * all objects attached to it. + */ + DisposeObject(window_obj); + } + else + easy_req(NULL, "PrintReq failed to start\nCouldn't create window", "Quit", ""); + + /* Lose the App* message port. + */ + if (app_port) + DeleteMsgPort(app_port); + } + else + easy_req(NULL, "PrintReq failed to start\nCouldn't create layout", "Quit", ""); + + /* Get rid of our images. + */ + if (collate_limage) + DisposeObject(collate_limage); + if (nocollate_limage) + DisposeObject(nocollate_limage); + + if (radio_list) + FreeRadioButtons(radio_list); + + if (drinfo) + FreeScreenDrawInfo(screen, drinfo); + + UnlockPubScreen(0, screen); + } + else + easy_req(NULL, "PrintReq failed to start\nCouldn't lock destination screen", "Quit", ""); + + exit(0); +} + +/* Do an easy requester. + */ +LONG easy_req(struct Window *win, char *reqtext, char *reqgads, char *reqargs, +...) +{ + struct EasyStruct general_es = + { + sizeof(struct EasyStruct), + 0, + "SBGen", + NULL, + NULL + }; + + general_es.es_TextFormat = reqtext; + general_es.es_GadgetFormat = reqgads; + + return(EasyRequestArgs(win, &general_es, NULL, &reqargs)); +} diff --git a/Examples/PrintReq/PrintReqExample.c.info b/Examples/PrintReq/PrintReqExample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..9f0c308c77522a57a82dfe75f6e6c116c1210526 GIT binary patch literal 300 zcmaDXz`)1=0@E3U7-SeE7+8UPM)oDXKft2s1S1Or`80Hr1aF$+S8-UBdO zhC!TxiGlf%1~Wnm$l`6-0Os=^fC%$KC{Xse29F|J16t6uYFUsc2zLtcD3 zM~|E!l_hsc3hz)`=ImcR;JnMgyGTq3A1e8qwDus^hjRe=1ae0xoVBS{hmM0`zs=j! z0ERboYJxexrKarHsqrL6rxxysM2{GoDw5?P|NIPA&9v52*#%*0rW4<>mSdckjC5v2=H^VBB^)HIbZq(JDtCI4H!ky~LZN6BkIxEjNHba5 Ht3b;SB;A$O literal 0 HcmV?d00001 diff --git a/Examples/RadioButton.info b/Examples/RadioButton.info new file mode 100644 index 0000000000000000000000000000000000000000..7145b3aa1de456948a975d6ddcced281d7b3ac7c GIT binary patch literal 628 zcmZvYy-EW?6ot?1uDcOLgH^B+No6GwjaHj7*eHQiijUv}h>(2*OCKObNNsNlUqMJ` zp;-6;agmU5&Y4}a#a@{C=AOAf-22gl0qqypIL9_(gfPkY^3k1%eyW!V9xCp)d-s#^ z{nNkJLB}*Pu$D@I-I4qK;yYR0y^^w9Tv%sC=Tc?&0O8A7SSsQUL+vNF#sJoNmro;gzK44mV% z$WN7*S31-@i|D)d2iaXCUF zg$Oaj_>pvB3WZH*LI_o8AT^>{g(6lVL=k_4iA|wJTZT|Us0_xUfjYz(f_R^Iz8Jzl zs^xd@d*9#R?|a|xdq-sZH|2klH8UbxC*W|*3oXCFLrV;)J7Zs!WweF-)^k17-F5IZl{chvwpYGuqNGH7Pi9!#*K zSgR4k&ecdi`t)Uv0jN zRhfoecqNcvgYe^qqS9=@r!3fK%>m#}3b^4|!!f097gO!ZG;?O!W@1WR)<)$8$ir3e z-`jt|*Ni;vgcTq3E`cOLhEiUwTe@vR9>_>0G(9g3s=oj+o}|`iv;?3fAmWnFnHHxO zEDGDu11~&{kEGx18!lL$ZFx+a923?Rg;dKA(|6dMRj~PT>$R}1S}{m1Q}PyfNi8Kx zF|dVspZ>w2*tm>0PQS5I||S*3Q(`s%|1jVL>+*3m{1aV$Uc*YHh5Bp zYC~*F9sLB66V|gEd3J*mMlC-`k>~p~Jx%Ph0P7~m*EQayMO^qPVNKGZU2&oj)W#xG zJ(S&@-#z2!g5)eBw_)#Q`c*ASHKu-sj4gqM3d=$*I@g&7)t*HsBV*Pxa}nNs*84*J zOvA?%hNdCWM{~KeA5-m{+4yl_j#{2i$!oTq5t;?J{(d1Q)28icA*xvuQHZ_uG!mV1 zt$)s^hvOE`q`tCdr{ax}vT6CwY(LJH8tQsY}DW9jDEA;F5=X_fD+WIV3 z-V@1y+a9AFIxKdJUAsl_0zSBPzbPZM`~`a^pXG<97k`({_f!dJL1@ByVBH{%>Tw=^ z%%FuWR5bF+N%9KGpn1+#i3sYJjMT@yX-DiU~fKA4Xj{g``oEZu=bfiriw^f#+4(%H8=4|3|%wh&D{q0A>(OOa3Pd}Loxz^Q@rj%joB z1v*Bc}9WOb-NetqUvV(cm}3ce!t$*SghajUEd_81sC|L+8oJP9M#}(PH+f3_LzcPptJwy_58cJTa&1P0e0Q3M)!JVr1>B-9;Bz@c`xn4 z^NweR5lPE~EIwZ^0lf;4Bf2*T#QT970e0Ht3Eh z?C8Hmm${A;WjLA@o%Cil&9r*4TTuD8arf}Xi0&i99>jkeUiErPU*J_KH0(D0YK`{# zm-An?_UMbiDf|mYdvRKoA}b~7rTyCt_#vLUr{PeGdyuLUtW9_Fjkx>uSG|coa-SE4ukox-<62}>{@%7= zVdEnj7P(7Np=w3Ny7CnpB;6}&R(9rV*2LZjQfQCSQU8dBlxe8>G4u{u=5c~j_-EyWU9S`zuTVf+<+5sUZRaB-+IO8&^bQDy8{Dv71s`oK8&|9bl|)gE)4u^Ut`<> zu!d*~;3*F=#vy7q$>j186|ctoeT=Obr-+Jh7ZAUqALIQ?4A?4~MdWsa_mH5xx1pmg z`Cf3HxJEqxmcI&gDrs?Fn0!5;Z$eANwj?uM6E}(pi5FuhtDoSVjLolFOSE~}lI79G z<{hWKQ<(?9^OTjVR=xmB^v!m~yiP08$ocdmA~)-j9g7!KEBL=!Q>`qjRs=G?ejXDf xT7p@{Kxf8H6<0G1k#l?r;tLs{ml(4#Dlo)aBJbqHu+~hhxfpCUX8del{|``4vDg3r literal 0 HcmV?d00001 diff --git a/Examples/RadioButton/radioexample.c b/Examples/RadioButton/radioexample.c new file mode 100644 index 0000000..5d24104 --- /dev/null +++ b/Examples/RadioButton/radioexample.c @@ -0,0 +1,231 @@ +;/* RadioButton Example +sc link radioexample.c lib lib:classact.lib +quit +*/ + +/** + ** RadioExample.c -- radiobutton class example. + ** + ** This is a simple example testing some of the capabilities of the + ** radiobutton gadget class. + ** + ** This opens a window with radio button gadget. We will usse ClassAct.lib's + ** RadioButtons() and FreeRadioButtons() utility functions to create the + ** item labels. + ** + **/ + +/* system includes + */ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +/* ClassAct includes + */ +#include + +/* button option texts + */ +UBYTE *radio[] = +{ + "2400", + "9600", + "19200", + "38400", + NULL +}; + +enum +{ + GID_MAIN=0, + GID_RADIOBUTTON, + GID_QUIT, + GID_LAST +}; + +enum +{ + WID_MAIN=0, + WID_LAST +}; + +enum +{ + OID_MAIN=0, + OID_LAST +}; + +#define FMIN 0 +#define FMAX 100 + +int main(void) +{ + struct MsgPort *AppPort; + + struct Window *windows[WID_LAST]; + + struct Gadget *gadgets[GID_LAST]; + + Object *objects[OID_LAST]; + + struct List *radiolist; + + /* make sure our classes opened... */ + if (!ButtonBase || !RadioButtonBase || !WindowBase || !LayoutBase) + return(30); + else if ( AppPort = CreateMsgPort() ) + { + /* Create radiobutton label list. + */ + radiolist = RadioButtons( "1200","2400","4800","9600","19200","38400","57600", NULL ); + + if (radiolist) + { + /* Create the window object. + */ + objects[OID_MAIN] = WindowObject, + WA_ScreenTitle, "ClassAct Release 2.0", + WA_Title, "ClassAct RadioButton Example", + WA_Activate, TRUE, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_SizeGadget, TRUE, + WINDOW_IconifyGadget, TRUE, + WINDOW_IconTitle, "RadioButton", + WINDOW_AppPort, AppPort, + WINDOW_Position, WPOS_CENTERMOUSE, + WINDOW_ParentGroup, gadgets[GID_MAIN] = VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_DeferLayout, TRUE, + + LAYOUT_AddChild, VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_BevelStyle, BVS_GROUP, + LAYOUT_Label, "Baud Rate", + + LAYOUT_AddChild, gadgets[GID_RADIOBUTTON] = RadioButtonObject, + GA_ID, GID_RADIOBUTTON, + GA_RelVerify, TRUE, + RADIOBUTTON_Labels, radiolist, + RADIOBUTTON_Selected, 0, + RadioButtonEnd, + // CHILD_WeightedHeight, 0, + LayoutEnd, + + LAYOUT_AddChild, ButtonObject, + GA_ID, GID_QUIT, + GA_RelVerify, TRUE, + GA_Text,"_Quit", + ButtonEnd, + CHILD_WeightedHeight, 0, + + EndGroup, + EndWindow; + + /* Object creation sucessful? + */ + if (objects[OID_MAIN]) + { + /* Open the window. + */ + if (windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN])) + { + ULONG wait, signal, app = (1L << AppPort->mp_SigBit); + ULONG done = FALSE; + ULONG result; + UWORD code; + + /* Obtain the window wait signal mask. + */ + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + + /* Input Event Loop + */ + while (!done) + { + wait = Wait( signal | SIGBREAKF_CTRL_C | app ); + + if ( wait & SIGBREAKF_CTRL_C ) + { + done = TRUE; + } + else + { + while ( (result = CA_HandleInput(objects[OID_MAIN], &code) ) != WMHI_LASTMSG ) + { + switch (result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + windows[WID_MAIN] = NULL; + done = TRUE; + break; + + case WMHI_GADGETUP: + switch (result & WMHI_GADGETMASK) + { + case GID_QUIT: + done = TRUE; + break; + } + break; + + case WMHI_ICONIFY: + CA_Iconify(objects[OID_MAIN]); + windows[WID_MAIN] = NULL; + break; + + case WMHI_UNICONIFY: + windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN]); + + if (windows[WID_MAIN]) + { + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + } + else + { + done = TRUE; // error re-opening window! + } + break; + } + } + } + } + } + + /* Disposing of the window object will also close the window if it is + * already opened, and it will dispose of the layout object attached to it. + */ + DisposeObject(objects[OID_MAIN]); + } + + /* free the radiobutton list + */ + FreeRadioButtons(radiolist); + } + + DeleteMsgPort(AppPort); + } + + return(0); +} diff --git a/Examples/RadioButton/radioexample.c.info b/Examples/RadioButton/radioexample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..9f08eb3a9d0415d92af43a107c3fd847f788fb15 GIT binary patch literal 300 zcmaDXz`)1=0*e_$7-SeE7+8UPM)sLpFTkSc1S1Or`@~uc_WtD!K&kma%!W{+_W;b6 zVGw6vVqktC!HkdsvUnRdfcd-!Ai}&5ih-Nq2AIWm03yJg1z|AVg7PCE494sPumEEO zL>xr^|NsBP{{R0k{QbZG!~O^L7ycfQ|FEBd|H5Ae_7D3Q*f0F%zx`p4eDj5W_x}Uw z{}=ve9saO~pZUVSTM+sG5w}0=Z;-$6Kf4}m&i{Cbc_4Fv#&h|W=9FZXWu}&cEMoxx DzJgYN literal 0 HcmV?d00001 diff --git a/Examples/ReqTools.info b/Examples/ReqTools.info new file mode 100644 index 0000000000000000000000000000000000000000..fd84784df8cb0ce8ce9126765ebb274bf9b8d8f7 GIT binary patch literal 628 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 literal 0 HcmV?d00001 diff --git a/Examples/ReqTools/ReqTools.c b/Examples/ReqTools/ReqTools.c new file mode 100644 index 0000000..30858df --- /dev/null +++ b/Examples/ReqTools/ReqTools.c @@ -0,0 +1,326 @@ +;/* +sc link reqtools.c lib lib:classact.lib +quit +*/ + +/* ClassAct Example, "reqtools" prefs skeleton. + */ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +//#include +//#include + +struct Screen *Scr = NULL; +struct DrawInfo *Dri; +BOOL done = FALSE; + +/************************************************************************** + * Chooser label arrays + */ +static STRPTR chooserlabels1[] = +{ + "File Requester", + "Font Requester", + "Palette Requester", + "Screen Mode Requester", + "Volume Requester", + "Other Requesters", + NULL +}; + +static STRPTR chooserlabels2[] = +{ + "Mouse Pointer", + "Center in Window", + "Center on Screen", + "Top Left of Window", + "Top Left of Screen", + NULL +}; + +/************************************************************************* + * Gadget list + */ +typedef enum { G_PopScreen = 1, G_UseSysFont, G_ImmSort, G_DrawerFirst, + G_MixFiles, G_DiskLed, G_DefPage, G_Visible, G_VisMin, G_VisMax, + G_Pos, G_PosX, G_PosY, G_Save, G_Use, G_Cancel, G_MAX } GadgetIDs; + +struct Gadget *GList[G_MAX+1]; + +/************************************************************************* + * Main Program + */ +int main(argc,argv) +int argc; +char *argv[]; +{ + struct Window *Win; + + Scr = LockPubScreen(NULL); + + if (!ButtonBase) /* force it open */ + return (30); + + if (Scr == NULL) + { + /* Shut down, no screen lock + */ + Printf("Failed locking public screen.\n"); + return(30); + } + + Dri = GetScreenDrawInfo(Scr); + if (Dri) + { + struct List *chooser1 = ChooserLabelsA( chooserlabels1 ); + struct List *chooser2 = ChooserLabelsA( chooserlabels2 ); + + if (chooser1 && chooser2) + { + struct Gadget *MainLayout, *l1, *l2; + Object *Window; + + Window = WindowObject, + WA_SizeGadget, TRUE, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_Activate, TRUE, + WA_PubScreen, Scr, + WA_Title, "ClassAct layout.gadget Example (ReqTools preferences mockup)", + WA_ScreenTitle, "ClassAct Release 2.0", + WINDOW_Position, WPOS_CENTERMOUSE, + WINDOW_ParentGroup, MainLayout = VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_DeferLayout, TRUE, /* this tag instructs layout.gadget to + * defer GM_LAYOUT and GM_RENDER and ask + * the application to do them. This + * lessens the load on input.device */ + StartHGroup, + StartVGroup, + + /* This is a basic vertical centered layout group with three gadgets */ + StartVGroup, VCentered, LAYOUT_SpaceOuter, TRUE, + LAYOUT_BevelStyle, GroupFrame, + LAYOUT_Label, "General", + + /* SetGadgetCommKeys will set the gadget IDs automatically */ + StartMember, GList[G_PopScreen] = CheckBoxObject, + GA_Text, "_Pop screen to front", + End, + + StartMember, GList[G_UseSysFont] = CheckBoxObject, + GA_Text, "Us_e system default font", + End, + End, + CHILD_WeightMinimum, TRUE, /* by setting WeightMinimum you instruct + * layout.gadget to weight the object according + * to its minimum size. This retains group + * aspects at all sizes. */ + + StartVGroup, VCentered, LAYOUT_SpaceOuter, TRUE, + LAYOUT_BevelStyle, GroupFrame, + LAYOUT_Label, "File Requester", + + StartMember, GList[G_ImmSort] = CheckBoxObject, + GA_Text, "_Immediate sort", + End, + + StartMember, GList[G_DrawerFirst] = CheckBoxObject, + GA_Text, "_Display drawers first", + End, + + StartMember, GList[G_MixFiles] = CheckBoxObject, + GA_Text, "Mi_x files and drawers", + End, + + StartMember, GList[G_DiskLed] = CheckBoxObject, + GA_Text, "Dis_k activity LED", + End, + End, + CHILD_WeightMinimum, TRUE, + End, + CHILD_WeightMinimum, TRUE, + + StartVGroup, TOffset(INTERSPACING), + StartMember, GList[G_DefPage] = ChooserObject, + CHOOSER_Labels, chooser1, + End, + CHILD_Label, LabelObject, LABEL_Text, "De_faults for", End, + CHILD_WeightedHeight, 0, + + StartMember, l1 = VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_BevelStyle, StandardFrame, + LAYOUT_BevelState, IDS_SELECTED, + + StartHGroup, TOffset(INTERSPACING), + LAYOUT_Label, "Size (% of visible height):", + + StartMember, GList[G_Visible] = ScrollerObject, + SCROLLER_Total, 100, + SCROLLER_Arrows, FALSE, + SCROLLER_Orientation, SORIENT_HORIZ, + End, + CHILD_MinHeight, Scr->Font->ta_YSize + 6, + + End, + CHILD_WeightedHeight, 0, + + StartMember, l2 = HGroupObject, TOffset(INTERSPACING), + LAYOUT_Label, "Number of visible entries:", + + StartMember, GList[G_VisMin] = IntegerObject, + GA_TabCycle, TRUE, + End, + CHILD_Label, LabelObject, LABEL_Text, "_Minimum", End, + + StartMember, GList[G_VisMax] = IntegerObject, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + End, + CHILD_Label, LabelObject, LABEL_Text, "Ma_ximum", End, + + End, + CHILD_WeightedHeight, 0, + + StartMember, GList[G_Pos] = ChooserObject, + GA_TabCycle, TRUE, + CHOOSER_Labels, chooser2, + End, + CHILD_Label, LabelObject, LABEL_Text, "P_osition", End, + CHILD_WeightedHeight, 0, + + StartHGroup, + + StartMember, GList[G_PosX] = IntegerObject, + GA_TabCycle, TRUE, + End, + + StartMember, GList[G_PosY] = IntegerObject, + GA_TabCycle, TRUE, + End, + + End, + CHILD_Label, LabelObject, LABEL_Text, "Offse_t", End, + CHILD_WeightedHeight, 0, + End, + End, + CHILD_WeightMinimum, TRUE, + End, + + StartHGroup, + LAYOUT_EvenSize, TRUE, + + StartMember, GList[G_Save] = ButtonObject, + GA_Text, "_Save", + End, + CHILD_NominalSize, TRUE, /* make it a bit larger than necessary */ + CHILD_WeightedWidth, 0, + + StartMember, GList[G_Use] = ButtonObject, + GA_Text, "_Use", + End, + CHILD_NominalSize, TRUE, + CHILD_WeightedWidth, 0, + + StartMember, GList[G_Cancel] = ButtonObject, + GA_Text, "_Cancel", + End, + CHILD_NominalSize, TRUE, + CHILD_WeightedWidth, 0, + End, + CHILD_WeightedHeight, 0, + End, + EndWindow; + + if (Window) + { + /* set up automatic label justification */ + SetAttrs( l1, LAYOUT_AlignLabels, l2, TAG_END ); + SetAttrs( l2, LAYOUT_AlignLabels, l1, TAG_END ); + + /* Finish the gadgetarray initialisation. Set gadget IDs and release verify */ + + { + LONG i = 1; + do SetAttrs(GList[i], GA_ID, i, GA_RelVerify, TRUE, TAG_END); + while (GList[++i]); + } + + if (Win = CA_OpenWindow( Window )) + { + ULONG wsig; + + GetAttr( WINDOW_SigMask, Window, &wsig ); + + while (done == FALSE) + { + ULONG sig = Wait(wsig | SIGBREAKF_CTRL_C); + ULONG result; + WORD code; + + if (sig & wsig) + { + while ((result = CA_HandleInput(Window,&code)) != WMHI_LASTMSG) + { + switch(result & WMHI_CLASSMASK) + { + case WMHI_GADGETUP: + switch(result & WMHI_GADGETMASK) + { + case G_Save: + case G_Use: + case G_Cancel: + done = TRUE; + /*FALLTHROUGH*/ + + /* Gadgets here */ + default: + Printf("Gadget ID %ld hit (code %ld)\n", result & WMHI_GADGETMASK, code); + break; + } + break; + + case WMHI_CLOSEWINDOW: + done = TRUE; + break; + } + } + } + else if (sig & SIGBREAKF_CTRL_C) + { + done = TRUE; + } + } + /* Close the window and dispose of all attached gadgets */ + DisposeObject( Window ); + } + } + } + + FreeChooserLabels( chooser1 ); + FreeChooserLabels( chooser2 ); + + FreeScreenDrawInfo(Win->WScreen, Dri); + } + UnlockPubScreen(0, Scr); +} diff --git a/Examples/ReqTools/ReqTools.c.info b/Examples/ReqTools/ReqTools.c.info new file mode 100644 index 0000000000000000000000000000000000000000..d1fe1478d041279e10684a060774cc42206b2d96 GIT binary patch literal 300 zcmaDXz`)1=0_hAQ3^EK746HytBm0Va39u+S!N|hEK2v@N`^V2*g}(>nKkR4VzwnoV{lh*6_6xuHZ-3Y$-+bZU{r^Dv z|Aqfqhd=D$XTI?77DWDk#O)9J8{{wi&#niX^FJP99>`pv@m#*8IVG88nW^O<%UA&Q CZdJ_y literal 0 HcmV?d00001 diff --git a/Examples/ReqTools/ReqTools.info b/Examples/ReqTools/ReqTools.info new file mode 100644 index 0000000000000000000000000000000000000000..9eb6d6c3524f761a34553fbddbd06270090abca7 GIT binary patch literal 521 zcmaDXz`)1=0z3>N3}y`C3@i-H42mPtc(FsOo2KJWM73?!j1b|W;K+M9vr9J_o z%ufMAGcf%B4`MMf2-U+xQ0O=Yr~g0zwHYR5#vlgN!rWfK3=;v;EKoKNf-YcSFaSE2 zA7sS;Gf?^s&1rV9eQyx%0JC@)>cQfFfPMyn9}HJRK_CD@vxbJc0{QoV2AuzYf#F^; zgue6n|NnL%|IYvUPBmld*f=5`s8vj&33)q==%kR`#mo1#+E=D aY#(m=0@!^52zNl;)d2MYkOId%G=u?V9Mix6 literal 0 HcmV?d00001 diff --git a/Examples/Speed.info b/Examples/Speed.info new file mode 100644 index 0000000000000000000000000000000000000000..8694481234515474250b535cc0335417756423c9 GIT binary patch literal 628 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 O-A~Hm)=**{-~SIAt9#o3 literal 0 HcmV?d00001 diff --git a/Examples/Speed/SpeedExample1.c b/Examples/Speed/SpeedExample1.c new file mode 100644 index 0000000..597f553 --- /dev/null +++ b/Examples/Speed/SpeedExample1.c @@ -0,0 +1,454 @@ +/* ClassAct Example + * Copyright © 1995 Christopher Aldi + * All Rights Reserved. + * + * This Example Shows ClassAct's speed laying out & rendering 100 buttons. + */ + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include +#include + +struct ClassLibrary *WindowBase; +struct ClassLibrary *LayoutBase; +struct ClassLibrary *ButtonBase; + +LONG ARG[1]; + +int main( void ) +{ + struct Window *window; + Object *Win_Object; + ULONG signal, result; + ULONG done = FALSE; + struct RDArgs *args; + + if (!(args = ReadArgs("ND=NODEFER/S",ARG,NULL))) + return 20; + + /* Open the classes we will use. Note, classlib.lib SAS/C or DICE autoinit + * can do this for you automatically. + */ + if( WindowBase = (struct ClassLibrary *)OpenLibrary("window.class",0L) ) + { + if( LayoutBase = (struct ClassLibrary *)OpenLibrary("gadgets/layout.gadget",0L) ) + { + if( ButtonBase = (struct ClassLibrary *)OpenLibrary("gadgets/button.gadget",0L) ) + { + /* Create the window object. + */ + Win_Object = WindowObject, + WA_ScreenTitle, "ClassAct Copyright 1995, Phantom Development LLC.", + WA_Title, "SpeedTest1 (100 buttons)", + WA_SizeGadget, TRUE, + WA_Left, 40, + WA_Top, 30, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_Activate, TRUE, + WINDOW_ParentGroup, HGroupObject, + TAligned, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_DeferLayout, !ARG[0], + StartVGroup, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + End, + StartVGroup, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + End, + StartVGroup, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + End, + StartVGroup, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + End, + StartVGroup, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + End, + StartVGroup, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + End, + StartVGroup, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + End, + StartVGroup, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + End, + StartVGroup, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + End, + StartVGroup, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + StartMember, ButtonObject, + GA_Text, "Button", + EndMember, + End, + + EndMember, + EndWindow; + + /* Object creation sucessful? + */ + if( Win_Object ) + { + /* Open the window. + */ + if( window = (struct Window *) CA_OpenWindow(Win_Object) ) + { + ULONG wait; + + /* Obtain the window wait signal mask. + */ + GetAttr( WINDOW_SigMask, Win_Object, &signal ); + + /* Input Event Loop + */ + while( !done ) + { + wait = Wait(signal|SIGBREAKF_CTRL_C); + + if (wait & SIGBREAKF_CTRL_C) done = TRUE; + else + + while ((result = CA_HandleInput(Win_Object,NULL)) != WMHI_LASTMSG) + { + switch(result) + { + case WMHI_CLOSEWINDOW: + done = TRUE; + break; + } + } + } + } + + /* Disposing of the window object will + * also close the window if it is + * already opened and it will dispose of + * all objects attached to it. + */ + DisposeObject( Win_Object ); + } + } + } + } + + /* Close the classes. + */ + if (LayoutBase) CloseLibrary( (struct Library *)LayoutBase ); + if (ButtonBase) CloseLibrary( (struct Library *)ButtonBase ); + if (WindowBase) CloseLibrary( (struct Library *)WindowBase ); + + FreeArgs(args); +} + +#ifdef _DCC +int wbmain( struct WBStartup *wbs ) +{ + return( main( 0, NULL )); +} +#endif diff --git a/Examples/Speed/SpeedExample1.c.info b/Examples/Speed/SpeedExample1.c.info new file mode 100644 index 0000000000000000000000000000000000000000..86a5546991887ba69b9cfcfea5dc2c787fb472c5 GIT binary patch literal 300 zcmaDXz`)1=0?QbL7-SeE7+8UPM)o-eH-JUa2}TwMpxg=e{?!wJQj36?1))Um0hler zAkM(V!2Cdh86gE^@ist=c1cbquod6bKjDU!P z$p8QUf7t*3|AoK*_kY;`p#H+&1M(mCGw@&d%fS9&9|QY^-~6{f?2&K2@bCVAApQTs z|E$9w_V6=b_;(8;|3BjPhy4xm7yf70gU$IL4>1p9F3@-`-_o3t%(BeXa*$;#05_yp A_5c6? literal 0 HcmV?d00001 diff --git a/Examples/Speed/SpeedExample1.info b/Examples/Speed/SpeedExample1.info new file mode 100644 index 0000000000000000000000000000000000000000..6bc62f99432038d886f7492dab3041967c49bfbc GIT binary patch literal 450 zcmaDXz`)1=0%8n83}y`C3@kuCBl{BHA7D{*f{__nL6&14i*n`nKA<;52cy=lu|%^5CF-;X#4;F|NnsU w8F16}KxO~`|6u@A|9>!C4F!P!+;lxqD$)*6^9b1A08|D706M-+y8r+H literal 0 HcmV?d00001 diff --git a/Examples/Speed/SpeedExample2 b/Examples/Speed/SpeedExample2 new file mode 100644 index 0000000000000000000000000000000000000000..22550a1a54dfef7f5aea097cce4ee86e1a22c037 GIT binary patch literal 6472 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 +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include +#include + +struct ClassLibrary *WindowBase; +struct ClassLibrary *LayoutBase; +struct ClassLibrary *CheckBoxBase; + +LONG ARG[1]; + +int main( void ) +{ + struct Window *window; + Object *Win_Object; + ULONG signal, result; + ULONG done = FALSE; + struct RDArgs *args; + + if (!(args = ReadArgs("ND=NODEFER/S",ARG,NULL))) + return 20; + + /* Open the classes we will use. Note, classlib.lib SAS/C or DICE autoinit + * can do this for you automatically. + */ + if( WindowBase = (struct ClassLibrary *)OpenLibrary("window.class",0L) ) + { + if( LayoutBase = (struct ClassLibrary *)OpenLibrary("gadgets/layout.gadget",0L) ) + { + if( CheckBoxBase = (struct ClassLibrary *)OpenLibrary("gadgets/checkbox.gadget",0L) ) + { + /* Create the window object. + */ + Win_Object = WindowObject, + WA_ScreenTitle, "ClassAct Copyright 1995, Phantom Development LLC.", + WA_Title, "SpeedTest2 (50 checkboxes)", + WA_SizeGadget, TRUE, + WA_Left, 40, + WA_Top, 30, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_Activate, TRUE, + WINDOW_ParentGroup, HGroupObject, + TAligned, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_DeferLayout, !ARG[0], + StartVGroup, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + End, + StartVGroup, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + End, + StartVGroup, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + End, + StartVGroup, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + End, + StartVGroup, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + StartMember, CheckBoxObject, + GA_Text, "CheckBox", + EndMember, + End, + + EndMember, + EndWindow; + + /* Object creation sucessful? + */ + if( Win_Object ) + { + /* Open the window. + */ + if( window = (struct Window *) CA_OpenWindow(Win_Object) ) + { + ULONG wait; + + /* Obtain the window wait signal mask. + */ + GetAttr( WINDOW_SigMask, Win_Object, &signal ); + + /* Input Event Loop + */ + while( !done ) + { + wait = Wait(signal|SIGBREAKF_CTRL_C); + + if (wait & SIGBREAKF_CTRL_C) done = TRUE; + else + + while ((result = CA_HandleInput(Win_Object,NULL)) != WMHI_LASTMSG) + { + switch(result) + { + case WMHI_CLOSEWINDOW: + done = TRUE; + break; + } + } + } + } + + /* Disposing of the window object will + * also close the window if it is + * already opened and it will dispose of + * all objects attached to it. + */ + DisposeObject( Win_Object ); + } + } + } + } + + /* Close the classes. + */ + if (LayoutBase) CloseLibrary( (struct Library *)LayoutBase ); + if (CheckBoxBase) CloseLibrary( (struct Library *)CheckBoxBase ); + if (WindowBase) CloseLibrary( (struct Library *)WindowBase ); + + FreeArgs(args); +} + +#ifdef _DCC +int wbmain( struct WBStartup *wbs ) +{ + return( main( 0, NULL )); +} +#endif diff --git a/Examples/Speed/SpeedExample2.c.info b/Examples/Speed/SpeedExample2.c.info new file mode 100644 index 0000000000000000000000000000000000000000..b54a1d8c7fe1b7cc895269129c8ac8089c9760ac GIT binary patch literal 300 zcmaDXz`)1=0?Qbz8DtnF7+8UPM)rwq8DLR#f{}%ReI{!Id;iJ~pwuED)V2*g}(>nKkR4VzwnoV{lh*6_6xuHZ-3Y$-+bZU{r^Dv z|Aqfqhd=D$XTI?77DWDk#O)9J8{{wi&#niX^FJP99>`pv@m#*8IVG88nW^O<%UA%L C%vMPN literal 0 HcmV?d00001 diff --git a/Examples/Speed/SpeedExample2.info b/Examples/Speed/SpeedExample2.info new file mode 100644 index 0000000000000000000000000000000000000000..1d740459391bbdc7157773379b93622cf072ec0a GIT binary patch literal 450 zcmaDXz`)1=0%8nS3}y`C3@kuCBl{Be0X#Agg78 zD&rwQ`#|N-Kxnoz3@ix z7eMtXKxqaD&Hf+8=fP=z{eKYn!vLoK|6sTp3IYLm>G=N>!156c0&x0bs7ok>52Xbe hLL@-)fi8>?aR)GcF%T*av;|rJRU|$>`x~G>0RXRoSdst$ literal 0 HcmV?d00001 diff --git a/Examples/Speed/SpeedExample3 b/Examples/Speed/SpeedExample3 new file mode 100644 index 0000000000000000000000000000000000000000..09251b4bd1457bfd8cb01b3d4cf9051fc821791a GIT binary patch literal 7472 zcmeHMeQZ-e(L2k{63_ArX}ZxUn_h4j597WVCsR`ijTf-}l40zJ zg{-@yZ z?X-s!sALcTzqo(V_nvJg zdv`TxbTXGh!Oijrv`5f@z_*FczXgzKg~#Ph6hx^pNYriyvO(mJC&{uHVeM zCWn5Mv&is(%xaWrS)Lz5c*p7Z@YGKS)&5wzFOclrk?GDHAVk&$ z#AA5;x41{*wCd37Go&cf&wRfSv4hlllgML-ZDFrn^t~6}nfX+bDF#p247Wy4sKJ|5 zZkW+si~?E2U*%okYvv-O&BT2MT;m*0F>#a7E5lNuRRi2sgu6mxEd0XzZ8qhw@_rE~ zgRYpcW5chM{luh}mq})T>?Q>Nf@9$LMQ=N7In;iO+}`cbyMBpsO-qz(SfZSNiE?#I zl=Ch{&bOpls9lnjcS%xGAv#uynAl@MbTpa}lSn)bH!xqNIToQkz6fo_A~cCkE=oPO zDD}#s)GrpJGUuYyx;d(uK?dV#CNIdE88d4lh>qE8T-rR8GVedFNTtl1&&pEf&3~^7 znHMf)-hch3m%e%PQ6qlkl)iai$2U(YWnL-suowAX_7|nh`#LhOt(1AC%qwNyLpxT9 z{@?pNtX{MGVo9RT!p;zoHU}l=p#4S2WM*=S5%=g z!Y+D&ERq97*)ymIIf0GxQ1BM@@RpY?5ew=>8Lb7iydIKW#VXc=-`k0tx@!>SKyI_< zP*L&xkx{G5RbV41)yjl&n zQ#PopUF|P&oCb$|mP6pxJ*aR-l<9`=1n<$I`KqN4(IV=Zh?3V(`|Uz~x-OsR41TP3 z%9U3;a`G_`lZSExMO=bIgv%Trmd`;HRI;}Fh9gx*~d2k>y ztrCtDK0j8lUzw&VUz%K~#V4I|^oVO!hL1D-PUbP(zsNXnzu{V?s~OKYOVnxQp!)#X zqDMlj^m3CQ6x|x4#Am?p=n<_(VD(BF`!KiV%5#Yt51C!#qK*Vl6y zrnI6C+l-2Nw&=IphzJ*amxWa$u8K!kRRIl$O}o0HBek3P&%1`T_23lt1)?JcxhgP= z<(ZA6Lptmbcg?lo2`y4JLu)iU?hdD1bvZhM`(Ge8JB|yX3f&SN0p~EkSm^zcqp8qs z8&+$SkBQMFY@)`GDn2Z(SD4XF?0k5thcqIeRBn#9Dm2Ejx+|LVfakh7a*R3PN9?M5 z#Jnie%o-qHl5T5uz8iJ=QQr^wio|WcJUqp78a+_VcxzIo*NJ$W5WX|WhYI%ntFG9xAwtv$t@(3MX1-Qe|a;J7X zqH(Q939U}dbc}fI$0z(-Y9I3~ht5gR;>rKVd`vND7C(eBE=;J?rO@p6*mOy_>hi_r{ZHV|P52 z<>7EJKpjRr9_x(vWgB_jvkkncu&>@Uk)Gs4Ys8pvtv&}>DZq4sXyvJV9&hFNTX2~; zD_IMuY8#&C9>UekvhPf%n%6Z*_cmMzZ literal 0 HcmV?d00001 diff --git a/Examples/Speed/SpeedExample3.c b/Examples/Speed/SpeedExample3.c new file mode 100644 index 0000000..e78b8e3 --- /dev/null +++ b/Examples/Speed/SpeedExample3.c @@ -0,0 +1,444 @@ +/* ClassAct Example + * Copyright © 1995 Christopher Aldi + * All Rights Reserved. + * + * This Example Shows ClassAct's speed laying out & rendering 50 palettes + */ + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include +#include + +struct ClassLibrary *WindowBase; +struct ClassLibrary *LayoutBase; +struct ClassLibrary *PaletteBase; + +LONG ARG[1]; + +int main( void ) +{ + struct Window *window; + Object *Win_Object; + ULONG signal, result; + ULONG done = FALSE; + struct RDArgs *args; + + if (!(args = ReadArgs("ND=NODEFER/S",ARG,NULL))) + return 20; + + /* Open the classes we will use. Note, classlib.lib SAS/C or DICE autoinit + * can do this for you automatically. + */ + if( WindowBase = (struct ClassLibrary *)OpenLibrary("window.class",0L) ) + { + if( LayoutBase = (struct ClassLibrary *)OpenLibrary("gadgets/layout.gadget",0L) ) + { + if( PaletteBase = (struct ClassLibrary *)OpenLibrary("gadgets/palette.gadget",0L) ) + { + /* Create the window object. + */ + Win_Object = WindowObject, + WA_ScreenTitle, "ClassAct Copyright 1995, Phantom Development LLC.", + WA_Title, "SpeedTest2 (50 palettes)", + WA_SizeGadget, TRUE, + WA_Left, 40, + WA_Top, 30, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_Activate, TRUE, + WINDOW_ParentGroup, HGroupObject, + TAligned, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_DeferLayout, !ARG[0], + StartVGroup, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + End, + StartVGroup, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + End, + StartVGroup, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + End, + StartVGroup, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + End, + StartVGroup, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + StartMember, PaletteObject, + PALETTE_NumColors, 8, + PALETTE_Color, 1, + EndMember, + CHILD_MinWidth, 50, + CHILD_MinHeight, 15, + End, + + EndMember, + EndWindow; + + /* Object creation sucessful? + */ + if( Win_Object ) + { + /* Open the window. + */ + if( window = (struct Window *) CA_OpenWindow(Win_Object) ) + { + ULONG wait; + + /* Obtain the window wait signal mask. + */ + GetAttr( WINDOW_SigMask, Win_Object, &signal ); + + /* Input Event Loop + */ + while( !done ) + { + wait = Wait(signal|SIGBREAKF_CTRL_C); + + if (wait & SIGBREAKF_CTRL_C) done = TRUE; + else + + while ((result = CA_HandleInput(Win_Object,NULL)) != WMHI_LASTMSG) + { + switch(result) + { + case WMHI_CLOSEWINDOW: + done = TRUE; + break; + } + } + } + } + + /* Disposing of the window object will + * also close the window if it is + * already opened and it will dispose of + * all objects attached to it. + */ + DisposeObject( Win_Object ); + } + } + } + } + + /* Close the classes. + */ + if (LayoutBase) CloseLibrary( (struct Library *)LayoutBase ); + if (PaletteBase) CloseLibrary( (struct Library *)PaletteBase ); + if (WindowBase) CloseLibrary( (struct Library *)WindowBase ); + + FreeArgs(args); +} + +#ifdef _DCC +int wbmain( struct WBStartup *wbs ) +{ + return( main( 0, NULL )); +} +#endif diff --git a/Examples/Speed/SpeedExample3.c.info b/Examples/Speed/SpeedExample3.c.info new file mode 100644 index 0000000000000000000000000000000000000000..816c0e08277eb1ed2478624edc52fd6fa7307670 GIT binary patch literal 300 zcmaDXz`)1=0?Qau7-SeE7+8UPM)rwq0bo&df{}%RePXQzd;jtVpwuED4nru>djMw3 zFo-iSF)){NFe9XZEZ&9V2*g}(>nKkR4VzwnoV{lh*6_6xuHZ-3Y$-+bZU{r^Dv z|Aqfqhd=D$XTI?77DWDk#O)9J8{{wi&#niX^FJP99>`pv@m#*8IVG88nW^O<%UA&4 C23Cjw literal 0 HcmV?d00001 diff --git a/Examples/Speed/SpeedExample3.info b/Examples/Speed/SpeedExample3.info new file mode 100644 index 0000000000000000000000000000000000000000..2d2521952b9e6269b51e159589882b390bc9b1e3 GIT binary patch literal 626 zcmaDXz`)1=0%8nF3}y`C3@kuCBl{Be2(TzR!N`m(A_U}wAPa!mWFZ#L z0ETM}4E(?Ukwh~vL)HH$gT4X|F@!r{?rH#w(~e;LU;qC1KL!R8=m*R|^@IQb!+D>$ literal 0 HcmV?d00001 diff --git a/Examples/SpeedBar.info b/Examples/SpeedBar.info new file mode 100644 index 0000000000000000000000000000000000000000..b83ecaeff2412369d5703ff7202690c62071f2b9 GIT binary patch literal 628 zcmZvYJx;?w5QX2`#v3FAhz1lIgi=wV@MBUr9a5?k&_x`9E5sEw2S`bQQqw?1!4;59 z0|lHRxQMdMo3-O0c_jOrc{@Lv`QCqtLjYbNS3eHGDKy+xer(Vspb_pR&5U_Wt=E;ByNT;r#$lfb)E%M)tQ*% zysS^Pu2`AS;PT?K^Gn{mb9+jA!r3)#gt7LVqpz)^lChAtP|7XhtS{H`_1C rvOxPzvsC-lJ0Gh4h&7!z)GGd}yqdfP_nyfuNZx|1J~nRL-N5_-w4J+0 literal 0 HcmV?d00001 diff --git a/Examples/SpeedBar/SpeedBarExample.info b/Examples/SpeedBar/SpeedBarExample.info new file mode 100644 index 0000000000000000000000000000000000000000..f9b4c8c34a4a776cbc9e9338a15479eb46e7ceae GIT binary patch literal 450 zcmaDXz`)1=0x}Fj3}y`C3@kuCBm2a*46rCV!N`m(A_3&EAPa!mW(;BsObpBqB#_m@ zl<`27>J8-ZnfW&<~dJVS#X|0!6wU&VBPEj!JlX2D%#OHvhXZ#NY ze}H^2AWYYT)c^m(0H*%`V7M9z0s(~S|KI=p{|QtF42lLu^64uecY^d2X>SAAUknTY D4Mb8z literal 0 HcmV?d00001 diff --git a/Examples/SpeedBar/speedbarexample b/Examples/SpeedBar/speedbarexample new file mode 100644 index 0000000000000000000000000000000000000000..17d46b298db8b8f1c7332249396434d0671e38ee GIT binary patch literal 10628 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 literal 0 HcmV?d00001 diff --git a/Examples/SpeedBar/speedbarexample.c b/Examples/SpeedBar/speedbarexample.c new file mode 100644 index 0000000..0c8e32f --- /dev/null +++ b/Examples/SpeedBar/speedbarexample.c @@ -0,0 +1,573 @@ +;/* SpeedBar Example +sc link speedbarexample.c lib lib:classact.lib +quit +*/ + +/* system includes + */ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +/* ClassAct includes + */ +#include + +/* Local function prototypes. + */ +BOOL make_speedbar_list(struct List *, struct Image *, UBYTE **); +VOID free_speedbar_list(struct List *); + + +/* Image data definitions. + */ +__chip UWORD sb_data[][64] = +{ + /* Cut + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0e01, 0xc000, 0x1107, 0x8000, + 0x191e, 0x0000, 0x0f78, 0x0000, + 0x01e0, 0x0000, 0x0f78, 0x0000, + 0x191e, 0x0000, 0x1107, 0x8000, + 0x0e01, 0xc000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + /* Copy + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x01fe, 0x0000, 0x0186, 0x0000, + 0x01fe, 0x0000, 0x0630, 0x8000, + 0x1fff, 0xe000, 0x1f87, 0xe000, + 0x1f03, 0xe000, 0x1f03, 0xe000, + 0x1f03, 0xe000, 0x1f87, 0xe000, + 0x1fff, 0xe000, 0x1fff, 0xe000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0078, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0060, 0x0000, 0x0044, 0x0000, + 0x0004, 0x0000, 0x0018, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + /* Paste + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x003f, 0x0000, + 0x0021, 0x0000, 0x007f, 0x8000, + 0x0080, 0x4000, 0x0081, 0xc000, + 0x0780, 0x4000, 0x0861, 0xc000, + 0x0f20, 0x4000, 0x0891, 0xc000, + 0x0950, 0x4000, 0x0251, 0xc000, + 0x05e0, 0x4000, 0x0880, 0xc000, + 0x307f, 0x8000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0006, 0x0000, 0x0000, 0x0000, + 0x0007, 0x0000, 0x0002, 0x0000, + 0x0002, 0x0000, 0x0782, 0x0000, + 0x00c2, 0x0000, 0x0062, 0x0000, + 0x0222, 0x0000, 0x0422, 0x0000, + 0x0802, 0x0000, 0x1002, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + /* Erase + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x002e, 0xb800, + 0x005d, 0x7800, 0x00ba, 0xf800, + 0x01f5, 0xf000, 0x03eb, 0xe000, + 0x05f7, 0xc000, 0x08ff, 0x8000, + 0x107f, 0x0000, 0x103e, 0x0000, + 0x101c, 0x0000, 0x0828, 0x0000, + 0x0450, 0x0000, 0x02a0, 0x0000, + 0x01ff, 0xf800, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x001a, 0xa800, + 0x0035, 0x5000, 0x006a, 0xa000, + 0x0015, 0x4000, 0x000a, 0x8000, + 0x0205, 0x0000, 0x0502, 0x0000, + 0x0a80, 0x0000, 0x0540, 0x0000, + 0x0aa0, 0x0000, 0x0540, 0x0000, + 0x0280, 0x0000, 0x0100, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + /* Mail + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0800, 0xd000, + 0x0094, 0xd000, 0x0000, 0x1000, + 0x0060, 0x1000, 0x0000, 0x1000, + 0x00d0, 0x1000, 0x0000, 0x1000, + 0x1fff, 0xf000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0018, 0x0000, 0x007c, 0x0000, + 0x01ca, 0x0000, 0x0515, 0x0000, + 0x3fff, 0xe000, 0x2bff, 0xe000, + 0x3e97, 0xe000, 0x3fff, 0xe000, + 0x3f6f, 0xe000, 0x3fff, 0xe000, + 0x3fd7, 0xe000, 0x3fff, 0xe000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + /* Time + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x0070, 0x0000, + 0x0376, 0x0000, 0x06db, 0x0000, + 0x0505, 0x0000, 0x0262, 0x0000, + 0x0421, 0x0000, 0x0421, 0x0000, + 0x0439, 0x0000, 0x0401, 0x0000, + 0x0401, 0x0000, 0x0202, 0x0000, + 0x0104, 0x0000, 0x01fc, 0x0000, + 0x0306, 0x0000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0020, 0x0000, + 0x0000, 0x0000, 0x0098, 0x0000, + 0x01dc, 0x0000, 0x01dc, 0x0000, + 0x01c4, 0x0000, 0x01fc, 0x0000, + 0x01fc, 0x0000, 0x00f8, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + /* Date + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x037b, 0x0000, + 0x0285, 0x8000, 0x0201, 0x8000, + 0x0201, 0x8000, 0x0299, 0x8000, + 0x02a7, 0x8000, 0x052b, 0x8000, + 0x0535, 0x8000, 0x080d, 0x8000, + 0x1ff5, 0x8000, 0x0205, 0x8000, + 0x0201, 0x8000, 0x03ff, 0x8000, + 0x01ff, 0x8000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x017a, 0x0000, 0x01fe, 0x0000, + 0x01fe, 0x0000, 0x0166, 0x0000, + 0x0158, 0x0000, 0x02d4, 0x0000, + 0x02c8, 0x0000, 0x07f2, 0x0000, + 0x0000, 0x0000, 0x00aa, 0x0000, + 0x0154, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + /* Disk + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x0038, 0x0000, + 0x0054, 0x0000, 0x008e, 0x0000, + 0x0107, 0x0000, 0x0207, 0x8000, + 0x040b, 0xc000, 0x0417, 0xe000, + 0x0e29, 0xe000, 0x0750, 0xc000, + 0x03a0, 0x8000, 0x01d9, 0x8000, + 0x00eb, 0x0000, 0x0076, 0x0000, + 0x003c, 0x0000, 0x0010, 0x0000, + /* Plane 1 */ + 0x0020, 0x0000, 0x0070, 0x0000, + 0x00c0, 0x0000, 0x01a4, 0x0000, + 0x0352, 0x0000, 0x06ab, 0x0000, + 0x0d53, 0x8000, 0x12a1, 0xc000, + 0x1d46, 0xc000, 0x0e89, 0x0000, + 0x0710, 0x0000, 0x03ac, 0x8000, + 0x01d1, 0x0000, 0x00e2, 0x0000, + 0x0074, 0x0000, 0x0000, 0x0000 + }, + /* Spray Paint + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x0186, 0xc000, + 0x01bf, 0x0000, 0x07ec, 0xc000, + 0x0423, 0x0000, 0x0ff0, 0xc000, + 0x1008, 0x0000, 0x1078, 0x0000, + 0x1078, 0x0000, 0x1078, 0x0000, + 0x1078, 0x0000, 0x1078, 0x0000, + 0x1008, 0x0000, 0x1038, 0x0000, + 0x1008, 0x0000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0006, 0xc000, + 0x003f, 0x0000, 0x000c, 0xc000, + 0x0243, 0x0000, 0x0000, 0xc000, + 0x02e0, 0x0000, 0x0440, 0x0000, + 0x0470, 0x0000, 0x0440, 0x0000, + 0x0470, 0x0000, 0x0440, 0x0000, + 0x0440, 0x0000, 0x0440, 0x0000, + 0x0440, 0x0000, 0x0000, 0x0000 + }, + /* Print + */ + { + /* Plane 0 */ + 0x0000, 0x0000, 0x03fe, 0x0000, + 0x0205, 0x0000, 0x02a7, 0x0000, + 0x0201, 0x0000, 0x02d5, 0x0000, + 0x0201, 0x0000, 0x0601, 0x8000, + 0x1fff, 0xe000, 0x2000, 0x1000, + 0x2803, 0xd000, 0x2000, 0x1000, + 0x3fff, 0xf000, 0x1fff, 0xe000, + 0x0fff, 0xc000, 0x0000, 0x0000, + /* Plane 1 */ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x01fa, 0x0000, 0x0118, 0x0000, + 0x01fe, 0x0000, 0x0102, 0x0000, + 0x01fe, 0x0000, 0x01fe, 0x0000, + 0x0000, 0x0000, 0x1555, 0x4000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + } +}; + +/* Image structures for above data. + */ +struct Image sb_images[] = +{ + { 0, 0, 22, 16, 2, sb_data[0], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[1], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[2], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[3], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[4], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[5], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[6], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[7], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[8], 0x03, 0x00, NULL }, + { 0, 0, 22, 16, 2, sb_data[9], 0x03, 0x00, NULL }, +}; + +/* speedbar window-title help strings. + */ +UBYTE *help_strs[] = +{ + "Erase block and copy it to the clipboard", + "Copy block to the clipboard", + "Paste from clipboard to your project", + "Erase block", + "Mail someone", + "Insert current time", + "Insert current date", + "Disk", + "Spray Paint", + "Print project", + NULL +}; + +/* object/gadget/button id's + */ + +enum +{ + SBID_ERASECLIP=0, + SBID_COPYCLIP, + SBID_PASTECLIP, + SBID_DELETE, + SBID_EMAIL, + SBID_INSTIME, + SBID_INSDATE, + SBID_SAVEDISK, + SBID_PAINT, + SBID_PRINT, + SBID_LAST +}; + +enum +{ + GID_SPEEDBAR=0, + GID_QUIT, + GID_LAST +}; + +enum +{ + WID_MAIN=0, + WID_LAST +}; + +enum +{ + OID_MAIN=0, + OID_LAST +}; + + +/* Create the SpeedBar Exec list. + */ +BOOL make_speedbar_list(struct List *list, struct Image *images, UBYTE **help) +{ + struct Node *node; + WORD i = SBID_ERASECLIP; + + NewList(list); + + while (i < SBID_LAST) + { + if (node = (struct Node *)AllocSpeedButtonNode( + i, /* speed button id! */ + SBNA_Image, images, + SBNA_Help, *help, + SBNA_Enabled, TRUE, + SBNA_Spacing, 2, + SBNA_Highlight, SBH_RECESS, + TAG_DONE)) + { + AddTail(list, node); + } + else + { + PutStr("Allocation failed\n"); + return (FALSE); + } + + images++; + i++; + help++; + } + return(TRUE); +} + + +/* Function to free a SpeedBar Exec List. + */ +VOID free_speedbar_list(struct List *list) +{ + struct Node *node, *nextnode; + + node = list->lh_Head; + while (nextnode = node->ln_Succ) + { + FreeSpeedButtonNode(node); + node = nextnode; + } + NewList(list); +} + + + +int main(void) +{ + struct MsgPort *AppPort; + + struct Window *windows[WID_LAST]; + + struct Gadget *gadgets[GID_LAST]; + + Object *objects[OID_LAST]; + + struct List speedbar_list; + + /* make sure our classes opened... */ + if (!ButtonBase || !SpeedBarBase || !WindowBase || !LayoutBase) + return(30); + + if ( make_speedbar_list(&speedbar_list, sb_images, help_strs) ) + { + if ( AppPort = CreateMsgPort() ) + { + /* Create the window object. + */ + objects[OID_MAIN] = WindowObject, + WA_ScreenTitle, "ClassAct Release 2.0", + WA_Title, "ClassAct SpeedBar Example", + WA_Activate, TRUE, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_SizeGadget, TRUE, + WINDOW_IconifyGadget, TRUE, + WINDOW_IconTitle, "SpeedBar", + WINDOW_AppPort, AppPort, + WINDOW_Position, WPOS_CENTERMOUSE, + WINDOW_ParentGroup, VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_DeferLayout, TRUE, + + LAYOUT_AddChild, gadgets[GID_SPEEDBAR] = SpeedBarObject, + GA_ID, GID_SPEEDBAR, + GA_RelVerify, TRUE, + SPEEDBAR_Orientation, SPEEDBAR_HORIZONTAL, + SPEEDBAR_Buttons, &speedbar_list, + SPEEDBAR_Background, 4, + SpeedBarEnd, + CHILD_MinWidth, 160, + + LAYOUT_AddChild, VGroupObject, + CLASSACT_BackFill, NULL, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_VertAlignment, LALIGN_CENTER, + LAYOUT_HorizAlignment, LALIGN_CENTER, + LAYOUT_BevelStyle, BVS_FIELD, + + LAYOUT_AddImage, LabelObject, + LABEL_Text, "The speedbar supports scrolling list of image\n", + LABEL_Text, "buttons. When more buttons are available than\n", + LABEL_Text, "the visible space, you may scroll the list by\n", + LABEL_Text, "pressing the SHIFT key while clicking the LMB and\n", + LABEL_Text, "dragging the mouse. The speedbar also supports\n", + LABEL_Text, "several options such boolean buttons, and MX groups!\n", + LabelEnd, + LayoutEnd, + + + LAYOUT_AddChild, gadgets[GID_QUIT] = ButtonObject, + GA_ID, GID_QUIT, + GA_RelVerify, TRUE, + GA_Text,"_Quit", + ButtonEnd, + CHILD_WeightedHeight, 0, + + EndGroup, + EndWindow; + + /* Object creation sucessful? + */ + if (objects[OID_MAIN]) + { + /* Open the window. + */ + if (windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN])) + { + ULONG wait, signal, app = (1L << AppPort->mp_SigBit); + ULONG done = FALSE; + ULONG result; + UWORD code; + + /* Obtain the window wait signal mask. + */ + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + + /* Input Event Loop + */ + while (!done) + { + wait = Wait( signal | SIGBREAKF_CTRL_C | app ); + + if ( wait & SIGBREAKF_CTRL_C ) + { + done = TRUE; + } + else + { + while ( (result = CA_HandleInput(objects[OID_MAIN], &code) ) != WMHI_LASTMSG ) + { + switch (result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + windows[WID_MAIN] = NULL; + done = TRUE; + break; + + case WMHI_GADGETUP: + switch (result & WMHI_GADGETMASK) + { + case GID_SPEEDBAR: + printf("Speed Button Selected: %d\n", (int)code ); + switch ((int)code) + { + case SBID_ERASECLIP: + break; + + case SBID_COPYCLIP: + break; + + case SBID_PASTECLIP: + break; + /* ... */ + } + break; + + case GID_QUIT: + done = TRUE; + break; + } + break; + + case WMHI_ICONIFY: + CA_Iconify(objects[OID_MAIN]); + SetAttrs(gadgets[GID_SPEEDBAR], SPEEDBAR_Window, NULL, TAG_DONE); + windows[WID_MAIN] = NULL; + break; + + case WMHI_UNICONIFY: + windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN]); + + if (windows[WID_MAIN]) + { + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + + if (gadgets[GID_SPEEDBAR]) + { + SetAttrs(gadgets[GID_SPEEDBAR], SPEEDBAR_Window, windows[WID_MAIN], TAG_DONE); + } + } + else + { + done = TRUE; // error re-opening window! + } + break; + } + } + } + } + } + + /* Disposing of the window object will + * also close the window if it is + * already opened and it will dispose of + * all objects attached to it. + */ + DisposeObject(objects[OID_MAIN]); + } + + DeleteMsgPort(AppPort); + } + } + + free_speedbar_list(&speedbar_list); + + return(0); +} diff --git a/Examples/SpeedBar/speedbarexample.c.info b/Examples/SpeedBar/speedbarexample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..2e49e7724f810a44895964fbdcd32d72ee710060 GIT binary patch literal 300 zcmaDXz`)1=0^1mb8DtnF7+8UPM)rwq0bo&df{}%RePXQzd;jtVpwuQHW<@B`djMw3 zFo-iSF)){NFe9XZEZ&9V2*g}(>nKkR4VzwnoV{lh*6_6xuHZ-3Y$-+bZU{r^Dv z|Aqfqhd=D$XTI?77DWDk#O)9J8{{wi&#niX^FJP99>`pv@m#*8IVG88nW^O<%UA$f CT2=-C literal 0 HcmV?d00001 diff --git a/Examples/String.info b/Examples/String.info new file mode 100644 index 0000000000000000000000000000000000000000..8340b8d35d46034cf7d794a9292abb3e8f2ef8a0 GIT binary patch literal 628 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 literal 0 HcmV?d00001 diff --git a/Examples/String/stringexample.c b/Examples/String/stringexample.c new file mode 100644 index 0000000..1a59a94 --- /dev/null +++ b/Examples/String/stringexample.c @@ -0,0 +1,318 @@ +;/* String Example +sc link stringexample.c lib lib:classact.lib +quit +*/ + +/** + ** StringExample.c -- String class Example. + ** + ** This is a simple example testing some of the capabilities of the + ** String gadget class. + ** + ** This code opens a window and then creates 2 String gadgets which + ** are subsequently attached to the window's gadget list. One uses + ** and edit hook, and the other does not. Notice that you can tab + ** cycle between them. + **/ + +/* system includes + */ +#include +#include +#include + +#include +#include +#include +#include +#include /* required for string hooks */ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +/* ClassAct includes + */ +#include + + +enum +{ + GID_MAIN=0, + GID_STRING1, + GID_STRING2, + GID_DOWN, + GID_UP, + GID_QUIT, + GID_LAST +}; + +enum +{ + WID_MAIN=0, + WID_LAST +}; + +enum +{ + OID_MAIN=0, + OID_LAST +}; + + +/* hook function typedef + */ +typedef ULONG (*HookFunction)(VOID); + +/* hook function prototype + */ +ULONG __saveds __asm PasswordHook( + register __a0 struct Hook *hook, + register __a2 struct SGWork *sgw, + register __a1 ULONG *msg); + +#define SMAX 24 + +#define PASSWORDCHAR '*' + +UBYTE initialstring[] = "Testing"; + +int main(void) +{ + struct MsgPort *AppPort; + + struct Window *windows[WID_LAST]; + + struct Gadget *gadgets[GID_LAST]; + + Object *objects[OID_LAST]; + + /* make sure our classes opened... */ + if (!ButtonBase || !StringBase || !WindowBase || !LayoutBase) + return(30); + else if ( AppPort = CreateMsgPort() ) + { + struct Hook edithook1; + STRPTR hookdata1; + + /* The password edit hook needs special care, we need to look at + * edithook.h_Data to set/get the real password text. Additionally, + * we need to Alloc/Free maxchars bytes for its buffer! + */ + hookdata1 = (STRPTR)AllocVec( (SMAX + 2), MEMF_ANY | MEMF_CLEAR); + + if (hookdata1) + { + CA_SetUpHook(edithook1, PasswordHook, (STRPTR)hookdata1); + + /* copy real string data into the hidden buffer */ + strcpy(hookdata1, (STRPTR)initialstring); + + /* re-initialize real/visible string with password chars */ + memset((void *)initialstring, PASSWORDCHAR, strlen((STRPTR)initialstring)); + + /* Create the window object. + */ + objects[OID_MAIN] = WindowObject, + WA_ScreenTitle, "ClassAct Release 2.0", + WA_Title, "ClassAct String Example", + WA_Activate, TRUE, + WA_DepthGadget, TRUE, + WA_DragBar, TRUE, + WA_CloseGadget, TRUE, + WA_SizeGadget, TRUE, + WINDOW_IconifyGadget, TRUE, + WINDOW_IconTitle, "String", + WINDOW_AppPort, AppPort, + WINDOW_Position, WPOS_CENTERMOUSE, + WINDOW_ParentGroup, gadgets[GID_MAIN] = VGroupObject, + LAYOUT_SpaceOuter, TRUE, + LAYOUT_DeferLayout, TRUE, + + LAYOUT_AddChild, gadgets[GID_STRING1] = StringObject, + GA_ID, GID_STRING1, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + STRINGA_MinVisible, 10, + STRINGA_MaxChars, SMAX, + StringEnd, + CHILD_NominalSize, TRUE, + CHILD_Label, LabelObject, LABEL_Text, "String _1", LabelEnd, + + LAYOUT_AddChild, gadgets[GID_STRING2] = StringObject, + GA_ID, GID_STRING2, + GA_RelVerify, TRUE, + GA_TabCycle, TRUE, + STRINGA_MinVisible, 10, + STRINGA_MaxChars, SMAX, + STRINGA_EditHook, &edithook1, + STRINGA_TextVal, initialstring, + StringEnd, + CHILD_Label, LabelObject, LABEL_Text, "String _2", LabelEnd, + + LAYOUT_AddChild, ButtonObject, + GA_ID, GID_QUIT, + GA_RelVerify, TRUE, + GA_Text,"_Quit", + ButtonEnd, + CHILD_WeightedHeight, 0, + + EndGroup, + EndWindow; + + /* Object creation sucessful? + */ + if (objects[OID_MAIN]) + { + /* Open the window. + */ + if (windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN])) + { + ULONG wait, signal, app = (1L << AppPort->mp_SigBit); + ULONG done = FALSE; + ULONG result; + UWORD code; + + /* Obtain the window wait signal mask. + */ + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + + /* Activate the first string gadget! + */ + ActivateLayoutGadget( gadgets[GID_MAIN], windows[WID_MAIN], NULL, gadgets[GID_STRING1] ); + + /* Input Event Loop + */ + while (!done) + { + wait = Wait( signal | SIGBREAKF_CTRL_C | app ); + + if ( wait & SIGBREAKF_CTRL_C ) + { + done = TRUE; + } + else + { + while ( (result = CA_HandleInput(objects[OID_MAIN], &code) ) != WMHI_LASTMSG ) + { + switch (result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + windows[WID_MAIN] = NULL; + done = TRUE; + break; + + case WMHI_GADGETUP: + switch (result & WMHI_GADGETMASK) + { + case GID_STRING1: + printf( "Contents: %s\n", ((struct StringInfo *)(gadgets[GID_STRING1]->SpecialInfo))->Buffer); + + break; + + case GID_STRING2: + printf( "Contents: %s\n", hookdata1 ); + break; + + case GID_QUIT: + done = TRUE; + break; + } + break; + + case WMHI_ICONIFY: + CA_Iconify(objects[OID_MAIN]); + windows[WID_MAIN] = NULL; + break; + + case WMHI_UNICONIFY: + windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN]); + + if (windows[WID_MAIN]) + { + GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal); + } + else + { + done = TRUE; // error re-opening window! + } + break; + } + } + } + } + } + + /* Disposing of the window object will also close the window if it is + * already opened, and it will dispose of the layout object attached to it. + */ + DisposeObject(objects[OID_MAIN]); + } + + /* free the password hook buffer + */ + FreeVec(hookdata1); + } + + DeleteMsgPort(AppPort); + } + + return(0); +} + + + +/** Password Entry Hook + **/ + +ULONG __saveds __asm PasswordHook(register __a0 struct Hook *hook, register __a2 struct SGWork *sgw, register __a1 ULONG *msg) +{ + STRPTR pass_ptr = (STRPTR)hook->h_Data; + + sgw->BufferPos = sgw->NumChars; + + if(*msg == SGH_KEY) + { + switch (sgw->EditOp) + { + case EO_INSERTCHAR: + if(pass_ptr) + { + pass_ptr[sgw->BufferPos - 1] = sgw->WorkBuffer[sgw->BufferPos - 1]; + pass_ptr[sgw->BufferPos] = '\0'; + } + sgw->WorkBuffer[sgw->BufferPos - 1] = (UBYTE)PASSWORDCHAR; + break; + + case EO_DELBACKWARD: + if(pass_ptr) + { + pass_ptr[sgw->BufferPos] = '\0'; + } + break; + + default: + sgw->Actions &= ~SGA_USE; + break; + } + + sgw->Actions |= SGA_REDISPLAY; + return (~0L); + } + if(*msg == SGH_CLICK) + { + sgw->BufferPos = sgw->NumChars; + return (~0L); + } + return(0L); +} diff --git a/Examples/String/stringexample.c.info b/Examples/String/stringexample.c.info new file mode 100644 index 0000000000000000000000000000000000000000..71990133d3865841b435f2148d8d1af9324fd1b3 GIT binary patch literal 300 zcmaDXz`)1=0y`Om8DtnF7+8UPM)oxr^|NsBP{{R0k{QbZG!~O^L7ycfQ|FEBd|H5Ae_7D3Q*f0F%zx`p4eDj5W_x}Uw z{}=ve9saO~pZUVSTM+sG5w}0=Z;-$6Kf4}m&i{Cbc_4Fv#&h|W=9FZXWu}&cEMoxx D{2W%h literal 0 HcmV?d00001 diff --git a/Install_Classes b/Install_Classes new file mode 100644 index 0000000..bed8e37 --- /dev/null +++ b/Install_Classes @@ -0,0 +1,393 @@ +; --------------------------------------------------------------------------- + +; ************* PLEASE COPY THIS PROCEDURE ALONG WITH THE STRINGS IT USES +; ************* TO THE INSTALLER SCRIPT OF YOUR CLASSACT APPLICATION. +; ************* IT WILL TAKE CARE OF INSTALLING THE CLASSACT CLASSES YOU +; ************* PROVIDED WITH YOUR APPLICATION TO THE USER'S SYSTEM. + +; $VER: ClassAct_Install 1.16 (9.3.97) by Osma Ahvenlampi + +(set cpu (database "cpu")) +(set cpu020 (and (<> cpu "68000") (<> cpu "68010"))) +(set v39 (>= (/ (getversion "exec.library" (resident)) 65536) 39)) + +; percentage of the size of included ClassAct classes versus the whole +; distribution (ie. total "complete" percentage after ClassAct is installed) + +(set classact-complete 90) + +; ClassAct installer scripts + +;*********************************** +;English Strings +;*********************************** +(set #classdest-prompt "Please select the directory where you want the ClassAct classes installed.\n(See help for details)") +(set #classdest-help (cat "ClassAct is a GUI toolkit consisting of shared BOOPSI classes.\n\nSome programs require some or all of the ClassAct classes installed on your system. " + (if v39 (cat "OS 3.0 has a standard directory for BOOPSI classes, the SYS:Classes directory. It is recommended that you install ClassAct there.") + (cat "OS 2.0 does not have a standard place for disk resident BOOPSI classes. On OS 3.0 these classes are stored in the SYS:Classes directory. It is recommended that you create this directory and install ClassAct there.\nThis directory must be added in the LIBS: assign. This can be done by placing the command\nAssign >NIL: LIBS: SYS:Classes ADD\nto User-Startup. This installer will do this for you.") + ) + ) + +) +(set #classes-020 "Do you want to use the OS 3.0, 020 optimised version of ClassAct?") +(set #help-020 "Some ClassAct libraries have versions optimised for use on 020 or better equipped OS 3.0 or later machines. If your Amiga is such equipped, you should install these. The 68000/2.0 versions will also work, but are slightly slower.") +(set #noclasses-message "The directory you selected for your ClassAct classes is not a part of the LIBS: assign.\n\nIt is necessary to add this assign so that the classes will be found properly.") +(set #creating-dir "Creating directory ") +(set #usbackup-prompt "User-Startup will now be backed up.") +(set #usbackup-help "This installer will next make a modification in User-Startup. Before doing this the old User-Startup will be backed up to S:User-Startup.old") +(set #adding-1 "Adding ") +(set #adding-2 " to LIBS: assign\n") +(set #adding-help "This is necessary so that the custom classes can be found.") +(set #junod-button "It seems you have a late Commodore 'V42' button.gadget installed on your system.\n\nClassAct's button.gadget is far more capable than this gadget, and we recommend that you replace it. The ClassAct button.gadget is backwards compatible to the Commodore gadget. Do you wish to back up the Commodore gadget and replace it with the ClassAct version?") +(set #junod-backed "The Commodore 'V42' button.gadget has been backed up with the name button.gadget.v42.\n\nThe ClassAct button.gadget will be installed in its place.") +(set #junod-kept "The Commodore 'V42' button.gadget was not replaced with the more capable ClassAct version.\n\nPrograms depending on the availability of ClassAct-only features will be likely to work wrong.") +;(set #caprefs-message "CAPrefs is a small utility that sets some user preferences for ClassAct applications. These include the bevel style (Thin/Gadtools/Xen), window backfills, and group label details.\n\nPlease use the ClassAct GUI prefs editor to alter the default settings provided. ClassAct prefs will be installed in your system Prefs drawer.\n\n") +(set #caprefs-message "ClassAct has several user-configurable aspects that affect the look of ClassAct interfaces.\n\nThese settings can be changed using the ClassAct preferences tool that will be installed in yout Prefs drawer.\n\nA small tool, CAPrefs, will be added to your user-startup to load the settings on reboot.") +(set #caprefs-startup-1 "Adding the command\n\n") +(set #caprefs-startup-2 "\n\nTo your s:User-Startup.") +(set #decompressing-classact "Compressed ClassAct distribution detected\n\nDecompressing to RAM:") +(set #deleting-cltmp "Deleting temporary files") + +;*********************************** +;Spanish Strings +;*********************************** +(if (= @language "espańol") +( + (set #classdest-prompt "Por favor, seleccione el directorio donde desea instalar las clases de ClassAct.\n(Vea la ayuda para más detalles)") + (set #classdest-help (cat "ClassAct es un kit de interface gráfica consistente es clases compartidas BOOPSI.\n\nAlgunos programas requieren que algunas o todas de las clases de ClassAct estén instaladas en su sistema. " + + (if v39 (cat "El OS 3.0 tiene un directorio estándar para las clases BOOPSI: el directorio SYS:Classes. Se recomienda que instale ClassAct ahí.") + (cat "El OS 2.0 no tiene un sitio estándar para las clases BOOPSI residentes en disco. En el OS 3.0 esas clases son almacenadas en el directorio SYS:Classes. Se recomienda que cree este directorio e instale ClassAct ahí.\nEste directorio debe ser ańadido a la asignación de LIBS:. Esto puede ser hecho colocando el comando\nAssign >NIL: LIBS: SYS:Classes ADD\nal User-Startup. Este instalador lo hará por usted.") + ) + ) + ) + (set #classes-020 "żQuiere usar la versión optimizada para OS 3.0 y 020 de ClassAct?") + (set #help-020 "Algunas librerías de ClassAct tienen versiones optimizadas para el uso en máquinas con OS 3.0 y 020 o superior. Si su Amiga es una de tales máquinas debería instalar estas. Las versiones 68000/2.0 también funcionarán, pero son ligeramente más lentas") + (set #noclasses-message "El subdirectorio que seleccionó para sus clases ClassAct no forma parte de la asignación de LIBS:.\n\nEs necesario ańadir esta asignación para que las clases puedan ser localizadas adecuadamente.") + (set #creating-dir "Creando directorio ") + (set #usbackup-prompt "Ahora se hará una copia de seguridad del User-Startup.") + (set #usbackup-help "Este instalador hará ahora una modificación en el User-Startup. Antes de hacer esto se hará una copia de seguridad del User-Startup en S:User-Startup.old") + (set #adding-1 "Ańadiendo ") + (set #adding-2 "a la asignación de LIBS:\n") + (set #adding-help "Esto es necesario para que las clases puedan ser encontradas.") + (set #junod-button "Parece que tiene el último button.gadget de Comodore ('V42') instalado en su sistema.\n\nEl button.gadget de ClassAct es superior a este gadget y le recomendamos que lo remplace. El button.gadget de ClassAct es compatible con el de Commodore. żDesea hacer una copia de seguridad del gadget de Commodore y remplazarlo por la versión de ClassAct?") + (set #junod-backed "Se ha hecho una copia de seguridad del button.gadget 'V42' de Commodore con el nombre button.gadget.v42.\n\nEl button.gadget de ClassAct será instalado en su lugar.") + (set #junod-kept "El button.gadget 'V42' de Commodore no fué remplazado con la versión superior de ClassAct.\n\nLos programas que dependan de la disponibilidad de las características de la versión de ClassAct funcionarán mal probablemente") + ;(set #caprefs-message "CAPrefs es una pequeńa utilidad que inicializa algunas preferencias del usuario para las aplicaciones ClassAct. Estas incluyen el estilo de resaltado (Fino/GadTools/Xen), relleno de ventanas, y detalles de las etiquetas de grupo.\n\nPor favor, use las preferencias de interface de ClassAct en su cajón de sistema 'Prefs' .\n\n") + (set #caprefs-message "ClasAct tiene varios aspectos configurables por el usuario que afectan a la apariencia de las interfaces ClassAct.\n\nEstos ajustes pueden ser modificados usando la herramienta de preferencias de ClassAct que será instalada en su cajón 'Prefs'.\n\nUna pequeńa herramienta, CAPrefs, será ańadida a su user-startup para cargar los ajustes al arrancar.") + (set #caprefs-startup-1 "Ańadiendo el comando\n\n") + (set #caprefs-startup-2 "\n\nA su s:User-Startup.") + (set #decompressing-classact "Distribución de Classact comprimida detectada\n\nDescomprimiendo a RAM:") + (set #deleteing-cltmp "Borrando ficheros temporales") +) +) + +;*********************************** +; Italian Strings +;*********************************** +(if (= @language "italiano") +( + (set #classdest-prompt "Per favore scegli la directory in cui vuoi installare le classi ClassAct.\n(Vedi Aiuto per i dettagli)") + (set #classdest-help (cat "ClassAct č un toolkit GUI che consiste di classi BOOPSI condivise.\n\nCerti programmi richiedono che alcune o tutte le classi ClassAct siano installate sul tuo sistema. " + (if v39 (cat "Il SO 3.0 ha una directory standard per le classi BOOPSI, la directory SYS:Classes. Si raccomanda d'installare ClassAct proprio lě.") + (cat "Il SO 2.0 non ha un posto standard per le classi BOOPSI residenti su disco. Nell'OS 3.0 queste classi sono immagazzinate nella directory SYS:Classes. Si raccomanda di creare questa directory e d'installarvi ClassAct.\nQuesta directory dev'essere aggiunta nell'assign LIBS:. Ciň puň essere fatto mettendo il comando\nAssign >NIL: LIBS: SYS:Classes ADD\nnella User-Startup. Questo script d'installazione lo farŕ per te.") + ) + ) + ) + (set #classes-020 "Vuoi usare la versione ottimizzata per SO 3.0 e CPU 020 di ClassAct?") + (set #help-020 "Alcune librerie ClassAct hanno versioni ottimizate per l'uso su macchine equipaggiate con una CPU 020 o superiore e il SO 3.0. Se il tuo Amiga é cosě equipaggiato, dovresti installarle. Le versioni 68000/2.0 funzioneranno comunque, ma sono piů lente.") + (set #noclasses-message "La directory che hai scelto per le tue classi ClassAct non é parte dell'assign LIBS:.\n\nE' necessario aggiungere questo assegnamento affinché le classi siano trovate correttamente.") + (set #creating-dir "Creo la directory ") + (set #usbackup-prompt "La User-Startup sarŕ ora copiata per sicurezza.") + (set #usbackup-help "Questa installazione ora modificherŕ la User-Startup. Prima di fare ciň, la vecchia User-Startup sarŕ copiata per sicurezza in S:User-Startup.old") + (set #adding-1 "Aggiungo ") + (set #adding-2 " all'assign LIBS:\n") + (set #adding-help "Questo č necessario per far trovare al sistema le classi custom.") + (set #junod-button "Sembra che hai installato un recente button.gadget 'V42' della Commodore sul tuo sistema.\n\nIl button.gadget di ClassAct é molto piů potente di questo gadget, e raccomandiamo di sostituirlo. Il button.gadget di ClassAct é compatibile con il gadget Commodore. Vuoi copiare per sicurezza il gadget Commodore e sostituirlo con la versione ClassAct?") + (set #junod-backed "Il button.gadget della Commodore 'V42' é stato copiato per sicurezza col nome button.gadget.v42.\n\nIl button.gadget di ClassAct sarŕ installato al suo posto.") + (set #junod-kept "Il button.gadget 'V42' della Commodore non é stato sostituito dalla versione ClassAct piů potente.\n\nI programmi che dipendono dalla disponibilitŕ delle caratteristiche di ClassAct probabilmente funzioneranno male.") + ;(set #caprefs-message "CAPrefs č una piccola utility che setta alcune preferenze dell'utente per le applicazioni ClassAct. Tra queste, lo stile dei bevel (Thin/Gadtools/Xen), i backfill delle finestre, ed il dettaglio della group label.\n\nPer favore usa l'editor di preferenze ClassAct GUI per modificare i settaggi standard forniti. ClassAct prefs sarŕ installato nel cassetto Prefs del tuo sistema.\n\n") + (set #caprefs-message "ClassAct ha diversi aspetti configurabili dall'utente che modificano l'aspetto delle interfacce ClassAct.\n\nQuesti settaggi possono essere cambiati usando il programma di preferenze ClassAct sarŕ installato nel tuo cassetto Prefs.\n\nUna piccola utility, CAPrefs, sarŕ aggiunta alla tua user-startup per caricare i settaggi al reboot.") + (set #caprefs-startup-1 "Aggiungo il comando\n\n") + (set #caprefs-startup-2 "\n\nalla tua S:User-Startup.") + (set #decompressing-classact "Trovata una distribuzione ClassAct compressa\n\nLa decomprimo in RAM:") + (set #deleting-cltmp "Cancello i file temporanei") +) +) + +;*********************************** +; Swedish Strings +;*********************************** +(if (= @language "svenska") +( +(set #classdest-prompt "Var god välj den lĺda där du vill installera ClassAct-klasserna.\n(Se hjälpen för detaljer.)") +(set #classdest-help (cat "ClassAct är en verktygslĺda för skapandet av användargränssnitt (GUI), som bestĺr av ett antal sĺ kallade delade BOOPSI-klasser.\n\nEn del program kräver att en del, eller alla, ClassAct-klasser är installerade i din Amiga. " + + (if v39 (cat "OS 3.0 har en standardlĺda för BOOPSI-klasser, Sys:Classes. Det rekommenderas att du installerar ClassAct där.") + (cat "OS 2.0 har inte nĺgon standardlĺda för diskbaserade BOOPSI-klasser. I OS 3.0 lagras sĺdana klasser i lĺdan Sys:Classes. Det rekommenderas att du skapar denna lĺda, och installerar ClassAct där.\nDenna lĺda mĺste vara en del av Libs:-tilldelningen. Detta kan göras genom att placera kommandot\nAssign >NIL: Libs: Sys:Classes ADD\ntill filen S:User-Startup. Den här installeraren kommer att göra det ĺt dig.") + ) + ) + +) + +(set #classes-020 "Vill du använda OS 3.0-versionen av ClassAct, som är optimerad för en 68020?") +(set #help-020 "Nĺgra ClassAct-klasser finns i versioner som är optmierade för en 68020 och OS 3.0 eller bättre. Om din Amiga har sĺdan utrustning (eller bättre), sĺ bör du installera dem. Versionerna för 68000/2.0 fungerar ocksĺ, men de är nĺgot lĺngsammare.") +(set #noclasses-message "Den lĺda du har valt för ClassAct-klasserna är inte en del av Libs:-tilldelningen.\n\nDet är nödvändigt att lägga till denna tilldelning, sĺ att klasserna kan hittas utan problem.") +(set #creating-dir "Skapar lĺdan ") +(set #usbackup-prompt "S:User-Startup kommer nu att backas upp.") +(set #usbackup-help "Den här installeraren kommer strax att modifiera filen S:User-Startup. Innan detta görs, kommer den gamla S:User-Startup att backas upp till S:User-Startup.old") +(set #adding-1 "Lägger till ") +(set #adding-2 " till Libs:-tilldelningen\n") +(set #adding-help "Detta mĺste göras för att klasserna ska kunna hittas.") +(set #junod-button "Det ser ut som om du har Commodores 'V42' button.gadget installed i din Amiga.\n\nClassActs button.gadget kan mycket mer än denna knapp, och vi rekommenderar att du ersätter den. ClassAct-versionen av button.gadget är bakĺtkompatibel med Commodore-knappen. Vill du backa upp Commodore-knappen, och ersätta den med ClassAct-versionen?") +(set #junod-backed "Commodores 'V42' button.gadget har backats upp som button.gadget.v42.\n\nClassActs button.gadget kommer att installeras istället.") +(set #junod-kept "Commodores 'V42' button.gadget har inte ersatts av den mer kapabla ClassAct-versionen.\n\nProgram som förlitar sig pĺ tillgängligheten av ClassAct-specifika funktioner kommer troligen inte att fungera som de ska.") + +;(set #caprefs-message "CAPrefs är ett litet program som sätter användarinställningarna för ClassAct-program. Dessa inställningar inkluderar ramstil (smal/gadtools/xen), fönsterbakgrunder samt detaljer rörande gruppetiketter.\n\nVar god använd ClassActs grafiska inställningsredigerare för att ändra de förvalda inställningarna. ClassActs inställningsredigerare kommer att installeras i din Amigas Prefs-lĺda.\n\n") + +(set #caprefs-message "ClassAct har flera användardefinierbara aspekter som pĺverkar hur ClassAct-gränssnitt ser ut.\n\nDessa inställningar kan ändras genom att använda ClassActs inställningsredigerare, som kommer att installeras i din Amigas Prefs-lĺda.\n\nEtt litet program, CAPrefs, kommer att läggas till din S:User-Startup, för att läsa in inställningarna vid systemuppstart.") +(set #caprefs-startup-1 "Lägger till kommandot\n\n") +(set #caprefs-startup-2 "\n\ntill din s:User-Startup.") +(set #decompressing-classact "Komprimerad ClassAct-distribution upptäckt\n\nPackar upp till Ram:") +(set #deleting-cltmp "Raderar temporära filer") +) +) + + +(procedure install-classact ; call this procedure to copy the classes included in the Classes directory +; in your distribution dir. + + (if (exists "ClassAct.lha") ; ClassAct is compressed - need to decompress first + ( ; Distribution includes LHEX + (working (cat #decompressing-classact)) + +; ClassAct.lha contains paths/files "Classes/*", "C/CheckAssign", "Prefs/CAPrefs" and "Prefs/ClassAct" + + (run "lhex -aqfw=ram:ClassAct/ x ClassAct.lha") + (set #classact-source "RAM:ClassAct") + ) + (set #classact-source (pathonly @icon)) + ) + (if (exists "ClassAct.lzx") ; ClassAct is compressed - need to decompress first + ( ; Distribution includes UNLZX + (working (cat #decompressing-classact)) + +; ClassAct.lzx contains paths/files "Classes/*", "C/CheckAssign", "Prefs/CAPrefs" and "Prefs/ClassAct" + + (run "unlzx -amq x ClassAct.lzx ram:ClassAct/") + (set #classact-source "RAM:ClassAct") + ) + (set #classact-source (pathonly @icon)) + ) + + (if (exists (tackon #classact-source "Classes")) ; The archive contains a ClassAct library update. + ( + (set comp-dest (/ (* classact-complete 2) 10)) + (set comp-libs (/ (* classact-complete 3) 10)) + (set comp-dirs (/ (* classact-complete 4) 10)) + (set comp-junod (/ (* classact-complete 5) 10)) + (set comp-020 (/ (* classact-complete 6) 10)) + (set comp-gad (/ (* classact-complete 7) 10)) + (set comp-im (/ (* classact-complete 8) 10)) + (set comp-prefs (/ (* classact-complete 9) 10)) + + ; has the user installed ClassAct in CLASSACT: ? + (set #classact-dest (getassign "CLASSACT" "A")) + (set @default-dest #classact-dest) + (if (= #classact-dest "") (set #classact-dest "SYS:Classes")) + + ; is ClassAct already in SYS:Classes ? + (if (or (not (exists (tackon #classact-dest "Gadgets/layout.gadget") (noreq))) + (= @user-level 2)) + ; no, ask where it should be placed + (set #classact-dest + (askdir + (prompt #classdest-prompt) + (help #classdest-help) + (default #classact-dest) + (newpath) + ) + ) + ) + + (complete comp-dest) + + (if (<> (run (cat "\"" (tackon #classact-source "C/CheckAssign\"") " LIBS: " #classact-dest)) 0) + ( + (message #noclasses-message) + (if (not (exists #classact-dest)) + (makedir #classact-dest (prompt (cat #creating-dir #classact-dest))) + ) + (set #addassign (cat "Assign >NIL: LIBS: " #classact-dest " ADD\n")) + (startup "CLASSACT" + (command #addassign) + (prompt (cat #adding-1 #classact-dest #adding-2)) + (help #adding-help) + ) + (run (#addassign)) + ) + ) + + (complete comp-libs) + + (set #classact-gadgets (tackon #classact-dest "Gadgets")) + (set #classact-images (tackon #classact-dest "Images")) + + (if (not (exists #classact-gadgets (noreq))) + (makedir #classact-images + (prompt (cat #creating-dir #classact-gadgets)) + ) + ) + + (if (not (exists #classact-images (noreq))) + (makedir #classact-images + (prompt (cat #creating-dir #classact-images)) + ) + ) + + (complete comp-dirs) + + (if (exists "SYS:Classes/Gadgets/button.gadget") + (if (and (= 2752514 (getversion "SYS:Classes/Gadgets/button.gadget")) + (= 4868 (getsize "SYS:Classes/Gadgets/button.gadget"))) + (if (askbool (prompt #junod-button) (help @askbool-help) (default 1)) + ( + (rename "SYS:Classes/Gadgets/button.gadget" "SYS:Classes/Gadgets/button.gadget.v42") + (message #junod-backed) + ) + (message #junod-kept) + ) + ) + ) + + (complete comp-junod) + + (if (and (and cpu020 v39) (exists (tackon #classact-source "Classes/Gadgets/layout.gadget.020"))) + (set classes-020 (askbool (prompt #classes-020) (help #help-020) (default 1))) + (set classes-020 0) + ) + + (complete comp-020) + + (set #source-path (tackon #classact-source "Classes/Gadgets")) + (foreach #source-path "#?.gadget" + ( + (set thislib (tackon #source-path @each-name)) + (if (and classes-020 (exists (cat thislib ".020"))) + (set thislib (cat thislib ".020")) + ) + (copylib (source thislib) + (dest #classact-gadgets) + (newname @each-name) + (prompt (cat #installing @each-name)) + (help #classdest-help) + (optional "force" "askuser") + ) + ) + ) + + (complete comp-gad) + + (set #source-path (tackon #classact-source "Classes/Images")) + (foreach #source-path "#?.image" + ( + (set thislib (tackon #source-path @each-name)) + (if (and classes-020 (exists (cat thislib ".020"))) + (set thislib (cat thislib ".020")) + ) + (copylib (source thislib) + (dest #classact-images) + (newname @each-name) + (prompt (cat #installing @each-name)) + (help #classdest-help) + (optional "force" "askuser") + ) + ) + ) + + (complete comp-im) + + (set #source-path (tackon #classact-source "Classes")) + (foreach #source-path "#?.class" + ( + (set thislib (tackon #source-path @each-name)) + (if (and classes-020 (exists (cat thislib ".020"))) + (set thislib (cat thislib ".020")) + ) + (copylib (source thislib) + (dest #classact-dest) + (newname @each-name) + (prompt (cat #installing @each-name)) + (help #classdest-help) + (optional "force" "askuser") + ) + ) + ) + ) + ) + (if (exists (tackon #classact-source "Prefs/ClassAct")) ; The archive contains ClassAct prefs tools + ( + (message #caprefs-message) + + (copylib (source (tackon #classact-source "Prefs/CAPrefs")) + (dest "C:") + (prompt (cat #installing "CAPrefs")) + ) + (copylib (source (tackon #classact-source "Prefs/ClassAct")) + (dest "SYS:Prefs") + (prompt (cat #installing "ClassAct Prefs")) + (infos) + ) + + (complete comp-prefs) + + (if (not (exists "ENVARC:ClassAct" (noreq))) + ( + (makedir "ENVARC:ClassAct" + (prompt (cat #creating-dir "ENVARC:ClassAct")) + ) + (textfile (dest "ENVARC:ClassAct/ClassAct") + (append "") + ) + ) + ) + (set caprefs-cmd "C:CAPrefs >NIL:\n") + + (startup "CAPREFS" + (prompt (cat #caprefs-startup-1 caprefs-cmd #caprefs-startup-2)) + (help #caprefs-message) + (command caprefs-cmd) + ) + ) + ) + + (if (or (exists "ClassAct.lha") (exists "ClassAct.lzx")) + (run "C:Delete RAM:ClassAct ALL" + +; (delete "RAM:ClassAct" (all) + + (prompt #deleting-cltmp) + ) + ) + + (complete classact-complete) ) + +; ************** END OF CLASSACT INSTALL PROCEDURE. COPY THE BLOCK ABOVE +; ************** TO YOUR CLASSACT APPLICATION INSTALLER. + +; --------------------------------------------------------------------------- + +(set #welcome "This program will install the ClassAct shared gadget classes on your system.\n") + +(complete 0) + +(if (< (/ (getversion "exec.library" (resident)) 65536) 37) + + (abort "This program requires OS 2.04 or better.") ) + +(welcome #welcome) + +(install-classact) + +(complete 100) + diff --git a/Install_Classes.info b/Install_Classes.info new file mode 100644 index 0000000000000000000000000000000000000000..b8d49360c1cc223687f05624ea9f4020816d581d GIT binary patch literal 712 zcmZ{gO-lk%6o%j1jE%H$+C?p#Ur=p=2t)=yLekL;-IheOk&JW|LIX;;j(&x!{zKb- z#6XLdO}G)9yqz<5M(OKZ?&0A*AMf0GH6cJDnm9%gTS!2IFdmP5R)2-iVLZI-(|w|u zI@NQ_9>)r~h)t{@@wTCe4LtrKd5aeAiN%;l-M8+1Cd={sVxNl8Ai+Xc5iiClk5N(hEBMLF79NHJ4^pUr6CB z)3;bFU3Gh{cKhOnWs~l@U8^~ErI5+BTivdG-s3{5QgRw6g?h%RHcPnzOIEphSS*zb RnYvv$hmvM2BeULd{TC4#8y zy!|1v53(QMo7u3>1_gv1s7XC)lVA^`%lNKa{|E#{=i@EfZ67?^^C!xcE;{1Bw5UR1 zF|BGfhg+-L&SS>jkwhS3Twa~O^ju15=N0Q4&rhCX5BcX>DfP8Il|-%7n>18Gd5jE7 zVvw_gDKn1^;VbR&5QK-u^?mrqx|=&6*?s4r+jqqK1Ma=|Wav$5{d6`@7Rh7@7eB=M Biemr( literal 0 HcmV?d00001 diff --git a/License.doc b/License.doc new file mode 100644 index 0000000..c542624 --- /dev/null +++ b/License.doc @@ -0,0 +1,43 @@ +1. COPYRIGHTS: THIS PRODUCT IS COPYRIGHTED AND OTHERWISE SUBJECT TO +PROPRIETY RIGHTS. + +2. LICENSE: Subject to the terms of this Agreement and the exclusive +rights of the copyright holder as set forth in the Title 17 of the +United States Code, you are hereby granted unrestricted use of this +Product on one computer in your software development environment. + +You may re-distribute this required elements of this Product with +your product with the following exceptions; + +A) Product documentation, otherwise known as "AutoDocs" and, + +B) Compiler "Include files" may NOT be distributed, transmitted + or reverse engineered in any form without prior written approval + from the Christopher Aldi, Timothy Aston, Osma Ahvenlampi and + Petter Nilsen, otherwise known as "ClassAct Development Team". + +C) The ClassAct distribution license is NOT transferable. Class + re-distribution rights are granted to the original purchaser or + company only. If another company manufactures and/or markets your + product then they are subject to a commercial distribution license + for the classes. + +3. DURATION: This Agreement is effective until terminated. If you fail +to comply with any term or condition of this Agreement this License +will terminate. You may also terminate this License at any time. Upon +doing so you will agree to immediatly cease use and re-distribution and +Destroy all copies of this Product. + +4. DISCLAIMER: This software is provided "as is". No representations or +warranties are made with respect to the accuracy, reliability, performance, +currentness, or operation of this software, and all use is at your own risk. +Neither Finale Development, Inc. nor the authors assume any responsibility +or liability what so ever with respect to your use of this software. + +5. ROYALTY: There is no royalty to paid on this product except as noted below; + +A) Product is integrated or bundled with the Amiga Operation System or + compatible. + +B) Product is bundled in software pack that is supplied with an + Amiga Computer or compatible. diff --git a/License.doc.info b/License.doc.info new file mode 100644 index 0000000000000000000000000000000000000000..5f08611ea97709e3e5cac602e1c28cc33d9b9bea GIT binary patch literal 468 zcmaDXz`)1=0`nNG7|a;N8CZaPM)qYv31Crlf{}%ReR}E-_DLNYK&e?ktbA|Nnm&z|{XA3|B)zAOJywB(4JaAi5MtUk!!OAbu^F9~us# zL3~ySAFLn5{|n{AXps9Ef#PWHX#j~s0GDrRPDy52W@z9)Q_q z3}OsS46I*QFe9XZ#zFuOcDey5uCenft@NADak3v*_X&>qrnGFhx2v#pRiPnpY6sHr%;;$EFzV z{%c=I@s2BNsf6f`-S3ER^Yipd$}VtXomHJ{mEA)`*AG#xh#L&GpIDO@qa*elSM4^$ z7tannjeVBRz@Cfp`AS0!UvJ^v#+@my#J;pG98`W^oT6`Mc(dZ3=ePANkx6IZ6h~El zro6Jzq2*c4d~?@6b2_0t;_#Gqjh$BOz5mBp)$Tavrr+%vZelDi=5!@{kz2MGQE^_RSX literal 0 HcmV?d00001 diff --git a/PreView!/PreView0.iff b/PreView!/PreView0.iff new file mode 100644 index 0000000000000000000000000000000000000000..0e15c36a66c784bd29ba6d0befbe74c196b43c72 GIT binary patch literal 58816 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

    bn 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 literal 0 HcmV?d00001 diff --git a/PreView!/PreView0.iff.info b/PreView!/PreView0.iff.info new file mode 100644 index 0000000000000000000000000000000000000000..def080e2a0dc4700d6e83d38aa4b739303fee88e GIT binary patch literal 530 zcmaDXz`)1=0(=ZY3}y`C3@i-H423}QentiM+bJA z_(4YeKLe%T(41xm+xG_H4ls*{p&l&$2k2)I_`z^B6a)egG;3(6E0BK=Xu$dZ7Z~mp zL+Cr7|Nn0X^6&hg52g42-~JcG-z?bP0i-`yy*I7~sZTBk(`?tvjlN%CxZmUAZfpsp k!S>;%FM!=AfN%%YT@6ql04c8A(wvgavdq+SkQg+m0mlB>%>V!Z literal 0 HcmV?d00001 diff --git a/PreView!/PreView1.iff b/PreView!/PreView1.iff new file mode 100644 index 0000000000000000000000000000000000000000..fd1693a7178c2f8b5caffefb67c1eb7a5891f720 GIT binary patch literal 44490 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 literal 0 HcmV?d00001 diff --git a/PreView!/PreView1.iff.info b/PreView!/PreView1.iff.info new file mode 100644 index 0000000000000000000000000000000000000000..855a64b5ad44b218223eba65396e11efddc5669b GIT binary patch literal 530 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 literal 0 HcmV?d00001 diff --git a/PreView!/PreView2.iff.info b/PreView!/PreView2.iff.info new file mode 100644 index 0000000000000000000000000000000000000000..d3afbb3363259df70d4a26109a4c0be430035431 GIT binary patch literal 530 zcmaDXz`)1=0(=Zk3}y`C3@i-H425% z13$=!|7W1|8=BMXVEf)6+yQ3sFw}#^{{a0A0zVk8hJrunTo^P%+q|J(n9_?rdWJAm}(s`tj#Aoa=RV4CfExzYCv4EK9n+>I@P kG}u1eG$aBA5bl7ws{!f*AjOqinp2WlmYG@(5`zXc05DA0(*OVf literal 0 HcmV?d00001 diff --git a/PreView!/PreView3.iff b/PreView!/PreView3.iff new file mode 100644 index 0000000000000000000000000000000000000000..526fed1778914d10210682e46fea720f3bb64dcc GIT binary patch literal 42860 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 literal 0 HcmV?d00001 diff --git a/PreView!/PreView3.iff.info b/PreView!/PreView3.iff.info new file mode 100644 index 0000000000000000000000000000000000000000..e4ade50a6e75f3c765c94250f1f430f61ac4713f GIT binary patch literal 530 zcmaDXz`)1=0_hA+3}y`C3@i-H42rffAm{=H1_K5j z27Ztc|Ia|_H#Dc&!S=mDxC6}MVWI&rF0~&Dt{{@D7 z#Sr?==l}oPf&4rF=R@iJ|F{1I@iz;$cL3?nRqu_fLF$vs!8F_Ta-;7T81DDDxEosn lX|R2`=?h@@2_W17byow_2SAD|w=}0Dvn(^U93%z}Y5*X9+Ij#0 literal 0 HcmV?d00001 diff --git a/Prefs.info b/Prefs.info new file mode 100644 index 0000000000000000000000000000000000000000..7f9169f8093f636a53a97bdcdebe77d22fca13f5 GIT binary patch literal 637 zcmZvaF-rqM5QX1fF1II$kyK(OlH#xuM1$3(vQ8sdq_VKKv=DMwSPJ?FvxeLHWK8SZ@%1`?)&I<`?mgbIx9wGU<8>CL||0qps~ zk-a!g#Iq-Nq3u0hjdPxn;0-6vsS=>xwU;+9y0>RP$4bUNcANxXeketGeL*bM&!jSz zbW_t*_knq;A!4#2oO3H6pFCrDT6a%f6C0A{{j?!0>W%zy>YFkz$2zqoY!v4vIY845 z@#@Gm&u{0MBc-m118f!kl)ilGg&EtT=dXBn&&z#{TWs!XbkJqZ5n3!27L0^C3sPng zWi6SGr_Msp8d2u`zgfV#{VZj@Nzbd)uTkZDZMyVR=1r)x(7uN<3#HCNSuQO+vv>Y& Iq0}@mfAojH&j0`b literal 0 HcmV?d00001 diff --git a/Prefs/CAPrefs.doc b/Prefs/CAPrefs.doc new file mode 100644 index 0000000..7d4e8fe --- /dev/null +++ b/Prefs/CAPrefs.doc @@ -0,0 +1,67 @@ + NAME + + CAPrefs -- ClassAct Preferences Daemon + + SYNOPSIS + + CAPrefs BEVELS/K,SPACE=LAYOUTSPACING/K/N,GADGETS/K, + LABELPLACE/K,LABELPEN/K/N,LABELFONT/K,REFRESH/K, + PATTERN/K,FALLBACKFONT/K + + CAPrefs [BEVELS GT|THIN|XEN] [SPACE n] [GADGETS NORMAL|3D] + [LABELPLACE LEFT|RIGHT|CENTER] [LABELPEN n] + [LABELFONT font/size] [REFRESH SIMPLE|SMART] + [PATTERN image] [FALLBACKFONT font/size] + + FUNCTION + + Set up ClassAct preferences. Run this program before any + applications that utilize ClassAct classes. A good place is + early in the user-startup. A graphic preferences editor will + be provided in the near future. + + ARGUMENTS + + BEVELS + GT - GadTools-like 2:1 aspect bevels. The default. + THIN - 1:1 aspect thin bevels. + + SPACE + Spacing between gadgets. Corresponds to pixels in + THIN bevel mode, scaled to bevel width. Default 4. + + GADGETS + NORMAL - standard V37 window border gadgets. The default. + 3D - with SysIHack 3DLOOK, a 3D iconify gadget. + + LABELPLACE + LEFT - left justified group labels. + RIGHT - right justified group labels. + CENTER - centered group labels. The default. + + LABELPEN + Pen number to use for labels. Default is TEXTPEN. + + LABELFONT + Font name and size to use for group labels. Default + is the screen/window font. + + REFRESH + Window refresh type. Simple refresh windows take less + memory but update slower when uncovered from behind other + windows. Smart refresh is quicker but more memory hungry. + Default is smart. + + PATTERN + On OS 3.0, ClassAct window.class can automatically install + a backfill pattern to windows, using any image understood + by the datatypes. This option is the name of that image. + + FALLBACKFONT + Window fallback font in case the default font is too large + to fit the window on the screen. + + EXAMPLE + + CAPrefs BEVELS=THIN SPACE=3 LABELPEN=2 LABELFONT Times/12 + diff --git a/Prefs/CAPrefs.doc.info b/Prefs/CAPrefs.doc.info new file mode 100644 index 0000000000000000000000000000000000000000..d403b613ff38a9e4d2d17c3894c945c0f222c890 GIT binary patch literal 463 zcmZvWI|{-;6h-gkLl7*qQS7W;KuUKY*aRy}Yeh&YiVF|~3u~(|OK=5lAS-Ya{>QoV zAribr&Yb(+gt@jLz~ty5MHdl5h~&^NOk4km2+8hwO!nsmAclI}s8;&+n4*IK;(iIM zk^Zes^FKGbA4q^?tjogt!_1|WZXP(_*8Eg+?lHeyE2TcJM@803y; z@%w$}-YZ>8vXjt+*?H6JIlAY3=bZ1~`ObIFJ%3DO{v)Z6Nqb8~i~o-3l8r>>-*a3! zzVnP*anqWA=MuHs$+8-;ruS1Mw-8C+jF>84xZ%*uboKhyj_PpJ$;x4=OkPI&T|kqr4zwx<_7nB@$hAb)w1D}W%UmrakraM%#urM* z$y8eHZ+7art;!M9aFJt}+*G!;0(n#&Xqw);zqu@Mvgr$XSNO@(?ug0buU_BmK(GZ) zHe2NVt%_E|!ui4dts9dBI#fsDC(pdb{I*R=PbQH%eYD!&bRuR=_D6_5s@_5mxAum9 z23d%9%3EmvFAx3lkZX{fzk20YugInpm42;yO>5_oUALx9erUko^qF$p@6XE6@vg}f zO2=%;GB3qR^2vUbIVGFA)4$%e_$ea9c0+fcFMf_>j^pi;O^bgnlPukEc;*Wy(q3C6 z6!<^15xl0g_kGp=){S0r`{f#P$17?RO($f(tBN4O%wx#wb#ZLBoIoj?l4yEg9wc}5 zAX!>F!_WHt;K&hvHdvOVh(-32#hqyFxRR<9&6ZY$+xO=E%??dtcGjTKs>PFNcF47@ zJ#mZd5AOkj(7j_&hU8u$fzeVv?&!$-9e8| zldK%SrcwDsl4$AQ{PWH-uFsZ;nmgL2Opl`GM5Q08ZSumnHAzuwWB8t=TW#@X8L0>L z6jM4Kt7I+N)=rrwBP8t&OqqJGQpg@$MhjeP!9Q@Hc@(uK^;*ppNZp%BEk)`FnUou; zy_r-MbaevO&=T6;T!D83-b?YW#aqVPjkg=`rQ8Fga?#8F6KtwT?H9262H4}70`Mll zKNM1*WPP80(hVu%Ryl4lVZL0jy{5R+<%f;6B-@XqqqJg2#1gD+ZgDL_smCLZz?75( zra@pr?&2WVimeE% z9vdGT8yXqTShms1+f%8Ll)O1L5FHyDj>}sIMn|LZ0XaF68uJj1j}0Y;#_q`092(sc z8yOzU04N^q9~&7-WV;Q;Q_QUB&iGSPH(zjL;b*)*g^iW6pD#+BmW?g4Td$z7uM?&^2rOhM5 zv7tDmP>xf1<(e8r?v`zFC3rQ}%iV2LGk;qvG(K}H_sGk4keTWuH6rJ3*t8Cn04)>H zZ5q^yvL@hIMwYk@{?WNSKn;$qvK0Puy& zZOCz}6sz7@=9hvU?+#LU{LyJsgL2&0SSi&g?ls%#dOx{R6!^qcHMY$80!F84?$4>B zG4$w}rR*=^ecleW#T#9AH%3?U9{@jAOL4_zMgOmI+bVg!a0bvf+~l(2{q}Y#w0oo~ zcwJRh#O1XFrcNIfzM@twYohJ!Ew)vCy(=9zq3p`|Fk@<)I{hMZZvywNR|J1X6%4JM zbSa^)#iqOOdEn4hYsdo6b17ppG3ABKD|;T{5tq7x^13LU-s7^fp9zhSD_+JBPZj%| z)3LUx>Cd9H$l(_CQbpjkT=e9P??5Zzaotj*bluC5n&3~pmwH?7qRXV(M9ZV{dX@~H z#NlF{l*;Q=&oN`~{a)yS*y~A2)i2zD!5cUZ=zf80M1uo~Z3AONo1-4?#YEp88txzY zwr4YUL88>a?c)QZV*@D-fW93c7#sB_qIZmpk9pK24Q+*kVBn^KghwRcV^r9tfo)ls zUVGE{*chCTR$GUTj-}vla-o|CM@B|LUn|VsMQ{KgHV`iWPYjKYZAy)NyHK4}w0~%1 zHt`I;&55DSTgIZBbV52E5Q_~Z26S+yJj2=T>3nJOCI^PMMw6NnhTw0qez7w(a@)Y> zF9CQ+IURfE*p=1O+ItiB-z+8{nPsOYQyq?ud?#$y~IbC`essj*-*=t)|Y@ zz$n^+R%`y2=o;ZA>uKe{Sac`>G89aVY~I2V>KWKR#*yy9q2U1m=^l)tr8&B4C?QJo zdrT`AjBef%PmPQZ_j3tlC_b1#7}K+IiSa!0feZ9huu`i4d~Q-5?UI(A2L zAnWkkM#dBU!&i;Ts^Q4Vq0M9CkYW}19O#$FM&yxA;CWcyG&IKgBSTJNB-)>;V1SQ+ zF*%Qvyy08T%VyOV<*vGN^eRAmAienAyhX%i9#$wklG++gkQh_iFc1x-p!I{p5haU6_MC)KyvTAX1_rMrWOhC7>fy=arKJz$`3m>V~PL3lN-I`xTaor&n?KDLLk zzB|}1f&+aJNM@6#z7F9U<-J;nuRyPiJo)6{q4C@}Q(pj%U4TNDaS z(B+#iufKegF1;+Ydik(jwqJhD`D)f)NVAOTTbGXq#>WOnQlmbg?u1UEzVJ|D6rHLn zDU!qfvB7b;zTuH-`})zXQ8_TU4Tc!qnjDg=7~shQ{6kxYJh7qbOq;1(+wFxIZk)#y z3NviidA)#~wud(ay4rlYnzIu|;h|;r`aZNV`)D=`#J_nxkvdGS?ooXSyN_V|hW3tb z`AV2>`>L+?ZiS<(11ndz_Xuc5Ac*{)n>*S$L!>%80&ODI-6KPRwbRk%?zD*A^+;NfI%Ow^+Q(kjpt1@bY}pl$r6k#f)cZ zlIkw~rl0KDna{@WC1(zF$M%W2PnzeJG^iZE{)(D4_)e=*SC$+PVMb@d_qh}ydP&|& z7JRqWCi|mw^-h;2wD#svIQrTvFTh%S*GAVLPwF+i(yCW4kjMHcK2@IG+ zo_TcjAIP!d@|Meemp5HarFF&1!LD?@Re7OnS3{BV;!V37Ez1Aw{tlN%>DL6k8nP>a zU_c4HzKdxC^EDNumDtA^dIW|Zf#GI>;l>OGo-J;l#&_SKkk+XjXD#!WYYdnoxAL4Y zS(05T66+0|vr=9QiId(PX%i;6&fq^%MWn|2*Z3wV?)q+u>aj9}*{&0sf0E~!LgOXe z%3{649(pMDy1WoG%rs~_)tM@+XHmQsIgUuBum`UBhTb}7z7VuObcuOtvIKb^b%x43 z^Y_?J%(H9Xi8QgyXn9y#S|S_IdGRg=Cog6!pbRr!%zJg*Jm>9NjalzYddsWUTzR8r z$uAbN%-R&}0~({o$`PunS>ske3xUjuH`j+b-WS$scNHX za{fu#J~QKOxf9dr4D46l+U7&xmYl!#w(u-R#J`SwSU8{qvK>;qCZsrmnR|oyN*F_1 zm$|0#m2L|DI4QXf${~h87aQ>RH8m!82$(jmzQH@Ha3@uV$iPi{A{c$BU;n3Gy zTt~ejP+Ln&!S9`*S|-+9V57~ly6(cOE^=STyB#b=ncgF)M){Csj!$oA8L*mkMC}cy zUk&c}Svifom*v`)AM(mnl+HXC+~4xUtj*BFz;f?wETPhPk1|3PN}^>i+Wln95AeNs zTjzRM+z(@=&^Olm{_RQNIw5*!m62+7qU8rZD{$^@?)2H42g&3UTrn4*n(&pd_bkLa zOXEuTRy=e#i8b&u@WL!7R3bRc%GmL4k7f_(DGBBHC5_->GB`pzCJ3>#CV#Bj?{mfM zfvJDPDo2DWKIfG-mJ_&5SVue*v)_M6k7HH$$($}rGgwQm@|gltuE@HRzVg~bLAAu8z|@p=-N}}d z3}INy8&UfAbjUAoJtlB<1x~hF+fJH$qIBw!SvgI}DMQY7W>pF zdHFu}cAAH^Q5)9R5jNUg%5ij>8FrR zBL1|Nm(bq*fbr;X%s|IX<)Yu4k|yZk3-lrr^NSv0Ca3HN1^IzjnEvTI!Li%jhu#_l z{*4;`mk{sO@Wa{#FHPFJiriPeC^mS+V$*4@OXZ?GSTNO_z)Tz%dJkP9R2U39yH$CSG$S*B7z zEHfiZO7dExypXR$leMrcjT;KdQj?Lza*nce<;hZZ!DWGtL~GOSR#g*8ZQhBrmlC-; zflux=w0^C-589~JwSl;?gPsS+m@@Re?3nj9jcr4_&ne86qFt?a3r0i$MV75RkL#Mi4c<29Ydnmv(IQWCAAM>;Kl73E2jJEo}8 zYye#uv<$xd54-1*$K6-SJZfXg1FvY~`Etz@v!Bn7Dr_5)pGOsFzmRPky*(`ZmR!C5 zLHLG3dNo>*!J-#3-$;AO&oP`-@Y0}&89mJiMGQ6tEeM%}-rX!6uP{LCn8P&GS5s3~ z>va~4)MA{gGplV_r}g2xs4n9}>PnS_`7x$iXVcrJZgD22wHNfko&akQteLz~vq$vx zTXQw?`wtm!A&tm=UK@DI8D+gfBT2VGUe(f8vQ(ho&-eY&);dYJ5&R=l)E>&OtfHwhG&M2=uv68SMO{eRFA3 zaO+0tN3uPz9;bgatvR`#%)LzXM%k>!zz5qIU|Q=6t;i<8%qo|ncVN{cQ?n?qro=Ft6LA6(^JwvytZ12p# zv%R#FG0mC@srJY{IM?2IEXcK}`DO@bx6h=(KH&v~)rtO-l0aYhbPTfld+(DuZM+eBr* zEAwl@R#m#k&*(Lezm->WcTIlH#hIFiGc_N}t9f@;Z}7L;>|XObWnRo`xP^6lPZpyU zdklK#x!!!O$Xf3(lxOc%pgh`3n>!%3BZnsAc+h}DonP{pCwxB79s(zQCAGW~^*HzU ztoHAc(sqq^DQy)NETxOo6*%N!JTM;wH7RXY5*9bKWTN7{9u3>d?L!|-GLMmrABX@G z9ToL2&8xpu{esf_kM=Io=DL@GKhaliXKdRT@9kJq5^t4by1hti7cQ%MYW7`OpRL9& z@d~d>8Lno1ktKw^rwrQHIpEe+`)v`l?`O(}7GHu~;U$xm(A%rRlD>f!*>7l(7DMkd zbzU3gG1B*xO5^t@qQN%3D#QWUZrp{8(drZW13o~{870S5;Y>~cFN_Vh6 zfbt$?;&)Gr*oev%U=Q#<0Nz`Wcc+LAtE;Ynjb~zGniQta5_v?j8F;@>=;dCl$nA?a z@|i5nekOjm1YB4;!R@gY5i{krY#HSCQ#!Q2<=%J?c+{=f%~qdXArm>;Tpc;RvvOMK zCbVR2%e_%5FW1&KR^Xf*I61QdUxO>+WO<6$1hL9_C%#ZjohGa)q>`9b`drQ`x+F!? z3$mB)Oz%=x+RnTfAO>-luj4wQBQkC%30eYpp;AV> zHZmPpVp8^ds&MKSGkjOEV;5S%)=wt+^+5e{CtAU2p&j@up|G?`x=(sedah=K(paaf zN)k+Q;U#Tc-{Teb zDE;;cUQfsSF<#w{()%%-7q5xZ?_R^Z67QGscH#Xz-X6T44x!J+D`#t*ePVM{T@}?G zxu+}bQdEu4cnmuN`MWUiv{Cw?QO4+`af}nQ*afTg`3&hDGRD4miHp}^HS0L70CtFX z7+Ff*yEr|KS}wJgu&0O%`*A84ID_k@N$hf;!md+-cby~~d<^zs(O;7|Kb%+%Ee58J z!p}=$H;Z?*N`DiZ4&d!oB!|P_^*!gMacjzZK#F~q^d7i0R)RD5Qt(oENz3(q$;l%p#|LrW)-{z(8>!6!}!&m6 zcYDi%v_EETn|ky0hy}mDMp}tk*G;|oV#I>qm%L$|di7GTfIS;2=}wE-Ga~mHcNpb6 z1Z1y(Jm@XKjG|WrJAUiD3%oY(B4y$?2fPcTWd98Pt_pP`@m}=#2zGHh<+W{7zxgyu zrT-*ipCPtSUh6`x>juOh70~w(dk}pEQ1lfGtfUtHb_#hSR=Qo3f@duq2KIh|y+4Ef zCxCAdC4Pulhrr%1u=@pcH=vCId%pqu-)68c5v6WHDJMAC7;?s|1Y{#T$r%w_f!JpP zFT*|(F!+MS?**oQ=Y30DR`){8 zr1q(2e3K>5r(@W+jg_Hnh0BIg20VeOw@a|6Yr?Gr0~QZsDb}zQqsH6k=5=_ioRIX> z`=_~etFV`h-Pb~+1oye@y$Wp{J+h8_)fJcdadO;Coohd$2H(M?bl}mOUKpbXCEtrK z4D**^Y&ZbRQFn%}#n`|$hB`jHdwd5&kLo$($9&R*J^hnDkM0X(zr%n3p(_=_4G>?Y z$g9lFlY&}Hl?FbdAgpPleqMV~Z((WFdmXCh<69k3B3az($c(H>a`@|t;1A!2KUDOy zA%Q<+?|5*08SZxA+&J!bEEhLBRE)Su10AAYKPmhY&LJWGs*8XB-n9*5WvzY8O* z#?3a233b@Jtim}UE1&h5IimB)Io*bmS!}Ok9ZO)VEr6|d7Phwy*lLZ~^pi2P0;9;) zkaQ#NbPe*pFU}0LV6Pwhz8GULl8ZHR;SJ$+aa*Kim0QeaTb};WFRFMaolk^dHd{gH zRk)>MEcK&bApe=lKKW|sPNz^QZ^aHWQ>e*M;FT%(Th!flP82ewbPCY_)zqZoQ)k|F z7GS&eoUmm|WwAMNYr}}mSp;mjaimH=r{snbs^t1TjihtApBe<0xQ)PiRk@T|=CF>J z*Cpn}ohhYr`J-QiaIZs~2dg;wYa3%EaCYf9=V+r$zK$(PklAPCO~|}K$1^8ih7zjG zf-h~iS;Lp*E2iU{gRe~fEWVZ-_)_J&MaMHIUxpG{zVwyRJidl?d~@)X$=CT(F(_Lp z2%Y0(4|IN;j$=-q3?-N+K1;MioOQguyax9%YqyeT^%T7DI$-Z)&(!fQZYSLXcs+V) zBhHAO@Y>zC;XKsWuJV%w!RGqfRRMBbHz8G!6TjtDieDR*)uT1>0b&}qKY-go2#&}p zz*?S~pi=_I@RG=>1|PlE=%b@ect5k1d|RzJS?KFtS?8mdANF^xd=s@1EIuDS_bhzF zR;v$Ky4&l0^u!~9u69=l9;2}qb3Qt_a|Ti!L(M&VCTKE2Gdr%sn{4>KlX=9qJ>wY@ zcq&vpk4#XctNnj(Av=OKLNf}!f9uDnp_*tLHCB^pJ2h34<>B33cTSM6nyim}r|T}+ ze}eHSM2}r{M+n zA@?irmnTvt^)8SYNjqGN#?Ao$evIW!7|U_fX66xiIv4J&T5ek^ZumVS`wx6S?o9d) zRL#u9EI}u3Dk0{=nL_?voq61CPhsU{2B-d{1bbxl4y8IXmR2O`{zJ7Gf$-%o=F0Rj zM&CNz0CZ!F=2_w=wA^K@lz7C}Q#BIi1j+_6mRI47UP{LI6LvjuxgdafJ@4;Wu%cz7 za^82qTU#YVY#B}j+$vyJuUba(VigcM9xv}4+OQwZdlojFjTC!mh%I1mg*VS{*yq0l zpWhSm$34NzK(_{`gBH1KNX)Oc(JC{}u>L?maI%)~N~(~Ei|=U89Md{ z5OXLS&LXll4u>v_mCVX@vyAbjSy=wOfX`}gl|WWs>eA@o;j9b zwp!6XMWwZOz&?03@HwC93y+r{6yG$5l;h3i9vtiY(J%OZr8w!@k2{(PajR>o+qSL$ zjqg;!;w9o$zv*qThdLL|iBYfH##?@`uwdHDyo2L=gugh##V>33X(x)Qe&m{Xh|zqwmIldVDVWoW@^*G3QV z=|#-8aN1UpPoLdl`2R6PdGm(ZxOVc z#-sJ{ zOecTCM$(<@dG44a1KLQX;Btm`VZPU?Vn4G9HQ(Y|;qmb8;;XM>>yqrrQP)vR8n#rS z<|IDMd=HwixY0`?@=-r+AcdM}6ZOz4YQ)-R7p+A-yH|1X;d;Q?tF3-@w;7*3s?wzOkWC@fWN^zHMeY(&4ptd{PAU0NQ~w zxC(Nd@*qxUWA8PSQ;!@E=R}rve1gSZi+6+^__e#&pdR1rbi%r93i?lAledaMElF;i zuVpSc2PGAh{7BF|S^x)5T*hDJl7jZr2HH;}=P8C_r3eq!jBv66ea+nVFUkZk3u-*) zWO|UXcqjGlZ+bgY5vpyC#4K3zv*Vug+wu+JJsy!GBNf^cd+%#lr)`bM#h$No8{WJ= zfdBt+-K(C-xKoB4*BuJ)K|i)6%Xp2W7q+35ID!&3y#&L%{*PB;Q$eR}3;*?=|HAz08d8qe$!-NFJfup= z;iP488-A~jS++@CinGFkf9tSyiGygtaG6{BVAt!rU*8on$1Ja>BggipBk#C&$+kWB zcBebuwctFojuU)2l;b7~=Jabq6*!kUdH*Z5wx1u|YN@5}yJf44yP>92!E5nZVeLX) z>=cZL(zg*^u`(Ung|}nnF82 z^MyK-;%^}F4%VC8(6ZOO&FKh8FnzNA_QyB0IRZ`*|NW0|M%*vrAN=^nwoqUTO8oA} z-E9r@;S)+Q82oUb(w2Uqk?KqhW+m{_3ww4mj_$T2yKr~Fth60}M)AK8sQfxp0mELj z1^mi?pHkZgzP`K$9tP(%`?2=*edlE<`G6GvJhcG7r&4zOe&oC?9!|Ni9#$18L4FNl z)~@ekHLXOHM^4-lqS*U@$X(x$EM;iCRN!$4JXXdNJAr&_7wAMD!GD$Lhb9hnrTITM ze2`XGz-D|ng`2?t;=mfE#1@bLP|%tHSNAv<7vO3!Fx)Np>g~Fxa*h1G-pNQ4N-}?* zu6r;`UkocP;nmnU_~74&Gk9sFvwWH^kJ#{QclgVH*>w+o-$XrKj^{#)&6JaCt4HLO6wprd<%a$V!hwwEfMmT<9}f!;!doY zqRaiI zzF}PK8&IEZ+GSI%IfDP-5Vv-x`@aZQU zsKIZH92U$G5>4+#Y?uLC!h33N#I2am&{@)g^?!>LIZtaqocWte> z@zvT9xOx4JJse*XUhQ4$4cBTH#!w=ALoAbM4~sG)hi`r98RCu@657Qx#BN#>Ub+4z z?M7Iu_6FQ|XAH^A1v6Zw=)5u5-PYC47h&BS+Pi$&%Xxh9@H)Aw(bM2*z7BJJ=w^&6 zOeVbVL;{fJTD&n-E!eB3TlV2?Mf&fx^wV1YGg|stE&ZyRZm!eP@2TmQr?m9vTAJ|y zza4It>9stnrQKTk5iQN*5a&OyrF*sXlUf>gc}4zv+Q+W?&BatmRN3rjL^ zGt*t@%%nv`lq(0^m4RCX4BRi|)>5CMIca$GBI+A63t9;4U+B-ktpXMVY*hwUoQdT` z7AmZ-gYor^R8cY)j!g)I zfPp&xACPz)+YwJ|@jDSm+d9}D@i-nvcuYjeP!2uT!7WRKe(qqK6&h!)Yt(H&HawiK zKWZ8E_gi>kc=qA>w)RZo;k5B#7-xTshtYBzJLubVoPT-$MFamIX~0xegbx0dJtni+ zZ29U4GC4eXgTO_S*Ho<1`-%vfit$Kf0lBY2LP5?{1cH+E6-cO(Gcm!hq78L&UlBo_ zoW=B&5Hylwg2GNOp3xY|6Ii%xT${;cmd=sf1(8sU zau5p-_cx=Ix^xzcSqz3K`sYii8vDHDxQIqj`m+hDlQD@27LZQDBRJ9s{`vICKrm04 zV56u=qj=~ilC(}B@wy#Q|rb}`851eu=jD{8kh zf!@U-mqSpK5cDn5}Ph z13~ooi`aGr2!0jh)DaJpc(zZ`+jT}R>{~_8zq|mGd9(Kv&jq8V6XLlMKY|_zGTCB` zL+W#($by=VQhST}ykQ%)wx{yBo?Q%xIGY@% zd*Ts<@L8e0HK3j;l3$kK?3U9}ikY@L6Xm&+`skTj>PxlZZ1E%=<+;%NQbsddJhY3- zd?9)|FPgN{m!X#Vxx%r^y~78EZ-PYB5EH;+0|_&fwGEMCSi zSU}e2y!6ha56&T8M!?zh3aj&c1e`;>3_VsT79ds^NN=x zs1=)++_?xizj)_O@2mpmiko*;J)^v)t+4szx&7o-Xy zeskr?D|@yUEFfMUj`O59uYkF-fWJI?suG!Mu6WQz0R;1S(SpVEPzW-G=}}(cd7Vtb z(glEQES7xn;4lkvJeP!p3!fLg^AfNCX0&!bR7j@Hep%Ga!=>|!&t)-l6wOC4AH4$X z%{5HqBNip|!NM~0j1y9_By(_`--dG)JWqP(EMPufRT24cmZX4ns`8zyfOCmgfZzG) z6{t|C1@pzwO66y;Jr*)gZNf4q=f*aiyU=;lJ0}72vFb|5&tduIZohLf(YeJd!0p-S z6{w;!uc@>UIo&N3mao7^v}T`k^g$h+pjZHBCci-5S@c=h2hOqRd%>UCYFuN zQHyaKvRI)OK`=woAl@AE&1;`RV;UPw4CHd?iEYZPkjC6EC!fZqN-I~JEFm6%^?Vf| ze!na|wh1Abk$D4Nj)I~kSJhvV9&c5ZzgU|1s!6 z?b&{($L6t&vx=1|Aa>Zodb|B!cmN|)#KST!r95Sc-t#ZD!nh zGvgMQ2{-Ia#}IHY&-5As?iZSVh=BWFrriiT5pF}kJulM+1mH4Vfv^OD>*MyB^eF=P zmkuHvKzIyc4?-Fti2xp@P6R(f9fFMDL?Aq;5Z*&zJ6VhXVAI=pfnPd-H{jACgl7<* eKzJBo5@9>SAVM#Kg3yFefnY&3T(0j@i)$$ z50T(4a^~FkCd{o10Vc-`Df);ILL|q*)U@r7h>(<*Iw`L;ASQa8HY-DWOwmIC@f?NC zNdMNR^Ph$8#}XhJ>+mD~4D`h8EnU+BK|o`StiJl|~BJVswtFNSph literal 0 HcmV?d00001 diff --git a/Prefs/ClassAct.info b/Prefs/ClassAct.info new file mode 100644 index 0000000000000000000000000000000000000000..c6304ec3e0f286264c76cf6c27ad007b791722b9 GIT binary patch literal 3192 zcmZuxVN6q57QTgI8QWc0XI*fU4X>qYi&%KY9qrC2Z7E2L3bZf+orHoV6ewsMch=d= z#*UlGI>}_+Y~10`Y@i6JRi2`$4U+h(8QjNegtj7#Gp=<+A;xvc*o<|p+&%Zbf|KlC zLcjN&``vTCd)~e8K_(I*GFG8=Xd9BF6(|*nB*&U*V@wF^lzp3+bcxdhTI77r$KG zGlN7Y;{L|Je;t<&%ruPVd{rw2{=sT{R60;+eWLlQMmjkE$xN-?1KfTtZ%vi7PbIxy z+kk*q>d_j#v^QPyrKt`{`^!^h(U!^?j@eg_wY(A_+Vk70aLILU#eK@ZlcyFpW1l*9h;te0qWp7T+B5~=Y zY@NWmESc1Rk$abjMPA@ITS2?$~w~j~n~CW9bE$L)Pw?xEPP8obQf_GB79F-yQp759U^$ z?;-jd2zAHK=74TZ57FH~vhLVvjJa!cPt1hzjXl{tF(1a@D<@Wy#3lZN@SbB#5*L%m z!fs%Q1&R|qOWp~byc0`vFJJIaiFtI0JS0N3#ZiPZ674?EPx148;;GtRz=LA*u7B8mFbD~A@+!e>5xH_PoyiyV0OOx{oscv{_R z*~zrf&rRoiLx^w+$$HZ!#i`#a@_{QwQ6%#KPgy`R1emr@K=C=0fnQCEMTE-$qrmZ` z7~ZXHPc|T!;+GUUSZr8@QskLiKKctFg|c6)wgRsbeee1!@FS_SQ#_Z9KmH!2 zDCQ-RT7mxw1J8}84%`icenvEx?0N zYuG4x{}vxF6#uQ3f(7Z~mA@>2xHNujpkNlE>+zph3LYjz74gHLH_rM#u85cB-+Q6fqEtI!-R51}sU7BB zr8c>o0ud3b%sc6=#!|C9@A&AiH(tK1W_0eWDyP96u-SC(^8k^8$;pWj(Rzp$FY50r z-_v`Yc4p+8*7sB`%7(2hcSo*rs+{E|jE1v2rsV|+I*(RawvKRiW?Ig==)4W8=03L7 z&ak)Tnz1Hh;VI|FE<(qqcek+WlV=8|gJ zgY&IIkiZl(9F}Xi23phNG|);R#5%(HFf+oLj2qU1Ay~?C5s0v@4Q~~mBBpX7(hy!x z%G()Q+2mte>u5+f6jBm#2{UqP2MzWdup4G1WP=#w9&0|Y8C&)MV&eY_$wjIePpDww zaEK%b5!+DD-dEKMTL>wDJ4gXO`3AmYAvw!6H+AtbNbW3w{S*zUxMsd6(P|){hO2Y! zf|yFsk(|uPYY&WHt2XHQnxuEcq@Bc+&AhKV-UrFU$F}pnnm~6tZ_u*z*AAQHdpT;P zRZhr9zG!Fp{|9c>s8L-kQ{38ughem zxB9Pca5;y=8e+vz=rU<_kcNaJ>+6$|4Q?SawehaXhUkjh2oom&3XZv20zHej`KAzgow&K-ypPfp(KR56a*WEmV_ zEgazT`^wJp0jE1q{!Lq_s>Re^X4Bn~TLx85i|Hb)f&*M+q@hKYGPBNoaav(*r}H{2 z$B$dv+yU!tdC{gm%K%rZ(E_z?no^i`?UsQGdmpVc1#CLkEd}WMYK()-B^^oa_C^%8 zO;F9a>|xNtj=7J+R6rk=7wOt*tr1?w?glLhSsh^-pqzv(XP6>bYSV?~WF{G6+msM$ z537F^;`C&(Kcsvev%p;}BAG(Yfc1uu&9dyl!dwaQeib%d$JuL^!JRBfstZHJGFf*q z*pQ6rLSWK8q9ztNW+yw)JXj4Huyn})9&9@MWp>bMfLOa#>As}rV{V4MW;tKj=JuOF zrw3nbe&of3n>PT`NYRXCGl{OoCmtJQ)e?djoy$P zYV<>%a;-ttukHAa$>6LUDD5l-O^8H~& cX{XjZqp)h-j)=TS>%F6P-EQ_i@J^%u0`P7n^8f$< literal 0 HcmV?d00001 diff --git a/Prefs/caprefs b/Prefs/caprefs new file mode 100644 index 0000000000000000000000000000000000000000..4d4bc567b7f6e551d85e7f2fac98f76095935826 GIT binary patch literal 3356 zcmd5;-ESMm5uYPz=ESfvD-(v`8pf8OWm%#~$yHQKateNk)QLWk49P@x3KTqv#}gxx zM;wogBq#=D7=@t}MJfbsAB;ToA!v<2Q1X!YDG-VxsDVDDZXRsFunoh3(m<_)v?x+R zADulOsZ-)VpbL;QJM){F-|X(~9f0{?&=@9NG61GqsJ{VV{yWv**)e&z&EcO+{FfrG zfNLHsXD68Zp>4~mr@-7VyJKs+chCBnM`-y)YxV?ZziiFEh`z@>lEC6Z`2^*OXdVBZ zxsC_hSqm89kg2)V8v^0 zHnz6cb;ag>UO9r+;|AYs(|4G=u~Ln4JX|IEj4G#^nUL3gTKmvSpVZd#FD|;?zbiw3 z5A-WXKV7EteXna0t-nXDM&kniWEMl)rq7V`7ViI7(jf6CXMyN>Yox$@WuJv^aL!mg z97cTFtVlg61JaOfRnNBdjBHznvfVdi+cIV&l;x{|ZByFCB8IL#@92Yb3bW4StZ4r@ z)1{bo{Z{6LV$${XO#5Zf5btFyh+Fru*xwaboBJr{h~REpa7FrH(1*Kay5V9E>^T2Z zvin!>yNbR-^#SV+^F-hR_D(y4x_F``(RXyulZPC8&+O4WMD}VE)Z5a zrNB8{Q6J;$1{-32ZNy}3nCER5o}wKdd7iiX_xGhvi~t{lo)sfw4SThLMV~cVWFoXW z^Nq&7X2?r>TE*`C8oRpY&l&y5JSaK2A_S39$>iV%4l%@fPyail8h&Rm~Uj>OyOt z%~$4fa!G9&AXE@4mB5VZYbs!au%gHcOp7(K;LR5WNrcz)rL6qAcZPzY6+;q=m=hJT zG$U5Xm>?GAk}V{c7nHm-tCByEf#Km7`tWavBxZ$@Di_HZ%_*0QVoCLoK%qdA6j~uk zu_7upG3&L3stP7lNkvrEd`YT|*Z_hwszTI-vN%FcSJ0x)=1TzcVu@-qbK0EHDM&(A zmE{7mWlshpsa@bGqWgl4me7E9Qi1K_%3V zQz(liWK%^pO%GZc+{%iKlxfArT&Ibvt%#Lbw59UJazR8{6ciPvwA~@o!pvMQkBeFs zROC?7*D4|u3e=?)rZ!3lb6g6?Ak9t0niA+NbP)RM6LNQDPF?PfZVJ{<8$9&sHEb=qKNanciGj_>fL@zj649_FRiMeLOPr(tw zU&md1|Drt0!A-kAx#H-MtcnkB+kcmR>m4~qu!DOI7y(S&rTDNP*0{yJ6;1}H0L*G4 zj%(SDmU-RsC=tiE-A&|%&;9=6UO(Q4b8u4c?~;+Twg!G}4gAQkQ#wWbq3zvMMhy1F zz$jwy*2O#o^K@|Y4ETWFV*9!UM1Sji;z|90>Nd_`N67)$&IvG^49M;+3Mj4j$BIg{5> zZ+CND6VYQ*`$x9imzn>Rfq!VH9k2}vK>MKm(7G@-SdiI-OCt+gM7Do5e zZ?{NBv2ou;U(7Qe7#k0#DS{6K!+e5ASZflFX&B8DiO14S zM=E`przk9u45v8MrY2%z@u@^0oen2sFX|HQkpRyJ1EGt0bRro~=)oFqU>kx;_bcJ# z2nhw~tExfxz<_taJN)Cb6hxY%n~vt>Kyr@5<63Lz_GN7_&lnBBRc)A_F{q#D LME^g9`Ro4y$Y A full array of conventional text editing features: + · clipboard support + · choice of true or "fake" tabs and configurable tab size + · word wrap + · auto-indent + · bookmarks + · case conversion + · bracket matching, both automatic and on-demand + + > Very fast text scrolling. + + > Quick disk operations. + + > Fast find and replace. + + > Fully configurable button strip, or "SpeedBar". + + > Completely font adaptive and localized user interface. + + > Complies rigidly with Commodore's user interface style guidelines. + + > Requires at least release 2.1 of the Amiga's OS, and takes full + advantage of release 3.x features. + + > Complete context sensitive hypertext online help via AmigaGuide. + + > Extensive ARexx interface. + + > Macros can be recorded, played back or hand-written, and be assigned + to a key combination, a pull-down menu item, or a SpeedBar button. + +Purchasing Quill: +----------------- + +Digital Quill is available at quality Amiga dealers everywhere with a +suggested retail price of $39.95 USD. If there isn't an Amiga dealer in +your area which carries Quill, you may purchase Quill directly from +us using order form included in this archive. Digital Quill is also +available from Wonder Computers and the GammaSoft Dealer NetWork. + + E-Mail: caldi@finale-dev.com + WWW: http://www.finale-dev.com/ + +The offical Quill web site is at: + http://www.warped.com/~timmer/quill + +Distributor and Dealer inquieres welcome. diff --git a/Quill_README.doc.info b/Quill_README.doc.info new file mode 100644 index 0000000000000000000000000000000000000000..acd7e47c2083e436966b97f5109485cc94237b40 GIT binary patch literal 468 zcmaDXz`)1=0`nM>7|a;N8CZaPM)qZi8^EII1S1Or`_hFR?321q0HtODaR@?*-UBe( zj6sZniGlSy2QxwnXeN`Aum2MQD7G zIuJmn>;M1%{|_q8fS^Ib|NsAC08{^eFkB4SH_Qy*Pr5YPIq=aPM{GdgG zUTjNyQ0!Ss51u6LsplR%SZJXL1(9M!sL~=0*wRCYvGcM~s$KGS=9~Avc{AT+0UW=; ze%PvI(0<0%2;lfm{lya7sP1-j1*X8+dMi|9e5N1{>iL6puZ+lR3e*?moQKp!0d|NR z-&;zNxxjNuffWQU3*vyDFKtUQE8^bDwbv}kxp|58rOSH$a9IRx7UQq@8l}JxJTHHH zrsvBEiB*cQ!*jwpWcS`IfKz)My@xzOkXS-<9^^15(WaxlMCN_q3>AO~wI}%bfB7^& zJtJy(?|p6BU~@o{Ea7~>K%McD<~*FT(rYtsW^nHe-bL`13BCs7ONhiuCrj8P$7@uD z@+fxA@dH)gb>nON!zL=GXCldzKOP&k!qy~Y(y@3fJ$a0kp`rdhT~fsB{dXh)Kg)7LGAGdI*En%_};J{ z5&5zLFK`miH?fzKlL&