--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstools/bitmapfonttools/src/PDRREADR.CPP Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,1009 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Header PDRREADR.CPP
+*
+*/
+
+
+#include "PDRREADR.H"
+
+const int NumResources=34;
+
+String IdentResource[NumResources] =
+ {
+ "Reset",
+ "SetPageSize",
+ "PreAmble",
+ "PostAmble",
+ "SetTextColor", // !!
+ "BoldOn",
+ "BoldOff",
+ "ItalicOn",
+ "ItalicOff",
+ "UnderlineOn",
+ "UnderlineOff",
+ "StrikethroughOn",
+ "StrikethroughOff",
+ "NewPage",
+ "Portrait",
+ "Landscape",
+ "SetXPos",
+ "SetYPos",
+ "IncrementXPos",
+ "IncrementYPos",
+ "CarriageReturn",
+ "SetGraphicsColor", // !!
+ "BitmapStart",
+ "BitmapEnd",
+ "ScanLine",
+ "EndScanLine", // !!
+ "Resource1",
+ "Resource2",
+ "Resource3",
+ "Resource4",
+ "Resource5",
+ "Resource6",
+ "Resource7",
+ "Resource8"
+ };
+
+const int NumDisplayModeValues = 11;
+
+String IdentDisplayModeValue[NumDisplayModeValues] =
+ {
+ "None",
+ "Gray2",
+ "Gray4",
+ "Gray16",
+ "Gray256",
+ "Color16",
+ "Color256",
+ "Color64K",
+ "Color16M",
+ "Rgb",
+ "Color4K"
+ };
+
+EXPORT_C PdrReader::PdrReader()
+ : Reader(),
+ iPdrModelStore(),
+ iPdrStoreFile(NULL),
+ iResources(NULL),
+ iTranslates(NULL),
+ iCodeSection(NULL),
+ iFontInfo(NULL),
+ iIndex(Normal),
+ iFontHeight(NULL),
+ iTypefaceFonts(NULL),
+ iModel(NULL)
+ {
+ }
+
+EXPORT_C boolean PdrReader::Read(const String& aFilename)
+ {
+ boolean state = Open(aFilename);
+
+ while (!_EOF() && state)
+ {
+ if (IdentComp(IdentResources))
+ state = ReadResources();
+ else if (IdentComp(IdentTranslates))
+ state = ReadTranslates();
+ else if (IdentComp(IdentFontInfo))
+ state = ReadFontInfo();
+ else if (IdentComp(IdentTypefaceFonts))
+ state = ReadTypefaceFonts();
+// else if (IdentComp(IdentExtraInfo))
+// state = ReadExtraInfo();
+ else if (IdentComp(IdentModel))
+ state = ReadModel();
+ else if (IdentComp(IdentPdrStoreFile))
+ state = ReadPdrStoreFile();
+ else
+ {
+ Error("Resource identifier expected");
+ state = efalse;
+ }
+ if (state)
+ state = NewLine();
+ }
+ return state;
+ }
+
+EXPORT_C PdrReader::~PdrReader()
+ {
+ }
+
+boolean PdrReader::ReadResources()
+ {
+ boolean state = etrue;
+ iResources = PdrResources::New();
+ state = IdentCopy(iResources->iLabel);
+ if (state)
+ state = NewLine();
+ while (!IdentComp(IdentEndResources) && !_EOF() && state)
+ {
+ int i; // DEF102183: Graphics tools fail to build using MS VC8.
+ for (i = 0; (i < NumResources) && !IdentComp(IdentResource[i]); i++)
+ { // Tries to match resources identifier
+ }
+ if (i < NumResources)
+ {
+ PdrResource *resource = PdrResource::New();
+ state = Command(resource->iString);
+ resource->iId = i;
+ if (state)
+ {
+ iResources->AddResource(resource);
+ state = NewLine();
+ }
+ else
+ resource->Delete();
+ }
+ else
+ {
+ state = efalse;
+ Error("Resources identifier expected");
+ }
+ }
+ if (state)
+ {
+ iPdrModelStore.AddResources(iResources);
+ cout << "Resources read\n";
+ }
+ else
+ iResources->Delete();
+ return state;
+ }
+
+boolean PdrReader::ReadTranslates()
+ {
+ int num;
+ boolean state = etrue;
+ iTranslates = PdrTranslates::New();
+ state = IdentCopy(iTranslates->iLabel);
+ if (state)
+ state = NewLine();
+ while (!IdentComp(IdentEndTranslates) && !_EOF() && state)
+ {
+ if (iLex->iType == ELexNumber)
+ {
+ PdrTranslation *translation = PdrTranslation::New();
+ Number(num);
+ translation->iFrom = uint16(num);
+ char ch;
+ state = Operator(ch);
+ if (state)
+ {
+ state = (ch == ':');
+ if (state)
+ {
+ if (iLex->iType == ELexNumber)
+ {
+ state = Number(num);
+ translation->iTo += char(num);
+ }
+ else
+ {
+ state = Command(translation->iTo);
+ }
+ if (state)
+ state = NewLine();
+ }
+ else
+ {
+ Error("Operator ':' expected");
+ }
+ }
+ if (state)
+ iTranslates->AddTranslation(translation);
+ else
+ translation->Delete();
+ }
+ }
+ if (state)
+ {
+ iPdrModelStore.AddTranslates(iTranslates);
+ cout << "Translates read\n";
+ }
+ else
+ iTranslates->Delete();
+ return state;
+ }
+
+boolean PdrReader::ReadCodeSection(int aCode)
+ {
+ boolean state = etrue;
+ int code;
+ int num;
+ iCodeSection = WidthsCodeSection::New();
+ char ch = 0;
+ state = Number(num);
+ if ((num<aCode) && state)
+ {
+ Error("CodeSection out of sequence");
+ state = efalse;
+ }
+ if (state)
+ {
+ iCodeSection->iStart = uint16(num);
+ state = Operator(ch);
+ if (state)
+ state = (ch == ':');
+ if (state)
+ {
+ state = Number(num);
+ iCodeSection->iEnd = uint16(num);
+ state = NewLine();
+ }
+ else
+ {
+ state = efalse;
+ Error("Operator ':' expected");
+ }
+ }
+ else
+ state = efalse;
+ while (!IdentComp(IdentEndCodeSection) && !_EOF() && state)
+ {
+ if (iLex->iType != ELexNL)
+ {
+ state = Number(code);
+ if ((code != iCodeSection->iStart + iCodeSection->NumWidths()) && state)
+ {
+ state = efalse;
+ Error("Width out of sequence");
+ }
+ if (state)
+ state = Operator(ch);
+ if (state)
+ state = (ch == ':');
+ if (state)
+ {
+ Width *width = Width::New();
+ if (Number(num))
+ {
+ width->iWidthInPixels = (uint16) num;
+ iCodeSection->AddWidth(width);
+ }
+ else
+ {
+ state = efalse;
+ width->Delete();
+ }
+ }
+ }
+ else
+ state = NewLine();
+ }
+ if (state)
+ {
+ num = ((iCodeSection->iEnd + 1) - iCodeSection->iStart);
+ if ((num != iCodeSection->NumWidths()) && (iCodeSection->NumWidths() != 1))
+ {
+ Error("Wrong number of widths in codesection");
+ state = efalse;
+ }
+ }
+ if (state)
+ {
+ iFontInfo->AddCodeSection(iCodeSection);
+// cout << "Codesection read\n";
+ }
+ else
+ iCodeSection->Delete();
+ return state;
+ }
+
+boolean PdrReader::ReadFontInfo()
+ {
+ boolean state = etrue;
+ iFontInfo = FontInfo::New();
+ int num;
+ state = IdentCopy(iFontInfo->iLabel);
+ if (state)
+ state = NewLine();
+ while (!IdentComp(IdentEndFontInfo) && !_EOF() && state)
+ {
+ if (iLex->iType == ELexIdent)
+ {
+ if (IdentComp(IdentCodeSection))
+ {
+ int code = 0,size = iFontInfo->NumCodeSections();
+ if (size)
+ code = iFontInfo->CodeSectionList(size - 1)->iEnd + 1;
+ state = ReadCodeSection(code);
+ }
+ else if (IdentComp(IdentAscent))
+ {
+ if (Number(num))
+ iFontInfo->iAscentInPixels = uint16(num);
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentMaxNormalCharWidth))
+ {
+ state = Number(num);
+ if (state)
+ iFontInfo->iMaxNormalCharWidthInPixels = uint16(num);
+ }
+ else
+ {
+ Error("Unrecognised fontinfo identifier");
+ state = efalse;
+ }
+ }
+ else
+ {
+ Error("Fontinfo identifier expected");
+ state = efalse;
+ }
+ if (state)
+ state = NewLine();
+ }
+ if (state)
+ {
+ iFontInfo->iMaxCharWidthInPixels = 0;
+ for (int i = 0; i < iFontInfo->NumCodeSections(); i++)
+ {
+ WidthsCodeSection* codesection = iFontInfo->CodeSectionList(i);
+ for (int j = 0; j < codesection->NumWidths(); j++)
+ {
+ int width = codesection->WidthList(j)->iWidthInPixels;
+ if (width > iFontInfo->iMaxCharWidthInPixels)
+ iFontInfo->iMaxCharWidthInPixels = (uint16) width;
+ }
+ }
+ }
+ if (state)
+ {
+ iPdrModelStore.AddFontInfo(iFontInfo);
+ cout << "Fontinfo read\n";
+ }
+ else
+ iFontInfo->Delete();
+ return state;
+ }
+
+boolean PdrReader::ReadStyle()
+ {
+ boolean state = etrue;
+ Record *fontinfo;
+ PdrStyle *style;
+ String label;
+ if (!iTypefaceFonts->iIsScalable)
+ style = &iFontHeight->iStyle[iIndex];
+ else
+ style = &iTypefaceFonts->iScalableFontHeight.iStyle[iIndex];
+ style->iIsAvailable = etrue;
+ state = IdentCopy(label);
+ if (state)
+ {
+ fontinfo = iPdrModelStore.FindFontInfo(label);
+ if (fontinfo)
+ style->iFontInfo = fontinfo;
+ else
+ {
+ Error("Fontinfo not found");
+ state = efalse;
+ }
+ }
+ return state;
+ }
+
+boolean PdrReader::ReadFontHeight()
+ {
+ boolean state = etrue;
+ int num;
+ if (iTypefaceFonts->iIsScalable == etrue)
+ {
+ state = efalse;
+ Error("Scalablefontheight already defined");
+ }
+ else
+ iFontHeight = PdrFontHeight::New();
+ if (state)
+ state = NewLine();
+
+ while (!IdentComp(IdentEndFontHeight) && !_EOF() && state)
+ {
+ if (iLex->iType == ELexIdent)
+ {
+ if (IdentComp(IdentHeight))
+ {
+ if (Number(num))
+ iFontHeight->iHeightInTwips = num;
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentWidthScale))
+ {
+ if (Number(num))
+ iFontHeight->iWidthScale = num;
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentNormal))
+ {
+ iIndex = Normal;
+ state = ReadStyle();
+ }
+ else if (IdentComp(IdentBold))
+ {
+ iIndex = Bold;
+ state = ReadStyle();
+ }
+ else if (IdentComp(IdentItalic))
+ {
+ iIndex = Italic;
+ state = ReadStyle();
+ }
+ else if (IdentComp(IdentBoldItalic))
+ {
+ iIndex = BoldItalic;
+ state = ReadStyle();
+ }
+ else if (IdentComp(IdentCommand))
+ {
+ state = Command(iFontHeight->iCommandString);
+ }
+ else
+ {
+ Error("Unrecognised fontheight identifier");
+ state = efalse;
+ }
+ }
+ else
+ {
+ Error("Fontheight identifier expected");
+ state = efalse;
+ }
+ if (state)
+ state = NewLine();
+ }
+ if (state)
+ {
+ iTypefaceFonts->AddFontHeight(iFontHeight);
+ cout << "Fontheight read\n";
+ }
+ else
+ iFontHeight->Delete();
+ return state;
+ }
+
+boolean PdrReader::ReadScalableFontHeight()
+ {
+ boolean state = etrue;
+ int num;
+ if (iTypefaceFonts->NumFontHeights())
+ {
+ state = efalse;
+ Error("Non-scalable fontheights already defined");
+ }
+ else if (iTypefaceFonts->iIsScalable == etrue)
+ {
+ state = efalse;
+ Error("Scalablefontheight already defined");
+ }
+ iTypefaceFonts->iIsScalable=etrue;
+ if (state)
+ state = NewLine();
+
+ while (!IdentComp(IdentEndScalableFontHeight) && !_EOF() && state)
+ {
+ if (iLex->iType == ELexIdent)
+ {
+ if (IdentComp(IdentHeightMin))
+ {
+ if (Number(num))
+ iTypefaceFonts->iScalableFontHeight.iHeightMinInTwips = num;
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentHeightMax))
+ {
+ if (Number(num))
+ iTypefaceFonts->iScalableFontHeight.iHeightMaxInTwips = num;
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentHeightDelta))
+ {
+ if (Number(num))
+ iTypefaceFonts->iScalableFontHeight.iHeightDeltaInTwips = num;
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentNormal))
+ {
+ iIndex = Normal;
+ state = ReadStyle();
+ }
+ else if (IdentComp(IdentBold))
+ {
+ iIndex = Bold;
+ state = ReadStyle();
+ }
+ else if (IdentComp(IdentItalic))
+ {
+ iIndex = Italic;
+ state = ReadStyle();
+ }
+ else if (IdentComp(IdentBoldItalic))
+ {
+ iIndex = BoldItalic;
+ state = ReadStyle();
+ }
+ else if (IdentComp(IdentCommand))
+ {
+ state = Command(iTypefaceFonts->iScalableFontHeight.iCommandString);
+ }
+ else
+ {
+ Error("Unrecognised scalablefontheight identifier");
+ state = efalse;
+ }
+ }
+ else
+ {
+ Error("Scalablefontheight identifier expected");
+ state = efalse;
+ }
+ if (state)
+ state = NewLine();
+ }
+ if (state)
+ {
+ cout << "Scalablefontheight read\n";
+ }
+ else
+ {
+ if (!iTypefaceFonts->iIsScalable)
+ iFontHeight->Delete();
+ }
+ return state;
+ }
+
+boolean PdrReader::ReadTypefaceFonts()
+ {
+ boolean state = etrue;
+ Record* translates;
+ String label;
+ iTypefaceFonts = TypefaceFonts::New();
+ state = IdentCopy(iTypefaceFonts->iLabel);
+ if (state)
+ state = NewLine();
+ while (!IdentComp(IdentEndTypefaceFonts) && !_EOF() && state)
+ {
+ if (iLex->iType == ELexIdent)
+ {
+ if (IdentComp(IdentTypefaceName))
+ {
+ if (StringCopy(iTypefaceFonts->iTypeface.iName))
+ while (iLex->iType != ELexNL)
+ { if (IdentComp(IdentProportional))
+ iTypefaceFonts->iTypeface.iFlags = boolean(iTypefaceFonts->iTypeface.iFlags | Proportional);
+ else if (IdentComp(IdentSerif))
+ iTypefaceFonts->iTypeface.iFlags = boolean(iTypefaceFonts->iTypeface.iFlags | Serif);
+ else if (IdentComp(IdentSymbol))
+ iTypefaceFonts->iTypeface.iFlags = boolean(iTypefaceFonts->iTypeface.iFlags | Symbol);
+ else
+ {
+ Error("Typefacefonts identifier or newline expected");
+ state = efalse;
+ }
+ }
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentTypefaceTranslates))
+ {
+ state = IdentCopy(label);
+ if (state)
+ {
+ translates = iPdrModelStore.FindTranslates(label);
+ if (translates)
+ iTypefaceFonts->iTranslates = translates;
+ else
+ {
+ Error("Translates not found");
+ state = efalse;
+ }
+ }
+ }
+ else if (IdentComp(IdentFontHeight))
+ {
+ state = ReadFontHeight();
+ }
+ else if (IdentComp(IdentScalableFontHeight))
+ {
+ state = ReadScalableFontHeight();
+ }
+ else
+ {
+ Error("Unrecognised typefacefonts identifier");
+ state = efalse;
+ }
+ }
+ else
+ {
+ Error("Typefacefonts identifier expected");
+ state = efalse;
+ }
+ if (state)
+ state = NewLine();
+ }
+ if (state)
+ {
+ iPdrModelStore.AddTypefaceFonts(iTypefaceFonts);
+ cout << "Typefacefonts read\n";
+ }
+ else
+ iTypefaceFonts->Delete();
+ return state;
+ }
+
+boolean PdrReader::ReadModel()
+ {
+ boolean state = etrue;
+ int num;
+ iModel = PrinterModelHeader::New();
+ Record* resources;
+// Record* extrainfo;
+ String label;
+ state = IdentCopy(iModel->iLabel);
+ if (state)
+ state = NewLine();
+ while (!IdentComp(IdentEndModel) && !_EOF() && state)
+ {
+ if (iLex->iType == ELexIdent)
+ {
+ if (IdentComp(IdentModelName))
+ {
+ if (StringCopy(iModel->iEntry.iName))
+ while (iLex->iType != ELexNL)
+ {
+ if (IdentComp(IdentRequiresPrinterPort))
+ iModel->iEntry.iRequiresPrinterPort = etrue;
+ else
+ {
+ Error("Model identifier or newline expected");
+ state = efalse;
+ }
+ }
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentModelUid))
+ state = Number(iModel->iEntry.iUid);
+ else if (IdentComp(IdentModelFlags))
+ {
+ state = Number(num);
+ iModel->iInfo.iFlags = num;
+ }
+ else if (IdentComp(IdentModelResources))
+ {
+ state = IdentCopy(label);
+ if (state)
+ {
+ resources = iPdrModelStore.FindResources(label);
+ if (resources)
+ iModel->iInfo.iResources = resources;
+ else
+ {
+ Error("Resources not found");
+ state = efalse;
+ }
+ }
+ }
+/* else if (IdentComp(IdentSpareRecord))
+ {
+ state = IdentCopy(label);
+ if (state)
+ {
+ extrainfo = iPdrModelStore.FindExtraInfo(label);
+ if (extrainfo)
+ iModel->iInfo.iSpareRecord = extrainfo;
+ else
+ {
+ Error("Spare record not found");
+ state = efalse;
+ }
+ }
+ }
+*/
+ else if (IdentComp(IdentKPixelWidth))
+ {
+ if (Number(num))
+ iModel->iInfo.iKPixelWidthInTwips = num;
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentKPixelHeight))
+ {
+ if (Number(num))
+ iModel->iInfo.iKPixelHeightInTwips = num;
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentPortraitOffset))
+ {
+ if (Number(num))
+ {
+ iModel->iInfo.iPortraitOffsetInPixels.iX = num;
+ if (Number(num))
+ iModel->iInfo.iPortraitOffsetInPixels.iY = num;
+ else
+ state = efalse;
+ }
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentLandscapeOffset))
+ {
+ if (Number(num))
+ {
+ iModel->iInfo.iLandscapeOffsetInPixels.iX = num;
+ if (Number(num))
+ iModel->iInfo.iLandscapeOffsetInPixels.iY = num;
+ else
+ state = efalse;
+ }
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentMinMarginLeft))
+ {
+ if (Number(num))
+ iModel->iInfo.iMinMarginsInPixels.iLeft = num;
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentMinMarginRight))
+ {
+ if (Number(num))
+ iModel->iInfo.iMinMarginsInPixels.iRight = num;
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentMinMarginTop))
+ {
+ if (Number(num))
+ iModel->iInfo.iMinMarginsInPixels.iTop = num;
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentMinMarginBottom))
+ {
+ if (Number(num))
+ iModel->iInfo.iMinMarginsInPixels.iBottom = num;
+ else
+ state = efalse;
+ }
+ else if (IdentComp(IdentDisplayMode))
+ {
+ int i; // DEF102183: Graphics tools fail to build using MS VC8.
+ for (i = 0; (i < NumDisplayModeValues) && !IdentComp(IdentDisplayModeValue[i]); i++)
+ { // Tries to match display mode identifier
+ }
+ if (i < NumDisplayModeValues)
+ {
+ iModel->iInfo.iDisplayMode = i;
+ }
+ else
+ {
+ state = efalse;
+ Error("Display mode identifier expected");
+ }
+ }
+ else if (IdentComp(IdentTypefaceFontss))
+ {
+ state = NewLine();
+ while (!IdentComp(IdentEndTypefaceFontss) && !_EOF() && state)
+ {
+ TypefaceFontsEntry* typefacefontsentry = NULL;
+ if (iLex->iType == ELexIdent)
+ {
+ state = IdentCopy(label);
+ Record* typefacefonts = iPdrModelStore.FindTypefaceFonts(label);
+ if (typefacefonts)
+ {
+ typefacefontsentry = TypefaceFontsEntry::New(typefacefonts);
+ state = etrue;
+ }
+ else
+ {
+ Error("Typefacefonts not found");
+ state = efalse;
+ }
+ }
+ if (state)
+ {
+ while ((iLex->iType != ELexNL) && !_EOF() && state)
+ {
+ if (IdentComp(IdentNotInPortrait))
+ {
+ typefacefontsentry->iNotInPortrait = etrue;
+ }
+ else if (IdentComp(IdentNotInLandscape))
+ {
+ typefacefontsentry->iNotInLandscape = etrue;
+ }
+ else
+ {
+ Error("Typefacefontsentry identifier or newline expected");
+ state = efalse;
+ }
+ }
+ if (state)
+ iModel->iInfo.AddTypefaceFontsEntry(typefacefontsentry);
+ else
+ typefacefontsentry->Delete();
+ }
+ if (state)
+ state = NewLine();
+ }
+ }
+ else
+ {
+ Error("unrecognised model identifier");
+ state = efalse;
+ }
+ }
+ else
+ {
+ Error("Model identifier expected");
+ state = efalse;
+ }
+ if (state)
+ state = NewLine();
+ }
+ if (state)
+ {
+ iPdrModelStore.AddModel(iModel);
+ cout << "Model read\n";
+ }
+ else
+ iModel->Delete();
+ return state;
+ }
+
+boolean PdrReader::ReadPdrStoreFile()
+ {
+ boolean state = etrue;
+ if (iPdrStoreFile)
+ {
+ state = efalse;
+ Error("Pdrstorefile already read");
+ }
+ else
+ {
+ iPdrStoreFile = PdrStoreFile::New();
+ String label;
+ Record* model;
+ state = NewLine();
+ while (!IdentComp(IdentEndPdrStoreFile) && !_EOF() && state)
+ {
+ if (IdentComp(IdentPDLName))
+ {
+ state = StringCopy(iPdrStoreFile->iPDLName);
+ }
+ else if (IdentComp(IdentPDLUid))
+ {
+ state = Number(iPdrStoreFile->iPDLUid);
+ }
+ else if (IdentComp(IdentModels))
+ {
+ state = NewLine();
+ while (!IdentComp(IdentEndModels) && !_EOF() && state)
+ {
+ state = IdentCopy(label);
+ if (state)
+ {
+ model = iPdrModelStore.FindModel(label);
+ if (model)
+ {
+ iPdrStoreFile->AddModel((PrinterModelHeader*)model);
+ }
+ else
+ {
+ Error("model not found");
+ state = efalse;
+ }
+ }
+ if (state)
+ state = NewLine();
+ }
+ }
+ else
+ {
+ Error("Pdrstorefile identifier expected");
+ state = efalse;
+ }
+ if (state)
+ state = NewLine();
+ }
+ if (state)
+ {
+ iPdrModelStore.AddPdrStoreFile(iPdrStoreFile);
+ cout << "Pdrstorefile read\n";
+ }
+ else
+ iPdrStoreFile->Delete();
+ }
+ return state;
+ }
+
+EXPORT_C boolean PdrReader::Store(const String& aFilename)
+ {
+ boolean state = etrue;
+ if (!iPdrStoreFile)
+ {
+ state = efalse;
+ Error("No pdrstore file record");
+ }
+ else
+ state = iPdrModelStore.Store(aFilename);
+ return state;
+ }
+
+boolean PdrReader::Command(String& aCommand)
+ {
+ boolean state = etrue;
+ String string;
+ state = StringCopy(string);
+ int length = string.Length();
+ for (int i = 0; i < length; i++)
+ {
+ char ch = string[i];
+ if (ch == '<') // Read control character
+ {
+ ch = 0;
+ for (i = i + 1; (i < length) && (string[i] != '>'); i++)
+ ch = char((ch * 10) + (string[i] - '0'));
+ }
+ aCommand += ch;
+ }
+ return state;
+ }
+/*
+boolean PdrReader::ReadExtraInfo()
+ {
+ boolean state = etrue;
+ String label;
+ PdrExtraInfo* extrainfo = new PdrExtraInfo();
+ state = IdentCopy(extrainfo->iLabel);
+ if (state)
+ state = NewLine();
+ while (!IdentComp(IdentEndExtraInfo) && !_EOF() && state)
+ {
+ String* string = new String;
+ state = Command(*string);
+ if (state)
+ extrainfo->iInfo.Add(string);
+ else
+ delete string;
+ state = NewLine();
+ }
+ if (state)
+ {
+ iPdrModelStore.AddExtraInfo(extrainfo);
+ cout << "Extra info read\n";
+ }
+ else
+ delete extrainfo;
+ return state;
+ }
+*/