aboutsummaryrefslogtreecommitdiff
path: root/src/graph/Makefile.pamphlet
blob: c68dc98e6d0ffa275a0997dcb865fd2aed69562c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
%% Oh Emacs, this is a -*- Makefile -*-, so give me tabs.
\documentclass{article}
\usepackage{axiom}

\title{\$SPAD/src/graph Makefile}
\author{Timothy Daly \and Gabriel Dos~Reis}

\begin{document}
\maketitle

\begin{abstract}
\end{abstract}
\eject

\tableofcontents
\eject

\section{General Comments}

This directory contains the C source code for the Scratchpad's
graphics. Comments given to the maintenance program refer to 
version numbers. The versions are documented below, starting with
version23.
\begin{verbatim}
version23: (first version after returning from Europe)
   added a $DEVE environment variable - if it exists, the viewport manager 
   tries those executable files first; if it was unsuccessful or, if the 
   $DEVE variable was not defined, the $SPAD variable is used tube.c: 
   changed order of crossedLines(p,q... to crossedLines(q,p... in order to
   use segNum info (which segment of the second polygon the first polygon 
   crosses) and using splitPolygon() rather than splitAndMove()
   tube.c: changed crossedLines() to generalPartialSplit() - an algorithms 
   i hope would work. it is not taken from any literature as all the 
   literature i have looked into and tried out had design flaws or lacked 
   precise specifications (including Foley & van Dam volume I, Newman & 
   Sprouill and others) 
   viewport3D.c: xPts now malloced as a global variable in makeView3D and 
   not freed up at the end. quadMesh is also not freed anymore (shouldn't 
   be as it was changed to a global some time ago).
   made eyeDistance (3D stuff) into a float (from integer)
   added outlineRender (outlineOnOff in actions.h) field. note that this 
   and the previous change both affected the following files:
      view3D/: main.c, process.c, viewport3D.c, spadAction.c, write.c
      viewman/: fun3D.c make3D.c
      viewAlone/: spoon3D.c spoonTube.c
      spad/: view3D.spad (viewport3D, makeViewport3D and the Rep)
   3D: ability to write Stellar recognizable data files for Tube types
   spad additions: write(v,fn,listOfTypes)
   fixed perspective, added min/max range of eyeDistance

version24: view3D/tube.c: put in calculations for xmin,xmax,ymin,ymax
   >>> took them out again - doesn't the viewport manager do that?
   polygon list saved if previous render/opaque (hidden surface)
   was completed so that subsequent draws would be faster
   view3D: added NIL(pType) macro which checks for a null pointer
   >>> need same change in view2D (after testing)
   totalShades is now a global variable (to be decremented if color trouble)
   >>> need same change in view2D (after testing)
   cleaning up: added exitWithAck(info,size,i) macro to send spad 
   acknowledge right before exit of a troubled program. this
   should avoid some of the causes of entering spad break loops
   not enough colors could be allocated; now, only a message is given.
   viewman: adding checks for abnormal exits of child processes (from
   people who use the "Cancel" command from the X server).
   deadBaby() and brokenPipe() in the works.
   view3D: hey! there was a bug in the projections: with perspective on,
   it turns out the Z-axis was rotating opposite of the rest of 
   the system...?...
   fixed perspective
   added box (with back face removal)
   function of 2 variables now has it's own substructure, like tube, and
   shares the (now) general hidden surface subroutine used for the
   tube stuff when the perspective is turned on (when perspective is
   off, a simple back to front routine is sufficient and fast but the
   property that allows that is not preserved in the perspective projection)
   seems like (in tube.c) the overlap list property is not preserved (see
   notes) so now, routine needs to check, for polygon i, polygons
   i+1 through N, always.
   affects ALL: added deltaZ to all the stuff 
   (spad, viewman, viewAlone, view3D) - though not used yet
   error messages: if the .Xdefault not found (or .Xdefault wasn't defined) 
   then view2D and view3D will a predefined default set of fonts. it that
   still doesn't work, a (more or less useful) error message is displayed
   and an error signal is sent to Scratchpad to prevent a freeze-up situation.
   viewpack.spad (package VIEW) and view2D.spad (domain GRIMAGE) now check for
   lists that contain illegal empty lists (i.e. point list contains nothing).
   warnings are issued for lists containing both legal point lists and empty
   point lists, errors are issued for lists containing nothing but empty lists.
   made spadcolors30.c into an archived library by the name of libColors.a, 
   source file changed to spadcolors.c; makeColors' arguments have changed 
   and now returns the number of colors allocated - not a pointer to the 
   pixel map
   saymem, check, etc. moved to util.c for library archive
   added a view.h file, with macros to be used by all view programs
   monoColor(x) macro (in view.h) replaces spadColors[x] calls in case 
   display is monochromatic (in global variable mono)
   tube.c: connecting of slices - polygon points changed to outline the 
   rectangular regions without the diagonals (may be prettier when outlines 
   are sketched...slightly, if no split occurs).
   clipping model: both against the hither plane as well as with a 
   clipping volume
   viewport3D.c: made polygon list for functions of two variables so
   that it could call the general hidden surface algorithm (in tube.c) as
   well (turns out that back to front property of 3D explicit equations is
   not preserved when viewed with perspective)
   added volume.c, volume.h for the frustrum (perspective), projected clipping
   and clip volume interface
 
version25: 
  view3D: added long jump to address signals that arrive while in the
          XNextEvent call. spadSignalHandler() now calls spadAction()
          if a signal is received.
  view2D: added query button and messages for each graph image
          (viewport2D.c, control.c, process.c)
  view3D: tube.c: improved speed of drawPolygon by creating overlapped
          list for unmoved polygon, and list for moved polygon that
          may be smaller than the entire list. 
          see "Notes on the Depth Sort Algorithm" for strategy, etc.
          tube.c: moved the resetting of the variables relevant to recalc
          from process.c to tube.c (rotated, switchedPerspective, 
          changedEyeDistance)
  GraphImage now supports 2D primitives like point(), component(), addPoint()
  ViewportDefaultsPackage now exports viewXPos() and stuff; all references
  to integers have been replaced by the more restrictive subdomains 
  (e.g. PositiveInteger, NonNegativeInteger)
  ViewportPackage has dwindled to just drawCurves() and graphCurves()
  view2D, view3D: put in more robust signal handling routines so that
  signals from the viewport manager (Scratchpad) are all processed properly.
  the condition where the user is not allowed to use the control panel of the
  viewport that Scratchpad is sending commands to no longer exists!!!! wow!!!
  simultaneous processing without a race condition occuring (sorta) should
  not occur anymore.
  view3D: modification to keepDrawingViewport() so that signals also causes
  a return of no. this allows Scratchpad input files to be indistinguishable
  from interactive commands from a control panel! (that is, drawViewport()
  no longer need to complete the drawing if it was called from Scratchpad.)
  view2D: spadAction(): now only redraws viewport if the info was received for
  a graph image that is being shown
  view2D: fixed up pick/drop hangup problem. the "dodat" variable in process.c
  needed to be reset earlier, and in each separate routine (pick, drop and 
  query) that required sequential button clicks (e.g. 
  "Drop" + graph number "1").
  view2D: added global variable queriedGraph - so that the last queried graph
  will always be the one displayed.
  view2D.spad: default to points off
  added inverse and monochrome fields in .Xdefaults 
  (e.g. view3D*monochrome : on)
  BUG FIXED: clipping of wire mesh for tubes
  view3D.spad: function of three variables for color specifications ==> changes
  in viewman, viewAlone, and view3D to accept additional information.
  structure of fun2VarModel in view3D.h changes *** not backwards 
  compatible with version24.
  BUG FOUND: viewport3D.c still drawing the function of 2 variables
  without perspective (painter's algorithm without processing) wrong!
  BUG FIXED: this time, for shur. flipped quadrants II and IV to remedy bug 
  found in painter's algorithm in viewport3D.c.
  tube.c (view3D): changed routine that redraws quickly from the saved up list
  of processed polygons from the hidden surface algorithm so that each polygon

version 26: 
  view3D: switched over to a generalized subspace points definition.
  so far, wire meshes work for existing types. code in viewport3D.c and tube.c
  are replaced by one more general in component.c; size reduced in half. 
  include: modified=[view3D.h] new=[component.h]
  view3D: modified=[viewport3D.c, tube.c] new=[component.c]
  viewman: modified=[fun3D.c, make3D.c]
  representation should also handle future 3D things - like space curves, 
  points and stuff without new data structures.
  NEED: take out unused code
  component.spad there temporarily to handle the new representation on the 
  algebra side point.spad deals with the new representation in more 
  generality on the algebra side
  NEED: interface to rest of algebra world
  view2D: draw dashed line if ticks are too close. view2D: 
  modified=[viewport2D.c]
  coord.spad added for coordinate transformation
  XSpadFill.c in the src/ directory for shade dithering in color - affects:
  src: modified=[spadcolors.c, spadcolors.h] new=[XSpadFill.c]
  view3D: modified=[globals.h, main.c, tube.c]
  view2D: added tick labels for 2D
  view2D: modified=[viewport2D.c]
  view3D: tube.c replaced by surface.c and project.c
  viewman: for hue and shade fields in 2D, spad is one based and the viewport
  stuff is 0 based. modified=[makeGraph.c]
  --- backed up on tape ---
  replaced sprintf of XGetDefault value with direct assignment since 
  XGetDefault may  return a NULL value which causes sprintf to freak out 
  (xDefault is now pointer to char rather than a character array)
  view2D: modified=[globals.h, main.c]   
  view3D: modified=[globals.h, main.c]   
  BUG FOUND: on the PS2, redraws of hidden surface with saved data (quickList)
  bombs.
  BUG FIXED: no more bombs of quick draws
  view3D: modified=[surface.c (previously, tube.c)]
  put in SIGTERM handlers so that a kill signal to viewman would cause it 
  exit cleanly (that is, kill all the child processes and then exit)
  viewman: modified=[viewman.h, viewman.c, cleanup.c]
  view3D: modified=[main.c]
  view2D: modified=[main.c]
  viewWoman: modified=[viewWoman.c]

version27: 
  3D primitives: added type flag to polygon structure (for 3D primitives) - 
  may or may not actually be used
  include: modified=[tube.c]
  added "#define smwattDefaultToFast" which, when defined, defaults to the 
  simple back-to-front draw rather than the full depth sort processes 
  (click middle button to switch)
  BUG FIXED: title reading in viewAlone (to add \0 on top of the \newline 
  fgets reads in)
  viewAlone: modified=[spoon2D.c, spoonComp.c]
  points in 3D stored as references (indices) into a pool of points
  include: modified=[tube.h, component.h]
  view3D: modified=[main.c, project.c, surface.c, component.c]
  added (maybe last version...?) window manager override flag in override.h 
  file which sets to true or false (e.g. Presentation Manager may need 
  override=false)
  BUG FIXED: after the 3D stuff saves the ordering of polygons, the quick draw
  misses the last polygon...had to change doNotStopDraw flag to affect the 
  subsequent polygon.
  view3D: modified=[surface.c]
  added a development header file for temporary defines
  include: added=[DEVE.h]
  part II:
  BUG FOUND: 3D color bar goes off the positive end
  BUG FIXED: the color bar error
  view3D: modified=[process.c]
  put XMapWindow after the drawViewport in make3DComponents - fixes the 
  problem of having an empty viewport window come up with no well defined data
  view3D: modified=[component.c]
  view3D: initialize the numOfPolygons and polygons field right before they're
  used (as opposed to whereever i had them before)
  view3D: modified=[component.c]
\end{verbatim}

\section{Directory overview}

\subsection{Environment variables}

<<environment>>=
SUBDIRS = Gdraws viewman view2D view3D viewAlone

pamphlets = fileformats.pamphlet Makefile.pamphlet
@

\subsection{The viewman directory}

<<viewmandir>>=
all-viewman: all-Gdraws
	cd viewman && ${MAKE}
@

\subsection{The Gdraws directory}

<<Gdrawsdir>>=
all-Gdraws: 
	@$(mkinstalldirs) $(axiom_target_libdir)/graph
	cd Gdraws && ${MAKE}
@

\subsection{The view3D directory}

<<view3Ddir>>=
all-view3D: all-Gdraws
	cd view3D && ${MAKE}
@

\subsection{The view2D directory}

<<view2Ddir>>=
all-view2D: all-Gdraws
	cd view2D && ${MAKE}
@

\subsection{The viewAlone directory}

<<viewAlonedir>>=
all-viewAlone: all-Gdraws
	cd viewAlone && ${MAKE}
@

\section{Documentation}

\subsection{environment variables}

<<fileformats>>=

parabola/data parabola/graph0: $(srcdir)/fileformats.pamphlet
	$(axiom_build_document) --tangle=`basename $@` --output=$@ $<
@

<<*>>=
<<environment>>

subdir = src/graph/

pamphlets = Makefile.pamphlet

.PHONY: all all-ax all-graph
all: all-ax

all-ax all-graph: stamp
	@ echo 24 finished ${IN}

stamp: all-subdirs parabola/data parabola/graph0
	$(STAMP) stamp

.PHONY: all-subdirs
all-subdirs: all-subdirs.pre all-subdirs.rest

.PHONY: all-subdirs.pre
all-subdirs.pre:
	-rm -f stamp
	$(mkinstalldirs) parabola

.PHONY: all-subdirs.rest
all-subdirs.rest: all-subdirs.pre all-Gdraws all-viewman \
		  all-view2D all-view3D all-viewAlone


<<viewmandir>>
<<Gdrawsdir>>
<<view3Ddir>>
<<view2Ddir>>
<<viewAlonedir>>

<<fileformats>>

mostlyclean-local:

clean-local: mostlyclean-local
	@rm -f parabola/data parabola/graph0

distclean-local: clean-local

@
\eject
\begin{thebibliography}{99}
\bibitem{1} nothing
\end{thebibliography}
\end{document}