Jspice3
hcopy.c
Go to the documentation of this file.
1 /***************************************************************************
2 SCED - Schematic Capture Editor
3 JSPICE3 adaptation of Spice3e2 - Copyright (c) Stephen R. Whiteley 1992
4 Copyright 1990 Regents of the University of California. All rights reserved.
5 Authors: 1981 Giles C. Billingsley (parts of KIC layout editor)
6  1992 Stephen R. Whiteley
7 ****************************************************************************/
8 
9 #include "spice.h"
10 #include "sced.h"
11 #include "scedmacs.h"
12 #include "plotext.h" /* for ft_hardcopy() */
13 #include <time.h>
14 
15 /***********************************************************************
16  *
17  * Hcopy command.
18  * HP Laserjet hardcopy support.
19  *
20  ***********************************************************************/
21 
22 #ifdef __STDC__
23 static void hcpy_display(GRAPH*);
24 static void init_window(long,long,long,long);
25 static void init_hc_viewport(void);
26 #else
27 static void hcpy_display();
28 static void init_window();
29 static void init_hc_viewport();
30 #endif
31 
32 extern char *MenuHCOPY;
33 
34 
35 void
37 
38 {
41 
45 
47  InitViewport();
51 }
52 
53 
54 static void
56 
57 GRAPH* graph;
58 {
59  int i;
60  long L,B,R,T;
61  long VPmaxX,VPmaxY,MidX,Wid,Hei;
62  double Ratio;
63  int scale,Margin;
64  int Leg;
65  char OldControl;
66  char buf[64];
67 
68  PushGraphContext(graph);
69  OldControl = Parameters.kpRedisplayControl;
71 
73 
74  if (Not CDBB(Parameters.kpCellDesc,(struct o *)NULL,&L,&B,&R,&T))
75  MallocFailed();
76 
77 if (!strcmp(dispdev->name,"wp")) {
78  init_window((R+L)/2,(T+B)/2,(R-L)+(R-L)/10,((T-B)+(T-B)/10)/2);
79 
81  Parameters.kpRedisplayControl = OldControl;
83  return;
84 }
85 
86  /* scale for text */
87  scale = 2400/graph->absolute.width;
88  if (scale == 1) Parameters.kpHardcopyTextScale = 4; /* 300dpi */
89  else if (scale == 2) Parameters.kpHardcopyTextScale = 2; /* 150dpi */
90  else Parameters.kpHardcopyTextScale = 1; /* 75,100dpi */
91 
92  TPush();
93  TIdentity();
94  if ((R-L) > (T-B)) {
95  TRotate(0L,1L);
96  TPoint(&L,&B);
97  TPoint(&R,&T);
98  if (L > R) SwapInts(L,R);
99  if (B > T) SwapInts(T,B);
100  }
101  else TIdentity();
102  TPremultiply();
103  TStore();
104 
105  Leg = 3*graph->fontheight;
106  VPmaxY = graph->absolute.height - Leg - 1;
107  VPmaxX = graph->absolute.width - 1;
108 
109  if (((double)(T-B))/(R-L) >
110  ((double)VPmaxY)/VPmaxX) {
111 
112  Ratio = ((double)(T-B))/VPmaxY;
113  Hei = (long)(.5 + (double)(T-B + Leg*Ratio)/2);
114  Wid = VPmaxX*Ratio;
115  }
116  else {
117  Ratio = ((double)(R-L))/VPmaxX;
118  Hei = (VPmaxY+Leg)*Ratio/2;
119  Wid = R-L;
120  T = (T+B + Ratio*VPmaxY)/2;
121  }
122  init_window((R+L)/2,T - Hei,Wid,Hei);
123 
125 
126  sprintf(buf,"Circuit: %s",Parameters.kpCellName);
127  DevText(buf,0,currentgraph->fontheight*3/2);
129 
130  TPop();
131  TStore();
132  Parameters.kpRedisplayControl = OldControl;
133  PopGraphContext();
134 }
135 
136 
137 static void
138 init_window(X,Y,Width,HalfHeight)
139 
140 long X,Y,Width,HalfHeight;
141 {
142 
143  View->kvCoarseWindow->kaX = X;
144  View->kvCoarseWindow->kaY = Y;
145  View->kvCoarseWindow->kaLeft = X - Width/2;
146  View->kvCoarseWindow->kaRight = X + Width/2;
147  View->kvCoarseWindow->kaBottom = Y - HalfHeight;
148  View->kvCoarseWindow->kaTop = Y + HalfHeight;
149  View->kvCoarseWindow->kaWidth = Width;
154 }
155 
156 static void
158 {
159  struct ka *Vl;
160 
162  Vl->kaLeft = 0;
163  Vl->kaBottom = 0;
164  Vl->kaRight = gi_maxx;
165  Vl->kaTop = gi_maxy;
166  Vl->kaWidth = Vl->kaRight - Vl->kaLeft;
167  Vl->kaHeight = Vl->kaTop - Vl->kaBottom;
168 }
169 
static void init_window()
static char buf[MAXPROMPT]
Definition: arg.c:18
static void hcpy_display()
long kaY
Definition: sced.h:113
void TPoint()
void Redisplay()
struct ka * kvCoarseWindow
Definition: sced.h:149
long kaRight
Definition: sced.h:112
long kaBottom
Definition: sced.h:112
double kvCoarseRatio
Definition: sced.h:155
#define COARSEVIEWPORTONLY
Definition: sced.h:51
void DevText()
void CenterFullView()
Definition: init.c:466
char * name
Definition: plotdev.h:60
struct s * kpCellDesc
Definition: sced.h:207
#define Not
Definition: cdmacs.h:16
void InitViewport()
Definition: init.c:358
DISPDEVICE * dispdev
Definition: display.c:112
char * kpCellName
Definition: sced.h:210
char * datestring()
Definition: time.c:37
Definition: sced.h:111
char kpRedisplayControl
Definition: sced.h:312
#define L
Definition: parse.c:442
int kpHardcopyTextScale
Definition: sced.h:290
struct ka * kvLargeCoarseViewport
Definition: sced.h:151
void TStore()
Definition: xforms.c:331
void MallocFailed()
Definition: scedintr.c:857
long X
Definition: actions.c:450
int kpDoingHardcopy
Definition: sced.h:287
void MenuDeselect()
#define gi_maxx
Definition: scedmacs.h:58
#define R
Definition: parse.c:444
void PushGraphContext()
#define NULL
Definition: spdefs.h:121
struct ka * kvCoarseViewport
Definition: sced.h:150
struct kp Parameters
Definition: init.c:19
long kaTop
Definition: sced.h:112
static void init_hc_viewport()
Definition: hcopy.c:157
void TPremultiply()
Definition: xforms.c:216
#define True
Definition: scedstub.c:16
Definition: ftegraph.h:29
int fontheight
Definition: ftegraph.h:82
void TRotate()
double kaHeight
Definition: sced.h:114
struct kv * View
Definition: init.c:17
long kaLeft
Definition: sced.h:112
Definition: cddefs.h:142
void RedisplaySCED()
void PopGraphContext()
Definition: graphdb.c:270
void TIdentity()
Definition: xforms.c:189
int CDBB()
GRAPH * currentgraph
Definition: graphdb.c:21
double kaWidth
Definition: sced.h:114
void(* redraw)()
Definition: ftegraph.h:70
#define False
Definition: scedstub.c:15
void TPop()
Definition: xforms.c:64
void Hcopy()
Definition: hcopy.c:36
void MenuSelect()
long Y
Definition: actions.c:450
void TPush()
Definition: xforms.c:53
void ft_hardcopy()
#define SwapInts(Dragon, Eagle)
Definition: cdmacs.h:20
char * MenuHCOPY
Definition: scedintr.c:80
long kaX
Definition: sced.h:113
#define gi_maxy
Definition: scedmacs.h:59