LibreOffice Module basic (master) 1
filefmt.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#pragma once
21
22// Version 2: data type of the return value for publics
23// Version 3: new opcodes
24// Version 4: new opcodes
25// Version 5: bug (entry of STATIC-variables in the init code)
26// Version 6: new opcodes and bug (construct globals, without ending the BASIC)
27// Version 7: correction concerning the WITH-Parsing
28// Version 8: correction concerning the IF-Parsing
29// Version 9: end init code with LEAVE, too, if no SUB/FUNCTION follows
30// Version A: #36374 at DIM AS NEW... construct variable too
31// Version B: #40689 reorganized static
32// Version C: #41606 bug at static
33// Version D: #42678 bug at RTL-function spc
34// Version E: #56204 DCREATE, to also construct arrays at DIM AS NEW
35// Version F: #57844 introduction of SvNumberformat::StringToDouble
36// Version 10: #29955 generate for-loop-level in Statement-PCodes
37// Version 11: #29955 force anew compilation because of build-inconsistences
38// Version 12: aoo#64377 increase code size that basic can handle
39// tdf#75973 support user defined types B_USERTYPES in password protected macros
40// Version 13: tdf#94617 store methods nStart information greater than sal_Int16 limit
41// tdf#57113 store UTF-16 strings after legacy 1-byte-encoded strings in pool (no
42// version number bump for backward compatibility; relies on magic number)
43// tdf#142460: properly handle boolean values in string pool (no
44// version number bump for backward compatibility; relies on
45// new integer type suffix 'b')
46//
47
48#define B_IMG_VERSION_12 0x00000012
49#define B_IMG_VERSION_13 0x00000013
50
51// The file contains either a module- or a library-record.
52// Those records contain further records. Every record's got
53// the following header:
54
55// sal_uInt16 identifier
56// sal_uInt32 the record's length without the header
57// sal_uInt16 number of sub-elements
58
59// all the file-offsets in records are relative to the module's start!
60
61enum class FileOffset {
62 Library = 0x4C42, // BL Library Record
63 Module = 0x4D42, // BM Module Record
64 Name = 0x4E4D, // MN module name
65 Comment = 0x434D, // MC comment
66 Source = 0x4353, // SC source code
67 PCode = 0x4350, // PC p-code
68 OldPublics = 0x7550, // Pu publics
69 Publics = 0x5550, // PU publics
70 PoolDir = 0x4450, // PD symbol pool directory
71 SymPool = 0x5953, // SY symbol pool
72 StringPool = 0x5453, // ST symbol pool
73 LineRanges = 0x524C, // LR line ranges for publics
74 ModEnd = 0x454D, // ME module end
75 SbxObjects = 0x5853, // SX SBX objects
76 ExtSource = 0x5345, // ES extended source
77 UserTypes = 0x4369, // UT user defined types
78
80};
81
82
83// A library record contains only module records
84// sal_uInt16 identifier BL
85// sal_uInt32 the record's length
86// sal_uInt16 number of modules
87
88// A module-record contains all the other record types
89// sal_uInt16 identifier BM
90// sal_uInt32 the record's length
91// sal_uInt16 1
92// Data:
93// sal_uInt32 version number
94// sal_uInt32 character set
95// sal_uInt32 starting address initialisation code
96// sal_uInt32 starting address sub main
97// sal_uInt32 reserved
98// sal_uInt32 reserved
99
100// module name, comment and source code:
101// sal_uInt16 identifier MN, MC or SC
102// sal_uInt32 the record's length
103// sal_uInt16 1
104// Data:
105// string instance
106
107// P-Code:
108// sal_uInt16 identifier PC
109// sal_uInt32 the record's length
110// sal_uInt16 1
111// Data:
112// the P-Code as bytesack
113
114// All symbols and strings are kept in a string-pool.
115// References to these strings are in this pool in the form of an index.
116
117// List of all publics:
118// sal_uInt16 identifier PU or Pu
119// sal_uInt32 the record's length
120// sal_uInt16 number of publics
121// Data for every public-entry:
122// sal_uInt16 string index
123// sal_uInt32 starting address in the p-code-image (sal_uInt16 for old publics)
124// sal_uInt16 data type of the return value (from version 2)
125
126// Register of the symbol tables:
127// sal_uInt16 identifier SP
128// sal_uInt32 the record's length
129// sal_uInt16 number of symbol tables
130// Data for every symbol table:
131// sal_uInt16 stringindex of the name
132// sal_uInt16 number of symbols
133// sal_uInt16 scope identifier
134
135// symbol table:
136// sal_uInt16 identifier SY
137// sal_uInt32 the record's length
138// sal_uInt16 number of symbols
139// Data:
140// sal_uInt16 stringindex of the name
141// sal_uInt16 number of symbols
142// Data for every symbol:
143// sal_uInt16 stringindex of the name
144// sal_uInt16 data type
145// sal_uInt16 length for STRING*n-symbols (0x8000: STATIC variable)
146
147// Stringpool:
148// sal_uInt16 identifier ST
149// sal_uInt32 the record's length
150// sal_uInt16 number of strings
151// Data for every string:
152// sal_uInt32 Offset in the block of all strings
153// the block of all strings (ASCIIZ) follows then
154
155// line ranges:
156// sal_uInt16 identifier LR
157// sal_uInt32 the record's length
158// sal_uInt16 number of strings
159// Data for every public:
160// sal_uInt16 1st line (Sub XXX)
161// sal_uInt16 2nd line (End Sub)
162
163// SBX-objects:
164// sal_uInt16 number of objects
165// ... object data
166
167// user defined types B_USERTYPES :
168// sal_uInt16 identifier UT
169// sal_uInt32 the record's length
170// sal_uInt16 number of types
171// Data for every user defined type:
172// string instance type name
173// sal_Int16 number of type members
174// Data for every type member:
175// string name
176// sal_Int16 type
177// sal_uInt32 flags
178// sal_Int16 hasObjects (0/1)
179// If hasObjects
180// If member type is nested type
181// string nested type name
182// Else (array declaration)
183// sal_Int16 isFixedSize (0/1)
184// sal_Int32 number of dimensions
185// Data for every dimension:
186// sal_Int32 lower bound
187// sal_Int32 upper bound
188
189/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
FileOffset
Definition: filefmt.hxx:61
OUString Name