-+-+-+-+-+-+-+-+ START OF PART 217 -+-+-+-+-+-+-+-+ X** function using the `7B\tt Ppoint`7D datatype instead of `7B\tt Pvector`7D V.`7D X*/ X`7B X Pvector vec1, vec2; X `20 X vec1 = ptk_vector(shift->x, shift->y); X vec2 = ptk_vector(scale->x, scale->y); X pbuildtran(mat, pt, &vec1, angle, &vec2, err, result); X`7D /* ptk_pcomposetran */ X X/*-------------------------------------------------------------------------- V*/ X X/*function:external*/ Xextern void ptk_pcomposetran3(C(Pmatrix3) mat, C(Ppoint3 *) pt,`20 X C(Ppoint3 *) shift, C(Pfloat) xangle, C(Pfloat) yangle,`20 X C(Pfloat) zangle, C(Ppoint3 *) scale, C(Pint *) err, C(Pmatrix3) result V) XPreANSI(Pmatrix3 mat) XPreANSI(Ppoint3 *pt) XPreANSI(Ppoint3 *shift) XPreANSI(Pfloat xangle) XPreANSI(Pfloat yangle) XPreANSI(Pfloat zangle) XPreANSI(Ppoint3 *scale) XPreANSI(Pint *err) XPreANSI(Pmatrix3 result) X/* X** \parambegin X** \param`7BPmatrix3`7D`7Bmat`7D`7B4x4 matrix`7D`7BOUT`7D X** \param`7BPpoint3 *`7D`7Bpt`7D`7Bfixed point`7D`7BIN`7D X** \param`7BPpoint3 *`7D`7Bshift`7D`7Bshift vector`7D`7BIN`7D X** \param`7BPfloat`7D`7Bxangle`7D`7Bx rotation angle`7D`7BIN`7D X** \param`7BPfloat`7D`7Byangle`7D`7By rotation angle`7D`7BIN`7D X** \param`7BPfloat`7D`7Bzangle`7D`7Bz rotation angle`7D`7BIN`7D X** \param`7BPpoint3 *`7D`7Bscale`7D`7Bscale vector`7D`7BIN`7D X** \param`7BPint *`7D`7Berr`7D`7Berror indicator`7D`7BOUT`7D X** \param`7BPmatrix3`7D`7Bresult`7D`7B4x4 matrix`7D`7BOUT`7D X** \paramend X** \blurb`7BThis function performs the COMPOSE TRANSFORMATION MATRIX3 X** function using the `7B\tt Ppoint3`7D datatype instead of `7B\tt Pvector3` V7D.`7D X*/ X`7B X Pvector3 vec1, vec2; X `20 X vec1 = ptk_vector3(shift->x, shift->y, shift->z); X vec2 = ptk_vector3(scale->x, scale->y, scale->z); X pbuildtran(mat, pt, &vec1, xangle, yangle, zangle, &vec2, err, result); X`7D /* ptk_pcomposetran3 */ X X/*-------------------------------------------------------------------------- V*/ X X/*function:external*/ Xextern void ptk_pevalvieworientationmatrix(C(Ppoint *) vrp, C(Ppoint *) vup, V`20 X C(Pint *) err, C(Pmatrix) mat) XPreANSI(Ppoint *vrp) XPreANSI(Ppoint *vup) XPreANSI(Pint *err) XPreANSI(Pmatrix mat) X/* X** \parambegin X** \param`7BPpoint *`7D`7Bvrp`7D`7Bview reference point`7D`7BIN`7D X** \param`7BPpoint *`7D`7Bvup`7D`7Bview up vector`7D`7BIN`7D X** \param`7BPint *`7D`7Berr`7D`7Berror indicator`7D`7BOUT`7D X** \param`7BPmatrix`7D`7Bmat`7D`7B3x3 matrix`7D`7BOUT`7D X** \paramend X** \blurb`7BThis function performs the EVALUATE VIEW ORIENTATION MATRIX X** function using the `7B\tt Ppoint3`7D datatype instead of `7B\tt Pvector3` V7D.`7D X*/ X`7B X Pvector vec; X `20 X vec = ptk_vector(vup->x, vup->y); X pevalvieworientationmatrix(vrp, &vec, err, mat); X`7D /* ptk_pevalvieworientationmatrix */ X X/*-------------------------------------------------------------------------- V*/ X X/*function:external*/ Xextern void ptk_pevalvieworientationmatrix3(C(Ppoint3 *) vrp,`20 X C(Ppoint3 *) vpn, C(Ppoint3 *) vup, C(Pint *) err,`20 X C(Pmatrix3) mat) XPreANSI(Ppoint3 *vrp) XPreANSI(Ppoint3 *vpn) XPreANSI(Ppoint3 *vup) XPreANSI(Pint *err) XPreANSI(Pmatrix3 mat) X/* X** \parambegin X** \param`7BPpoint3 *`7D`7Bvrp`7D`7Bview reference point`7D`7BIN`7D X** \param`7BPpoint3 *`7D`7Bvup`7D`7Bview up vector`7D`7BIN`7D X** \param`7BPpoint3 *`7D`7Bvpn`7D`7Bview plane normal`7D`7BIN`7D X** \param`7BPint *`7D`7Berr`7D`7Berror indicator`7D`7BOUT`7D X** \param`7BPmatrix`7D`7Bmat`7D`7B3x3 matrix`7D`7BOUT`7D X** \paramend X** \blurb`7BThis function performs the EVALUATE VIEW ORIENTATION MATRIX3 X** function using the `7B\tt Ppoint3`7D datatype instead of `7B\tt Pvector3` V7D.`7D X*/ X`7B X Pvector3 vec1, vec2; X `20 X vec1 = ptk_vector3(vpn->x, vpn->y, vpn->z); X vec2 = ptk_vector3(vup->x, vup->y, vup->z); X pevalvieworientationmatrix3(vrp, &vec1, &vec2, err, mat); X`7D /* ptk_pevalvieworientationmatrix3 */ X X/*-------------------------------------------------------------------------- V*/ X Xextern ptkboolean pt3inlimit3(C(Ppoint3 *) pt3, C(Plimit3 *) limit3) XPreANSI(Ppoint3 *pt3) XPreANSI(Plimit3 *limit3) X`7B X return ((pt3->x >= limit3->xmin) && (pt3->x <= limit3->xmax) X && (pt3->y >= limit3->ymin) && (pt3->y <= limit3->ymax) X && (pt3->z >= limit3->zmin) && (pt3->z <= limit3->zmax)); X`7D X X/*-------------------------------------------------------------------------- V*/ X Xextern ptkboolean ptinlimit3(C(Ppoint *) pt, C(Plimit3 *) limit3) XPreANSI(Ppoint *pt) XPreANSI(Plimit3 *limit3) X`7B X return ((pt->x >= limit3->xmin) && (pt->x <= limit3->xmax) X && (pt->y >= limit3->ymin) && (pt->y <= limit3->ymax) X && (0.0 >= limit3->zmin) && (0.0 <= limit3->zmax)); X`7D X X/*-------------------------------------------------------------------------- V*/ X Xextern Pint instrlist(C(Pchar **) strlist, C(Pint) lenlist, C(Pchar *) str)` V20 XPreANSI(Pchar **strlist) XPreANSI(Pint lenlist) XPreANSI(Pchar *str) X/* X** description: searches list of strings for given string. X** input params: strlist - pointer to string list. X** lenlist - length of string list. X** str - string to search. X** output params: none. X** return value: index of found string, -1 if not found. X** special notes:`20 X*/ X`7B X ptkboolean found; X Pint i; X X found = FALSE; X i = 0; X while ((found == FALSE) && (i < lenlist)) X `7B X if (strcmp(strlist`5Bi`5D, str) == 0) X found = TRUE; X else X i++; X `7D X if (found == FALSE) X return -1; X else X return i; X`7D /* instrlist */ X X/*-------------------------------------------------------------------------- V*/ X Xextern Pint inintlst(C(Pint) n, C(Pintlst *) list) XPreANSI(Pint n) XPreANSI(Pintlst *list) X/* X** description: search for integer in integer list.`20 X** input params: n - integer to search for. X** list - list of integers to search in. X** output params: none. X** return value: TRUE if integer in list, otherwise FALSE. X*/ X`7B X Pint i; X ptkboolean found; X X i = 0; X found = FALSE; X while (!found && (i < list->number))`20 X `7B X if (list->integers`5Bi`5D == n) X found = TRUE; X else X i++; X `7D X if (found == FALSE) X return -1; X else X return i; X`7D /* inintlst */ X X/*-------------------------------------------------------------------------- V*/ X Xextern void addtointlst(C(Pint) addint, C(Pintlst *) list) XPreANSI(Pint addint) XPreANSI(Pintlst *list) X`7B X if (inintlst(addint, list) == -1) X `7B X (list->number)++; X list->integers`5Blist->number - 1`5D = addint; X `7D X`7D /* addtointlst */ X X/*-------------------------------------------------------------------------- V*/ X Xextern void removefromintlst(C(Pint) remint, C(Pintlst *) list) XPreANSI(Pint remint) XPreANSI(Pintlst *list) X`7B X Pint j, ind; X X if ((ind = inintlst(remint, list)) != -1) X `7B X for (j = ind; j < list->number - 1; j++) X list->integers`5Bj`5D = list->integers`5Bj + 1`5D; X (list->number)--; X `7D X`7D /* removefromintlst */ X X/*-------------------------------------------------------------------------- V*/ X Xextern void strupper(C(Pchar *) str) XPreANSI(Pchar *str) X`7B X Pint ind, strlength; X `20 X strlength = strlen(str); X for (ind = 0; ind < strlength; ind++)`20 X `7B X if (islower(str`5Bind`5D)) X str`5Bind`5D = str`5Bind`5D + ('A' - 'a'); X `7D X`7D /* strupper */ X X/*-------------------------------------------------------------------------- V*/ X Xextern void strlower(C(Pchar *) str) XPreANSI(Pchar *str) X`7B X Pint ind, strlength; X`20 X strlength = strlen(str); X for (ind = 0; ind < strlength; ind++)`20 X `7B X if (isupper(str`5Bind`5D)) X str`5Bind`5D = str`5Bind`5D - ('A' - 'a'); X `7D X`7D /* strlower */ X X/*-------------------------------------------------------------------------- V*/ X Xextern Pint stringlength(C(Pchar *)str) XPreANSI(Pchar *str) X/* X** description: returns length of string up to first ' '(space), '\n' or '\0 V'`20 X** character. X** input params: str - string to find length of. X** return value: length of string. X** special notes: The hashstrings algorithm does not permit strings with X** spaces, hence the search for the first space character. The C library X** routine `60strlen' assumes there is a `60\0' character terminating the st Vring, X** however it is safer to look for a `60\n' character aswell. X*/ X`7B X ptkboolean charfound; X Pint ind; X X ind = 0; X charfound = FALSE; X while (!charfound)`20 X `7B X if (str`5Bind`5D == ' ' `7C`7C str`5Bind`5D == '\n' `7C`7C str`5Bind`5D V == '\0') X charfound = TRUE; X else X ind++; X `7D X return ind; X`7D /* stringlength */ X X/*-------------------------------------------------------------------------- V*/ X X/* end of misc.c */ $ CALL UNPACK [.SOURCE.LIBRARY]MISC.C;1 509933801 $ create 'f' X/*-------------------------------------------------------------------------- V-- X XModule name: Phinter. X XAuthor: Toby Howard. X XFunction: PHIGS textual interpreter. X XInternal function list: readstring, readinteger, readreal, Xreadphigsenum, interpreter, popenphigs. X XExternal function list: ptk_phinter. X XHashtables used: "structureid". X XModification history: (Version), (Date), (Name), (Description). X X 1.0, May 1986, Toby Howard, First version. X X 1.1, Jan 1988, Manjula Patel, PHIGS+ additions. X X 1.2, 14th July 1988, Steve Larkin, Modified to use Vax PHIGS$ X and a pascal binding in 'pbind.pas'. X`20 X 2.0, May 1991, Gareth Williams, Converted to C. X X 2.1, June 1991, Gareth Williams, Completed handling of all PHIGS functions. X X---------------------------------------------------------------------------- V*/ X X#include X#include X#include X#include X#include X#ifdef SUN X#include X#include `20 X#endif X#include X#include "ptk.h" X X/*-------------------------------------------------------------------------- V-*/ X X#define CURRENTVERSION 2.0 X X#define phintermessage " (May, 1991)" X X/* drastic exit label for recursion */ X X/* meaningful characters */ X X#define COMMENTCHAR "!" X#define UNDERSCORECHAR "_" X#define INCLUDECHAR "@" X#define SCRIPTCHAR "#" X#define DOLLARCHAR "$" X X#define TABCHAR '\t' X X#define SPACECHAR " " X#define SLASHCHAR "/" X#define POINTCHAR "." X X/* set of characters allowed in a function or file name */ X X#define MAXPHIGSNAMES 319 /* number of phigs function names */ X X#define default_prompt_string "phinter" X X#define DQuote "\"" X X#define col 25 X#define max_cols 3 X X/*-------------------------------------------------------------------------- V*/ X Xtypedef enum`20 X`7B XPTKEADDNAMESET, XPTKEANNOTATIONTEXTRELATIVE, XPTKEANNOTATIONTEXTRELATIVE3, XPTKEAPPLICATIONDATA, XPTKEARALLSTRUCT, XPTKEARSTRUCT, XPTKEARSTRUCTNET, XPTKEAWAITEVENT, XPTKEBUILDTRAN, XPTKEBUILDTRAN3, XPTKECELLARRAY, XPTKECELLARRAY3, XPTKECHANGESTRUCTID, XPTKECHANGESTRUCTIDREF, XPTKECHANGESTRUCTREF, XPTKECLOSEARFILE, XPTKECLOSEPHIGS, XPTKECLOSESTRUCT, XPTKECLOSEWS, XPTKECOMPOSEMATRIX, XPTKECOMPOSEMATRIX3, XPTKECOMPOSETRAN, XPTKECOMPOSETRAN3, XPTKECOPYALLELEMSSTRUCT, XPTKEDELALLSTRUCT, XPTKEDELALLSTRUCTAR, XPTKEDELELEM, XPTKEDELELEMRANGE, XPTKEDELELEMSLABELS, XPTKEDELSTRUCT, XPTKEDELSTRUCTNET, XPTKEDELSTRUCTNETAR, XPTKEDELSTRUCTAR, XPTKEELEMSRCH, XPTKEEMERGENCYCLOSEPHIGS, XPTKEEMPTYSTRUCT, XPTKEERRORHAND, XPTKEERRORLOG, XPTKEESCAPE, XPTKEEVALVIEWMAPPINGMATRIX, XPTKEEVALVIEWMAPPINGMATRIX3, XPTKEEVALVIEWORIENTATIONMATRIX, XPTKEEVALVIEWORIENTATIONMATRIX3, XPTKEEXECUTESTRUCT, XPTKEFILLAREA, XPTKEFILLAREA3, XPTKEFILLAREASET, XPTKEFILLAREASET3, XPTKEFLUSHEVENTS, XPTKEGDP, XPTKEGDP3, XPTKEGSE, XPTKEGETCHOICE, XPTKEGETTYPEMF, XPTKEGETLOC, XPTKEGETLOC3, XPTKEGETPICK, XPTKEGETSTRING, XPTKEGETSTROKE, XPTKEGETSTROKE3, XPTKEGETVAL, XPTKEINCRSPASRCH, XPTKEINCRSPASRCH3, XPTKEINITCHOICE, XPTKEINITCHOICE3, XPTKEINITLOC, XPTKEINITLOC3, XPTKEINITPICK, XPTKEINITPICK3, XPTKEINITSTRING, XPTKEINITSTRING3, XPTKEINITSTROKE, XPTKEINITSTROKE3, XPTKEINITVAL, XPTKEINITVAL3, XPTKEINQALLCONFSTRUCT, XPTKEINQANNOTATIONFACIL, XPTKEINQARFILES, XPTKEINQARST, XPTKEINQCHOICEST, XPTKEINQCHOICEST3, XPTKEINQCOLOURFACIL, XPTKEINQCOLOURMODEL, XPTKEINQCOLOURMODELFACIL, XPTKEINQCOLOURREP, XPTKEINQCONFRES, XPTKEINQCONFSTRUCTINNET, XPTKEINQCURELEMCONTENT, XPTKEINQCURELEMTYPESIZE, XPTKEINQDEFCHOICEDATA, XPTKEINQDEFCHOICEDATA3, XPTKEINQDEFDISPLAYUPDATEST, XPTKEINQDEFLOCDATA, XPTKEINQDEFLOCDATA3, XPTKEINQDEFPICKDATA, XPTKEINQDEFPICKDATA3, XPTKEINQDEFSTRINGDATA, XPTKEINQDEFSTRINGDATA3, XPTKEINQDEFSTROKEDATA, XPTKEINQDEFSTROKEDATA3, XPTKEINQDEFVALDATA, XPTKEINQDEFVALDATA3, XPTKEINQDISPLAYSPACESIZE, XPTKEINQDISPLAYSPACESIZE3, XPTKEINQDISPLAYUPDATEST, XPTKEINQDYNSTRUCT, XPTKEINQDYNWSATTR, XPTKEINQEDGEFACIL, XPTKEINQEDGEREP, XPTKEINQEDITMODE, XPTKEINQELEMCONTENT, XPTKEINQELEMPTR, XPTKEINQELEMTYPESIZE, XPTKEINQERRORHANDMODE, XPTKEINQGDP, XPTKEINQGDP3, XPTKEINQGSEFACIL, XPTKEINQHILIGHTFILTER, XPTKEINQHLHSRFACIL, XPTKEINQHLHSRMODE, XPTKEINQINPUTOVERFLOW, XPTKEINQINTFACIL, XPTKEINQINTREP, XPTKEINQINVISFILTER, XPTKEINQAVAILGDP, XPTKEINQAVAILGDP3, XPTKEINQGSE, XPTKEINQWSTYPES, XPTKEINQCOLOURIND, XPTKEINQEDGEIND, XPTKEINQINTIND, XPTKEINQPATIND, XPTKEINQLINEIND, XPTKEINQMARKERIND, XPTKEINQTEXTIND, XPTKEINQVIEWIND, XPTKEINQLOCST, XPTKEINQLOCST3, XPTKEINQMODELCLIPFACIL, XPTKEINQMOREEVENTS, XPTKEINQNUMINPUT, XPTKEINQNUMDISPLAYPRI, XPTKEINQOPENSTRUCT, XPTKEINQANCESSTRUCT, XPTKEINQDESCSTRUCT, XPTKEINQPATFACIL, XPTKEINQPATREP, XPTKEINQPHIGSFACIL, XPTKEINQPICKST, XPTKEINQPICKST3, XPTKEINQLINEFACIL, XPTKEINQLINEREP, XPTKEINQMARKERFACIL, XPTKEINQMARKERREP, XPTKEINQPOSTEDSTRUCT, XPTKEINQPREDCOLOURREP, XPTKEINQPREDEDGEREP, XPTKEINQPREDINTREP, XPTKEINQPREDPATREP, XPTKEINQPREDLINEREP, XPTKEINQPREDMARKERREP, XPTKEINQPREDTEXTREP, XPTKEINQPREDVIEWREP, XPTKEINQSETOPENWS, XPTKEINQSETWSPOSTED, XPTKEINQSTRINGST, XPTKEINQSTRINGST3, XPTKEINQSTROKEST, XPTKEINQSTROKEST3, XPTKEINQSTRUCTIDS, XPTKEINQSTRUCTST, +-+-+-+-+-+-+-+- END OF PART 217 +-+-+-+-+-+-+-+-