PC/GEOS 1.x application binary and object audit
=============================================
Target: GWSVGA(1).zip / GWSVGA (GeoWorks Pro 1.2 supplied by user).

Small native reference: WORLD/EXTRAS/BOUNCE.GEO (3568 bytes)
UI protocol 693.0, kernel protocol 622.3, executable GA=0x9600.
The current source tree's Appl/Bounce is descended from this program but
has later additions; its historical code identifies native kernel register
calling conventions (particularly exposure/update handlers).

File format (all integers little endian):
  0x000..0x0c7: GEOS1 GeosFileHeader (200 bytes)
  0x0c8: attributes; 0x0ca: type
  0x0cc/0x0ce: kernel protocol major/minor
  0x0d0: resource count; 0x0d2: imported library count
  0x0d4: exported entry count; 0x0d6: uninitialized DGROUP size
  0x0d8/0x0da: process class offset/resource
  0x0dc/0x0de: application object chunk/resource
  0x0e0..0x11f: remainder of GeodeHeader
  0x120: imported libraries (14 bytes per item)
  exports: 4 bytes per item
  resource arrays: sizes2*n, file positions4*n, relocation sizes2*n, flags2*n
  each resource's relocation bytes follow the initialized data without padding.
  Alignment is encoded by file position table, not implied between resources.

Geode name is 12 bytes at0xf4; token bytes0x100..0x105.
Imported library record: name8, attributes2, protocol major2/minor2.

Relocations: byte info, byte extra, word target offset.
For GEOS1 kernel calls, info=0 (far ptr), operand stores ordinal,zero.
Calls to imported UI superclass need separate OFFSET (info0x11) and SEGMENT
(info0x12) relocations. Internal data pointers use GRS_RESOURCE with
SEGMENT/HANDLE (0x22/0x23). See geo1.py for audited parsing.

Class_rel1 differs from GEOS2 ClassStruct: its prefix is18 bytes, not16.
Official Tools/esp/object.c preserves its definition:
  superclass offset2/segment2; masteroffset2; methodcount2; instancesize2;
  initRoutine offset2/segment2; relocationtable2; flags1/mastermethods1.
Then messages2*n followed by handler far pointers4*n.
Native process superclass is UI entry0; instance size4; flags8; masterMethods1.
Bounce methods: a01=open application, a03=close application,4=attach,
57=view-window-closed,c00=on/off,49=exposed,c01=timer callback.

Object resources are old LMem2 with32-byte header. Native objects use an
8-byte base header then old generic instance20 bytes; Generic prefix28 total.
The first4 bytes encode class reference as ORS_LIBRARY0x3000 and UI ordinal.
Generic offset0x0c: sibling/parent optr; 0x10:first-child optr;
0x14:moniker chunk;0x16:keyboard shortcut;0x18:hints chunk;0x1a:states/attrs.
Final sibling optr points to parent's chunk|1. Local object references use
segment0x4000; a resource elsewhere in owning geode uses0x1000|resourceID;
process destination is chunk0,segment0x1000.

UI class ordinals confirmed from native objects:
  GenApplication71; GenPrimary88; GenView75; GenInteraction80;
  GenTrigger68; GenItemGroup83; GenItem82; GenText86.
Native trigger adds destination optr4 and message2 after generic28.

native_objects.py constructs new object blocks with independent chunk layout:
resource57 interface, resource58 app; app object chunk0x24.
It does not copy GEOS2 native object data. Its graphics view is300x340 with
native 1.x application, primary, horizontal controls and four real buttons.

Static native view parameters follow supplied Bounce layout; runtime visual
checks must verify reconstruction before shipping.
