# file opened: multi_line_initializer.asm
  1   0000                  STRUCT S_SymbOS_icon_header
  2   0000 ~            type        BYTE    2
  3   0000 ~            sizex       BYTE    8
  4   0000 ~            sizey       BYTE    8
  5   0000                  ENDS
  6   0000
  7   0000                  STRUCT S_SymbOS_exe_header
  8   0000 ~            codelen     WORD                ;Length of the code area (OS will place this area everywhere)
  9   0000 ~            datalen     WORD                ;Length of the data area (screen manager data; OS will place this area inside a 16k block of one 64K bank)
 10   0000 ~            tranlen     WORD                ;Length of the transfer area (stack, message buffer, desktop manager data; placed between #c000 and #ffff of a 64K bank)
 11   0000 ~            datadr:
 12   0000 ~            origin      WORD                ;Original origin of the assembler code      ; POST address data area
 13   0000 ~            trnadr:
 14   0000 ~            relcount    WORD                ;Number of entries in the relocator table   ; POST address transfer area
 15   0000 ~            prztab:
 16   0000 ~            stacksize   WORD                ;Length of the stack in bytes               ; POST table processes or timer IDs (4*1)
 17   0000 ~                        BLOCK   2, 0        ;*reserved* (2 bytes)
 18   0000 ~            bnknum      BLOCK   1, 0        ;*reserved* (1 byte)                        ; POST 64K ram bank (1-8), where the application is located
 19   0000 ~            name        TEXT    25          ;program name (24+1[0] chars)
 20   0000 ~            flags       BYTE                ;flags (+1=16colour icon available)
 21   0000 ~            icon16      WORD                ;file offset of 16colour icon
 22   0000 ~                        BLOCK   5, 0        ;*reserved* (5 bytes)
 23   0000 ~            memtab:                         ;"SymExe10" SymbOS executable file identification ; POST table reserved memory areas
 24   0000 ~            identifier  TEXT    8, { "SymExe10" }
 25   0000 ~            codex       WORD                ;additional memory for code area (will be reserved directly behind the loaded code area)
 26   0000 ~            datex       WORD                ;additional memory for data area (see above)
 27   0000 ~            trnex       WORD                ;additional memory for transfer area (see above)
 28   0000 ~                        BLOCK   26, 0       ;*reserviert* (26 bytes)
 29   0000 ~            appId:
 30   0000 ~            osver       WORD                ;required OS version (1.0)
 31   0000 ~                    ;Application icon (small version), 8x8 pixel, SymbOS graphic format
 32   0000 ~            iconsm      S_SymbOS_icon_header { 2, 8, 8 }
 33   0000 ~            icobsmdat   TEXT    16
 34   0000 ~                    ;Application icon (big version), 24x24 pixel, SymbOS graphic format
 35   0000 ~            iconbg      S_SymbOS_icon_header { 6, 24, 24 }
 36   0000 ~            icobbgdat   TEXT    144
 37   0000 ~
 38   0000                  ENDS
 39   0000
 40   0000                  ASSERT 256 == S_SymbOS_exe_header
 41   0000                  ASSERT 6 == S_SymbOS_exe_header.datadr
 42   0000                  ASSERT 8 == S_SymbOS_exe_header.trnadr
 43   0000                  ASSERT 10 == S_SymbOS_exe_header.prztab
 44   0000                  ASSERT 14 == S_SymbOS_exe_header.bnknum
 45   0000
 46   0000              ;additional memory areas; 8 memory areas can be registered here, each entry consists of 5 bytes
 47   0000              ;00  1B  Ram bank number (1-8; if 0, the entry will be ignored)
 48   0000              ;01  1W  Address
 49   0000              ;03  1W  Length
 50   0000                  ASSERT 48 == S_SymbOS_exe_header.memtab
 51   0000
 52   0000              ;Application ID
 53   0000                  ASSERT 88 == S_SymbOS_exe_header.appId
 54   0000
 55   0000              ;Main process ID is at (S_SymbOS_exe_header.appId+1) (offset 89), but it is not easy
 56   0000              ;to create such label if "osver" is WORD type, that would need "union"-like feature
 57   0000              ;that's unlikely to happen, it's more reasonable to define osver as two bytes then.
 58   0000
 59   0000                  OUTPUT "multi_line_initializer.bin"
 60   0000                  ORG     #1000
 61   1000
 62   1000              exeHeader   S_SymbOS_exe_header {
 63   1000 34 12            #1234                   ; implicit delimiter at end (newline) (new line is next value)
 64   1002 45 23            #2345,                  ; explicit delimiter (comma) is valid only *AFTER* value
 65   1004 56 34            #3456
 66   1006 11 10            #1011
 67   1008 03 02            #0203                   ; relocate_count
 68   100A 05 04            #0405                   ; stack size
 69   100C 00 00 00 4D      { "MyName" }            ; name
 69   1010 79 4E 61 6D
 69   1014 65 00 00 00
 69   1018 00 00 00 00
 69   101C 00 00 00 00
 69   1020 00 00 00 00
 69   1024 00 00 00 00
 70   1028 AA AB AC         #AA, #ACAB,             ; flags, 16col icon offset
 71   102B 00 00 00 00      ,                       ; keep default identifier
 71   102F 00 53 79 6D
 71   1033 45 78 65 31
 71   1037 30
 72   1038 02 01 04 03      #0102, #0304, #0506     ; code/data/transfer extra memory
 72   103C 06 05
 73   103E 00 00 00 00      #0708                   ; OS ver
 73   1042 00 00 00...
 73   1058 08 07
 74   105A
 75   105A                  ; small icon
 76   105A 02               ,                       ; type + size sub-structure (default values)
 77   105B
 78   105B 08 08            {
 79   105D
 80   105D                      #31,#F5,#23,#3F,#56,#6E,#47,#6E,#8F,#EA,#FF,#AE,#74,#E2,#77,#EE
 81   105D
 82   105D 31 F5 23 3F      }
 82   1061 56 6E 47 6E
 82   1065 8F EA FF AE
 82   1069 74 E2 77 EE
 83   106D
 84   106D                  ; big icon (144 bytes of data)
 85   106D 06 18 18         {}, {
 86   1070                      #00,#00,#D0,#B0,#60,#C0,#00,#10,#60,#D0,#B0,#60,#00,#31,#F6,#FD,
 87   1070                      #FB,#F4,#00,#31,#FF,#FF,#FF,#FC,#00,#73,#FF,#FF,#FF,#FA,#00,#73,
 88   1070                      #FF,#FF,#FF,#FA,#00,#F7,#F0,#F0,#F7,#B6,#00,#F7,#FF,#FF,#FF,#F6,
 89   1070                      #10,#FE,#F0,#F0,#FE,#3E,#10,#FF,#FF,#FF,#FE,#3E,#31,#FF,#FF,#FF,
 90   1070                      #FD,#FE,#31,#FF,#FF,#FF,#ED,#3A,#73,#FF,#FF,#FF,#CB,#3A,#73,#FF,
 91   1070                      #FF,#FF,#FB,#FE,#F7,#FF,#FF,#FF,#87,#32,#F7,#FF,#FF,#FF,#87,#32,
 92   1070                      #70,#F0,#F0,#F0,#FF,#FE,#00,#21,#0F,#0F,#0E,#32,#00,#21,#0F,#0F,
 93   1070                      #0E,#32,#00,#31,#FF,#FF,#FF,#FE,#00,#21,#0F,#0F,#0C,#32,#00,#20,#00,#00,#00,#76,#00,#10,#FF,#FF,#FF,#EC,#00,#00,#F0,#F0,#F0,#C0
 94   1070 00 00 D0 B0      }
 94   1074 60 C0 00 10
 94   1078 60 D0 B0 60
 94   107C 00 31 F6 FD
 94   1080 FB F4 00 31
 94   1084 FF FF FF FC
 94   1088 00 73 FF FF
 94   108C FF FA 00 73
 94   1090 FF FF FF FA
 94   1094 00 F7 F0 F0
 94   1098 F7 B6 00 F7
 94   109C FF FF FF F6
 94   10A0 10 FE F0 F0
 94   10A4 FE 3E 10 FF
 94   10A8 FF FF FE 3E
 94   10AC 31 FF FF FF
 94   10B0 FD FE 31 FF
 94   10B4 FF FF ED 3A
 94   10B8 73 FF FF FF
 94   10BC CB 3A 73 FF
 94   10C0 FF FF FB FE
 94   10C4 F7 FF FF FF
 94   10C8 87 32 F7 FF
 94   10CC FF FF 87 32
 94   10D0 70 F0 F0 F0
 94   10D4 FF FE 00 21
 94   10D8 0F 0F 0E 32
 94   10DC 00 21 0F 0F
 94   10E0 0E 32 00 31
 94   10E4 FF FF FF FE
 94   10E8 00 21 0F 0F
 94   10EC 0C 32 00 20
 94   10F0 00 00 00 76
 94   10F4 00 10 FF FF
 94   10F8 FF EC 00 00
 94   10FC F0 F0 F0 C0
 95   1100
 96   1100
 97   1100
 98   1100                  ; these empty lines before final "}" are intentional
 99   1100
100   1100              }
101   1100 27                   daa     ; first line after multi-line struct init (make sure it gets into listing!)
102   1101
103   1101              test2   S_SymbOS_icon_header {
104   1101 01               1,
105   1102 02 03            2, 3
106   1104              }
107   1104
108   1104                  STRUCT S_test3
109   1104 ~            b1  byte    'b'
110   1104              icon    S_SymbOS_icon_header {
111   1104                  4,
112   1104                  5, 6
113   1104 ~            }
114   1104 ~            b2  byte    'e'
115   1104                  ENDS
116   1104
117   1104 62 04 05 06  test3a  S_test3
117   1108 65
118   1109
119   1109              test3b  S_test3 {
120   1109 42               'B',
121   110A 07               { 7,
122   110B 08 09                8, 9 },
123   110D 45               'E'
124   110E              }
125   110E
126   110E                  STRUCT S_test4
127   110E              icon    S_SymbOS_icon_header {
128   110E                  10,
129   110E                  11, 12
130   110E ~            }
131   110E                  ENDS
132   110E
133   110E 0A 0B 0C     test4a  S_test4
134   1111
135   1111              test4b  S_test4 {
136   1111 0D               { 13,
137   1112 0E 0F                14, 15 }
138   1114              }
139   1114
140   1114                  OUTEND
141   1114
142   1114              test4err    S_SymbOS_icon_header {
multi_line_initializer.asm(143): error: closing } missing
multi_line_initializer.asm(143): error: [STRUCT] Syntax error - too many arguments?
multi_line_initializer.asm(143): error: Unrecognized instruction: ,
143   1114 01 08 08         1,,, ; missing }
144   1117
# file closed: multi_line_initializer.asm

Value    Label
------ - -----------------------------------------------------------
0x1000 X exeHeader
0x1058 X exeHeader.appId
0x100E X exeHeader.bnknum
0x1000 X exeHeader.codelen
0x1038 X exeHeader.codex
0x1006 X exeHeader.datadr
0x1002 X exeHeader.datalen
0x103A X exeHeader.datex
0x1028 X exeHeader.flags
0x1070 X exeHeader.icobbgdat
0x105D X exeHeader.icobsmdat
0x1029 X exeHeader.icon16
0x106D X exeHeader.iconbg
0x106E X exeHeader.iconbg.sizex
0x106F X exeHeader.iconbg.sizey
0x106D X exeHeader.iconbg.type
0x105A X exeHeader.iconsm
0x105B X exeHeader.iconsm.sizex
0x105C X exeHeader.iconsm.sizey
0x105A X exeHeader.iconsm.type
0x1030 X exeHeader.identifier
0x1030 X exeHeader.memtab
0x100F X exeHeader.name
0x1006 X exeHeader.origin
0x1058 X exeHeader.osver
0x100A X exeHeader.prztab
0x1008 X exeHeader.relcount
0x100A X exeHeader.stacksize
0x1004 X exeHeader.tranlen
0x1008 X exeHeader.trnadr
0x103C X exeHeader.trnex
0x0100   S_SymbOS_exe_header
0x0058   S_SymbOS_exe_header.appId
0x000E   S_SymbOS_exe_header.bnknum
0x0000 X S_SymbOS_exe_header.codelen
0x0038 X S_SymbOS_exe_header.codex
0x0006   S_SymbOS_exe_header.datadr
0x0002 X S_SymbOS_exe_header.datalen
0x003A X S_SymbOS_exe_header.datex
0x0028 X S_SymbOS_exe_header.flags
0x0070 X S_SymbOS_exe_header.icobbgdat
0x005D X S_SymbOS_exe_header.icobsmdat
0x0029 X S_SymbOS_exe_header.icon16
0x006D X S_SymbOS_exe_header.iconbg
0x006E X S_SymbOS_exe_header.iconbg.sizex
0x006F X S_SymbOS_exe_header.iconbg.sizey
0x006D X S_SymbOS_exe_header.iconbg.type
0x005A X S_SymbOS_exe_header.iconsm
0x005B X S_SymbOS_exe_header.iconsm.sizex
0x005C X S_SymbOS_exe_header.iconsm.sizey
0x005A X S_SymbOS_exe_header.iconsm.type
0x0030 X S_SymbOS_exe_header.identifier
0x0030   S_SymbOS_exe_header.memtab
0x000F X S_SymbOS_exe_header.name
0x0006 X S_SymbOS_exe_header.origin
0x0058 X S_SymbOS_exe_header.osver
0x000A   S_SymbOS_exe_header.prztab
0x0008 X S_SymbOS_exe_header.relcount
0x000A X S_SymbOS_exe_header.stacksize
0x0004 X S_SymbOS_exe_header.tranlen
0x0008   S_SymbOS_exe_header.trnadr
0x003C X S_SymbOS_exe_header.trnex
0x0003 X S_SymbOS_icon_header
0x0001 X S_SymbOS_icon_header.sizex
0x0002 X S_SymbOS_icon_header.sizey
0x0000 X S_SymbOS_icon_header.type
0x0005 X S_test3
0x0000 X S_test3.b1
0x0004 X S_test3.b2
0x0001 X S_test3.icon
0x0002 X S_test3.icon.sizex
0x0003 X S_test3.icon.sizey
0x0001 X S_test3.icon.type
0x0003 X S_test4
0x0000 X S_test4.icon
0x0001 X S_test4.icon.sizex
0x0002 X S_test4.icon.sizey
0x0000 X S_test4.icon.type
0x1101 X test2
0x1102 X test2.sizex
0x1103 X test2.sizey
0x1101 X test2.type
0x1104 X test3a
0x1104 X test3a.b1
0x1108 X test3a.b2
0x1105 X test3a.icon
0x1106 X test3a.icon.sizex
0x1107 X test3a.icon.sizey
0x1105 X test3a.icon.type
0x1109 X test3b
0x1109 X test3b.b1
0x110D X test3b.b2
0x110A X test3b.icon
0x110B X test3b.icon.sizex
0x110C X test3b.icon.sizey
0x110A X test3b.icon.type
0x110E X test4a
0x110E X test4a.icon
0x110F X test4a.icon.sizex
0x1110 X test4a.icon.sizey
0x110E X test4a.icon.type
0x1111 X test4b
0x1111 X test4b.icon
0x1112 X test4b.icon.sizex
0x1113 X test4b.icon.sizey
0x1111 X test4b.icon.type
0x1114 X test4err
0x1115 X test4err.sizex
0x1116 X test4err.sizey
0x1114 X test4err.type
