Initial commit

This commit is contained in:
Carsten Sonne Larsen 2021-02-28 22:17:19 +01:00
commit 51f73b9843
235 changed files with 16370 additions and 0 deletions

BIN
AmigaE.info Normal file

Binary file not shown.

BIN
AmigaE/ClickTabExample Normal file

Binary file not shown.

159
AmigaE/ClickTabExample.e Normal file
View File

@ -0,0 +1,159 @@
/* ClickTabExample.e - Ported to E by Eric Sauvageau. */
OPT PREPROCESS
MODULE 'tools/constructors', 'tools/boopsi'
MODULE 'exec/types','exec/memory','dos/dos','dos/dosextens','exec/lists',
'exec/nodes','intuition','graphics','intuition/intuition',
'intuition/gadgetclass','intuition/imageclass',
'intuition/intuitionbase','intuition/classusr',
'intuition/gadgetclass','intuition/cghooks','intuition/icclass',
'intuition/classes','intuition/sghooks','graphics/gfxbase',
'graphics/text','graphics/gfxmacros','utility/tagitem','utility/hooks'
MODULE 'clicktab','gadgets/clicktab','window','classes/window','layout',
'gadgets/layout', 'other/classact_macros'
DEF listitems:PTR TO mlh
CONST ID_CLICKTAB =1
PROC clickTabNodes(list:PTR TO lh, labels:PTR TO LONG)
DEF node=NIL, i=0
newlist(list)
WHILE labels[i]
IF (node := AllocClickTabNodeA([TNA_TEXT, labels[i],
TNA_NUMBER, i,
TNA_ENABLED, TRUE,
TNA_SPACING, 6,
TAG_DONE]))
AddTail(list,node)
ENDIF
INC i
ENDWHILE
ENDPROC
PROC freeClickTabNodes(list:PTR TO lh)
DEF node:PTR TO ln, nextnode:PTR TO ln
node:= list.head
WHILE (nextnode = node.succ)
FreeClickTabNode(node)
node := nextnode
ENDWHILE
END list -> 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

BIN
AmigaE/ClickTabExample.info Normal file

Binary file not shown.

BIN
AmigaE/ConnectExample Normal file

Binary file not shown.

166
AmigaE/ConnectExample.e Normal file
View File

@ -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

BIN
AmigaE/ConnectExample.info Normal file

Binary file not shown.

25
AmigaE/E_Examples.doc Normal file
View File

@ -0,0 +1,25 @@
Notes for the Amiga E API for ClassAct
--------------------------------------
o Remember that in E, an external function name must have the first letter
in uppercase, and the second one in lowercase. For this reason, some
function call have slightly different names than the ones used in
the Autodocs:
LAYOUT_GetClass() is Layout_GetClass()
CLICKTAB_GetClass() is ClickTab_GetClass()
etc...
Check the modules when uncertain about the name to use.
o Don't forget to put OPT PREPROCESS at the top of your source to be able
to use the macros.
Other/Classact_lib.m
----------------------
This module holds a few goodies for ClassAct, ported from the linked
library. Note that some functions in it are still untested.

BIN
AmigaE/E_Examples.doc.info Normal file

Binary file not shown.

BIN
AmigaE/LayoutExample Normal file

Binary file not shown.

531
AmigaE/LayoutExample.e Normal file
View File

@ -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

BIN
AmigaE/LayoutExample.info Normal file

Binary file not shown.

BIN
AmigaE/PenMapExample Normal file

Binary file not shown.

1773
AmigaE/PenMapExample.e Normal file

File diff suppressed because it is too large Load Diff

BIN
AmigaE/PenMapExample.info Normal file

Binary file not shown.

261
ClassActDemo.doc Normal file
View File

@ -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.

BIN
ClassActDemo.doc.info Normal file

Binary file not shown.

444
ClassActFAQ.doc Normal file
View File

@ -0,0 +1,444 @@
CLASSACT FAQ
THIS DOCUMENT
This document was written to answer to frequently asked questions
about the ClassAct GUI toolkit. It addresses both user and developer
questions. Sorry, some information is not quite up-to-date for
ClassAct 2.0 yet.
MAINTAINER
This FAQ is maintained by Osma Ahvenlampi <Osma.Ahvenlampi@hut.fi>
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 <your-email-address>
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. <g>
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.

BIN
ClassActFAQ.doc.info Normal file

Binary file not shown.

BIN
Classes.info Normal file

Binary file not shown.

BIN
Classes/arexx.class Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Classes/images/bevel.image Normal file

Binary file not shown.

BIN
Classes/images/bitmap.image Normal file

Binary file not shown.

Binary file not shown.

BIN
Classes/images/glyph.image Normal file

Binary file not shown.

BIN
Classes/images/label.image Normal file

Binary file not shown.

BIN
Classes/images/penmap.image Normal file

Binary file not shown.

BIN
Classes/window.class Normal file

Binary file not shown.

BIN
Demo.info Normal file

Binary file not shown.

BIN
Demo/ClassActDemo Normal file

Binary file not shown.

1447
Demo/ClassActDemo.c Normal file

File diff suppressed because it is too large Load Diff

BIN
Demo/ClassActDemo.c.info Normal file

Binary file not shown.

BIN
Demo/ClassActDemo.info Normal file

Binary file not shown.

6
Demo/ClassActDemo.lnk Normal file
View File

@ -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

BIN
Demo/ClassActDemo.o Normal file

Binary file not shown.

949
Demo/Images.c Normal file
View File

@ -0,0 +1,949 @@
#include <exec/types.h>
#include <intuition/intuition.h>
__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
};

BIN
Demo/Images.c.info Normal file

Binary file not shown.

BIN
Demo/Images.o Normal file

Binary file not shown.

11
Demo/SCOPTIONS Normal file
View File

@ -0,0 +1,11 @@
NOSTACKCHECK
NOSTACKEXTEND
ERRORREXX
SAVEDS
SMALLCODE
SMALLDATA
NOERRORCONSOLE
MEMORYSIZE=HUGE
OPTIMIZERTIME
LIBRARY=lib:classact.lib
LIBRARY=lib:debug.lib

16
Demo/SMakeFile Normal file
View File

@ -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

BIN
Demo/SMakeFile.info Normal file

Binary file not shown.

BIN
Examples.info Normal file

Binary file not shown.

BIN
Examples/ARexx.info Normal file

Binary file not shown.

BIN
Examples/ARexx/ARexxExample Normal file

Binary file not shown.

View File

@ -0,0 +1,292 @@
#include <dos/dos.h>
#include <dos/datetime.h>
#include <libraries/gadtools.h>
#include <clib/alib_protos.h>
#include <proto/exec.h>
#include <proto/intuition.h>
#include <proto/dos.h>
#include <proto/utility.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <classact.h>
#include <classact_macros.h>
#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;
}
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,25 @@
/* Small script for the small arexxclass demo */
options results
address AREXXDEMO
NAME
say 'Program name : ' RESULT
VERSION
say 'Program version : ' RESULT
AUTHOR
say 'Program author : ' RESULT
DATE
say 'Program compilation date: ' RESULT
'DATE SYSTEM'
say 'Current system date : ' RESULT

Binary file not shown.

BIN
Examples/BackFill.info Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,397 @@
/*************************************************************************
* ClassAct Comprehensive Demo Program
* Copyright © 1995 Osma Ahvenlampi
*
*/
#include <exec/types.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <intuition/icclass.h>
#include <libraries/gadtools.h>
#include <graphics/gfxbase.h>
#include <graphics/text.h>
#include <graphics/gfxmacros.h>
#include <utility/tagitem.h>
#include <workbench/startup.h>
#include <workbench/workbench.h>
#include <datatypes/datatypes.h>
#include <datatypes/datatypesclass.h>
#include <proto/datatypes.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/diskfont.h>
#include <proto/utility.h>
#include <proto/wb.h>
#include <proto/icon.h>
#include <classact.h>
#include <classact_lib.h>
#include <clib/classact_lib_protos.h>
/* get LayerHook.lha from Aminet for this */
#include <imagebackfill.h>
/*************************************************************************
* 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);
}

Binary file not shown.

BIN
Examples/BitMap.info Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,171 @@
/* ClassAct Example
* Copyright 1995 Phantom Development LLC.
* All Rights Reserved.
*
* This Example Shows ClassAct's bitmap.image
*/
#include <proto/intuition.h>
#include <classact.h>
#include <clib/exec_protos.h>
#include <clib/alib_protos.h>
#include <clib/intuition_protos.h>
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 );
}

Binary file not shown.

Binary file not shown.

BIN
Examples/BitMap/buttons.iff Normal file

Binary file not shown.

BIN
Examples/CheckBox.info Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,233 @@
;/* CheckBox Example
sc link checkboxexample.c lib lib:classact.lib
quit
*/
/**
** CheckBoxExample.c -- CheckBox class Example.
**
** This is a simple example testing some of the capabilities of the
** CheckBox gadget class.
**
** This code opens a window and then creates 2 CheckBox 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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <exec/types.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <graphics/gfxbase.h>
#include <graphics/text.h>
#include <graphics/gfxmacros.h>
#include <utility/tagitem.h>
#include <workbench/startup.h>
#include <workbench/workbench.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/utility.h>
#include <proto/wb.h>
#include <proto/icon.h>
/* ClassAct includes
*/
#include <classact.h>
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);
}

Binary file not shown.

BIN
Examples/Chooser.info Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,228 @@
;/* Chooser Example
sc link chooserexample.c lib lib:classact.lib
quit
*/
/**
** ChoosserExample.c -- chooser class example.
**
** This is a simple example testing some of the capabilities of the
** chooser gadget class.
**
** This opens a window with chooser gadget. We will usse ClassAct.lib's
** ChooserLables() and FreeChooserLabels() utility functions to create the
** item labels.
**
**/
/* system includes
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <exec/types.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <graphics/gfxbase.h>
#include <graphics/text.h>
#include <graphics/gfxmacros.h>
#include <utility/tagitem.h>
#include <workbench/startup.h>
#include <workbench/workbench.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/utility.h>
#include <proto/wb.h>
#include <proto/icon.h>
/* ClassAct includes
*/
#include <classact.h>
/* 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);
}

Binary file not shown.

Binary file not shown.

View File

@ -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 <stdio.h>
#include <string.h>
#include <math.h>
#define INTUI_V36_NAMES_ONLY
#include <exec/types.h>
#include <exec/memory.h>
#include <dos/dos.h>
#include <dos/dosextens.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <intuition/intuitionbase.h>
#include <intuition/classusr.h>
#include <intuition/imageclass.h>
#include <intuition/gadgetclass.h>
#include <intuition/icclass.h>
#include <intuition/cghooks.h>
#include <intuition/classes.h>
#include <graphics/gfxbase.h>
#include <graphics/text.h>
#include <graphics/gfxmacros.h>
#include <utility/tagitem.h>
#include <utility/hooks.h>
#include <clib/macros.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <proto/dos.h>
#include <proto/exec.h>
#include <proto/utility.h>
#include <classact.h>
#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);
}
}

Binary file not shown.

BIN
Examples/ClickTab.info Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,207 @@
#define USE_BUILTIN_MATH
#define USE_SYSBASE
#include <stdio.h>
#include <string.h>
#include <math.h>
#define INTUI_V36_NAMES_ONLY
#include <exec/types.h>
#include <exec/memory.h>
#include <dos/dos.h>
#include <dos/dosextens.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <intuition/intuitionbase.h>
#include <intuition/classusr.h>
#include <intuition/imageclass.h>
#include <intuition/gadgetclass.h>
#include <intuition/cghooks.h>
#include <intuition/icclass.h>
#include <intuition/classes.h>
#include <intuition/sghooks.h>
#include <graphics/gfxbase.h>
#include <graphics/text.h>
#include <graphics/gfxmacros.h>
#include <utility/tagitem.h>
#include <utility/hooks.h>
#include <clib/macros.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <proto/dos.h>
#include <proto/exec.h>
#include <proto/gadtools.h>
#include <proto/utility.h>
#include <classact.h>
#include <classact_author.h>
#include <proto/clicktab.h>
#include <gadgets/clicktab.h>
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

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More