LibreOffice Module basic (master)
1
basic
source
inc
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
61
enum 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
79
LastValue
=
UserTypes
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: */
Blend::Source
@ Source
FileOffset
FileOffset
Definition:
filefmt.hxx:61
FileOffset::LineRanges
@ LineRanges
FileOffset::UserTypes
@ UserTypes
FileOffset::OldPublics
@ OldPublics
FileOffset::PCode
@ PCode
FileOffset::ExtSource
@ ExtSource
FileOffset::LastValue
@ LastValue
FileOffset::SymPool
@ SymPool
FileOffset::Publics
@ Publics
FileOffset::ModEnd
@ ModEnd
FileOffset::PoolDir
@ PoolDir
FileOffset::StringPool
@ StringPool
FileOffset::SbxObjects
@ SbxObjects
ExternalLinkType::Library
@ Library
Module
TokenType::Comment
@ Comment
Name
OUString Name
Generated on Sun Jul 30 2023 04:39:05 for LibreOffice Module basic (master) by
1.9.3