| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the 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: |
| |
| // sal_uInt16 Kennung |
| // sal_uInt32 Laenge des Records ohne Header |
| // sal_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 |
| // sal_uInt16 Kennung BL |
| // sal_uInt32 Laenge des Records |
| // sal_uInt16 Anzahl Module |
| |
| // Ein Modul-Record enthaelt alle anderen Recordtypen |
| // sal_uInt16 Kennung BM |
| // sal_uInt32 Laenge des Records |
| // sal_uInt16 1 |
| // Daten: |
| // sal_uInt32 Versionsnummer |
| // sal_uInt32 Zeichensatz |
| // sal_uInt32 Startadresse Initialisierungscode |
| // sal_uInt32 Startadresse Sub Main |
| // sal_uInt32 Reserviert |
| // sal_uInt32 Reserviert |
| |
| // Modulname, Kommentar und Quellcode: |
| // sal_uInt16 Kennung MN, MC oder SC |
| // sal_uInt32 Laenge des Records |
| // sal_uInt16 1 |
| // Daten: |
| // String-Instanz |
| |
| // P-Code: |
| // sal_uInt16 Kennung PC |
| // sal_uInt32 Laenge des Records |
| // sal_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: |
| // sal_uInt16 Kennung PU oder Pu |
| // sal_uInt32 Laenge des Records |
| // sal_uInt16 Anzahl der Publics |
| // Daten fuer jeden Public-Eintrag: |
| // sal_uInt16 String-Index |
| // sal_uInt32 Startadresse im P-Code-Image (sal_uInt16 fuer alte Publics) |
| // sal_uInt16 Datentyp des Returnwertes (ab Version 2) |
| |
| // Verzeichnis der Symbol-Tabellen: |
| // sal_uInt16 Kennung SP |
| // sal_uInt32 Laenge des Records |
| // sal_uInt16 Anzahl der Symboltabellen |
| // Daten fuer jede Symboltabelle: |
| // sal_uInt16 Stringindex des Namens |
| // sal_uInt16 Anzahl Symbole |
| // sal_uInt16 Scope-Kennung |
| |
| // Symboltabelle: |
| // sal_uInt16 Kennung SY |
| // sal_uInt32 Laenge des Records |
| // sal_uInt16 Anzahl der Symbole |
| // Daten: |
| // sal_uInt16 Stringindex des Namens |
| // sal_uInt16 Anzahl Symbole |
| // Daten fuer jedes Symbol: |
| // sal_uInt16 Stringindex des Namens |
| // sal_uInt16 Datentyp |
| // sal_uInt16 Laenge bei STRING*n-Symbolen (0x8000: STATIC-Variable) |
| |
| // Stringpool: |
| // sal_uInt16 Kennung ST |
| // sal_uInt32 Laenge des Records |
| // sal_uInt16 Anzahl der Strings |
| // Daten fuer jeden String: |
| // sal_uInt32 Offset in den Block aller Strings |
| // Danach folgt der Block aller Strings, die dort als ASCIIZ-Strings liegen. |
| |
| // Line Ranges: |
| // sal_uInt16 Kennung LR |
| // sal_uInt32 Laenge des Records |
| // sal_uInt16 Anzahl der Strings |
| // Daten fuer jedes Public: |
| // sal_uInt16 1. Zeile (Sub XXX) |
| // sal_uInt16 2. Zeile (End Sub) |
| |
| // SBX-Objekte: |
| // sal_uInt16 Anzahl Objekte |
| // .... Objektdaten |
| |
| //////////////////////////////////////////////////////////////////////////// |
| |
| // Service-Routinen (in IMAGE.CXX) |
| |
| sal_Bool SbGood( SvStream& r ); |
| sal_uIntPtr SbOpenRecord( SvStream&, sal_uInt16 nSignature, sal_uInt16 nElem ); |
| void SbCloseRecord( SvStream&, sal_uIntPtr ); |
| |
| #endif |