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