CA1333299C - Critical path analyzer with path context window - Google Patents

Critical path analyzer with path context window

Info

Publication number
CA1333299C
CA1333299C CA000602405A CA602405A CA1333299C CA 1333299 C CA1333299 C CA 1333299C CA 000602405 A CA000602405 A CA 000602405A CA 602405 A CA602405 A CA 602405A CA 1333299 C CA1333299 C CA 1333299C
Authority
CA
Canada
Prior art keywords
path
sheet
circuit
display
list
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CA000602405A
Other languages
French (fr)
Inventor
Richard R. Kaiser
Robert W. Bartel
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mentor Graphics Corp
Original Assignee
Mentor Graphics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mentor Graphics Corp filed Critical Mentor Graphics Corp
Application granted granted Critical
Publication of CA1333299C publication Critical patent/CA1333299C/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3308Design verification, e.g. functional simulation or model checking using simulation
    • G06F30/3312Timing analysis
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S715/00Data processing: presentation processing of document, operator interface processing, and screen saver display processing
    • Y10S715/961Operator interface with visual structure or function dictated by intended use
    • Y10S715/964CAD or CAM, e.g. interactive design tools

Abstract

A screen display includes a path context window for displaying a signal path in its entirety apart from the schematic sheets on which the path portions appear.
The window contains multiple display portions each graphically displaying a path portion appearing on a separate schematic sheet. The multiple display portions are arranged adjacent to each other to display the entire signal path as continuous. The screen display also includes a path list window and may include view sheet windows each showing a schematic sheet of a path portion in the path context window. A user selects a path from the path list window, which causes a path context window containing the selected path to appear.
Selecting a path portion from the displayed signal path causes a view sheet window containing the corresponding schematic sheet to appear. The means for producing the various windows and other features of the screen display is also disclosed.

Description

133~2~3 CRITICAL PATH ANALYZER WITH PATH CONTEXT WINDOW
BACKGROUND OF THE INVENTION
A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent Office patent file or records, but otherwise reserves all copyright rights whatsoever.
This invention generally relates to electronic design automation apparatus and, more particularly, to an improved critical path analyzer, also referred to as a timing analyzer or timing verifier.
Logic simulation is now an important tool in the design and verification of electronic circuits, including transistor level, gate level, and block level designs. Simulation tests the function of a design by exercising and evaluating circuit logic with a set of input patterns called test vectors. Logic simulators available today have simplified the generation of test vectors and made simulation a time- and cost-efficient method of uncovering many circuit-behavior problems before test-program development or production. A
thorough simulation can reveal a variety of errors such as reversed polarities, missed clock periods, or incorrect logic implementation.
Simulation, however, cannot provide complete information about timing errors that occur in circuits employing sequential logic. Signal propagation in sequential logic circuits is not simultaneous.
Propagation delays, for example, may influence the arrival time of signals at the several inputs of a single gate. If a signal misses a clock period as the result of such delay, simulation might show an error, but it may not report the signal path that introduced the critical delay. Moreover, if the delay occurs under - 2 - 13~32~3 conditions not exercised by the test vectors, simulation might miss the timing error entirely.
Timing analyzers provide the timing analysis lacking in logic simulators and allow a designer to identify signal paths whose timing is of concern. A
signal path is considered to be a sequence of pins through a design that a signal will follow. Although path analysis approaches vary, at the heart of any path-analysis method is the concept of the critical path--the slowest of all signal propagation paths during a given cycle of circuit operation. A timing analyzer that provides critical path analysis typically searches for and identifies the fastest and slowest paths to a destination register in the circuit such as a clocked circuit element.
Prior timing analyzers, nevertheless, suffer from a number of drawbacks that limit their ease of use. One drawback is the difficulty in collecting information on different critical paths in the design.
Information on each path is typically found in separate locations throughout the output from the analyzer, either on separate sheets of a printout or on separate terminal screen displays. A designer wanting to gather the different path information together must spend considerable time searching the output for the desired information and then record it.
Another drawback is the difficulty in visually tracing the critical path across the schematic sheets of the circuit. Most timing analyzers merely provide a textual description of the critical path, identifying the path by source and destination pins. It is left to the designer to trace the critical path across one or more schematic sheets to determine the path's circuit components and related signal delays. This process is not only time-consuming, but prone to error.
Recognizing this, a timing analyzer available from Silicon Design Automation of San Jose, California, is constructed to highlight all critical paths directly on the schematic sheet when viewed on a terminal screen and to indicate delays for each component along the path.
But this analyzer still requires the designer to page through several screen displays of schematic sheets to view the entire signal path if the path crosses more than one schematic sheet.
SUMMARY OF THE INVENTION
An object of the invention, therefore, is to provide an improved apparatus for displaying paths along which signals propagate through a circuit.
Another object of the invention is to provide such an apparatus that displays in a screen display a signal path entirely, the signal path having portions that appear on separate schematic sheets.
Yet another object of the invention is to provide an apparatus that displays a list of critical signal paths in a screen display.
Still another object of the invention is to provide such an apparatus that displays in a screen display both the list of critical signal paths for selection of a critical path and, upon selection, the entire signal path that may cross several schematic sheets.
In accordance with the invention, a screen display is described for displaying a signal path in its entirety in isolation from the schematic sheets on which the path portions appear. The screen display comprises multiple display portions, each portion graphically displaying in isolation a path portion appearing on a separate schematic sheet. The multiple display portions are arranged adjacent to each other to display the signal path in its entirety in isolation from the schematic sheets.
The screen display includes other features to ~L3~2~

assist the user in viewing the signal path. Sheet identifiers are included in each display portion fo~
identifying the schematic sheet for the path portion.
Separators are shown between path portions for indicating a transition from one schematic sheet to another. A path list display shows a list of signal paths that can be selected for display. Separate schematic sheet displays may also appear in the screen display upon selection of a path portion from the displayed signal path.
Apparatus for displaying the signal path comprises means for accepting data defining signal paths in a circuit and display generator means for producing a display of the signal path entirely in a screen display. In particular, the apparatus may include analyzing means for determining which of the defined signal paths are considered critical. The display generator means responds to the selection of a critical path for producing a display of the selected critical path. Path list generator means may also be included in the apparatus for displaying in the screen display the list of the signal paths for selection.
In the present embodiment, the invention is described and shown in the context of a critical path analyzer for analyzing the timing of signal paths in a circuit design. The screen display includes a path context window that contains the entire signal path across multiple schematic sheets. Accompanying the path context window is a path list window that contains a list of the critical paths. A designer selects a critical path from the list in the window via conventional control means such as a keyboard or mouse.
The selected path then appears in the path context window. To view the schematic sheet of a portion of the displayed path, the designer selects the path portion.
A view sheet window appears in the screen display in 13~2~9 response, displaying the schematic sheet corresponding to the selected portion.
The foregoing and other objects, features, and advantages of the invention will become more apparent from the following detailed description of a preferred embodiment which proceeds with reference to the accompanying drawings.
BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 is a hierarchial view of schematic sheets for a circuit design, each level of the hierarchy representing a different level of hardware modeling.
FIG. 2 is a screen display generated by apparatus according to the invention, the screen display including a path context window, path list window, and view sheet windows.
FIG. 3 is a second screen display generated by the apparatus which shows multiple path context windows.
FIG. 4 is a block diagram showing the relationship between various data structures and the apparatus, which enables the apparatus to generate the path context window and other features of the invention.
DETAILED DESCRIPTION
Referring now to FIG. 1 of the drawings, there is shown a hierarchial view of schematic sheets for a circuit design. These "sheets" are created by a designer on a computer using a computer program known as a schematic editor or schematic capture package.
Schematic editors are known in the art and are available from a number of sources including Mentor Graphics of Beaverton, Oregon; Daisy Systems of Mountain View, California and Valid Logic Systems of San Jose, California. With a schematic editor, a designer can create a hierarchy of design levels, with each level representing a different level of hardware modeling.
For example, in FIG. 1, the top level of schematic sheets is the most general design. The lower level is 13~2~i~

more specific, with each sheet corresponding to an individual component which the designer wishes to model. Each level of design is given a filename, and the sheets within each filename are individually numbered. For purposes of describing the present invention, it will be assumed that a designer has designed a circuit with two levels of modeling. The top level is labeled with the filename ADD_DET and includes at least one sheet and possibly more as indicated by the adjacent sheet shown in dashed lines. The lower level is labeled with the filename DECODE, referring to a component within sheet 1 of ADD_DET and includes at least one sheet. Other components may also be shown more explicitly on schematic sheets at the second level, as indicated by the dashed box at the lower level in the figure. The circuit data entered graphically by the designer via the schematic editor includes component symbols taken from a library and connections between the components to create the circuit. The components so entered are referred to in the art as "instances" and the wire connections between instances as "nets." As will be described, this data is placed by the schematic editor in various data structures where it can be accessed by other design automation packages such as fault simulator, logic simulators, and timing analyzers.
The present invention is described in the context of a timing analyzer, in particular, a critical path analyzer. The critical path analyzer accepts data from a schematic editor or equivalent apparatus, defines signal paths from that data, and determines which of the defined signal paths are considered critical in terms of timing. It should be understood, however, that the present invention is not limited to use with a timing analyzer. The invention as described and claimed herein may be practiced in any electronic design automation apparatus where signal paths are an object of interest.

13~32~3 The Screen Display Referring now to FIG. 2 of the drawings, there is shown a screen display 10 generated by apparatus according to the present invention. The screen display 10 appears on terminal screen after the designer/user has run a critical path analysis with a critical path analyzer running on an associated computer. An equivalent permanent copy of the display lO, of course, may be produced from the display 10 with the use of a printing device. In the right portion of the display 10 appears a path list window 12 for displaying a list of signal paths determined to be critical by the analyzer.
The paths are indicated by numbered rows and include data such as the source and destination pins for the path, whether the path signal arrived early or late relative to the clock signal for the destination register, the delay through the path, the number of instances in the path, etc. Unlike prior analyzers, however, all the critical paths are collected in this common location, window 12, for view by the user. If more paths exist than are shown in the window 12, the window may be expanded by selecting and moving arrows 14 via conventional control means such as a touch screen, pointer and mouse, or cursor and keyboard, etc.
A critical path may be selected from the path list window 12 via the control means for display of the path in its entirety apart from the schematic sheets.
Upon its selection, a critical path is displayed in a path context window 16. As shown in FIG. 2, the path context window has a number of display portions of variable width for displaying path portions from separate schematic sheets. Together these display portions display a signal path in its entirety in a screen display such as window 16. For example, with path 2 selected from window 12, a first display portion 18a graphically displays in isolation a path portion appearing on sheet 1 of filename ADD_DET apart from the schematic sheet, as indicated by a sheet identifier in the upper left corner of the display portion. The display portion 18a is defined by a path boundary 19 indicating the beginning of the path and a separator 20a indicating a transition to another schematic sheet.
Within the display portion 18a are shown the instances and nets comprising the path portion. Also included is other data for the user, such as the name of the primary input, the circuit and commercial designations for the instance and the cumulative signal delay along the path after each instance.
A second display portion 18b adjacent to the first portion 18a continues the signal path 2 by displaying a second path portion in isolation apart from its schematic sheet. Separator 20a, situated between the two display portions, is constructed of "down"
arrows to indicate a transition to another sheet at a lower design level. A sheet identifier in the upper left corner of the display portion indicates that the path portion is found on sheet 1 of filename DECODE.
This schematic, as will be described, shows the internal design of a decoder found in sheet 1 of filename ADD_DET. To assist the user in determining that this chip is the source of the path portion, a symbol 22 for the component is displayed in the display portion 18b adjacent to the path portion. Display portion 18b is bounded on its right by separator 20b. Because the following path portion continues on a higher level schematic sheet, separator 20b is constructed of "up"
arrows to indicate the upward transition. If the following path portion had continued on an equal level schematic sheet, separator 20b would have indicated so with a vertical line.
A third display portion 18c adjacent to the second portion continues the signal path 2 and displays 13332~
g the final path portion in isolation apart from its schematic sheet up to the path's termination at a destination register 24. The information displayed within the final display portion is of similar type to 5 the information displayed in the other display portions. Also displayed is the cumulative signal delay tPath through the path relative to a reference and the clock delay tCLK for register 24 relative to the reference. As shown in display portion 18c, tPath equals 203.0 nanoseconds and tCLK equals 200.0 nanoseconds. The signal in path 2 thus arrives late, 3 nanoseconds after the clock signal for register 24.
This information is also shown in the path list window 12 as the slack time.
The number of display portions depends on the number of schematic sheets crossed in the arrangement of components on each schematic sheet. The width of each display portion depends upon the number of instances within each portion and the length of each net between 20 each instance. The entire signal path, regardless of the number of display portions, may be displayed within the path context window 16. If the signal path exceeds the size of the window 16, the control means can be employed for actuating arrows 26 to scroll the path 25 horizontally.
The path window 16 also includes a prolog display portion 18d adjacent to the left side of the path boundary 19. Display portion 18d includes filename and sheet name headers 28 and 30, respectively, and a 30 stub net 32 that connects to the input pin of the selected path.
Prior analyzers, by contrast, can only show one path portion at a time, highlighted within its respective schematic sheet. To view the entire path, 35 the user must search through each schematic sheet at each relevant design level to trace the entire path.

13~32~

To view the actual schematic sheets that contain the selected signal path in context, the user selects a path portion from path context window 16, again via conventional control means. Upon selection of a path portion, the corresponding schematic sheet is displayed in a separate schematic sheet display such as view sheet window 34. In FIG. 2, view sheet window 34a shows sheet 1 of ADD_DET that includes the first and final path portions of path 2. View sheet window 34b shows sheet 1 of DECODE and displays the internal gate circuitry of the decoder chip, represented by symbol 22. The decoder chip, it can now be seen, is represented in sheet 1 of ADD_DET as a functional block. At the lower design level in sheet 1 of DECODE, the individual gates, input pins, and output pins of the decoder chip are displayed.
To assist the user in detecting the selected path in the view sheet windows, the selected path is displayed in contrasting indicia to the screen display by highlighting the path against the background of the schematic sheet. The highlighting may be done both in the path context window 16 and in view sheet windows 34a, 34b if either is open for view.
FIG. 3 illustrates that multiple path context windows 16 and 16' can be simultaneously displayed if so desired. A path context window is closed and the displayed path removed by the user via the control means.
The Display Screen Generator The screen display 10 and its features heretofore described is generated by source code written in C++. A copy of the code is attached as Appendix A.
The source code uses data from graphics, connectivity, and path data structures, to be described, to generate the screen display. The source code refers to many ancillary functions and classes for data access and drawing functions. Although the source code for these 133~299 functions is not included to maintain a focus on the invention, one skilled in the art could easily generate such code from each function's name. For example, the function new_picture creates a window to draw in; the function init_point marks an initial point for drawing;
the function terminal_point terminates a line for drawing, etc.
The algorithm employed in the source code for generating the screen display 10 is best understood by reference to the following pseudo-code. It will be recognized by those skilled in the art that equivalent algorithms could be so employed for generating the screen display 10. In reading the pseudo-code, the following should be noted. The operators '=, ==, =, represent "not equal to," "equal to," and "is assigned,"
respectively. Constant values are capitalized. The string "//" precedes comments. Procedure invocations are identified by the suffix "()." A11 procedures are found in an explicit procedure block. Parameters to a procedure are found within the "()." Indentation within a procedure block is significant. The procedures include the following:
path_list produces the path list window 12 (also referred to as the graphical context window);
path_context produces the path context window 16;
drawProlog produces the prolog to the path within window 16, including the filename and sheet name headers 22 and 24;
drawSheetBoundary draws boundaries between path portions;
drawInst draws instances within the selected path;
drawNet draws nets within the selected path;
view_selected_sheet creates a view of the schematic sheet that contains the selected object, i.e., component;

133~239 select places the supplied object into the list of selected objects;
hilite changes the indicia against the background of the screen display to highlight the object as displayed in various windows on the display; and identify_object returns the object that is represented by the g raphics that are closest to the graphical point provided to it in the provided window.
Referring now to FIG. 4, both the pseudo-code and source code assume the existence of three data structures: a graphics structure 36, a connectivity structure 38, and a path structure 40. The graphics structure 36 and connectivity structure 38 are generated by means such as a schematic editor previously described in response to the input from the designer. A transform program 42 within the schematic editor transforms the data from the graphics structure 36 into data for the connectivity structure 38. A critical path analyzer 44 communicates with the connectivity structure 38 to define paths and determine which paths are critical.
Path means such as path structure 40 then accept data from the analyzer 44 defining critical signal paths and stores the paths by reference to input-output pin pairs. All of the above data structures 36, 38, 40, the transformer 42 and analyzer 44 are known and understood in the art. A display generator 46 communicates with each of the data structures to obtain data for generating the path context window 16, the path list window 12, and other features of the display screen 10.
Considering the data structures in more detail, the path structure 40, also referred to as thePath, serves as a source of data for the procedure path_context(). The connectivity structure 38 stores data describing the instances and nets connected to each pin. In the pseudo-code, this structure is referred to as theCKT and is the source of data for the function 133~2~

inst(). This function returns the instance connected to the supplied pin from the connectivity structure. The graphics structure 28 contains data on the location and graphic appearance of each instance, net, and pin in the circuit. In the pseudo-code, this structure is referred to as theCKTinfo and serves as the source of data for several functions. The function sheet() returns a identifier for the sheet on which the supplied instance or pin appears. The function location() returns the x,y location of the supplied pin relative to the symbol origin. The function symbol() returns the graphics for the symbol of the supplied instance.
The following functions also exist for generating the view sheet windows such as 34a and 34b from data within the graphics structure 36. The function owning_inst(object) returns the parent instance in the hierarchy for this object, i.e., the instance which contains the sheet that contains the object. An object is an instance, net, or pin. The function net_object(net, sheetId) returns a graphical object identifier for the given net on the given sheet. This graphical object highlights the net in the view window.
The function object(graphical objectId, inst, sheetId) returns the object that is represented on the display by the supplied graphical objectId. The instance and sheetId parameters are required because the given graphical object can represent many different instances, nets, or pins if the sheet is part of a component that is used more than once in the circuit design.
The procedure path_list is a means for producing in the screen display 10 a list of the critical signal paths, as determined by the critical path analyzer 36. For each critical path, a single text line is built describing the path and displayinq the textual description as the net line in the window 12.
From window 12, a critical path such as path 2 can be 13^~32~3 selected for display in its entirety in path context window 16.
The procedure path_context is the main procedure of the display generator and generates the path context window and associated features by invoking the procedures drawProlog, drawInst, and drawNet. These procedure blocks comprise the display generator 46 for producing a display of the signal path contained entirely within path context window 16.
Initially, the procedure path_context seeks a value for the variable next_entry_point upon selection by the user of a critical path. This variable tracks the point for boundaries such as path boundary 19 or separators 20a or 20b, or the leftmost point at which a net or instance in the path is drawn. The assignment statement containing the variable invokes the procedure drawProlog in order to obtain the initial point value, picture_origin. The procedure drawProlog initially draws the filename and sheet name headers 22 and 24 at a predetermined distance to the left of the picture origin point. DrawProlog in turn invokes the procedure drawSheetBoundary which evaluates the x coordinate of picture_origin for a boundaryType. The procedure drawSheetBoundary is a separator generator means for producing the boundaries and separators for display portions and also is a sheet identifier means for generating the sheet identifiers or labels for identifying each new sheet. If the boundaryType equals PROLOG, a path boundary 19 to the prolog is drawn. If the boundaryType equals DOWN, UP, or SAME, the appropriate separator 20 is drawn. The sheet and filename labels are also drawn for a new sheet. On the initial pass through drawSheetBoundary, the boundaryType is equal to PROLOG and boundary 19 is drawn. The procedure drawProlog continues by drawing the stub net 32 if the first pin in the path is the input pin.

133323 s3 Procedure drawProlog then returns the variable picture_origin as the value for next_entry_point.
Next_entry_point now contains the point at which the prolog net exited the prolog segment.
After initializing the variables prevPin and prevInst to identifiers NOPIN and NOINST, the procedure path_context enters a for loop that checks each pin in the selected path to determine which separators 20, instances, and nets should be drawn. The for loop includes a first if statement that determines if the present path pin and the previous path pin are connected to the same instance or if the previous pin equals NOPIN. If either condition is satisfied, an instance is drawn according to the procedure drawInst and the variable next_entry_point is assigned a new value equal to exit_point. The next if statement determines if the present instance and previous instance are on separate schematic sheets and if the previous instance is not equal to NOINST. If both conditions are satisfied, a boundary is drawn according to the procedure drawSheetBoundary and new labels for the filename and sheet name are drawn on the new schematic sheet.
The procedure DrawNet draws nets between instances. It first sets a variable exit_point equal to the net's desired length. The net is then drawn from the entry_point to the exit_point, named if desired, and the signal delay information from the net is illustrated. The net information is also placed in a highlight table to provide a means of contrasting the net with the background of the screen display when the corresponding net is selected. The value of variable exit_point is then returned to the procedure path_context for next_entry_point. Each following pin is now evaluated in the for loop. Where the schematic sheet for the next instance is different, the procedure SheetBoundary is invoked.

13~3293 The procedure drawInst draws instances. It is similar in operation to drawNet. The variable exit_point is set equal to a desired width for the instance. The procedure then draws a symbol for the instance centered between the entry and exit points.
Net stubs are added to the entry and exit points and label information for the instance, such as a circuit description and commercial designation, are added. This data is also stored in a highlight table for contrasting it with a background of the screen display 10. The procedure then returns the value of the variable exit_point to the procedure path_context as the next_entry_point.
In subsequent passes through the for loop in procedure path_context, the instances, nets, and boundaries are drawn as set forth in the procedure.
Invocations to the procedure drawSheetBoundary, drawInst, and drawNet continue, with the labels for each new sheet drawn in drawSheetBoundary. When the last instance is encountered in drawInst, the total path delay information is added to the path context window 16.
The procedure view_selected_sheet(object) is a schematic sheet generator means responsive to a selection of a portion of the displayed signal path for producing displays such as view sheet windows 34a and 34b. It creates a window in the display that contains a schematic sheet, such as 34a, with representations of the nets, instances, and pins of the design. The procedure first stores the value of the sheet identifier and the parent instance such as component 22 of the sheet into a structure called theView. It then creates a window to display the schematic sheet and saves the sheet identifier in theView. The procedure then displays the schematic sheet in the window and returns theView structure to a standard calling procedure. The calling procedure is not outlined here, since it is a standard command processing procedure, known in the art and its description would only detract from focus on the invention.
The procedure select tells the display generator 46 which object, such as a path, path portion or component, has been selected by the user for display. It maintains a list of selected objects and provides for highlighting their displayed representation(s). The procedure first adds the object to the list of objects that are currently selected.
Then it enters the first of two for loops. The first loop crosses all displayed view windows and calls the procedure hilite() to highlight the displayed representation of the object in the view window. The second for loop highlights the selected path in the path context window.
The procedure hilite(), as described, causes the displayed representation of an object to stand out from the background of the screen display. There are two versions of the procedure, one for the view window and one for the path context window. They are different in implementation, but their functions are similar. The path context window version highlights the path within the path context window. It assumes that a structure is available from the window itself (the highlight table referred to in the path_context procedure) that can return a list of graphical objects that are the displayed representation of the objects. The for loop then loops across each of the objects and changes their display. The view window version obtains its information on objects to highlight from different sources, depending upon the type of the object that is to be highlighted. If it is a net, the procedure calls the net_object() function of theCktInfo. If it is an instance, the procedure calls the symbol() function. If it is a pin, the procedure calls the location() function.

13332~

The identify_object procedure is used to convert a point on the display screen into a design object. This supports the selection operation that allows positioning a cursor on the displayed representation of a design object in order to select it. It also has a view window version and a path context window version. The view window version communicates with a function in theCktInfo that correlates graphical object identifiers to design objects. As described in the pseudo-code, the version determines which of the graphical objects on the sheet is closest to the point and then asks for the corresponding design object.
The path context window version works differently. The path context window is a concatenation of vertical segments as can be seen in examining the source code. The left and right x coordinates of each segment of the path context are known. The procedure includes a for loop that loops across each of the segments of the path context window 16. For each segment, an if statement tests to see if the x coordinate of the supplied point is within the boundaries of the segment. If the x coordinate is within the boundaries, then a second if statement tests to see if this is an instance segment or a net segment.
If it is a net segment (the else clause of the if), the associated net is chosen as the object to return. If it is an instance segment, a further test must be done.
This further test is required because an instance segment contains both a symbol for the instance and possibly two net stubs that connects its entry/exit points with the pins of the symbol. In this particular algorithm, if the x coordinate is to the left of the symbol, it will return the input net; if it is to the right of the symbol, it will return the output net;
otherwise it returns the instance associated with the 13332~3 segment. Finally, if the for loop completes without returning anything then the NULL_OBJECT is returned signaling that no object could be identified at the provided location.

-procedure path_list // This procedure produces the path list window foreach critical path build a single text line describing the path and display it as the next line in a window end foreach end procedure path_list procedure path_context // This procedure produces the path context window next_entry_point = drawProlog() // next_entry_point now contains at which the prolog net exited // the prolog segment prevPin = NOPIN;
prevInst = NOINST;
foreach pin in thePath if (theCkt.inst(pin) == theCkt.inst(prevPin) or prevPin == NOPIN) if (theCktInfo.sheet(inst) '= theCktInfo.sheet(prevInst) and prevInst '= NOINST) drawSheetBoundary(next_entry_point) next_entry_point = drawInst(next_entry_point) end if else next_entry_point = drawNet(next_entry_point) prevInst = theCkt.inst(pin) prevPin = pin end foreach end procedure path_context procedure drawProlog() draw filename and sheet name headers to left of picture origin drawSheetBoundary(picture_origin) if first pin in path is input pin draw stub net to connect to input pin return picture_origin // where to start the first segment end procedure drawProlog 133~23g procedure drawInst(entry_point) exit_point = entry_point + width() draw theCktInfo.symbol(inst) centered between entry and exit draw net stub from entry point to theCktInfo.location(inputPin) 5 draw net stub from theCktInfo.location(outputPin) to exit point draw instance label information if requested if this is the last instance draw total path delay information put this instance and graphics information into selection hilite table // The foregoing line will allow for hiliting this instance in this // window whenever the instance is slected.
return exit_point end procedure drawInst procedure drawNet(entry_point) exit_point = entry_point + width() draw net between entry and exit point draw net name if desirable 20 draw path delay informtion associated with net put this net and graphics information into selection hilite table // The foregoing line will allow for hiliting this net in this window // whenever the net is selected.
return exit_point 25 end procedure drawNet procedure drawSheetBoundary(point) if boundaryType == PROLOG
draw prolog boundary at x location of point 30else if boundaryType == DOWN
draw down indicator at x location of point else if boundaryType == UP
draw up indicator at x location of point else if boundaryType == SAME
35draw same component indicator at x location of point draw labels for the new sheet end procedure drawSheetBoundary 13332~

procedure view_selected_sheet(object) // This procedure creates a window that is a view of the schematic // of the selected object. It returns a structure that contains the // window and sheet data.
5 theView.sheetId = theCktInfo.sheet(object) theView.parent = theCktInfo.owning_inst(object) theView.window = create a window on the display put the schematic picture associated with the sheetId in the window return theKView end procedure path_list procedure select(object) add object to the list of selected objects foreach view window hilite(object, window.theView) end foreach foreach graphical context window hilite(object, theContext) end foreach end procedure procedure hilite(object, theContext) // This procedure is the hilite procedure as associated with the // graphical context window. The 'graphical_object_list' function 25 // is supported by a data structure, typically a hash table, created // at the time the graphical path context is built. See the // graphical path context enabling description for more information // on this.
grobj_list = theContext.graphical_object_list(object) 0 foreach grobj in grobj_list change display of 'grobj' to call attention to it end foreach end procedure 133329~

procedure hilite(object, theView) // This procedure is the hilite procedure as associated with the // view window.
case (object.type) of net : grobj = theCktInfo.net_object(object.net, theView.sheetId) pin : grobj = theCktInfo.location(object.pin) instance : grobj = theCktInfo.symbol(object.inst) end case change display of 'grobj' to call attention to it end procedure procedure identify_object(x, y, theContext) // This procedure takes a point in the context window and returns l/ an object that the point identifies.
foreach segment in theContext if (x > = segment.leftX) and (x < = segment.rightX) then if (segment.is_instance) then if (x < segment.symbol.leftX) then return segment.incoming_net else if (x > segment.symbol.rightX) then return segment.outgoing_net else return segment.inst end if // segment is an instance segment else // segment is a net segment return segment.net end if // location is in this segment end foreach // if we get to here then the point was not in any segment, return // nothing return NULL_OBJECT
end procedure 133~293 procedure identify_object(x, y, theView) // This procedure takes a point in the view window and returns an // object that the point identifies.
grobj = smallest graphical object on the sheet that contains point (x,y) return theCktInfo.object(grobj, theView.parent, theView.sheetId) end procedure - 25 _ 1333299 APPENDIX A

Jun ~ 15:25 198B. path_context.source Page 1 t HEADER .......... ...... ... ........... ... ..
pcarea.h - Declare class Pcarea t COpyRIGHT
* Copyright.~C~.19BB Mentor........ Graphics Corporation .
t t DESCRIPTION................ ............. ... .. . . . ... .....
~ The area defined and managed by this is the Path Context area of t Quickpath.................. ............. .... .. ... . . . . .
t/ , ~ifndef INCLUDED_PCAREA
~define INCLUDED_PCAREA ...... .
~ifndef INCLUDED_QP~ASE ............... . . .. ..........~include <qpbase.h>
~endif..... . ............... .................................................... . . ....... ..........
~ifndef.INCLUDED_HILITE_QPAREA ............. ........... ... ............. .
~include <hilite_qparea.h>
~endif . .. ~ . ... ...... . . . . .. .. ...............
F i fndef INCLUDED.GEOM .................... ...... . ................... .. ...... ....
~include <geom.h>
~endif. .......................... . . . .
~ifndef INCLUDED_PCAREA_CONSTS .................. . . .
Kinclude <pcarea consts.h>
~endif . ............. ... .. ........ ... .... ... . ............. .. . ...... ..
#ifndef INCLUDED_REFS . ......................... .. .. ... .... . . ........ ...
#include <refs.h>
endif ............... ............. . ... . ................ ~. .... ... ......

~ifndef INCLUDED.FE.. ................ .. ....... .. . .. .. ...... .. . .
~include <fe.h>
cendif . . ..... ............ .
/~ tttttttttttttt-tttttttttttttttttttttttt*tttttttt*tttt*tttttttttttttttttttttt // t t // t ,, ~scellaneous.enums, structs, etc. . .............................................. ...........................
// t t // ~tttttttttttt~*ttt*tttttttttttttAtt**t*ttttttt*tttttttttt**ttttttttt*~tt*t*t // ........... .. . ............ .......... . ... ..... .....
// Declaration of struct Pc text_info / / . . ...... . = ....... ... ... ... . . .... ... .... .. .
struct Pc_text_info ( coord .ht .................... // Height of the text in coord's . . . .......... .......
Pc_text_align align; // Alignment, declared in pcarea_consts.h short .... color; . ........... .// color map level to use, if color node. .
l;
.... . .. . . . . . . . . .............
// ***~tttt~*~t~****t*t**t****************t*****~***********t~**t**~*****~***~*
// t . t // t Class Pcarea // t .......
// ****t**************t****~**t**********~****tt~t*********t****~*****t********

~ 1~88 Mentor Graphics Corporation ~ 26 - 1333299 Jun 3 15:25 1988 path_context.source Page 2 .. . .... ................. .. ... . ... . . . . ......... ...... . .... .. . . .................
/~ . . .... ............. . .. .. . .. .. .. . .. . .. . . . . . .. . ....... .. .. .. . .
// Declaration of class Pcarea // . . . ................ .................. .... ...... . .... .... . .. . . .. .... .. ...................... ........................
c_ass Status;
c_ass Qpcmd;. .................... . ..... .. ..............................
c ass Pcsheet llst;
c_ass ecsheet ........... ............... ... ...... . ............ . .. .....
c ass Wcpath scanner;
class Dlypat = scanner;.. ..... ........ ... . ..... . ... ..... ...... .... ..... ...
class Lngtable;
class Pcnet;..... ....................................... .. ... . . . .... .
class Pcinst;
class Ciinst; ... .......... ... .......... . . .
class Pcarea : public Hilite_qparea l // This is the definition of a Path Context area. Pcarea's are constructed // in response to a command from ~e. The constructor takes a Path_ref // Ind builds and draws the Pcarea from that.
friend class Undo_pc_config;
. . .
private: // data Heap ......... ....... .. . ~heap_p; . // the heap this one is made in Heap 'hilite_heap_p;// heap where Hilite_grobjs go G~i_image. . . ..... ~picture; ...... .// The picture in.this window .............. .
Pcsheet_list ~sheets; // list of sheets in this path Qp_ slack_t.......... . .. .slack_type_d;. // QP_ INVALID_SiACK if this is a dlypath .
Point origin; // baseline (horiz and vert~ for the . ... ............................... ........... ...... // path context. ................................ .
coord top_d; // coordinate of top of graphics + text cvord ........................ ..... bot_d; ...... ........ // coordinate of bottom coord uplabel_base; // baseline of labels above the path .. ................. .............. .. // (All text is above this) coord downlabel base;// baseline of labels below the path .. .... ............................................ .... // (All text below this) ............. . ...........
eoolean locked; // picture is locked GROB~ . ... ........ prolog_sheet_title_grobj; . ........................ .. .
GR03J prolog_inst_title_grobj;
GROB~ ..... .. prolog_net_stub grobj;
Pc_config_data config_d; 7/ win;-iow configuration data static ......... . Point stubll0]; // Some space to use for creating // polylines . ... . .. .
public: // functions ,// ____________ // Storage management of Pcareas.
// When Pcarea's are constructed they create a window and the picture to // put in them, draw the path context, and are prepared for selection and // hiliting in themselves. They are a high1evel class, and as SUCII are // not passed around by copy, are not assigne;i, and are not initialized // from another.Pcarea. Hence the construct by copy, and assignment // constructors are not provided.
.... .. .. . . .. . . . . . . .. .. ...
Pcarea()i . // This constructor creates Pcareas, including drdwing the area on the . ..
/~ screen. After this constructor exits the are.l is available for the // user. The constructor depencis upon thcr.! Leing ~xactly one path // selected! Strange goings on will llap~ell it z~ro or more than one ...... // are selected...... It.is the responsibility of th~ ~c (who crcates these . .
// things) to ensure this.

~ 1988 Mentor Graphics Corporation ~ 27 - 1333299 .. . . ... . .. .......... . . . .. ... ..... .. . .. ... .
Jun 3 15:25 1988 path_context.source Page 3 // . ...... ........ . ...... . .. .. . .
// Note that this constructor can take a long time if the schematic files ..... // have to be read before the picture can be drawn. Also, since the // schematics may have to be read there may be Status error messages . .... // reported.. .in the process.of running the constructor. However, a // picture will always be drawn with whatever information is available, ........ /~ whether... all sheets could be read ar not.
..... . .. .. ......................... ........... . .. ..... ... .
Pcarea()-. // ~he destructor for Pcarea deletes the window and the picture // as well as the internal data structures.
---------- DATA INQUIRY------------------------------------Gss_image ~grapic_image(). ..... .. ..
~ return picture;l .............. .. ............................................ . Heap ~heap() .. ~ return... heap_p;)........... ...... ..........
Boolean wc().. . ................ ...
/~ Is this a worst case path context or a delay path context?
~ return slack_type_d != QP _ INYALID_SLAC~;~
Point path_origin() .. ..............
~ return origin;]
coord top() ( return top_d;~... . .
.coord bottom()........ .. .............. .....
~return bot_d;l coord top label baseline(j // Returns the baseline for the top labels. All label text is above this // line.
( return uplabel_base;~. . . .
coord bottom label baseline(~
/~ Returns the baseline for the bottom labels. All laLels on the bottom // are below this point.
~ return downlabel_base;]
.. .. . . .. .. . . .. . . . . ..
coord sheet label baseline();
// Returns the baseline for the sheet labels.
coord inst_label baseline()~. ..
// Returns the baseline for the inst labels.
// The following functions are functions instead ot constants so I can // accamodate.drawing mare than one path on a page, or having corlfigurability // of these things in the future.

.. .. . . .. . . ........
coord label separator ht();
..... // Returns.. the separatian between twa labels.
... Point cur_path origin();......... .
// Returns the current path origin .. . .. .. . . .. . . .. ... ...... . .. . . . . .
coord desired_exit( 0 1988 Mentor Graphics Corporation .. ............ ..... .. ... ....... ..... ... .. . . . . . ......... .. . ............................... .....
Jun 3 15:25 l9B8 path_context.source Page 4 Pcsheet....... ...~sheet..................... . .......... ............ .....
);
-// Returns the preferred y coordinate of the entry point of this sheet.... ....
Pc_config_data... 6config(~..................... . . ........ .... .. .... ... .
1 return config_d;}
.... .... ..... . . .. .............. . .. .. . . .. .. . . . .. . .. .. ...... .. . . ..... . .
Qp _ slack_t slack_type(~
ret~rn slAck_ type_d;l............. ..... ... . . ...... .......... . .. ........
--... ... ................... . ...... DATA INSERTION--------- ............ -------.--void lnsert inst_into_hash( Ciinst .... ~ciinst,....................................... ...........................................
Pcinst ~inst . ~; ....... ....................... .. . .....................
void insert net_into_hash(.................. . ~ . ..... .. .. . .
Net_ref &nref, Pcnet ..... .......... ~net... . ..... . . ................ ..
)i // These two..functions insert nets and instances into the hashtable that ......
// correlates instances and nets to their grapllical display objects in // this area....... ...... .....
// . ................ .... CAUSING THINGS TO HAPPEN-------- .
void application_cmd( const Qpcmd . . ~cmd.................... ....
)i // This function is.called.(by Fe or Qp_ui) to execute a command that // belongs to the Pcarea void rebuild_path_context();
// Rebuild .the.picture af the path context.
// The current picture is deleted and rebuilt. This is not simply a // redraw(~....... ..................... .
Point build_prolag(................ ....... ...
Point entry )i . ....... . .. ..... ...... ..
// Builds the graphics for the first segment of the path context. This ... // is mostly..the label.titles.and a stub net to get things going.
// 'entry' is the location at which the prolog segment should route its // 'net'.(if any) from.. It returns the point at which tlle adjoining // segment should route from. 'entry' is trivial today (i.e. the // path_origin()), but.may become more in~ere~ting in tlle future.
//---------- . ---GRAPHICS FUNCTIONS---------------------------------void lock();
void unlock();....
// While the lock is set the area will not be updated on the display // (to prevent flashing, etc) unless a del~ug tunction specifies otllcrwise // The following hilite/unhilite functions overload t.he base class in ordcr // to be able to lock() and unlock() the picture du~ g eacll type of // item that is being hilited. The actual hilite is still periormed by the // base class void hilite(...... ... ... ..
Ciinst ~inst ,. ); ........ .
// Hilite the given instance, if it is in this area. This function is ~ 1988 Mentor Graphics Corporation 133329~

. . . . . . .. .. . .. . . . ...... . .
Jun 3 15:25 1988 path context.source Page 5 ... .. . . .. .. . . . . . .. ... . . . .. .. .
... // provlded.since there..is not an Inst_ref for non-primitive instances. ...........
.. void hilite(.......... .......................... ~............................. . ........ . .... .
Inst ref ~inst ); ............... .... . .
// Hilite the given lnstance, if it is in this area.
void hiiite( .. ......... ... ............
....... Net r~f ~n~t . ...................... . . . . . ............ ..
. //.Hilite.the.given..net,. if it is in this area.
void unhilite(................... ... .. . ...
Ciinst ~inst ); - - ........................ .... . ...
// Unhilite the given instance, if it is in this area. This function is ...// provided..since there..ls not an Inst_ref for non-primitive instances.. . ...
void unhilite(......... ... .......... . `
Inst ref ~inst ); . .......................... .
// Unhilite the given instance, if it is in this area.
... ......... .... . . . . . .. .... . . . . . . .
void unhilite( Net_ref. ..... ~net................ ..... . ...... ........
);
// Unhilite.the.given net.,.......... .if it is in this area. ..... ..... . .. .
void unhilite_all(.... ..... ..... .. . .. . . . .
Selmgr type type // unhilite every hilited thing in this area.
.. . .... . ..
GROBJ build_sheet_separator( coord ............. ...... x_location, // height is known by the pcarea. ..
Pc_sheet_sep type type ); ......... ...... ... . .
// Draws the sheet separator and returns a grobj for it.
.
GROBJ copy cache grobj( GROBJ ...... cache grobj, Boolean flip, // Should it be flipped on the vertical axis?
Point ........... . lac,.. .. . // origin point point for tl)e grobj Inst_ref iref, // Inst_ret wllose selection .. . // will ca~se this grobj to hilite short to level = PC_INST_SYI~OL Ll:'~EL /~ wha~ picture level?
// Copies an object from the instance grobj cache to this Pcarea. Returns // the identifier for it.

GROBJ copy_cache_grobj(........ ... .
GROBJ cache_grobj, Boolean..... flip,...... ....// Should it be flipped on the vertical axis?
Point loc, // origin point point for tlle grobj Ciinst...... ~ciinst.... =.NULL,// Ciinst~ wllose selection // will cause this grobj to hilite short . .... .to_level.. .=. PC_I~ST_SYMBOL_LE~EL // what picLure level?
// ~opiesan.object.from.the instance grobj caclle to this Pcarea. Returns // the identifier for it.

0 1988 Mentor Graphics Corporation - 30 ~ 13~32~

.. . . .. .. .. . .... ... . . ..
.. ..... .. .............. ..... ................... ...... ..
Jun 3 15:25 1988 path_context.source Page o ........... . .. ............. ..... .... ..
.... . . .. ............. ..................................... . .. .. .......... ................. ..............
GROBJ build_polyline( .. Point..... pointsl]~........ // Array of points .. ... . . ..... .
int npoints, // number of points in the above array.
Net_ref........... nref ............ // Net which, when selected, will hilite ..
// this. !valid() means none.
~; ............... ...................... . . . . .
// Makes a polyline qrobj, drawing a line from each point to the next.
..... ... . .. . .. ....... ... ........... . . .................. .. ... . . . . . . ....
GROBJ build_text( coord ........... . ............. baseline, . // baseline of the text. . . ............. . .... .. .
coord x_loc, // x locaeion of the text.
const char . . ........... t tr, // string to make the text out of .
const Pc_text_info 6info // drawing parameters l; .. . . . ............................................. .. ............
// Draws the text at the indicated location, and associates it with a // hilitable.object that hilites when the given Net_ref is selected............... . ... ...... .....
GROB~ build_text(.............. . ........................... . ............ .............................
coord baseline, // baseline of the text.
coord....................... x_loc, // x location of the text. ........ . .............
const char ~str, // strlng tO make the text out of const Pc_text info. . . .&info, // drawing parameters . .....
Net_ref nref // Hilite when this net is selected . .... . ............... .. // if !valid~) then none . ........
// Draws.... the.. text at.the.indicated location . ................ . . . ....... . ..........
GROBJ build_sheet_label~............ .. .. . . . . ....
coord x loc, // x location of sheet separator for this .. ... ...................... :....... .... . . // sheet . . ........................................ . ... ...
const char tfilename, const char.. ~sheetname .. .. .
const char tinstpname // full instance pathname Boolean ..... .. ri~ht_justify = FALSE // Justify labels to right // (for prolog) /j Draws the sheet label object as indicated for this Pcarea.
GROBJ build_inst iabel( coord . x_center, // x center of the instance const char tinstname, // leafnamc- of the instance Boolean .... ....... .. . right_justify = FALSE // If this is true then it will be // right justified (for the prolog) ); .......... . ....... ... .
// Draws the instance label as indicated for tl)is Pcarea.

Point text_ext( const char ... tstr, // string to make the text out of const Pc_text_info ~info // drawing parameters // Returns the extent of the text. (Point is upper left, lower right is 0 .// Note.the.alignment is ignored Point sheet_labels.ext(....... ... . . ..........
const char tfilename, const char. .. .. ~sheetname, const char tinstpname // full instance pathname , ) . ............ .. . .
/j Returns the extent of the sheet label.

~ 1988 Mentor Graphics Corporation .... ... . ....... ... .................... .. . . . . ..... . .. .................
Jun 3 15:25 1988 path_context.source Page 7 . . . .. . . . . . . . . . .. . .
Point inst_labels_ext( const.char... ~.. ....... ~instname. // leafname of the instance. ............................ .....................
);
.// Returns... the.extent.of.the..... inst.. label.......... . . . ........ .... . ... ..................
Rectangle... grobj_ext~ ............. .............. . . . . ..................... ..................
GROBJ object ... ); ....... ............................................................. ....... ............................ ...................
Rectangle cache_grobj ext( GROBJ.... ......ohject ........... ..... . . . ...... ........................... ...... ..............
);
.... Rectangle.grobj_ext_abs~................................. ....... .... .......................................................................
GROBJ object /j The preceeding three functions all return extent information about a grobj.
// The first.two...return..info.in.relative terms, i.e. grobj origin is at 0,0 ...............
// Tlle third one returns the absolute extent in the picture ... .. ... .. . .. . .. . . . . . . . . . . .
//--------- DUMP, ETC. FUNCTIONS---------------------void du~p(............ ..... . . ............................. . . . . ............ ............ .
const char ~const name_p = NULL, // pointer to object name const int ......... . tabs = O, // nesting level ostream 60ut = cout // output stream ); - . ..
// dump internal data representation // = === =================== ..
private: // functions void select_point_cmd( . .
const Qpcmd 6cmd ); .......................... . ... . . ..
// Internal handling of this command.
~; .... ........ .
8endif . . ... ....... .........
HEADER ..... ..... . ... ....
pcsheet.h - Declare class Pcsheet . . .. ......................... .............. .
COPYRIGHT
Copyright ~C~ 88 Mentor Graphics Corporation DESCRIPTION
This is the class that manages and builds the sheet segment of a ~ Quickpath path conte~t window.
oifndef INCLUDED_PCSHEET
Idefine INCLUDED_PCSHEET .
Kifndef INCLUDED_STREAMH.. ....
~include <stream.h>
lendif . . ..
Iifndef INCLUDED_GEOM . . ..
~include <geom.h> .
Iendif .......................................
Iifndef INCLUDED_OP~ASE............ ........ .
~include <qpbase.h>

~ 19&8 Mentor Graphics Corporation - 32 ~ 1333299 Jun 3 15:25 1988 path_context.source Page 8 ~endif .............. ... :..... ............................. . . . . . ............... . .... . .
~ifndef INCLUDED_~F~ ......... ...... ..... ................................
include <refs.h>
~endif .............. . ...................... ......... . . . . . ............. .....................
~ifndef INCLUDED..... OP SLIST...................... ...... . . ... . .... ....... .........................
~include <qp slist.h>
~endif ................... ........... . ....... . ... ... ................ .....
Iifndef.INCLUDED_STRIN~ ........................ ... ........... ................
~include <string.h>
~endif . ................. .................... .. . . ... ..
~iindef INCLUDED PCAREA CONSTS . . . ..
Yinclude <pcarea_consts.h>
~endif ................... ... ..... .. . .
// ~*~I**~*~*~*******************************~******~**~t~*********************
// ~
// ~ .. ................... ......... Class Pcsheet sizes . .......... ................
/ / _ // t~*~ ***~***~*~*****~*~***~ **~*~ **~ ***~****~*****~*~* .....

// ... .. . .. . ... .... . . . .... . . . . . ......... .
,// Declaration of class Pcsheet sizes / / . ............ ........ . .. . . .. .. .. .... .. ..................
class Pcsheet sizes 1 // This class is basically.a struct that accesse~ by functions so I can . .............
// control computing the information as requested ratller than necessarily // all at once... This would be a performance enhancement if ever done. . ........
//
// The extents .in.this.class.that are.relative to 0,0 are returned as Points................
// and those that of Rectangles are relative to O,baseline are returned as // Rectangles.. ....................... . ........................... . . . . .
private: // data.......... . ...... . . . ................................................... ..
Rectangle graphics ext d; // Extent of the graphics of this sheet, O,O
..... ... ...... ..... ... ... // is x=0, y=baseline Point sheet labels ext d; // Extent of the sheet labels for this sheet Point ... inst_labels ext d;... // Maximum extent of the several instance // labels for this sheet public: j/ functions // The following functions return references so they can be lvalues . . .
Rectangle &graphics ext(~
// Note that this extent includes both the Pcseg grobj extents plus the // hierarchical symbol grobj extent. The x;0) coordinate is always zero.
1 return graphics ext d;]
Point ~sheet_labels ext() . .
1 return sheet labels ext d;]

Point &inst labels ext() 1 return inst_labels ext_d;]
. void dump( ......... .... .. . . . . ........ ..
const char *const name p = NULL, // pointer to object name ... const int............ tabs = 0, // nesting level ostream &out = cOue // output stream ~ 1988 Mentor Graphics Corporation _ 33 _ 13332~

. . . .............. .... ..... ... . . . .. ................................
Jun 3 15:25 1988 path context.source Page 9 // dump intërnal data representation // ~ .... . ....................... Class Pcsheet . . . . . ......
~ t~ t~ t~tttttttttttttttttt / / ..... . . .. . .. ... . .. . . . . . .
// Declaration of class Pcsheet / / . = ............... .. . ... .. . .... . . .. ..
class Pcnet;
class Pcinst; ............................ . . . .
class Pcarea;
class Pcsheet_list;.... ..... . .
class Cihier-class Detail_scanner;.. /~.declared in detail.h . ...... ...... . . .
class Pcseg;
class Pcseg_list;...... ........... . .. .
class Pcseg_scanner;
.... ................... ............... . . .
class Pcsheet ~
-// ecsheets manage the.sheet segments of a path context. A sheet segment - // is the space between two sheet separators. A~Pcsheet contains a Pcseg_list// that contains..one or more Pcinst~Pcnet pairs plus an entering Pcnet.
//
// Pcsheets are.responsible for constructing their Pcseg_list, including // the Pcnets/Pcinsts on it, for computing and returning the extent of the // sheet segment.(in isolation, the actual extent may be bigger so it // lines up with the tallest sheet segment in he path context)~ and for // building.the.graphics.for the sheet segment.
private: // data.. . ..
Pcarea ~area_p; // parent Pcarea String . .......... sheetname,. // of tlle sheet this is Cihier ~parent_inst; // Cihier this is a sheet of Pcseg_list.... .......... tsegs; . // list of nets/insts on this sheet Pcseg_scanner tseg-scani // Scanner that points to the current ...... . ...... . . // Pcseg being built Pc_sheet_sep_type type; // type of heirarchical sheet this is Pcsheet_sizes ..... sizes_d;........... // the size info.
coord left_x; // left e~ge of this sheet. This is not .. . // valid until the sheet has been built, // not just ext().
coord . . ..... segs_bottom; // bottom y of Lhe segments on the sheet GROeJ sheet_sep_grobj; // sheet separator object G~oe~ . .. sheet_labe;_grobj;// sheet labels grob;
GROBJ symbol_grob~; // for the syllii;ol ~or my parent GfiOB~ . ...... e~it_stub; // grob; for tlle net that completes the // width Ot the slleet if the segments ....... ~/ on lt are too short.
~static Point stubllOl; // Some space to use for creating . .. . .... .. . ...... // polylines public: //.functions.
// _ ______________ // Storage management of Pcsheets.
// Pcsheets are not created as automatic variables, are never assigned, ~ 1988 Mentor Graphics Corporation _ 34 _ 1 33329~

.. .............. ... ................... ......... . . . . ...................... ....... ....
Jun 3 15:25 1988 path context.source Page 10 copied or arrayed... They are.freely created and destroyed, and care .. ... .. ..
is taken that all secon~ry store is created on the parent's heap.
Pcsheet( ... ............................
Pcarea.......... ~parent.area,..... .... . . . ..... ................ .............
Detail_scanner &detail_scan ); . . ......... . ..... ..............
// Create this Pcsheet.
// The scanner is expected to point at the input pin of the first instance ........ ......
// on this sheet. (Note that this implies the tirst pin of every path // should be an input pin; e.g. the source clk def or the source clock ............ .
// pin or the dest clock def.
// On exit from this routine the scanner is lett pointing at the first // pin.that.is nat on this sheet, or !valid~) if this one consumed them ........... .......
// all.
.. . . .. .... . .. . . . ......... . . . . . . .... . . .. . ...
Pcsheet();
// The destructor for Pcsheet deletes secondary store. It does not // delete graphical objects, since it is assullled tllat the picture will ~/ disappear when the Pcsheet does. !!This assumption needs to be // checked when moved under Ogre.
---- DATA INQUIRY------------ ----coord desired_exit( . ......... ...
Pcseg ~seg ); . . .
// Returns the prefered y value for the cxit point of the Pcseg indicatcd.
// If the seg is NULL then it is the desire of thc first Pcseg in the // list, otherwise it is tlle desire of tl)e Pcscg tllat follows the indicatcd // Pcseg. (Note that as currently designed, 4/2~/~8, Pcnets have no // preferences and Pcinst's have absolute preLe~etlces. This may be // changed, however, so I declared the input paramcter a Pcseg instead of // a Pcnet.
coord desired_ëntry(j;
// Returns y value of the desired point of exit of the previous sheet.
Pcsheet_sizes &sizes();......
// Returns the graphical extents of various things in this sheet.
......... ... . .
coord width() // Returns the width of this sheet ..
Cihier ~parent(~ .
// Returns the parent instance of tllis Sh-?.'t .
~ return parent_inst;l Net_ref input_net();
// Returns the input net to this sheet, or !valid~) if the first /~ segment on this sheet is an instance.
Boolean select(. ... ..
coord x, coord . ........ y .. ......
)i . // Selects the object at x,y (in picture coorditl~ltes) if these coordinates // should cause selection. Return TRIJE if a) S~lll.?tllin9 was selected, // or b) x,y.is in this sheet but nothing should Le s-?lecteù thcre.

1988 Mentor Graphics Corporation _ 35 _ 133329~

.. . .. . .. ............... . .............. . . . .. .. . ... .Jun 3 15:25 1988 path_context.source Page 11 // . ....... ... ............... DATA INSERTION-- . .... .
void clear_graphics();
// Set all.the GROBJ's.in this Pcsheet to QP _ NULL_GROBJ, including . ........ ....
// those in the Pcnet/Pcinst's below. Also clears the cached widths ....... // of.. each.of.. the..... segments.. .. . ..... ..... .............................
// . ............... CAUSING THINGS TO HAPPEN---------------- . . . .................. ...
Point build_seg( Point . entry ....... ............. ..... .. . . . . .
// i3uilds the graphics. for.this sheet segment. .................... . .
// entry is the location of the endpoint ot the previous segment, which // is where this one should start. Tl-e exit point of this segmcnt is // returned (which is used as the entry poin~ Lor he next segment).
// Note that the exit is ~eaningless for the last sheet segment since // the path terminates there.
//----- DUMP, ETC. FUNCTIONS----------------- -----void dump(. ... .... . . ..
const char *const name_p = NULL, // pointer to object name const int... .... tabs =.~, // nesting level ostream &out = cout // output stream // dump internal data representation ]; .................. .
t**********t****~***********t*t***********************~****-******~*~*~***~
~/ * *
/~ * . ........... .Classes ecsheet list and Pcshee~ scanner *
// * . *
/~ **~^************************~******~**^^^^*^*~^~*^^*-*~*****~*******~**~****
//_ __ _ _ ___________________________ _______ _______ // Declaration of class Pcsheet list // = .. . .. .. . ....
class Pcsheet .... .
// declared in /project/qpath/src/qpath.hm/loop.l class Pcsheet_list : public Qp_siist [
.. ... . . . . .
// singly linked list of Pcsheet * items // This class.is derived from the Qp slist protocol class. It providés // type checking of arguments and type conversion~ ~f return values // for the convenience of its clients.
friend class. .Pcsheet_scanner;.
/~ = -- _ _ ____________________________________ public: // functions ............ .....
Pc~heet_list().. []... ........................ .
// Allocated on misc heap; base class initializes data.
Pcsheet_list(Heap *heap_p~i.......................
void operator=(Pcsheet list .&src). ....
1 Qp-slist::operator=(src); ]
..... . . ............ .... ...... ...... . ........... ...................... ....
void clear()i ~ 1988 Mentor Graphics ~orporation 1~3329~

Jun 3 15:25 1988 path context.source Page 12 . // Clears the list and deletes the.Pcsheet's on it. ........ . . . . .................................. ....
Pcsheet scanner.. ~new item scanner~) . . . .. . . .... .... ......
[ return (Pcsheet scanner ~) Qp_slist::new item_scanner(); ~
... . . . .. . .. . . .. . .. ... . . .. . . . .. . . . .. . . . . .. .. . . .. . . . .. .. . . . . ... . . . . .. ... .
void add-item(pcsheet ~item_p) .. ~ Qp_slist::add item(item p); ~ . . ... ........
void.append item(Pcsheet ~new item, Pcsheet_scanner ~loc_p = NULL);
void insert item(Pcsheet ~new item, Pcsheet_scanner ~loc p = NULL);
void append list(Pcsheet_list.&saurce, Pcsheet_scanrler *loc p = NULL); ......
void insert-list(pcsheet-list &saurce, Pcsheet scanner ~loc_p = NULL);
Pcsheet ~remave-item(pcsheet-scanner ~loc_p); ... .. .. ... ..
void operatort=(Pcsheet_list 6src) . ........ . . ..... .
1 Qp slist::operator+=(src); ]
.... . .............. . . .
int find(Pcsheet ~item) 1 return(Qp_slist::findtitem)); ~ ... . . .. .
Pcsheet ~&operatorl~int i) . . . . ............ . . . .. .....
- ~ return((Pcsheet ~&) Qp slist::operatorl](i));
Pcsheet ~first() [ return((Pcsheet.~).Qp slist::first()); 1 . ..... ......... ......
Pcsheet ~last().. .... . .. . . . ....... .
[ return((Pcsheet ~) Qp slist::last()); 1 l; . .......... ...
~ / . .. .... .. .. . .. ... . .
,~/ Declaration of class Pcsheet scanner ~ / .. . . ... ,, , . ,,, ., . _ _ _ _ _ _ _ _ _ _ _ _ ~-lass Pcsheet scanner : public Op slist scanner [
/~ scanner for singly linked list o~ Pcsheet ~ items // This class is derived from the Qp slis~_scanllcr protocol class. It // pravides.type checking of arguments and ~y~)e cunversions of re~urn // values for the convenience of its clien~s.
. .
friend class Pcsheet list;

public: // functions Pcsheet_scanner(j [1 // Allscated an misc heap; base class initializcs data. ..
Pcsheet_scanner(Pcsheet list &list, Heap ~heap p = NIILL);
// Allscated on misc heap; base class initializes data.
Pcsheet_scanner(const Pcsheet_scanner ~src) : (src) [1 // Allacated on misc heap; base class initializes data.
Pcsheet scanner(Heap ~heap_p);
Pcsheet scanner(const ~oolean run loops) // automatically attach to one of the two Pcsheet lists in Results 1988 Mentor Graphics Corporation 13332~9 ... ............. . .. .. ............. ... . .. . .. .. .
Jun 3 15:25 1988 path_context.source Paqe 13 // Attach to run list.if arg is TRUE, trace list otherwise. . . . ............. .......
void attach(Pcsheet_list.6scan_list) ~ Qp_slist_scanner::attach(scan_list~; ]
void attach(Pcsheet_list ~scan_list p) .. . ( Qp_slist_scanner::attach~scan_list_p~, ~ . ... ... .. .... ......... . .
Pcsheet ~&curr_item~ .......... . . . . . . ... .
1 return((Pcsheet ~6) Qp_slist_scanner::curr_item~; ]
. ...... . . . . . .. . . . . .... ... . . . . . . . . . . . . .
Boolean find(Pcsheet ~item~
. [.return(Qp_slist_s~Ann~r :find(item~); ] . ... ... . ...... ............
~;
.... .. . .. .. ......... . .. ... ... .. . .. . . .. . . .
~/ Definition.of.. class ecsheet_list inline functions . .. ..... . .
/ / _ _ _ _ _ _ _ _ _ _ '/ These inline functions are defined here rather than with the function // declarations because they.depend on the Pcsheet_scanner declaration.
inline void Pcsheet_list::append_item~Pcsheet ~new item, Pcsheet_scanner ~loc_p~ 1 Qp_slist::append_item~new_item, loc_p~; 1 inline void Pcsheet list::insert item~Pcsheet ~new_item, Pcsheet scanner ~loc p~ ~ Qp_slist::insert_item(new_item, loc p~; I
inline void Pcsheet_list::append_list~Pcsheet_list ~source, Pcslleet_scanner ~loc_p~
1 Qp slist::append_list~source, loc_p~; ]
inline void Pcsheet_list::insert_list(Pcsheet_list ~;o~lrce, Pcsheet_scanner ~loc_p~
[ Qp_slist::insert_list~source, loc_p~; ]
inline Pcsheet..~Pcsheet_list::remove_item~Pcsheet_scanner ~loc p) ~ return~Pcsheet ~ Qp_slist::remove_item~loc p~
... ......... ...... ....... . .
endif .......
HEADER
pcseg.h - Declare class Pcseg, Pcnet, Pcin_t COPYRIGHT ..... ........ ..
Copyright (C) 1988 Mentor Graphics Corporation DESCRIPTION
This is the class that manages and builds each net./instance segment for a sheet segment in the Quickpath path contex~ win~ow.
~/ .. . ... .. ... .

#ifndef INCLUDED_PCSEG
~define INCLUDED_PCSEG
~ifndef INCLUDED_GEOM
include.<geom h~.................... .... ........
~endif .. ........ .... . ... ........................... ... ... .. . .Hifndef INCLUDED QPBASE
Rinclude <qpbase.h~.... .........................................
~endif lg88 Mentor Graphics Corporation - 38 ~ 133329~

........ . . ... ... .. . .. .. .. . .. . .. . .
Jun 3 15:25 1988 path context.source Page 14 .. .. . . ............. ...... ............ . . . . .. ... . .. .. . .. .
ifndef INCLUDED_REFS
include <refs.h>.... .... ..... ..... ... . . ...
~endif ~ifndef INCLUDED_STRING
~include <string.h>.. ................ .... .. .. ... . .. ..
endif ~ifndef INCLUDED_QP_SLIST
~include <qp_slist.h> ............ . .. . ...... .. .
~endif ~ifndef INCLUDED_PCAREA_CONSTS
~include ~pcarea_consts.h~ . .. .
~endif ifndef INCLUDED_HILITABLE
~include <hilitable.h> . ......... .. . .... . ...... .. .
Nendif ./ ~ . ..... ..... . *
// * Class Pcseg /~ * ....... . ... . . . ~ ...
// ****************************************~**~*****~*****~*~*****~***********
// -- _______ _________ // Declaration of class Pcseg ..
// ____________________ ïlass pcdrea; ~ // declared in pcarea.1 class Pcsheet; // declared in pcsheet.h class Detail_scanner;.. // declared in detail.1 class Pcseg : public ~1ilitable ( // Pcsegs manage the individual segments of d pdth context. They know how // to layout ~eir awn segment of the paLh Co11tXt h~w to return its // extent and how to recognize selection and do hiliting.
protccted: // data Pcarea ............. *area_p; // parent Pcarea Pcsheet *sheet p; // parent Pcsheet Pin_re .... ... ....... ipin;. ............ // the input pin to this scgment Pin_ref opin; // the output pin from this seqment coord . left_Y; // left x coord of this seg. Not valid // until the e~ e11t ha~ becn built .... .......... . // (not atter .ext()) coord width; // width of thi~ seg. ~ot valid until .......... ................ .. // ext~) is called. -l if not valid.
GRO~J the_grobj; // grobj of the graphics public: j/ functions // . . . . _____________ ~// Storage management of Pcsegs.
.// Pcsegs are.not.created..as.automatic variables are neYer assigned // copied or arrayed. They are freely created and destroyed and care // is taken that all secondary store is creaLed on the parenL's h~ap.
// No instances of Pcseg are created they on1y exist in the form of // derived objects...Since.there is no secondlry store for a Pc-eg (we // are making the assumption that the graphicdl objects are ~eleted at 0 1988 Mentor Graphics Corporation 133329~
- 3g -...... .. . . .. ... ... .
Jun 3 15:25 1988 path context.source Page 15 // tlle same time the Pcseg is~ no ~estructor is defined.
Pcseg( Pcarea ~parent area, Pcsheet .. ~parent sheet, Detail scanner 6scan_point // Create this Pcseg. It assumes that 'this' has been allocated by its // derived class.
//--- --DATA INQUIRY------------------ ---virtual coord desired_entry()i // Returns the prefered y value for tlle exit point of the Pcseg prior // to this one. This is the point thdt will make tlle "prettiest"
// path conteYt, but may not be the actual exit of the preYious Pcseg.
// The function returns MIN_INT if no entry is expected (wllich serves // as a flag that there is no net to be drawn to this point virtual Rectangle e~t();
// Returns the extent of the graphics of this segment above and below // tlle x a~is. The ~0) is always 0.
virtual Paint inst_labels-ext() // Returns the extent of the instance labels, it any. Lower left corner // of the e~tent is assumed to be zero.
virtual Loolean select( coord x, coord y // 'elects the object at x,y (in pic~ure C~Ldin~es) iL ~hese cu~rdinaLes // should cause selection. Return TRU~ it a) :~~mething wa5 se1ected, // or ~) ~,y is in this segment but nothinq .;h.~ ld Le sclected there.
// Not implemented in the ~ase class virt~al Net_ref input_net();
// returns the input net to this segmcnt. !-:a1id() if there i5 not // an input net virtual Net_ref output_net();
// returns the output net to this segment. !valid() if there is not // an output net ~/------- ------------DATA INSERTION--------------------------------- virtual void clear_graphics(~;
// Set all the GROBJ's in this Pcseg to OP _NULI, GROBJ
//------------------------CAUSING THINGS TO HAPPEN-------------------------------virtual Point build_seg( Point entry ); .. . .
// Builds the grapllics for this segment.
// entry is the location of the endpoint ot the previous segment, whicl~
// is where this one should start. The exit poin~ of this segment is /~ returned ~which is used as the entry point for the ne~t segment~.
,//------------ --DUMP, ETC. FUNCTIONS---------------------------------virtual void dump( const char ~const name p = NULL, // pointer to object name const int tabs = O, // nesting le-el 1988 Mentor Graphics Corporation 13~323~

Jun 3 15:25 1988 path_context.source Page 16 ostream........... &out = cout // output stream ..
// dump internal data representation // t ~ * ~ * ~ t ~ t * ~ * ~ t ~
// ~ . . . . .............. ................. . ~ .// ~ Clas-s Pcnet // ~ ........ .. . ~
.. . . . . .. . . . . .. .. . . .
// --------------______________ /~ Declaration of.class Pcnet....
// ________________________ class Ciinsti..... ~ Declared... in ciinst.h . .. ......
class Pcnet : public Pcseg ~.... ........................................ . .. ..
// Pcnets manage the net segments of a path context. They know how // to layout their own segment of the path contcxt, llOW to return its . .....
// extent, and how to recognize selection and do hiliting.
. .
protected: // data Net_ref net ........................................................................ ..
Boolean inciude_text; // Says whe~her or not text should be drawn String . ....... ... . text;. //.Text on the net (otller than the name .. . . .
- GR~BJ text grobj;
G~BJ . nan,~_grobj;
publlc. // functions /,' Storage management of Pcnets is the same as Pcsegs, except that it has // the responsibility of allocating the space.
Pcnet( Pcarea . . .. *parent_area, Pcslleet ~parent_sheet, Detail_scanner &scan_point, .... .. . ...
Boolean include text = TRUE // Draw delay text string on this net?
); . .. .. . .
// Create this Pcnet.
//----------- DATA INQUIRY------------------------------------coord desired_entry();..........
// Keturns the prefered y value for the exlt point of the Pcinst prior // to this one. This simply calls thc de_iLCd_eXi~( ~ function of i~s // parent sheet, since a Pcnet has no pre~ererlce ahout its entry other // than to keep the net straight.
Rectangle ext();
// Returns the extent of the graphics of this segment above and below /,' the x axis. The x(O) is always 0. For a net thc x-axis is assumcd to // be the midpoint of the y dimension, thou~31l this is not true in reality.
// This function should perhaps take an entry in thc future, but at this // point it seems unnecessary since tlle y-ex~ent of the net is not . // going to.be greater.than the extent of the instances on each side of // it.
.
Net_ref input_net();
// returns.the input net to this segn~nt. Since this is a net segment this // will always be returned valid(~

lg88 Mentor Graphics Corporation 13~3299 - 41 ~

.... . ... . ... .. .. .
Jun 3 15:25 1988 path_context.source Page 17 .. .. .. . . . ................ . . ... . . . . . . Net ref output-net();
// returns the output net to this segment. Since tllis is a net segment this . ..
// will always be returned valid(~
.. . . .. ... . .. ... . . . .. ..... . .. . . .. . . .. . . . . . . . . .. . .. .. .. . ...........
Boolean select( .... .... coord...... x,....... ............. . . .. ......... ..... ...
coord y .. ..... ); ......................................... . . . . ............ .
// Selects the net if x,y is in this segment and should cause selection.
.. // Returns TRUE if a) net was selected, . ..
// or b) x,y is in this segment but nothing should be selected there.
.. . .. ....... . . ... .. ... . .. ..... ....... .. .. .. . . ................. . . . . . . .. .. .. . ..
//--- -------CAUSING THINGS TO HAPPEN------------------------------Point build_seg(.... .. .. ........ .
Point entry ~; . . .
// Builds the graphics for ~his segment.
// entry is the location of the endpoint of the previous segment, whict // is where tllis one should start. Tlle exi- point of tllis segment is /~ reLurned (which is used as the entry point for ~he next segment).
void clear_graphics();. ........ .... .. ....
,~/-------------------------DUMP.,.ETC.. FUNCTIONS----------------------- . -- .
void dump( const char *const name_p..=..NULL,.. // pointer to object name.
const int tabs = O, // nesting level ostream . . &out.= cout // output stream );
// dump internal data.representation.. . .....

// **~************************************t********~**~***********************
~ / . . .... . . .. ... . .
// * Class Pcinst // . . . ...... . .. .. . . . .
// ****************************************************************************
//_______________________ // Declaration of class Pcinst. .
//___ _______________ class Pcinst : public Pcseg ~
// Pcinsts manage the instance segments of a path context. l'hey know how // to layout their own segment of tlle path context, how to return its // extent, and how to recognize selection and do hiliting.
protected: // data Ciinst *inst String ... . arrival_ti~le_texL;
String setup_time_text;
GROBJ . ... . .... laLels_grobj; // grob; ol ~ laLel GRGBJ entry_stub; // gr~bj of enterinq net GROBJ ..... ............ exit_stub; // grobj o~ exiting net GROBJ setup_time_grobj; // grobj ot setup time, if any -GROB~ . . clk_ar_time_grobj; // grob; of arrivdl time, if any struct loc_stuff 1 .... Rectangle....... extent;. . // relative ~o y Lasellne, entry.x ..
Point in_pin_loc;

1988 Mentor Graphics Corporation 133329~
- 42 ~

...... . .
.Jun 3 15:25 19~8 path context.source Page 18 Poi~t . ........ out_pin_loc;
coor~ in_pin_channel y; // y location ol input pin routing cl)annel coord .......... out_pin_channel_y; /~ y location of output pin routing channel Point origin;
... Boolean......... flipped;...... // The symbol should be flipped . ................... ..
// when it is displayed Loolean ..... camputed;....... // information i valid locs; // information about location of symbol in seg, . . ...... ..... ........ .. // relative to xmidpoint, ybaseline.public: . // functions. ............. . . .
// __________________ // Storage management ~f Pcinsts is the same as Pcsegs except they must // allocate space from the parent area's heap.
Pcinst( - -.. ..
Pcarea.......... ~parent_area,.............. . . .... .............. ..... ...... ........
Pcsheet tparent_sheet, Ge~ail_scanner ~scan_paint );
// Create this Pcinst...... ..
,//------------------- . . ...... . DATA INQUIRY---------------------------- . ...... ....
coord desired entry()- ~
// ~cturns the prefered.y value for the exit poin~ o tl~e Pcinst priar ...
// to this one. This is the point that will make the "prettiest"
// path context, but may not be the actual exit of the previous Pcnet. ..
// l'he function returns MIN_INT if no entry is expected (which serves // as a flag that there is no net to be dr~wn to tllis point Rectan~le ext(); .. . ..
// Returns the extent of the graphics of this segment above and helow // the x a~is. The x(0~ is always 0. . . ... .. .
Point inst labels-extent() // Returns the extent of the instdnce ldbe1s, if dny. Lower left corner // of the extent is assumed ta be zero.
Point inst-labels-ext();
/~ Returns the extent of the instance labels, if any. Lower left corner // of the extent i5 assumed ta be zero.
Net_ref input_net(); . . .
// returns the input net to this segment. !valid() if there is not // an input... net ............................................. . .
Net ref output_net(); .. . .
7/ returns the output net to this segment. !va1id() if there is not // an output net . ..... ... .
~oolean select(.. ...... .......................................... . . . .
coord x, coord . ...... ...y ............................................ . ............

);
. // Selects.an object (net or instance) if x,y is in this segment and should .....
// cause selection. Returns TRUE if a) sollle~llin~ Wd~ selected, // or b) x,y is in this segment but nothin~ should be selected th~re. ....
//--------- ------------DATA INSERTION------------------------ --------void clear_graphics();

~ 1988 Mentor Graphics Corporation 133329~

- 43 ~

.Jun 3 15:25 1988 path contëxt;source Page l9 // Set all.the GROBJ's.in this Pcinst to QP _~ULL_GRo W . . ..
------ ... . CAUSING THINGS TO HAPPEN------------------------------Point build_seg( Point . entry. . .. ..
); .
// Builds the graphics for this segment. ...
// entry is the location of the endpoint of the previous segment, which // is where this one should start.. The exit point of this segment is // returned (which is used as the entry point for the next se9ment)~
//--------- DUMP, ETC. FUNCTIO~S-----------------void dump( ........... ...... .
const char *const name_p = NULL, // pointer to object name const int ......... ..tabs.. = .0, .. ...... // nesting level . ...... . ...... .
ostream &out = cout // output stream ); . ............... . . .... . . .. ..
// dump internal data representation ); . .... ................ . . . . .
// ************t***t*~*****~********************t********************~*****~**
// *
// * Classes Pcseg_list and Pcseg_scanner *
// *
.~ * * *****************************~********t~***************************
...... ... -- -- -- -- -- -- -- _ _ _ _ _ _ _ _ _ _ _ _ _ _ // Declaration of class Pcseg list __ ______ ____________ class Pcseg; .. ..
// declared in /project/qpath/src/qpath.hm/loop.l class Pcseg_list : public Qp_slist ~
// singly linked Iist of Pcseg * items // This class is derived from the Qp_slist protocol class. It provides // type checking of arguments and type conversions of return values // for the convenience of its clients.
friend class ...Pcseg_scanner;
-- _ ___________________ !Jublic: // functions Pcseg_list() ~]
// Allocated on misc heap; base class ini~idli_es dlta.
Pcseg_11st(l~eap *I-eap_p);

void o~erator=(Pcseg_list &src) ( Qp-slist::operator=(src); 1 void clear();
// Clears the.list and deletes the Pcseg's on it.
Pcseg_scanner *new_item_scanner() ~ return (Pcseg_scanner *) Qp_slist::new itenl__canner(); ) .

void add_item(Pcseg *item-p) ~ 1988 Mentor Graphics Corporation - 4 4 ~

Jun 3 15:25 1988 path_context.source Page 20 ~ Qp slist::add_item~item_p~; ]
void append_item(Pcseg.tnew_item, Pcseg_scanner ~loc p = NULL~;
void insert_item(Pcseg..*new_item,..Pcseg_scdnner ~luc_p = NULL~;
void append_list(Pcseg_list.&source, Pcseg_scanner ~loc_p = NULL~;
void insert_list(Pcseg_list &source, Pcseg_scanner *loc_p = NULL~;
Pcseg *remove_item(Pcseg_scanner *loc_p~; .
void operatort=(Pcseg_11st &src~ . .
[ ~p_slist::operator~=(src); ) int find(Pcseg *item) ~ return(Qp_slist::find(item~
Pcseg *&operatorl](int i~
1 return((Pcseg t&~ Qp_slist::operator[](i)); 1 Pcseg ~first() ~ reeurn((Pcseg t~ Qp_slist::first(~; ] . . . .
Pcseg *last(~ . . ... . .... . . . . . .
1 return((Pcseg *~ Qp_slist::last(~; ]
]; . .............. ............ . . .. ............................
~________ _ ____ _ _____________________ __ _ _ __ __ // Declaration of class Pcseg_scanner ~ / . . _ -- _ _ _ _ _ _ _ _ class Pcseg_scanner... pu~lic Qp_slist_scanner 1 . . . ..
// scanner for.singly linked list of Pcseg * items // This class is derived from the Qp_slist scanner protocol class. It // provides type checkinq of arguments and type conversions of return // values for the convenience of its clients.
friend class Pcseg_list;
// __ ______________ public: // functions Pcseg scanner(~ (J
// Allocated on misc heap; base class ini~ zes da~d~
Pcseg_scanner(Pcseg_list 61ist, Heap ~heap p = NULL);
~ Allocated on misc heap; base class initializes da~a.
Pcseg_scanner(const Pcseg_scanner bsrc) : (src) I]
// Allocated on misc heap; base class initializes data.
Pcseg_scanner(Heap *heap_p);
... . ... . . . . .... . . . .
.void attach(Pcseg_list 6scan_list~
Qp_slist_scanner::attach(scan_list~; ) . void attach(Pcseg_list *scan_list_p~
[ Qp_slist_scanner::attach(*scan_list_p);
.. . .. . . .... .

Pcseg t6curr_item(~

~ 1988 Mentor Graphics Corporation ~ 4 5 ~ ~ 2 9 ~

.. . .. .. .. ....... .. .. .. ...... . .. . .
Jun 3 15:25 1988 path_context.source Page 21 1 return((Pcseg ~l Qp-slist-scanner::curr-i~em()); ) Boolean find(Pcseg ~item) ..
1 returntQp slist_scanner::find(item~)i ]
~;. .
/ ~ . .. . .. .... .. . .............................. . .
// Definition of class Pcseg_list inline functions / /
// These inline functions are defined here rather tllan with the function // declarations because they depend on the Pcseg_scanner declaration.
inline void Pcseg_list::append_item(Pcseg ~new_item, Pcseg_scanner ~loc_p) [ Qp_slist::append_item(new_item, loc_p); ~
inline void Pcseg_list::insert_item(Pcseg ~new_item, Pcseg_scanner ~loc_p) [ Qp_slist::insert_item(new_item, loc_p)i ~
inline void Pcseg list::append_list(Pcseg_list ~source, Pcseg_scanner ~loc_p) ~ Qp_slist::append_list(source, loc_p), ~
inline void Pcseg_list::insert_list(Pcscg_list ~source, Pcseg_scanner ~loc_p) [ Qp_slist::insert_list(source, loc_p); ~
inline Pcseg ~Pcseg list::remove item(Pcseg_scanner ~loc_p) ~ return((Pcseg ~) Qp_slist::remove_item(loc_p))i Rendif .. ........... ............
~ MODULE
- pcarea.c - Definition of class Pcarea COPYRIGHT
Copyright (C~ 198B Mentor Graphics Corporation DESCRIPTION
This is the file that manages the creation and drawing of path context areas.
~/ , , .
~ifndef INCLUDED_PCAREA
Rincludc <pcarea.h>
Rendif Rifndef INCLUDED_STATUS
Rinclude <status.h>
Rendi f Rifndef INCLUDED_STRINL
~include <string.h>
Rendif - -ciflldef INCLUDED_GEOM
~include <geom.h>
Rendif ~i~ndef INCLUDED_YlHI
Rinclude <vlhi.h>

~ 19&8 Mentor Graphics Corporation ~ 46 _ 1 33329~

.Jun 3 15:25 1988 path context.source Page 22 cendif ..... .
~ifndef INCLUDED QPCMD
Ninclude <qpcmd.h>
~endif ifndef INCLUDED_C~T_INFO
~include <ckt info.h>
~endif .
~ifndef INCLUDED_FE_ENV
~include <fe_env.h>
Hendif ~itndef INCLUDED CMDS
~include <S(qpath.cmd).h>
~endif ~ifndef INCLUDED_PCAREA_ERRS
~include <$(fe err).h>
~endif ~ifndef INCLUDED_PCSHEET
~include <pcsheet.h>
~endif ~ifndef INCLUDED_PCAREA_CONSTS
~include <pcarea consts.h>
~endif ~ifndef INCLUDED_PATH
~include <path.h>
cendif ~ifndef INCLUDED_GENHEAe linclude <genheap.h>
~endif ~ifndef INCLUDED_LNGTABLE
~include <lngtable.h>
llendif .......... ...........
~ifndef INCLUDED_BE_TABLES
~include <be_tables.h>
~endif ~ifndef INCLUDED_Yl ~include <vl.h>
~endif tifndef INCLllDED_MBASE
~include <mbase.h>
hendiL
~ifndef INCLUDED_SELMGR
~include <selmgr.h>
lendif ~ifndef INCLUDED HILITABLE
~include <hilitable.h>

1988 Mentor Graphics Corporation ~ 47 - 1 ~ 332 ~ 9 .
.Jun 3 15:25 1988 path context.source Page 23 ~endif . .. . ..
~ifndef INCLUDED DE~AIL... ... . ..
~include <detail.h>
Icndif ....................... ... . . . . ...... ...... .
iifndef INCLUDED_WC_DETAIL . .
Iinclude <wc_detail.h>
lendif. .................. . . ..... . .. . . .
~ifndef INCLUDED_FE....... .... . . . ...... ...... ... .
~include <fe.h>
lenlif .. . .
Iifndef INCLIJDED SLACK . .
Iinclude <slack.h>
~endif .. ....... . .. ....... . . . . . .
//
// ~ Class Hilite_grob;
//
// ~ 11 11 '~ '1 1 1 ~ t ~ 1 lt lr 1/ t '~ t t 11 11 11 ~ 11 ~ tl ~ 11 11 tl tl 11 tr ~ ' 1 ~ 11 t~ t~ lt 11 ~ * A ~ 'tl ~ * ~ ~ 11 * 1~ 1 A 1~ 11 ~ t( tl 11 ~ t // ______________ /~ Declaration of class Hilite grobj /~ _---- _----_------__--___________________ ___________ class Hilite_grobj.: public ~ilita~le [ . ................................. . .
// This class supports hiliting of a GSS grobj.
private: // data Pcarea .... . ~area p-G~OBJ the_grobj; // grobj that will be hilited /// oid . ....... ............ .. ~lilitcd_handle; // hal-dle thdt Gss reLurn Boolean hilited;
.. ..
public: // functions Hilite grobj~. . ..
G~OBJ the_grobj, Pcarea . ....... ~arca,.
Heap ~heap_p // heap from whicil tO allocate );
G~OBJ grobj() ~ return the grobj;~
G~s image ~955_ima9e~
( return area_p->graphic_image(),~
void llilite();
void unhilite();
void dump( const clar ~const name_p = NULL, // pointer to object name consL int . .... ...tabs = 0, // nestin~ level ostream ~out = cout// OUt~ilt stream ----_____________ //.Implementation..o.class Hilite grobj // _-- ___ _________ O lg88 Mentor Graphics Corporation 13~29~

... . . . . . ... . . ..
,Jun 3 15:25 1988 path_context.source Page 24 Hilite_qrobj::Hilite_grobj( GROBJ the_grobj, Pcarea ~area, Heap ~heap_p .. .. .......................... . . ...... ............... .. .. . . . ... . ..... .... ...... . .. .. ..............
this == Ithis) ? this : (Hilite_grobj ~ heap_p->allocate(sizeqf(Hilite_grobj)~;
area_p = area;
Hilite_grobj::the_grob; = the_grobj;
hilited = FALSE;
//Hilite_grobj:: Hilite_grobj() //////set picture(picture);
//////if (hilited) ////// highlight object(hilited_handle, the grobj);
~oid Hilite_grobj::hilite() if (!hilited) I ~ don't do it again...
set picture(area_p->graphic_image());
// highlight object(hilited_handle, the_grobj);
- set_override(the_grobj, line_color, short(QP_COLOR_SELECT));
set_override(the_grobj, te~t_colar, sllort(QP_COLOR_SELECT));
hilited = TRUE;
]] '''' ' , ~ ' ' . .
~oid Hilite_grobj::unhilite() if (hilitedj ~ /jonly do this if we are already hilited.
sct_picture(area_p->graphic_image())i // highlight object(hilited_handle, the_(3rob~);
set-oyerride(the-9robi~ line_color, nil) set_overridc(the_grob;, text_color, nil) hilited = tALSE;
]

]
~oid Hilite-grobi::dump( const char ~const namc_p, // pointer to object namc const int tabs, // nesting lcvcl ostream &out // output s~ream // dump internai data representation start_dump("Hilite_c3rob;", this, name_p, tab~, out);
indent_dump(tabs, out) (< "\tarea_p = " dump ptr(area p) "; grobj = " the_grob;
<( (hilitcd ? "; IIILITED" ~ OT l!ILITED") "\n";
end-dump(tabs, out)i // ~
~/ ~ Class Undo_pc_con~ig ~/ ~

~ 1988 Mentor Graphics Corporation 13~3299 - 49 ~

.Jun 3 15:25 1988 path_context.source Page 25 ................................................ .. .
// ttttttt~tttt~ttttttttttt~tttttttttttttt~t~ t-~ttttt*tt~t~tttt~tt ~ / . -- -- -- -- -- _ _ _ _ =
// Declaration of class Undo pc_config / ~ . ......... .. . . . . . .. ...
class Undo pc_config : public Undostate [
// This class encapsulates the state data required to undo a config change ....... .
private: // data..
Pc_config data the_config;
Pcarea . ... tmyarea;. . . // This is a handle for me to reset the state public: // functions. .............................................. ..
// __ _______________ IJndo_pc config( Pc_cc)nfig_data 6the_01d_config, Pcarea ........... ...~myarea, . ... ....
Heap ~heap_p = NULL
~; . .
// Construct a new Undo_pc_config .. . . . . . . ... . . .. . . . .. . . .
// _ ___ ___________ :oid undo(~; .
// This is the handler that is called in response to an undo(~ of the // base_qparea.
// _ ___________________________ voi-3 re(lo(~
// Tllis i9 the hanùlcr that i5 called in rc_pon_e to an redo(~ of the // base qparea. Since complete state in~ormation is maintained this is // simply a call to undo() 1 undo();]
// ___-- _______________________________ boolean dead(~ . .
// Since the state in this Undostate is vali;3 so long as the area is open // it will never be dead(~..
l return FALSE;]
// ___ _____________________ virtual void dump( const char' const name p = NULL, // pointer to object name const int tabs = O, // ne~-till~ 1eVe1 ostream &out = cout // output stream ); . .
// This virtual function is called to dump an Undo pc_config. It calls // Undostate::dump(~ and then dumps the Pc confi~ data.

~;
t~t~tt~ttt~tttt~ttttt-~tt~ tt~ t~t~t~tttttt ,// ' . Class Pcarea // ' // t~ ttt~ttttttttt~ttttttttt~ t~ t~
~____ ___ __ _ __ _ ____ ______________________________________ ~/ Implementation of class Pcarea // . . ___-- ____________________ Pcarea::Pcarea() : (PC_WIN_NAME, &(fe_env.fe()), FALSE, O, O. lOOO) // Create the picture and put it in the window.

~ 1988 Mentor Graphics Corporation - ~ - 1333299 ... ..
Jun 3 15:25 1988 path_context.source Page 26 .. . .. . . . .. . . . . ..
heap_p = new Genheap();
hilite_heap_p = new Genheap~1000~, O, heap p~; . .
picture = Qparea::graphic_image();
sheets = ncw.Pcsheet_list(heap p~; - .
origin = cur path origin(); 7/ This will be initialized later, as well top_d.= 0; ..... .............. ... ..... . . . . .. ..
bot_d = O;
uplabel_base.= 0- .. .. .. . . . ..
downlabel base = O;
locked = FALSE;
prolog_sheet_title grobj = QP_ NULL GRO~J;
prolog_inst_title_grobj = Q~'_ NULL_GROBJ;
prolog_net_stub_grobj = QP _NULL_GROBJ;
.. .. . . . ...... . . .... . .. .... . . . . . . . .
// conliguration data config d = fe_env.fe().default_pc_config();
// Now go get the selected paths we are going to make a path context for // ~ne of the following is guaranteed to be true by Fe. The detail() function // returns the detailed path information that is used to generate the // path delay numbers in the display.
. .
Sel_wcpath_scanner selwcscan Sel_dlypath_scanner seldlyscan;
- Detail_scanner detail scan;
if (selwcscan.nitems() == 1) selwcscan++;
detail_scan.attach(selwcscan.curr_item()->detail());
slack_type_d = selwcscan~curr-item()->~lack()~slack-type();
]
else if (seldlyscan~nitems() == 1) seldlyscan++;
detail-scan.attach(seldlyscan~curr-item()->detail());
slack_type d = OP _ INVALID_SL~CK;

else .... . .......... ...
assert(FALSE, "Nothing selected to view path context on~
// Next we scan the path and make a Pcsheet for cach slleet in it.
// Note that we insert the sheets on the list in re~erse since the path is // in reverse order from destina-ion to source. Alsc. note tl-at he call // to the Pcsheet constructor advances the scanner (wllich i5 W)ly the // wllile loop does not.
++detail_scan; // point at the first pin in the detail.
while ~detail_scan.valid()) sheets->insert item(new Pcsheet(this, d~-tail-scan)~ NULL);
// Now we build the sheet and show it in the window.
rebuild_path_context();
] ....
-area:: Pcarea() // Delete the data structures in addition t. th-' WilldOW it.elf ... ... . .. ..
delete sheets; // Which deletes the Pcsheels in it.
.
~ ote the hash tables are all in the heap p -o tllcy are deleted by-the // delete of the.heap.. Also,.any Hilite_grobjs are in hilite_heap p which // will also be deleted by this.

~ 1988 Mentor Graphics Corporation 1~332g~

Jun 3 15:25 i988 path context.source Page 27 delete heap_p;.......................... ....
... ............. .. ... .. ........... . . . . . . .. . .. .. . .... ....... ... .. .... .............
coord ecarea::sheet_label_baseline() . . . . . ........... .... ..
// Returns the baseline for the sheet labels.
............... ..... .. .. ............. .... .. . ............ .... . ...... ... . . ................. ..........
return ~inst_label_baseline() + inst_labels_ext("dmytext"~.y .. . . ...... + ec_ LALEL SEPARATOR--HT); . .................. .......... .........................
coord Pcarea::inst label_baseline() // Returns the baseline.for the inst labels. . . . ................ ... .. ..
[ return top label_baseline();l coord Pcarea::label_separator_ht() [ return PC LALEL SEPARATOR_HT;l Point Pcarea::cur_path_origin() // This just returns a constant for now (and perhaps forever~
[ leturn PC_ORIGIN;l . ........ .. .. .. . . . . ...... ....... .
coorJ pcdred: :desired exit~ ..... . . . . .
Pcsheet ~sheet // ~eturns the coord of the location that the next Pcsheet would like to see // this one exit at. . . ...... . .......... . . . . .................. .. . ...........
if ~sheet ==.NULL) [..
return sheets->first()->desired_entry()i else [ j/ make a scanner point to this one so we can get the next one Pcsheet_scanner next-sheet(~sheets);
while (++next sheet) if (next_sheet.curr_item() == sheet) break; // Find it.
assert (next slleet.valid()~ "Couldn't find sheet on the sheet list");
// Now we can get the next sheet after this one and find its desired entry if (neYt_sheet++).
return next_sheet.curr item()->desired_entry();
else // Tllis was the lastt one on the list re-urn p:~h orlgln~) y // We ~re ~1l lu ~

'CAUSING THINGS TO ~PPEN' tUNCTIONS
______________________ :oid Pcared::application_cmd(. . .. ....
const Qpcmd 6cmd [ . . .
/~ This is stubbed out for now. More to come!
Status status;
status.set_ok();
long cmd_id = cmd.id(); // This is needed due to a bug in the l.l C++ compiler.
switch (cmd id) [ . . ..... .........
case CMD_ SELECT_POINT: select point cml(c~nd); bredk;
. case CMD_ TEMPLATE_PATH_CONTEXT: [
save_undo state(new Undo_pc_config(con~ig_d, this));

1988 Mentor Graphics Corporation 13~329~

... ... . . . . .. ...... ..
Jun 3 15:25 1988 path_context.source Page 28 config_d = fe_env.fe~.process_pc_config(config_d, cmd);
rebuild_path_context();
break;
default: unknawn_command(cmd_id);

if (status~bad()) fe_env.report(status);
... . . . . . . .. ...
// -- _ ________________ void Pcarea::rebuild path context() Delete and rebuild the picture in the window lock(); // locks the display in tlle picture ~irst delete the sheet and get rid of relerences to objects in it, as well as clearing the hiliting objects.
Pcsheet scanner scan(~sheetsj;
while (+tscan) scan.curr item()->clear grapllics() llilite heap p->clear() clear = ilitables(); // so any existing l~ilite grobjs go away Now make a new picture and put it into the Window~, then deleee the old one Gss image ~oldpicture = picture;
new picture(picture);
i~ (locked) lock display(picture);
set picture-scale(picture~ PC_PIC_SCALE, (short) mm);
if (config().crawl text) set_text mode(short(continuous_scale));
delete_picture(oldpicture);
Scan the sheets and find out the max ht a~ve and below the baseline Note that if this function is challged to change the location of the labels then the draw_sheet_labels and draw inst laL;els functions must change as well.
coor~ up = 0; // contains max grapllics extent up coord down = O; // contains max grapllic~ extent down (this i5 negative) coord upper_labels_ht = O; // heights oL the labels above and below the path coord lower_labels_ht = O;
.. .. . . . . . . . .. . .
scan.reset();
while (++scan) ~ . .. .
Pcsheet_sizes sizes = scan.curr_item( )->si..es( );
up = max(up, sizes.graphics ext().y(l));
down = min(down, sizes.graphics extt).y(O));
upper_labels_ht = max(upper labels_ht, sizes.sileet labels ext().y + sizes.inst labels ex~().y);
.... . ..
// get the height of the upper and lower labels and set the up height and ~// down heigllt. Recall that 'down' is negative.
origin = cur path_origin();
uplabel_base = origin y + up + 2 ~ label separator_llt();
// '2' above is one for inst to sheet labels sp3ce and one for graphics to // text labels space.

1988 Mentor Graphics Corporation ~ 13332g~
- 5_ ............ ... .. .. ..
Jun 3 15:25 1988 path_context.source Page 29 downlabel_base = origin.y t down - label_separator_ht();
top_d = uplabel base ~ upper_labels ht bot_d.= downlabel_base.. -.lower_labels_ht; . . ...... ..
Now build the prolog segment and then draw eacll of the sheet segments.. ....
// First find out where we would like to start.
scan.reset();........... .... . . .................................. . .
scant t -Point. next..seg_enter_point(path_origin().x, scan.curr_item()-)desired_entry()~.;,...........
if (next-se9-enter-point.y != MIN_INT) next,_seg_enter_paint.= build-prolo9(next-se9-en~er-point);
else . next_seg_enter point.= path_origin();
scan.reset( ) . ......
while (+~scan) next_seg_enter_point.= scan.curr_item()-'build_seg(neYt_seg_enter_point);
hilite_all_selections(); .
unlock(~;
) . . . .......... ....... ......... _ _ _ _ _ _ _ _ _ _ _ _ _ Point Pcarea::build_prolog( Point ..... entry. . . .

// Build... the.. prolog segment... . ....
/~ Get the extent of the "sheet label" (actually tlle sheet titles) and // fake it into drawing in the correct place ( tlli3 is actually right justified// whereas the.slleet labels are generally left ~ustiticd.
Point label extent = sheet labcls ext(l~C FI l.EN.~J-lE_1'I'rLE, PC SHEETNAl-lE_q`I'l`LE, PC_lNSTPJlAME_TITLE~ i prolog_sheet title_grobj = build_shect l~l-.el(.~ntry.x - PC_IA~EL SE:PARATOR_WID, PC_ElLENAl-lE 'rlTl,t:, PC SH!:E~"l'NAt1E_TITLt:, PC IN51'PNAtlE 'l'l'l'l.E, TI~IJF:);
l~bel_cxtent = inst_labcls cxt.(PC ItlS'l'tlAt-lE_'I'l'rLE~;
prolog_inst_title grobj = build inst lahel(~ntry~x - PC_l,A~El,_SEPA~A'l'O~_WlD,l'C_IN' TNI~JlE 'l'lTl.E, 'I'I~UE);
// Now ùraw the stub net if the first segmcnt in t.lle first sllect is a // net.
Net_ref entry_net = sheets->first()-)inpuL llCt();
it (entry net.valid()) ~
stub O .x = entry.x - PROLOG _ STUB_LEtl-TIi, stub O .y = entry.y;
stub l .x = entry.x;
~tub 1 .y = entry.y;
prolog_net_stub_grob; = build_polyline~_tub, 2, elltry ne~);
return entry;
. .
/J . ,, ........................ ___--______________________ // GRAPIlICS FUN.TIONS
~/ -- ------____________ /~ Note, these functions have been put into Pcarca so tllat the vl ùcpendcncies // can be isalated.to here. Idcally, these functivns (or si~ilar ones) would ~/ be part of a global library.

1988 Mentor Graphics Corporation 13~3299 ~ 54 -.~un 3 15:25 i988 path context.source Page 30 ... . .. . . . . .
void Pcarea::lock() /~ lock the pic~ure......... ... .
locked = TRUE; . ..
lock display(picture);
] . . ..... . .... ....
:oid Pcarea::unlock() // unlock the picture [

locked = FALSE
unlock_display(picture~; . .
void Pcarea::hilite( Ciinst . ~inst . . ... .. . .
) // Hilite the given instance, if it is in this area. This functian is ..
// provided since there is not an Inst_ref for non-primitive instances.
lock~);
Hilite_qparea::hilite(inst);.
unlock();
] ............ ... . .... ... .. . . . ... .... . ... . . ... ..
~oid Pcarea::hilite( . ...
Inst_ref 6inst /,' Hilite the given instance, if it is in this area.
[
lock();
Hilite qparea::hilite(inst),..
unlock();
] . .. .. .. ...
... .. . .
~oid Pcarea::hilite( Net_ref . ~net. ........
// Hilite the given net, if it is in this area.
lock();
~ilite-qparea::hilite(net);
unlock(); ..
:oid Pcarea::unhilite( Ciinst ~inst // Unhilite the given instance, if it is in tilis area. ~llis function is // provided since there is not an Inst_ref ~or non-primitive instances.
lock();
Hilite_qparea::unhilite(inst);
unlock()i ........... . .
Yoid Pcarea::unhilite( . .
Inst_ref 6inst ~ 1988 Mentor Graphics Corporation _ 55 _ 13332~

.Jun 3 15:25 1988 path context.source Page 31 ....
// Unhilite the given instance, if it is in this ared.
lock();
Hilite qparea::unhilite~inst);....
unlock(); ............. .
void Pcarea::unhilite( ....... .. .
Net_ref &net ) . ........................ ... . .. .
// Unhilite the given net, if it is in this area.
~ .. . ........... . ............. . ... .. . .
lock();
Hilite_qparea:.:unhilite(net);..
unlock();
~oid Pcarea::unhil.ite_all(.............
Selmgr_type type . ................ .. ..... . . .
lock(); ..................... . . . ...... ............
Hilite_qparea::unhilite_all(type);
unlack(~

C,ROBJ Pcarea::build_sheet_separator( coord x_location, Pc_sheet_sep_type . type . . .
// Draw a sheet.separator.
short style;.... . .......
char ~chars;
. switch.(type) [ ............ .. . ............ .. .................
case PC SHEET_UNK:
style..-. solid;. . ....
break;
. case PC.SHEET_UP: ....... .. .. .. .
style = MIN_SHORT; // short dashes;
. ... .... .. chars.. =."~>";............ . . . ~ . .........................................
break;
.. case PC_SHEET_DOWN:........... ... . . .... ... ..... ..............
style = MIN_SHORT; // long_dashes;
.. .. ... .. chars.. =.. " ";.................. . . . . ..... ...................................
break;
.... case PC_SHEET_SAME:........... ....... . ......... ...............................
style = dotted;
break;.............. ......... . ...... . . .... .. .. . .... .. ~.
case PC_SHEET_PROLOG:
style =.solid; ..... . . . .. . .................. ... .. ..............
break;
. defau~t: a.c~ert(FALSE,. "Bad sheet separator type supplied"~;.....................................

]

set picture(picturej;
GROBJ the grobj.= 0; ........................ ... ............... ..............
long dmystatus = 0;

0 1988 ~lentor Graphic~s Corporation ~ 56 - 13332gg ... .. .
.Jun 3 15:25 1988 path_eontext.souree Page 32 .. . .... .. . . . .

....... :......... ...

// Make the grobj.

new obiect~0, 0, PC_SHEET_SEP LEVEL, the grobj);

if ~style != MIN_SHORT) [

set_attribute~line_style, style, dmystatus);

init point~x_location, top~, dmystatus);

terminal point~x_location, bottom(), dmystatlls);

else [

int ehar_eount = ~top() - bottom()) ~ PC SHEET SEP CltAR I~T;

ehar ~sep_string = new eharlehar eountl;

for ~int i = 0; i < char_count; i t= 2) l sep stringli] = charsl0l;

sep_stringli~1] = charsll];

// make the text for the object text_t text;

text.string = NULL;

copy~sep string, ~short) char_count, text.s~ring);

delete sep string;

text.user_index = 0;

text.x = x_loeation;

text.y = bottom();

text.ehar_ht = PC_SHEET_SEP_CIIAR_HT;

text.font = l;

text.mirroring = PASCAL_FALSE;

text.rotation = 90;

text.justification = cl;

text.color - 1;

text~text, dmystatus);

close_object(j;
return the grob~;

.____ ______________________________ ~J Pearea::eopy_eache grobj( GROBJ eache_grobj, eoolean flip, Point loe, Ciinst ~eiinst, short to_level ) // Copy a grobj ~rom eache into this pearca.

assert(eaehe_grobj, "Attempt to copy a NULI. grapllicdl object");

set pieture(picture);

GRvBJ the_grobj = OP _NULL GROBJ;

if (cache grobj != QP _ NULL GROBJ) ~

Gss_image ~pic = fe_env.ckt info().cache pic~ure();

copy move object(cache_grobj, pic, to_level, loc.x, loc.y, the groBj);

if (flip) rotate object~the_grobj, 0, PASCAL_TRUE, PASCAL_FALSE);

. /
~ROL

1988 Mentor Graphics Corporation 1333~9~

.Jun 3 15:25 1988 path_context.source Page 33 .. ........ . . .. ...... . . . . . . .
// Next make the hiliting grobj for this grobj. Note that this thing // is created in a special heap and so will be deleted when that heap /~ is cleared/deleted at destructor time or at clear_graptlics time.
if (ciinst &~ the_grobj != QP _ NULL_GROBJ) add-hilitable(ciinst~ new Hilite_grobj(the_grob;, ttlis, hilite_heap_p));
return the_grobj;
GROBJ Pcarea::copy cache_grobj( GROBJ cache_grobj, Boolean flip, Point loc, Inst ref iref short to_lével // Copy a grobj from cache into this pcarea.
GROBJ the grobj = copy-cache-9robj(cache-9robi~ flip, loc, NULL, to_levelj;
.. . ... . . .. .. .. . . . . ... .... ... ..
// Now make the hiliting grobj for this grobj. Note that this thing // is created in a special heap and so will be deleted when that heap .
// is cleared/deleted at destructor time or at clear_graptlics time.
if (iref.valid(~ ~ the_grabj != QP _ NULL_GROBJ) - add_hilitable(iref, new Hilite_grobj(the_grobj, tllis, llilite-heap-p));
return the_grobj;

// . .. .. . = = . .... .
~ROBJ Pcarea::build_polyline( Point pointsl], int npoints, Net_ref nref // Build a multisegment.line object.
assert(npoints != 0, "Zero length polyline~
Set_pictUre(piCture);
Gt~OB~ the_grobj = 0;
long dmystatus = 0;
// Make the grobj.
new_object(0, 0, PC_NET_LEVEL, the_grobj);
init_point(pointsl0].x, pointsl0].y, dmy_tatus);
for (int i = l; i < npoints; itt~
terminal_point(pointslil.x, pointsli].y, dmystatus);
close_object();
// Now make the hiliting grobj for this grobj. Note that this thing // is created in a special heap and so will be deleted when that heap // is cleared/deleted at destructor time or at clear_grapllics time.
if (nref.valid() ~ the_grobj != QP _NULL G~02J) add-hilitable(nref, new Hilite_grobj(the-grobj~ this, hilite_heap_p));
return the_grabj;

]

~ 1988 Mentor Graphics Corporation - 58 - 133329~

Jun 3 15:25 198B path_contëxt.source Page 34 .ROBJ Pcarea::build te~t( coor~ baseline, coord x_loc, const char ~str, const Pc_text info &info // Build a text object..
if ~!str) return QP _NULL_GROBJ; // don't build if it is an empty string set_picturetpicture);
GROB~T the grobj = 0;
long dmystatus = D;
// First fill up the gss text record short justification;
text_t text;
text.string = NULL;
copy(str, (short) strlen(str~, text.strin~)i text.user_index = 0;
t~xt.x = ~ loc;
text.y = baseline;
text.char ht = info.ht text.font = 1;
text.mirroring = PASCAL FALSE;
text.rotation = 0;
switch ~info.align) ~
case PC BL: justification = bl;
break case PC BR: justification = br;
break;
case PC_TL: justification = tl;
break;
case PC_TR: justification = tr;
break;
case PC BC: justification = bc;
break;
case PC TC: justification = tc;
break;
default: assert(FALSE, "bad text justitication-);
text.justification = justification;
text.color = info.co~or;
ake thc grobj.
new obiect(o~ 0, PC TEXT LEVEL, the grobj);
text(text~ dmystatus);
close obj~ct();
delete text.string;
return the_grobj;

~ROBJ Pcarea::build-text( coord baseline, coord x loc, const char ~str, const Pc text info &info, - Net ref . nref o 1988 Mentor Graphics Corporation 1~332g3 ... . .
Jun 3 15:25 1988 path_context.source Page 35 // ~uild a tè~t object.
GROB~ the grobj = build te~t(baseline, ~_loc, str, info~;
/J Now make the hiliting grobj for this grobj. Note that this thing // is created in a special heap and so will be deleted when that heap // is cleared/deleted at destructor time or at clear_graphics time.
if (nref.valid() 6& the_grobj != QP_ NULL _ GROBJ) add_hilitable(nref, new Hilite-grobj(tl~e-grobi~ this, hilite_heap_p)~i return the_grobj;
... . .. . .. .. ... .. ... ..
~ROBJ Pcarea::build sheet label~
coord x_loc, const char ~filename, const char tsheetname, const cllar ~instpname, ~oolcan right_justify ....
// Bui ld a text object.
set_picture(picture);
GRG~a the_grobj = 0;
long dmystatus = O;
.. .. . . .. . .. . . ..
First fill up the gss text record text_t text;
text.string = NULLi text.x = x_loc ~ ec- LA~3EL-SEPARATOR-WI~;
text.y = sheet label_baseline();
text.char_ht - PC_5l1EET LA~EL_'rEXT_IIT, text.font = l;
text.mirroring = PASCAL_FALSE;
text.rotation = O;
if (right_justify) text.justification = br;
elc text.justification = bl;
text.color = OP_Col,OR PLI~lN I~Exr;
tcxt.eyt = tcxt.cy~ = tcxt.cxl - tcxt.cxr ~.
Make the grobj.
new_object(O, O, PC_'rEX'r_LEYEL, the grobjl;
if (configt).inst-labels~ l copy(instpname, (short~ strlcn(instpllame)~ tex~.string~;
text.user_index = O;
text(text, dmystatus~;
]
// Sl-eetname case conversion, if requested.
String cvtstr;
if (config(~.upcase) [
cvtstr = sheetname;
cvtstr = cvtstr.upper();
sheetname = cvtstr.c_string();
] .
copy(sheetname, (short) strlen(sheetname)~ text.string~;

1988 Mentor Graphics Corporation - 60 ~ 1 3 ~ 3 2 9 9 Jun i 15:25 1988 path_context.source Page 36 text.user index = 1;
text.y += (text.eyt - text.eyb t PC_TEXT_LII~E_SEPARAT~R)i text(text, dmystatus);
Filename case ConYerSiOn, if requested.
if (config().upcase) [
cvtstr = filename;
cvtstr = cvtstr.upper();
filename = cvtstr.c_string();
copy(filename, (short) strlen(filename), tex~.string);
text.user_index = 2;
text.y ~= (text.eyt - text.eyb + PC TEX'r_l,ll~E_S~PAI~A' text(text, dmystatus);
.. . . . . ...
close_object();
delete text;string;
return the_grobj;

~J Pcarea::build_inst label( coord = center, const char . ~instna~e, Boolean right_justify . . .
8uild a text object.
if ~!config().lnst_labeis return QP _NULL_GRO~J;
set_picture(picture);
GROB~ the_grob; = O;
long dmystatus = O;
E'irst fili up the gss text record text_t text;
text.string = NULL;
copy(instname, (short) strlen(instrlallle), ~;x~.str text.user_index = O;
text.x = x_center;
text.y = inst_label_baseline(), text.char_ht - PC INST LAl3EL_'I`t:X'r l!T;
text.font = l;
text.~irroring = PASCAL E~ALSE, t ext . l Ot.clt ion = O
if (right justiLy;
text.justification = br;
~ ex~.justliica~ion - I,c;
tcxt.color = QP_COLOR_PLAIN 1`EXT;
Make the qrobj.
new_object(O, O, PC TEXT_LEVEL, the_grobj), text(text~ dmystatus);
c lose_ object();
. . .
delete text.string;
return the_grobj;

0 1988 Mentor Graphics Corporation ....... . . . . . .. .
Jun 3 15:25 1988 path_context.source Page 37 .. . .. .. .. . ...... .. . . .. . . .
/ / _ _ _ _ _ _ _ _ _ _ Point Pcarea::text_ext(...... .... . . .... .. .. .... ... ....
const char ~str, const Pc_text_info........ 6inf~.... .. . . . . ..... ....
) // This function is.duplicating what Gss does. I know this is bad, but I
// have to do it too many times to justify creating some dummy Gss object // and putting text.into it sa . I can get the extent back. . . .
Point pt;.......... . ... ................... ........ . . ....... .. ..
pt x = info.ht ~ strlen(str); // Forget the blank part of a character at the end pt.y = info.ht.+ (info.ht.t 1)/ 2;.// Secon~ part of expression is.for.the ~P~r~n~r j. return ptj . . .......................... . . . ~ .
Point Pcarea::sheet_labels ext( const char ~filename, ...................... . . . .
const char ~sheetname, const char ~instpname.......... .... ... . ..... .. .. ... . ........ ........... ..
// Returns the.extent of....... the labels . .... . .. ... .... ....... ........ .
int len = strlen(filename); . . ...... ... . ........ . ............ ........
len = max(len, strlen(sheetname));
if (config().inst_labels) . . . ....... . . . ...... ..... .......... .
len = max(len, strlen(instpname));
Point pt;
pt.x = PC_SHEET_LABEL_TEXT_HT ~ len t PC_LABEL_SEPARATOR_WID; . ....
pt.y = (PC_SHEET_LABEL_TEXT_HT t ( PC _SHEET LABEL_TEXT_HT t 1) / 2) ~ 3 ..... + PC_TEXT_LINE_SEPARATOR ~ 2; .... ... . ...... ..................................
return pt;............................
] , Point Pcarea::inst labels ext( con~t char... ~instname ....... ......... .. ... ...... ......... .....

) .. ...... . .... .......... . . . . .. ...... ........... if (config().inst_labels) 1 Pc_text_info infoi . ... . . ........... ............
info.ht = PC INsT-LAsEL TEXT_HT;
return text= xt(instname, info); . .. ... ................................. ..
.else .............. ...... .... . ......... ........... ..................... .
return Point(0,0);

/~ _ _____ _________ _____________ ~ectangle Pcarea::grobj_ext( GROBJ . . object . .
) ... . . ..
set_picture(picture);
. . . .
Point pt-.. .. if (obiect... !.-.. QP _ NULL_GRObJ~ . .....
get_object origin(object, pt.x, pt.y);

1988 Mentor Graphics Corporation 13~32~
~ 62 - J

Jun 3 15:25 1988 path_context;source Page 38 return grobj_ext_abs(object~.moved_by(Point~O,O) - pt);
.. . .. . . . . . .. . .. . .. . ......... . .. . . . . .Rectangle Pcarea::cache_grobj_ext( G~OBJ . object......... ...................... .. .
Gss_image ~pic = fe_env ckt info(j.cache_picture~);
set_picture(pic); .. . .. .
Rectangle ext; . ... . ........................................... .. .. ............
if (object != QP _ NULL_GROBJ) get-obiect-extent(obiect~ ext.x(O), ext.y(O), ext.x(l), ext.y(l));
Point pt;
if (object != QP_ NULL_GROBJ) get_object_oriqin(object, pt.x, pt.y); . . .
return ext.moved_by(Point(O,O) - pt~;
~ectang1e Pcarea::grobj_ext_abs( ~h~b~ object . .... .... ..
) .. .... . .
set_picture(picture);

Rectangle ext;
f (object != OP _NULL_GRO~J) get_object_extent(object, ext.x(O), ext.y(O), ext.x(1), ext.y(l));
return ext;......... .......

............ .. ........ ... .... . .
,// ____________________________________ // ...... . . ...... ...... DUI~P, ETC FUNCTIvlJ~
// _ _________________.. ______________________ Yoid Pcarea::dump(.... . ....... .... .
const char ~const name_p, // pointer ~o uLjecL name const int. . ...... tabs,.... //.nesting level ostream 60ut // output stream .......... . ...... . .. . . .
// dump internal data representation start_dump("Pcarea", this, name_p, tabs, OUt);
Hilite_qparea::dump("", tabs + 1, out);
inùent_dump(tabs, out) "\theap_p = " dulllp_ptr(lleap_p) "; Gss picture.= " dump-ptr(grapllic-image()) "\n";;
if (sheets) sheets->dump("sheets", tabs t 1, out);
indent_dump(tabs, out) "origin = " path_origin~) "i top = " top() ", bottom = " bottom() "\n";
inùent_dump(tabs, out) "uplabcl_bace = " uplabel_bdse . ..
"- downlabel_base = " downlabel_base "; " (locked ? "LOCKED" : "I~OT L~C~EL") "\n";
indent_dump(tabs, out) "prolog sheet_title grob; = " proloq sheet_title_grobj "; proll~g_inst_title grabj = " prulug inst_title grobj "; prolog_net_stub_grobj = " prolog net_stub_grobj ... "~n"; .. . .. ...
indent_dump(tabs, out) "slack_type = " dump_qp_ slack_t(slack_type()) ~< "\n";

~ 1988 Mentor Graphics Corporation - 63 ~ 13~32~

... .. . . .. ........ ... ... . .. .... ........ . . .. .. . . . . ... . .. ..... . . ... ....... .. ... ......
Jun 3 15:25 1988 path_context.source Page 39 end_dump(tdbs~ out);

// . ......... ............................... = ... . ........ ... . ..
// PRIVATE FUNCTIONS
/~ . . .. . . . .. . .. .
void Pcarea::select point_cmd( const Qpcmd 6cmd . . . .. . ... . . ... . . . .... ......
short one_of_n;
cmd.one-of-n(l~ ~one_of_n~i if (one_of_n == 2) return; // notlling on ~ELECT POINT UP
long xl;
lo~q yl;
cmd.integer~l, 6xl);
cmd . intrgert2, &yl);
coord x = xl;
coord y = yl;
if (y C top(~ ~ y ~ bottom~ [ // it is in tlle range of the sheets if (x < path origin(~.x~ [ // select the stub entry net Net ref the_net = sheets->first(~-~input-net();
if (the net.valid()) fe_en~.selmgr().select(the_net);
else [ // try the segments Pcsheet_scanner scan(~sheets);
while (++scan) if (scan.curr_item()->select(x y)) ~reak ] . .... . . . . . ..
]

.................... ..... .. .. .

~/ t . . Class Undo pc cc~rlfig // -- -- ___________________ ~/ Implementation of Class Undo p- c~nfig _______________ ndo_pc con~ig::Undo_pc_config( Pc-cunfig-data ~the old_config, Pcarea tmyarea Heap ~lleap_p ) : (lllyarea->undo time()) // Construct an Undo_pc_config elrment. hedp p = NUI.L => u5c hrap _ misc heap() if (heap_p == NULL) heap p = heap_ misc help()i this = (this == NULI.) ? (undo-pc-config ~) heap p->allocate(sizeof(Undo_pc_config)) : this;
Undo_pc_ronfig::myarea = myarea;
Undo pc config::the config = the_old confi~;

/J ..... . . . .. .......
void Undo_pc_config::undo() 0 lg88 Mentor Graphics Corporation ~ 64 -13~2g~

.. .. ...... . . .. ...... .. . . .. . . . .
Jun 3 15:25 1988 path_context.source Page 40 // Restore myarea to the configuration I contain myarea->config_d = the_config; ...
myarea->rebuild path context();

~ / . ................... . . . , _ _ _ _ _ _ _ _ _ _ _ _ void Undo_pc_config::dump( const char* const name_p,. // pointer to o~ject name ...
const int tabs, // nesting le~el o~tream ........ &out..... ..../~.. output stream .. ...... ... ...........................
// This virtual..functian..is called to dump an Undo_pc_config. It calls . .....................
// Undostate::dump() start_dump("Undo_pc config", this, name_p, tabs, out);
Undostate::dump("",. tabs, out); . . // First dump the underlying mem~ers...................
indent_dump(tabs, out) "\tmyarea = " dump-ptr(myarea) "\n";
tt-e_config.dump("the_config", tabs + 1, out); . .
end_dump(tabs~ out);
: ............. .............. ..... . . . . . .. ........... .
// ***~***************~*1~****
,'/ * *
// * .................... .... .... Class Pc_config_data // * *
~ * ** *******************~ ***~** ~********~*** A ~** **** ********** **** ~*~*~**** ...... ....
~ / = . . ........................................................ .. . ... ... .. ....
// Implementation of class Pc config_data / / . _ _ _ _ _ _ _ _ _ void Pc_config_data::dump( const char* . const name_p, // pointer to object name . ........... ... .. .. ..
const int tabs, // nesting leYel ostream . ...&out. .. /~ output stream ) [ . .
start_dump("Pc_config_data", this, name_p, tlbs, out);
indent-dump(tabs~ out) ,upcase) ? "UPCA5E": "LEAVE CASE ALONE") ..
crawl_text) ? "; DRAW l`EX'r SLOW" : "; NORMAL TEXT" ) ... . inst_la~els) ? "; 511C!W INSTANCE LABEL5" : "; NO INSTANCE
LAB:-;' " ) ((nonuser-net-names) ? "; SYSl'l.M NET NAMES" : "; NO SYSTEM
NET NAMF.S~) .......... ... ((hierarchic~l_sylllBul) ? "; SilOW IIIERARCIIICAL SYMBOL": ", NO Ill~`RARCllICAL SYI-IBOL" ) ~\n~
end_dump(tabs, out);
..... . .. . . . . ... . .
* MODULE
* pcslleet.c - Definition of class Pcsheet * COPYRIGHT
* Copyright (C) 1988 Mentor Grapllics Corpora~ion * DESCRIPTION ..
* This is the file that manages the ereati~n ~n(l ~Irawing of pdtl) context * areas.
.. .. .. . ....... ... ... .. .... . .

~ 1988 Mentor Graphics Corporation ~ 65 - 1~3~299 -Jun 3 15:25 1988 path context.source Page 41 . .
8itndef INCLUDED PCSHEET
~include <pcsheet.h>
8endit 8indef INCLUDED_~LIB ..
~include <mlib.h>
8endif .
8ifndef INCLUDED_STRING
8include <string.h>
hendif ..
8ifndef INCLUDED_GEOM .
8include <geom.h>
8endif Nifndef INCLUDED_REFS
8include <refs.h>
8endif fi ifndef lNCLUDED_FE_ENV
8include <fe_env.h>
Nendif 8ifndef INCLUDED_CIINST
~include <ciinst.h>
8endif ~itndef INCLUDED_SHEET
8include <sheet.h>
8ifndef lNCLUDED_CKT_IUFO
~include <ckt_info.h>
8endif . . .
sifndef INCLUDED_PCAREA .
8include <pcarea.h>
~endif 8ifndef INCLUDED_PCSEG
8include <pcseg.h>
8endif ~ifndef INCLUDED_DETAIL
8include <detail.h>
8endif ~ifndef It;CLUDED_SELt~GR
~include <selmgr.h>
8endiI , . ....
// ****~***************************t********-~*~****~*t****~*~*********~*****

.~/ * t// * : . Class Pcsheet sizts // *~************.************************~**-t~*~*~*************~**********
// .......... , . .. . ... , =
// Implementation of class Pcsheet sizes ~ 1988 Mentor Graphics Corporation 13~2~39 ........ ... . .. . .. ..... . .. . .
Jun 3 15:25 1988 path context.source Page 42 //
.. .. . . .. . ................ .. .
_id Pcsheet_sizes::dump( const char.. ~const name_p,.... ... .// pointer to object name . ........... . . .. .
const int tabs, // nesting level ostream .... .......L~ut....... // output streann . ........... .. . ............. ...
/~ dump.internal.data.representation . ... ... . .. ... ...
start_dump~"Pcsheet_sizes", this, name p, tabs, out);
indent dump~tabs, o~ ) "graphics ext = " graphics_ext d "\n";
indcnt dump~tabs, out) "shcet_labcls ext = " :;hcet labcls cxt_d "\n";
indcnt_dulmE-~tabs, out) "inst_labels_cxt - " inst labels ext d "\n"
end dump(tabs, out~;
]

// ~ . . Class Pcsheet ,// t ~/ *~**~***~****~*~***~*-*~ ******~*********~*~*~**~******~t~ t~*~*
// _ _ ----____ _______________________________________ // Implementation of class Pcsheet / / . _ _ _ _ _ _ _ _ _ _ _ i~csh-eet::Pcsheet( Pcarea .. . ~parent area, // My parent in whose context I do all my graphics Detail scanner 6detail_scan // Location in Lhe scan o~ the path to start .. . ..
// Create the Pcsheet ......... . .. .... .. . . . ........................... .
Initialize all this stuff this = ~this == NULL) ? (Pcsheet ~) parent_area->heap~)->allocate~sizeof(Pcsheet)) : this;.
area p = parent_area;
sheet_sep_grob; = OP _ NULL GRObJ;
sheet_label_grobj = QP _ NULL GROBJ;
symbol grob~ = OP _NULL_GRODJ;
exit stub = QP _NULL_GRO~J;
type = PC SHEET_UNK;
left x = O; // just to initialize it. It is set in build seg~) sizes_d.graphics ext() = Rectanqle~0,0, -1, 0);
sizes_d.sheet_labels_ext~) = Point~O,O);
~izes_~.inst_la~els_ext() = PoinL(0,0);
segs = new Pcseg_list(area p->heap())i seg_scan = ncw Pcseg_scanner~segs, area p->hcap~));
Inst ref prlm inst = detail scan.curr item().pin().parent~);
Clinst ~ciinst = ~fe enY.ckt info().cYt rel(prim ins~)), parent_inst = ciinst->parent(~;
sheetname = ciinst-~sheetname~);
long this_sheet = ciinst->sheet_id();
. .. .... ..
// Now do the setup stuff so we can build the seg list. Since the terminating // (i.e. first.one in the Path) pin can be either an input or output // we need to get this started correctly. Ir the Iirst no~e is a net then // the first pin is an output pin. If it is not the first pin in the path // then we are exiting (remember, tlle pdtll is ~ackward~) an intermediate /~ Pcsheet,.in which case the scanner // is pointing at an output pin of an instance an~ we want to generate its ~ 1988 Mentor Graphics Corporation - 67 ~ 1 3 33 23 ~

Jun 3 15:25 i988 path_oontext.source Page 43 // net first... ....... . .............................................................. ..
Boolean prev_seg was_net = FALSE; // So by default a net is built first if (detail-scan.position~ == 0~ 1 // Tllis is the first Pin OD the path. G.. we stdrt with a Pcnet // or a Pcinst? . ..
if (detail_scan.curr item()~pin()~pin-dir() != FROM) ~ I
// The first (actually it is the last, remember that the path is // in destination to source order) node in the path is a net, so // create the Pcinst that it is attached to I irst prev_seg was net - TRUE; // Thouyh it really doesn't exist.
.. ... .. .... . . . . . .. ..
else t // The first (last) node in the path is an instance, so create the .. ..
// net it drives first prev seg_was_net = FALSE;. // Though it really doesn't exist. .... .................
] . .. . . .. . . . . . . . . ..................... .
Now put the Pcsegs into the segs list. Note that they are inserted at the beginning in order to reverse the order of the Pin_refs in the path, since for this window we wane to thlnk right to left ~source ta destination)..............
Pin ref this_pin = detail_scan.curr_item().pin();
eoolean same sheet = TRUE; . . . .......... ..... ....... ......
do {
this_pin.. =.detail_scan.curr_item().pin(); . .... . ..... . ......... ...
// Check that we are still on the same sheet ciinst = &(fe_env.ckt_info().cvt_ref(this_pin.parent()));
same_sheet = (ciinst->parent() == parent_inst &6 . ... .....
ciinst->sheet_id() == this_sheet);
// Note that even if this_pin is not on the same sheet we stili want to put in // the net that it is connected to. Also note that we cannot have // both !same_sheet and !prev_seg_was_net if (prev-seg-was-net) [
segs-~insert_item(new Pcinst(area p, this, detail_scan), NULL);
prev_seg_was_net = FALS; . . ... . .. .
else t // Note that if !same_sheet then this is just d net stub on this sheet // to put the net name on. In order not to duplicate the text string . . ...
// (delay) on the net pass same_sheet to the constructor to determine // if it should draw Lt-e text or not. : ....
segs-jinsert item(new Pcnet(area p, this, detail_scan, same sheet), NULL);
prev_seg_was_net = TRUE;
if (!same_sheet) break; /~ so we don't increment the scanner again .. ....] while ( t tdetail_scan);
Now, if we ran off the end of the scan we need to create the segment at the end (actually the first se~ment in tlle displayed path) Note that we can only run off the end of the ~can if the last pin was on this sheet.
if (!detail_scan.valid()) I
if (!prev seg_was net) ...... .... .
se9s->insert-item(new Pcnet(area p, this, detail_scan), NULL);
else . . . . .
segs->insert item(neW Pcinst(area_p, this, detail scan), NULL);
............ . . . . . . .. .

~ 1988 Mentor Graphics Corporation Jun 3 15:25 1988 path_ context.source Page 44 // Now figure out how this sheet relates to the previous one (which will // be built next since we are reversing the order. Oh isn't this easy to // understand?.................. ......... .. . ........... . ..... . ..... .... .................. .
. // Note that.at this.point.ciinst is the first (last) .instance of the next . ... ..................
// (previous) sheet.
if (detail_scan.valid()) ~ . . . . . ......................... . ........... . . ........ .............................
if (ciinst->parent() == parent inst) type..- PC S~ET_ S~ME; 7/ Same instance, different sheet.............................................
else if (ciinst->parent()->is_parent(parent_inst)) type = PC_SHEET_D~WN; .....
else if (parent_inst->is_parent(ciinst->parent())) type = PC_SI~EET_UP; . .. .
else // somehow the path tunnelled through the hierarchy, probably by ~/ way of some global net. For now I am going to flag that .. ........................
// as PC_SHEET UNK unless we need some better description of it type = PC_SHEET_UNK; . . . . .............. ...

else . . . .. .. .. . .. . ...................................
type = PC_SHEET_PROLOG; // First sheet in the path context .. .... .. .. ... .. . .. . . . . . .... ...... .. ..
Pcsheet:: Pcsheet()....... .... ......... ..... ... .. . . ...................... .........................................
// Delete the data structures in addition to the window itself [ ......... ..... . . .. . ..... .. . . . .. . . . .. ... ... . .. ..... ................................
delete segs; // Which deletes the segments on it.
delete seg_scan;................... ........................ . . . ..... ............................................................ ...

. .
/~ .. ................. .... .'DATA INQUIRY'. FUNCTIONS . ...... .......................... ............
~ / _ _ _ _ coord Pc~heet::desired_exit(................ .. ....... .. . ..... . ....... . ................. .........
Pcseg ~seg ... . ....... .... . . . . . . . . ... . . . .......... .... ... .
// Returns the entry point that the segment following this one would like // to see............ ... ................................. . ...... .. .....................................
if (seg == NULL) [ . ...... ..... . . .. ...............
return segs->first()->desired_entry();
... .. .... . ..
else ~ // make a scanner point to this one so we can get the next one Pcseg_scanner next seg(~segs, NULL); . ..... ... ........ if (seg_scan->valid() LL seg scall-)curr_item() == seg) ~
// ~rhis is the normal case, the current seg asking for its exit nex~_seg.align_with(~scg scan);
else ~ // Make a scanner ~o finl iL
next seg.reset(); ..
while ~++next_seg) if (next_seg.curr_item~) == seg) break; // Find it. It better be there....
.. .. . .. . ..
// Now we can get the next segment after this one and find its desired entry if (next_seg++) .......................................................................... .
return next_seg.curr_item()->desired_entry();
else // This was the last one on the list . .. . .
return area-p->desired-exit(this); // Return desired entry of next sheet ] . . . .. .. . .. . . . .. . .. .. ... . ...............

1988 Mentor Graphics Corporation - 6 9 ~ 1 ~ 3 3 29 ~

.. . . ..
Jun 3 15:25 1988 path_context.source Page 45 Pcsheet_sizes ~Pcsheet::sizes~) // Returns some graphical size information about this sheet segment // First establish the global sheet stuff sizes_d.sheet-labels-ext(~ = area_p->sheet_labels_ext~parent_inst->file_name~
.c_string(~, sheetname.c-string()~ parent_inst->name());
.... . . . . .. .. . . . . . . . . . . . ..... . ... . . . .
// Now get the extents from the individual Pcsegs and add them togetller sizes_d.inst_labels_ext~) = Point(0,0);
sizes_d.graphics_ext~) = Rectangle(0,0,0,0);
Pcseg_scanner scan(~segs);
while (t+scan) ~
Rectangle seg_ext = scan.curr_item()->ext(); // compute the segment extent sizes_d.graphics_ext().x 1) ~= seg_ext.width();
sizes_d.graphics_ext~).y 0) = min~seg_ext.y~0), sizes_d.graphics_ext().y(0));
sizes_d.graphics_ext().y 1) = max(seg-ext~y(l)~ sizes_d.graphics_ext().y(l)) sizes_d.inst_labels ext(~ = max~scan.curr_item()->inst_labels_ext(), sizes_d.inst_labels_ext());
] . . .. . .. ..... . .. . . .. . . . .................. .. .......
segs_bottom = sizes_d.graphics_ext()~y(0);
// Now add the height of the hierarchical symbol graphics of this sheet, // wllich are currently assumed to be below the paeil context.
Rectangle hier_sym_ext;
if (area_p->confiq().hierarchical_symbol) [
hier_sym_ext = area_p->cache_groLj_ext(parent_inst->caclle_grobj()) sizes_d.grapllics_ext().y(0) = sizes d.qraE~llics ext().y(0 - hicr sym_eY.t.ll ight(~
- PC_Hl~ SYI~B;)l._5~:lARArOR H~r;
// Just in case the path contcxt widtll is sma~ler Lllan the hierarchical sym~ol...
sizes_d.graphics_ext~).x(l) = maxtsizes d.lraplics ext:().x(l), hier_~ym c~t.widtll());
return sizes_d;

________________________ coord Pcslleet::desired_entry() // returns tlle y coordinate desired as the exit of the previous sheet.
Pcseg scanner scan(~segs);
~scan;
assert(scan.valid(), NULL); // make sure some~hing is on segs list.
return scan.curr_item()->desired entry();

// _-------- ___________________________ coord Pcsheet::width() /,' returns the width of this sheet, computing it if necessary if (sizes_d.graphics_ext().x(1) C 0) sizes(); // Which sets the caches for me and my segs assert(sizes_d.graphics_ext().x(l) >= 0, sizes() set invalid width for Pcsheet );
return max(sizes_d.graphics_ext~).width(), sizes d.sheet_labels_ext().x ~ PC LABEL_SEPARA~OR WID);

1988 Mentor Graphics Corporation ~ 70 ~ 13332~

~un 3 15:25 1988 path contëxt.source Page 46 // ___________ Net_ref Pcsheet::input_net() // ~eturns the Net_ref for the input net return segs->first()->input_net();

/ / ........ . . . . .. . .. = . . . . . ... .... .
Boolean Pcsheet::selectt coord . x, coord y .. .......... .. . .. .. . ................
// Select the object at x,y if in this sheet. Returns TRUE if something // s~lected or i x,y is in this sheet but nothing sllould be selected. .. .
if (x < left_Y ¦¦ x ~ left_x + width()J .
return FALSE-else 1 ~/ do something in this sheet if (y > area_p->top_label baseline() ¦¦ y < segs_bottom) // it is in the sheet but outside the range of the segments fe_env.selmgr().select(parent_inst);
elsc [ // it is within the range of the segments, let them decide wllat to select Pcseg_scanner scan(~segs);
while (ttscan) if (scan.curr_item()->select(x, y)) break;
if (!scan.valid(j 6& exit_stub != QP_ NULL_GROBJ) [ // none of the segments liked it, select the // exit stub if there is one Net_ref nref = segs->last()-)output_net();
if (nref.~alid()~
fe_env.selmgr().select(nref);

return TRUE;
. .
]

,/_________________________ // 'DATA INSERTION' FUNCTIONS
~/____________________ Yoid Pcsheet::clear_graphics() // Clear out all graphical information sizes_d.graphics-ext().x(l) = -1;
slleet_sep_grobj - sheet_label_grobj = symbol_grobj = exit_stub = 2P_ NULL_GROBJ;
Pcseg_scanner scan(~segs);
while (ttscan) scan.curr_item~ clear-graphics();
) // 'CAUSING T~INCS TO ~PPEN' FUNCTIONS
// _______________ ~oint Pcslleet::build_seg( Point entry // Build the graphics for the segment.

~ 1988 Mentor Graphics Corporation 13~3299 ... . . . . . . . . .. . . . . .
Jun 3 15:25 1988 path_context.source Page 47 .. . .... ........... . .
/~ A sheet se~nent consists of a sheet separator (and its associated sheet // labels and hierarchical symbol) a stub entry net that connects the // entry to the segment to the first instance of the segment and then a // series of instance/net pairs that represents the stuff on this sheet.
[ .. . .. . . .. .... ... . . .. ... .. . . .... ..................
left x = entry.x; -Sheet separator first.
SLring tmp;. . . . . .
area_p->build-sheet-separator(entry.x type);
const char ~cname = parent-inst-~pathname(~tmp~;
if (!cname ¦¦ cnamel0] == CI~R NULL) cname = PC_ROOT_INSTANCE_N~E;
area p->build_sheet_label(entry~x~ parent inst->~ile_name(~.c_string() sheetname.c-string()~ cname);
Point sheet_entry = entry; .
Now do each of the segments that are in the sheet.
seg scan->reset();
whiIe (t+(~seg_scan)) entry = seg_scan->curr item()->build_seg(entry);
If the segments were not sufficient to cover the width of the sheet add a net segment to cover the rest of the distance. However only do this if the previous segment returned a vdlid exit (i.e. exit.y != MIN_INT) t~te that this will happen if the preYious seg WdS tlle termind~iny ........
instance.
if (((entry.x - sheet-entry.x) < sizes d.sheet_labels exL().x t PC_LA~EL SEPARATOR_WID) ~ 6 (entry.y != MIN INT~) ( // Seg~ wcre too short stub~0] = entry;
entry.x = sheet_entry.x + width(~ + PC I~BEL_SEPARATOR WID;
stubll] = entry; .
exit_stub = area-p-)build-polyline(stub 2 segs->last()->output_net());
]; ................ ........... . .............
The hierarchical symbol. Locate it such that the bottom extent of the symbol is tangent with the bottom extent oi this segment s graphics extent.
if (parent inst->cache qrobj() != QP_ Nlll.L_GROB.J ~ area p->config() .hierarchical_symbol~ ( Rectangle sym_extent = area-p-~cache-9robi-ext(parent-inst->cache grobj(~;
// get the origin offset required to put thc center o~ the syn)bol at x = 0 and // the bottom at y=0 Point sym_origin_offset = Point(-sym cxtent.x(~) / 2 -sym extcnt y(0));
// Where the origin will go in the path contex~ picture.
Point sym_loc((sheet_entry.x + entry.x~ ' 2 ~ sym_origin_oi~et.x area-p->bottom(~ ~ sym_origin_o~tset.y~;

symbol_grobj = area-p->copy-cache-9robj(parcn~-inst->caclle-9rob~
FAL~E sym_loc parent_inst);
- . .
return entry;
... . . . .. ....... .... ............. . . .
~/ _ ______________.
Yoid Pcs~leet::dump( .
const char ~const name_p // pointer to object name ~ 1988 Mentor Graphics Corporation - 72 ~ 1333293 ..... ............ . ....... ........ . . . . .......... ... ... . .. .............................. ......
Jun 3 15:25 1988 path context.source Page 48 const int.. tabs,........... ../~ nesting level . ....... ........... ........................... .
ostream 60ut // output stream .. . .. ... . ... .................. . . . ..... ........ ...................... ............... ... .
// dump internal data representation ......... ... . . ........... ........ .. . . .. .. ... ............................... .....
start_dump("Pcsheet", this, name p, tabs, out) indent_dump(tabs,..out) ~< "Asea_p = " dump_ptr(area_p) ~< "; sheetname.=...".......................
sheetname "; parent_inst = " dump_ptr(parent_inst) "\n";
if (segs !=.NULL) ......... ..... . . . . .......................................... .................................... ..
segs->dump("segs", tabs + 1, out);
indent_dump(tabs, out) C< "sheet type (UNK=O,UP,DOWN,SAME,PROLOG) = "............. ................................. .
type "; sheet_sep_grobj = " sheet_sep grobj "; sheet_label grobj = " sheet_label_grob; . ... .. .........................
"; exit_stub = " exit_stub "\n";
.. sizes-d~dump(~sizes-d~ tabs + l,.out); . . ... ........................ ...............................
end_dump(tabs, out);
] .. . .. . . . . . . .......... .... .. ...... ........ ..
// **************************~*.***~******************************************** .. ............
// *
,'~ ^ .. . .... Classes.Pcsheet_list and Pcslleet_scanrler...... . ..... ................ .. .*.. ..
*
* * * * * * * * * * * * * ... . .... .
~ / . .. .. . .. . . .. . = ...... .......... . .. ..
// Implementation of Pcsheet_list , ~ = = = . ...... .. ...... . .
~csheet_list::Pcsheet_list(Heap *use_heap_p) : (use_heap_p) ........... . .. . .
// create an empty Pcsheet list and initialize it use_heap_p = (use heap_p) ? use_heap_p : heap _ misc_heap() this = ~this.==.NULL) ? (Pcsheet_list *) use_hedp_p-~allocate(sizeof(Pcsheet_list));
this; ...
// remaining initialization done by base class ~oid Pcsheet_list::clear() // delete the Pcsheet's and then the list Pcsheet_scanner scan(*this);
wllile (t~scan) delete scan.curr_item();
Qp-slist::clear()i // .. . ......
// Implementation of Pcsheet_scanner ~/ . ..................... ______________ Pcsheet_scannes::Pcsheet_scanner(Heap *heap_p~ : (heap_p) .. . . .
// create unattached scanner [ . . . . ....... . . .. . . .. . .. ... .. . ... . ...
heap_p = (heap_p) ? heap_p : heap_ misc_heap();
this = (this == NULL) ? (pcsheet-scanner *) heap_p->all~cate(sizeof(Pcsheet _scanner)~:. this;
~/ remaining initialization done by base class ......... ..
Pcsheet_scanner::Pcsheet_scannes(Pcsheet_list 61ist, Heap *heap_p) : (list) . . .. .
// create attached scanner . . .... . ................................. .. ... . . .... . ... ....
heap_p = (heap_p) ? heap_p : heap_ misc_heap();

0 1988 Mentor Graphics Corporation 73 ~ 13.332~9 ... ......................... .... .... .... . .. . .. ... .. . .. . . .. .. ..............
Jun 3 15:25 1988 path_context.source Page 49 .. .. . .. .... ... . . .. . .. ... ... ... . . . . ........... . . . .. . . . .
this = (this~== NULL) ? (Pcsheet_scanner t) lleap p->allocate(sizeof(Pcsheet scanner)): this;
// remaining initialization done by base class t MODULE ........... ........ ... ... .. .. . ... . . . ...... .... ..
t pcseg.c - Definition of class Pcseg t .. . .. . .. .....
t CoPYRIGHT
copyri9ht..... (c).. l988.Mentar Grapllics Corporation ,.... ........... ........................................
t DESCRIPTIaN....... .. .... . . .......................................... . . . ........................... ....... .
t , Tllis is.the..file.that manages the,,creation and drawing of path context................................
t areas t/ , ................................................ ........ .. . .. ....................... ...............
~ifndef.INCLUDED_PCSEG........................... . . ........... .. ..... .............................
~include ~pcseg.h>
~endif. ......... . ................................... ........ ... .... .......... ..........................
~ifndef INCLUDED_GEOM................................. . .
~include <geom.h> - - ----- . - ........... ......
~endif .................. ............................ ... . . ....... .. .
cifndef,INCLUDED-PCSHEET,.............. ....... ... . . ........ ... ...... .. ... ....
~include <pcsheet.h>
~endi ,........................................... ...... .. . . . . . ..... ....... ................................................
~ifndef INCLUDED_PCAREA................ .....
~include <pcarea.h>
~endif . .................. ... .... . . . . . . .... ..... .... ..
~ifndef INCLUDED_PCAREA_CONSTS....................
~include <pcarea_consts.h>
~endif ............ ............ ..................... ... .. .. . . ... ....... ..........
~ifndef INCLUDED_CIINST........... ............. . .
hinclude <ciinst.h>
~endif ............ ......... . .. ........
~i~ndef INCLUDED_FE_ENV . .... ...
~include <fe_env.h>
endif ....................... .... .
~indef INCLUDED_C~T_INEO
~include <ckt info.h>
~endif . ..
~ifndef INCLUDED_SELMGR
~include <selmgr.h>
~endif ~ifndef INCLUDED_DETAIL ....
Hinclude <detail.h>
Hendi~ . .. ... .
// tttttttttttttttttt~ttAtt~ttt~tt~t~tt~ t~tt~-tt~t~tttttttttt // t t // t , ,,,..,,. , .. .. . class Pcseg // t t /t ~ 1988 Mentor Graphics Corporation Jun 3 15:25 1988 path_context.source Page 50 ,~/ Some statics because I can't initialize them hhen a static member. . .. . ..
;tatic const Pc_text info name info = ~ PC GEN~:RI. TExr~lT, Pc BC, QP_COLOR_NET_TEXT ];
:tatic const Pc_tcxt info text_ino = ~ PC GENE~IC TEXT ~iT,Pc_ TC, QP_COLOR_NET_TEXT ]; ..
static Point polntsll0]; // Some space to build line~ in .. ... ..
~/____ _______________ ,'/ Implementation.of class Pcseg . .. .. . .... ...... ..
// ___ __________________ i'cseg::Pcseg( ........... ..
Pcarea tparent_area, Pcsheet . tparent_sheet, . ... ...... ....
Detail_scanner ~scan_point .. . .......
// Create tllls Pcseg. It assumes that 'this' llas bæell allocated by its // deri~ed class. Note that the detail scanner is in reverse order, that is ..... ........
// the output pin is the previous pin and the input pin is the current one.
tl-is = (this == NULL) ? (Pcnet t) parent a~ed->heap()->allocate(sizeof(Pcnet)) : tllis;
area p = parent_area;
slleet p = parent sheet;
// Tl~e scan point should only be !valid() if this sel~mcnt is being built // for the input net to the path. This will happen if the first node in // tlle path is an instance (actually, the 1ast rlode in the scanner). If // there is only one pin in the path then we have to dsk it wllat type it // is. Otherwise the curr-item() is the inp-l~ pin anù the prcv_i~em() is // the output pin. (Remember, thc scan i5 ~ackwards d(-wn thc pa~h~
~scan point.valid() ~6 scan_point.ni~
// single pin path is special case boundary condit:ion DIRECTION pin_dir = scan_point.curr itelll().pin() pin dir();
ipin = (pin dir != FROM) ? scan_point.curr_item().pin() : Pin ref(), opin = (pin_dir == FROM) ? scan point.curr-itelll~).pin() : Pin rcf(), else [
ipin = (scan-point.valid()) ? scan-point curr-item()~pin~) : Pin r~f();
1nt position = (scan_point.valid()) ? s~an point.position() : -l;
opln = (position != O) ? scan_point.prev i~em().pin() : Pin rel();
// Note that prev_itcm() rcturns last-iecm() if invalid scanncr left_x = 0; ~/ just to get it initia1i-c~.
width = -1;
the_grob; = QP _ NULL_GROLJ;

// ____________________ /~ 'DATA INQUIRY' FUNCTlvN~
// _____________ coord Pcseg::desired_entry() - // Returns the desired entry point of this Pc~eg NOT_TO_BE_IMPLEMENTED;
return 0; . ..
. .
Net_ref Pcseg::input_net() NOT TO_BE IMPLEMENTED;
return Net_ref(); .............

~ 1988 Mentor Graphics Corporation 13~329~

Jun 3 15:25 1988 path context.source Paqe 51 .... . . . .. . . .
Net_re~ Pcseg::output_net() NOT TO_BE IMPLEMENTED;
. return Net_ref(~; ............ .. . . .
... ............. . .. ........... .. .. .
// ---- ------_____________ Rectangle Pcseg::ext(). .... ..
// Returns the extent of this Pcseg .. .. . . .. ... ... ........ . .
NOT TO_BE_IMPLEMENTED;
Rectangle shutupi ......
return (shutup)i ... ....
/ / ..... ..... . . .
Point Pcseg::inst_labels_ext() .. .. . . .. . . .. .. . .
return Point(0,0);
Boolean Pcseg;:select(.................... . . . . .....
coord x, coorù .......... y.. .. .. .......... . . ..
// Selects the.object.at.x,y tin picture coor~inates) if these coordinates // should cause selection. Return T~UE if a) sometlling WdS selected, // or b~ x,y is.in this segment but nolhing sl-uuld be selected there. ..
NOT_TO _BE_IMPL~MENTED;
x - y = 0; // shutup the compiler return FALSE;.......... . . .
) .. ..... . . .. ... .. ... .. .... ..
// ---- --_--_________________ '/ .. ....... . . 'DATA INSERTION' FUNGTIONS
// -- -- ------_------------__________________________________ Yoid Pcseg::clear_graphics() // ~lear out all graphical information .
the_grob; = QP _NULL_GROBJ;
width = -1;
]

.. . .
-- -- _ _______ _________ // .. . .. 'CAUSING TIIINGS TO ~PPEN' tUNCTION5 ,// -- -- ------________________________ Point Pcseg::build seg( Point entry // Build the graphics for~ the segment.
NOT_TO_BE_IMPLEt~ENTEDi return entry;.. // to quiet the compiler . . .
..... ... . . .. . .. . . . .. .
// ___________ Yoid Pcseg::dump~...... .. ......................... ....... .. . .... .. .
const char ~const name_p, // pointer to object name ~ 1988 Mentor Graphics Corporation ~ 76 ~ 1~33299 Jun 3 15:25 1988 path_context.source Page 52 const int. ....... tabs, . . // nestin-3 level ostream 60ut // output stredm . .
// dump internal data representation .. ........ . .. .. . .. ... . . . . .
start_dump("Pcseg", this, name_p, tabs, out);
indent_dumpltabs, out) ~< "\tarea_p = " dump-ptr(area-p) ~< "; sheet_p =
dump_ptr(sheet_p) "; the_grobj = " ~he_grobj "; width = "
width "\n";.
ipin.dump~"ipin", tabs ~ l, out);
opin.dump("opin", tabs t l, out~;............................ . .. . .
end dump(tabs, out);
. .. . . . . .. . ...... .. . . .
* ~ t ~ t t t t t t ~ t It ~ t ~ A ~ t ~ t ~ t 1~
JJ ~ . .................. ~lass Pcnet . .... . . .
/J t It ~ ~t~t~ t~t~t~ ~t tt~ t~t tll ~t t~ t~ *~ ~ A ~ tll ~ tt t~ 11t~t ~ ~

~____________ ___ ______ __________________________ __ __ __ // In-plenlentation of class Pcnet / ~ .. . .. . .. . .
Pcnet::Pcnet( Pcarea t parent_area,. .
Pcsheet ~parent_sheet, Detail_scanner 6scan_point, eooleln include_text ) : (parent_area, parent_sheet, scan-point)~ text('", parent_area->heap()) /J Create this Pcnet.
... .. ... ... ...
tl1is = (this == NULL) ? (Pcnet ~) parent_area->heap()->allocate(sizeof(Pcnet)) : this;
net = (ipin~valid(~) ? ipin.net() : opin.net();
Pcnet::include_text = include_text;
double edge_time;
if (scan_point.valid(l) edge_tlme = double(scan point.curr item~).ed3e time().qp_time()) else // This is the first nct on ~he p,~th, and the flrst pln is an input pin // Use its arrival time to display on t1~e ne~.
edge time = dou~le(scan_point.last_item()~ed~e time().~p_time()) text = (lnclude_text) ? form("~.lf", edge_tim.?) : "";
... . . .
cledr_graphics();

_______________ J/ 'DATA INQUIRY' FUN ~r coord Pcnet::desired-entry() /J ~eturns the desired entry point of tl1is Pc11l?t. For nets the desired // entry is the same as the desired exit ot tlu: f~llowing instance.
return sheet-p->desired-exit(tllis);

J __--_______ __________ ~ectangle Pcnet::ext() // Returns the extent of this Pcnct. This is not well implemented at this // point (in the y direction) because I don't know what my entry and exit ~ 1988 Mentor Graphics Corporation - 77 ~ 13~32~

....... . . .
Jun 3 15:25 1988 path_context.source Page 53 are, so I don't. ................
really know the extent of my grapllics. At least or now (if not for always) I will return.the extent of my text and assume the net is .
straight on the x axis. This will probably be ok forever, since the extent.of..at...least.one..instance in tl1e path will probably dominate.. ... .....
This always.recomputes.the extent,.even if the width is vaiid...... .. ......... .. .
Rectangle extent.=.Rectangle(O,O,O,O); . ...................... .... ... ............. .
point textext - Point(O,O); . .... ..............................
Only draw net names if they are user named (or if user wants them all) const char ~nname = net.name(sheet_p->parent()); . ...... ..... ... if ((!(nname 66 nname[O] == 'N' 66 nname[l] == '$')) ¦l area_p->config().nonuser net_names) [ ...
textext = area_p->text_ext(nname, name_info);
textext.x.t=.2 ~ PC_NET_NAME_SEPARATOR_X; . . . ..... ..
textext.y t= PC_NET_NAME_SEPARATOR Y; .. . ........... .........
extent = extent.mbb(textext)i . .
textext = area_p->text_ext(text.c_string(), text_info)i if (textext.x != O) ... .
textext.x ~= 2 ~ PC_NET_NAME SEPARATOR_X;
textext.y = -(textext.y + PC_NE= NAME_SEPARATOR_Y);
extent = extent.mbb(textext);
width = extent.x(l);
return extent; ...... ........... ...........
... . . ..
Net_ref Pcnet::input_net(). .. ..
// Returns the net_ref for the input net to this segment, if there is one.
// since this is.a net segment there must always be ol1e............ . . .. ~ return net;l .. . .. .... .... ... . . .. .... .. .. ..... . . . . .......................... . .. .
1~et ref Pcnet::output_net() 7/ Returns the net_ref for the output net to thic scgment, if there is one.
// since this is a net segment there must alw~ys l~e one...
[ return net;1 ~/ . __ --______ _______ _ _ i3001ean Pcnet::select( coorJ x, coord y // Selects the net if x,y is in this segment and s1loul~ cause selection.
// Returns TRUE if a) net was selected, . .
// or b) x,y is in this segment but nothing should be selected there.
// Select the net in this segment if the point is within the bounding // box of the segment if ( y < area_p->top_label_baseline() 6 y > area-p->~ottom-label-baseline() x > 1~ft_x x < left_x ~ width) [ //~lect it fe_env.selmgr().select(net);
.. . return TRUE; . .....

~ 1988 Mentor Graphics Corporation 13~329~

Jun 3 15:25 198~ path_context.source Page 54 else return FALSE;

~ / . ..... ........ ....... . .. . . . . . . ... ... .
// 'DATA INSERTION' FUNCTJONS
/ / . . . .. . . . . .. . . . .. . .. .
~oid Pcnet::clear_graphics() // Clear out ai1 graphica1 information text_grobj = QP _ NULL_GROBJ;
name grobj = QP NULL_GROBJ;

....... . ... . ..
// 'CAUSING THINGS TO '~APPEN' FUNCTIONS
// ..... .... .
Point Pcnet::build_seg( Point entry // Build the grapllics for the segment. Relllen~er tllat one of the pins // can be !valid().
{ . .. .... . . .. ...... ... ... . . . ..... .... . . .. ....................... ..
left_x = entry.x;
Find out where we will leave this segment Point exit = entry;
if (width ~ 0) ext(); // compute the width if not known yet. This is // a saftey carcl~. I don't tllink ext() will /~ eYer get called from here.
exit.x += width;
exit.y = sheet_p->desired_exit(this~i Draw the net segment itself coord midx = entry.x + width / 2;
points~0~ = entry;
int npts = l; // start out witll tlle en~ry if (entry.y != exit.y) ( // need to jog it.
pointslnpts+-] = Point(midx,entry.y);
pointslnpts++] = Point(midx,exit.yl;
]

pointslnpts++] = exit;
the_grob; = area_p->build polyline(points, npts, net);
// Now draw the net name and text. Remem;er tlni~ build_text() justifies at // bottom center of the string.
Collst cl)ar ~nname = net.name(slleet_p->parell~(l);
iI ((nname && nnamelO] == 'N' && nnamell] == 'S') && !area_p->config().nonuser_net names) nname = NULL;
name_grobj = area_p->build text(max(entry.y, exit.y) + PC_NET_NAME_SEPARATOR_Y, midx, nname, nal:le inlo, net);
text_grobj = area_p->build_text(min(entry.y. exit.y) - PC_NET_NAMi`_SEPARATOR_Y, . midx, text.c_strir.g(), text_info, net);
return exit;
]
//
Yoid Pcnet::dump( ~ 1988 Mentor Graphics Corporation 13~32g~

......... ... . .. .
.Jun 3 15:25 19B8 path_context.source Page 55 const char ~const name p, . // pointcr to o~jcct name COtlst int tabs, // nesting level os~ream &out // output stream // dump internal data representation start_dump("Pcnet", this, ~ame_p, tabs, out);
Pcseg.:dump("(base~", tabs + 1, out~;
net.dump("net_re~", tabs t 1, out);
indent_dump(tabs, out) "\tname_grobj = " name grobj "; text_grobj = "
. text_grob; "; text = " text "\n";
end_dump(tabsl out);
] . ........ ............. ..
// t~*~ *~************~**************~***A~**~*~*~**********************
/ /
// Class Pcinst ~/ *~ ***~****************~*~ ***~ *~ A~ AA**~-*~*~**~*******~

// -- --------__----__________________ ~/ Implementation of class Pcinst ~/ -- _-- _______________ _ I'cinst::Pcinst( Pcarea *parent_area, Pcsheet *parent_sheet, Detail scanner 6scan point ) : lparent_area, parent_sheet, scan-point // credte this Pcinst.
.. .. . .
this = (this == NULL) ? tPcinst *) parent_area-~l)edp()-)allocate(sizeof(Pcinst)) : t~lis, if (ipin.valid()) inst = &(fe_env.ckt_info().cvt_ref(ipin.parent()));
else inst = &(fe_env.ckt_info().cvt_ref(opin.parent()));
if (!opin valid() &6 area_p->slack_type() != QP _ INVALID_SLACK) // last one in the path an~ it is a wc path setup_time_text = form("tPATH=~.lf", scan point.total path ti~e()) arrival time text = form("tCL~=~.lf", scan point.arrival_time());
clear_graphics();
] . .
, / . . .
// 'DATA INQUIRY' FUNCTI~NS
______________________ <oord Pcinst::desired_entry() // Returns the desired entry point of thi~ Pcin_t.
// MIN_INT is returned if there is no input net eY.pected.
if (width < O ¦¦ !locs.compu~ed) ext(); // I don't tllink tllis will happell, ~ut in ca5c...
ir (ipin.valid()) return locs.in_pin_channel_y ~ area p-~p.lLII or~ l().y;
else return NIN_INT;
) ~ 19~& Mentor Graphics Corporation .. ..... . . . .. . . .. .. .. .. .
Jun 3 15:25 1988 path_context.source Page 56 .. . . . .
,,______________ _______________________________________________ Réctangle Pcinst::ext() ........ .. . .... . ..................................... .. ........ ..
// Returns the extent of this Peinst graphies. It computes tlle aetual width // of this peseg and the loeation of the graphics relative to the entry.x, . . ..
// y-baseline of the segment (i.e. the result llas to be translated by // (entry.x, y-baseline) prior to actually drawing it. . .. ..... .
locs.extent =.area p->eaehe_grobj_ext(inst->cache_grobj~)); ....... .. ..... .........
if (!opin.valid()) 1.... // This is the last one, allow room for the .. .. .. ... .
// setup time and clock arrival time labels locs.e~tent.y(0) -=..~PC_GENERIC_TEXT_IIT t P C_NET_NA~iE_SEP~RATOR_Y); . . ................
locs.extent.y(l) += (PC_GENEKlC_TEXT_HT t PC _NET N~E_SEPARATOR_Y);
] . . ... ..
Now we want to eenter the eenter of the symbol on the baseline and at th~ x midpoint. Compute the translation re~uired to the origin of the grob; to cause that to happen, and translate tile extent and the loeation of the symbol' 5 pins by that amount.
locs.origin = Point(-locs.extent.width() / 2 , -(locs.extent.height() / 2 +
locs.extent.y(D)));
locs.extent.moved by(locs.origin) locs.in_pin_loe = (ipin.valid()) ~ inst->pin o~fset(ipin.pin id()) ~ locs.originlocs out_pin_loc = (opin.valid()) ? inst->pin offset(opin.pin_id()) ~ locs.origin : Point(o~o);
Now deeide whether to flip the symbol about the vertical axis or not.
if (locs.in_pin loc.x ~ locs.aut-pin-loc.x) ( locs.flipped = TRUE-locs.in_pin_loc.x = -locs.in_pin_loc.x;
locs.out_pin_loc.x = -locs.out_pin_loc.x;
locs.origin.x = -loes.origin x;
else locs.flipped = FALSE;
.
Compute and caehe width and fill out rest of locs dd~d. Nc,te that after this locs.extent is the extent of the entjre sc~ cn~, wll.reas up until now it has been just the extene of the symbol.
width = max~locs.extent.width(), inst_labels_e~t().x) t 2 ~ pc-INsT-~E~Ar~ATGR;
coord delta = (width - locs.extent.widtll()) ~ ~;
lccs.extent.x(l) t= delta;
locs.extent.x(o) -= delta;
Finally, figure out whether we need a y-cl~ann~ r tlle pins that jogs vertically before it lea~es the seg (i.e. Fins on t~pi~bo~tom.) ~As of this writing I don't know how to do tllis wi~h~JuL l.J~king deey into th(' grapllics of the symbol, so I am stubhing it lor now~
l~c~.irl_pin_clldnnel_y = locs.in pin loc.y;
lc,cs.out_pin_channel_y = locs.out_pin_loc.y, locs.computed = TRUE;
return locs.extent;
....
// == ____________ Net_ ref Pcinst::input_net~) // Returns the n~t_ref for the input net to Lhi: ;eglm~rlt, il tlle~Le is one.
( return (ipin.valid()) ? ipin.net() : Net_re~();]
.. . . . . .... ..
Net_ref Peinst::outpUt_nett~

~ 1988 Mentor Graphics Corporation - 81 ~
133~299 ...... .. . . . .
Jun 3 15:25 1988 path_context.source Page 57 // Returns the net ref for the output net to this segment, if there is one.
1 return (opin.valid(~) ? opin.net() : Net_ref()j]
Boolean Pcinst::select(. ...
coord x, coord y . .
// Selects an object (net or instance) if x,y is in this segment and should // cause selection. Returns TRUE if a) something was selected // or b) x,y is in this segment but nothing should be selected there.
// Select in this segment if the point is within the bounding // box of the segment if ( y < area p->top_label baseline() 66 y > area-p->bottom-label-baseline() 66 x > le~t_x 66 x < left_x + width) ( //select it Rectangle inst_ext = area_p->grobj ext abs(the_grobjj;
if (inst_ext.x~O) > x) ~ // selec~ the illpU~ net if (ipin.valid()) fe_enY.selmgr().select(ipin.net());
else i (inst_ext.x(l) > x) // select the instance itself fe_env.selmgr().select(inst);
else ~/ it must be the output net if (opin.valid()) 1 fe_en~.selmgr().select(opin.net()) return TRUE;
else ' '' ' '''- ....... ....
return FALSE; ..... ........ .
.. .... . . .. ..... . .. . ..
~ / _ _ _ _ _ _ _ _ _ Point Pcinst::inst_labels_ext() return area_p->inst_labels_ext(inst->name());
.. ......... . . . . . .
// . . 'DATA INSERTION' FUNCTIONS
_ -- -- _ _ _ _ _ _ _ _ _ .
void pcinst::clear-graphics() // Clear out all graphical information Pcseg::clear_graphics();
labels grobj = QP _ NULL_GROW;
entry_stub = QP _ NULL_GROBJ;
exit_stub = QP_NULL G~OBJ;
clk_ar time_grobj = QP_ NULL GROBJ;
setup_time grobj =Qe_ NULL GROBJ;
locs.extent.make degenerate();
locs.camputed = FALSE;.

1988 Mentor Graphics Corporation - 82 ~ ~ 3332 ~

Jun 3 15:25 1988 path_context.source Page 58 ' 'CAUSING THI~GS TO }~PPEN' PUNCTIONS
,_______ ____________ __ ~oint Pcinst::build_seg~
Point entry .. . ... . .. ... .. .. . .. . . ..
// Build the graphics for the segment.
left_x = entry.x;
// First compute an origin for the symbol that will center it in the segment Point center = Point(entry.x + width / 2, area p->path-ori9in().y~i Point exit = Point(entry.x + width , locs.out pin_channel_y + area_p->path _origin().y);
// Copy the symbol graphics where they belong.
if (inst-~cache_grob;() != QP _ NULL GROBJ) // If we found it successfully the_grobj = area_p->copy_cache_grobj(inst->cache_grob;(), locs.flipped, locs.origin + center, inst) // The inst labeis labcls_qrobj.= area_p-~build_inst_label(ccntcr.x, inst-~na~c(~), // Now route the entering and exiting nets.
if (ipin.valid()) ( pointslO] = entry;
pointsll] = locs.in_pin_loc + centeri entry stub = area-p->build-polyline(points~ 2, ipin.net());
.

if (opin~valid()) [
pointslO] = locs.out_pin_loc ~ center;
pointsll] = exit;
exit_stub = area-p-~build-polylinc(points~ 2, opin.net());
lse t // If the output pin is not valil this is the end of the // path, so return a bad exit to fla.3 wl~oevcr called me.
~/ also, draw the clock arrival and setup text info since // this is the end of tlle pa~
exit.y = MIN_ INT; . .
// get the symbol e~tent so we can locate l~e text Rectangle sym_ext = area_p->yrobj_ext_ah~(the_~robj);
I'c_text_inIo info = tex~_info;
// clock arrival time labcl info.aliyn = PC_TL;
if (arrival time_text.l~ngtl~ = 0) clk_ar_time_grob; = area_p-)build_text(sym_ext.y(O) - PC_ NEl`_NAME_SEPARATOK_Y,sym_ext.x(O), arrival-time-text.c-striny()~ in~o), // s~tup/llold time label info.align = Pc_BL;
if (setup time_text.length() != 0) setup_time grabj = area_p->build text(sym_ext.y(l) + PC_ NET_N~-~E_SEPARATOR_Y
sym_ext.x(O), setup_time_text.c_string(), info);
re-urn exit;
. .
//

// . . , _-- ___ ____ ____________ void Pcinst::dump( const char ~const name_p, // pointer to object name const int tabs, // nesting level ~ 1588 Mentor Graphics Corporation - 83 ~ 1 ~ ~ 3 2 9 Jun 3 15:25 1988 path_context.source Page 59 ostream . ... 60ut .. // output stream // dump internal data representation.... . . ..

.. . start dump~"Pcinst",.this,.name_p, tabs, nut~; . . . .. .. . .
Pcseg-:dump("(base)", tabs + 1, out);
.. inst->dump("inst", tabs.~. l, out);. ....... . ..... ..... ..... .......................
// dump the locs stuff ..... indent.dump(tabs, out~ <."~torigin = " ~< locs~origin "; e~tent. =,,n, locs.extent "\n";
indent_dump(tabs,.out). "\tin_pin loc = " locs.in_pin_loc . . .. ...........
"\tout_pin loc = " locs.out_pin_loc "\n"
indent_dump(tabs, outl "~tin_pin_channel y = " locs~in_pin_channel_y............
"\tout pin channel_y = " locs.out pin_channel_y (~locs.flipped) ? " FLIPPED" : "") ...
((locs.computed) ? "" : " NOT COMPUTED!") "\n";
indent dump(tabs, out) "\tlabels_grobj = " labels grobj "; entry_stub = " entry_stub "; exit stub = " exit_stub "\n";
end_dump(tabs, out), ~ -// ***********t************~*****
/ /
// * Classes Pcseg_list and Pcseg_.~canner *
// ~ . ......... . . . . ... * . ......
// ****************************************************************************
____________ ______ ___ .// Implementation of Pcseg_list /~ _ _______________ Pcseg_list::Pcseg_list(Heap *use_heap p) : (use_heap_p) // create an.empty Pcseg_list and Tnitidlize i~ .. ..
use_heap p =.~use heap_p) ? use_heap p : heap _ mi~c heap~);
this = ~this == NULL) ~ (Pcseg list *) use h~ap p->allocate(sizeof(Pcseg_list)):this // rémaining.initialization done by base cl~
void Pcseg list::clear() // delete the Pcseg's and then the list Pcseg_scanner scan(*this, NULI,);
wllile (t~scan) delete scan.curr item(~;
Qp_slist::clear();

// Implementation of Pcseg_scanner ,// ___ _ _________ __________ . _ ________________________ . . .
Pcseg_scanner::Pcseg scanner(lleap *heap_p) : (heap p // create unattached scanner [

heap_p.= (heap_p) ? heap_p : heap_ misc lleap();
this = (this == NULL) ? (Pcseg_scanner *) I)edp_~-->allocate(sizeof(Pcseg_scanner)) this;
// remaining.initialization done by base cla~
) ~ 198~ Mentor Graphics Corporation - 84 - 1 ~ 3 3 2 9~

.......... .. . .. .. ...... .
Jun 3 15:25 1988 path context.source Page 60 ............... .. ... ...... .. . . . . . . . . .. ...............
Pcseg-scanner::pcseg-scanner~pcseg-list ~list, Heap ~heap_p) : (list) // credte attached scanner............. .... . . ........ . . .
hedp p = ~heap p) ? heap_p : heap _ misc_heap(); ........................ . . ..... . .... ..
this = tthis =- NULL) ? (Pcseg_scanner ~) heap_p->allocate(sizeof(Pcseg_scanner)):
this;
// remaining initialization dane by base class .. . .. ..

.. ......... ...... ... . .. . . . . . . .

0 1988 Mentor Graphics Corporation Jun 3 15:29 198B........ path_list... source Page 1 ........................ ........

/~ .
~EADER .. .............. . ........ ........ . ... ... .......................................
lstarea.h - Declare class Lstarea ~ COPYRIGHT ..........................
t ,, Copyright.(C)...... 1~8B MPnt~r Graphics.Corporation :.
~ DESCRIPTION .......... ........ ........ ..... .. . . ..... .........................
t This class is a generic list area in QuickPath. It knows how to build a text areathat contains.lines of hilitable fields. Most.other.text areas in QuickPath are derived from this one.
. ...... ................ ....... ... . . .. . . . .. ............ ..............................................
~/ .
~ifndef INCLUDED_LSTAREA - - --~define INCLUDED LS~AREA. .................. .. ...... . .
~ifndef IUCLUDED_STREAM .................... .... . . .
~include <stream.h> ........ -......... .. ..... ..
Rendif . . ................................. .. ... .. . .............. . . . .................... .......
~ifndef INCLUDED_HILITE_QPAREA . ...
~include <hilite_qparea.h>
bendif ............... ..... . . ........................ . .. ... .
~ifndef INCLUDED_QPBASE.......................... .......... . . ..... ............ ...... ... .......
~include <qpbase.h>
cendif ,... ... ................. ..... .. . ..... ......... ... ..

// .. ...... .......... . Class Lstarea //
~/ t t t ~ t t t ~ * ~ * ~ * ~ A

/ / . ... ....... ... . ......... ......... ..... .. . . . . . . .. .. .. .. . . . .. .. ..
// Declaration of class Lstarea / / ..................... .. . ... ....................... .... ... . .. = .. . . . . . ...... ..
class Assoc obj tbl;
....... .
class Lstarea : public Hilite qparea 1 // This is the definition of.a List area. It is the base class for a // variety of hiliting text windows in quickpath I don't expect many // instances..of..this class.to be created, but rather it will be derived .. .....
// from ................. . . . . .. .. . . ... ......
private: // data Heap ...................... ..... ~heap_p;. . ...... // the lleap this one is made in........... . ..... ......
Heap ~hilite_heap_p; // contains the hilitable fields Tss_image. ............... ... ~image; // The image in this window . .
Boolean locked; // image is locked long ..... last_line;
Assoc_obj_tbl ~assoc objsi // table used to associate objects ........... ....... . . // with lines,fields in.the display. .
public: . //.functions ..................... .... .
// Storage management af Lstareas. . . .... . ...
// Lstareas are a highlevel class, and as such are ~/ not passed.around by.copy,..are not assigned, and are not initial i7 1988 Mentor Graphics Corporation 13~3299 Jun 3 15:29 198B path list.source Page 2 ... . . . . ............................................ ........ .. .... .
. // from another.Lstarea....... Hence the construct by copy, and assignment. .............. .. .. .
// constructors are not provided.
Lstarea( - - - -. ..........................
const char.............. ~name.... .. // name for the window................ . . ............... .
// This constructor..... creates Lstareas. ..................... . ........ ........ . .......... ..........
Lstarea(~;............................ .... . .
// The destructor for Lstarea deletes the window and the image // as well as the.internal data.structures. . . .... . .......... .......
. . . ..DATA INQUIRY FUNCTIONS~
Tss_image ~text image~) 1 return image;l . . ... ..
Heap ~t-eap() ...... ....... . ....... .... .... ... . ..
~ return heap_p;l ......... . .. ... . . .. ...... ...... ... .. ........ . . . . .. .. .. . . . . .. .
int max line() return last_linei~............. .................. .. . .. ..... . ..... .
~irtual long.associated object~................................ . ... ......... .............. ..............
long line, . short............... .field,........ .. .. .... ... .. ...............................
- short chr, Selmgr type...... .~type......... /~.ignored.on input, filled with.correct type );
// Returns the object..that.was associated with a given text position .....
// with add text_line().
/--------- DATA INSERTION FUNCTIONS----------------- void clear(); ...
// Clear out this lstarea and prepare for a new image. This clears the // tss image and all fields and lines in it.
//---------- ........... -------SERVICE FUNCTIOI~S------------------------------void application_cmd( const Qpcmd 6cmd // This function is called (by Qp_ui) to execute a command that belongs to // this area.
'/------------ TEXT FuNCTIONS-------------------------------------void lock()i . . . - ..
void unlock();
// While the lock is set the area will not be updated on the display // (to prevent flashing, etc) unless d de~ug iunction s~ecifie~ otherwise .. . . .
void add_text_line( String ............... 6str.. ..

);
void add_text ïi ne( String................ &str........... ........
long object, Selmgr_type....... . type. ' .// Adds a string.at the end Of this text image as a single field line, and // associates the provided object with it tor selection purposes.

~ 1988 Mentor Graphics Corporation - 87 ~ 133329~

..... ................... ............................. .. . . .
Jun 3 15:29 198B path list.source Page 3 .. ......... ..... . . . .. . .. ......... .. .
................... .................... ....... .... . . . .. . ..... .
//------- DUMP, ETC. FUNCTIONS----------~oid dump(................................................................... ................................
const ehar ~eonst name_p = NULL, // pointer to object name const int......... ... tabs.= O, ........ .... // nesting level .. .
ostream 60ut = cout // output stream ................... ..... .. . ... .. . . . .. . . .. ..
/; dump internal data representation .. . . . .. .. . . . . .... . ........ . . . . . .
//---------- PRIVATE FUNCTIONS----------protected: .. ~/.functions ..
virtual void seleet point emd( const Qpemd............. ..&cmd...... ............. . . ..... .
) -/j An internal.funetion tha~ handles the SELECT POINT command....This.. ............
~/ is a generic function that can seleet the object associated with a // line,field...in the..add=te~t_line, ete. functions . ... .. .....................................
~;
.. ........... , .. , .,... ,..... , ,.,.. ,.. ., ... . ...... . . . . ..... ~ ....... ............................
~endif /~ . . ........ .... ........... :..... . . . ......... ....... .
HEADER
path lstarea.. h .-.. Deelare elass Path_lstarea ........ ... .
COPYRIGHT ....... ................... . . .... .. ... .................. ............. .........
Copyri~ht (C) 1988 Mentor Graphics Corporation . .
DESCRIPTION
The area defined and ~anaged by this is the Path List area of.................. .... ........ .
Quic~path.
~/ . ...... ............... ................. ..... ....... ........ ......... ...... ..........
~ifndef INCLUDED_PATH_LSTAREA. ................. .. . . ..... . . . ........ ... .
~define INCLUDED_PATH_LSTAREA
.. . . . .. ...... . . . . . . . . . . .. . .
~ifndef INCLUDED STREAM
~include <stream.h>......... ............................ . . ....................... . ....... .. ..... .
~endif .... .. . .. . . ....
t i fndef INCLUDED_LSTAREA
~include <lstarea h~ . . ... ...........
~endif .. ..... .. .. .......... ..... ... . . . . .. . .. . . . .
~ifndef INCLUDED_STRING
~include <string.h>................. ... ..........
cendif ..... .. . . .. . ........ .... .. . . .. .
A ~ A ~ 1 * ~ * ~ A A ~ ~ ~ * ~ A A ~ t ~ * ~1 A
// ~ . ...................... ........ , .... . , , ~, // ~ Class Path lstarea ~/ ~ ........ , ,,, ~

// ----_----_______________ // Declaration..af.elass.Path=lstarea . . .
/ / _ _ _ _ class Wepath_scanner; . . .. ..
class Dlypath scanner;
elass Status; ........................ ................. .
class Qpcmd;

~ 1988 Mentor Graphics Corporation - 8 8 ~
133~2~9 Jun 3 15:29 1988 path_list.source Page 4 ... . . .. .. . .. ..... . ................ . . .. .. . . .class Path_lstarea : public Lstarea [
// This is the definition of a Path Context area. Path_lstarea's are constructed // in response to a co~mand from Fe. The constructor takes a (Wc¦Dly)path_scanner // and builds.and draws the Path_lstarea fro~ that. This class also forms ...// the base class for more specialized path lists, e.g. loop lists.
protected: // data -- .. .. .... .....
Wcpatll_s~Ann~r ................ *wcscan;..... ...... // path this is a path context of . ........ .
Dlypath scanner ~dlyscan; // path this is a path context of . .. . . ................... // These two ~ariables are.mutually // exclusive. One is always NULL.
.. ........... .. .. ....... .... ...... .... . . .. . ..
// field widths of various things.
int ....... ... lineno_fw; . ...
int slack_fw;
int . . ....... .. .. slack_type_fw; .
int total_delay_fw int ...... ....... . ... total_insts_fwi . . ...... .
irlt src_clk_name_fw;
int . dest_clk_name_fw;
int dest_pinname_fw;
int . .......... ... src_pinname_fw;
public: // functions ... ..
// ---- ___________________ // SLorage m~nagelllent of Path_lstareas.
// When Path_lstarea's are constructed they create a window and the image to // put in them, draw the path list, and are prepared ~or selection and // hiliting in themselves. They are a higl~ el class, and as such are // not passed around by copy, are not assi~ned, and are not initialized // ~rom another Path_lstarea. Ilence the constrllcr l-y copy, and assignment // constructors are not pro~ided.
Path_lstarea( .......
const Wcpath_scanner ~scanner // and wllat to put in it ~; . ......... ... . .
Path_lstarea( ........... ..
const Dlypath_scanner ~scanner // and what to put in it ); .. . .
// These constructors create Path_lstareas, including c~rawing the area on the // screen...After the constructor exits thc area i5 araildble for thc // user.
prirate: /j function void init(~
// This function is used by the constructor~.
pu~lic:. .~/.functions...
Path_lstarea~;.. . .. . .
// The destructor for Path_lstarea deletes the window and the picturc // as well as..the.internal data structures.

//------- ..... ................... ............. --DA~A INQUIRY------------------------------------Boolean wc() // Is this a worst case path list or a delay path list?
~ return (wcscan != NULL)j]
//--- SERVICE FUNCTIONS------------------ --~ 1988 Mentor Graphics Corporation - 89 - 1 3 332 9~

... ... . .. ...... . .
Jun 3 15:29 1988 path list.source Page S
virtual String.. format~....... . . . .... ...... . .... .
int lineno, const Wcpath_scanner...... ~wcpath .. .. .......................... ...
);
.. ..... ................................................. .. .. . .... . . . . . . .
virtual String format( int . .................... lineno,... . ..
const Dlypath scanner ~dlypath // These two functions format the line to be displayed for the path at the // provided scanner position and line number. .. .. .
Yirtual String format_header(),. ..
// return the header line for this path list window void compute_field_widths( const Wcpath_scanner ..... ~wcpath );
.. . .. . . .. . . ... . .. . . .
void compute field widths( COA~ Dlypath_scanner..... . ~dlypatll .. .. .... . . .
/i These two functions determine the field widths required to list the // fields in the path at the current position o~ the scanner. The // various field wid~h.variables are set if the field width computed . .. .
// here exceeds the current width in the variable /------- CAUSING THINGS TO HAPPEN ---------------void e~ecute_cmd(.. ............. . ..
const Qpcmd &cmd, Statu-~......... ~status .......... .... . . . ............. . . . .. . .
/j This function is called ~by Fe) to e~ecute a command that belongs to // the Path lstarea and that may fail.
vir~ual void rebuild_path-list() // Re~uild the image in this area. ..
// 'I`he current image is deleted and rebuilt. Tl~ not simply a // re~iraw( ) ... ...
----- .. DUMP, ETC. FUNCTIONS--------------void dump( const char ~const name_p = NULL, // pointer to object name const int tabs = 0, // nesting level ostream . 6aut = cout // output stream // dump.internal data representation . . .
]; ......... ... ...
~endif . ......... ....... ..... .. .
/~
MGDULE . ...... . ..... .
lstarea.c - Definition of class Lstarea C~PYRIGHT
Copyright..~C.~..1988 Mentor. Graphics.Corporation DESCRIPTION ... ....... ........

~ 1988 Mentor Graphics Corporation - 9o -13~32~

...................................... . ................... ..... :
Jun 3 15:29 1988 path_list.source Page 6 ... .. ........ . . . .. .. ..... . .. . . . . . ... ....
This is the ile that manages the crcation anl drawing of text list areas in QuickPath ....... . .... ............. . . .. .....
iifndef INCLUDED LS~ARFA
iinclude <lstarea.h>
lendif . . . . .......
iifndef INCLUDED YlHI ...
iinclude <vlhi.h>
Kendif .
Iifndef INCLUDED_GENHEAe linclude <genheap.h>
Il ~u~l i f . .. ........ .... ........................... ........ .
iifndef INCLUDED_HILITABLE
iinclude <hilitable.h>
~Ddif . ........ ................ . ....... . ..
Iifndef INCLUDED QPCMD
~include <qpcmd. h>
iendif ..
Hifndef INCLUDED_FE_ENV
linclude <fe env.h>
iendit Difndef lNCLUDED_FE
linclude <fe.h>
Icndif iifndef INCLUDED_SELMGR
~include <selmgr.h>
lendiI
ifndef INCLUDED TABLE
linclude <table .h>
Icndif .....
~ifndef INCLUDED C~IDS
linclude <s~qpath.cmd).h>
lcndif ~ifnd~f INCLUDED BE TABLES
linclude <be_tabIes.h>
~endiL

// ~
// ~ Class Hilite field ~/ --____________________ ~/ Declaration of class Hilite field // --_--_--_____________ _______ class Hilite_field : public Hilitable ( // This class encapsulates a Tss field in a Hilitable ~ 1988 Mentor Graphics Corporation 13~23~

....... . .. .............. .. .. ..
Jun 3 15:29 1988 path_list.source Page 7 private: // data Tss_image .............. .... ~image;........... .. . . . . .. ...... ..........................
Tss_field ~field;
long ............................ lineno; ... // This and the next one are because tss is so dumb .
short fieldno;
Boolean . .................. hilited;... .. ... . . . . . ...... .......................
public~ / functions .......................... ..... .. . .. . .. ....... ........ ..
Hilite_field( String ............ &str,......... // what is in it .. .......... .. .
long line_num, short ............. field_num~.... ......... . . ... .... .
Heap ~heap p // heap from wtlicll to allocate Hilite_field(); . . . ..... ....................
Tss_field ~tss_field() -- .. ... .....................
~ return field;) ............. ... .. . . ..
Tss_image ~tss_image() 1 return image;) . ........... . . . . .
void hilite();
~oid unhilite~);. ............................. .. . . .
void dump( const char ~const name_p.= NULL, ........... // pointer to object name................... .....
con~t int tabs = 0, // nesting level ostream ........... . 60ut.= cout..... .... // output stream. ........ . ... .. .
)i ]; . ....... ............ .... .. . .. . ........
/ / _ _ _ _ _ _ _ _ _ _ // Implementation of class Hilite_field _______ _________ extern Tss_image ~current_text image; // yecchlllltl, but it is tlle only ... . ........... . // way I know to get it.
llilite_field::Hilite_field( String . ......... ~.ctr, . .......... ... ... . . .. . .... ......... ............... ......
long line_num, sllorL ........... field_num, ............. .. . .
Heap ~heap_p .. . ..
this == (this) ? this .: (Hilite_field ~) heap_p->allocate(sizeof(Hilite_field)~;
create_text_field(short(str.length()), str.c_s~ring(), field);
image = current_text_image;
lineno = line_num;
fieldno = field_num; ..
// Sct a tss text field attribute tq reler i~ack t-n ~tlis ~lilite field so tha~ we can find it from a screcn position la~cr.
set_field_attrib(short(l), field, (long) this);
hilited = FALSE; ..
~]

... .. . .. . .. . . .. .. ......... .. . . .
Ililite_field:: Hilite_field() ... . . .. . . .
set_current_text_image(image);
delete_field(field~;................ ... .... . ..

~ 1988 Mentor Graphics Corporation ~ 92 -13~32~)9 ,Jun 3 15:29 l9B8 path_llst.source Page 8 .
.. . . . . . . . .
void Hilite_field::hilite~) long dmystatus;
... .set_current_te~t.image(image~;.........
locate(lineno, fieldno, short(l), dmystatus);
. set-field_attrib(field-hilite, field, hilite_select);
hilited = TRUE;
.. . .. ....... .... ................... ..... ...
void Hilite_field: ~Inhilite(,~,.................................... .... ......
long dmystatus; . .. . .
set_current_text_image(image);
locate(lineno, fieldno, short(l)/ dmystatus~;
set_field_attrib(field_hilite, field, no_hilite);
~ ted = FALSE; ..
]

.. . . . . .
:oid tlilite_field::dump( const char ~const name_p, . // pointer ~o object name const int tabs, // nesting l~vel ostr~-am ......... 60ut. ......... // output sLream .. . ... ....
// dump i~ternal data representation start_dump("Hilite_field", this, name_p, tab_, out);
indent dump(tabs, out) "\tfield = " dl:mp_ptr(tield) "; image = "
dump_ptr(image) (hilited ? "~IILITED" : "t~T tllLIlED") <c "\n";
end_dump(tabs, out);
....

/~ ~ ,,,, , ~
~/ ~ Class Assoc_obj // _--_________________ // Declaration of.class Assoc_obj ..
// _________________ struct Assoc_obj ( // This class keeps information about selecta~le objects associated with // a given line, field in the lstarea area. It is arrayed into an // As oc_obj_tbl, see below....... ... .. . ..
long . ......... .object;.............. // The object (wllicll can later be selected) selmgr-type type; // The object type Assoc_obj( long . ....assoc_object, ....
Selmgr_type object_type : . ..... ....... ... . -[ object = assoc_object; type = object_type;l Assoc_obj()..... ....... .. ... ..
~ object = 0; type = SEL_NULL_TYPE;~
.. ........ . . . . .. . . .. . .. .
void dump( ~ 1988 ~lentor Graphics Corporation - 9 3 ~
133329~

.. . .. ....... ............. ..... ... .... .... . . . . . ... . . . . .. ... ...
1un 3 15:29 19138 path_list.source Page 9 ............................... ... ....... ..............
const char.~const.name_p = NULL, // pointer to object name . .. . . .... . ...
const int tabs = O, // nesting level ostream....... &aut.= caut ..... . // output stream . . .. . ....... .....
// Dump full.. data.representation................................. . . . .
)i void Assoc_obj :dump( const char *const name_p, ..... . // pointcr to object name ....
const int tabs, // nesting level ostream ........... ~out... .... // output strednl . ..
// Dump full data rcpresentati.on.
indent dump(tabs, out) ~< "~t" name p ~< ": OLjCCL = " object <~ ", type = " ~< type "\n"i ~/ ~ ....... .. ~
// ~ Class Assoc ~-~b; tbl ~ . . .. . . --// ------------------_______________________ // Declaration of class Assoc_ob]_tbl corlst Assoc obj NULL_ASSOC_OBJ;
const OBJS P~K_SEG = 32;
cldss Assoc_obj_tbl : public Table ( // T~lis class declarcs a table that kecps the line to selected object // information. Note that this may not be suificiell~ wllen multiple fields // are accomodated with this area, and may need reimplmcntation.
public: // Functions Assoc obj_tbl~) : (sizeof(Assoc_obj~, OB~S_P~ S~, &NUI.L_ASSOC_OBJ) [~
Assoc_obj ~operatorll( long index // index of tl)e object in question ( return( ~(Assoc_obj ~) get_entry(index~;]
void dump_item( long index, const int tabs = o, o~tream ....... . . &out = cout // Dump one object in the table 1 (Athis~lindexl.dumpt~ tabs, out~;]
], ~/
// . ........ . . Class Assoc_ohj_tbl_scanner ,// ~

// ..................... ........ .. ...... ..
~/ Declaration of class Assoc obj tbl_scanner 0 1988 Mentor Graphics Corporation - 94 ~ 1 3 ~ 3 2 3 ~J

.. . . ...................... .... ....... ..
Jun 3 15:29 1988 path_list.source Page 10 / / _ _ _ _ _ _ _ _ _ _ .... . . . .. ...... .. .
class Assoc_obj_tbl_scanner... :.public Table_scanner [ .. . . . . ...... .. .....
pri~ate: // Functions Boolean find() .......... .......................... .. . . . ........ .
1 assert(FALSE, "Find not defined for Assoc obj_tbl_scanner"); return(FALSE);~
public: // Functions.......... .....
Assoc_obj_tbl_scanner(Assoc_obj_tbl 6table) : (table) ~ ]
Assoc_obj tbl_scanner(const ~ssoc_obj_tbl_scanner &src) : (src) ~ ) . . ...
void attach(Assoc_obj_tbl 6table) ~ Table_scanner::attach(table);.~..... ..... . . ... . ... ... ... ... ........
Assoc obj 6curr item() // Get item at the current.scanner position ... . . .. . ...
{ assert(valid(), "Scanner not valid"); return( *(Assoc_obj *) item_p )i) ]; .. .......................... ...... ..
~/ t~*t*ttt*tttt*ttttttttttttttt*ttttttttt**tt~ttt*ttttttt*tt*tttt*ttttttt*tttt ~/ * t // t ,.,,,,. Class Assoc_obj_tbl // t t J~ ***t*ttt****ttttttt*t*******t**t************~**A***tttt************t*******t ~ / . .. .. .
// Implementation of class Assoc obj tbl / / = . ... ......... ... .......... . . . ............
// t******ttt**ttttttt*tttttttttttttttt*ttttttt*******~*******tttttttttttt*****
~/ * *
. ........... .. .. ..... Class Lstarea .
// t // ~*~**********t*ttt*tt**tttt*************~**~**t*~****~************t**t*****
/ ~ . . ..... ... ... . ... . .... . . . .. ... . .......... ....
// Implementation of class Lstarea / / . . . ..... ... .... . = . , _ Lstarea::Lstarea( const char ... ... .... *name // root name . . . .. ..
) : (name, 6(fe_env.fe()), TRUE) // Create the image and put it in the window.
heap p = new Genheap(); . . . . .... . .... .. ..
hilite_heap p = new Genheap(HEAP _ DEFAULT SIZE, O, heap_p)i imaye = Qparea::text_image(), ..... . ... .... ..
locked = FALSE;
last_line = Oi assoc ob]s - new Assoc_obj tbl;
Lstarea:: Lstarea() // Delete the data structures in addition to tlle window itself ( delete heap_p delete assoc_abjs;.... .................. . ....... ...... .............
.. . . .. .... . . .. . . . .... .. . . .
~/ _________ ___________ ~/ ......... . DATA INQUIRY ~UNCTI~NS
// __________________ long Lstarea::associated_object.(....... . ................................... . ..
long line, ~ 1988 Mentor Graphics Corporation - ~5 -.......... ...... ...... . . . . . . . .
Jun 3 15:29 1988 path llst.source Page 11 short . . .... :..... field,........ ... .
short chr, Selmgr type ........ ~type......... .... ... ......... . . .. ...
) [ .. .. .................. . .. ....................... .. .... .. ... . .. .... .. . . ... .....
short shutup = field; // Not used for now, at least shutup = chr;. ....... . .
Assoc_obj &obj = (~assoc objs)[line];
~type = ob~.type;..... . . . .. . . . . .... . .
return obj.object;
.. . .
// _ ____ _ _________________ __ ,~ DATA INSERTION FUNCTIGNS
/ / ,,, , _ _ _ _ _ _ _ _ _ _ _ _ void Lstarea::clear() clcar all memary for this area and clear the image .. . . . .
l~dke a new image and put it into the Winùow*, then delete the old one ..
Tr.s_image ~oldimage = image;
create_text image(long(32000), image);
if (locked) loCk()i . .. ........ .
delete_text image(oidimagej;
clear_hilitables(~; . .
Ililite heap_p->clear();
assoc objs->clear(); .. ......

.// _________________________________ // . . . .......... .SERYICE FUNCTIONS
// _-- ______________________ ~oid Lstarea::application-cmdt const Qpcmd ~cmd ................. .... .. ... . . . . . .. . .. .. ... ..
long id = cmd.id(); .......
switch (id) [
case CMD_ SELECT POINT:
select point_cmd(cmd);
. break;. . . .
default: Hilite qparea::application_cmd(cmd); // pass it to my parent ) __ _________ __ - - '' '' ' '' TEXT IMAGE FUNCTI~N
// ------~~~~~~~~~~~~~~
// Note, these functions have been put into Lstarea so that the vl dependencies // cdn be isolated.to.here..... Ideally,.tllese functions (or similar ones) would // be part of a global librarY- . ........................................ ..... - --void Lstarea::lock(j // lock the.image........... ................ ... . . .... .... ...... ..
( locked = TRUE; .. . .......... ..
set_current text image(image);
lock_text();..... .. .. ..... .. . ..... .. . . ....... . ..... .

1988 Mentor Graphics Corporation 13332~

....... . .. . .. . . . .
Jun 3 15:29 1988 path_list.source Page 12 void Lstarea::unlock() // unlock the image.... ...............
locked =.FALSE;.... ................
set_current text image(image);
unlock text(~; . .. .
// The following functions Add a string at the end uf this text image as a single ,// field line, and associates the provided object with it for selection purposes. . ..
void Lstarea::add_text_line(........ . . .. . . .
String 6str [
add teYt line(str,.. O,.SEL NULL_TYPE); . ....... . .
.. . . . . . . .
void Lstarea::add text_line( String ... ............ Lstr,... ...
lung object, Selmgr type......... type.... ..
) .. .. . .. . .. ....... ..
long vlstatus;
last_linett; ..
set_current text_image~image);
short fieldno = 1; // for now, at least Hilite_field ~field = new Hilite_field(str~ last_line, fieldno, hilite heap_p);
insert_line(last_line, vlstatus) insert field(last line, fieldno, field->tss-field()~ PASCAL_TRUE, vlstatus); ..
The object,.as identified for hiliting, is the _ref, even though the . ..selectable entity is a scanner for some objects. This sucks, but I don't have a better solution at the mon~ent. IL this is a wcpath or dlypath thcn make a copy of the scanner so the list doesn't go away until the lstarea does.
switch (type) [
case SEL NULL TYPE: .// no hilitable for this one. . .......... .
break;
case SEL WCPATII: 1..... .. .. .. .. . ..... . .... .
Wcpath scanner ~wcscan = new Wcpath scanner(~(Wcpath scanner ~)object);
object = long(wcscan);
add hilitable(type~ wcscan->curr_item(), field); -. break;. . ... . .... . . . . ...
case SEL DLYPATI~: [
Dlypath scanner dlyscan = new Dlypatll_scanner(~(Dlypath_scanner ~)object);
object = long(dlyscan);
add_llilitable(type, dlyscan->curr_item(), rield);
break;
default:..
add_hilitable(type, object, field);
]
(~assoc_objs)[last line] = Assoc_obj(object, type); // used to select later ...... .. . . .

~ 1988 Mentor Graphics Corporation ~ 9 7 -.. .. .. ......... .................... ..... ... . . . . . . .. . .. ...
Jun 3 lS:29 1988 path_list.source Page 13 ............ .. ....... .. . .
----- DUMP, ETC, FUNCTI(~NS-----------------------------~oid L~tarea::dump( const char ~const name p, // pointer to object name const int tabs, // nesting level os~ream ~out . . /~ output sLr-:am // dump internal data representation start dump~"Lstarea", this, name_p, tabs, out~;
Hilite qparea::dump(n", tabs ~ l, out~;
indent_dump(tabs, out) ~< "\theap_p = " dump_ptr(l1eap_p~
<~ "; Tss image = " dump_ptr(text imaqe());
indent dump(tabs, out) (locked ? "LOC~ED" : "NOT LOC~ED"~ "\n";
end-dump(t~bs~ out~; .
... . .. ..
~/---------- P~IVATE FUNCTIONS---------------------------:oid Lstarea::select_point_cmd( cons~ Qpcmd ~cmd // handles the SELECT POINT command in this area.
// First grab the args. Note that we already know we are in this area, so // we don't need to get the window name. (Fe did that for us already) short one_of_n = 0;
cmd.one_of_n(short(l), ~one_of_n);
Boolean mouse_down = (one_of_n == 2);
if (!mouse-down) return; // for now we s~lect on mouse down, nothing on up long x_points = 0;
cmd.in~eger(l, ~x_points);
long y_points = 0;
cmd integer(2, 6y_points);
long vlstatus;
set-current-text-image(ima9e1; --locate_point(y_points, short(x-points)~ vlstatus);
if (vlstatus == 0) t // did so ok // find out where we are.
long line = 0;
short field = 0;
short chr = 0;
inquire position(line, fi~ld, chr);
// now get the thing that is pointed to, and select it.
Selmgr_type type;
long sel obj = associated object(line, field, chr, ~type);
if (type == SEL_WCPATH) fe_env.selmgr().select((Wcpath_scanner *)sel_obj);
else if (type == SEL_DLYPATH) fe_env.selmgr().select((Dlypath_scanner *)sel_obj);
else if (type != SEL_NULL_TYPE) fe_env.selmgr().select(type, sel obj);
// else do nothing, unsuccessful locate => no selection intended ] . . ....... ........ . . .. ... . . . . . . . . . . . .. ..... ... .................

~ 1988 Mentor Graphics Corporation 13~329~

.......... .. .. . .. . .
.Jun 3 15:29 1988 path_list.source Page 14 MoDuLE - -- -..... .
. path_lstarea.c.- Definition .of class Path lstarea ... ...... ..... ......................
COPYRIGHT...............................................................
Copyright (C) 1988 Mentor Graphics Corporation DESCRIpTIoN ' ' - - .........................
~, . . .....................
This is the flle that manages the creation and drawing of path context ~/ . .
......... . . . . .. .. .. .... . ..... . . . ..
difndef INCLUDED_LIST
dinclude <lis~.h>
dendif - - -. ..... .......
Nifndef INCLUDED_PATH_LSTAREA
#include <path_lstarea.h>
Nendif - - -- ................. ...
. .
Nifndef INCLUDED_STATUS
binclu~e <status.h>
dendif ---- - - - . .
difndef INCLUDED QPCMD
dinclude <qpcmd.h>.... . . .. ...
dendit - - - .... ... ............ .
difndef INCLUDED_REFS
~include <refs h>....
Nendif ----- --- - - ---- --~ifndef INCLUDED_CKT_INFO
~include <ckt info.h> . .
dendif ~ .
. .
difndef INCLUDED_FE_ENV
~include <fe_env.h>
N~ndif difndef INCLUDED_CMDS
~include <S(qpath.cmd~.h>
dendif Nifndef INCLUDED_PATH
Ninclude <path.h>..
cendif difndef INCLUDED_BE_TABLES
~include <be_tables.h>
tendif difndef INCLUDED_DELAY
Ninclude <delay.h>.......... ... ...
Iendif .
difndef INCLUDED_QP_TIME
linclude <qp_time.h>
~endif /

0 1988 Mentor Graphics Corporation 13332~33 Jun 3 15:29 l9a8 path_list source Page 15 ..... ... .. . . .. . .
Iifndef INCLUDED_LSTAREA_CONSTS
linclude <lstarea_consts.h>....... ... . ... ..
~endif ~ifndef INCLUDED_ViHI
~include <vlhi.h>................. ....
~endif .. ... ............ ......................... .......... ..... . ...
~ifndef INCLUDED_SLACK
~include <slack.h>..... .................. .
Iendif // A ..... .. .... . .. . ..
// ~ Class Path_lstarea // ~ , .. ,.,... ............. . . .. . , ~
* ~ t ~ A * ~1 A ~ ~ ~ A ~ A * ~ A ~ t ~

//
Il~plementation.of class.Path_lstarea . .. ..
_____________________ ________________________________________________ ath_lstarea::Path_lstarea( Wcpath_scanner ~scanner // what goes in it ) : (PL_WIN_NA~E) // credte the image and put it in the window.
dlyscan = NULL;
wcscan = new wcpath-scanner(~scanner);
illiL( );
. ..
path-l~tarea::path-lstarea( Dlypath_scanner ~scanner // what goe_ in it ) : (PL_WIN NAME~
// Create the image and put it in the window.
wcscan = NULL
~ly~can -.new Dlypath scanner(~scallner~; .
init(~; -void ~d~h_lstarea::init~) .
// lnitialize the path list assuming that tl)~? scallner is already set.
lineno_fw = 3;
slack_fw =.strlen~PI._SL~CK_TITLE~ ~ 2;
slack_type_fw = strlen~Pl._SIACK_1YPE 1`11'1.E);
total_delay_fw = strlen(PL_TOTAL DELAY_TITI.E) 1 2 total_insts fw = strlen(PL_TOTAL_lNSTS_rI11.t:);
src_clk_nam = fw = strlen~PL_SRC_CLK NAUIE TITLE) l;
dest_clk_name_fw = strlen~PL_DEST_CLK_N~E_TITLL`);
dest pinname_fw = 10;
src_pinname_fw = 10;
// Now we build the sheet and show it in the window.
rebuild_path_list~); . .
]

Path_lstarea:: Path_lstarea~) 0 1988 Mentor Graphics Corporation 13~3~3 .... . . .. .. ..... ..... . . . . . . . . . . . . ........ . . . .... ... ...
Jun 3 15:29 198~ path_list.source Page 16 // Delete.the data structures.in addition to the window itself . .. ..
if (wcscan)... . .... .. :.... ...... . . . ...... ... ... .... .. ..................
delete wcscan;
.. if (dlyscan)............................................. .. . ....... .
delete dlyscan; // note that only one of these is non-NULL
] . .. ... ................ . ... .. . .. .. . . . . . .............. . ... .. ......... ... ... .......................
/ ~ ..... ..... . .. . . .. . . . . .... . ... ..
~/ 'CAUSING THINGS TO HAPPEN' FUNCTIONS
/ ~ . ._ _ void Path_lstarea::execute_cmd( const Qpcmd ~cmd, ...
Status ~status ...................................... ....... . ............. ...............................
// This is stubbed aut for now. More to come!
status->set_ok()i long cmd_id = cmd.id(); // This is needed due to a bug in the 1.2 C-+ compiler .
switch ~cmd_id) [
case CMD _ 5ELECT_POINT: select_point_cmd(cmd~; . .
break;
case CMD _ DUMP: i . . . . . ..... ..
break;
default: unknown_command(cmd_id)i .. .. .
] .... .. . .. . . . . .. ... ... ......
____ ______________ ~oid Path lstarea::rebuild_path_list~) // Delete and rebuild the picture in Lhe window lock(); .... ~/ locks the display in the pic~ure . .. ........ ..... .................
clcar(); // clear the old image // scdn the scanner and build the image.
int linena = 0; . . ... .
il (wc( ) ) l wcscan->reset(); ................................................ . .
while (+t(~wcscan)) // Find the maximum field width for the pin names compute_field_widths(wcscan); ....
add_text_line(format_header()); .
wcscan->reset();
while (t+(~wcscan)) l lineno-+;
add_text_line(format(lineno, wcscan~, long(wcscan), SEL_WCPAT~); . . .
élse [
dlyscan->reset();
while (++(~dlyscan)) // Find tlle maximum field width for the pin names compute_field_widths(dlyscan)i . .. .
. add_text_line(format_header()~i .. ... ... ............
dlyscan->reset(~;
while (tt(~dlyscan)).~ .. . ... ............. .
lineno++;
add-text-line(format(lineno~ dlyscan), lon9(dlyscan)~ SEL_DLYPATH); ... .... ...

1988 Mentor Graphics Corporation 13332g9 .lun 3 15:29 1988 path list.source Page 17 hilite all-selections();................... . . .. ..
unlock();
/~--------- . ..... ...... . :.. SER~ICE FUNCTIONS----------------=--.---.---------- .
String Path lstarea::format( .int . .......... ... ..... linena, . ... . .. . ............. . . .... ..
const Wcpath_scanner ~path // Format a lloe for display in this window double slack = path->slack().slack_val() .
const char ~slack type;
switch ~ath-~slack().s ack_type()) 1 - - -case iP _ SETUP_ H: s ack_type = "S(H~"; breaki case OP SETUP L : s ack type = "S(LI"; breaki . . . . .
case QP = HOLD_H : s ack_type = "H(H "; break;
case ~P_~fOLD L : slack_type = "H(LI"; break;
case ~P _ INVALID_SLACK: , // fall througH to theassert default- assert(FALSE, "Lad gp_ slack_t suF,plied"~;
double total_delay = double(path->delay().qp time());
int total_insts = path->datapath(~ninstances()~ . .
Tlle following are nat right and are stubbed to the name of tlle pin for demo purposes.
const char ~src_clk_name = path->sclk last().name()i Collst char ~dest_clk_name = path->dclk last().n~ le();
String dest pinname;
path->datapath()l0~.parent().patllname(~dest_pinname);
dest pinname ~= "/"i dcst_pinname t= path->datapath()l0].namc();
String src_pinname;
pdtll-->datdpath().tcrm_pin().parent().pathndme(~src_pinname);
src pinname ~= "/";
src pinname ~= pdtll->datapath()~tcrm-pin()~llanle();
chdr buf1256];
sprintf(buf~ d ~.2f ~s ~.2f ~d ~s ~s ~ts ~s", lincno fw, lineno, slack fw, slack, slack type fw, slack_type, . total_delay_fw, total delay, total insts_fw, total inst~, ..... src clk n~DIe fw, ~rc c-lk n~me, dest_clk_ndmc fw, dest_clk name, dest pinname fw, dest pinndllle.c_string(), src_pinname_fw, src_pinn.lm~.c_string());
String str = buf; . .
return str;
......... ... .. ... . .. . .
String Path_lstarea::farmat( ..
int lineno, ~ 1988 Mentor Graphics Corporation 13332g~

.. . .. .
.lun 3 15:29 198a path_list.source Pa~e 18 const Dlypath_scanner dlypath [ . ..... ... . ........ ....... ... .. .. .. ..
// TBSL
); ...... ........ . ...... ...
String Path_lstarea::farmat_`header() String str;
char buf1256];

sprlnt~(buf~ s¦-~sl-~s~ Sl9~sl~slqO~
lineno_fw, PL LINENO_TITLE, slack_fw, PL_~L~C~_TITLE, slack_type_fw, PL_SLA~K_TYPE_TITLE, : total_delay_fw, PL_T~TAL GEI~'~_T~TLE, total_insts_fw, PL_TOTAL_INSTS_TITLE, .. src clk_name_fw, PL_SRr_CLK_N~-IE_TITl.E, dest_clk_ndme_fw, PL_~E~'r_Cl,~ _T11~LE, dest_pinname_fw, PL_DEST_PIN~J~IIE_TITLE, src_pinname_fw, PL_SRC_~lNNAllE_'rITL~);
str = buf;
else ( .

return str;
... . .. . .. ... .. . . . . ..
:~oid Path lstarea::compute_field_widths~
COIlst Wcpath_scanner ~path .. ......... ... ..... . .. . . . . .
// Compute some field widths and max them against the currently widest field ..... ........
The following are not right and are stubbed to the name of the pin for demo purposes.
const char ~src_clk_name = path->sclk_last().ndme();
const char ~dest_clk_name = path->dclk last().name();
String dest_pinname;
path->datapath()l0].parent().pathname(6dest_pinname);
dest pinname t= "/";
dest_pinname += path->datapath()101.name();
.. . . .. ... . . . .
String src_pinname;
pdth->ddtapath(~.term pin().parent().pdthndllle(&src pinname);
src_pinname += "/";
src_pinname += path->datapath().term_pin().nanle();
src clk_name fw = max(src_clk name_fw, strlen(src clk name));
dest clk_name_fw = max(dest_clk name fw, strlen(dest clk_name));
dest pinname_iw = max(dest_pinname_fw, int(dest_pinname.lengtll()));
src_pinname_fw = max(src_pinname fw, int(src pinname.length()));
]
void Path_lstarea::compute-field_widths( const Dlypath scanner 1dlypath . . .

~ 1988 Mentor Graphics Corporation ~ 1 03 -13~329-9 Jun 3 15:29 i9~8 path_list;source Page 19 // T~SL .~ ..... . ................ ... ..
~;
~ --- --- DUMP, ETC, FUNCTIONS---------------------void Path lstarea::dump~ ......... ......
eonst char ~eonst name_p, // pointer to object name eonst int.. .. . tabs, .... //.nesting level ostream 60ut // output stream ..... ...................... ................................. .. . .
// dump internal data representation start_dump~"Path_lstarea", this, name_p, tabs, out);
Lstarea::dump("",.tabs + 1, out);.
i f ( wcscan) wesean->dump~"wescan"., tabs + 1, out);
if (dlyscan) dlysean->dump~"dlysean", tabs + 1, out);
indent_dump~tabs,.. out).... .....
"; lineno_ fw = ~ (< lineno_ fw ";. slack_ fw = ~ slack_ fw " slack_type_fw = " slack_type_fw ";.total_delay_fw = " total_delay_fw "; total_insts_fw = " total_insts_fw n, .5re_clk_name_fw = " src_clk_name_fw ", dest_clk_name fw.= " dest_clk_nanle_ fw "; dest pinname_fw = " dest_pinname_fw "; src =pinname_fw = " sre_p~nname_tw "\n";
end_dump(tabs, out);
]

~ 1988 Mentor Graphics Corporation 13~329~

Jun 3 15:26 198~ area~source Page 1 /-HEADFR . ... . . .
base qparea.h - Declare class 8ase_qparea, Base_qparea_list, . . Base_qparea_scanner. ..................................... .. . .... .....
COPYRIGHT ....... .. . ............... . .... . .................................. ... . .... ......
Copyright (C) 1988 Mentor Graphics Corporation DESCRIPTION
This class.is the definition of the.lowest "area" in quickpath.. It is....................
not visible on the screen, but knows how to handle application-cmd()s and undo/redo etc.. This..file also.defines the Undostate class ... ...........................
from which undo state entries need to be derived.
~/ . .... ............ . . . . ... .
Iifndcf INCLUDED_BASE_QPAREA...........
~define INCLUDED_~ASE QPAREA
... . .. . . ...... . .. .... . . . .. ............ ....... ..... .. . ...... . .....
~ifndef INCLUDED_MLIB
~include <mlib.h~....... .. ....... . . .. ....... ...... ..
endif ~ifndef INCLUDED_STREAMH
~include <stream.h>. . .............. .
aendif .. .. . .. . . .. ... . . . ..
Iifndef INCLUDED_STRING
~include <string.h~.. ................. ...... . . ............. .
~endif .. . . .. ................ ....... . . . . . . . . . .
~ifndef INCLUDED_OLIST
~include <olist.h>... .. . ... ....
~endif .........
~ifnlef INCLUDED_QP_SLIST
~include <qp_slist.h> . ............... ... .. ........... .... .... ...
~endif .... . . . .............. . ..... . .. .... .. . . ...
class Qpcmd;
class Undo_list;......... .............................. .. . .. . ...
class Undostate;
class Status; ........... . ................................................... . . .. ..
// , , --____________________ // Class Undostate-/ / -- -- -- -- -- _ _ _ _ _ class Undostate : public Olink ( // Tllis class is the root from wllich "state" items that are to be maintained // on the Base_qparea undo lists should be derived. It provides for // a virtual destructor (by way of being de~i~ed from Olink) that allows // Base_qparea to get rid nf the state itsclf (when it falls off the // history list), rather than llaving to explicitly pass it back to the // original.client to delete it.
friend class Undo_list; .....
private: . // data long undotime; // time it was put on the undo list ~ 1988 Mentor Graphics Corporation Jun 3 15:26 19~8 area.source Page 2 public: . // functions ........ . . ..
.. Undostate(......................... . . ..................... .... ... ... .... . ..... .................
long time ........ Heap................ ..................... ~heap p.= NULL . ................. .
), .
virtual void undo~);
// This virtual function undoes the state. It is unimplemented in the .. ..
// base class, and will crash if called.
... . .. . .. .. .. . .... . . . . . ............... . . . . .. . . .. ..... ..
virtual void redo();
// This virtual function redoes the state. It is unimplemented in the // base class, and will crash if called.
............
virtual Boolean dead();
// This virtual function is called when Base_qparea.cleanup_undo() is ..
// called. It is unimplemented in the base class, and will crash // if called. It should return TRUE if tllis Un~ostate is invalid and // should be removed from the undo list.
// A (derived) instance of Undostate is 'dead' when the thing it is a // 'state' of has gone away: e.g. an undoable Olist has been deleted.
..... . ......... .... . . .. ....... .. .. . .. ... .. .
void dump( const char~..... const...... name_p = NULL, // pointer to obiect name const int tabs = O, // nesting level ostream ........ .6aut.......... .. = cout . // output stream );
// Dumps this... Undostate...... .... start-dump() and end dump() are not called .. ...
// because it is assumed that this is called trom a higher class .. . ............ .. ........ . .
long undo_time() ( return undotime;) // Used by derived classes in the clone() ~unction o~ Olink . . .
// as well as Qpbase_area for determininq what is to be undone.
protected: // functions .. . . ... . .. .
void set_undo_time( long time ) // Used by derived classes in the clone() ~unction of Olink ~ undotinle = time;~
);

~/ --________________ ~/ ... ... Class Base_qparea // _____________________________________________ class Base_qparea ~
// Class Base_qparea contains root functions that bu~ll visible and invisible // "areas" need to know how to do.
.. .. .
protected: // data int .. . undo_level_d; .. // the number u~ lev~li o~ undo stdte to keep ...
lon~ undo_time_d; // the undo "~im.?" counter Undo_list .. ~undo_list_d;.... . /J Tlle hirtory li_t u~ statcs to undo ...
Undo_list ~redo_list_d; // The tuture list o~ std~es o redo. This ... ................. .......... ... . // list is em~ty exccpt betwccn a call to // undo( ) dnd d call to either begin-undo() 0 1988 Mentor Graphics Corporation - 1 06 ~
133329~

.Jun 3 15:26 198~ area.source Page 3 . . ........... .. ........ // or save undo(). ............................... .
Boolean dont_add_undos; // Flag says not to add anything to the undo list . ............ ........ .... // This is TRUE during undo() and redo(). . ...... .....
Boolean destroying_redo; // Flag says that an Unùostate destructor for . ..... ........... .. ......................... // an Undostate on the redo list is in progress public:. . // functions .... .......... . ................ ....... . ... ....... ..........
/ / _ _ _ _ Base_qparea(.... ... .............. .... . . .... .... .. ... .
int undo_level = 1, H~ap ........ ~hp - NULL....... ... .... .. ........ .... ........ .....
);
// This constructor makes a Base_qparea. .. . .
// _________________ virtual Base_qparea(~; ................................. . . . . . .
// destructor that kills off the area.
/ / _ _ _ _ _ = _ = . , = .. .............
virtual void application_cmd( const ~pcmd... ~cmd.... ... .... .... . . ..... . . ........... .. ............... .
);
// This function is called (by Qp_ui) ta execute a command.that belongs to ... ..
// this area.
.... . . . . . . . ................................. . . . . . . . . . . . .. . .. ... .. .. . . . . .. .
virtual Boolean item_available( short. ..... .assertion_id . ................................. .......................... . . ..
// This function is called to test the validity of an assertion . . . . . .
// from the qpath.int file. The base class implementation always ~/ returns TRUE. For more.information see itcm_available.h .. . .. . ..
void e~ecute_cmd( ...
const Qpcmd ~cmd, Status ~status .
// This non-uirtual function is called tby Fe~ to execute a command that.
// belongs to this area. Since Fe knows the type of whom he is // calling this does not need to be virtual.
assert(FALSE, "execute_cmd~ not implemented in base class"~;
status = NULL; // Keep compiler quiet const Qpcmd &shutup = cmd; // di~t.o // __________ ____ virtual void post_message ( const String message . .
);
// This posts a messagc that i5 madc ~i_iLl~ ~, Lhc uscr. . . .
// The default implementation is to pdSS ir Up to the parent area.
~/ The hope is that some ancestor arca will dlsplay this messagc // either in a messa~e line, or will p~-,p it up.

__________________ virtual Boolean undo();
// Undo to the previous begin_undo() funcLioll call. Rcturns TRUE if thc // undo was done, FALSE otherwise // __ ____________________ virtual Boolean redo();
// Redo the previous undo. Returns TRUE it redo waS done, F~LSE otherwise.
// _ __________________ virtual void set undo_level( const int undo_level 1988 Mentor Graphics Corporation ~ 1 07 ~
13~329~

.lun 3 15:26 1988 area.source Page 4 ); . .......... ....
// Establishes the depth of state to maintain for undo.
/~ _ _ _ ________________________________ VirLUal void begin_undo();
// Mark_ the current state as the state that shou.ld be restored on a // subsequent undo(). This is the point at which the "undo_time"
// counter is incremented and old saved state thdt falls off the end // of the undo level is deleted.
,/ . . . _ ____________________ void save undo-state( Und~s~a~e...... .~state.. .... ...... .. . .
jj This function puts a "state" onto the undo list.
// The states are called in the REVERSE order in which they were // placed on the list when Qpbase_area::undo() is called. If this // function is called while a redo() or ul)do() is in process then // it is ignored (since in reality the state is already on the undo // or redo list. This is to faci1itate undo_llandlers that want to // use "normal" operations to manipulate their state; those "normal"
// operations may well ask that undo state to be placed on the lists.) ~____________ __ = ______________________________________ long undo_time() 1 return undo_time_d;)......
-- _ ___________________ int undo level() 1 return undo level_d;]
f / = ..... . . . _ _ _ _ _ _ _ _ _ Boolean redo clear() // This function is used by (derived) Undostate virtual destructors . .
// to determine whether secondary store sllould ~e deallocated or not.
// If a delete of an Undostate is currently happening because of // deleting from the redo_list then this lunction will return TRUE.
( return destroying redo;) // __ ____________________ void cleanup_undo( .. . . ....................... . .
);
// This function...is..called to remove all itelus on the undo // and redo lists that result in the undo_hand1er returning TRUE in // the CLEANUP MODE. The main usage of this is to // remove undostate's that no longer are valid; e.g. remove all the // undostate for an Olist when the Olist is de~troyed.
_______________________ void dump( .... . .-const char ~const name_p = NULL // pointer to ohject name Col15t int .... tabs = O // nesting level ostream &out = cout // output stream /j dump internal data representation // _ _____________________________________ private: // functions ...
void cleanup_undo_list(); . .
// cleans up old history from the undo list .. . . .. .................. ... ............. . . .. ....
// * ** *** ******* ** ~ * *****~* * ** **** *** ** ~ t * I A * I ~ *~ * *~ ** ~ *
// *
~ . . ........ Classes ~ase_qparea_list and ~ase qparea scanner // ~

~ 1988 Mentor Graphics Corporation - 1 08 ~
13332~

.Jun 3 15:26 1988 area.source Page S

/ / . .............. ... ..... . . .. ..
// Declaration of class Base_qparea_list / / . .............. .. . . = . . .. .. .. .. . . .
class Base_qparea;.. ..................... .. . ......... ........... ...... .
// declared in /project/qpath/src/qpath.hm/loop.h CldSS Bdse_qparea_list : public Qp_slist [
// singly linked list of Base_qparea * items // This class.is derived from the Qp slist protocol class. It provides // type checking of arguments and type conversions of return values // for the convenience of its clients. . . . . ............... .....
friend class .... Base_qparea_scanner;
// .. _ ___ _________________ puBlic: // functions.. . ..
Base_qparea_list() [1 // Allocated on misc heap; base class initiali~es data.
Base qparea_list(Heap theap_p);
Yoi~ operator=(Base-qparea-list 6src) t Qp_slist::operator=(src); ]
.. .. . . . . ..
Base_qparea_scanner ~new_item_scanner() ~ return.(Base_qpaLea_scanner ~) Qp_~lis~::n~w i~em-scdlllleL(); 1 . .
void add_item(Base_qparea ~item_p) . .
[ Qp_slist::add_item(item_p); 1 void append item(Base qparea ~new_item, Base_qpdrea scanner ~loc p = NULL), .. .. ..... . . . .. ...... .
void insert_item(Base_qparea ~new_item, Base_qparea_scanner ~loc_p = NUI.L);
void append list(Bàse qparea iist &source, Bd~e_qp~rea_scdnner ~loc p = NULL);
void insert list(Base qparea_list 6source, Bdse qpared scanner ~loc p = NlJLL);
Base qparea ~remove item(Base qparea scanner *loc p~;
void operator+=(Base_qparea_list &src~
1 Qp_slist::operatort=(src~; ]
int ~ind(Base qparea ~item~. .
~ return(Qp_slist::find(item)~; 1 Base_qparea ~&operator~j(int i~
~ return((Base-qparea ~h) Qp-slist::operatorll(i)); 1 Base_qparea ifirst(~ .. ...........
~ return((Base_qparea ~) Qp_slist::first(~; J
.. .. .... . .. . . .. ....... . . . .
Base qparea ~last(~
~ return((Base_qparea..~).Qp_slist:;last(~, J
I;

1988 Mentor Graphics Corporation 13332,~g Jun 3 15:26 1988 area.source Page 6 ~__________ ___________________________________________ // Declaration.of.class Base_qparea scanner .. . ..
// _________________ __ .. .... .... ... . .. ............ ........ . .
class Base_qparea scanner : public Qp slist scanner [
.. .. . .. ..................... . .. .. .. . . . . .. . . .... . ....... .
// scanner for singly linked list of Base qparea ~ items // This class is derived from the Qp_slist scanner protocol class...... It ...... ...
// provides type checking of arguments and type conversions of return // values.for the convenience of its clients. . . . ............. .. .
friend class... Base_qparea list; . ... .. .
~/ .. ... . .. .. . . . . . . ...
p-lblic: // functions ........
Base_qparea_scanner~).[].............. ..
// Allocated on misc heap; base class initializes data.
Base-qparea-scanner(Base-qparea-list ~list) : ~list~ [1 // Allocated on misc heap; base class initializes data.
void attach(Base qparea_list ~scan_list) [ Qp_slist_scanner::attach~scan_list); ] . ...... . . .......... . .. .
void attach~Base_qparea_list ~scan_list_p1 . .
[ Qp slist scanner::attach~scan_list_p); J
Ba~e qparea ~curr_item~) 1 return~Base_qparea *L) Qp_slist_scanner::curr_item~)); ]
Boolean find~Base_qparea ~item) [ return~Qp slist scanner::find~item)); ]
l; -- _ // ________________________________ // Definition of class Base_qparea_list inline f-nlctions // _____________________________________ // These inline functions are defined here rather than Wittl the function .// declarations because they depend on the Ba~e_ql-aræ~ scanner declaration.
inline void Base_qparea_list::append_item~Bace qr~rea ~new item, Base qparea scanner ~loc_p) ~ Cp_slist::append item~new itc~, loc p); ~
inline voict Base_qparea_list::insert_iLem~'dse_q~dr.d ~new itelll, Bd~e_qp~red_scdnller loc_~) 1 Qp_slist::insert_item(new_item, 10c_p); ]
inline void Base-qparea-iist::append-list(Base-~ r~d-li3t ~source, Base_qpared_scanner ~loc_p) [ Qp_slist::append_list~source, loc_p); ]
inline void Base_qparea_list::insert_list~Ba5e_~rarca_1ist ~50urce, Base qparea_scanner *loc_p) ( Qp_slist::insert_list~source, loc p); ]
. . . .. ..... ..
inline Base_qparea ~Base_qparea_list::remove item(Base qparea_scanner ~loc_p) ( return(~Base_qparea ~) op-slist::remove-item(loc p));
~endif 1988 Mentor Graphics Corporation - 110- 13~3293 Jun 3 15:26 1988 area.source Page 7 .. . . .. . . ............................. . . . . ..
* Hi`~ADER
qparea.h - Declare class 9parea .. .. ..... ... . .
* COPYRIGHT . . .................................................................. . ........ .... . ......... .
^ Copyright (C) 1988 Mentor Graphics Corporation .... . ... . . . . .. . . . . . . . . . .. . . . . . . .... . ....
* DESCRIPTION
* This class........ is .a.(quite~... abreviated version of the falcon area....................... .....................
*/
#ifndef INCLUDED QPAREA ............................. .
#define INCLUDED_QPAREA....... . .. .
Difnc3ef INCLUDED_STREAMH .... ...... .. ....................................................
~include <stream.h>
rendif . ..................... .. . ............................................. ... . ....... . . .
#indef INCLUDED_BASE_QeAREA............................................. ... .............................. .................
~include <base_qparea.h>
#ifndef INCLUDED_QP_SLIST .......... ~ . .. . ....... ...... . .
#include <qp_slist.h>
~endif ............................. ............... .. . ........................ . . .
~fndef INCLUDED_GEOM......... ........................... ... ........... . .. ....
#include <geom.h>
#endif ............... . .......... ..... ..
#i~ndef INCLUDED_STRIN~ ............ ................ .. . .... . .... . ...... .................
#include <string.h>
#endif ............... ...... . ..... ....... .... . ................................. . . ............ . . .. ...
class Window; // declared (sort of) in vlhi.h class Tss_image; // declared (sort of) in vlhi.h cl~ss Gss_image; ..... .....// declared (sort of) in vlhi.h . .............. .
class Qparea; // declared herein ~/ ~*****t**********
~ / .................. . . . . . . . . . .. . . . .. .. ....
~/ * Classes Qparea_list and Qparea scanner *
// **~***t****-************* .... .
---- --__________________ // Declaration of class Oparea_list . .
// --_______________________ class Qparea // declaréd in /project/gpattl/src/qp.~ttl.ilm,~luop.t class Qp3re~_1ist.: put~lic Qp_slist ~

// singly linked list of Qparca ~ items ~ Tlli: class i5 derived from the Qp_slist protocol class. It provides // type ch~cking of arguments an.-i type ccnver~ions of reLurn values /~ for ~he convenicnce of its clicn~s.
friend class Qparea scanner;

~ 1988 Mentor Graphics Corporation Jun 3 15:26 1988 area.source Page 8 public: //functions Qparea_list() []
//Allocated on misc.heap; base class initializes data.
Qparea_list(Heap *heap_p);
void operator=(Qparea_list &src) [Qp_slist::operator=(src); ]
Qparea_scanner *new_item_scanner() [return (Qparea_scanner *) Qp_slist::new_item_scanner(); ]
void add_item(Qparea *item_p) [Qp_slist::add_item(item_p); ]
void append_item(Qprea *new_item,Qparea_scanner *loc_p = NULL);
void insert_item(Qprea *new_item,Qparea_scanner *loc_p = NULL);
void append_list(Qparea_list &source, Qparea_scanner *loc_p = NULL);
void insert_list(Qparea_list &source, Qparea_scanner *loc_p = NULL);
(parea *remove_item(Qparea_scanner *loc_p);
void operator=(Qparea_list &src) [Qp_slist::operator+=(src);]
int find (qparea *item) [return (Qp_slist::find(item)); ]
Qparea *operator[](int i) [return ((Qparea *&) Qp_slist:operator[](i); ) Qparea *first() { return((Qparea *) Qp_slist::first()); ]
Qparea *last() [return((Qparea *)Qp_slist::last());) Declaration of class Qparea_scanner class Qparea scanner; public Qp slist scanner {

//scanner for singly linked list of Qparea *items //This class is derived from the Qp_slist_scanner protocal class. It //provides type checking of arguments and type conversions of return //values for the convenience of its clients.
friend class Qparea_list;
//
public: //functions c 1988 Mentor Graphics Corporation 1~ ~3~9~
~3 ... .. .. . .. .................... .. ....................... . .. ....... .
Jun 3 15 26 1988 area source Page 9 .. .. . . .. . ..... . . .. .. . . .. . .. .... . ... . . . . . . . . . .. . . ... ... . .. ... .......
Qparea-scanner() ~I
// Allocated on misc heap; base class initializes data Qparea_scanner(Qparea_list &list) (list) [l;
// Allocated on misc heap; base class initializes data void attach(Qparea_list &scan_list) ~ Qp_slist_scanner attach(scan_list); 1 void attach(Qparea_list ~scan_list_p ~ Qp_slist_scanner attach(-scan_list_p~;
Qparea ~curr_item() I return((Qparea &) Qp_slist_scanner curr_item());
soolean find(Qparea titem 1 return(Qp slist_scanner find(item));
.. ..................... .............. ........ . .. .. . . . .. . ..
/ / _ /~ Deinition of class Qparea_list inline functions / ~ _ _ // These inline functions are defined here rather than with the function // declarations because they depend on the Oparea_scanner declaration inline void Qparea_list append_item(Qparea ~new_item, Qparea_scanner ~loc_p) ~ Qp_slist append_item(new_item, loc_p)i ~
... ..
inline void Qparea_list insert_ite~(Qparea ~new_item, Qparea_scanner ~loc_p) 1 Qp_slist :insert-item(new-item~ loc_p); ~
inline void Qparea_list append_list~Oparea_list Lsource, Qparea_scanner -loc_p) 1 Qp_slist append list(source, loc_p); ]
inline void Qparea_iist insert_list(Qparea_list 6source, Qparea_scanner loc_p ~ Qp_slist insert-list(source~ loc_p); ~
inline Qparea AQparea_list remove-item(Qparea-scdlln~-L- loc_p) 1 return((Qparea ) Qp slist remove_item(loc_p~
.. ..
// Class Qparea // . . ..... .... .
~ t~t~ttt~t~t~t~t~tt~t~ t~ tt~ t~----// ___________ // Declaration of class Qparea class Border_list;
class Qparea public Base_qparea protected ~ data Window win_ptr soolean graphic; /~ TRUE if this i- a graphics window, else FALSE
Qpared ~parent_p; // My parent in tle area hierarchy Qparea-list sub_areas; // My children areas Border_list tborders; // list of borders for my children areas ~ 1988 Mentor Graphics Corporation - 11 3 ~
133~2~9 Jun 3 15:26 1988 area.sourcë Page 10 ........ . .. . .. . .. . .. . . ...
public: // functions /~ . ........ .... . ........ ... ..... = = .
Qparea( const String.......... ... ... 6name, .. . // the name for this window const Qparea ~parent, // parent for this one. NULL is ok, .... ......................... ......... . .. // but means that you are the session. .
// area...
Boolean ......... text.= TRUE, . // If ~rue create a text area, . . .
// otll~rwise a graphics area.
lon~ ............ xQ = O, .. // initial left x pos of image long yO = O, // initial top y of image in window long . .......... scale = 1 // initial scale of the picture in window // ign~re il ~ext wlndow ); . ............ .. ........... . . .
// Constructs a new Qparea. Creates the winclow and image and displays // it. The location of the window is managed by the area bordcr list, // which can be manipulated witll READ WINGGW or set default_border.
// If a window by 'name' already exists a name will be constructed that // mdke4 it unique (in vl by appending lcn~) // ___ _________ virtual Qparea();........ ............ . ...
// destructor that kills off the window anl the area.
// This also deletes the image.in the area!
//---------------..-----------DATA INQUIRY FUNCTI~JNS-----------------------------operator Window~() ~ return win_ptr;l ..
Window ~win() . . . .
// Returns the window pointer t return win_ptr;l.... .......
Bo-.lean text_area() .... .
// Returns TRUE if this is a text area ~ return !graphic;] ....
virtual Tss_image Atext_image();
virtual Gss_image ~graphic_image();
// Tllese two.functions return the image tllat i~ in the // underlying window. In the base class implementation // it is asserted that the type of area is appropriate // for the type of function being callel.
... . ... . .. . . . . . . . . ..
Rectangle exterior();
// Returns the exterior border of this area.
String instance_name(); ..
// Returns name of this area.
Qparea ~parent_area() ~ return parent_p;) .

Boolean has-sub-areas() [ return ~sub_areas.nitems() > O);]
Qparea_scanner subarea-scanner() return Qparea_scanner(sub_areas);) 1988 Mentor Graphics Corporation - 11 4 ~ 13~3299 ..... . ... . .
Jun 3 15:26 l98~ area.source Page ll Qparea . ~find_area( . ....... ....
String area_name ); . ............ . ........... ....... . . . . ... ......... ...
// Find the area with the specified name // This returns.. either.. this area or one of its descendent.areas....... . . .. ...........
// If there is no such area, NULL is returned.
Qparea ~find_area( Window ........... ......~win_ptr .. ............ . ........................ . . .
// Find.the.area with the window.in it. Please don't use the horrible. . .... .
// vl-ism unless you have an awfully good rea~on (e.g. performance in // the LPX and LPY fiystem function handlers) /------- . ....... . . . DATA INSERTION FUNCTIONS . --void add_sub_area( Oparea . .... ~sub_area_p ..... . .. .... . . . . .
// Add a sub area ta this one's list. This is normally only used by the // constructor of an area.
.. ...... . .. .. .. . . . .. .. .... . .. .... ... . . . . .. . . .. . . . .. . . .. ...
void remove sub_area( Qparea . . ~sub_area_p...................................... .. .. . . . . . .
);
// Revove this subarea.from my..list....This is normally only used by the . . ......
// destructor of an area.
..... . . .. ..... . ...... ......... ...... ....... . . .. ... ..... . . . . . . . .. ...... . . .. . .. .. ......
~oolean set_border( const String....... &area_name,.... ...... ... . ............... . .... ........
const Rectangle &border // Establish a border for the given area name. The borders are managed // on a LIFO basis,.so.only the root name of the area is signi~icant. .............. .
// Returns TRUE if this was one of my cllildren areas and I successfully // established the border, or FALSE if I don't recognize this ane. ... . .............
// This is a hierarchical function.
void set_default_border( const String . 6area_type_name, const Rectangle &border );
// Tllis sets the default border tor a type of area. [The type beinq // determined by the name). The detault bordf-r is used wllen no iurther // borders exist on the LIFO buffer of borJers.
// set_default_border() should vnly be called once. for each area_type_name.
// area_type_name sllould be the root nallle lur the area (e.g. Pathlist // COlltf?Xt) and not an instance name (e.q. Patlllist~l, etc.) ~/-----------------------------SE~VIC~ FUNC*loNS-------------------------------- void application cmd( Coll~.t Qpcmd. 6cmd );
// Overloads the 8ase_qparea:: ~UIICtiOIl tO dispatch to my parent if tlle ~ ~/ derived class does not overload it.
void pOst-messaget const String message );
// Overloads.the 8ase_qparea:: function to ~1ispatch to my parent if tlle . ..
// derived class does not overload it.

1988 Mentor Graphics Corporation - 11 5 - 13~3299 .. .... .......... . .. ............ . .
.Jun 3 15:26 1988 area.source Page 12 ..... . ... . . . . .. ..
-------- DUMP ETC FUNCTI~NS-----------------------------virtual void dumpt const char tconst name_p = NULL // pointer to object name const int...... tabs.=.. O ... ... .. // nesting level .. ....
ostream 60ut = cout // output stream // dump internal data representation ; . ............ ... . .... . . . ..

Iendif ............... ...............

/' HEADER ............ .................. . .

hilite_qparea.h - Declare class Hilite_qparea COPYRIGHT

Copyright (C~ 1988 Mentor Graphics Corporation .

GESCRIPTION ....... . . . .

This class declares an area that knows how to hilite design objects . .. . .. .. . .. .. ... .

~/ .

~ifndef INCLUDED_HILITE_QPAREA
~deiine INCLUDED_HILITE_OPAREA ... ..
~ifndef INCLUDED_STREAMII . ....
~ir~c]ude <stredm.h~
~endiI
~ifndef It~CLUDED OPAREA ....
include <(3pdrea .h>

~endiL .....
~ifndef It~CLUDED QP~SE . ..
~include <qp~ase.h~
~endit // ~
'/ .. . . Class ~iilite ~pared // ' .// -- ------------------__________ ___________ // Declaration of class Hilite_qparea --------------__________ ___ class Ciinst;
class Cineti class Inst ref;
class Net_re~; . ..
CldSS Pin_ref;
class Wcpath_ref;
class Dlypath_ref;
class Lngtable;
cla~s Hilitable;
CldSS Hilite_qparea : pu~lic Qparea ( // Class Hilite_qparea defines the inLerface to areds that are capable of ~ iliting selected objects.

~ 1988 Mentor Graphics Corporation 13~3~99 .lun 3 15:26 198B area.source Page 13 ....... . . . .. . .. .. . . . . . . .. . . . . . .. ... . ...... . .
private: // data Lngtable~ . hash tables¦SEL_NULL_TYPE~; .. . .. ... .... ..............
public: // functions .................................................. . .......... .
// ______________ Hilite_qparea(............. ............ . ........................... . ........ ..........................................
const String &name, // the name for this window const Qparea............ .~parent,. .. // parent area for this area Boolean text, // If true create a text area, ............................................... .............. // otllerwise a graphics.area~
long x0 = 0, // initial left x pos of image long . . . .... ya .. = .o,.... .... // initial top y of image in window ....... ............
long scale = 1 // initial scale of the picture in window .. . .. .... . .... ..... . // ignore if text window .............. .. ... ............ ....
);
// Constructs.a new Hilite_qparea...Creates the windaw and.image.and.displays........
// it at the indicated coordinates/scale. If a window by 'name' already // exists a name will be constructed that makes lt unique (in vl by . . ......
// appending 'In'.
/, . . . .. .
// Note that this is the same constructor as the base class.
.. . .... . . ...................... . . . . . . virtual Hilite_qparea();
// Destructor... . ..... .... ... . . .......................... ......... ..... . ........ ...
//---------- . DATA INSERTION FUNCTIONS
// These functions.add and remove from the hash table of hilitables. O~jects ...
,.~/ wBich are derived from class Hilitable can put them_elves in this ha~h // tdble and will have their hilitet) tunctions called whenever the corresponding . ..
,~/ desi~n object is to be hilited. These services will eliminate the need for // relatively simple hilitable areas to overload the hilite() and unhilite() .... ..
// functions, below.
/ / . . ............... . .. ... ... . ................. .............. . ............. . . ... .. ... . .... . .. . . ....
// Note that more than one Hilitable can be associated with the same design // object, but that only one design object of a given type can be associated // with a given hilitable. A hilitable can hilite both an (e~g.) net and a pin,~/ however. . . . . ........................................................... .. . . .................. .. .
void add_hilitable( .......... .... . . . . .. .
Ciinst ~inst, Hilitable . ~object ..... ... . ... .. . ... .
);
void add hilitable( Inst_ref &inst, Hilitable ~object ); .
void add_hilitable( Net_ref &net, Hilitable ~object );
void add_hilitable( Pin re . &pin, Hilitable ~object ); .......... . ... .

~ 1988 Mentor Graphics Corporation ~33~2~

Jun 3 15:26 i988 area.source Page 16 Dlypath_ref .... 6dlypath....... .. . ... ......... .. . .
// Unhilite the given path,.if it is in this area.
virtual void unhilite( ...............
Selmgr_type type, long ........... key ................ . ..... . . . . . ................ .. .... . .
);
.. ... . . .. ..... . .. . . . . . . .. . . .
~/--- Functions for all hiliting virtual void finish-hilites();
/~ This function is called when all calls to the (un)hilite() functions above....
// have been made. It can be used as an optimization to queue up the // hilites rather than doing them one at a time. In the . .. .............
// b~se class it does nothing.
... . . . . . . . . . . .. ..
virtual void hilite_all_selections()-// hilite all.selected objects. This is used when the area is constructed // to initialize its hilite state. 'l'ilis lunction is imylemented in terms // of the other hiliting functions in the base class.
virtual void unhilite all( Sellllgr_type type = SEL_NULL TYPE
); . .
// Clear all hilites on objects of the 5peci~ied type. If type is // SEL NULL_ TYPE then unhilite everything.
// This function is implemented in terms o~ the other unhiliting // ~unctions in the base class.
// . . _______________ ___ void dump( const char.~const name_p = NULL, // pointer to object name const int tabs = O, // nesting le~el ostream . ... . ~out.=.cout . . // output stream // dump internal data representation //--------- ---- PRIVATE FUNCTIONS-------------- -------protected: // Punctions .
~oid add_hilitable( ...
Selmgr_type type, long ........ ..... key, Hilitable ~object ); . .
void remove_hilitable( ..
Selmgr_type type, long . key, Hilitable ~object );

// The following are the base class hiliting tunctions.
void hilite_base( Selmgr_type........ type, long key ); , void unhilite_base( Selmgr_type type, ~ 1988 Mentor Graphics Corporation - 11 8 - 13332~9 Jun 3 15:26 1988 area.source Page 15 ...................... . .. . . .
// provided since there is not an Inst_ref f~r non-primitive instances.
virtual void hilite(. ..
Inst ref &inst ); . .......... .... ....... .... .
// Hilite the given instance, if it is in tllis area.
.. .. ..... .... ............. .. . .. . .
virtual void hilite( Net_ref ... &net .... .........
// Hilite the.given net, if it is in this area virtual void.hilite~.................. .......... .. . . . ...... ......
Pin_ref &pin ); ......... ............................. .. .........
// Hilite the given pin, if it is in this area.
.. . . .. . . . .. ........ . .. .. .. . . . ... . . . . . . . ..... .. .
virtual void hilite( Wcpath ref.. ...&wcpath..... . . ...........................
/j Hilite the given path, if it is in tllis area.
virtual void hilite~ . ...................................................... . .
Dlypath ref 6dlypath // Hilite the given path, if it is in this area.
. .
vir~ual void hilitet .lmgr_type. . type, long key ); . .......... .
!/----------- unhiliting functions virtual void unhilite( . ..
Ciinst ~inst // Unhilite the given instance, if it is in tllis area.
virtual void unhilitet Inst_ref .. &inst .
// Unhilite the given instance, if it is in this ared.
virtual void unhilite Net_ref &net ); .
// Unhilite the given net, if it is in this area.
virtual void unhilite( Pin_ref .. ..&pin // Unhilite the given pin, if it i5 in thi_ area.
virtual void unhilite( Wcpath_ref &wcpath ..

); . .... .
// Ununhilite the given path, if it is in Lhis dred.
virtual void unhilite( ~ 1988 Mentor Graphics Corporation 13~329~

Jun 3 15:26 19~8 area.source Page 14 void add hilitablet ......................... . ..... .
Wcpath_ref &wcpath, Hilitable . ~object. ..................... . . . .. . ..... ....................
);
void add-hilitable( - - - -... ................. .
Dlypath_ref.~dlypath,.......................... . . ....... . ........ ............................
Hilitable ~object .); ... ......... .. ......................... . ..... ...............................
- Removing.Hi litAhl ~q ........ ............ .. . ..... ......... .... ....................
void remove_hilitablet - ... . .. .
Ciinst ~inst, Hilitable .... ~object......... ... . .. . . . ............. . ........ ...... ...
);
.
void remove_hilitablet Inst ref ..... &inst, ......... .... . ..... . . . . . . . .......... ...
Hilitable ~object ); ..
void remove_hilitablet............. . . . . . .... . .. ... .. Net_ref ~net, Hilitable..... ~object......... ...... .. .. ... ... .. . ... ..
- );
void remove hilitablet Pin_ref . .... &pin,. ......... ..
Hilitable ~object ); ........... .... ........... . . .. .
void remove_hilitablet.......... ......... .. .
Wcpath_ref ~wcpath, Hilitable..... ~abject......... ..
);
void remove_hilitabiet Dlypath_ref &dlypath, Hilitable ~object ); .
void clear_hilitablest);
// Clear tlle hasII Lables. This would n~n-.IIly ~n]y be c~illed when ~he // deriYed area WdS deleting an entire in~ig~ an~3 rebuilding it.
,//--------- ------HILITIN~ FIINCTI~JNS---------------------------------// The hiliting functions are call~3 to (un~hill~e a:I,.Lject. in the area. There ~/ are separatc functions for eich of the types ot . b ject . In a typical // ~un)selection operation several call~ will L,. n;~id* ~o Llle.e functions, but // tlIey will always be followed by a call to fin;sl;_l:iIites()~
// All tiIese functions are implenlented in ~IIe l)i`;-? cl~ss using the hash tables // in this class....Clients may choose Lo overl~ i~ Lhelll for efficiency, however.
virtual void hilitet Ciinst ~inst ); . ........................... ....... .
// Hilite the given instance, if it is in this area. This function is ~ 1988 Mentor Graphics Corporation - 120 ~ 13332~9 Jun 3 15:26 1988 area.source Page 17 long .................. key........ ..
.. . .
I; . .................. .....................
d i 0 1988 Mentor Graphics Corporation 13~3~S~

Having illustrated and described the principles of the invention in a preferred embodiment, it should be apparent to those skilled in the art that the invention can be modified in arrangement and detail without departing from such principles. We claim all modifications coming within the spirit and scope of the following claims.

Claims (28)

1. A screen display for displaying a signal path through a circuit, the signal path having multiple portions that appear on separate schematic sheets of the circuit, comprising:
a first display portion for graphically display-ing a path portion apart from a schematic sheet of the circuit; and at least a second portion for graphically dis-playing a path portion apart from another schematic sheet of the circuit, the multiple display portions arranged adjacent to each other to display the signal path in its entirety apart from the schematic sheets.
2. The screen display of claim 1 including sheet identifiers in each display portion for identifying the schematic sheet for each portion of the displayed signal path.
3. The screen display of claim 1 including a sche-matic sheet display for displaying the schematic sheet of a path portion in response to a selection of the path portion from the displayed signal path.
4. The screen display of claim 1 including a path list display for displaying a list of the signal paths for selection of a critical path.
5. The screen display of claim 1 in which the displayed signal path appears in contrasting indicia to the display background for highlighting the displayed path.
6. The screen display of claim 1 including a compo-nent symbol displayed adjacent each path portion that - Page 1 of Claims -travels through a path component having a separate sche-matic sheet.
7. A screen display for displaying a signal path through a circuit, the signal path having multiple portions that appear on separate schematic sheets of the circuit, comprising:
a first display portion for graphically display-ing a path portion appearing on a schematic sheet of the circuit;
at least a second portion for graphically dis-playing a path portion appearing on another schematic sheet of the circuit; and separators appearing between each portion of the displayed signal path indicating a transition from one schematic sheet to another, the multiple display portions arranged adjacent to each other to display the signal path in its entirety apart from the schematic sheets.
8. The screen display of claim 7 in which the schematic sheets are arranged in a hierarchy of circuit design levels and the separators are constructed to indi-cate a transition to another sheet at the same design level or another sheet at a different design level for each portion of the signal path.
9. Apparatus for displaying a signal path through a circuit, the signal path having multiple portions that appear on separate schematic sheets of the circuit, com-prising:
path means for accepting data defining at least one signal path in the circuit; and display generator means in communication with the path means for producing a display of the signal path entirely in a path context window apart from the schematic sheets of the circuit.
- Page 2 of Claims -
10. The apparatus of claim 9 including means for generating sheet identifiers for identifying in the screen display the schematic sheet for each portion of the dis-played signal path.
11. The apparatus of claim 9 including schematic sheet generator means responsive to a selection of a portion of the displayed signal path for producing in the screen display the schematic sheet of the selected path portion.
12. The apparatus of claim 9 including analyzing means for determining from the path means which of the defined signal paths are considered critical, the display generator means being responsive to the selection of a critical path for producing a display of the selected critical path.
13. The apparatus of claim 9 including path list generating means for producing in the screen display a list of the signal paths for selection of a critical path.
14. The apparatus of claim 9 including indicia means for displaying the selected signal path in contrasting indicia to the single display for highlighting the selected path.
15. The apparatus of claim 9 including symbol gener-ating means for producing a component symbol in the single display adjacent to each path portion that travels through a component having a separate schematic sheet.
16. Apparatus for displaying a signal path through a circuit, the signal path having multiple portions that appear on separate schematic sheets of the circuit, com-prising:
- Page 3 of Claims -path means for accepting data defining at least one signal path in the circuit;
display generator means in communication with the path means for producing a display of the signal path entirely in a screen display apart from the schematic sheets of the circuit; and separator generator means for producing separ-ators in the screen display appearing between each portion of the displayed signal path for indicating a transition from one schematic sheet to another.
17. Apparatus for analyzing the timing of signals propagated along signal paths through a circuit, each signal path having portions that appear on separate sche-matic sheets of the circuit, comprising:
path means for accepting data defining signal paths in the circuit;
analyzing means for determining from the path means which of the defined signal paths are considered critical for timing;
display generator means responsive to selection of a critical path for producing a display of the signal path entirely in a screen display apart from the schematic sheets of the circuit.
18. Apparatus for analyzing the timing of signals propagated along signal paths through a circuit, each signal path having portions that appear on separate sche-matic sheets of the circuit, comprising:
path means for accepting data defining signal paths in the circuit;
analyzing means for determining from the path means which of the defined signal paths are considered critical for timing;
display generator means responsive to selection of a critical path for producing a display of the signal - Page 4 of Claims -path entirely in a screen display apart from the schematic sheets of the circuit; and path list generator means for producing in the screen display a list of the critical signal paths for selection of a critical path.
19. A method of displaying a signal path through a circuit, the signal path having multiple portions that appear on separate schematic sheets of the circuit, com-prising:
displaying a path portion apart from a first schematic sheet;
simultaneously displaying another path portion apart from another schematic sheet of the circuit; and positioning the path portions adjacent to each other to display the signal path in its entirety apart from the schematic sheets.
20. The method of claim 19 including displaying separators between each path portion of the displayed signal path for indicating a transition from one schematic sheet to another.
21. The method of claim 20 in which the schematic sheets are arranged in a hierarchy of circuit design levels, the method including displaying separators to indicate a transition to another sheet at the same design level or another sheet at a different design level for each path portion of the displayed signal path.
22. The method of claim 19 including displaying a schematic sheet of a path portion in response to a selec-tion of the path portion from the displayed signal path.
23. The method of claim 19 including displaying a path list of the signal paths for selection.

- Page 5 of Claims -
24. The method of claim 19 including displaying the signal path in contrasting indicia to the display back-ground to highlight the path.
25. The method of claim 19 including displaying a component symbol adjacent to each path portion that travels through a component having a separate schematic sheet.
26. A method of displaying a signal path through a circuit, the signal path having multiple portions that appear on separate schematic sheets of the circuit, com-prising:
displaying a portion from a first schematic sheet;
simultaneously displaying another portion from another schematic sheet of the circuit;
positioning the path portions adjacent to each other to display the signal path in its entirety; and displaying sheet identifiers adjacent to each path portion of the displayed signal path for identifying the schematic sheet for each path portion.
27. A method of analyzing the timing of signals propagated along signal paths through a circuit, each signal path having portions that appear on separate sche-matic sheets of the circuit, comprising:
accepting data defining signal paths in the circuit;
determining from the data which of the defined signal paths are considered critical for timing;
displaying in response to the selection of a critical path a display of the signal path entirely in a screen display apart from the schematic sheets of the circuit.
28. A method of analyzing the timing of signals propagated signal paths through a circuit, each signal path - Page 6 of Claims -having portions that appear on separate schematic sheets of the circuit, comprising:
accepting data defining signal paths in the circuit;
determining from the data which of the defined signal paths are considered critical for timing;
displaying in response to the selection of a critical path a display of the signal path entirely in a screen display apart from the schematic sheets of the circuit; and displaying in the screen display a list of the critical paths for selection of a critical path.
CA000602405A 1988-06-10 1989-06-09 Critical path analyzer with path context window Expired - Fee Related CA1333299C (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/206,184 US4970664A (en) 1988-06-10 1988-06-10 Critical path analyzer with path context window
US07/206,184 1988-06-10

Publications (1)

Publication Number Publication Date
CA1333299C true CA1333299C (en) 1994-11-29

Family

ID=22765318

Family Applications (1)

Application Number Title Priority Date Filing Date
CA000602405A Expired - Fee Related CA1333299C (en) 1988-06-10 1989-06-09 Critical path analyzer with path context window

Country Status (4)

Country Link
US (1) US4970664A (en)
JP (1) JPH04500417A (en)
CA (1) CA1333299C (en)
WO (1) WO1989012276A1 (en)

Families Citing this family (117)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5338157B1 (en) * 1992-09-09 1999-11-02 Sims Deltec Inc Systems and methods for communicating with ambulat
JP2522541B2 (en) * 1989-03-24 1996-08-07 三菱電機株式会社 Simulation device and simulation method
GB8908612D0 (en) * 1989-04-17 1989-06-01 Quantel Ltd Video graphics system
DE69032640D1 (en) * 1989-09-05 1998-10-15 Lsi Logic Corp Logic compiler for designing circuit models
JP2538069B2 (en) * 1989-09-13 1996-09-25 株式会社日立製作所 Plant control system, control circuit display method and maintenance device
DE69030318T2 (en) * 1989-10-17 1997-10-16 Perkin Elmer Corp ROBOTIC INTERFACE
US5255359A (en) * 1989-10-23 1993-10-19 International Business Machines Corporation Picking function for a pipeline graphics system using hierarchical graphics structures
JP2531282B2 (en) * 1989-12-22 1996-09-04 三菱電機株式会社 Crosstalk verification device
US5598344A (en) * 1990-04-06 1997-01-28 Lsi Logic Corporation Method and system for creating, validating, and scaling structural description of electronic device
US5555201A (en) * 1990-04-06 1996-09-10 Lsi Logic Corporation Method and system for creating and validating low level description of electronic design from higher level, behavior-oriented description, including interactive system for hierarchical display of control and dataflow information
US5572436A (en) * 1990-04-06 1996-11-05 Lsi Logic Corporation Method and system for creating and validating low level description of electronic design
US5541849A (en) * 1990-04-06 1996-07-30 Lsi Logic Corporation Method and system for creating and validating low level description of electronic design from higher level, behavior-oriented description, including estimation and comparison of timing parameters
US5572437A (en) * 1990-04-06 1996-11-05 Lsi Logic Corporation Method and system for creating and verifying structural logic model of electronic design from behavioral description, including generation of logic and timing models
US5220512A (en) * 1990-04-19 1993-06-15 Lsi Logic Corporation System for simultaneous, interactive presentation of electronic circuit diagrams and simulation data
US5623418A (en) * 1990-04-06 1997-04-22 Lsi Logic Corporation System and method for creating and validating structural description of electronic system
US5222030A (en) * 1990-04-06 1993-06-22 Lsi Logic Corporation Methodology for deriving executable low-level structural descriptions and valid physical implementations of circuits and systems from high-level semantic specifications and descriptions thereof
US5278769A (en) * 1991-04-12 1994-01-11 Lsi Logic Corporation Automatic logic model generation from schematic data base
US5553002A (en) * 1990-04-06 1996-09-03 Lsi Logic Corporation Method and system for creating and validating low level description of electronic design from higher level, behavior-oriented description, using milestone matrix incorporated into user-interface
US5867399A (en) * 1990-04-06 1999-02-02 Lsi Logic Corporation System and method for creating and validating structural description of electronic system from higher-level and behavior-oriented description
US5544067A (en) * 1990-04-06 1996-08-06 Lsi Logic Corporation Method and system for creating, deriving and validating structural description of electronic system from higher level, behavior-oriented description, including interactive schematic design and simulation
US5544066A (en) * 1990-04-06 1996-08-06 Lsi Logic Corporation Method and system for creating and validating low level description of electronic design from higher level, behavior-oriented description, including estimation and comparison of low-level design constraints
US5557531A (en) * 1990-04-06 1996-09-17 Lsi Logic Corporation Method and system for creating and validating low level structural description of electronic design from higher level, behavior-oriented description, including estimating power dissipation of physical implementation
US5870308A (en) * 1990-04-06 1999-02-09 Lsi Logic Corporation Method and system for creating and validating low-level description of electronic design
US5124908A (en) * 1990-04-23 1992-06-23 Ellis Corporation User interactive expert machine controller
US5212771A (en) * 1990-04-27 1993-05-18 Bachman Information Systems, Inc. System for establishing concurrent high level and low level processes in a diagram window through process explosion and implosion subsystems
JPH04226495A (en) * 1990-05-10 1992-08-17 Internatl Business Mach Corp <Ibm> Apparatus, system and method for controlling overlay plane in graphic display system
US5191541A (en) * 1990-05-14 1993-03-02 Sun Microsystems, Inc. Method and apparatus to improve static path analysis of digital circuits
US5513306A (en) * 1990-08-09 1996-04-30 Apple Computer, Inc. Temporal event viewing and editing system
JP2563663B2 (en) * 1990-08-20 1996-12-11 松下電器産業株式会社 Logic design processing device and timing adjustment method
JPH06266727A (en) * 1990-10-24 1994-09-22 Osaka Gas Co Ltd Method and equipment for displaying diagnosis
US5490082A (en) * 1990-11-07 1996-02-06 Vlsi Technology, Inc. Method of graphically designing circuits
JPH0685144B2 (en) * 1990-11-15 1994-10-26 インターナショナル・ビジネス・マシーンズ・コーポレイション Selective controller for overlay and underlay
US5448696A (en) * 1990-11-30 1995-09-05 Hitachi, Ltd. Map information system capable of displaying layout information
US5222210A (en) * 1990-12-03 1993-06-22 Motorola, Inc. Method of displaying the state of an artificial neural network
EP0490478A2 (en) * 1990-12-14 1992-06-17 Tektronix Inc. Automatic compilation of model equations into a gradient based analog simulator
US5191645A (en) * 1991-02-28 1993-03-02 Sony Corporation Of America Digital signal processing system employing icon displays
US5251159A (en) * 1991-03-20 1993-10-05 Vlsi Technology, Inc. Circuit simulation interface methods
US5325309A (en) * 1991-04-30 1994-06-28 Lsi Logic Corporation Method and apparatus for integrated circuit diagnosis
JP3160017B2 (en) * 1991-08-28 2001-04-23 株式会社日立製作所 Network management display device
JPH0561931A (en) * 1991-08-30 1993-03-12 Mitsubishi Electric Corp Simulation device
FR2690598B1 (en) * 1992-04-24 1994-06-03 Sextant Avionique SCHEDULING OF LINES OF LINES OF A NETWORK, PARTICULARLY FOR THE CALCULATION OF CROSS-LINKS BETWEEN LINES OF AN ELECTRICAL NETWORK.
US5359535A (en) * 1992-05-04 1994-10-25 Motorola, Inc. Method for optimization of digital circuit delays
US5526517A (en) * 1992-05-15 1996-06-11 Lsi Logic Corporation Concurrently operating design tools in an electronic computer aided design system
DE69325770T2 (en) * 1992-06-02 1999-11-18 Hewlett Packard Co METHOD FOR COMPUTER-BASED DESIGN FOR MULTI-LAYER CONNECTION TECHNOLOGIES
JPH064351A (en) * 1992-06-24 1994-01-14 Toshiba Corp Visual simulator
US5448497A (en) * 1992-09-08 1995-09-05 Nec Research Institute, Inc. Exploiting multi-cycle false paths in the performance optimization of sequential circuits
US5546320A (en) * 1992-10-23 1996-08-13 Biro; Larry L. Method for performing integrated section-level and full-chip timing verification for custom microprocessor designs
US5617327A (en) * 1993-07-30 1997-04-01 Xilinx, Inc. Method for entering state flow diagrams using schematic editor programs
WO1994015311A1 (en) * 1992-12-28 1994-07-07 Xilinx, Inc. Method for entering state flow diagrams using schematic editor programs
JP2634137B2 (en) * 1993-01-27 1997-07-23 インターナショナル・ビジネス・マシーンズ・コーポレイション User interface system and method
US5648913A (en) * 1993-03-29 1997-07-15 Xilinx, Inc. Frequency driven layout system and method for field programmable gate arrays
US5654898A (en) * 1993-05-10 1997-08-05 Cascade Design Automation Corporation Timing-driven integrated circuit layout through device sizing
JP2601177B2 (en) * 1993-06-08 1997-04-16 日本電気株式会社 Method for determining optimal clock period in synchronous logic circuit
JP2856640B2 (en) * 1993-07-08 1999-02-10 株式会社日立製作所 Logic schematic editor system
JP2804224B2 (en) * 1993-09-30 1998-09-24 日立ソフトウエアエンジニアリング株式会社 Network diagram drawing method and system
JP3153403B2 (en) * 1993-12-28 2001-04-09 富士通株式会社 Device for calculating delay time of semiconductor integrated circuit
US5548698A (en) * 1994-02-14 1996-08-20 Andersen Corporation Rule based parametric design apparatus and method
US5563994A (en) * 1994-03-11 1996-10-08 Harmon; Samuel T. System for graphically generating the sequence and temporal relationship between tasks in a project
JP3192906B2 (en) * 1994-03-11 2001-07-30 富士通株式会社 Logic simulation system and logic change method
US6132109A (en) * 1994-04-12 2000-10-17 Synopsys, Inc. Architecture and methods for a hardware description language source level debugging system
US5937190A (en) * 1994-04-12 1999-08-10 Synopsys, Inc. Architecture and methods for a hardware description language source level analysis and debugging system
JP3210172B2 (en) * 1994-05-13 2001-09-17 富士通株式会社 Delay / racing / error list output device
AU2767295A (en) * 1994-06-03 1996-01-04 Synopsys, Inc. Method and apparatus for context sensitive text displays
US5751597A (en) * 1994-08-15 1998-05-12 Fujitsu Limited CAD apparatus for LSI or printed circuit board
US5629858A (en) * 1994-10-31 1997-05-13 International Business Machines Corporation CMOS transistor network to gate level model extractor for simulation, verification and test generation
JP3459481B2 (en) * 1994-11-17 2003-10-20 富士通株式会社 Path analysis display device for logic circuit design
JP3351651B2 (en) * 1995-04-07 2002-12-03 富士通株式会社 Interactive circuit design equipment
US5726918A (en) * 1995-06-05 1998-03-10 Synopsys, Inc. Tool, system and method for dynamic timing analysis in a plural-instance digital system simulation
US6117183A (en) * 1996-01-08 2000-09-12 Fujitsu Limited Interactive CAD apparatus for designing packaging of logic circuit design
US5903472A (en) * 1996-10-25 1999-05-11 Advanced Micro Devices, Inc. Method for performing floorplan timing analysis by selectively displaying signal paths based on slack time calculations and integrated circuit made using same
US5896301A (en) * 1996-10-25 1999-04-20 Advanced Micro Devices, Inc. Method for performing floorplan timing analysis using multi-dimensional feedback in a histogram and integrated circuit made using same
US5910899A (en) * 1996-10-25 1999-06-08 Advanced Micro Devices, Inc. Method for performing floorplan timing analysis using multi-dimensional feedback in a spreadsheet with computed hyperlinks to physical layout graphics and integrated circuit made using same
US5946219A (en) * 1996-10-30 1999-08-31 Atmel Corporation Method and system for configuring an array of logic devices
US7076410B1 (en) * 1997-01-27 2006-07-11 Unisys Corporation Method and apparatus for efficiently viewing a number of selected components using a database editor tool
US6516456B1 (en) * 1997-01-27 2003-02-04 Unisys Corporation Method and apparatus for selectively viewing nets within a database editor tool
US5949690A (en) * 1997-09-26 1999-09-07 Xilinx, Inc. Schematic design entry with annotated timing
US5870309A (en) * 1997-09-26 1999-02-09 Xilinx, Inc. HDL design entry with annotated timing
JPH11126215A (en) * 1997-10-22 1999-05-11 Nec Corp Delay analytical result display device
ATE277375T1 (en) * 2000-02-25 2004-10-15 Siemens Ag METHOD FOR OPERATION AND DEVICE FOR MONITORING A TECHNICAL SYSTEM
US6889370B1 (en) * 2000-06-20 2005-05-03 Unisys Corporation Method and apparatus for selecting and aligning cells using a placement tool
US6880127B1 (en) * 2000-08-28 2005-04-12 Sanavigator, Inc. Method for routing connections in the display of a network topology
US7120877B2 (en) * 2001-04-10 2006-10-10 National Instruments Corporation System and method for creating a graphical program including a plurality of portions to be executed sequentially
US7082104B2 (en) 2001-05-18 2006-07-25 Intel Corporation Network device switch
JP3963668B2 (en) * 2001-07-05 2007-08-22 富士通株式会社 Logical diagram entry device
US7093224B2 (en) 2001-08-28 2006-08-15 Intel Corporation Model-based logic design
US6983427B2 (en) * 2001-08-29 2006-01-03 Intel Corporation Generating a logic design
US7130784B2 (en) 2001-08-29 2006-10-31 Intel Corporation Logic simulation
US7073156B2 (en) * 2001-08-29 2006-07-04 Intel Corporation Gate estimation process and method
US6859913B2 (en) 2001-08-29 2005-02-22 Intel Corporation Representing a simulation model using a hardware configuration database
US7107201B2 (en) 2001-08-29 2006-09-12 Intel Corporation Simulating a logic design
US6721925B2 (en) * 2001-08-29 2004-04-13 Intel Corporation Employing intelligent logical models to enable concise logic representations for clarity of design description and for rapid design capture
US7197724B2 (en) 2002-01-17 2007-03-27 Intel Corporation Modeling a logic design
US8504179B2 (en) 2002-02-28 2013-08-06 Smiths Medical Asd, Inc. Programmable medical infusion pump
US8250483B2 (en) 2002-02-28 2012-08-21 Smiths Medical Asd, Inc. Programmable medical infusion pump displaying a banner
US7219300B2 (en) * 2002-09-30 2007-05-15 Sanavigator, Inc. Method and system for generating a network monitoring display with animated utilization information
US8954336B2 (en) 2004-02-23 2015-02-10 Smiths Medical Asd, Inc. Server for medical device
US7562328B1 (en) * 2005-01-14 2009-07-14 Altera Corporation Navigation tool for connectors
JP4082616B2 (en) * 2005-01-17 2008-04-30 インターナショナル・ビジネス・マシーンズ・コーポレーション Signal propagation path drawing apparatus, drawing method and program thereof
US8858526B2 (en) 2006-08-03 2014-10-14 Smiths Medical Asd, Inc. Interface for medical infusion pump
US8435206B2 (en) 2006-08-03 2013-05-07 Smiths Medical Asd, Inc. Interface for medical infusion pump
US8149131B2 (en) 2006-08-03 2012-04-03 Smiths Medical Asd, Inc. Interface for medical infusion pump
US8965707B2 (en) 2006-08-03 2015-02-24 Smiths Medical Asd, Inc. Interface for medical infusion pump
US20120026173A1 (en) * 2006-08-04 2012-02-02 Gabbert Adam K Transitioning Between Different Views of a Diagram of a System
US20090064075A1 (en) * 2007-08-28 2009-03-05 International Business Machines Corporation Systems, methods and computer products for schematic editor mulit-window enhancement of hierarchical integrated circuit design
US7810064B2 (en) * 2007-08-31 2010-10-05 International Business Machines Corporation Systems, methods and computer products for traversing schematic hierarchy using a scrolling mechanism
US7853912B2 (en) * 2007-11-05 2010-12-14 International Business Machines Corporation Arrangements for developing integrated circuit designs
US8133197B2 (en) 2008-05-02 2012-03-13 Smiths Medical Asd, Inc. Display for pump
US9658271B2 (en) * 2008-09-11 2017-05-23 The Boeing Company Wire fault illumination and display
DE102008051401B4 (en) * 2008-10-11 2010-08-05 Festo Ag & Co. Kg Training and simulation device for electrical functional processes in electrical, electromechanical and electro-fluidic systems
US9098661B1 (en) * 2008-12-10 2015-08-04 The Mathworks, Inc. Extensible platform for back-annotation of target-specific characterization onto a model of a hardware system
US8423305B2 (en) * 2009-12-23 2013-04-16 The Boeing Company Wire system assessment
US9182948B1 (en) * 2010-04-08 2015-11-10 Cadence Design Systems, Inc. Method and system for navigating hierarchical levels using graphical previews
US8782525B2 (en) * 2011-07-28 2014-07-15 National Insturments Corporation Displaying physical signal routing in a diagram of a system
CN103294839A (en) * 2012-02-29 2013-09-11 鸿富锦精密工业(深圳)有限公司 Length calculating system and length calculating method
CA3111631C (en) 2013-01-28 2022-12-13 Smiths Medical Asd, Inc. Medication safety devices and methods
US11853690B1 (en) * 2016-05-31 2023-12-26 The Mathworks, Inc. Systems and methods for highlighting graphical models
US11868693B2 (en) * 2021-04-21 2024-01-09 Siemens Industry Software Inc. Verification performance profiling with selective data reduction

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4615011A (en) * 1983-12-19 1986-09-30 Ibm Iterative method for establishing connections and resulting product
US4722064A (en) * 1984-11-27 1988-01-26 Fuji Xerox Co., Ltd. Drawing output unit
US4821220A (en) * 1986-07-25 1989-04-11 Tektronix, Inc. System for animating program operation and displaying time-based relationships

Also Published As

Publication number Publication date
WO1989012276A1 (en) 1989-12-14
JPH04500417A (en) 1992-01-23
US4970664A (en) 1990-11-13

Similar Documents

Publication Publication Date Title
CA1333299C (en) Critical path analyzer with path context window
Vlissides et al. Unidraw: A framework for building domain-specific graphical editors
McCall et al. PHIDIAS: Integrating CAD Graphics into Dynamic Hypertext.
US5627972A (en) System for selectively converting a plurality of source data structures without an intermediary structure into a plurality of selected target structures
US6339836B1 (en) Automated design partitioning
CA2000014C (en) Technique for contracting element marks in a structured document
US5619636A (en) Multimedia publishing system
US6170080B1 (en) Method and system for floorplanning a circuit design at a high level of abstraction
US6212666B1 (en) Graphic representation of circuit analysis for circuit design and timing performance evaluation
Niessen Hierarchical design methodologies and tools for VLSI chips
Rekers On the use of Graph Grammars for de ning the Syntax of Graphical Languages
EP0692112B1 (en) Dynamic browser system
Riekert The ZOO metasystem: a direct-manipulation interface to object-oriented knowledge bases
Cyre et al. Knowledge visualization from conceptual structures
Tung et al. Multiple views of an executable software specification language
Wiseman et al. Rainbow—a multi‐purpose CAD system
Ege Constraint-based user interfaces for simulations
Rathnam et al. User interface management systems: themes and variations a review of the literature
Giacalone XY-WINS: an integraded environment for developing graphical user interfaces
van der Meulen et al. EXIST: an interactive VLSI architectural environment
MIYASHITA et al. A Constraint-Based Approach for Visualization and Animation
JPH05120363A (en) Method and device for converting user interface of functional diagram editor
Okoli TestReview 1.0: User’s Manual
Ashok et al. Integrated environment for information management in VLSI design
Wright Rapid development of VHDL behavioral models

Legal Events

Date Code Title Description
MKLA Lapsed