/* Core.h
*/
# ifndef Core
# define Core
#include "CoreBasics.h"
/* Miscellaneous */
extern String Index();
/* new, String name, Nat index */
/* Wire */
typedef struct WireRec {
Properties properties;
Nat size;
struct WireRec *elements[1];
} WireRec;
typedef WireRec *Wire;
typedef WireRec *WireSeq;
extern Ref GetWireProp();
/* ref, Wire wire, Atom prop */
extern void PutWireProp();
/* Wire wire, Atom prop, Ref value */
extern String GetShortWireName();
/* name, Wire wire */
extern void SetShortWireName();
/* Wire wire, String name */
extern Nat WireBits();
/* count, Wire wire */
extern ListOfString GetFullWireNames();
/* names, WireSeq root, Wire wire */
extern String GetFullWireName();
/* name, WireSeq root, Wire wire */
extern Wire CreateWire();
/* wire, List wires, String name, Properties properties=nil */
extern Wire CreateWires();
/* wire, Nat size, String name, Properties properties=nil */
extern Wire CopyWire();
/* new, Wire wire */
extern Wire FindWire();
/* wire, WireSeq root, String name */
extern void PrintWire();
/* Wire wire, Nat indent=0, Nat level=2 */
typedef void (*EachWireProc)();
/* Wire wire, Ref context */
extern void VisitRootAtomics();
/* WireSeq root, EachWireProc each, Ref context */
typedef Bool (*EachWirePairProc)();
/* quit=false, Wire actualWire, Wire publicWire, Ref context, Bool *subWires=true */
extern Bool VisitBinding();
/* quit, Wire actual, Wire public, EachWirePairProc each, Ref context */
extern Bool VisitBindingSeq();
/* quit, WireSeq actual, WireSeq public, EachWirePairProc each, Ref context */
/* Cell Class */
typedef struct CellClassRec {
String name;
Ref (* recast)(); /* really RecastProc */
Properties properties;
Bool layersProps;
} CellClassRec;
typedef CellClassRec *CellClass;
extern Ref GetCellClassProp();
/* ref, CellClass cellClass, Atom prop */
extern void PutCellClassProp();
/* CellClass cellClass, Atom prop, Ref value */
extern CellClass CreateCellClass();
/* cellClass, String name, RecastProc recast, Properties properties=nil, Bool layersProps=true */
extern CellClass SetClassPrintProc();
/* same, CellClass cellClass, PrintClassProc proc */
typedef void (* PrintClassProc)();
/* Ref data, Nat indent=0, Nat level=2 */
/* Cell Type */
typedef struct CellTypeRec {
CellClass class;
WireSeq public;
Ref data;
Properties properties;
} CellTypeRec;
typedef CellTypeRec *CellType;
typedef CellType (* RecastProc)();
/* CellType me */
extern Ref GetCellTypeProp();
/* ref, CellType cellType, Atom prop */
extern void PutCellTypeProp();
/* CellType cellType, Atom prop, Ref value */
extern String GetCellTypeName();
/* name, CellType cellType */
extern CellType SetCellTypeName();
/* same, CellType cellType, String name */
extern CellType CreateCellType();
/* cellType, CellClass class, WireSeq public, Ref data, String name, Properties properties */
extern void PrintCellType();
/* CellType cellType, Nat indent=0, Nat level=2 */
/* Record Cell Class
*/
extern CellClass recordCellClass;
typedef struct CellInstanceRec {
WireSeq actual;
CellType type;
Properties properties;
} CellInstanceRec;
typedef CellInstanceRec *CellInstance;
typedef struct RecordCellTypeRec {
WireSeq internal;
Nat size;
CellInstance cellInstances[1];
} RecordCellTypeRec;
typedef RecordCellTypeRec *RecordCellType;
extern Ref GetCellInstanceProp();
/* ref, CellInstance cellInstance, Atom prop */
extern void PutCellInstanceProp();
/* CellInstance cellInstance, Atom prop, Ref value */
extern String GetCellInstanceName();
/* name, CellInstance cellInstance */
extern CellInstance SetCellInstanceName();
/* same, CellInstance cellInstance, String name */
extern CellInstance CreateCellInstance();
/* cellInstance, WireSeq actual, CellType type, String name=nil, Properties properties=nil */
extern CellType CreateRecordCell();
/* cellType, WireSeq public, WireSeq internal, List cellInstances, String name=nil, Properties properties=nil, Bool giveNames=false */
/* Transistor Cell Class */
extern CellClass transistorCellClass;
typedef enum TransistorType {nE, pE, nD} TransistorType;
extern String transistorTypeNames[3];
typedef enum TransistorPort {gate, ch1, ch2, Vdd} TransistorPort;
extern String transistorPortNames[4];
typedef struct TransistorRec {
TransistorType type;
} TransistorRec;
typedef TransistorRec *Transistor;
extern CellType CreateTransistor();
/* cellType, TransistorType type, int length=-1, int width=-1, String name=nil, Properties properties=nil */
/* Initialization */
extern void CoreInitialize();
/* */
# endif