KiCad PCB EDA Suite
Loading...
Searching...
No Matches
orcad_page.cpp File Reference
#include <sch_io/orcad/orcad_page.h>
#include <algorithm>
#include <utility>
#include <set>
#include <ki_exception.h>
#include <wx/translation.h>
#include <sch_io/orcad/orcad_cache.h>
#include <sch_io/orcad/orcad_library.h>
#include <sch_io/orcad/orcad_stream.h>
#include <sch_io/orcad/orcad_structures.h>

Go to the source code of this file.

Classes

class  V2_DISPLAY_PROP_SCOPE
 
struct  V2_PART_CELL
 

Functions

ORCAD_RAW_PAGE OrcadParsePage (const std::vector< char > &aData, const std::vector< std::string > &aStrings, const ORCAD_WARN_FN &aWarn)
 A body failure skips that structure.
 
static std::vector< std::string > pageOrderBody (ORCAD_STREAM &aStream)
 
std::vector< std::string > OrcadParsePageOrder (const std::vector< char > &aData)
 Returns display order.
 
std::vector< std::string > OrcadParseSchematicFolderOrder (const std::vector< char > &aData)
 Unlisted Views storages can be stale.
 
static uint8_t readOccHeader (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings, int aExpectType, std::map< std::string, std::string > *aProps=nullptr)
 
static ORCAD_OCC_SCOPE readOccScope (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
static void readOccurrence (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings, ORCAD_OCC_SCOPE &aScope)
 
static std::string v2Resolve (const std::vector< std::string > &aStrings, uint16_t aIdx)
 
static void v2CheckCount (ORCAD_STREAM &aStream, uint32_t aCount)
 
static uint8_t v2Prefix (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings, std::map< std::string, std::string > *aProps=nullptr)
 
static ORCAD_DISPLAY_PROP v2DisplayProp (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
static std::vector< ORCAD_DISPLAY_PROPv2DisplayPropList (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
static ORCAD_ALIAS v2Alias (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
static void v2Structure (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
static ORCAD_WIRE v2Wire (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
static ORCAD_PIN_INST v2PinInst (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
static ORCAD_PLACED_INSTANCE v2PlacedInstance (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
static ORCAD_PRIMITIVE v2PrimBody (ORCAD_STREAM &aStream, uint8_t aType)
 
static ORCAD_PRIMITIVE v2Primitive (ORCAD_STREAM &aStream)
 
static ORCAD_SYMBOL_DEF v2SymbolDef (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
static ORCAD_GRAPHIC_INST v2GraphicInst (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
static ORCAD_PORT_TYPE v2PortType (uint32_t aRaw)
 
static bool v2SymbolPin (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings, ORCAD_SYMBOL_PIN &aOut)
 
static ORCAD_SYMBOL_DEF v2LibSymbolDef (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings, int aTypeId)
 
static void v2LibraryPartTail (ORCAD_STREAM &aStream, ORCAD_SYMBOL_DEF &aDef)
 
static V2_PART_CELL v2PartCell (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
static ORCAD_DEVICE v2Device (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
static ORCAD_PACKAGE v2Package (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
static ORCAD_DRAWN_INSTANCE v2DrawnInstance (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
ORCAD_RAW_PAGE OrcadParsePageV2 (const std::vector< char > &aData, const std::vector< std::string > &aStrings, const ORCAD_WARN_FN &, bool aShortDisplayProp)
 Legacy records have no stop offsets.
 
void OrcadParseOlbSymbolStreamV2 (const std::vector< char > &aData, const std::vector< std::string > &aStrings, std::map< std::string, ORCAD_SYMBOL_DEF > &aSymbols, bool aShortDisplayProp)
 aShortDisplayProp selects the version 1 display-property layout.
 
std::vector< std::string > OrcadParsePageOrderV2 (const std::vector< char > &aData, const std::vector< std::string > &aStrings)
 Returns display order; throws IO_ERROR for invalid legacy framing.
 
static void v2CachePartCell (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
void OrcadParseCacheV2 (const std::vector< char > &aData, const std::vector< std::string > &aStrings, const ORCAD_WARN_FN &aWarn, std::map< std::string, ORCAD_SYMBOL_DEF > &aSymbols, std::map< std::string, ORCAD_PACKAGE > &aPackages)
 Keep decoded entries if a framing error ends the legacy cache.
 
void OrcadParseOlbPackageStreamV2 (const std::vector< char > &aData, const std::vector< std::string > &aStrings, std::map< std::string, ORCAD_SYMBOL_DEF > &aSymbols, std::map< std::string, ORCAD_PACKAGE > &aPackages, bool aShortDisplayProp)
 aShortDisplayProp selects the version 1 display-property layout.
 
static void v2ReadOccurrence (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings, ORCAD_OCC_SCOPE &aScope)
 
static ORCAD_OCC_SCOPE v2ReadOccScope (ORCAD_STREAM &aStream, const std::vector< std::string > &aStrings)
 
ORCAD_OCC_SCOPE OrcadReadOccurrenceTreeV2 (const std::vector< char > &aData, const std::vector< std::string > &aStrings)
 Parse a short-prefix-only v2.0 Hierarchy stream without scan recovery.
 
ORCAD_OCC_SCOPE OrcadReadOccurrenceTree (const std::vector< char > &aData, const std::vector< std::string > &aStrings, const ORCAD_WARN_FN &aWarn)
 Returns occurrence references and child scopes.
 

Variables

static thread_local bool g_v2ShortDisplayProp = false
 

Function Documentation

◆ OrcadParseCacheV2()

◆ OrcadParseOlbPackageStreamV2()

void OrcadParseOlbPackageStreamV2 ( const std::vector< char > & aData,
const std::vector< std::string > & aStrings,
std::map< std::string, ORCAD_SYMBOL_DEF > & aSymbols,
std::map< std::string, ORCAD_PACKAGE > & aPackages,
bool aShortDisplayProp )

◆ OrcadParseOlbSymbolStreamV2()

void OrcadParseOlbSymbolStreamV2 ( const std::vector< char > & aData,
const std::vector< std::string > & aStrings,
std::map< std::string, ORCAD_SYMBOL_DEF > & aSymbols,
bool aShortDisplayProp )

aShortDisplayProp selects the version 1 display-property layout.

Definition at line 1239 of file orcad_page.cpp.

References ORCAD_SYMBOL_DEF::name, ORCAD_ST_LIBRARY_PART, ORCAD_SYMBOL_DEF::props, ORCAD_STREAM::Remaining(), THROW_IO_ERROR, v2LibraryPartTail(), v2LibSymbolDef(), and v2Prefix().

Referenced by BOOST_AUTO_TEST_CASE(), and SCH_IO_ORCAD::loadOlbSymbols().

◆ OrcadParsePage()

ORCAD_RAW_PAGE OrcadParsePage ( const std::vector< char > & aData,
const std::vector< std::string > & aStrings,
const ORCAD_WARN_FN & aWarn )

A body failure skips that structure.

Invalid page framing throws IO_ERROR.

Definition at line 69 of file orcad_page.cpp.

References ORCAD_RAW_PAGE::blocks, ORCAD_PAGE_SETTINGS::borderPrinted, ORCAD_RAW_PAGE::borderPrinted, ORCAD_RAW_PAGE::busEntries, ORCAD_PAGE_SETTINGS::createTimestamp, ORCAD_RAW_PAGE::createTimestamp, ORCAD_PREFIXES::end, ORCAD_RAW_PAGE::ercObjects, ORCAD_STREAM::GetOffset(), ORCAD_RAW_PAGE::globals, ORCAD_RAW_PAGE::graphics, ORCAD_PAGE_SETTINGS::gridRefPrinted, ORCAD_RAW_PAGE::gridRefPrinted, ORCAD_PAGE_SETTINGS::height, ORCAD_RAW_PAGE::height, ORCAD_PAGE_SETTINGS::horizontalAscending, ORCAD_RAW_PAGE::horizontalAscending, ORCAD_PAGE_SETTINGS::horizontalChar, ORCAD_RAW_PAGE::horizontalChar, ORCAD_PAGE_SETTINGS::horizontalCount, ORCAD_RAW_PAGE::horizontalCount, ORCAD_PAGE_SETTINGS::horizontalWidth, ORCAD_RAW_PAGE::horizontalWidth, ORCAD_RAW_PAGE::instances, ORCAD_PAGE_SETTINGS::isMetric, ORCAD_RAW_PAGE::isMetric, ORCAD_PAGE_SETTINGS::modifyTimestamp, ORCAD_RAW_PAGE::modifyTimestamp, ORCAD_RAW_PAGE::name, ORCAD_RAW_PAGE::netAliases, ORCAD_RAW_PAGE::netGroups, ORCAD_RAW_PAGE::netmap, ORCAD_RAW_PAGE::offpage, ORCAD_ST_PAGE, OrcadParsePageSettings(), OrcadReadT0x34Raw(), OrcadReadT0x35Raw(), ORCAD_RAW_PAGE::pageSize, ORCAD_RAW_PAGE::ports, ORCAD_RAW_PAGE::props, ORCAD_STRUCT_READER::PropsDict(), ORCAD_STREAM::ReadLzt(), ORCAD_STRUCT_READER::ReadPrefixes(), ORCAD_STRUCT_READER::ReadStructure(), ORCAD_STREAM::ReadU16(), ORCAD_STREAM::ReadU32(), result, ORCAD_STREAM::Skip(), THROW_IO_ERROR, ORCAD_RAW_PAGE::titleBlocks, ORCAD_PAGE_SETTINGS::verticalAscending, ORCAD_RAW_PAGE::verticalAscending, ORCAD_PAGE_SETTINGS::verticalChar, ORCAD_RAW_PAGE::verticalChar, ORCAD_PAGE_SETTINGS::verticalCount, ORCAD_RAW_PAGE::verticalCount, ORCAD_PAGE_SETTINGS::verticalWidth, ORCAD_RAW_PAGE::verticalWidth, ORCAD_PAGE_SETTINGS::width, ORCAD_RAW_PAGE::width, and ORCAD_RAW_PAGE::wires.

Referenced by SCH_IO_ORCAD::LoadSchematicFile().

◆ OrcadParsePageOrder()

std::vector< std::string > OrcadParsePageOrder ( const std::vector< char > & aData)

Returns display order.

The caller must reconcile these names with available page streams.

Definition at line 187 of file orcad_page.cpp.

References ORCAD_ST_SCH_LIB, pageOrderBody(), and ORCAD_STRUCT_READER::ReadPrefixes().

Referenced by BOOST_AUTO_TEST_CASE(), and SCH_IO_ORCAD::LoadSchematicFile().

◆ OrcadParsePageOrderV2()

std::vector< std::string > OrcadParsePageOrderV2 ( const std::vector< char > & aData,
const std::vector< std::string > & aStrings )

Returns display order; throws IO_ERROR for invalid legacy framing.

Definition at line 1268 of file orcad_page.cpp.

References pageOrderBody(), and v2Prefix().

Referenced by BOOST_AUTO_TEST_CASE(), and SCH_IO_ORCAD::LoadSchematicFile().

◆ OrcadParsePageV2()

ORCAD_RAW_PAGE OrcadParsePageV2 ( const std::vector< char > & aData,
const std::vector< std::string > & aStrings,
const ORCAD_WARN_FN & aWarn,
bool aShortDisplayProp = false )

Legacy records have no stop offsets.

A framing error throws IO_ERROR and discards the page.

Definition at line 1098 of file orcad_page.cpp.

References ORCAD_RAW_PAGE::blocks, ORCAD_PAGE_SETTINGS::borderPrinted, ORCAD_RAW_PAGE::borderPrinted, ORCAD_RAW_PAGE::busEntries, ORCAD_PAGE_SETTINGS::createTimestamp, ORCAD_RAW_PAGE::createTimestamp, ORCAD_RAW_PAGE::ercObjects, ORCAD_RAW_PAGE::globals, ORCAD_RAW_PAGE::graphics, ORCAD_PAGE_SETTINGS::gridRefPrinted, ORCAD_RAW_PAGE::gridRefPrinted, group, ORCAD_PAGE_SETTINGS::height, ORCAD_RAW_PAGE::height, ORCAD_PAGE_SETTINGS::horizontalAscending, ORCAD_RAW_PAGE::horizontalAscending, ORCAD_PAGE_SETTINGS::horizontalChar, ORCAD_RAW_PAGE::horizontalChar, ORCAD_PAGE_SETTINGS::horizontalCount, ORCAD_RAW_PAGE::horizontalCount, ORCAD_PAGE_SETTINGS::horizontalWidth, ORCAD_RAW_PAGE::horizontalWidth, ORCAD_RAW_PAGE::instances, ORCAD_PAGE_SETTINGS::isMetric, ORCAD_RAW_PAGE::isMetric, ORCAD_PAGE_SETTINGS::modifyTimestamp, ORCAD_RAW_PAGE::modifyTimestamp, ORCAD_RAW_PAGE::name, ORCAD_RAW_PAGE::netAliases, ORCAD_RAW_PAGE::netGroups, ORCAD_RAW_PAGE::netmap, ORCAD_RAW_PAGE::offpage, ORCAD_ST_DRAWN_INSTANCE, ORCAD_ST_PAGE, OrcadParsePageSettings(), OrcadReadBusEntryBody(), ORCAD_RAW_PAGE::pageSize, ORCAD_STREAM::PeekU8(), ORCAD_RAW_PAGE::ports, ORCAD_RAW_PAGE::props, ORCAD_STREAM::ReadLzt(), ORCAD_STREAM::ReadU16(), ORCAD_STREAM::ReadU32(), ORCAD_STREAM::Skip(), THROW_IO_ERRORF, ORCAD_RAW_PAGE::titleBlocks, v2CheckCount(), v2DrawnInstance(), v2GraphicInst(), v2PlacedInstance(), v2Prefix(), v2Wire(), ORCAD_PAGE_SETTINGS::verticalAscending, ORCAD_RAW_PAGE::verticalAscending, ORCAD_PAGE_SETTINGS::verticalChar, ORCAD_RAW_PAGE::verticalChar, ORCAD_PAGE_SETTINGS::verticalCount, ORCAD_RAW_PAGE::verticalCount, ORCAD_PAGE_SETTINGS::verticalWidth, ORCAD_RAW_PAGE::verticalWidth, ORCAD_PAGE_SETTINGS::width, ORCAD_RAW_PAGE::width, and ORCAD_RAW_PAGE::wires.

Referenced by BOOST_AUTO_TEST_CASE(), and SCH_IO_ORCAD::LoadSchematicFile().

◆ OrcadParseSchematicFolderOrder()

std::vector< std::string > OrcadParseSchematicFolderOrder ( const std::vector< char > & aData)

Unlisted Views storages can be stale.

Import them only if a hierarchy occurrence refers to them.

Definition at line 198 of file orcad_page.cpp.

References ORCAD_STREAM::AtEnd(), ORCAD_STREAM::ReadLzt(), ORCAD_STREAM::ReadU16(), ORCAD_STREAM::Skip(), and THROW_IO_ERROR.

Referenced by BOOST_AUTO_TEST_CASE(), and SCH_IO_ORCAD::LoadSchematicFile().

◆ OrcadReadOccurrenceTree()

ORCAD_OCC_SCOPE OrcadReadOccurrenceTree ( const std::vector< char > & aData,
const std::vector< std::string > & aStrings,
const ORCAD_WARN_FN & aWarn )

Returns occurrence references and child scopes.

Parse errors return an empty scope.

Definition at line 1571 of file orcad_page.cpp.

References ORCAD_STREAM::ReadLzt(), readOccHeader(), readOccScope(), ORCAD_STREAM::ReadU16(), ORCAD_STREAM::ReadU32(), ORCAD_STREAM::ReadU8(), ORCAD_STREAM::Skip(), and IO_ERROR::What().

Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), and SCH_IO_ORCAD::LoadSchematicFile().

◆ OrcadReadOccurrenceTreeV2()

ORCAD_OCC_SCOPE OrcadReadOccurrenceTreeV2 ( const std::vector< char > & aData,
const std::vector< std::string > & aStrings )

◆ pageOrderBody()

static std::vector< std::string > pageOrderBody ( ORCAD_STREAM & aStream)
static

◆ readOccHeader()

static uint8_t readOccHeader ( ORCAD_STREAM & aStream,
const std::vector< std::string > & aStrings,
int aExpectType,
std::map< std::string, std::string > * aProps = nullptr )
static

◆ readOccScope()

static ORCAD_OCC_SCOPE readOccScope ( ORCAD_STREAM & aStream,
const std::vector< std::string > & aStrings )
static

◆ readOccurrence()

◆ v2Alias()

static ORCAD_ALIAS v2Alias ( ORCAD_STREAM & aStream,
const std::vector< std::string > & aStrings )
static

◆ v2CachePartCell()

static void v2CachePartCell ( ORCAD_STREAM & aStream,
const std::vector< std::string > & aStrings )
static

◆ v2CheckCount()

◆ v2Device()

◆ v2DisplayProp()

◆ v2DisplayPropList()

static std::vector< ORCAD_DISPLAY_PROP > v2DisplayPropList ( ORCAD_STREAM & aStream,
const std::vector< std::string > & aStrings )
static

◆ v2DrawnInstance()

◆ v2GraphicInst()

◆ v2LibraryPartTail()

static void v2LibraryPartTail ( ORCAD_STREAM & aStream,
ORCAD_SYMBOL_DEF & aDef )
static

◆ v2LibSymbolDef()

◆ v2Package()

◆ v2PartCell()

◆ v2PinInst()

static ORCAD_PIN_INST v2PinInst ( ORCAD_STREAM & aStream,
const std::vector< std::string > & aStrings )
static

◆ v2PlacedInstance()

◆ v2PortType()

static ORCAD_PORT_TYPE v2PortType ( uint32_t aRaw)
static

Definition at line 812 of file orcad_page.cpp.

References PASSIVE.

Referenced by v2SymbolPin().

◆ v2Prefix()

◆ v2PrimBody()

◆ v2Primitive()

static ORCAD_PRIMITIVE v2Primitive ( ORCAD_STREAM & aStream)
static

Definition at line 569 of file orcad_page.cpp.

References ORCAD_STREAM::ReadU8(), and v2PrimBody().

Referenced by v2LibSymbolDef(), and v2SymbolDef().

◆ v2ReadOccScope()

static ORCAD_OCC_SCOPE v2ReadOccScope ( ORCAD_STREAM & aStream,
const std::vector< std::string > & aStrings )
static

◆ v2ReadOccurrence()

◆ v2Resolve()

static std::string v2Resolve ( const std::vector< std::string > & aStrings,
uint16_t aIdx )
static

◆ v2Structure()

◆ v2SymbolDef()

◆ v2SymbolPin()

◆ v2Wire()

Variable Documentation

◆ g_v2ShortDisplayProp

thread_local bool g_v2ShortDisplayProp = false
static