Annotation of OpenXM_contrib/pari-2.2/src/graph/rect.h, Revision 1.1
1.1 ! noro 1: /* $Id: rect.h,v 1.8 2000/11/03 21:00:24 karim Exp $
! 2:
! 3: Copyright (C) 2000 The PARI group.
! 4:
! 5: This file is part of the PARI/GP package.
! 6:
! 7: PARI/GP is free software; you can redistribute it and/or modify it under the
! 8: terms of the GNU General Public License as published by the Free Software
! 9: Foundation. It is distributed in the hope that it will be useful, but WITHOUT
! 10: ANY WARRANTY WHATSOEVER.
! 11:
! 12: Check the License for details. You should have received a copy of it, along
! 13: with the package; see the file 'COPYING'. If not, write to the Free Software
! 14: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
! 15:
! 16: #define PLOT_NAME_LEN 20
! 17: #define NUMRECT 18
! 18:
! 19: #define DTOL(t) ((long)(t + 0.5))
! 20:
! 21: typedef struct PARI_plot {
! 22: long width;
! 23: long height;
! 24: long hunit;
! 25: long vunit;
! 26: long fwidth;
! 27: long fheight;
! 28: long init;
! 29: char name[PLOT_NAME_LEN+1];
! 30: } PARI_plot;
! 31:
! 32: extern PARI_plot pari_plot, pari_psplot;
! 33:
! 34: #define w_height (pari_plot.height)
! 35: #define w_width (pari_plot.width)
! 36: #define f_height (pari_plot.fheight)
! 37: #define f_width (pari_plot.fwidth)
! 38: #define h_unit (pari_plot.hunit)
! 39: #define v_unit (pari_plot.vunit)
! 40: #define lmargin (f_width*10)
! 41: #define rmargin (h_unit - 1)
! 42: #define tmargin (v_unit - 1)
! 43: #define bmargin (v_unit + f_height - 1)
! 44:
! 45: typedef struct dblPointList{
! 46: double *d; /* data */
! 47: long nb; /* number of elements */
! 48: double xsml,xbig,ysml,ybig; /* extrema */
! 49: } dblPointList;
! 50:
! 51: typedef struct RectObj {
! 52: struct RectObj *next;
! 53: long code,color;
! 54: } RectObj;
! 55:
! 56: typedef struct PariRect {
! 57: RectObj *head,*tail;
! 58: long sizex,sizey;
! 59: double cursorx,cursory;
! 60: double xscale,yscale;
! 61: double xshift,yshift;
! 62: long has_graph; /* xy-ranges of this rectangle should be used
! 63: for interactive operations. */
! 64: } PariRect;
! 65:
! 66: /* The structures below are "subclasses" of RectObj. */
! 67:
! 68: typedef struct RectObj1P {
! 69: struct RectObj *next;
! 70: long code,color;
! 71: double x,y;
! 72: } RectObj1P;
! 73:
! 74: typedef struct RectObj2P {
! 75: struct RectObj *next;
! 76: long code,color;
! 77: double x1,y1;
! 78: double x2,y2;
! 79: } RectObj2P;
! 80:
! 81: typedef struct RectObjMP {
! 82: struct RectObj *next;
! 83: long code,color;
! 84: long count;
! 85: double *xs,*ys;
! 86: } RectObjMP;
! 87:
! 88: typedef struct RectObjST {
! 89: struct RectObj *next;
! 90: long code,color;
! 91: long length;
! 92: char *s;
! 93: double x,y;
! 94: long dir;
! 95: } RectObjST;
! 96:
! 97: typedef struct RectObjPN {
! 98: struct RectObj *next;
! 99: long code,color;
! 100: long pen;
! 101: } RectObjPN;
! 102:
! 103: typedef struct RectObjPS {
! 104: struct RectObj *next;
! 105: long code,color;
! 106: double size;
! 107: } RectObjPS;
! 108:
! 109: #define BLACK 1 /* Default */
! 110: #define BLUE 2 /* Axes */
! 111: #define SIENNA 3 /* Odd numbered curves in ploth */
! 112: #define RED 4 /* Curves, or Even numbered curves in ploth */
! 113: #define CORNSILK 5
! 114: #define GREY 6
! 115: #define GAINSBORO 7
! 116:
! 117: #define MAX_COLORS 8
! 118: #define DEFAULT_COLOR BLACK
! 119:
! 120: #define ROt_MV 0 /* Move */
! 121: #define ROt_PT 1 /* Point */
! 122: #define ROt_LN 2 /* Line */
! 123: #define ROt_BX 3 /* Box */
! 124: #define ROt_MP 4 /* Multiple point */
! 125: #define ROt_ML 5 /* Multiple lines */
! 126: #define ROt_ST 6 /* String */
! 127: #define ROt_PTT 7 /* Point type change */
! 128: #define ROt_LNT 8 /* Line type change */
! 129: #define ROt_PTS 9 /* Point size change */
! 130: #define ROt_NULL 10 /* To be the start of the chain */
! 131:
! 132: #define ROt_MAX 10 /* Maximal type */
! 133:
! 134: /* Pointer conversion. */
! 135:
! 136: #define RoMV(rop) ((RectObj1P*)rop)
! 137: #define RoPT(rop) ((RectObj1P*)rop)
! 138: #define RoLN(rop) ((RectObj2P*)rop)
! 139: #define RoBX(rop) ((RectObj2P*)rop)
! 140: #define RoMP(rop) ((RectObjMP*)rop)
! 141: #define RoML(rop) ((RectObjMP*)rop)
! 142: #define RoST(rop) ((RectObjST*)rop)
! 143: #define RoPTT(rop) ((RectObjPN*)rop)
! 144: #define RoPTS(rop) ((RectObjPS*)rop)
! 145: #define RoLNT(rop) ((RectObjPN*)rop)
! 146: #define RoNULL(rop) ((RectObj*)rop)
! 147:
! 148: /* All the access to the rectangle data _should_ go via these macros! */
! 149:
! 150: #define RHead(rp) ((rp)->head)
! 151: #define RTail(rp) ((rp)->tail)
! 152: #define RXsize(rp) ((rp)->sizex)
! 153: #define RYsize(rp) ((rp)->sizey)
! 154: #define RXcursor(rp) ((rp)->cursorx)
! 155: #define RYcursor(rp) ((rp)->cursory)
! 156: #define RXshift(rp) ((rp)->xshift)
! 157: #define RYshift(rp) ((rp)->yshift)
! 158: #define RXscale(rp) ((rp)->xscale)
! 159: #define RYscale(rp) ((rp)->yscale)
! 160: #define RHasGraph(rp) ((rp)->has_graph)
! 161:
! 162: #define RoNext(rop) ((rop)->next)
! 163: #define RoType(rop) ((rop)->code)
! 164: #define RoCol(rop) ((rop)->color)
! 165: #define RoMVx(rop) (RoMV(rop)->x)
! 166: #define RoMVy(rop) (RoMV(rop)->y)
! 167: #define RoPTx(rop) (RoPT(rop)->x)
! 168: #define RoPTy(rop) (RoPT(rop)->y)
! 169: #define RoLNx1(rop) (RoLN(rop)->x1)
! 170: #define RoLNy1(rop) (RoLN(rop)->y1)
! 171: #define RoLNx2(rop) (RoLN(rop)->x2)
! 172: #define RoLNy2(rop) (RoLN(rop)->y2)
! 173: #define RoBXx1(rop) (RoBX(rop)->x1)
! 174: #define RoBXy1(rop) (RoBX(rop)->y1)
! 175: #define RoBXx2(rop) (RoBX(rop)->x2)
! 176: #define RoBXy2(rop) (RoBX(rop)->y2)
! 177:
! 178: #define RoMPcnt(rop) (RoMP(rop)->count)
! 179: #define RoMPxs(rop) (RoMP(rop)->xs)
! 180: #define RoMPys(rop) (RoMP(rop)->ys)
! 181:
! 182: #define RoMLcnt(rop) (RoML(rop)->count)
! 183: #define RoMLxs(rop) (RoML(rop)->xs)
! 184: #define RoMLys(rop) (RoML(rop)->ys)
! 185:
! 186: #define RoSTs(rop) (RoST(rop)->s)
! 187: #define RoSTl(rop) (RoST(rop)->length)
! 188: #define RoSTx(rop) (RoST(rop)->x)
! 189: #define RoSTy(rop) (RoST(rop)->y)
! 190: #define RoSTdir(rop) (RoST(rop)->dir)
! 191:
! 192: #define RoSTdirLEFT 0x00
! 193: #define RoSTdirCENTER 0x01
! 194: #define RoSTdirRIGHT 0x02
! 195: #define RoSTdirHPOS_mask 0x03
! 196:
! 197: #define RoSTdirBOTTOM 0x00
! 198: #define RoSTdirVCENTER 0x04
! 199: #define RoSTdirTOP 0x08
! 200: #define RoSTdirVPOS_mask 0x0c
! 201:
! 202: #define RoSTdirHGAP 0x10
! 203: #define RoSTdirVGAP 0x20
! 204:
! 205:
! 206: #define RoPTTpen(rop) (RoPTT(rop)->pen)
! 207: #define RoLNTpen(rop) (RoLNT(rop)->pen)
! 208: #define RoPTSsize(rop) (RoPTS(rop)->size)
! 209:
! 210: #define PL_POINTS 1
! 211: #define GOODRECT(r) (0 <= r && r < NUMRECT)
! 212: #define GOODCOLOR(c) (1 <= c && c < MAX_COLORS)
! 213:
! 214: #define PLOT_PARAMETRIC 0x00001
! 215: #define PLOT_RECURSIVE 0x00002
! 216: #define PLOT_NO_RESCALE 0x00004
! 217: #define PLOT_NO_AXE_X 0x00008
! 218: #define PLOT_NO_AXE_Y 0x00010
! 219: #define PLOT_NO_FRAME 0x00020
! 220: #define PLOT_POINTS 0x00040
! 221: #define PLOT_POINTS_LINES 0x00080
! 222: #define PLOT_SPLINES 0x00100
! 223: #define PLOT_NO_TICK_X 0x00200
! 224: #define PLOT_NO_TICK_Y 0x00400
! 225: #define PLOT_NODOUBLETICK 0x00800
! 226:
! 227: #define PLOT_POSTSCRIPT 0x80000
! 228:
! 229: #define RECT_CP_RELATIVE 0x1
! 230: #define RECT_CP_NW 0x0
! 231: #define RECT_CP_SW 0x2
! 232: #define RECT_CP_SE 0x4
! 233: #define RECT_CP_NE 0x6
! 234:
! 235: #define TICKS_CLOCKW 1 /* Draw in clockwise direction */
! 236: #define TICKS_ACLOCKW 2 /* Draw in anticlockwise direction */
! 237: #define TICKS_ENDSTOO 4 /* Draw at endspoints if needed */
! 238: #define TICKS_NODOUBLE 8 /* Do not draw double-length ticks */
! 239:
! 240: /* Not implemented yet */
! 241: #define TICKS_COORD 16 /* Output [x,y,l,isdbl] for each tick */
! 242: #define TICKS_RELATIVE 32 /* x,y-coordinates are relative */
! 243:
! 244: extern PariRect **rectgraph;
! 245: extern long rectpoint_itype;
! 246: extern long rectline_itype;
! 247:
! 248: /* plotport.c */
! 249:
! 250: extern void initrect(long ne, long x, long y);
! 251: extern void initrect_gen(long ne, GEN x, GEN y, long flag);
! 252: extern void killrect(long ne);
! 253: extern void plot(entree *ep, GEN a, GEN b, char *ch, GEN ysmlu, GEN ybigu, long prec);
! 254: extern GEN ploth(entree *ep, GEN a, GEN b, char *ch, long prec, long flag, long numpoints);
! 255: extern GEN ploth2(entree *ep, GEN a, GEN b, char *ch, long prec);
! 256: extern GEN plothmult(entree *ep, GEN a, GEN b, char *ch, long prec);
! 257: extern GEN plothraw(GEN listx, GEN listy, long flag);
! 258: extern GEN plothsizes();
! 259: extern GEN plothsizes_flag(long flag);
! 260: extern void postdraw(GEN list);
! 261: extern void postdraw_flag(GEN list, long flag);
! 262: extern GEN postploth(entree *ep,GEN a,GEN b,char *ch,long prec,long flag,long numpoints);
! 263: extern GEN postploth2(entree *ep,GEN a,GEN b,char *ch,long prec,long numpoints);
! 264: extern GEN postplothraw(GEN listx, GEN listy, long flag);
! 265: extern void rectbox(long ne, GEN gx2, GEN gy2);
! 266: extern void rectcolor(long ne, long color);
! 267: extern void rectcopy(long source, long dest, long xoff, long yoff);
! 268: extern void rectcopy_gen(long source, long dest, GEN xoff, GEN yoff, long flag);
! 269: extern GEN rectcursor(long ne);
! 270: extern void rectdraw(GEN list);
! 271: extern void rectdraw_flag(GEN list, long flag);
! 272: extern void rectline(long ne, GEN gx2, GEN gy2);
! 273: extern void rectlines(long ne, GEN listx, GEN listy, long flag);
! 274: extern void rectlinetype(long ne, long t);
! 275: extern void rectmove(long ne, GEN x, GEN y);
! 276: extern GEN rectploth(long drawrect,entree *ep, GEN a, GEN b, char *ch, long prec, ulong flags, long testpoints);
! 277: extern GEN rectplothraw(long drawrect, GEN data, long flags);
! 278: extern void rectpoint(long ne, GEN x, GEN y);
! 279: extern void rectpoints(long ne, GEN listx, GEN listy);
! 280: extern void rectpointtype(long ne, long t);
! 281: extern void rectpointsize(long ne, GEN size);
! 282: extern void rectrbox(long ne, GEN gx2, GEN gy2);
! 283: extern void rectrline(long ne, GEN gx2, GEN gy2);
! 284: extern void rectrmove(long ne, GEN x, GEN y);
! 285: extern void rectrpoint(long ne, GEN x, GEN y);
! 286: extern void rectscale(long ne, GEN x1, GEN x2, GEN y1, GEN y2);
! 287: extern void rectstring(long ne, char *x);
! 288: extern void rectstring3(long ne, char *x, long dir);
! 289: extern void rectclip(long rect);
! 290:
! 291: /* architecture-dependent plot file (plotX.c, plotsun.c, plognuplot.c...) */
! 292:
! 293: extern void PARI_get_plot(long fatal);
! 294: extern long term_set(char *s);
! 295: extern long plot_outfile_set(char *s);
! 296: extern void set_pointsize(double d);
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>