2017-04-25 14:41:48 +02:00
|
|
|
/*
|
|
|
|
|
* extflat.h --
|
|
|
|
|
*
|
|
|
|
|
* Internal definitions for the procedures to flatten hierarchical
|
|
|
|
|
* (.ext) circuit extraction files.
|
|
|
|
|
*
|
2020-05-23 23:13:14 +02:00
|
|
|
* *********************************************************************
|
|
|
|
|
* * Copyright (C) 1985, 1990 Regents of the University of California. *
|
|
|
|
|
* * Permission to use, copy, modify, and distribute this *
|
|
|
|
|
* * software and its documentation for any purpose and without *
|
|
|
|
|
* * fee is hereby granted, provided that the above copyright *
|
|
|
|
|
* * notice appear in all copies. The University of California *
|
|
|
|
|
* * makes no representations about the suitability of this *
|
|
|
|
|
* * software for any purpose. It is provided "as is" without *
|
|
|
|
|
* * express or implied warranty. Export of this software outside *
|
|
|
|
|
* * of the United States of America may require an export license. *
|
2017-04-25 14:41:48 +02:00
|
|
|
* *********************************************************************
|
|
|
|
|
*
|
|
|
|
|
* rcsid $Header: /usr/cvsroot/magic-8.0/extflat/extflat.h,v 1.2 2008/12/03 14:12:09 tim Exp $
|
|
|
|
|
*/
|
|
|
|
|
|
2024-10-16 08:38:41 +02:00
|
|
|
#ifndef _MAGIC__EXTFLAT__EXTFLAT_H
|
|
|
|
|
#define _MAGIC__EXTFLAT__EXTFLAT_H
|
2017-04-25 14:41:48 +02:00
|
|
|
|
|
|
|
|
#include "utils/magic.h"
|
|
|
|
|
|
|
|
|
|
typedef unsigned char U_char;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Arguments to EFFlatBuild().
|
|
|
|
|
*/
|
|
|
|
|
#define EF_FLATNODES 0x01 /* Flatten nodes */
|
|
|
|
|
#define EF_FLATCAPS 0x02 /* Flatten capacitors */
|
|
|
|
|
#define EF_FLATRESISTS 0x04 /* Flatten resistors */
|
|
|
|
|
#define EF_FLATDISTS 0x08 /* Flatten distances */
|
|
|
|
|
#define EF_NOFLATSUBCKT 0x10 /* Don't flatten standard cells */
|
|
|
|
|
#define EF_NONAMEMERGE 0x20 /* Don't merge unconnected nets */
|
|
|
|
|
/* with the same name. */
|
2022-06-20 18:26:23 +02:00
|
|
|
#define EF_WARNABSTRACT 0x40 /* Warn if subcell is abstract */
|
2017-04-25 14:41:48 +02:00
|
|
|
|
2021-07-11 03:13:24 +02:00
|
|
|
/* Flags to control output of node names. Stored in EFOutputFlags */
|
2021-07-11 03:27:19 +02:00
|
|
|
#define EF_TRIM_MASK 0x1f /* Mask for handling name trimming */
|
2017-04-25 14:41:48 +02:00
|
|
|
#define EF_TRIMGLOB 0x01 /* Delete trailing '!' from names */
|
|
|
|
|
#define EF_TRIMLOCAL 0x02 /* Delete trailing '#' from names */
|
2019-10-15 03:46:07 +02:00
|
|
|
#define EF_CONVERTCOMMA 0x04 /* Change ',' to '|' in names, else remove */
|
|
|
|
|
#define EF_CONVERTEQUAL 0x08 /* Change '=' to ':' in names, else remove */
|
|
|
|
|
#define EF_CONVERTBRACKETS 0x10 /* Change '[' and ']' to '_' in names */
|
2017-04-25 14:41:48 +02:00
|
|
|
|
2021-07-11 03:27:19 +02:00
|
|
|
#define EF_SHORT_MASK 0x60 /* Mask for handling port shorts */
|
2021-07-11 03:13:24 +02:00
|
|
|
#define EF_SHORT_NONE 0x00 /* Shorted ports are merged */
|
2021-07-11 03:27:19 +02:00
|
|
|
#define EF_SHORT_R 0x20 /* Shorted ports separated with 0 ohm resistor */
|
|
|
|
|
#define EF_SHORT_V 0x40 /* Shorted ports separated with 0 volt source */
|
2021-07-11 03:13:24 +02:00
|
|
|
|
2017-04-25 14:41:48 +02:00
|
|
|
/*
|
|
|
|
|
* capacitance type now set to float
|
|
|
|
|
*/
|
|
|
|
|
typedef float EFCapValue;
|
|
|
|
|
|
|
|
|
|
/* ------------------------ Hierarchical names ------------------------ */
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* One of the biggest consumers of memory space when flattening a circuit
|
|
|
|
|
* are the full hierarchical names of all nodes. Most of this space is
|
|
|
|
|
* wasted since it's redundant. Also, a lot of time is spent comparing
|
|
|
|
|
* long names whose initial components are identical.
|
|
|
|
|
*
|
|
|
|
|
* The following structure allows hierarchical names to be represented
|
|
|
|
|
* with sharing. Names are represented as a sequence of components,
|
|
|
|
|
* from the lowest level of the hierarchy pointing back toward the root.
|
|
|
|
|
* Hence, comparisons are likely to detect differences between names
|
|
|
|
|
* early on. Second, many children can share the same parent, so
|
|
|
|
|
* storage space should be comparable to that needed for an unflattened
|
|
|
|
|
* hierarchy (with arrays flattened, however).
|
|
|
|
|
*/
|
|
|
|
|
typedef struct hiername
|
|
|
|
|
{
|
|
|
|
|
struct hiername *hn_parent; /* Back-pointer toward root */
|
|
|
|
|
int hn_hash; /* For speed in hashing */
|
|
|
|
|
char hn_name[4]; /* String is allocated here */
|
|
|
|
|
} HierName;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Size of a HierName big enough to hold a string containing
|
|
|
|
|
* n bytes (not including the NULL byte).
|
|
|
|
|
*/
|
|
|
|
|
#define HIERNAMESIZE(n) ((n) + sizeof (HierName) - 3)
|
|
|
|
|
|
|
|
|
|
/* Indicates where the HierName was allocated: passed to EFHNFree() */
|
|
|
|
|
#define HN_ALLOC 0 /* Normal name (FromStr) */
|
|
|
|
|
#define HN_CONCAT 1 /* Concatenation of two HierNames */
|
|
|
|
|
#define HN_GLOBAL 2 /* Global name */
|
|
|
|
|
#define HN_FROMUSE 3 /* From a cell use */
|
|
|
|
|
|
|
|
|
|
/* ----------------------- Node attribute lists ----------------------- */
|
|
|
|
|
|
|
|
|
|
typedef struct efattr
|
|
|
|
|
{
|
|
|
|
|
struct efattr *efa_next; /* Next in list */
|
|
|
|
|
Rect efa_loc; /* Location of attr label */
|
|
|
|
|
int efa_type; /* Tile type attr attached to */
|
|
|
|
|
char efa_text[4]; /* String is allocated here */
|
|
|
|
|
} EFAttr;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Size of an EFAttr big enough to hold a string containing
|
|
|
|
|
* n bytes (not including the NULL byte).
|
|
|
|
|
*/
|
|
|
|
|
#define ATTRSIZE(n) ((n) + sizeof (EFAttr) - 3)
|
|
|
|
|
|
|
|
|
|
/* ------------------- Hierarchical and flat nodes -------------------- */
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Each entry in the a nodename hash table points to a EFNodeName.
|
|
|
|
|
* Several EFNodeNames may point to the same EFNode. Such EFNodeNames
|
|
|
|
|
* are linked into a NULL-terminated list by the name_next pointers.
|
|
|
|
|
* The first name in this list, pointed to by the efnode_name field of
|
|
|
|
|
* the EFNode they all point to, is the canonical name for this node.
|
|
|
|
|
*
|
|
|
|
|
* The name_hier field points to the HierName for this node, which
|
|
|
|
|
* will have only a single component for EFNodes within a Def, but
|
|
|
|
|
* multiple components for hierarchical node names.
|
|
|
|
|
*/
|
|
|
|
|
typedef struct efnn
|
|
|
|
|
{
|
|
|
|
|
struct efnode *efnn_node; /* Corresponding node */
|
|
|
|
|
struct efnn *efnn_next; /* Next name for this node */
|
|
|
|
|
HierName *efnn_hier; /* HierName for this node */
|
|
|
|
|
int efnn_port; /* Port number for this node */
|
2022-12-07 03:55:01 +01:00
|
|
|
unsigned short efnn_refc; /* #times referenced in hash */
|
2017-04-25 14:41:48 +02:00
|
|
|
} EFNodeName;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Both hierarchical and flat nodes use the same structure. Hierarchical
|
|
|
|
|
* nodes appear along with each cell def. Flat nodes are pointed to by
|
|
|
|
|
* the global hash table.
|
|
|
|
|
*
|
|
|
|
|
* Hierarchical nodes are linked in a doubly-linked list with all
|
|
|
|
|
* other nodes in the same cell, and flat nodes are similarly linked
|
|
|
|
|
* with all other flat nodes in the circuit. The list is doubly
|
|
|
|
|
* linked to allow nodes to be deleted easily when it is necessary
|
|
|
|
|
* to merge two nodes into a single node.
|
|
|
|
|
*
|
|
|
|
|
* There is a third way in which a node can exist if only its name is
|
|
|
|
|
* of interest, namely as an EFNodeHdr. The first part of an EFNode
|
|
|
|
|
* is an EFNodeHdr.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/* Represents perimeter and area for a resistance class */
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
int pa_area;
|
|
|
|
|
int pa_perim;
|
2019-10-18 20:12:52 +02:00
|
|
|
} EFPerimArea;
|
2017-04-25 14:41:48 +02:00
|
|
|
|
|
|
|
|
typedef struct efnhdr
|
|
|
|
|
{
|
|
|
|
|
int efnhdr_flags; /* See below */
|
|
|
|
|
EFNodeName *efnhdr_name; /* Canonical name for this node, this is a ptr
|
|
|
|
|
* to the first element in a null-terminated
|
|
|
|
|
* list of all the EFNodeNames for this node.
|
|
|
|
|
*/
|
|
|
|
|
struct efnhdr *efnhdr_next; /* Next node in list */
|
|
|
|
|
struct efnhdr *efnhdr_prev; /* Previous node in list */
|
|
|
|
|
} EFNodeHdr;
|
|
|
|
|
|
|
|
|
|
/* Node flags */
|
|
|
|
|
/*
|
|
|
|
|
* If set, this node was killed and neither it nor anything connected
|
|
|
|
|
* to it should be output. There should have been a new, identical
|
|
|
|
|
* structure in the input that was connected to the new node.
|
|
|
|
|
*/
|
|
|
|
|
#define EF_KILLED 0x01
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* If set, this node was allocated as a substrate terminal for a
|
|
|
|
|
* dev, and so should be automatically merged with nodes of the
|
|
|
|
|
* same name after all nodes have been flattened, rather than
|
|
|
|
|
* complaining about it being unconnected.
|
|
|
|
|
*/
|
|
|
|
|
#define EF_DEVTERM 0x02
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* This can be used as a general-purpose flag. It is used by
|
|
|
|
|
* the LEF module to indicate that a node is a "special" net.
|
|
|
|
|
*/
|
|
|
|
|
#define EF_SPECIAL 0x04
|
|
|
|
|
/*
|
|
|
|
|
* If set, this node is a subcircuit port and should be treated
|
|
|
|
|
* accordingly when writing netlist output. The port number is
|
|
|
|
|
* encoded in the efNodeName structure, since there may be
|
|
|
|
|
* multiple ports per node (for example, a thru route).
|
|
|
|
|
*/
|
|
|
|
|
#define EF_PORT 0x08
|
2018-10-29 22:29:15 +01:00
|
|
|
/*
|
|
|
|
|
* Flag ports of a top-level cell in addition to setting EF_PORT
|
|
|
|
|
*/
|
|
|
|
|
#define EF_TOP_PORT 0x10
|
2017-04-25 14:41:48 +02:00
|
|
|
/*
|
|
|
|
|
* This is used when a node is a substrate node with a local
|
|
|
|
|
* node name, making it an implicitly-defined port. It differs
|
|
|
|
|
* from EF_DEVTERM in that EF_DEVTERM includes global substrate
|
|
|
|
|
* nodes, which are not declared ports.
|
|
|
|
|
*/
|
2018-10-29 22:29:15 +01:00
|
|
|
#define EF_SUBS_PORT 0x20
|
2017-04-25 14:41:48 +02:00
|
|
|
/*
|
|
|
|
|
* EF_SUBS_NODE is defined for substrate nodes defined in the
|
|
|
|
|
* .ext file.
|
|
|
|
|
*/
|
2018-10-29 22:29:15 +01:00
|
|
|
#define EF_SUBS_NODE 0x40
|
2021-12-30 19:27:42 +01:00
|
|
|
/*
|
|
|
|
|
* EF_GLOB_SUBS_NODE is set for the node declared on the "substrate"
|
|
|
|
|
* line of the .ext file as the global default substrate node.
|
|
|
|
|
*/
|
|
|
|
|
#define EF_GLOB_SUBS_NODE 0x80
|
2017-04-25 14:41:48 +02:00
|
|
|
|
|
|
|
|
extern int efNumResistClasses; /* Number of resistance classes in efResists */
|
|
|
|
|
|
|
|
|
|
typedef struct efnode
|
|
|
|
|
{
|
|
|
|
|
EFNodeHdr efnode_hdr; /* See above */
|
|
|
|
|
#define efnode_name efnode_hdr.efnhdr_name
|
|
|
|
|
#define efnode_next efnode_hdr.efnhdr_next
|
|
|
|
|
#define efnode_prev efnode_hdr.efnhdr_prev
|
|
|
|
|
#define efnode_flags efnode_hdr.efnhdr_flags
|
|
|
|
|
|
|
|
|
|
EFCapValue efnode_cap; /* Total capacitance to ground for this node */
|
|
|
|
|
int efnode_type; /* Index into type table for node */
|
2020-03-13 15:33:44 +01:00
|
|
|
int efnode_num; /* Number of items in efnode_hdr list */
|
2017-04-25 14:41:48 +02:00
|
|
|
Rect efnode_loc; /* Location of a 1x1 rect contained in this
|
|
|
|
|
* node. This information is provided in the
|
|
|
|
|
* .ext file so it will be easy to map between
|
|
|
|
|
* node names and locations.
|
|
|
|
|
*/
|
2022-11-20 04:02:44 +01:00
|
|
|
LinkedRect *efnode_disjoint; /* List of disjoint node locations, created
|
|
|
|
|
* if EFSaveLocs is TRUE.
|
|
|
|
|
*/
|
2017-04-25 14:41:48 +02:00
|
|
|
EFAttr *efnode_attrs; /* Node attribute list */
|
|
|
|
|
ClientData efnode_client; /* For hire */
|
2019-10-18 20:12:52 +02:00
|
|
|
EFPerimArea efnode_pa[1]; /* Dummy; each node actually has
|
2017-04-25 14:41:48 +02:00
|
|
|
* efNumResistClasses array elements
|
|
|
|
|
* allocated to it.
|
|
|
|
|
*/
|
|
|
|
|
} EFNode;
|
|
|
|
|
|
|
|
|
|
/* -------------------------- Devices ----------------------------- */
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Each device can contain several terminals.
|
|
|
|
|
* Each terminal is described by the following structure.
|
|
|
|
|
* We use a EFNode pointer for the terminal to which a device connects;
|
|
|
|
|
* this assumes that devices appear after all the nodes for a cell.
|
|
|
|
|
*/
|
|
|
|
|
typedef struct devterm
|
|
|
|
|
{
|
|
|
|
|
EFNode *dterm_node; /* Node to which we're connected */
|
|
|
|
|
char *dterm_attrs; /* Attribute list */
|
|
|
|
|
int dterm_length; /* Length of terminal connection to gate */
|
|
|
|
|
} DevTerm;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Device itself.
|
|
|
|
|
* The dev_substrate and dev_type pointers are actually pointer into shared
|
|
|
|
|
* tables of names, rather than being individually allocated for each
|
|
|
|
|
* transistor.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
typedef struct parm
|
|
|
|
|
{
|
|
|
|
|
char parm_type[2];
|
|
|
|
|
char *parm_name;
|
|
|
|
|
double parm_scale;
|
2023-10-25 02:29:04 +02:00
|
|
|
int parm_offset;
|
2017-04-25 14:41:48 +02:00
|
|
|
struct parm *parm_next;
|
|
|
|
|
} DevParam;
|
|
|
|
|
|
|
|
|
|
typedef struct dev
|
|
|
|
|
{
|
|
|
|
|
struct dev *dev_next; /* Next device in def */
|
|
|
|
|
U_char dev_class; /* Device class (see extract/extract.h) */
|
|
|
|
|
U_char dev_type; /* Index into device type table */
|
|
|
|
|
U_char dev_nterm; /* Number of terminals in device */
|
|
|
|
|
EFNode *dev_subsnode; /* Substrate node */
|
|
|
|
|
Rect dev_rect; /* 1x1 rectangle inside device */
|
|
|
|
|
|
|
|
|
|
/* Most device types use only one or two of these, but subcircuits */
|
|
|
|
|
/* may keep all values to pass along as parameters. */
|
|
|
|
|
float dev_cap; /* Capacitance for class "cap" or subckt */
|
|
|
|
|
float dev_res; /* Resistance for class "res" or subckt */
|
|
|
|
|
int dev_area;
|
|
|
|
|
int dev_perim;
|
|
|
|
|
int dev_length;
|
|
|
|
|
int dev_width;
|
|
|
|
|
DevParam *dev_params; /* List of subcircuit parameters to output */
|
|
|
|
|
DevTerm dev_terms[1]; /* Terminals. The actual number will depend
|
|
|
|
|
* on dev_nterm above, so the size of this
|
|
|
|
|
* structure will vary.
|
|
|
|
|
*/
|
|
|
|
|
} Dev;
|
|
|
|
|
|
|
|
|
|
/* Size of a Dev structure for 'n' terminals (including the "gate") */
|
|
|
|
|
#define DevSize(n) (sizeof (Dev) + ((n)-1)*sizeof (DevTerm))
|
|
|
|
|
|
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* A big number, used for thresholds for capacitance and resistance
|
|
|
|
|
* when no processing is desired (NOTE: Probably should be using
|
|
|
|
|
* C99 "INFINITY" here instead).
|
|
|
|
|
*/
|
|
|
|
|
#define INFINITE_THRESHOLD (((unsigned int) (~0)) >> 1)
|
|
|
|
|
#define INFINITE_THRESHOLD_F ((EFCapValue)(1.0E38))
|
|
|
|
|
#define IS_FINITE_F(a) (((EFCapValue)(a)) != INFINITE_THRESHOLD_F)
|
|
|
|
|
|
|
|
|
|
/* Max filename length */
|
|
|
|
|
#define FNSIZE 1024
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern float EFScale; /* Scale factor to multiply all coords by */
|
|
|
|
|
extern char *EFTech; /* Technology of extracted circuit */
|
|
|
|
|
extern char *EFStyle; /* Extraction style of extracted circuit */
|
|
|
|
|
extern char *EFSearchPath; /* Path to search for .ext files */
|
|
|
|
|
extern char *EFLibPath; /* Library search path */
|
|
|
|
|
extern char *EFVersion; /* Version of extractor we work with */
|
|
|
|
|
extern char *EFArgTech; /* Tech file given as command line argument */
|
|
|
|
|
extern bool EFCompat; /* Subtrate backwards-compatibility mode */
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Thresholds used by various extflat clients to filter out
|
|
|
|
|
* unwanted resistors and capacitors. Resistance is in milliohms,
|
|
|
|
|
* capacitance in attofarads.
|
|
|
|
|
*/
|
|
|
|
|
extern int EFResistThreshold;
|
|
|
|
|
extern EFCapValue EFCapThreshold;
|
|
|
|
|
|
|
|
|
|
/* Table of transistor types */
|
|
|
|
|
extern char *EFDevTypes[];
|
|
|
|
|
extern int EFDevNumTypes;
|
|
|
|
|
|
|
|
|
|
/* Table of Magic layers */
|
|
|
|
|
extern char *EFLayerNames[];
|
|
|
|
|
extern int EFLayerNumNames;
|
|
|
|
|
|
|
|
|
|
/* Output control flags */
|
2021-07-11 03:13:24 +02:00
|
|
|
extern int EFOutputFlags;
|
2017-04-25 14:41:48 +02:00
|
|
|
|
2022-11-20 04:02:44 +01:00
|
|
|
/* Behavior regarding disjoint node segments */
|
|
|
|
|
extern bool EFSaveLocs;
|
|
|
|
|
|
2017-04-25 14:41:48 +02:00
|
|
|
/* -------------------------- Exported procedures --------------------- */
|
|
|
|
|
|
|
|
|
|
extern char *EFArgs();
|
|
|
|
|
|
|
|
|
|
/* HierName manipulation */
|
|
|
|
|
extern HashEntry *EFHNLook();
|
|
|
|
|
extern HashEntry *EFHNConcatLook();
|
|
|
|
|
extern HierName *EFHNConcat();
|
|
|
|
|
extern HierName *EFStrToHN();
|
|
|
|
|
extern char *EFHNToStr();
|
|
|
|
|
extern int EFGetPortMax();
|
|
|
|
|
|
2022-10-10 11:50:15 +02:00
|
|
|
/* C99 compat */
|
|
|
|
|
extern void EFHNFree();
|
|
|
|
|
extern bool EFHNIsGlob();
|
|
|
|
|
extern int EFNodeResist();
|
|
|
|
|
extern void efAdjustSubCap();
|
|
|
|
|
extern int efBuildAddStr();
|
|
|
|
|
extern void efBuildAttr();
|
|
|
|
|
extern int efBuildDevice();
|
|
|
|
|
extern void efBuildDeviceParams();
|
|
|
|
|
extern void efBuildDist();
|
|
|
|
|
extern void efBuildEquiv();
|
|
|
|
|
extern void efBuildKill();
|
|
|
|
|
extern void efBuildPortNode();
|
|
|
|
|
extern void efBuildUse();
|
|
|
|
|
extern int efFlatCaps();
|
|
|
|
|
extern int efFlatDists();
|
|
|
|
|
extern int efFlatKills();
|
|
|
|
|
extern int efFlatNodes();
|
|
|
|
|
extern int efFlatNodesStdCell();
|
|
|
|
|
extern void efFreeConn();
|
|
|
|
|
extern void efFreeDevTable();
|
|
|
|
|
extern void efFreeNodeList();
|
|
|
|
|
extern void efFreeNodeTable();
|
|
|
|
|
extern void efFreeUseTable();
|
|
|
|
|
extern void efHNBuildDistKey();
|
|
|
|
|
extern int efHNLexOrder();
|
|
|
|
|
extern void efHNPrintSizes();
|
|
|
|
|
extern void efHNRecord();
|
|
|
|
|
extern int efHierSrArray();
|
|
|
|
|
extern int efHierSrUses();
|
|
|
|
|
extern int efHierVisitDevs();
|
2023-04-28 02:47:55 +02:00
|
|
|
extern EFNode *efNodeMerge();
|
2024-10-20 14:41:23 +02:00
|
|
|
extern void efReadError(const char *fmt, ...) ATTR_FORMAT_PRINTF_1;
|
2022-10-10 11:50:15 +02:00
|
|
|
extern int efReadLine();
|
|
|
|
|
extern bool efSymAdd();
|
|
|
|
|
extern bool efSymAddFile();
|
|
|
|
|
extern void efSymInit();
|
|
|
|
|
extern void EFDone();
|
|
|
|
|
extern void EFFlatBuild();
|
|
|
|
|
extern void EFFlatDone();
|
|
|
|
|
extern bool EFHNIsGND();
|
|
|
|
|
extern void EFInit();
|
|
|
|
|
extern bool EFReadFile();
|
|
|
|
|
extern int EFVisitDevs();
|
|
|
|
|
extern int efVisitDevs();
|
|
|
|
|
extern bool efSymLook();
|
|
|
|
|
extern int efVisitResists();
|
|
|
|
|
extern int EFVisitResists();
|
|
|
|
|
extern int EFVisitNodes();
|
|
|
|
|
extern int EFVisitCaps();
|
|
|
|
|
extern void EFGetLengthAndWidth();
|
|
|
|
|
extern void EFHNOut();
|
|
|
|
|
extern int EFHierSrDefs();
|
|
|
|
|
extern int EFVisitSubcircuits();
|
|
|
|
|
extern int EFHierVisitSubcircuits();
|
|
|
|
|
extern int EFHierVisitDevs();
|
|
|
|
|
extern int EFHierVisitResists();
|
|
|
|
|
extern int EFHierVisitCaps();
|
|
|
|
|
extern int EFHierVisitNodes();
|
|
|
|
|
|
2024-10-16 08:38:41 +02:00
|
|
|
#endif /* _MAGIC__EXTFLAT__EXTFLAT_H */
|