-+-+-+-+-+-+-+-+ 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 <stdio.h>
X#include <math.h>
X#include <varargs.h>
X#include <setjmp.h>
X#include <ctype.h>
X#ifdef SUN
X#include <string.h>
X#include <strings.h>`20
X#endif
X#include <phigs.h>
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 +-+-+-+-+-+-+-+-