0851
|
Scian.h,
ScianDatasets.h,
ScianDraw.c,
ScianMain.c,
ScianObjFunctions.c,
ScianPreferences.c,
ScianVisContours.c,
ScianVisMesh.c,
ScianVisTraces.c,
ScianVisWindows.c,
|
|
|
/*Scian.h
Standard header for scian.
Eric Pepke
February 9, 1990
*/
#include "machine.h"
/*If it's computation only, no interaction or graphics.*/
#ifdef COMPONLY
#undef GRAPHICS
#undef INTERACTIVE
#endif
#define GODLIKE
#ifdef RELEASE
#undef SOCKETS
#undef GODLIKE
#endif
#ifdef GODLIKE
#define PARANOID
#endif
#ifndef GRAPHICS
/*No graphics features at all*/
#undef WINDOWS4D
#undef MENUS4D
#undef FONTS4D
#undef CURSORS4D
#undef IRISNTSC
#undef GL4D
#undef INTERWINDRAG
#undef NOHIDEFRAME
#undef GRAPHOBJ
#endif
/*Yes, signals*/
#if 0
#define SIGNALS
#endif
#ifdef STDLIB
#include
#endif
#include
#include
#ifdef INTERACTIVE
#include
#include
#endif
#ifdef GRAPHICS
#ifdef FONTS4D
#include
#endif
#include
#if MACHINE == IRIS4D
#include
#include
#include
#endif
#else
typedef float Matrix[4][4];
#endif
#ifdef MALLOCH
#include
#else
extern void *malloc();
#endif
#include
#ifdef SOCKETS
#include
#include
#endif
#include
#include
#include
#include
#include
#include
#if MACHINE == RS6000
#include
#endif
#include
#ifdef SOCKETS
#include
#endif
#include
#include
#include
#if MACHINE == RS6000
#include
#endif
#ifdef TERMIO
#include
#endif
#ifndef INTERACTIVE
#undef DIALBOX
#endif
#ifndef DIAL0
#undef DIALBOX
#endif
#ifndef STDLIB
double strtod();
#endif
typedef int Bool; /*Our boolean stuff*/
#define true 1
#define false 0
/*C Variable types*/
typedef float real;
typedef real Quaternion[4];
/*Bits for flags*/
#define PLAINOBJECT 0 /*Plain object*/
#define REALARRAY 1 /*Array of real values*/
#define STRING 2 /*Single string value*/
#define INTEGER 3 /*Single integer value*/
#define REAL 4 /*Single real value*/
#define LIST 5 /*List of things*/
#define PALETTE 6 /*Palette of colors*/
#define OT_SHORTARRAY 7 /*Short array*/
#define WINDOW 8 /*Window*/
#define PICTURE 9 /*Picture of graphical objects*/
#define OBJECTARRAY 10 /*Array of objects*/
#define CONNECTION 11 /*Socket connection*/
#define SYMBOL 12 /*Symbol*/
#define OT_GEOMETRY 13 /*Geometry*/
#define OT_BYTEARRAY 14 /*Byte array*/
#define OT_POINTERARRAY 15 /*Pointer array*/
#define OT_POINTER 16 /*Pointer*/
#define HIGHESTFLAG 17 /*Highest flag*/
#define ISOBJECT PLAINOBJECT /*Kludge for backward compat.*/
#define OBJTYPEFLAGS 0xFF /*Object type flags*/
#define OBJTYPE(flags) ((flags) & 0xFF)
#define SETOBJTYPE(flags, type) (flags) = ((flags) & ~OBJTYPEFLAGS) | type
/*Object predicate, returns true iff theObj is an object*/
#define IsObject(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == PLAINOBJECT))
#define IsArray(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == REALARRAY))
#define IsByteArray(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == OT_BYTEARRAY))
#define IsRealArray(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == REALARRAY))
#define IsObjArray(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == OBJECTARRAY))
#define IsShortArray(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == OT_SHORTARRAY))
#define IsList(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == LIST))
#define IsReal(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == REAL))
#define IsString(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == STRING))
#define IsInt(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == INTEGER))
#define IsSymbol(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == SYMBOL))
#define IsPointer(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == OT_POINTER))
#define IsPalette(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == PALETTE))
#define IsMatrix(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == MATRIX))
#define IsWindow(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == WINDOW))
#define IsPicture(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == PICTURE))
#define IsGeometry(theObj) ((theObj) && (OBJTYPE(((ThingPtr)(theObj)) -> flags) == OT_GEOMETRY))
/*NIL pointer, define so that it can cast to any pointer*/
#define NIL ((void *) 0)
#define CopyVar(d, s, v) SetVar(d, v, GetVar(s, v))
/*newp operator*/
#define newp(t) ((t *) Alloc(sizeof(t)))
/*running variable, true iff running*/
extern int running;
/*running remote(ly) variable, true if running remotely*/
extern Bool runningRemote;
/*Demo mode, make text bigger and fatter*/
extern Bool demoP;
/*Use selects in scripts*/
extern Bool scriptSelectP;
/*Abort on script error*/
extern Bool abortScriptP;
/*Temporary string*/
#define TEMPSTRSIZE 4000
extern char tempStr[TEMPSTRSIZE + 1];
/*Fonts*/
#define TITLEFONT 1 /*Font for big titles*/
#define SUBTITLEFONT 2 /*Subtitle font*/
#define ICONBEGFONTS 3 /*Beginning of icon fonts*/
#if 0
#define ICONFOREFONT 3 /*Font for icon foreground*/
#define ICONBACKFONT 4 /*Font for icon background*/
#define ICONSHADOWFONT 5 /*Font for icon shadow*/
#endif
/*Cursors*/
#define ARROWCURSOR 0 /*Arrow cursor*/
#define WATCHCURSOR 1 /*Watch cursor*/
#define IBEAMCURSOR 2 /*I-beam cursor*/
#define QUESTIONCURSOR 3 /*Question mark cursor*/
#define ICONCURSOR 4 /*Icon cursor*/
/*Class IDs*/
#define CLASS_ICON 0 /*Icon class*/
#define CLASS_CORRAL 1 /*Corral class*/
#define CLASS_VISWINDOW 2 /*Vis window class*/
#define CLASS_LIGHT 3 /*Class of a light*/
#define CLASS_CLOCK 4 /*Class of a clock*/
#define CLASS_OBSERVER 5 /*Class of an observer*/
#define CLASS_RENDERER 6 /*Class of a renderer*/
#define CLASS_TIMEDOBJ 7 /*Timed object class*/
#define CLASS_VISOBJ 8 /*Vis object class*/
#define CLASS_PANEL 9 /*Panel class*/
#define CLASS_DATASET 10 /*Dataset class*/
#define CLASS_FILE 11 /*File class*/
#define CLASS_TEXTBOX 12 /*Text box class*/
#define CLASS_SPACE 13 /*Space class*/
#define CLASS_DIALOG 14 /*Dialog class*/
#define CLASS_FILEREADER 15 /*File reader class*/
#define CLASS_RECORDER 16 /*Recorder*/
#define CLASS_SNAPSHOT 17 /*Snapshot*/
#define CLASS_SEQUENCE 18 /*Sequence class*/
#define CLASS_MENU 19 /*Class of menus*/
#define CLASS_ACTION 20 /*Class of menu actions*/
#define N_CLASS_IDS 21 /*Total # of class id's*/
/*Is icon predicate*/
#define IsIcon(icon) IntVarEql(icon, CLASSID, CLASS_ICON)
extern real missingData; /*Missing data*/
extern real plusInf, minusInf; /*Plus and minus infinity*/
#define PLUSINF (plusInf) /*Plus infinity*/
#define MINUSINF (minusInf) /*Minus infinity*/
#define SCIANDATE "November 6, 1993"
#define SCIANVERSION "Version 0.851"
#define AUTOLOG /*Automatically log for error tracking*/
/*Screen sizes*/
#ifdef XMAXSCREEN
#define CSCRWIDTH XMAXSCREEN
#define CSCRHEIGHT YMAXSCREEN
#define VSCRWIDTH XMAX170
#define VSCRHEIGHT YMAX170
#else
#define CSCRWIDTH 1280
#define CSCRHEIGHT 1024
#define VSCRWIDTH 649
#define VSCRHEIGHT 484
#endif
#define SCRWIDTH scrWidth
#define SCRHEIGHT scrHeight
extern int scrWidth, scrHeight;
#define WINBL 8
#define WINBR 8
#define WINBB 8
#define WINBT 32
#ifdef PARANOID
#ifdef PROTO
void *Realloc(void *p, long s);
void *Alloc(long s);
void Free(void *p);
void PrintMemStats();
#else
void *Realloc();
void *Alloc();
void Free();
#endif
#else
#define Realloc(p, s) realloc((p), (s))
#define Alloc(s) malloc(s)
#define Free(p) free(p)
#endif
#define SAFEFREE(p) if ((p)) {Free((p)); (p) = 0;}
/*Handy macros*/
#ifndef MIN
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#endif
#ifndef MAX
#define MAX(x, y) ((x) > (y) ? (x) : (y))
#endif
#ifndef ABS
#define ABS(x) ((x) < 0 ? (-(x)) : (x))
#endif
#define MAG3(m) (sqrt((m)[0] * (m)[0] + (m)[1] * (m)[1] + (m)[2] * (m)[2]));
#define NORM3(m) {float z7; z7 = 1.0 / MAG3(m); m[0] *= z7; m[1] *= z7; m[2] *= z7;}
#define MATCOPY(d, s) {int i, j; for (i = 0; i < 4; ++i) for (j = 0; j < 4; ++j) d[i][j] = s[i][j];}
#define CROSS(A, B, C) (C)[0]=(A)[1]*(B)[2]-(A)[2]*(B)[1]; (C)[1]=(A)[2]*(B)[0]-(A)[0]*(B)[2]; (C)[2]=(A)[0]*(B)[1]-(A)[1]*(B)[0];
#define DOT(A, B) ((A)[0] * (B)[0] + (A)[1] * (B)[1] + (A)[2] * (B)[2])
#define NORMALIZE(A) {register double f; f = 1.0 / sqrt((A)[0]*(A)[0] + (A)[1]*(A)[1] +(A)[2]*(A)[2]); (A)[0] *= f;(A)[1]*=f; (A)[2]*=f;}
#define REVERSE(A) (A)[0] = -(A)[0]; (A)[1] = -(A)[1]; (A)[2] = -(A)[2];
#define VECCOPY(d, s) d[0] = s[0], d[1] = s[1], d[2] = s[2]
#define BETWEENP(m, a, b) (((m) >= (a) && (m) <= (b)) || ((m) >= (b) && (m) <= (a)))
#define MULTMATRIX(a, b, r) \
(r)[0][0] = (a)[0][0]*(b)[0][0] + (a)[0][1]*(b)[1][0] + (a)[0][2]*(b)[2][0] + (a)[0][3]*(b)[3][0];\
(r)[1][0] = (a)[1][0]*(b)[0][0] + (a)[1][1]*(b)[1][0] + (a)[1][2]*(b)[2][0] + (a)[1][3]*(b)[3][0];\
(r)[2][0] = (a)[2][0]*(b)[0][0] + (a)[2][1]*(b)[1][0] + (a)[2][2]*(b)[2][0] + (a)[2][3]*(b)[3][0];\
(r)[3][0] = (a)[3][0]*(b)[0][0] + (a)[3][1]*(b)[1][0] + (a)[3][2]*(b)[2][0] + (a)[3][3]*(b)[3][0];\
(r)[0][1] = (a)[0][0]*(b)[0][1] + (a)[0][1]*(b)[1][1] + (a)[0][2]*(b)[2][1] + (a)[0][3]*(b)[3][1];\
(r)[1][1] = (a)[1][0]*(b)[0][1] + (a)[1][1]*(b)[1][1] + (a)[1][2]*(b)[2][1] + (a)[1][3]*(b)[3][1];\
(r)[2][1] = (a)[2][0]*(b)[0][1] + (a)[2][1]*(b)[1][1] + (a)[2][2]*(b)[2][1] + (a)[2][3]*(b)[3][1];\
(r)[3][1] = (a)[3][0]*(b)[0][1] + (a)[3][1]*(b)[1][1] + (a)[3][2]*(b)[2][1] + (a)[3][3]*(b)[3][1];\
(r)[0][2] = (a)[0][0]*(b)[0][2] + (a)[0][1]*(b)[1][2] + (a)[0][2]*(b)[2][2] + (a)[0][3]*(b)[3][2];\
(r)[1][2] = (a)[1][0]*(b)[0][2] + (a)[1][1]*(b)[1][2] + (a)[1][2]*(b)[2][2] + (a)[1][3]*(b)[3][2];\
(r)[2][2] = (a)[2][0]*(b)[0][2] + (a)[2][1]*(b)[1][2] + (a)[2][2]*(b)[2][2] + (a)[2][3]*(b)[3][2];\
(r)[3][2] = (a)[3][0]*(b)[0][2] + (a)[3][1]*(b)[1][2] + (a)[3][2]*(b)[2][2] + (a)[3][3]*(b)[3][2];\
(r)[0][3] = (a)[0][0]*(b)[0][3] + (a)[0][1]*(b)[1][3] + (a)[0][2]*(b)[2][3] + (a)[0][3]*(b)[3][3];\
(r)[1][3] = (a)[1][0]*(b)[0][3] + (a)[1][1]*(b)[1][3] + (a)[1][2]*(b)[2][3] + (a)[1][3]*(b)[3][3];\
(r)[2][3] = (a)[2][0]*(b)[0][3] + (a)[2][1]*(b)[1][3] + (a)[2][2]*(b)[2][3] + (a)[2][3]*(b)[3][3];\
(r)[3][3] = (a)[3][0]*(b)[0][3] + (a)[3][1]*(b)[1][3] + (a)[3][2]*(b)[2][3] + (a)[3][3]*(b)[3][3];
#define MATBYVECTOR(a, b, r) \
(r)[0] = (a)[0][0]*(b)[0] + (a)[0][1]*(b)[1] + (a)[0][2]*(b)[2] + (a)[0][3];\
(r)[1] = (a)[1][0]*(b)[0] + (a)[1][1]*(b)[1] + (a)[1][2]*(b)[2] + (a)[1][3];\
(r)[2] = (a)[2][0]*(b)[0] + (a)[2][1]*(b)[1] + (a)[2][2]*(b)[2] + (a)[2][3];
#define SQUARE(x) ((x) * (x))
#define SKIPBLANKS(s) while (*(s) && isspace(*(s))) ++(s)
#define ZERO3(d) {(d)[0] = 0.0; (d)[1] = 0.0; (d)[2] = 0.0;}
#define COPY3(d, s) {(d)[0] = (s)[0]; (d)[1] = (s)[1]; (d)[2] = (s)[2];}
#define ADD3(d, s) {(d)[0] += (s)[0]; (d)[1] += (s)[1]; (d)[2] += (s)[2];}
#define DIV3SC(d, s) {(d)[0] /= (s); (d)[1] /= (s); (d)[2] /= (s);}
#define CONTROL(c) ((c) & 0x1F)
#define INT3(s1, s2, q, d) {(d)[0] = (s1)[0] + (q) * ((s2)[0] - (s1)[0]);\
(d)[1] = (s1)[1] + (q) * ((s2)[1] - (s1)[1]);\
(d)[2] = (s1)[2] + (q) * ((s2)[2] - (s1)[2]);}
#define LOGE10 2.30259
#ifdef FMATH
#define rsin(x) fsin(x)
#define rcos(x) fcos(x)
#define rtan(x) ftan(x)
#define rasin(x) fasin(x)
#define racos(x) facos(x)
#define ratan(x, y) fatan(x, y)
#define ratan2(x, y) fatan2(x, y)
#define rsqrt(x) fsqrt(x)
#define rlog10(x) (flog(x) / LOGE10)
#define rpow(x, y) fpow(x, y)
#define rfloor(x) floor((double) x)
#define rceil(x) ceil((double) x)
#else
#ifdef MATHF
#define rsin(x) sinf(x)
#define rcos(x) cosf(x)
#define rtan(x) tanf(x)
#define rasin(x) asinf(x)
#define racos(x) acosf(x)
#define ratan(x, y) atanf(x, y)
#define ratan2(x, y) atan2f(x, y)
#define rsqrt(x) sqrtf(x)
#define rlog10(x) (logf(x) / LOGE10)
#define rpow(x, y) powf(x, y)
#define rfloor(x) floorf(x)
#define rceil(x) ceilf(x)
#else
#define rsin(x) sin(x)
#define rcos(x) cos(x)
#define rtan(x) tan(x)
#define rasin(x) asin(x)
#define racos(x) acos(x)
#define ratan(x, y) atan(x, y)
#define ratan2(x, y) atan2(x, y)
#define rsqrt(x) sqrt(x)
#define rlog10(x) (log(x) / LOGE10)
#define rpow(x, y) pow(x, y)
#define rfloor(x) floor(x)
#define rceil(x) ceil(x)
#endif
#endif
#ifndef M_PI
#define M_PI 3.14159265358979323846
#define M_PI_2 1.57079632679489661923
#define M_PI_4 0.78539816339744830962
#endif
#define ISVOWEL(c) ((c) == 'a' || (c) == 'A' || (c) == 'e' || (c) == 'E' \
|| (c) == 'i' || (c) == 'I' || (c) == 'o' || (c) == 'O' \
|| (c) == 'u' || (c) == 'U')
#define SQ2 (1.414213562)
#define SQ22 (.707106)
#define SQ33 (.577735)
/*Have to define h_errno just in case*/
extern int h_errno;
#ifdef PROTO
int strcmp2(char *, char *);
int strcmp3(char *, char *);
#else
int strcmp2();
int strcmp3();
#endif
/*Define heartbeat*/
#ifdef CLK_TCK
#define HEARTBEAT CLK_TCK
#else
#ifdef HZ
#define HEARTBEAT HZ
#else
#define HEARTBEAT 60
#endif
#endif
|