summaryrefslogtreecommitdiff
path: root/basic/source/inc/filefmt.hxx
blob: 7fab7098495e720987b42870e58fd13769f3578f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/*************************************************************************
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 * 
 * Copyright 2000, 2010 Oracle and/or its affiliates.
 *
 * OpenOffice.org - a multi-platform office productivity suite
 *
 * This file is part of OpenOffice.org.
 *
 * OpenOffice.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * OpenOffice.org is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with OpenOffice.org.  If not, see
 * <http://www.openoffice.org/license.html>
 * for a copy of the LGPLv3 License.
 *
 ************************************************************************/

#ifndef _SB_FILEFMT_HXX
#define _SB_FILEFMT_HXX

#include <tools/solar.h>

class SvStream;

// Version  2: Datentyp des Returnwerts fuer Publics
// Version  3: neue Opcodes
// Version  4: neue Opcodes
// Version  5: Bug (Ansprung von STATIC-Variablen im Init-Code)
// Version  6: Neue Opcodes und Bug (Globals anlegen, ohne BASIC zu beenden)
// Version  7: Korrektur im WITH-Parsing
// Version  8: Korrektur im IF-Parsing
// Version  9: Init-Code auch mit LEAVE beenden, wenn keine SUB/FUNCTION folgt
// Version  A: #36374 Bei DIM AS NEW... auch Variablen anlegen
// Version  B: #40689 Static umgestellt
// Version  C: #41606 Bug bei Static
// Version  D: #42678 Bug bei RTL-Function spc
// Version  E: #56204 DCREATE, um auch bei DIM AS NEW Arrays anzulegen
// Version  F: #57844 Einfuehrung von SvNumberformat::StringToDouble
// Version 10: #29955 For-Schleifen-Level in Statement-PCodes generieren
// Version 11: #29955 Wegen Build-Inkonsistenzen Neu-Compilieren erzwingen

#define B_LEGACYVERSION 0x00000011L
#define B_CURVERSION 0x00000012L
#define B_EXT_IMG_VERSION 0x00000012L

// Eine Datei enthaelt entweder einen Modul- oder einen Library-Record.
// Diese Records enthalten wiederum weitere Records. Jeder Record hat
// den folgenden Header:

//  UINT16 Kennung
//  UINT32 Laenge des Records ohne Header
//  UINT16 Anzahl Unterelemente

// Alle Datei-Offsets in Records sind relativ zum Start des Moduls!

#define B_LIBRARY		0x4C42		// BL Library Record
#define	B_MODULE		0x4D42		// BM Module Record
#define	B_NAME			0x4E4D		// MN module name
#define	B_COMMENT		0x434D		// MC comment
#define	B_SOURCE		0x4353		// SC source code
#define	B_PCODE			0x4350		// PC p-code
#define	B_OLDPUBLICS 	0x7550		// Pu publics
#define	B_PUBLICS 		0x5550		// PU publics
#define	B_POOLDIR 		0x4450		// PD symbol pool directory
#define	B_SYMPOOL		0x5953		// SY symbol pool
#define	B_STRINGPOOL	0x5453		// ST symbol pool
#define	B_LINERANGES	0x524C		// LR line ranges for publics
#define	B_MODEND		0x454D		// ME module end
#define	B_SBXOBJECTS	0x5853		// SX SBX objects

#define	EXTENDED_BINARY_MODULES
#ifdef  EXTENDED_BINARY_MODULES
#define	B_EXTSOURCE		0x5345		// ES extended source
#endif

// Ein Library Record enthaelt nur Module Records
//  UINT16 Kennung BL
//  UINT32 Laenge des Records
//  UINT16 Anzahl Module

// Ein Modul-Record enthaelt alle anderen Recordtypen
//  UINT16 Kennung BM
//  UINT32 Laenge des Records
//  UINT16 1
// Daten:
//  UINT32 Versionsnummer
//  UINT32 Zeichensatz
//  UINT32 Startadresse Initialisierungscode
//  UINT32 Startadresse Sub Main
//  UINT32 Reserviert
//  UINT32 Reserviert

// Modulname, Kommentar und Quellcode:
//  UINT16 Kennung MN, MC oder SC
//  UINT32 Laenge des Records
//  UINT16 1
// Daten:
//  String-Instanz

// P-Code:
//  UINT16 Kennung PC
//  UINT32 Laenge des Records
//  UINT16 1
// Daten:
//  Der P-Code als Bytesack

// Alle Symbole und Strings werden in einem String-Pool gehalten.
// Verweise auf diese Strings sind in Form eines Indexes in diesen Pool.

// Liste aller Publics:
//  UINT16 Kennung PU oder Pu
//  UINT32 Laenge des Records
//  UINT16 Anzahl der Publics
// Daten fuer jeden Public-Eintrag:
//  UINT16 String-Index
//  UINT32 Startadresse im P-Code-Image (UINT16 fuer alte Publics)
//  UINT16 Datentyp des Returnwertes (ab Version 2)

// Verzeichnis der Symbol-Tabellen:
//  UINT16 Kennung SP
//  UINT32 Laenge des Records
//  UINT16 Anzahl der Symboltabellen
// Daten fuer jede Symboltabelle:
//  UINT16 Stringindex des Namens
//  UINT16 Anzahl Symbole
//  UINT16 Scope-Kennung

// Symboltabelle:
//  UINT16 Kennung SY
//  UINT32 Laenge des Records
//  UINT16 Anzahl der Symbole
// Daten:
//  UINT16 Stringindex des Namens
//  UINT16 Anzahl Symbole
// Daten fuer jedes Symbol:
//  UINT16 Stringindex des Namens
//  UINT16 Datentyp
//  UINT16 Laenge bei STRING*n-Symbolen (0x8000: STATIC-Variable)

// Stringpool:
//  UINT16 Kennung ST
//  UINT32 Laenge des Records
//  UINT16 Anzahl der Strings
// Daten fuer jeden String:
//  UINT32 Offset in den Block aller Strings
// Danach folgt der Block aller Strings, die dort als ASCIIZ-Strings liegen.

// Line Ranges:
//  UINT16 Kennung LR
//  UINT32 Laenge des Records
//  UINT16 Anzahl der Strings
// Daten fuer jedes Public:
//  UINT16 1. Zeile (Sub XXX)
//  UINT16 2. Zeile (End Sub)

// SBX-Objekte:
// UINT16 Anzahl Objekte
// ....   Objektdaten

////////////////////////////////////////////////////////////////////////////

// Service-Routinen (in IMAGE.CXX)

BOOL  SbGood( SvStream& r );
ULONG SbOpenRecord( SvStream&, UINT16 nSignature, UINT16 nElem );
void  SbCloseRecord( SvStream&, ULONG );

#endif