2017-04-25 14:41:48 +02:00
|
|
|
/*
|
|
|
|
|
* dbwind.h --
|
|
|
|
|
*
|
|
|
|
|
* Interface definitions for the 'glue' between the window
|
|
|
|
|
* manager and the database.
|
|
|
|
|
*
|
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/dbwind/dbwind.h,v 1.1.1.1 2008/02/03 20:43:50 tim Exp $
|
|
|
|
|
*/
|
|
|
|
|
|
2024-10-16 08:38:41 +02:00
|
|
|
#ifndef _MAGIC__DBWIND__DBWIND_H
|
|
|
|
|
#define _MAGIC__DBWIND__DBWIND_H
|
2017-04-25 14:41:48 +02:00
|
|
|
|
|
|
|
|
#include "database/database.h"
|
|
|
|
|
#include "windows/windows.h"
|
2025-01-31 20:00:57 +01:00
|
|
|
#include "textio/txcommands.h" /* TxCommand */
|
2017-04-25 14:41:48 +02:00
|
|
|
|
|
|
|
|
/*--------------------------- 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 DBWMaxTechStyles;
|
|
|
|
|
extern int DBWMaxTileStyles;
|
|
|
|
|
extern int DBWNumStyles;
|
|
|
|
|
|
|
|
|
|
extern int RtrPolyWidth, RtrMetalWidth, RtrContactWidth;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Exported procedure headers for redisplay
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
extern int DBWWatchTiles();
|
|
|
|
|
extern void DBWAreaChanged();
|
|
|
|
|
extern void DBWLabelChanged();
|
|
|
|
|
extern void DBWDrawLabel();
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Exported procedures and variables related to the technology file
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
extern void DBWTechInitStyles();
|
|
|
|
|
extern bool DBWTechAddStyle();
|
|
|
|
|
extern char *DBWStyleType;
|
|
|
|
|
|
2020-05-23 23:13:14 +02:00
|
|
|
/*
|
2017-04-25 14:41:48 +02:00
|
|
|
* exported button procedures and variables
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
extern void (*DBWButtonCurrentProc)();
|
2025-01-31 20:00:57 +01:00
|
|
|
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);
|
2017-04-25 14:41:48 +02:00
|
|
|
extern char *DBWChangeButtonHandler();
|
|
|
|
|
extern void DBWPrintButtonDoc();
|
|
|
|
|
extern void DBWBoxHandler();
|
|
|
|
|
|
2021-02-10 19:05:38 +01:00
|
|
|
/* 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 */
|
|
|
|
|
|
2017-04-25 14:41:48 +02:00
|
|
|
/* 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
|
|
|
|
|
* the cursor box snaps to when moved with mouse clicks (values for
|
|
|
|
|
* DBWSnapToGrid).
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#define DBW_SNAP_INTERNAL 0 /* internal units (fine grid) */
|
|
|
|
|
#define DBW_SNAP_LAMBDA 1 /* lambda units (coarse grid) */
|
|
|
|
|
#define DBW_SNAP_USER 2 /* user grid units (user grid) */
|
|
|
|
|
#define DBW_SNAP_MICRONS 3 /* micron units */
|
|
|
|
|
|
|
|
|
|
/* 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();
|
2021-04-25 04:13:30 +02:00
|
|
|
extern void DBWResetBox();
|
2017-04-25 14:41:48 +02:00
|
|
|
extern void DBWUndoOldEdit();
|
|
|
|
|
extern void DBWUndoNewEdit();
|
|
|
|
|
|
|
|
|
|
/* Exported procedures for managing highlights: */
|
|
|
|
|
|
|
|
|
|
extern void DBWHLAddClient();
|
|
|
|
|
extern void DBWHLRemoveClient();
|
|
|
|
|
extern void DBWHLRedraw();
|
2022-10-10 11:50:15 +02:00
|
|
|
extern int DBWHLRedrawWind();
|
2017-04-25 14:41:48 +02:00
|
|
|
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();
|
2020-05-16 02:49:51 +02:00
|
|
|
extern void DBWElementClearDef();
|
2017-04-25 14:41:48 +02:00
|
|
|
extern void DBWElementParseFlags();
|
|
|
|
|
extern char *DBWPrintElements();
|
2020-05-12 18:03:38 +02:00
|
|
|
extern void DBWScaleElements();
|
|
|
|
|
extern void DBWScaleCrosshair();
|
2017-04-25 14:41:48 +02:00
|
|
|
|
2022-10-10 11:50:15 +02:00
|
|
|
/* 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();
|
2022-10-28 07:50:29 +02:00
|
|
|
extern void dbwButtonSetCursor();
|
2022-10-10 11:50:15 +02:00
|
|
|
|
2017-04-25 14:41:48 +02:00
|
|
|
/* 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();
|
|
|
|
|
|
2020-05-12 18:03:38 +02:00
|
|
|
|
2024-10-16 08:38:41 +02:00
|
|
|
#endif /* _MAGIC__DBWIND__DBWIND_H */
|