-+-+-+-+-+-+-+-+ START OF PART 254 -+-+-+-+-+-+-+-+
X  refpt = readpoint3("pattern reference point");
X  dx = readvector3("pattern x axis");
X  dy = readvector3("pattern y axis");
X#endif
X#ifdef VMS
X  phintererror(1, (Pchar *)NULL, INFORM);
X#endif
X`7D  /* do_psetpatrefptvectors */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetpatrep()
X`7B
X  phintererror(1, (Pchar *)NULL, INFORM);
X`7D  /* do_psetpatrep */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetpatsize()
X`7B
X#ifdef SUN
X  Ppoint patsize;
X
X  patsize = readpoint("pattern size");
X  psetpatsize(&patsize);
X#endif
X#ifdef VMS
X  phintererror(1, (Pchar *)NULL, INFORM);
X#endif
X`7D  /* do_psetpatsize */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetpickfilter()
X`7B
X  Pint wsid, dev;
X  Pintlst incl, excl;
X
X  wsid = readinteger("workstation identifier ? ");
X  dev = readinteger("pick device number ? ");
X  readintlst(&incl, "inclusion set", PTKENAME);
X  readintlst(&excl, "exclusion set", PTKENAME);
X  psetpickfilter(wsid, dev, &incl, &excl);
X  free(incl.integers);
X  free(excl.integers);
X`7D  /* do_psetpickfilter */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetpickid()
X`7B
X  psetpickid(readinteger("pick identifier ? "));
X`7D  /* do_psetpickid */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetpickmode()
X`7B
X  Pint wsid, dev;
X  Pimode mode;
X  Pesw echo;
X
X  wsid = readinteger("workstation identifier ? ");
X  dev = readinteger("pick device number ? ");
X  mode = readphigsenum(PTKEIMODE, "operating mode ? ");
X  echo = readphigsenum(PTKEESW, "echo switch ? ");
X  psetpickmode(wsid, dev, mode, echo);
X`7D  /* do_psetpickmode */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetlineind()
X`7B
X  psetlineind(readinteger("polyline index ? "));
X`7D  /* do_psetlineind */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetlinerep()
X`7B
X  Pint wsid, index;
X  Plnbundl rep;
X
X  wsid = readinteger("workstation identifier ? ");
X  index = readinteger("line bundle index ? ");
X  readlnbundl(&rep);
X  psetlinerep(wsid, index, &rep);
X`7D  /* do_psetlinerep */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetmarkerind()
X`7B
X  psetmarkerind(readinteger("polymarker index ? "));
X`7D  /* do_psetmarkerind */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetmarkerrep()
X`7B
X  Pint wsid, index;
X  Pmkbundl rep;
X
X  wsid = readinteger("workstation identifier ? ");
X  index = readinteger("marker bundle index ? ");
X  readmkbundl(&rep);
X  psetmarkerrep(wsid, index, &rep);
X`7D  /* do_psetmarkerrep */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetstringmode()
X`7B
X  Pint wsid, dev;
X  Pimode mode;
X  Pesw echo;
X
X  wsid = readinteger("workstation identifier ? ");
X  dev = readinteger("string device number ? ");
X  mode = readphigsenum(PTKEIMODE, "operating mode ? ");
X  echo = readphigsenum(PTKEESW, "echo switch ? ");
X  psetstringmode(wsid, dev, mode, echo);
X`7D  /* do_psetstringmode */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetstrokemode()
X`7B
X  Pint wsid, dev;
X  Pimode mode;
X  Pesw echo;
X
X  wsid = readinteger("workstation identifier ? ");
X  dev = readinteger("stroke device number ? ");
X  mode = readphigsenum(PTKEIMODE, "operating mode ? ");
X  echo = readphigsenum(PTKEESW, "echo switch ? ");
X  psetstrokemode(wsid, dev, mode, echo);
X`7D  /* do_psetstrokemode */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psettextalign()
X`7B
X  Ptxalign a;
X
X  a.hor = readphigsenum(PTKETXHOR, "horizontal alignment ? ");
X  a.ver = readphigsenum(PTKETXVER, "vertical alignment ? ");
X  psettextalign(&a);
X`7D  /* do_psetextalign */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psettextcolourind()
X`7B
X  psettextcolourind(readintvalue("text colour index ? ", PTKECOLOURIND));
X`7D  /* do_psettextcolourind */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psettextfont()
X`7B
X  psettextfont(readinteger("text font ? "));
X`7D  /* do_psettextfont */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psettextind()
X`7B
X  psettextind(readinteger("text index ? "));
X`7D  /* do_psettextind */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psettextpath()
X`7B
X  Ptxpath p;
X
X  p = readphigsenum(PTKETXPATH, "text path ? ");
X  psettextpath(p);
X`7D  /* do_psettextpath */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psettextprec()
X`7B
X  Ptxprec txprec;
X
X  txprec = readphigsenum(PTKETXPREC, "text precision ? ");
X  psettextprec(txprec);
X`7D  /* do_psettextprec */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psettextrep()
X`7B
X  Pint wsid, index;
X  Ptxbundl rep;
X
X  wsid = readinteger("workstation identifier ? ");
X  index = readinteger("text bundle index ? ");
X  readtxbundl(&rep);
X  psettextrep(wsid, index, &rep);
X`7D  /* do_psettextrep */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetvalmode()
X`7B
X  Pint wsid, dev;
X  Pimode mode;
X  Pesw echo;
X
X  wsid = readinteger("workstation identifier ? ");
X  dev = readinteger("valuator device number ? ");
X  mode = readphigsenum(PTKEIMODE, "operating mode ? ");
X  echo = readphigsenum(PTKEESW, "echo switch ? ");
X  psetvalmode(wsid, dev, mode, echo);
X`7D  /* do_psetvalmode */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetviewind()
X`7B
X  Pint i;
X
X  i = readintvalue("view index? ", PTKEVIEWIND);
X  psetviewind(i);
X`7D  /* do_psetviewind */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetviewrep()
X`7B
X  Pint wsid, index;
X  Pviewrep rep;
X
X  wsid = readinteger("workstation identifier ? ");
X  index = readintvalue("view index ? ", PTKEVIEWIND);
X  readmatrix(rep.orientation_matrix, "orientation matrix");
X  readmatrix(rep.mapping_matrix, "mapping matrix");
X  rep.clip_limit = readlimit("clipping limits");
X  rep.clip_xy = readphigsenum(PTKECLIP, "x-y clipping indicator ? ");
X  psetviewrep(wsid, index, &rep);
X`7D  /* do_psetviewrep */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetviewrep3()
X`7B
X  Pint wsid, index;
X  Pviewrep3 rep;
X
X  wsid = readinteger("workstation identifier ? ");
X  index = readinteger("view index ? ");
X  readmatrix3(rep.orientation_matrix, "orientation matrix");
X  readmatrix3(rep.mapping_matrix, "mapping matrix");
X  rep.clip_limit = readlimit3("clipping limits");
X  rep.clip_xy = readphigsenum(PTKECLIP, "x-y clipping indicator ? ");
X  rep.clip_back = readphigsenum(PTKECLIP, "back clipping indicator ? ");
X  rep.clip_front = readphigsenum(PTKECLIP, "front clipping indicator ? ");
X  psetviewrep(wsid, index, &rep);
X`7D  /* do_psetviewrep3 */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetviewtraninputpri()
X`7B
X  Pint wsid, index, refindex;
X  Pvpri priority;
X
X  wsid = readinteger("workstation identifier ? ");
X  index = readinteger("view index ? ");
X  refindex = readinteger("reference view index ? ");
X  priority = readphigsenum(PTKEVPRI, "relative priority ? ");
X  psetviewtraninputpri(wsid, index, refindex, priority);
X`7D  /* do_psetviewtraninputpri */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetwsviewport()
X`7B
X  Pint wsid;
X  Plimit viewport;
X
X  wsid = readinteger("workstation identifier ? ");
X  viewport = readlimit("viewport limits");
X  psetwsviewport(wsid, &viewport);
X`7D  /* do_psetwsviewport */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetwsviewport3()
X`7B
X  Pint wsid;
X  Plimit3 viewport;
X
X  wsid = readinteger("workstation identifier ? ");
X  viewport = readlimit3("viewport limits");
X  psetwsviewport3(wsid, &viewport);
X`7D  /* do_psetwsviewport3 */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetwswindow()
X`7B
X  Pint wsid;
X  Plimit window;
X
X  wsid = readinteger("workstation identifier ? ");
X  window = readlimit("window limits");
X  psetwswindow(wsid, &window);
X`7D  /* do_psetwswindow */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void do_psetwswindow3()
X`7B
X  Pint wsid;
X  Plimit3 window;
X
X  wsid = readinteger("workstation identifier ? ");
X  window = readlimit3("window limits");
X  psetwswindow3(wsid, &window);
X`7D  /* do_psetwswindow3 */
X
X/*--------------------------------------------------------------------------
V*/
X
X/* end of psetfns.c */
$ CALL UNPACK [.SOURCE.LIBRARY]PSETFNS.C;2 1577407189
$ create 'f'
X/*--------------------------------------------------------------------------
V--
X
X Module name: structure content drawer
X
X Author: Toby Howard
X
X Function: This module implements the structure content drawer.
X
X Dependencies:
X
X External function list:`20
X
X Internal function list:`20
X
X Hashtables used: "structureid", "label".
X
X Modification history : (Version), (Date), (Name), (Description).
X
X 1.0, ????, Toby Howard, First version.
X
X 1.1, 15th July 1988, Steve Larkin, Modified to work with VAX Phigs.
X
X 2.0, 27th August 1991, Gareth Williams, Translated to C.
X
X----------------------------------------------------------------------------
V*/
X
X#include <stdio.h>
X#include <math.h>
X#include <phigs.h>
X#include "ptk.h"
X
X#define OFFSET 0.025
X
Xstatic Pint stctwsid, stfirstel, stlastel, stctfont;
Xstatic Pfloat elemheight, elemtypewidth, elemptrwidth;
Xstatic Ppoint topleftbox;
Xstatic Pint no_els;
Xstatic Pint first_element;
Xstatic Ppoint tp;
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void setscaling()
X/* computes the transformation to scale the picture
X** into `5B0,1`5D, and inserts a global transformation at the
X** start of the picture.
X*/
X`7B
X  Pmatrix3 globaltran;
X  Pint err, el;
X  Pfloat depth;
X  Ppoint3 shift, scale;
X
X  if ((stlastel - stfirstel) >= 9)
X  `7B
X    depth = (stlastel - stfirstel + 2) * 0.1;
X    shift = ptk_point3(0.0, -1.0, 0.0);
X    ptk_shift3(&shift, PREPLACE, globaltran);
X    scale = ptk_point3(1.0/depth, 1.0/depth, 1.0);
X    ptk_scale3(&scale, PPOSTCONCATENATE, globaltran);
X    shift = ptk_point3(0.0, 1.0, 0.0);
X    ptk_shift3(&shift, PPOSTCONCATENATE, globaltran);
X  `7D
X  else
X    ptk_unitmatrix3(globaltran);
X  /* Squeeze in a global transformation at the top of the structure */
X  pinqelemptr(&err, &el);
X  psetelemptr(first_element);
X  psetelemptrlabel(ptk_stringtoint("label", "globaltran"));
X  psetglobaltran3(globaltran);
X  psetelemptr(el + 1);
X`7D  /* setscaling */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void initialise()
X`7B
X  Pfloat charht;
X  Ptxalign align;
X  Ppoint elembox;
X
X  elemheight = 0.1;
X  elemtypewidth = 0.7;
X  elemptrwidth = 0.2;
X  topleftbox = ptk_point(0.0, 1.0);
X
X  align.hor = PAH_NORMAL;
X  align.ver = PAV_HALF;
X  psettextalign(&align);
X  elembox = ptk_point(elemtypewidth - OFFSET - 0.01, elemheight);
X  ptk_computecharheight(stctwsid, "set_annotation_text_character_up_vector",
V`20
X                        &elembox, stctfont, &charht);
X  psetcharheight(charht);
X`7D  /* initialise */
X
X/*--------------------------------------------------------------------------
V*/
X
Xstatic void elemtypebox(C(Peltype) eltype, C(Pint) elemnum)
XPreANSI(Peltype eltype)
XPreANSI(Pint elemnum)
X/*`20
X** Assumes there is no local tran in effect`20
X*/
X`7B
X  Ppoint pts`5B4`5D;
X  Pchar str`5B50`5D;
X  Pint totlen;
X  Ppointlst sets;
X
X  pts`5B0`5D = topleftbox;
X  pts`5B1`5D = ptk_point(pts`5B0`5D.x + elemtypewidth, pts`5B0`5D.y);
X  pts`5B2`5D = ptk_point(pts`5B1`5D.x, pts`5B0`5D.y - elemheight);
X  pts`5B3`5D = ptk_point(pts`5B0`5D.x, pts`5B2`5D.y);
X  ptk_getelemtypename(eltype, 50, str, &totlen);
X  tp = ptk_point(topleftbox.x + OFFSET, topleftbox.y - 0.05);
X  ptext(&tp, str);
X  sets.number = 4;
X  sets.points = pts;
X  ptk_fillareaset(1, &sets);
X  sprintf(str, "%d\0", elemnum);
X  tp = ptk_point(topleftbox.x + elemtypewidth + OFFSET,`20
X                 topleftbox.y - 0.05);
X  ptext(&tp, str);
X`7D  /* elemtypebox */
X
X/*--------------------------------------------------------------------------
V*/
X
X/*function:external*/
Xextern void ptk_structcontent(C(Pint) wsid, C(Pint) stid, C(Pint) firstel,`2
V0
X                              C(Pint) lastel, C(Pint) elemptr, C(Pint) font,
X`09`09`09      C(Pint *) error)
XPreANSI(Pint wsid)
XPreANSI(Pint stid)
XPreANSI(Pint firstel)
XPreANSI(Pint lastel)
XPreANSI(Pint elemptr)
XPreANSI(Pint font)
XPreANSI(Pint *error)
X/*
X** \parambegin
X** \param`7BPint`7D`7Bwsid`7D`7Bworkstation identifier`7D`7BIN`7D
X** \param`7BPint`7D`7Bstid`7D`7Bstructure identifier`7D`7BIN`7D
X** \param`7BPint`7D`7Bfirstel`7D`7Bfirst element in range`7D`7BIN`7D
X** \param`7BPint`7D`7Blastel`7D`7Blast element in range`7D`7BIN`7D
X** \param`7BPint`7D`7Belemptr`7D`7Belement pointer`7D`7BIN`7D
X** \param`7BPint`7D`7Bfont`7D`7Btext font`7D`7BIN`7D
X** \param`7BPint *`7D`7Berror`7D`7Berror code`7D`7BOUT`7D
X** \paramend
X** \blurb`7BThis function inserts a diagram of the contents of the structure
+-+-+-+-+-+-+-+-  END  OF PART 254 +-+-+-+-+-+-+-+-