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
|
/*-
# X-BASED OCTAHEDRON
#
# OctP.h
#
###
#
# Copyright (c) 1994 - 97 David Albert Bagley, bagleyd@bigfoot.com
#
# All Rights Reserved
#
# Permission to use, copy, modify, and distribute this software and
# its documentation for any purpose and without fee is hereby granted,
# provided that the above copyright notice appear in all copies and
# that both that copyright notice and this permission notice appear in
# supporting documentation, and that the name of the author not be
# used in advertising or publicity pertaining to distribution of the
# software without specific, written prior permission.
#
# This program is distributed in the hope that it will be "playable",
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
*/
/* Private header file for Oct */
#ifndef _OctP_h
#define _OctP_h
#include "Oct.h"
/*** random number generator ***/
#if HAVE_RAND48
#define SRAND srand48
#define LRAND lrand48
#define MAXRAND (2147483648.0)
#else /* HAVE_RAND48 */
#if HAVE_RANDOM
#define SRAND srand48
#define LRAND lrand48
#define MAXRAND (2147483648.0)
#else /* HAVE_RANDOM */
#if HAVE_RAND
#define SRAND srand48
#define LRAND lrand48
#ifdef AIXV3
#define MAXRAND (2147483648.0)
#else
#define MAXRAND (32768.0)
#endif
#endif /* HAVE_RAND */
#endif /* HAVE_RANDOM */
#endif /* HAVE_RAND48 */
#ifndef SRAND
extern void SetRNG(long int s);
#define SRAND(X) SetRNG((long) X)
#endif
#ifndef LRAND
extern long LongRNG(void);
#define LRAND() LongRNG()
#endif
#ifndef MAXRAND
#define MAXRAND (2147483648.0)
#endif
#define NRAND(X) ((int)(LRAND()%(X)))
#define SYMBOL ':'
#define IGNORE (-1)
#define TOP 0
#define TR 1
#define RIGHT 2
#define BR 3
#define BOTTOM 4
#define BL 5
#define LEFT 6
#define TL 7
#define COORD 8
#define CW 9
#define CCW 15
/* The following are in xoct.c also */
#define MINOCTAS 1
#define PERIOD3 3
#define PERIOD4 4
#define BOTH 5
#define MAXMODES 3
#define DEFAULTMODE PERIOD4
#define DEFAULTOCTAS 3
#define MAXFACES 8
#define SAME 0
#define OPPOSITE 1
#define UP 0
#define DOWN 1
#define MAXVIEWS 2
#define MAXSIDES (MAXFACES/MAXVIEWS)
#define MAXORIENT (3*MAXSIDES)
#define ABS(a) (((a)<0)?(-a):(a))
#define SIGN(a) (((a)<0)?(-1):1)
#define MIN(a,b) (((int)(a)<(int)(b))?(int)(a):(int)(b))
#define MAX(a,b) (((int)(a)>(int)(b))?(int)(a):(int)(b))
typedef struct _OctLoc {
int face, rotation;
} OctLoc;
typedef struct _OctPart {
Pixel foreground;
Pixel borderColor;
Pixel faceColor[MAXFACES];
OctLoc *octaLoc[MAXFACES];
OctLoc *faceLoc;
OctLoc *rowLoc[MAXORIENT / 2];
int currentFace, currentPosition;
Boolean started, practice, orient, vertical, mono, sticky;
int mode, depth;
int size, sizeSize;
Position delta;
Position octaLength;
Position faceLength;
Position viewLength, viewMiddle;
Position orientLineLength;
XPoint puzzleSize;
XPoint puzzleOffset;
GC puzzleGC;
GC borderGC;
GC faceGC[MAXFACES];
GC inverseGC;
String faceName[MAXFACES];
char *username;
XtCallbackList select;
} OctPart;
typedef struct _OctRec {
CorePart core;
OctPart oct;
} OctRec;
/* This gets around C's inability to do inheritance */
typedef struct _OctClassPart {
int ignore;
} OctClassPart;
typedef struct _OctClassRec {
CoreClassPart core_class;
OctClassPart oct_class;
} OctClassRec;
extern OctClassRec octClassRec;
extern OctLoc *startLoc[MAXFACES];
extern void MoveOct(OctWidget w, int face, int position, int direction, int style, int control);
/* extern void SolvePolyhedrons(); *//* For future auto-solver */
extern void DrawAllPolyhedrons(OctWidget w);
extern Boolean CheckSolved(OctWidget w);
extern void InitMoves(void);
extern void PutMove(int face, int position, int direction, int style, int control);
extern void GetMove(int *face, int *position, int *direction, int *style, int *control);
extern int MadeMoves(void);
extern void FlushMoves(OctWidget w);
extern int NumMoves(void);
extern void ScanMoves(FILE * fp, OctWidget w, int moves);
extern void PrintMoves(FILE * fp);
extern void ScanStartPosition(FILE * fp, OctWidget w);
extern void PrintStartPosition(FILE * fp, OctWidget w);
extern void SetStartPosition(OctWidget w);
#endif /* _OctP_h */
|