KiCad PCB EDA Suite
Loading...
Searching...
No Matches
orcad_structures.h File Reference

Prefix framing machinery and readers for the prefix-framed OrCAD structures found in Page/Cache/Schematic/Hierarchy streams. More...

#include <cstdint>
#include <map>
#include <string>
#include <utility>
#include <variant>
#include <vector>
#include <wx/string.h>
#include <sch_io/orcad/orcad_records.h>
#include <sch_io/orcad/orcad_stream.h>

Go to the source code of this file.

Classes

struct  ORCAD_PREFIXES
 The decoded prefix chain of one framed structure. More...
 
struct  ORCAD_READ_RESULT
 
class  ORCAD_STRUCT_READER
 Stateful reader shared by all structure parsers. More...
 

Typedefs

using ORCAD_RECORD_VARIANT
 Result of reading one structure of any type.
 

Functions

ORCAD_DISPLAY_PROP OrcadReadDisplayProp (ORCAD_STRUCT_READER &aReader, const ORCAD_PREFIXES &aPrefixes)
 
ORCAD_ALIAS OrcadReadAlias (ORCAD_STRUCT_READER &aReader, const ORCAD_PREFIXES &aPrefixes)
 
ORCAD_WIRE OrcadReadWire (ORCAD_STRUCT_READER &aReader, const ORCAD_PREFIXES &aPrefixes)
 Types 20 (wire) and 21 (bus); isBus is set from the prefix type.
 
ORCAD_PLACED_INSTANCE OrcadReadPlacedInstance (ORCAD_STRUCT_READER &aReader, const ORCAD_PREFIXES &aPrefixes)
 
ORCAD_GRAPHIC_INST OrcadReadGraphicInst (ORCAD_STRUCT_READER &aReader, const ORCAD_PREFIXES &aPrefixes)
 Common body of Port/Global/OffPageConnector/TitleBlock/ERCObject/Graphic*Inst.
 
ORCAD_GRAPHIC_INST OrcadReadPort (ORCAD_STRUCT_READER &aReader, const ORCAD_PREFIXES &aPrefixes)
 GraphicInst body followed by a 9-byte trailer.
 
ORCAD_GRAPHIC_INST OrcadReadTitleBlock (ORCAD_STRUCT_READER &aReader, const ORCAD_PREFIXES &aPrefixes)
 GraphicInst body followed by a 12-byte trailer.
 
ORCAD_GRAPHIC_INST OrcadReadErcObject (ORCAD_STRUCT_READER &aReader, const ORCAD_PREFIXES &aPrefixes)
 GraphicInst body followed by 3 lzt strings.
 
ORCAD_PIN_INST OrcadReadPinInst (ORCAD_STRUCT_READER &aReader, const ORCAD_PREFIXES &aPrefixes)
 
ORCAD_BUS_ENTRY OrcadReadBusEntry (ORCAD_STRUCT_READER &aReader, const ORCAD_PREFIXES &aPrefixes)
 
std::vector< ORCAD_DISPLAY_PROPOrcadReadDisplayPropList (ORCAD_STRUCT_READER &aReader)
 Read a u16-counted list of framed DisplayProp structures via ReadStructure(), keeping only the successfully parsed ones.
 
void OrcadReadT0x34Raw (ORCAD_STREAM &aStream)
 T0x34 records are NOT prefix-framed.
 
void OrcadReadT0x35Raw (ORCAD_STREAM &aStream)
 T0x35 = the T0x34 raw layout followed by u16 n and 4 * n bytes.
 

Detailed Description

Prefix framing machinery and readers for the prefix-framed OrCAD structures found in Page/Cache/Schematic/Hierarchy streams.

Every framed structure is

N x long prefix   u8 typeId, u32 bodyLen, u32 (zeros)
1 x short prefix  u8 typeId, i16 nProps, nProps x ( u32 nameIdx, u32 valIdx )
preamble          FF E4 5C 39, u32 trailLen, trailLen bytes
body...

The number of long prefixes is structure-type dependent and discovered by trial (longest chain first). Each long-prefix bodyLen counts the bytes from the end of its own 9-byte record to the end of the structure, which yields reliable skip offsets ("stops") for structures whose body cannot be fully interpreted.

Implemented in orcad_structures.cpp (except the readers declared in orcad_cache.h, which orcad_structures.cpp's dispatcher calls for nested SthInPages0 bodies and DrawnInstance blocks).

Definition in file orcad_structures.h.

Typedef Documentation

◆ ORCAD_RECORD_VARIANT

Initial value:
std::variant<std::monostate, ORCAD_DISPLAY_PROP, ORCAD_ALIAS, ORCAD_WIRE, ORCAD_PIN_INST,
Net alias attached to a wire (becomes a local label).
Bus entry (structure type 29).
One displayed property of an instance (Part Reference, Value, user fields).
Structure type 12: a hierarchical block instance placed on a page.
Shared body of Port / Global / OffPageConnector / TitleBlock / ERCObject and the Graphic*Inst shapes ...
T0x10: one pin of a placed instance, carrying the pin's absolute page position (the connection point ...
A placed part instance on a page (structure type 13).
A symbol definition from the design Cache (LibraryPart / GlobalSymbol / PortSymbol / OffPageSymbol / ...
One wire or bus segment.

Result of reading one structure of any type.

record holds std::monostate when the structure was skipped (no reader for its type) or its body parse failed and was recovered by skipping to the prefix end.

Definition at line 83 of file orcad_structures.h.

Function Documentation

◆ OrcadReadAlias()

◆ OrcadReadBusEntry()

◆ OrcadReadDisplayProp()

◆ OrcadReadDisplayPropList()

std::vector< ORCAD_DISPLAY_PROP > OrcadReadDisplayPropList ( ORCAD_STRUCT_READER & aReader)

Read a u16-counted list of framed DisplayProp structures via ReadStructure(), keeping only the successfully parsed ones.

Also used by the Cache readers.

Definition at line 562 of file orcad_structures.cpp.

References ORCAD_STRUCT_READER::ReadStructure(), ORCAD_STREAM::ReadU16(), ORCAD_READ_RESULT::record, and ORCAD_STRUCT_READER::Stream().

Referenced by OrcadReadDrawnInstance(), OrcadReadGraphicInst(), OrcadReadPinInst(), and OrcadReadPlacedInstance().

◆ OrcadReadErcObject()

ORCAD_GRAPHIC_INST OrcadReadErcObject ( ORCAD_STRUCT_READER & aReader,
const ORCAD_PREFIXES & aPrefixes )

GraphicInst body followed by 3 lzt strings.

Definition at line 511 of file orcad_structures.cpp.

References OrcadReadGraphicInst(), ORCAD_STREAM::ReadLzt(), and ORCAD_STRUCT_READER::Stream().

Referenced by ORCAD_STRUCT_READER::ReadStructure().

◆ OrcadReadGraphicInst()

◆ OrcadReadPinInst()

◆ OrcadReadPlacedInstance()

◆ OrcadReadPort()

ORCAD_GRAPHIC_INST OrcadReadPort ( ORCAD_STRUCT_READER & aReader,
const ORCAD_PREFIXES & aPrefixes )

GraphicInst body followed by a 9-byte trailer.

Definition at line 492 of file orcad_structures.cpp.

References OrcadReadGraphicInst(), ORCAD_STREAM::Skip(), and ORCAD_STRUCT_READER::Stream().

Referenced by ORCAD_STRUCT_READER::ReadStructure().

◆ OrcadReadT0x34Raw()

void OrcadReadT0x34Raw ( ORCAD_STREAM & aStream)

T0x34 records are NOT prefix-framed.

Raw layout: 9 bytes, u32 id, lzt string, u32, u32 color, u32 lineStyle, u32 lineWidth. Content is not used; the reader only keeps the stream aligned.

Definition at line 580 of file orcad_structures.cpp.

References ORCAD_STREAM::ReadLzt(), ORCAD_STREAM::ReadU32(), and ORCAD_STREAM::Skip().

Referenced by OrcadParsePage(), and OrcadReadT0x35Raw().

◆ OrcadReadT0x35Raw()

void OrcadReadT0x35Raw ( ORCAD_STREAM & aStream)

T0x35 = the T0x34 raw layout followed by u16 n and 4 * n bytes.

Definition at line 592 of file orcad_structures.cpp.

References OrcadReadT0x34Raw(), ORCAD_STREAM::ReadU16(), and ORCAD_STREAM::Skip().

Referenced by OrcadParsePage().

◆ OrcadReadTitleBlock()

ORCAD_GRAPHIC_INST OrcadReadTitleBlock ( ORCAD_STRUCT_READER & aReader,
const ORCAD_PREFIXES & aPrefixes )

GraphicInst body followed by a 12-byte trailer.

Definition at line 501 of file orcad_structures.cpp.

References OrcadReadGraphicInst(), ORCAD_STREAM::Skip(), and ORCAD_STRUCT_READER::Stream().

Referenced by ORCAD_STRUCT_READER::ReadStructure().

◆ OrcadReadWire()