mirror of
https://github.com/RTimothyEdwards/magic.git
synced 2026-08-30 09:58:55 +02:00
"tool" command was changed to be overridden by a Tcl command. Due to macro clients being registered with the tool name instead of just "layout", the "macro" command with no arguments or with a window client argument was just broken. In the process of fixing this, I realized that there was a conflict between the use of "netlist" as a window name and also as the name of a tool, so I changed the tool name to "nettool", a change which should be transparent to the end user. Otherwise, "macro netlist" returns the key bindings for the window, and the only way to get the key bindings for the tool is to make the tool active and then use "macro" without arguments. One remaining issue is that there is no syntax error that will cause the list of valid windows and tools to be printed. Probably "macro help" should print usage information instead of acting like "macro" with no arguments.
294 lines
9.8 KiB
C
294 lines
9.8 KiB
C
/*
|
|
* dbwind.h --
|
|
*
|
|
* Interface definitions for the 'glue' between the window
|
|
* manager and the database.
|
|
*
|
|
* *********************************************************************
|
|
* * 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. *
|
|
* *********************************************************************
|
|
*
|
|
*
|
|
* rcsid $Header: /usr/cvsroot/magic-8.0/dbwind/dbwind.h,v 1.1.1.1 2008/02/03 20:43:50 tim Exp $
|
|
*/
|
|
|
|
#ifndef _MAGIC__DBWIND__DBWIND_H
|
|
#define _MAGIC__DBWIND__DBWIND_H
|
|
|
|
#include "database/database.h"
|
|
#include "windows/windows.h"
|
|
#include "textio/txcommands.h" /* TxCommand */
|
|
|
|
/*--------------------------- Window Client Data ----------------------------
|
|
* The dbwind package keeps special client data that it uses to
|
|
* manage windows on the database.
|
|
*/
|
|
|
|
|
|
typedef struct DBW1 {
|
|
int dbw_bitmask; /* A single bit in a word, unique between all
|
|
* layout windows. Any cell that is expanded
|
|
* in this window has this bit set in its
|
|
* expand mask.
|
|
*/
|
|
int dbw_flags; /* Various flags, see below. */
|
|
int dbw_watchPlane; /* The plane number of a plane to watch
|
|
* (show tile structure)
|
|
*/
|
|
CellDef *dbw_watchDef; /* The name of a celldef to watch */
|
|
Transform dbw_watchTrans; /* A transform to root coordinates that
|
|
* uniquely identifies the -position- of
|
|
* the cell use being watched, in the root
|
|
* cell of the window.
|
|
*/
|
|
Rect dbw_expandAmounts; /* The sides of this rectangle are expanded
|
|
* out from the origin by the same amount
|
|
* that a redisplayed area should be expanded
|
|
* in order to catch all labels. This
|
|
* reflects the size of the largest label
|
|
* displayed anywhere in the window.
|
|
*/
|
|
TileTypeBitMask dbw_visibleLayers;
|
|
/* This bit mask tells which mask layers
|
|
* should be displayed on the screen.
|
|
*/
|
|
Plane *dbw_hlErase; /* ERROR_P tiles on this plane record highlight
|
|
* areas that must be erased in this window,
|
|
* in screen coordinates.
|
|
*/
|
|
Plane *dbw_hlRedraw; /* ERROR_P tiles on this plane record highlight
|
|
* areas that must be redrawn in this window, in
|
|
* root database coordinates.
|
|
*/
|
|
Rect dbw_gridRect; /* Defines grid in world coordinates: grid
|
|
* lines run along sides of rect, rect size
|
|
* determines spacing.
|
|
*/
|
|
int dbw_labelSize; /* What size to use for text when drawing
|
|
* labels in this window (e.g. GR_TEXT_SMALL).
|
|
* This is recomputed each time the window
|
|
* is completely redrawn. -1 means don't
|
|
* draw labels at all.
|
|
*/
|
|
Rect dbw_surfaceArea; /* This field and the next two that follow
|
|
* are just copies of the corresponding
|
|
* fields from window records. They're used
|
|
* to detect when a window has resized or
|
|
* rescaled.
|
|
*/
|
|
Point dbw_origin;
|
|
int dbw_scale;
|
|
} DBWclientRec;
|
|
|
|
/* Flag values for dbw_flags:
|
|
*
|
|
* DBW_GRID: Means grid is to be displayed in window.
|
|
* DBW_WATCHDEMO: Use `demo' style of watching (arrows, not addresses)
|
|
* DBW_ALLSAME: Means don't use different display styles for
|
|
* edit and other cells.
|
|
* DBW_SEELABELS: 0 means don't display labels ever.
|
|
* DBW_SEECELLS 0 means don't display cell names and bounding boxes
|
|
* DBW_SEETYPES display tiletype instead of tile address
|
|
*/
|
|
|
|
#define DBW_GRID 1
|
|
#define DBW_WATCHDEMO 2
|
|
#define DBW_ALLSAME 4
|
|
#define DBW_SEELABELS 010
|
|
#define DBW_SEECELLS 020
|
|
#define DBW_SEETYPES 040
|
|
|
|
/*
|
|
* exported variables
|
|
*
|
|
*/
|
|
|
|
extern WindClient DBWclientID;
|
|
extern int DBWSnapToGrid;
|
|
extern int DBWUnits;
|
|
|
|
extern int DBWMaxTechStyles;
|
|
extern int DBWMaxTileStyles;
|
|
extern int DBWNumStyles;
|
|
|
|
extern int RtrPolyWidth, RtrMetalWidth, RtrContactWidth;
|
|
|
|
/*
|
|
* Exported procedure headers for redisplay and output
|
|
*/
|
|
|
|
extern int DBWWatchTiles();
|
|
extern void DBWAreaChanged();
|
|
extern void DBWLabelChanged();
|
|
extern void DBWDrawLabel();
|
|
extern char *DBWPrintValue(int value, MagWindow *w, bool is_x);
|
|
extern char *DBWPrintSqValue(int value, MagWindow *w);
|
|
extern char *DBWPrintCIFValue(int value, MagWindow *w, bool is_x);
|
|
extern char *DBWPrintCIFSqValue(int value, MagWindow *w);
|
|
|
|
/*
|
|
* Exported procedures and variables related to the technology file
|
|
*/
|
|
|
|
extern void DBWTechInitStyles();
|
|
extern bool DBWTechAddStyle();
|
|
extern char *DBWStyleType;
|
|
|
|
/*
|
|
* exported button procedures and variables
|
|
*/
|
|
|
|
extern void (*DBWButtonCurrentProc)();
|
|
typedef void (*cb_database_buttonhandler_t)(MagWindow *w, TxCommand *cmd);
|
|
extern void DBWAddButtonHandler(const char *name, const cb_database_buttonhandler_t proc,
|
|
int cursor, const char *doc);
|
|
extern char *DBWGetButtonHandler();
|
|
extern char *DBWChangeButtonHandler();
|
|
extern int DBWButtonHandlerIndex();
|
|
extern void DBWPrintButtonDoc();
|
|
extern void DBWBoxHandler();
|
|
|
|
/* The following values are flags passed to DBWloadWindow() */
|
|
|
|
#define DBW_LOAD_IGNORE_TECH 1 /* Force load even if tech line does not match */
|
|
#define DBW_LOAD_EXPAND 2 /* Expand cell after loading */
|
|
#define DBW_LOAD_DEREFERENCE 4 /* Dereference instance file paths when loading */
|
|
#define DBW_LOAD_FAIL 8 /* Do not create new cell if file is not loadable */
|
|
#define DBW_LOAD_QUIET 16 /* Suppress error messages during load */
|
|
|
|
/* The following defines are used to indicate corner positions
|
|
* of the box:
|
|
*/
|
|
|
|
#define TOOL_BL 0
|
|
#define TOOL_BR 1
|
|
#define TOOL_TR 2
|
|
#define TOOL_TL 3
|
|
#define TOOL_ILG -1
|
|
|
|
/* The following defines are used to indicate which coordinate system
|
|
* is used when displaying or returning values. By default this is
|
|
* set to DBW_UNITS_INTERNAL. From magic version 8.3.595, this is
|
|
* independently set from "snap". For backwards compatibility,
|
|
* the value starts as DBW_UNITS_DEFAULT which implements the original
|
|
* behavior in which the "snap" setting dictates the dispaly units.
|
|
* Only if set to a non-negative value do the display units operate
|
|
* independently of the snap setting.
|
|
*
|
|
* NOTES:
|
|
* Lambda units are fixed by the tech file.
|
|
* Internal units are scalable.
|
|
* User units are scalable; this can be used, for example, to
|
|
* set a box position according to multiples of a track
|
|
* pitch, but is most often used manually with the "g"
|
|
* (for "grid") suffix; e.g., "move box e 1g"
|
|
* Micron units are dependent on the specified cifoutput style
|
|
* and how the tech file defines the scalefactor for it.
|
|
*/
|
|
|
|
#define DBW_UNITS_DEFAULT -1 /* backwards-compatible behavior */
|
|
#define DBW_UNITS_INTERNAL 0 /* internal units */
|
|
#define DBW_UNITS_LAMBDA 1 /* lambda units */
|
|
#define DBW_UNITS_USER 2 /* user grid units */
|
|
#define DBW_UNITS_MICRONS 3 /* micron units */
|
|
#define DBW_UNITS_TYPE_MASK 3 /* everything but the flag field(s) */
|
|
#define DBW_UNITS_PRINT_FLAG 4 /* flag used to indicate that
|
|
* the units should be printed
|
|
* with the value; e.g.,
|
|
* "10um" instead of "10".
|
|
*/
|
|
|
|
/* The following window mask can be used to select all database windows
|
|
* for things like the mask parameter to DBWAreaChanged.
|
|
*/
|
|
|
|
#define DBW_ALLWINDOWS -1
|
|
|
|
extern MagWindow *ToolGetPoint();
|
|
extern MagWindow *ToolGetBoxWindow();
|
|
extern bool ToolGetBox();
|
|
extern void ToolSnapToGrid();
|
|
extern bool ToolGetEditBox(Rect *);
|
|
extern void ToolMoveBox(), ToolMoveCorner();
|
|
extern int ToolGetCorner();
|
|
extern void DBWloadWindow(), DBWxloadWindow();
|
|
extern void DBWSetBox();
|
|
extern void DBWResetBox();
|
|
extern void DBWUndoOldEdit();
|
|
extern void DBWUndoNewEdit();
|
|
|
|
/* Exported procedures for managing highlights: */
|
|
|
|
extern void DBWHLAddClient();
|
|
extern void DBWHLRemoveClient();
|
|
extern void DBWHLRedraw();
|
|
extern int DBWHLRedrawWind();
|
|
extern void DBWDrawBox();
|
|
extern void DBWDrawCrosshair();
|
|
|
|
/* Exported procedures and variables relating to feedback: */
|
|
|
|
extern int DBWFeedbackCount;
|
|
extern void DBWFeedbackClear();
|
|
extern void DBWFeedbackAdd();
|
|
extern char *DBWFeedbackNth();
|
|
|
|
/* Exported procedures and variables relating to elements: */
|
|
|
|
/* flag fields for all elements (8 bits maximum) */
|
|
#define DBW_ELEMENT_PERSISTENT 0x01
|
|
#define DBW_ELEMENT_TEXT_SIZE 0x0e /* 3 bits (5 text sizes) */
|
|
#define DBW_ELEMENT_TEXT_POS 0xf0 /* 4 bits (9 positions) */
|
|
#define DBW_ELEMENT_LINE_HALFX 0x02 /* Add 1/2 to X position */
|
|
#define DBW_ELEMENT_LINE_HALFY 0x04 /* Add 1/2 to Y position */
|
|
#define DBW_ELEMENT_LINE_ARROWL 0x08 /* Add arrowhead left/bottom */
|
|
#define DBW_ELEMENT_LINE_ARROWR 0x10 /* Add arrowhead top/right */
|
|
|
|
extern void DBWElementAddRect();
|
|
extern void DBWElementAddLine();
|
|
extern void DBWElementAddText();
|
|
extern void DBWElementDelete();
|
|
extern void DBWElementNames();
|
|
extern void DBWElementInbox();
|
|
extern void DBWElementClearDef();
|
|
extern void DBWElementParseFlags();
|
|
extern char *DBWPrintElements();
|
|
extern void DBWScaleElements();
|
|
extern void DBWScaleCrosshair();
|
|
|
|
/* C99 compat */
|
|
extern void DBWreload();
|
|
extern void DBWInitCommands();
|
|
extern void dbwUndoInit();
|
|
extern void dbwFeedbackInit();
|
|
extern void DBWElementPos();
|
|
extern bool DBCellDeleteUse();
|
|
extern void DBWHLRedrawPrepWindow();
|
|
extern void CmdInit();
|
|
extern void DBWinit();
|
|
extern int DBWTechParseStyle();
|
|
extern void dbwButtonSetCursor();
|
|
|
|
/* Random procedures used internally to this module. None of these
|
|
* should ever need to be called by the outside world.
|
|
*/
|
|
|
|
extern void DBWCheckBoxDisplay();
|
|
extern void DBWUndoBox();
|
|
extern void DBWHLUpdate();
|
|
extern void DBWFeedbackShow();
|
|
|
|
extern void dbwElementInit();
|
|
extern void dbwCrosshairInit();
|
|
|
|
|
|
#endif /* _MAGIC__DBWIND__DBWIND_H */
|