aboutsummaryrefslogtreecommitdiff
path: root/src/graph/view3D/testcol.c.pamphlet
diff options
context:
space:
mode:
Diffstat (limited to 'src/graph/view3D/testcol.c.pamphlet')
-rw-r--r--src/graph/view3D/testcol.c.pamphlet622
1 files changed, 0 insertions, 622 deletions
diff --git a/src/graph/view3D/testcol.c.pamphlet b/src/graph/view3D/testcol.c.pamphlet
deleted file mode 100644
index a9f6aa3f..00000000
--- a/src/graph/view3D/testcol.c.pamphlet
+++ /dev/null
@@ -1,622 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/graph/view3D testcol.c}
-\author{The Axiom Team}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-\section{License}
-<<license>>=
-/*
-Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
-
- - Neither the name of The Numerical ALgorithms Group Ltd. nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-@
-<<*>>=
-<<license>>
-
-#define _MAIN3D_C
-#include "axiom-c-macros.h"
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <signal.h>
-#include <math.h>
-
-#include "header.h"
-#include "cpanel.h"
-#include "process.h"
-#include "bsdsignal.h"
-
-#include "bsdsignal.H1"
-#include "util.H1"
-#include "Gfun.H1"
-#include "XSpadFill.H1"
-#include "XShade.H1"
-#include "all_3d.H1"
-
-#include "spadBitmap.bitmap"
-#include "spadMask.mask"
-
-viewPoints *viewport;
-GCptr GChead=NULL; /* ptr to head of ps GC linked list */
-char *PSfilename; /* output file name used in user directory */
-int psInit=no; /* need to call globaInitPs() each run */
-char *envAXIOM; /* used for ps file paths */
-int maxGreyShade=0;
-GC globalGC1, globalGC2, anotherGC, globGC, trashGC,
- controlMessageGC, lightingGC, volumeGC, quitGC, processGC,
- saveGC, graphGC, componentGC, opaqueGC, renderGC;
-unsigned long foregroundColor, backgroundColor;
-int Socket=1, ack=1;
-Colormap colorMap;
-viewTriple *splitPoints;
-Display *dsply;
-int scrn;
-Window rtWindow;
-HashTable *table;
-int mono, totalColors, totalSolid, totalDithered, totalHues,
- totalSolidShades, totalDitheredAndSolids,totalShades;
-XFontStruct *globalFont, *buttonFont, *headerFont, *titleFont, *graphFont,
- *lightingFont, *volumeFont, *quitFont, *saveFont,*serverFont;
-XGCValues gcVals;
-unsigned long * spadColors;
-float transform[4][4], transform1[4][4],
- R[4][4], R1[4][4], S[4][4], T[4][4], I[4][4];
-float A[4][4], B[4][4], D[4], E[4][4], F[4], array[4][4];
-
-int followMouse=no,
- viewportKeyNum=0;
- /**********************/
- /** global variables **/
- /**********************/
-
-char scaleReport[5];
-char deltaXReport[5], deltaYReport[5];
-XSizeHints viewSizeHints;
-
-GC processGC;
-viewPoints *viewport;
-controlPanelStruct *control;
-char *s;
-int someInt;
-
-/* check /usr/include/X11 for current implementation of
- pixels (e.g. BlackPixel()) */
-
- /** totalShades is initially set to totalShadesConst.
- If X cannot allocate 8 shades for each hue, total-
- Shades is decremented. there is currently only a check for
- this value to be positive. --> something to add: change over
- to monochrome if totalShades=0. just modify the spadcolors.c
- file. spadcolors.c has been modified so that it returns the
- value for totalShades. since the return value had previously
- been unused, a modification in this way ensures continued
- support of other routines calling this function (e.g.
- hypertex stuff). **/
-
-
-int drawMore;
-
-int spadMode=no, /* yes if receiving AXIOM command and
- calling drawViewport */
- spadDraw=no; /* yes if drawing viewport for
- an AXIOM command */
-int spadSignalReceived=0; /* yes if current state is a result of
- a signal from AXIOM */
-int inNextEvent=no; /* true just before a call to
- XNextEvent */
-jmp_buf jumpFlag;
-
-char errorStr[80];
-
-view3DStruct viewData;
-
-Window quitWindow, saveWindow;
-
- /** variables below assume only one viewport per process **/
-
-Window lightingWindow, lightingAxes;
-float lightPointer[3], tempLightPointer[3];
-
-int axesXY[3][4];
-float axesZ[3][2];
-
-float lightIntensity=1.0, tempLightIntensity;
-float backLightIntensity = 1.0;
-
- /** used for writing viewport info out to a file **/
-char filename[256];
-
-
- /** used for draw viewport routines */
-float sinTheta, sinPhi, cosTheta, cosPhi, viewScale,
- viewScaleX, viewScaleY, viewScaleZ, reScale;
-int xCenter, yCenter;
-
-XWindowAttributes vwInfo;
-XWindowAttributes graphWindowAttrib;
-
-XPoint *quadMesh;
-XImage *imageX;
-int *xPts; /* pointer to projected points (x followed by y) */
-float transform[4][4], transform1[4][4],
- R[4][4], R1[4][4], S[4][4], T[4][4], I[4][4];
-float A[4][4], B[4][4], D[4], E[4][4], F[4], array[4][4];
-
-
-int scanline, polyCount;
-polyList *scanList[ARRAY_HEIGHT];
-float xleft = (float)0 ,xright = (float)ARRAY_WIDTH;
-
-colorBuffer cBuffer[ARRAY_WIDTH];
-float zBuffer[ARRAY_WIDTH];
-
-float zC, dzdx, lum, point_norm[3];
-float intersectColor[2], dcolor;
-triple dpt, dnorm;
-
- /** eyePoint **/
-float eyePoint[3];
-
- /** tube stuff **/
-XPoint polygonMesh[20];
-
- /* bypass the hidden surface algorithm if no rotations, etc */
-int saveFlag=no;
-int firstTime=yes, noTrans = yes, startup = yes;
-int redrawView = no; /* set to yes when returning from
- subpanels */
-int redoColor = no, pixelSetFlag = no, redoDither = no;
-int redoSmooth = no, multiColorFlag = no;
-
-/* In order to set recalc to true (see draw.h) */
-int finishedList=no, zoomed=yes, translated = yes,
- changedIntensity, movingLight = no, writeImage = no,
- rotated=yes, switchedPerspective, changedEyeDistance,
- gotToggle = no;
-poly *quickList;
-
- /** if not connected to AXIOM **/
-int viewAloned;
-
- /** for drawing the box **/
-viewTriple corners[8], clipCorners[8];
-boxSideStruct box[6], clipBox[6];
-
- /** for freeing up points created frrom split polygons **/
-int resMax=0; /* number of points in the split point resevoir */
-
- /** view volume stuff **/
-Window volumeWindow;
-int frustrumVertex;
-int doingPanel=CONTROLpanel; /* rewrite titles in proper panel */
-int doingVolume;
-
-int screenX; /* global floating point indicating mouse position
- on frustrum screen */
-float xClipMinN, xClipMaxN, /* normalized values for
- clip volume */
- yClipMinN, yClipMaxN,
- zClipMinN, zClipMaxN,
- clipValue; /* mouse input */
-float pzMin, pzMax; /* for a given (theta,phi): calculated in
- drawViewport(), used in drawFrustrum() */
-
- /** B/W shades **/
- /** events from the viewport manager **/
-char propertyName[14];
-char propertyBuffer[256];
-
- /* global ps variables */
-
- /** Resource database **/
-XrmDatabase rDB;
-
- /** variables used for smooth shading **/
-int smoothError = no;
-Pixmap viewmap;
-float Cspec = 0.30;
-float Cdiff = 0.4;
-float Camb = 0.3;
-float coeff = 35.0;
-float saturation = 0.8;
-int smoothHue;
-int smoothConst = 50;
-
-
-
-
-void
-#ifdef _NO_PROTO
-main()
-#else
-main(void)
-#endif
-{
-
- XGCValues controlGCVals;
- int i, code;
-
- char property[256];
- char *prop = &property[0];
- char *str_type[20];
- XrmValue value;
-
- Atom wm_delete_window;
- XColor foreColor, backColor;
- XSizeHints titleSizeHints;
- Window viewTitleWindow, viewGraphWindow;
- XSetWindowAttributes viewAttrib;
- Pixmap spadbits,spadmask;
-
- /**** Global inits ****/
- splitPoints = NIL(viewTriple);
-
- /**** Set up display ****/
- if ((dsply = XOpenDisplay(getenv("DISPLAY"))) == NULL)
- {fprintf(stderr,"Could not open display.\n");exit (-1);}
- scrn = DefaultScreen(dsply);
- rtWindow = RootWindow(dsply,scrn);
-
- /**** link Xwindows to viewports - X10 feature ****/
- table = XCreateAssocTable(nbuckets);
-
- /**** Create AXIOM color map ****/
- totalShades = 0;
- totalColors = XInitSpadFill(dsply,scrn,&colorMap,
- &totalHues,&totalSolidShades,
- &totalDitheredAndSolids,&totalShades);
- if (totalColors < 0) {
- fprintf(stderr,"ERROR: Could not allocate all the necessary colors.\n");
- exitWithAck(RootWindow(dsply,scrn),Window,-1);
- }
-
-
-
- PSGlobalInit();
- /* must initiate before using any G/PS functions */
- /* need character name: used as postscript GC variable */
- /* need to create ps GCs for all GCs used by drawing in viewWindow */
-
- /* globalGC1 */
- controlGCVals.foreground = monoColor(axesColor);
- controlGCVals.background = backgroundColor;
- globalGC1 = XCreateGC(dsply,rtWindow,GCForeground |
- GCBackground ,&controlGCVals);
- carefullySetFont(globalGC1,globalFont);
- PSCreateContext(globalGC1, "globalGC1", psNormalWidth, psButtCap,
- psMiterJoin, psWhite, psBlack);
-
- /* controlMessageGC */
- controlGCVals.foreground = controlMessageColor;
- controlGCVals.background = backgroundColor;
- controlMessageGC = XCreateGC(dsply,rtWindow,GCForeground |
- GCBackground ,&controlGCVals);
- carefullySetFont(controlMessageGC,globalFont);
-
- /* globalGC2 */
- controlGCVals.foreground = monoColor(labelColor);
- globalGC2 = XCreateGC(dsply,rtWindow,GCForeground,&controlGCVals);
- carefullySetFont(globalGC2,buttonFont);
- PSCreateContext(globalGC2, "globalGC2", psNormalWidth, psButtCap,
- psMiterJoin, psWhite, psBlack);
-
- /* trashGC */
- controlGCVals.function = GXcopy;
- trashGC = XCreateGC(dsply,rtWindow,0 ,&controlGCVals);
- carefullySetFont(trashGC,buttonFont);
- PSCreateContext(trashGC, "trashGC", psNormalWidth, psButtCap,
- psMiterJoin, psWhite, psBlack);
-
- /* componentGC */
- componentGC = XCreateGC(dsply,rtWindow,0 ,&controlGCVals);
- carefullySetFont(componentGC,buttonFont);
- PSCreateContext(componentGC, "componentGC", psNormalWidth, psButtCap,
- psMiterJoin, psWhite, psBlack);
-
- /* opaqueGC */
- opaqueGC = XCreateGC(dsply,rtWindow,0 ,&controlGCVals);
- carefullySetFont(opaqueGC,buttonFont);
- PSCreateContext(opaqueGC, "opaqueGC", psNormalWidth, psButtCap,
- psMiterJoin, psWhite, psBlack);
-
- /* renderGC */
- renderGC = XCreateGC(dsply,rtWindow,0,&controlGCVals);
- carefullySetFont(renderGC,buttonFont);
- PSCreateContext(renderGC, "renderGC", psNormalWidth, psButtCap,
- psMiterJoin, psWhite, psBlack);
-
- /* globGC */
- globGC = XCreateGC(dsply,rtWindow,0,&controlGCVals);
- carefullySetFont(globGC,headerFont);
- PSCreateContext(globGC, "globGC", psNormalWidth, psButtCap,
- psMiterJoin, psWhite, psBlack);
-
- /* anotherGC */
- controlGCVals.line_width = colorWidth;
- anotherGC = XCreateGC(dsply,rtWindow,GCBackground | GCLineWidth |
- GCFunction ,&controlGCVals);
- carefullySetFont(anotherGC,titleFont);
- PSCreateContext(anotherGC, "anotherGC", psNormalWidth, psButtCap,
- psMiterJoin, psWhite, psBlack);
-
- /* also create one for rendering (grayscale only for now) */
- /* assign arbitrary number to renderGC as 9991 - see header.h */
- PSCreateContext(GC9991, "renderGC", psNormalWidth, psButtCap,
- psRoundJoin, psWhite, psBlack );
-
-
- /* processGC */
- gcVals.background = backgroundColor;
- processGC = XCreateGC(dsply,rtWindow,GCBackground |
- GCFillStyle,&gcVals);
- carefullySetFont(processGC,buttonFont);
-
- /* lightingGC */
- controlGCVals.foreground = monoColor(axesColor);
- controlGCVals.background = backgroundColor;
- lightingGC = XCreateGC(dsply,rtWindow,GCForeground | GCBackground
- ,&controlGCVals);
- carefullySetFont(lightingGC,lightingFont);
-
-
- /* volumeGC */
- volumeGC = XCreateGC(dsply,rtWindow,GCForeground | GCBackground
- ,&controlGCVals);
- carefullySetFont(volumeGC,volumeFont);
-
- /* quitGC */
- quitGC = XCreateGC(dsply,rtWindow,GCForeground | GCBackground
- ,&controlGCVals);
- carefullySetFont(quitGC,buttonFont);
-
- /* saveGC */
- saveGC = XCreateGC(dsply,rtWindow,GCForeground | GCBackground
- ,&controlGCVals);
- carefullySetFont(saveGC,buttonFont);
-
-
- /* graphGC */
- graphGC = XCreateGC(dsply,rtWindow,GCForeground | GCBackground
- ,&controlGCVals);
- carefullySetFont(graphGC,buttonFont);
- if (!(viewport = (viewPoints *)saymem("viewport3D.c",
- 1,sizeof(viewPoints)))) {
- fprintf(stderr,"Ran out of memory trying to create a viewport.\n");
- exitWithAck(RootWindow(dsply,scrn),Window,-1);
- }
- /* Definition of the 4x4 identity matrix. */
- I[0][0] = 1.0; I[0][1] = 0.0; I[0][2] = 0.0; I[0][3] = 0.0;
- I[1][0] = 0.0; I[1][1] = 1.0; I[1][2] = 0.0; I[1][3] = 0.0;
- I[2][0] = 0.0; I[2][1] = 0.0; I[2][2] = 1.0; I[2][3] = 0.0;
- I[3][0] = 0.0; I[3][1] = 0.0; I[3][2] = 0.0; I[3][3] = 1.0;
-
- viewport->viewportKey = viewportKeyNum++;
- viewport->nextViewport = 0;
- viewport->prevViewport = 0;
- viewport->deltaX = viewport->deltaX0 = viewData.deltaX;
- viewport->deltaY = viewport->deltaY0 = viewData.deltaY;
- viewport->deltaZ = viewport->deltaZ0 = viewData.deltaZ;
- viewport->scale = viewport->scale0 = viewData.scale;
- viewport->scaleX = viewData.scaleX;
- viewport->scaleY = viewData.scaleY;
- viewport->scaleZ = viewData.scaleZ;
- viewport->transX = (viewData.xmax + viewData.xmin)/2.0;
- viewport->transY = (viewData.ymax + viewData.ymin)/2.0;
- viewport->transZ = (viewData.zmax + viewData.zmin)/2.0;
-
- viewport->theta = viewport->axestheta = viewport->theta0 = viewData.theta;
- viewport->phi = viewport->axesphi = viewport->phi0 = viewData.phi;
- viewport->thetaObj = 0.0;
- viewport->phiObj = 0.0;
-
- viewData.title = "untitled";
- strcpy(viewport->title,viewData.title);
-
- viewport->axesOn = yes;
- viewport->regionOn = no;
- viewport->monoOn = no;
- viewport->zoomXOn = yes;
- viewport->zoomYOn = yes;
- viewport->zoomZOn = yes;
-
- viewport->originrOn = yes;
- viewport->objectrOn = no;
- viewport->originFlag = no;
-
- viewport->xyOn = no;
- viewport->xzOn = no;
- viewport->yzOn = no;
-
- viewport->closing = no;
- viewport->allowDraw = yes; /*if no, just draw axes the first time */
- viewport->needNorm = yes;
-
- viewport->lightVector[0] = -0.5;
- viewport->lightVector[1] = 0.5;
- viewport->lightVector[2] = 0.5;
- viewport->translucency = viewData.translucency;
-
- viewport->hueOffset = viewData.hueOff;
- viewport->numberOfHues = viewData.numOfHues;
- viewport->hueTop = viewData.hueOff + viewData.numOfHues;
- if (viewport->hueTop > totalHues-1) viewport->hueTop = totalHues-1;
- viewport->diagonals = viewData.diagonals;
-
- /* make theta in [0..2pi) and phi in (-pi..pi] */
- while (viewport->theta >= two_pi) {
- viewport->theta -= two_pi;
- }
- while (viewport->theta < 0.0) {
- viewport->theta += two_pi;
- }
- while (viewport->phi > pi) {
- viewport->phi -= two_pi;
- }
- while (viewport->phi <= -pi) {
- viewport->phi += two_pi;
- }
-
- while (viewport->axestheta >= two_pi) {
- viewport->axestheta -= two_pi;
- }
- while (viewport->axestheta < 0.0) {
- viewport->axestheta += two_pi;
- }
- while (viewport->axesphi > pi) {
- viewport->axesphi -= two_pi;
- }
- while (viewport->axesphi <= -pi) {
- viewport->axesphi += two_pi;
- }
-
- /* Initialize the rotation matrix about the origin. */
- sinTheta = sin(-viewport->theta);
- cosTheta = cos(-viewport->theta);
- sinPhi = sin(viewport->phi);
- cosPhi = cos(viewport->phi);
- ROTATE(R); /* angles theta and phi are global */
-
- /* Initialize the rotation matrix about the object's center of volume. */
- sinTheta = sin(-viewport->thetaObj);
- cosTheta = cos(-viewport->thetaObj);
- sinPhi = sin(viewport->phiObj);
- cosPhi = cos(viewport->phiObj);
- ROTATE1(R1); /* angles theta and phi are global */
-
-
- /* Initialize the non-uniform scaling matrix. */
- SCALE(viewport->scaleX,viewport->scaleY,viewport->scaleZ,S);
- /* Initialize the translation matrix. */
- TRANSLATE(-viewport->deltaX,-viewport->deltaY,0.0,T);
- /**** make the windows for the viewport ****/
- spadbits = XCreateBitmapFromData(dsply,rtWindow,
- spadBitmap_bits,
- spadBitmap_width,spadBitmap_height);
- spadmask = XCreateBitmapFromData(dsply,rtWindow,
- spadMask_bits,
- spadMask_width,spadMask_height);
- viewAttrib.background_pixel = backgroundColor;
- viewAttrib.border_pixel = foregroundColor;
-
- viewAttrib.override_redirect = overrideManager;
-
- viewAttrib.colormap = colorMap;
- foreColor.pixel = foregroundColor;
- backColor.pixel = backgroundColor;
-/*
- foreColor.pixel = viewCursorForeground;
- backColor.pixel = viewCursorBackground;
-*/
- XQueryColor(dsply,colorMap,&foreColor);
- XQueryColor(dsply,colorMap,&backColor);
- viewAttrib.cursor = XCreatePixmapCursor(dsply,spadbits,spadmask,
- &foreColor,&backColor,spadBitmap_x_hot,spadBitmap_y_hot);
- viewAttrib.event_mask = titleMASK;
- if (viewData.vW) {
- titleSizeHints.flags = PPosition | PSize;
- titleSizeHints.x = viewData.vX;
- titleSizeHints.y = viewData.vY;
- titleSizeHints.width = viewData.vW;
- titleSizeHints.height = viewData.vH;
- } else { /* ain't gonna allow this for now... */
- titleSizeHints.flags = PSize;
- titleSizeHints.width = viewWidth;
- titleSizeHints.height = viewHeight;
- }
-
- viewTitleWindow = XCreateWindow(dsply,rtWindow,viewData.vX,viewData.vY,
- viewData.vW,viewData.vH,viewBorderWidth+3,
- CopyFromParent,InputOutput,CopyFromParent,
- viewportTitleCreateMASK,&viewAttrib);
-
- wm_delete_window = XInternAtom(dsply, "WM_DELETE_WINDOW", False);
- (void) XSetWMProtocols(dsply, viewTitleWindow, &wm_delete_window, 1);
-
- XSetNormalHints(dsply,viewTitleWindow,&titleSizeHints);
- if (strlen(viewport->title) < 30)
- XSetStandardProperties(dsply,viewTitleWindow,"AXIOM 3D",viewport->title,
- None,NULL,0,&titleSizeHints);
- else
- XSetStandardProperties(dsply,viewTitleWindow,"AXIOM 3D","3D AXIOM Graph",
- None,NULL,0,&titleSizeHints);
- viewport->titleWindow = viewTitleWindow;
-
- viewAttrib.event_mask = viewportMASK;
- viewSizeHints.flags = PPosition | PSize;
- viewSizeHints.x = -(viewBorderWidth+3);
- viewSizeHints.y = titleHeight;
- viewSizeHints.width = titleSizeHints.width;
- viewSizeHints.height = titleSizeHints.height-(titleHeight+appendixHeight);
- viewGraphWindow = XCreateWindow(dsply,viewTitleWindow,
- viewSizeHints.x,viewSizeHints.y,
- viewSizeHints.width,viewSizeHints.height,
- viewBorderWidth+3,
- CopyFromParent,InputOutput,CopyFromParent,
- viewportCreateMASK,&viewAttrib);
- XSetNormalHints(dsply,viewGraphWindow,&viewSizeHints);
- XSetStandardProperties(dsply,viewGraphWindow,"","",None,NULL,0,
- &viewSizeHints);
- viewport->viewWindow = viewGraphWindow;
- graphWindowAttrib.width = viewSizeHints.width;
- graphWindowAttrib.height = viewSizeHints.height;
-
- if (viewport->hueOffset != viewport->hueTop) {
- multiColorFlag = yes;
- redoColor = no;
- } else {
- if (viewport->hueTop < 11)
- smoothHue = viewport->hueTop*6;
- else {
- if (viewport->hueTop > 10 && viewport->hueTop < 16)
- smoothHue = viewport->hueTop*20 - 140;
- else smoothHue = viewport->hueTop*12 - 12;
- }
- redoColor = yes;
- }
-
-
-} /* main() */
-
-
-
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}