1*234bd5c5SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*234bd5c5SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*234bd5c5SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*234bd5c5SAndrew Rist * distributed with this work for additional information 6*234bd5c5SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*234bd5c5SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*234bd5c5SAndrew Rist * "License"); you may not use this file except in compliance 9*234bd5c5SAndrew Rist * with the License. You may obtain a copy of the License at 10*234bd5c5SAndrew Rist * 11*234bd5c5SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*234bd5c5SAndrew Rist * 13*234bd5c5SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*234bd5c5SAndrew Rist * software distributed under the License is distributed on an 15*234bd5c5SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*234bd5c5SAndrew Rist * KIND, either express or implied. See the License for the 17*234bd5c5SAndrew Rist * specific language governing permissions and limitations 18*234bd5c5SAndrew Rist * under the License. 19*234bd5c5SAndrew Rist * 20*234bd5c5SAndrew Rist *************************************************************/ 21*234bd5c5SAndrew Rist 22*234bd5c5SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #ifndef _SB_FILEFMT_HXX 25cdf0e10cSrcweir #define _SB_FILEFMT_HXX 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <tools/solar.h> 28cdf0e10cSrcweir 29cdf0e10cSrcweir class SvStream; 30cdf0e10cSrcweir 31cdf0e10cSrcweir // Version 2: Datentyp des Returnwerts fuer Publics 32cdf0e10cSrcweir // Version 3: neue Opcodes 33cdf0e10cSrcweir // Version 4: neue Opcodes 34cdf0e10cSrcweir // Version 5: Bug (Ansprung von STATIC-Variablen im Init-Code) 35cdf0e10cSrcweir // Version 6: Neue Opcodes und Bug (Globals anlegen, ohne BASIC zu beenden) 36cdf0e10cSrcweir // Version 7: Korrektur im WITH-Parsing 37cdf0e10cSrcweir // Version 8: Korrektur im IF-Parsing 38cdf0e10cSrcweir // Version 9: Init-Code auch mit LEAVE beenden, wenn keine SUB/FUNCTION folgt 39cdf0e10cSrcweir // Version A: #36374 Bei DIM AS NEW... auch Variablen anlegen 40cdf0e10cSrcweir // Version B: #40689 Static umgestellt 41cdf0e10cSrcweir // Version C: #41606 Bug bei Static 42cdf0e10cSrcweir // Version D: #42678 Bug bei RTL-Function spc 43cdf0e10cSrcweir // Version E: #56204 DCREATE, um auch bei DIM AS NEW Arrays anzulegen 44cdf0e10cSrcweir // Version F: #57844 Einfuehrung von SvNumberformat::StringToDouble 45cdf0e10cSrcweir // Version 10: #29955 For-Schleifen-Level in Statement-PCodes generieren 46cdf0e10cSrcweir // Version 11: #29955 Wegen Build-Inkonsistenzen Neu-Compilieren erzwingen 47cdf0e10cSrcweir 48cdf0e10cSrcweir #define B_LEGACYVERSION 0x00000011L 49cdf0e10cSrcweir #define B_CURVERSION 0x00000012L 50cdf0e10cSrcweir #define B_EXT_IMG_VERSION 0x00000012L 51cdf0e10cSrcweir 52cdf0e10cSrcweir // Eine Datei enthaelt entweder einen Modul- oder einen Library-Record. 53cdf0e10cSrcweir // Diese Records enthalten wiederum weitere Records. Jeder Record hat 54cdf0e10cSrcweir // den folgenden Header: 55cdf0e10cSrcweir 56cdf0e10cSrcweir // sal_uInt16 Kennung 57cdf0e10cSrcweir // sal_uInt32 Laenge des Records ohne Header 58cdf0e10cSrcweir // sal_uInt16 Anzahl Unterelemente 59cdf0e10cSrcweir 60cdf0e10cSrcweir // Alle Datei-Offsets in Records sind relativ zum Start des Moduls! 61cdf0e10cSrcweir 62cdf0e10cSrcweir #define B_LIBRARY 0x4C42 // BL Library Record 63cdf0e10cSrcweir #define B_MODULE 0x4D42 // BM Module Record 64cdf0e10cSrcweir #define B_NAME 0x4E4D // MN module name 65cdf0e10cSrcweir #define B_COMMENT 0x434D // MC comment 66cdf0e10cSrcweir #define B_SOURCE 0x4353 // SC source code 67cdf0e10cSrcweir #define B_PCODE 0x4350 // PC p-code 68cdf0e10cSrcweir #define B_OLDPUBLICS 0x7550 // Pu publics 69cdf0e10cSrcweir #define B_PUBLICS 0x5550 // PU publics 70cdf0e10cSrcweir #define B_POOLDIR 0x4450 // PD symbol pool directory 71cdf0e10cSrcweir #define B_SYMPOOL 0x5953 // SY symbol pool 72cdf0e10cSrcweir #define B_STRINGPOOL 0x5453 // ST symbol pool 73cdf0e10cSrcweir #define B_LINERANGES 0x524C // LR line ranges for publics 74cdf0e10cSrcweir #define B_MODEND 0x454D // ME module end 75cdf0e10cSrcweir #define B_SBXOBJECTS 0x5853 // SX SBX objects 76cdf0e10cSrcweir 77cdf0e10cSrcweir #define EXTENDED_BINARY_MODULES 78cdf0e10cSrcweir #ifdef EXTENDED_BINARY_MODULES 79cdf0e10cSrcweir #define B_EXTSOURCE 0x5345 // ES extended source 80cdf0e10cSrcweir #endif 81cdf0e10cSrcweir 82cdf0e10cSrcweir // Ein Library Record enthaelt nur Module Records 83cdf0e10cSrcweir // sal_uInt16 Kennung BL 84cdf0e10cSrcweir // sal_uInt32 Laenge des Records 85cdf0e10cSrcweir // sal_uInt16 Anzahl Module 86cdf0e10cSrcweir 87cdf0e10cSrcweir // Ein Modul-Record enthaelt alle anderen Recordtypen 88cdf0e10cSrcweir // sal_uInt16 Kennung BM 89cdf0e10cSrcweir // sal_uInt32 Laenge des Records 90cdf0e10cSrcweir // sal_uInt16 1 91cdf0e10cSrcweir // Daten: 92cdf0e10cSrcweir // sal_uInt32 Versionsnummer 93cdf0e10cSrcweir // sal_uInt32 Zeichensatz 94cdf0e10cSrcweir // sal_uInt32 Startadresse Initialisierungscode 95cdf0e10cSrcweir // sal_uInt32 Startadresse Sub Main 96cdf0e10cSrcweir // sal_uInt32 Reserviert 97cdf0e10cSrcweir // sal_uInt32 Reserviert 98cdf0e10cSrcweir 99cdf0e10cSrcweir // Modulname, Kommentar und Quellcode: 100cdf0e10cSrcweir // sal_uInt16 Kennung MN, MC oder SC 101cdf0e10cSrcweir // sal_uInt32 Laenge des Records 102cdf0e10cSrcweir // sal_uInt16 1 103cdf0e10cSrcweir // Daten: 104cdf0e10cSrcweir // String-Instanz 105cdf0e10cSrcweir 106cdf0e10cSrcweir // P-Code: 107cdf0e10cSrcweir // sal_uInt16 Kennung PC 108cdf0e10cSrcweir // sal_uInt32 Laenge des Records 109cdf0e10cSrcweir // sal_uInt16 1 110cdf0e10cSrcweir // Daten: 111cdf0e10cSrcweir // Der P-Code als Bytesack 112cdf0e10cSrcweir 113cdf0e10cSrcweir // Alle Symbole und Strings werden in einem String-Pool gehalten. 114cdf0e10cSrcweir // Verweise auf diese Strings sind in Form eines Indexes in diesen Pool. 115cdf0e10cSrcweir 116cdf0e10cSrcweir // Liste aller Publics: 117cdf0e10cSrcweir // sal_uInt16 Kennung PU oder Pu 118cdf0e10cSrcweir // sal_uInt32 Laenge des Records 119cdf0e10cSrcweir // sal_uInt16 Anzahl der Publics 120cdf0e10cSrcweir // Daten fuer jeden Public-Eintrag: 121cdf0e10cSrcweir // sal_uInt16 String-Index 122cdf0e10cSrcweir // sal_uInt32 Startadresse im P-Code-Image (sal_uInt16 fuer alte Publics) 123cdf0e10cSrcweir // sal_uInt16 Datentyp des Returnwertes (ab Version 2) 124cdf0e10cSrcweir 125cdf0e10cSrcweir // Verzeichnis der Symbol-Tabellen: 126cdf0e10cSrcweir // sal_uInt16 Kennung SP 127cdf0e10cSrcweir // sal_uInt32 Laenge des Records 128cdf0e10cSrcweir // sal_uInt16 Anzahl der Symboltabellen 129cdf0e10cSrcweir // Daten fuer jede Symboltabelle: 130cdf0e10cSrcweir // sal_uInt16 Stringindex des Namens 131cdf0e10cSrcweir // sal_uInt16 Anzahl Symbole 132cdf0e10cSrcweir // sal_uInt16 Scope-Kennung 133cdf0e10cSrcweir 134cdf0e10cSrcweir // Symboltabelle: 135cdf0e10cSrcweir // sal_uInt16 Kennung SY 136cdf0e10cSrcweir // sal_uInt32 Laenge des Records 137cdf0e10cSrcweir // sal_uInt16 Anzahl der Symbole 138cdf0e10cSrcweir // Daten: 139cdf0e10cSrcweir // sal_uInt16 Stringindex des Namens 140cdf0e10cSrcweir // sal_uInt16 Anzahl Symbole 141cdf0e10cSrcweir // Daten fuer jedes Symbol: 142cdf0e10cSrcweir // sal_uInt16 Stringindex des Namens 143cdf0e10cSrcweir // sal_uInt16 Datentyp 144cdf0e10cSrcweir // sal_uInt16 Laenge bei STRING*n-Symbolen (0x8000: STATIC-Variable) 145cdf0e10cSrcweir 146cdf0e10cSrcweir // Stringpool: 147cdf0e10cSrcweir // sal_uInt16 Kennung ST 148cdf0e10cSrcweir // sal_uInt32 Laenge des Records 149cdf0e10cSrcweir // sal_uInt16 Anzahl der Strings 150cdf0e10cSrcweir // Daten fuer jeden String: 151cdf0e10cSrcweir // sal_uInt32 Offset in den Block aller Strings 152cdf0e10cSrcweir // Danach folgt der Block aller Strings, die dort als ASCIIZ-Strings liegen. 153cdf0e10cSrcweir 154cdf0e10cSrcweir // Line Ranges: 155cdf0e10cSrcweir // sal_uInt16 Kennung LR 156cdf0e10cSrcweir // sal_uInt32 Laenge des Records 157cdf0e10cSrcweir // sal_uInt16 Anzahl der Strings 158cdf0e10cSrcweir // Daten fuer jedes Public: 159cdf0e10cSrcweir // sal_uInt16 1. Zeile (Sub XXX) 160cdf0e10cSrcweir // sal_uInt16 2. Zeile (End Sub) 161cdf0e10cSrcweir 162cdf0e10cSrcweir // SBX-Objekte: 163cdf0e10cSrcweir // sal_uInt16 Anzahl Objekte 164cdf0e10cSrcweir // .... Objektdaten 165cdf0e10cSrcweir 166cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////// 167cdf0e10cSrcweir 168cdf0e10cSrcweir // Service-Routinen (in IMAGE.CXX) 169cdf0e10cSrcweir 170cdf0e10cSrcweir sal_Bool SbGood( SvStream& r ); 171cdf0e10cSrcweir sal_uIntPtr SbOpenRecord( SvStream&, sal_uInt16 nSignature, sal_uInt16 nElem ); 172cdf0e10cSrcweir void SbCloseRecord( SvStream&, sal_uIntPtr ); 173cdf0e10cSrcweir 174cdf0e10cSrcweir #endif 175