xref: /aoo42x/main/basic/source/inc/filefmt.hxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef _SB_FILEFMT_HXX
29 #define _SB_FILEFMT_HXX
30 
31 #include <tools/solar.h>
32 
33 class SvStream;
34 
35 // Version  2: Datentyp des Returnwerts fuer Publics
36 // Version  3: neue Opcodes
37 // Version  4: neue Opcodes
38 // Version  5: Bug (Ansprung von STATIC-Variablen im Init-Code)
39 // Version  6: Neue Opcodes und Bug (Globals anlegen, ohne BASIC zu beenden)
40 // Version  7: Korrektur im WITH-Parsing
41 // Version  8: Korrektur im IF-Parsing
42 // Version  9: Init-Code auch mit LEAVE beenden, wenn keine SUB/FUNCTION folgt
43 // Version  A: #36374 Bei DIM AS NEW... auch Variablen anlegen
44 // Version  B: #40689 Static umgestellt
45 // Version  C: #41606 Bug bei Static
46 // Version  D: #42678 Bug bei RTL-Function spc
47 // Version  E: #56204 DCREATE, um auch bei DIM AS NEW Arrays anzulegen
48 // Version  F: #57844 Einfuehrung von SvNumberformat::StringToDouble
49 // Version 10: #29955 For-Schleifen-Level in Statement-PCodes generieren
50 // Version 11: #29955 Wegen Build-Inkonsistenzen Neu-Compilieren erzwingen
51 
52 #define B_LEGACYVERSION 0x00000011L
53 #define B_CURVERSION 0x00000012L
54 #define B_EXT_IMG_VERSION 0x00000012L
55 
56 // Eine Datei enthaelt entweder einen Modul- oder einen Library-Record.
57 // Diese Records enthalten wiederum weitere Records. Jeder Record hat
58 // den folgenden Header:
59 
60 //  sal_uInt16 Kennung
61 //  sal_uInt32 Laenge des Records ohne Header
62 //  sal_uInt16 Anzahl Unterelemente
63 
64 // Alle Datei-Offsets in Records sind relativ zum Start des Moduls!
65 
66 #define B_LIBRARY		0x4C42		// BL Library Record
67 #define	B_MODULE		0x4D42		// BM Module Record
68 #define	B_NAME			0x4E4D		// MN module name
69 #define	B_COMMENT		0x434D		// MC comment
70 #define	B_SOURCE		0x4353		// SC source code
71 #define	B_PCODE			0x4350		// PC p-code
72 #define	B_OLDPUBLICS 	0x7550		// Pu publics
73 #define	B_PUBLICS 		0x5550		// PU publics
74 #define	B_POOLDIR 		0x4450		// PD symbol pool directory
75 #define	B_SYMPOOL		0x5953		// SY symbol pool
76 #define	B_STRINGPOOL	0x5453		// ST symbol pool
77 #define	B_LINERANGES	0x524C		// LR line ranges for publics
78 #define	B_MODEND		0x454D		// ME module end
79 #define	B_SBXOBJECTS	0x5853		// SX SBX objects
80 
81 #define	EXTENDED_BINARY_MODULES
82 #ifdef  EXTENDED_BINARY_MODULES
83 #define	B_EXTSOURCE		0x5345		// ES extended source
84 #endif
85 
86 // Ein Library Record enthaelt nur Module Records
87 //  sal_uInt16 Kennung BL
88 //  sal_uInt32 Laenge des Records
89 //  sal_uInt16 Anzahl Module
90 
91 // Ein Modul-Record enthaelt alle anderen Recordtypen
92 //  sal_uInt16 Kennung BM
93 //  sal_uInt32 Laenge des Records
94 //  sal_uInt16 1
95 // Daten:
96 //  sal_uInt32 Versionsnummer
97 //  sal_uInt32 Zeichensatz
98 //  sal_uInt32 Startadresse Initialisierungscode
99 //  sal_uInt32 Startadresse Sub Main
100 //  sal_uInt32 Reserviert
101 //  sal_uInt32 Reserviert
102 
103 // Modulname, Kommentar und Quellcode:
104 //  sal_uInt16 Kennung MN, MC oder SC
105 //  sal_uInt32 Laenge des Records
106 //  sal_uInt16 1
107 // Daten:
108 //  String-Instanz
109 
110 // P-Code:
111 //  sal_uInt16 Kennung PC
112 //  sal_uInt32 Laenge des Records
113 //  sal_uInt16 1
114 // Daten:
115 //  Der P-Code als Bytesack
116 
117 // Alle Symbole und Strings werden in einem String-Pool gehalten.
118 // Verweise auf diese Strings sind in Form eines Indexes in diesen Pool.
119 
120 // Liste aller Publics:
121 //  sal_uInt16 Kennung PU oder Pu
122 //  sal_uInt32 Laenge des Records
123 //  sal_uInt16 Anzahl der Publics
124 // Daten fuer jeden Public-Eintrag:
125 //  sal_uInt16 String-Index
126 //  sal_uInt32 Startadresse im P-Code-Image (sal_uInt16 fuer alte Publics)
127 //  sal_uInt16 Datentyp des Returnwertes (ab Version 2)
128 
129 // Verzeichnis der Symbol-Tabellen:
130 //  sal_uInt16 Kennung SP
131 //  sal_uInt32 Laenge des Records
132 //  sal_uInt16 Anzahl der Symboltabellen
133 // Daten fuer jede Symboltabelle:
134 //  sal_uInt16 Stringindex des Namens
135 //  sal_uInt16 Anzahl Symbole
136 //  sal_uInt16 Scope-Kennung
137 
138 // Symboltabelle:
139 //  sal_uInt16 Kennung SY
140 //  sal_uInt32 Laenge des Records
141 //  sal_uInt16 Anzahl der Symbole
142 // Daten:
143 //  sal_uInt16 Stringindex des Namens
144 //  sal_uInt16 Anzahl Symbole
145 // Daten fuer jedes Symbol:
146 //  sal_uInt16 Stringindex des Namens
147 //  sal_uInt16 Datentyp
148 //  sal_uInt16 Laenge bei STRING*n-Symbolen (0x8000: STATIC-Variable)
149 
150 // Stringpool:
151 //  sal_uInt16 Kennung ST
152 //  sal_uInt32 Laenge des Records
153 //  sal_uInt16 Anzahl der Strings
154 // Daten fuer jeden String:
155 //  sal_uInt32 Offset in den Block aller Strings
156 // Danach folgt der Block aller Strings, die dort als ASCIIZ-Strings liegen.
157 
158 // Line Ranges:
159 //  sal_uInt16 Kennung LR
160 //  sal_uInt32 Laenge des Records
161 //  sal_uInt16 Anzahl der Strings
162 // Daten fuer jedes Public:
163 //  sal_uInt16 1. Zeile (Sub XXX)
164 //  sal_uInt16 2. Zeile (End Sub)
165 
166 // SBX-Objekte:
167 // sal_uInt16 Anzahl Objekte
168 // ....   Objektdaten
169 
170 ////////////////////////////////////////////////////////////////////////////
171 
172 // Service-Routinen (in IMAGE.CXX)
173 
174 sal_Bool  SbGood( SvStream& r );
175 sal_uIntPtr SbOpenRecord( SvStream&, sal_uInt16 nSignature, sal_uInt16 nElem );
176 void  SbCloseRecord( SvStream&, sal_uIntPtr );
177 
178 #endif
179