You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1374 lines
32 KiB
1374 lines
32 KiB
/*
|
|
* Copyright(C) 1999-2022 National Technology & Engineering Solutions
|
|
* of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
|
|
* NTESS, the U.S. Government retains certain rights in this software.
|
|
*
|
|
* See packages/seacas/LICENSE for details
|
|
*/
|
|
/*
|
|
SVDI CGI driver
|
|
Implemented in C, callable by Fortran
|
|
Debbie Campbell JAN 1989
|
|
Modifications: (mods marked by mod###)
|
|
vbinq vdwait 13-jul-90 kcole
|
|
vdstcs 15-aug-90 kcole
|
|
*/
|
|
|
|
#include "cgidef.h"
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
#define NO_GET_DEVID_CHAR
|
|
#include "devid.h"
|
|
#undef NO_GET_DEVID_CHAR
|
|
|
|
static float get_devid_num(char *string)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < MAX_DEVID; i++) {
|
|
if (*(device_values[i].devid_char) == string[0] &&
|
|
*(device_values[i].devid_char + 1) == string[1] &&
|
|
*(device_values[i].devid_char + 2) == string[2]) {
|
|
return (device_values[i].devid_num);
|
|
}
|
|
}
|
|
|
|
/* return a zero if there is no character string match */
|
|
return (0.);
|
|
}
|
|
|
|
/* ifdefv.h - ifdef file for svdi routines
|
|
* This file is used to define the system dependent ways C is
|
|
* called from FORTRAN. Underscores are used by default.
|
|
*
|
|
* SUN DEC/ULTRIX ALLIANT : C routines must have underscores
|
|
* SGI CONVEX : C routines must have underscores
|
|
*
|
|
* VAX HP IBM/aix : C routines do not have underscores
|
|
*
|
|
* CRAY/UNICOS : C routines must be capitalized,
|
|
* and no underscores
|
|
*
|
|
* This include file is used by VDICGI.C
|
|
*/
|
|
|
|
#if defined(ADDC_)
|
|
#endif
|
|
#if !defined(CRA) && !defined(ADDC_) && !defined(COUGAR)
|
|
#define vdinit_ vdinit
|
|
#define vdterm_ vdterm
|
|
#define vdfram_ vdfram
|
|
#define vdiqdc_ vdiqdc
|
|
#define vdnwpg_ vdnwpg
|
|
#define vdbell_ vdbell
|
|
#define vdwait_ vdwait
|
|
#define vdbufl_ vdbufl
|
|
#define vdstco_ vdstco
|
|
#define vdiqco_ vdiqco
|
|
#define vdescp_ vdescp
|
|
#define vdiqes_ vdiqes
|
|
#define vdiqnd_ vdiqnd
|
|
#define vdmova_ vdmova
|
|
#define vdlina_ vdlina
|
|
#define vdpnta_ vdpnta
|
|
#define vdtext_ vdtext
|
|
#define vdpoly_ vdpoly
|
|
#define vdiqcp_ vdiqcp
|
|
#define vdiqos_ vdiqos
|
|
#define vdstos_ vdstos
|
|
#define vdstfc_ vdstfc
|
|
#define vdstbc_ vdstbc
|
|
#define vdstin_ vdstin
|
|
#define vdstls_ vdstls
|
|
#define vdstlw_ vdstlw
|
|
#define vdstcs_ vdstcs
|
|
#define vdaabu_ vdaabu
|
|
#define vdaloc_ vdaloc
|
|
#define vdabgl_ vdabgl
|
|
#define vdakgl_ vdakgl
|
|
#define vdstla_ vdstla
|
|
#define vdloge_ vdloge
|
|
#define vdmoni_ vdmoni
|
|
#define vbpkg _vbpkg
|
|
#define vberrh_ vberrh
|
|
#define vbiqpk_ vbiqpk
|
|
#define vbiqdv_ vbiqdv
|
|
#define vbdev _vbdev
|
|
#define cdrofs_ cdrofs
|
|
#define cdrrfs_ cdrrfs
|
|
#define cdrwfs_ cdrwfs
|
|
#define cdrcfs_ cdrcfs
|
|
#define cdroab_ cdroab
|
|
#define bgpbuf_ bgpbuf
|
|
#endif
|
|
#if defined(CRA)
|
|
#define vdinit_ VDINIT
|
|
#define vdterm_ VDTERM
|
|
#define vdfram_ VDFRAM
|
|
#define vdiqdc_ VDIQDC
|
|
#define vdnwpg_ VDNWPG
|
|
#define vdbell_ VDBELL
|
|
#define vdwait_ VDWAIT
|
|
#define vdbufl_ VDBUFL
|
|
#define vdstco_ VDSTCO
|
|
#define vdiqco_ VDIQCO
|
|
#define vdescp_ VDESCP
|
|
#define vdiqes_ VDIQES
|
|
#define vdiqnd_ VDIQND
|
|
#define vdmova_ VDMOVA
|
|
#define vdlina_ VDLINA
|
|
#define vdpnta_ VDPNTA
|
|
#define vdtext_ VDTEXT
|
|
#define vdpoly_ VDPOLY
|
|
#define vdiqcp_ VDIQCP
|
|
#define vdiqos_ VDIQOS
|
|
#define vdstos_ VDSTOS
|
|
#define vdstfc_ VDSTFC
|
|
#define vdstbc_ VDSTBC
|
|
#define vdstin_ VDSTIN
|
|
#define vdstls_ VDSTLS
|
|
#define vdstlw_ VDSTLW
|
|
#define vdstcs_ VDSTCS
|
|
#define vdaabu_ VDAABU
|
|
#define vdaloc_ VDALOC
|
|
#define vdabgl_ VDABGL
|
|
#define vdakgl_ VDAKGL
|
|
#define vdstla_ VDSTLA
|
|
#define vdloge_ VDLOGE
|
|
#define vdmoni_ VDMONI
|
|
#define vbpkg_ VBPKG
|
|
#define vberrh_ VBERRH
|
|
#define vbiqpk_ VBIQPK
|
|
#define vbiqdv_ VBIQDV
|
|
#define vbdev_ VBDEV
|
|
#define cdrofs_ CDROFS
|
|
#define cdrrfs_ CDRRFS
|
|
#define cdrwfs_ CDRWFS
|
|
#define cdrcfs_ CDRCFS
|
|
#define cdroab_ CDROAB
|
|
#define bgpbuf_ BGPBUF
|
|
#endif
|
|
#ifdef Build64
|
|
#if !defined(ADDC_)
|
|
#define vdinit vdinit4
|
|
#define vdiqdc vdiqdc4
|
|
#define vdstco vdstco4
|
|
#define vdiqco vdiqco4
|
|
#define vdescp vdescp4
|
|
#define vdiqes vdiqes4
|
|
#define vdiqnd vdiqnd4
|
|
#define vdmova vdmova4
|
|
#define vdlina vdlina4
|
|
#define vdpnta vdpnta4
|
|
#define vdtext vdtext4
|
|
#define vdpoly vdpoly4
|
|
#define vdiqcp vdiqcp4
|
|
#define vdiqos vdiqos4
|
|
#define vdstfc vdstfc4
|
|
#define vdstbc vdstbc4
|
|
#define vdstin vdstin4
|
|
#define vdstls vdstls4
|
|
#define vdstlw vdstlw4
|
|
#define vdstcs vdstcs4
|
|
#define vdaabu vdaabu4
|
|
#define vdaloc vdaloc4
|
|
#define vdabgl vdabgl4
|
|
#define vdakgl vdakgl4
|
|
#define vdstla vdstla4
|
|
#define vdstos vdstos4
|
|
#define vdfram vdfram4
|
|
#else
|
|
#define vdinit_ vdinit4_
|
|
#define vdiqdc_ vdiqdc4_
|
|
#define vdstco_ vdstco4_
|
|
#define vdiqco_ vdiqco4_
|
|
#define vdescp_ vdescp4_
|
|
#define vdiqes_ vdiqes4_
|
|
#define vdiqnd_ vdiqnd4_
|
|
#define vdmova_ vdmova4_
|
|
#define vdlina_ vdlina4_
|
|
#define vdpnta_ vdpnta4_
|
|
#define vdtext_ vdtext4_
|
|
#define vdpoly_ vdpoly4_
|
|
#define vdiqcp_ vdiqcp4_
|
|
#define vdiqos_ vdiqos4_
|
|
#define vdstfc_ vdstfc4_
|
|
#define vdstbc_ vdstbc4_
|
|
#define vdstin_ vdstin4_
|
|
#define vdstls_ vdstls4_
|
|
#define vdstlw_ vdstlw4_
|
|
#define vdstcs_ vdstcs4_
|
|
#define vdaabu_ vdaabu4_
|
|
#define vdaloc_ vdaloc4_
|
|
#define vdabgl_ vdabgl4_
|
|
#define vdakgl_ vdakgl4_
|
|
#define vdstla_ vdstla4_
|
|
#define vdstos_ vdstos4_
|
|
#define vdfram_ vdfram4_
|
|
#endif
|
|
#endif
|
|
|
|
/* end ifdefv.h */
|
|
/* ifdefc.h - ifdef file for cgi routines
|
|
* This file is used to define the system dependent ways C is
|
|
* called from FORTRAN. Underscores are used by default.
|
|
*
|
|
* SUN DEC/ULTRIX ALLIANT : C routines must have underscores
|
|
* SGI CONVEX : C routines must have underscores
|
|
*
|
|
* VAX HP IBM/aix : C routines do not have underscores
|
|
*
|
|
* CRAY/UNICOS : C routines must be capitalized,
|
|
* and no underscores
|
|
*
|
|
* This file also defines the system dependent macro "f2cchar".
|
|
*
|
|
* This include file is used by SDCGI.C and VDICGI.C
|
|
*/
|
|
|
|
#if defined(ADDC_)
|
|
#endif
|
|
#if !defined(CRA) && !defined(ADDC_) && !defined(COUGAR)
|
|
#define ci_ ci
|
|
#define ct_ ct
|
|
#define cxdfac_ cxdfac
|
|
#define cpds_ cpds
|
|
#define cendpg_ cendpg
|
|
#define cbc_ cbc
|
|
#define cvdcx_ cvdcx
|
|
#define cv_ cv
|
|
#define ccl_ ccl
|
|
#define cdqerr_ cdqerr
|
|
#define cerhct_ cerhct
|
|
#define ccixp_ ccixp
|
|
#define cesc1_ cesc1
|
|
#define cesc2_ cesc2
|
|
#define cqid_ cqid
|
|
#define cqd_ cqd
|
|
#define clf_ clf
|
|
#define clpr_ clpr
|
|
#define cqsp_ cqsp
|
|
#define clesc_ clesc
|
|
#define cqp_ cqp
|
|
#define cpl_ cpl
|
|
#define cdjpl_ cdjpl
|
|
#define cdscl_ cdscl
|
|
#define cqcl_ cqcl
|
|
#define cpm_ cpm
|
|
#define ctx1_ ctx1
|
|
#define ctx2_ ctx2
|
|
#define cpg_ cpg
|
|
#define cca_ cca
|
|
#define clnt_ clnt
|
|
#define clnw_ clnw
|
|
#define clnc_ clnc
|
|
#define cmkt_ cmkt
|
|
#define cmkc_ cmkc
|
|
#define ctxp_ ctxp
|
|
#define ctxc_ ctxc
|
|
#define cchh_ cchh
|
|
#define ccho_ ccho
|
|
#define cis_ cis
|
|
#define cflc_ cflc
|
|
#define ccsm_ ccsm
|
|
#define cct_ cct
|
|
#define cgtxx1_ cgtxx1
|
|
#define cgtxx2_ cgtxx2
|
|
#define cqprl_ cqprl
|
|
#define cqln_ cqln
|
|
#define cqlnt_ cqlnt
|
|
#define cqchh1_ cqchh1
|
|
#define cqchh2_ cqchh2
|
|
#define cqfl_ cqfl
|
|
#define cqc_ cqc
|
|
#define cqlna_ cqlna
|
|
#define cqtxa_ cqtxa
|
|
#define cqcte_ cqcte
|
|
#define cili_ cili
|
|
#define crqlc_ crqlc
|
|
#define cpxa_ cpxa
|
|
#endif
|
|
#if defined(CRA)
|
|
#define ci_ CI
|
|
#define ct_ CT
|
|
#define cxdfac_ CXDFAC
|
|
#define cpds_ CPDS
|
|
#define cendpg_ CENDPG
|
|
#define cbc_ CBC
|
|
#define cvdcx_ CVDCX
|
|
#define cv_ CV
|
|
#define ccl_ CCL
|
|
#define cdqerr_ CDQERR
|
|
#define cerhct_ CERHCT
|
|
#define ccixp_ CCIXP
|
|
#define cesc1_ CESC1
|
|
#define cesc2_ CESC2
|
|
#define cqid_ CQID
|
|
#define cqd_ CQD
|
|
#define clf_ CLF
|
|
#define clpr_ CLPR
|
|
#define cqsp_ CQSP
|
|
#define clesc_ CLESC
|
|
#define cqp_ CQP
|
|
#define cpl_ CPL
|
|
#define cdjpl_ CDJPL
|
|
#define cdscl_ CDSCL
|
|
#define cqcl_ CQCL
|
|
#define cpm_ CPM
|
|
#define ctx1_ CTX1
|
|
#define ctx2_ CTX2
|
|
#define cpg_ CPG
|
|
#define cca_ CCA
|
|
#define clnt_ CLNT
|
|
#define clnw_ CLNW
|
|
#define clnc_ CLNC
|
|
#define cmkt_ CMKT
|
|
#define cmkc_ CMKC
|
|
#define ctxp_ CTXP
|
|
#define ctxc_ CTXC
|
|
#define cchh_ CCHH
|
|
#define ccho_ CCHO
|
|
#define cis_ CIS
|
|
#define cflc_ CFLC
|
|
#define ccsm_ CCSM
|
|
#define cct_ CCT
|
|
#define cgtxx1_ CGTXX1
|
|
#define cgtxx2_ CGTXX2
|
|
#define cqprl_ CQPRL
|
|
#define cqln_ CQLN
|
|
#define cqlnt_ CQLNT
|
|
#define cqchh1_ CQCHH1
|
|
#define cqchh2_ CQCHH2
|
|
#define cqfl_ CQFL
|
|
#define cqc_ CQC
|
|
#define cqlna_ CQLNA
|
|
#define cqtxa_ CQTXA
|
|
#define cqcte_ CQCTE
|
|
#define cili_ CILI
|
|
#define crqlc_ CRQLC
|
|
#define cpxa_ CPXA
|
|
#endif
|
|
#ifdef Build64
|
|
#if !defined(ADDC_)
|
|
#define cesc cesc4
|
|
#define ctx ctx4
|
|
#define cgtxx cgtxx4
|
|
#define cqchh cqchh4
|
|
#define cesc2 cesc24
|
|
#define ctx2 ctx24
|
|
#define cgtxx2 cgtxx24
|
|
#define cqchh2 cqchh24
|
|
#else
|
|
#define cesc_ cesc4_
|
|
#define ctx_ ctx4_
|
|
#define cgtxx_ cgtxx4_
|
|
#define cqchh_ cqchh4_
|
|
#define cesc2_ cesc24_
|
|
#define ctx2_ ctx24_
|
|
#define cgtxx2_ cgtxx24_
|
|
#define cqchh2_ cqchh24_
|
|
#endif
|
|
#endif
|
|
|
|
/* f2cchar macro definition */
|
|
#if !defined(CRA) && !defined(ardent)
|
|
#define f2cchar(fptr) (fptr)
|
|
#endif /* default, CRA and ardent are exceptions */
|
|
#if defined(CRA) && !defined(ardent)
|
|
#include <fortran.h>
|
|
#define f2cchar(fptr) (_fcdtocp((_fcd)fptr))
|
|
#endif
|
|
|
|
#include "sdcgi.h"
|
|
|
|
/* current position */
|
|
static float xcp = 0.;
|
|
static float ycp = 0.;
|
|
|
|
/* internal buffer for polylines, polygons */
|
|
#define VBUF_SIZE 2000
|
|
static float vlist_x[VBUF_SIZE];
|
|
static float vlist_y[VBUF_SIZE];
|
|
static int nvert = 0;
|
|
|
|
/* transformation parameters*/
|
|
static float scale;
|
|
|
|
#define MAX_VECTOR 7
|
|
static float vector[MAX_VECTOR] = {7., 0., 1., 0., .01, 0., 0.};
|
|
|
|
#define MAX_DEV_CAP 33
|
|
static float dev_cap[MAX_DEV_CAP] = {0., 1., 1., 255., 0., 15., 2., 1., 1., 1., 1.,
|
|
1., 1., 0., 32767., 32767., 0., 0., 1., 1., 1., 0.,
|
|
0., 3., 2000., 1., 0., 0., 0., 1., 1., 1., 1.};
|
|
static float linewidth_nominal;
|
|
|
|
/* Maximum NDC Values */
|
|
static float ndc_xmax = 1.;
|
|
static float ndc_ymax = 1.;
|
|
static int alpha_mode;
|
|
|
|
static float color_scale;
|
|
|
|
/* Logical Color Table */
|
|
static int init_colors[24] = {0, 0, 0, 255, 0, 0, 0, 255, 0, 255, 255, 0,
|
|
0, 0, 255, 255, 0, 255, 0, 255, 255, 255, 255, 255};
|
|
|
|
#ifndef TRUE
|
|
#define TRUE 1
|
|
#define FALSE 0
|
|
#endif
|
|
|
|
/* macro to convert ascii(integer) to char (note: machine dependent) */
|
|
#define a_to_c(ain) ((char)ain) /* for ascii machine */
|
|
|
|
/* macros which map ndc into CGI coords. */
|
|
#define map_x(xin) ((float)(scale * (xin)))
|
|
#define map_y(yin) ((float)(scale * (yin)))
|
|
|
|
/* macros which map CGI coords. into ndc */
|
|
#define ndc_map_x(xin) ((float)((xin) / scale))
|
|
#define ndc_map_y(yin) ((float)((yin) / scale))
|
|
|
|
#define min(p1, p2) ((p1) < (p2) ? p1 : p2)
|
|
#define max(p1, p2) ((p1) > (p2) ? p1 : p2)
|
|
|
|
void vdicgi_errh(char errmsg[])
|
|
{
|
|
int temp1, temp2;
|
|
float temp3;
|
|
|
|
temp1 = XEAGMD;
|
|
temp2 = 1;
|
|
temp3 = 0.; /* alpha */
|
|
cesc2_(&temp1, &temp2, &temp3);
|
|
alpha_mode = TRUE;
|
|
fprintf(stderr, " %s\n", errmsg);
|
|
}
|
|
|
|
void vbinq(void)
|
|
/* -- THIS IS WHERE CHANGES TO DEV_CAP OCCUR -- */
|
|
{
|
|
int vstat, hscopy, disp, bcolor, dynbc, dynvdm, dx1, dy1, dx2, dy2, pixloc;
|
|
int maxpl, maxdpl, maxpg, maxpgs, maxpm, maxcf, maxchr, maxcel;
|
|
int celfil, celaln, comptx, clofig, dclass;
|
|
int npdefb, nsetb, maxbi, dynmod, nomwid, minwid, maxwid;
|
|
int nreq, first, ntotal, lntyp[6], nlist;
|
|
int nsimul, navail, nint, cmode, overit, monoc, txp, chhit, i;
|
|
float width, height;
|
|
char devid[4];
|
|
|
|
/* INQUIRE DEVICE IDENTIFICATION */
|
|
maxchr = 3;
|
|
cqid_(&maxchr, &vstat, &dclass, devid);
|
|
if (vstat == CVAL) {
|
|
dev_cap[22] = get_devid_num(devid);
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VBINQ) invalid inquire for cqid ");
|
|
}
|
|
|
|
/* INQUIRE DEVICE DESCRIPTION */
|
|
cqd_(&vstat, &hscopy, &disp, &bcolor, &dynbc, &dynvdm, &dx1, &dy1, &dx2, &dy2, &width, &height,
|
|
&pixloc);
|
|
if (vstat == CVAL) {
|
|
dev_cap[0] = (float)hscopy; /* Erasibility */
|
|
dev_cap[1] = (float)disp; /* Scan type (vector, raster) */
|
|
/* the next two may be wrong, want view surface instead of device surface
|
|
: also note, the next 2 items may change if surface is window--later */
|
|
if (!((dx1 == 0) && (dx2 == 0))) { /* X dimension view surface */
|
|
dev_cap[14] = (float)(dx2 - dx1);
|
|
}
|
|
if (!((dy1 == 0) && (dy2 == 0))) { /* Y dimension view surface */
|
|
dev_cap[15] = (float)(dy2 - dy1);
|
|
}
|
|
dev_cap[16] = width; /* X dimension physical units */
|
|
dev_cap[17] = height; /* Y dimension physical units */
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VBINQ) invalid inquire for cqd ");
|
|
}
|
|
|
|
/* input inquiries to zeros - for non-interactive devices */
|
|
/* mod### set these based on dclass not hscopy */
|
|
if (dclass == 0) /* dclass = dev(13) value */
|
|
{
|
|
for (i = 7; i < 13; i++) {
|
|
dev_cap[i] = 0.;
|
|
}
|
|
}
|
|
|
|
/* INQUIRE PRIMITIVE SUPPORT LEVELS */
|
|
cqprl_(&vstat, &maxpl, &maxdpl, &maxpg, &maxpgs, &maxpm, &maxcf, &maxchr, &maxcel, &celfil,
|
|
&celaln, &comptx, &clofig);
|
|
if (vstat == CVAL) {
|
|
if (maxpg == -1) {
|
|
maxpg = VBUF_SIZE;
|
|
}
|
|
dev_cap[24] = min(maxpg, VBUF_SIZE); /* Maximum polygon points */
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VBINQ) invalid inquire for cqprl ");
|
|
}
|
|
|
|
/* INQUIRE LINE CAPABILITY */
|
|
cqln_(&vstat, &npdefb, &nsetb, &maxbi, &dynmod, &nomwid, &minwid, &maxwid);
|
|
if (vstat == CVAL) {
|
|
dev_cap[18] = (float)minwid; /* Minimum line width */
|
|
|
|
/* Due to the fact that cgi device coordinates have to be integer, the
|
|
linewidth numbers may come back zero, enforce a minimum for nominal
|
|
since we use it later in vdstlw for calculations */
|
|
linewidth_nominal = (nomwid == 0) /* Nominal line width */
|
|
? .001
|
|
: (float)nomwid / dev_cap[14];
|
|
dev_cap[30] = (float)maxwid; /* Maximum line width */
|
|
|
|
/* Could inquire marker capability, but this will be close enough*/
|
|
dev_cap[19] = dev_cap[18]; /* Minimum pointsize */
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VBINQ) invalid inquire for cqln ");
|
|
}
|
|
|
|
/* INQUIRE LIST OF AVAILABLE LINE TYPES */
|
|
nreq = 6;
|
|
first = 1;
|
|
cqlnt_(&nreq, &first, &vstat, &ntotal, &nlist, lntyp);
|
|
if (vstat == CVAL) {
|
|
/* map CGI to VDI linestyles */
|
|
/* cgi linestyles: 1 - solid 2 - dash 3 - dot,
|
|
* 4 - dashdot 5 - dash dot dot
|
|
* vdi linestyles: 0 - solid 1 - dotted 2 - dot dash
|
|
* 3 - short dash 4 - long dash 5 - medium dash
|
|
*/
|
|
dev_cap[5] = 0.;
|
|
for (i = 0; i < nlist; i++) {
|
|
switch (lntyp[i]) {
|
|
case 1: break;
|
|
case 2: dev_cap[5] += 16.; break;
|
|
case 3: dev_cap[5] += 1.; break;
|
|
case 4: dev_cap[5] += 2.; break;
|
|
case 5: dev_cap[5] += 4.; break;
|
|
default: break;
|
|
} /* end switch */
|
|
}
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VBINQ) invalid inquire for cqlnt ");
|
|
}
|
|
|
|
/* INQUIRE COLOR CAPABILITIES */
|
|
cqc_(&vstat, &nsimul, &navail, &nint, &cmode, &dynmod, &overit, &monoc);
|
|
if (vstat == CVAL) {
|
|
dev_cap[3] = (float)nsimul - 2; /* Simultaneous colors */
|
|
dev_cap[26] = (float)navail - 2; /* Available colors */
|
|
dev_cap[2] = (float)nint; /* Available intensities */
|
|
dev_cap[31] = 1.; /* Color or monochrome */
|
|
if (monoc == CYES) {
|
|
dev_cap[31] = 0.;
|
|
}
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VBINQ) invalid inquire for cqc ");
|
|
}
|
|
|
|
/* INQUIRE LIST OF AVAILABLE CHARACTER HEIGHTS */
|
|
txp = CSTRNG;
|
|
nreq = 1;
|
|
first = 1;
|
|
cqchh2_(&txp, &nreq, &first, &vstat, &ntotal, &nlist, &chhit);
|
|
if (vstat == CVAL) {
|
|
dev_cap[6] = (nlist == 0) ? 0. : (float)ntotal;
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VBINQ) invalid inquire for cqchh ");
|
|
}
|
|
}
|
|
|
|
void vdinit_(float *aspect, int *justif)
|
|
{
|
|
float asp;
|
|
int temp, temp2, vstat, vconc;
|
|
float xconc, yconc, x1, y1, x2, y2, x3, y3, x4, y4, temp_xcp, temp_ycp;
|
|
float scaled_ndc_xmax, scaled_ndc_ymax;
|
|
float rtemp = 0.0;
|
|
xconc = 0.0;
|
|
yconc = 0.0;
|
|
x1 = 0.0;
|
|
y1 = 0.0;
|
|
x2 = 0.0;
|
|
y2 = 0.0;
|
|
x3 = 0.0;
|
|
y3 = 0.0;
|
|
x4 = 0.0;
|
|
y4 = 0.0;
|
|
|
|
asp = *aspect;
|
|
|
|
if (asp < 0.) {
|
|
vdicgi_errh(" SVDI Shell (VDINIT) Error Number 721 Severity 5: ");
|
|
asp = 0.;
|
|
}
|
|
|
|
/* Initialize CGI */
|
|
temp = CACT;
|
|
alpha_mode = FALSE;
|
|
ci_(&temp);
|
|
|
|
/* Inquire everything you always wanted to know about */
|
|
vbinq();
|
|
|
|
/* Turn off clip indicators */
|
|
temp = CDCOFF;
|
|
cdscl_(&temp);
|
|
temp = COFF;
|
|
ccl_(&temp);
|
|
|
|
/* Set up proper scaling to take advantage of whole device (not just square) */
|
|
if (asp == 0.) {
|
|
asp = dev_cap[14] / dev_cap[15];
|
|
}
|
|
if (asp > 1.) {
|
|
ndc_xmax = 1.;
|
|
ndc_ymax = 1. / asp;
|
|
}
|
|
else {
|
|
ndc_xmax = asp;
|
|
ndc_ymax = 1.;
|
|
}
|
|
scale = 32767.;
|
|
scaled_ndc_xmax = map_x(ndc_xmax);
|
|
scaled_ndc_ymax = map_y(ndc_ymax);
|
|
rtemp = 0.0;
|
|
cvdcx_(&rtemp, &rtemp, &scaled_ndc_xmax, &scaled_ndc_ymax);
|
|
|
|
/* Set color mode to index, and set color index precision to 8 bits */
|
|
temp = CINDEX;
|
|
ccsm_(&temp);
|
|
temp = 8;
|
|
ccixp_(&temp);
|
|
color_scale = 255.;
|
|
|
|
/* set up the standard 8 colors in indices 2 - 9 (0 reserved for background,
|
|
1 reserved for default foreground) */
|
|
temp = 2;
|
|
temp2 = 8;
|
|
cct_(&temp, &temp2, init_colors);
|
|
|
|
/* Set default marker type to dot */
|
|
temp = 1;
|
|
cmkt_(&temp);
|
|
|
|
/* Set default interior style to solid */
|
|
temp = CSOLID;
|
|
cis_(&temp);
|
|
|
|
/* Inquire what the default character size is - use cgtxx instead of
|
|
cqtxa because need both x and y size (may have to adjust for inter
|
|
character/line spacing later */
|
|
temp_xcp = map_x(xcp);
|
|
temp_ycp = map_y(ycp);
|
|
cgtxx2_(&temp_xcp, &temp_ycp, &vstat, &vconc, &xconc, &yconc, &x1, &y1, &x2, &y2, &x3, &y3, &x4,
|
|
&y4);
|
|
if (vstat == CVAL) {
|
|
vector[5] = ndc_map_x(x2 - x1);
|
|
vector[6] = ndc_map_y(y4 - y1);
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VDINIT) inquire error from cgtxx ");
|
|
}
|
|
|
|
/* Initialize locator device */
|
|
temp = CLOCAT;
|
|
temp2 = 1;
|
|
cili_(&temp, &temp2);
|
|
}
|
|
|
|
void vflush(void)
|
|
/* flush polyline buffer */
|
|
{
|
|
if (alpha_mode) {
|
|
int temp1 = XEAGMD;
|
|
int temp2 = 1;
|
|
float temp3 = 1.; /* graphics */
|
|
cesc2_(&temp1, &temp2, &temp3);
|
|
alpha_mode = FALSE;
|
|
}
|
|
|
|
if (nvert > 0) {
|
|
cpl_(&nvert, vlist_x, vlist_y);
|
|
nvert = 0;
|
|
}
|
|
}
|
|
|
|
void vdterm_(void)
|
|
{
|
|
vflush();
|
|
ct_();
|
|
}
|
|
|
|
void vdiqdc_(int *index, float *value)
|
|
{
|
|
if (*index < 1 || *index > MAX_DEV_CAP) {
|
|
vdicgi_errh(" SVDI Shell (VDIQDC) Error Number 726, Severity Code 5 ");
|
|
return;
|
|
}
|
|
{
|
|
*value = dev_cap[*index - 1];
|
|
}
|
|
}
|
|
|
|
void vdnwpg_(void)
|
|
{
|
|
int temp, nreq, first, vstat, ntotal, colors[3], nlist;
|
|
|
|
vflush(); /* flush polyline buffer */
|
|
|
|
/* execute deferred actions */
|
|
cxdfac_();
|
|
|
|
/* inquire the rgb values of color_index. Set index 0 to those values */
|
|
|
|
nreq = 1;
|
|
|
|
/* the 3 below is because you asking for the 3rd index -- which happens
|
|
to be logical index 0 */
|
|
|
|
first = vector[1] + 3;
|
|
cqcte_(&nreq, &first, &vstat, &ntotal, &nlist, colors);
|
|
if (vstat == CVAL) {
|
|
cbc_(&colors[0], &colors[1], &colors[2]);
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VDNWPG) invalid inquire for cqcte ");
|
|
}
|
|
|
|
/* prepare drawing surface - do background color */
|
|
temp = CCONDC;
|
|
cpds_(&temp);
|
|
}
|
|
|
|
void vdbell_(void) {}
|
|
|
|
void vdwait_(void)
|
|
{
|
|
int temp, vstat, rstat, mvalid, trigger;
|
|
float xpos, ypos, timeout;
|
|
|
|
/* make picture current - flush output buffers */
|
|
vflush(); /* flush polyline buffer */
|
|
cxdfac_();
|
|
|
|
/* do read waiting for viewing for interactive devices only */
|
|
/* mod### changed from 0(erasibility) to 12(input) */
|
|
if (dev_cap[12] != 0.) {
|
|
temp = 1;
|
|
timeout = 1.;
|
|
crqlc_(&temp, &timeout, &vstat, &rstat, &mvalid, &trigger, &xpos, &ypos);
|
|
if (vstat != CVAL) {
|
|
vdicgi_errh(" SVDI Shell (VDWAIT) invalid request for crqlc ");
|
|
}
|
|
}
|
|
}
|
|
|
|
void vdbufl_(void)
|
|
{
|
|
int temp1, temp2;
|
|
float temp3;
|
|
|
|
vflush(); /* flush polyline buffer */
|
|
cxdfac_();
|
|
|
|
/* set the device into alpha mode - 0. */
|
|
temp1 = XEAGMD;
|
|
temp2 = 1;
|
|
temp3 = 0.; /* alpha */
|
|
cesc2_(&temp1, &temp2, &temp3);
|
|
alpha_mode = TRUE;
|
|
}
|
|
|
|
void vdstco_(int *num, int index_array[], float color_array[][3], int *color_mod)
|
|
{
|
|
int i = 0;
|
|
int start_index = 0;
|
|
int hld_colors_ptr = 0;
|
|
int first = 0;
|
|
int count = 0;
|
|
int hld_colors[768];
|
|
|
|
if (*num < 1 || *num > dev_cap[3]) {
|
|
vdicgi_errh(" SVDI Shell (VDSTCO) Error Number 723, Severity Code 5 ");
|
|
return;
|
|
}
|
|
|
|
if (*color_mod != 0 && *color_mod != 1) {
|
|
vdicgi_errh(" SVDI Shell (VDSTCO) Error Number 725, Severity Code 5 ");
|
|
return;
|
|
}
|
|
|
|
vflush(); /* flush polyline buffer */
|
|
first = TRUE;
|
|
|
|
for (i = 0; i < *num; i++) {
|
|
if (index_array[i] < 0 || index_array[i] > 255) {
|
|
vdicgi_errh(" SVDI Shell (VDSTCO) Error Number 724, Severity Code 5 ");
|
|
|
|
/* Set RGB color */
|
|
}
|
|
else if (*color_mod == 0) {
|
|
if (color_array[i][0] < 0. || color_array[i][0] > 1. || color_array[i][1] < 0. ||
|
|
color_array[i][1] > 1. || color_array[i][2] < 0. || color_array[i][2] > 1.) {
|
|
vdicgi_errh(" SVDI Shell (VDSTCO) Error Number 727, Severity Code 5 ");
|
|
}
|
|
else
|
|
/* Check to see if indices are consecutive (buffer up if they are) */
|
|
{
|
|
|
|
if (first) {
|
|
|
|
/* set color table from index requested + 2 (0 reserved for background) */
|
|
|
|
start_index = index_array[i] + 2;
|
|
hld_colors_ptr = 0;
|
|
first = FALSE;
|
|
}
|
|
|
|
hld_colors[hld_colors_ptr++] = (int)(color_array[i][0] * color_scale);
|
|
hld_colors[hld_colors_ptr++] = (int)(color_array[i][1] * color_scale);
|
|
hld_colors[hld_colors_ptr++] = (int)(color_array[i][2] * color_scale);
|
|
|
|
if (i < *num - 1) {
|
|
if (index_array[i] != (index_array[i + 1] - 1)) {
|
|
count = hld_colors_ptr / 3;
|
|
cct_(&start_index, &count, hld_colors);
|
|
first = TRUE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Set HLS color (HLS not supported) */
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VDSTCO) HLS option being phased out - ignored ");
|
|
vdicgi_errh(" Contact Computer Graphics Group - Div. 2644 ");
|
|
}
|
|
}
|
|
|
|
count = hld_colors_ptr / 3;
|
|
if (count > 0) {
|
|
cct_(&start_index, &count, hld_colors);
|
|
}
|
|
}
|
|
|
|
void vdiqco_(int *num, int index_array[], float color_array[][3], int *color_mod)
|
|
{
|
|
int i, ntotal, colors[3], first, nreq, vstat, nlist;
|
|
int temp1, temp2;
|
|
float temp3;
|
|
|
|
if (*num < 1 || *num > dev_cap[3]) {
|
|
vdicgi_errh(" SVDI Shell (VDIQCO) Error Number 723, Severity Code 5 ");
|
|
return;
|
|
}
|
|
|
|
if (*color_mod != 0 && *color_mod != 1) {
|
|
vdicgi_errh(" SVDI Shell (VDIQCO) Error Number 725, Severity Code 5 ");
|
|
return;
|
|
}
|
|
|
|
if (alpha_mode) {
|
|
temp1 = XEAGMD;
|
|
temp2 = 1;
|
|
temp3 = 1.; /* "graphics" */
|
|
cesc2_(&temp1, &temp2, &temp3);
|
|
alpha_mode = FALSE;
|
|
}
|
|
|
|
for (i = 0; i < *num; i++) {
|
|
if (index_array[i] < 0 || index_array[i] > 255) {
|
|
vdicgi_errh(" SVDI Shell (VDIQCO) Error Number 724, Severity Code 5 ");
|
|
}
|
|
else {
|
|
if (*color_mod == 1) {
|
|
vdicgi_errh(" HLS option being phased out - returning RGB values ");
|
|
vdicgi_errh(" Contact Computer Graphics Group - Div. 2644 ");
|
|
}
|
|
|
|
/* find out from cgi what the color table is */
|
|
nreq = 1;
|
|
first = index_array[i] + 3;
|
|
cqcte_(&nreq, &first, &vstat, &ntotal, &nlist, colors);
|
|
if (vstat == CVAL) {
|
|
color_array[i][0] = (float)colors[0] / color_scale;
|
|
color_array[i][1] = (float)colors[1] / color_scale;
|
|
color_array[i][2] = (float)colors[2] / color_scale;
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VDIQCO) invalid inquire for cqcte ");
|
|
color_array[i][0] = -1.;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void vdescp_(int *escape_code, int *n, float args)
|
|
{
|
|
if (*n < 0) {
|
|
vdicgi_errh(" SVDI Shell (VDESCP) Error Number 802, Severity Code 5 ");
|
|
return;
|
|
}
|
|
}
|
|
|
|
void vdiqes_(int *escape_code, int *support) { *support = 0; }
|
|
|
|
void vdiqnd_(float *x_ndc, float *y_ndc)
|
|
{
|
|
*x_ndc = ndc_xmax;
|
|
*y_ndc = ndc_ymax;
|
|
}
|
|
|
|
void vdmova_(float *x, float *y)
|
|
{
|
|
vflush();
|
|
vlist_x[nvert] = map_x(*x);
|
|
vlist_y[nvert] = map_y(*y);
|
|
nvert++;
|
|
|
|
xcp = *x;
|
|
ycp = *y;
|
|
}
|
|
|
|
void vdlina_(float *x, float *y)
|
|
{
|
|
|
|
/* if a move hasn't already been done, doit it now */
|
|
if (nvert == 0) {
|
|
vlist_x[nvert] = map_x(xcp);
|
|
vlist_y[nvert] = map_y(ycp);
|
|
nvert++;
|
|
}
|
|
|
|
/* append to polyline buffer (if full, flush it first) */
|
|
if (nvert >= VBUF_SIZE) {
|
|
vflush();
|
|
nvert = 0; /* vflush sets this, but static analysis still warns. */
|
|
}
|
|
vlist_x[nvert] = map_x(*x);
|
|
vlist_y[nvert] = map_y(*y);
|
|
nvert++;
|
|
|
|
xcp = *x;
|
|
ycp = *y;
|
|
}
|
|
|
|
void vdpnta_(float *x, float *y)
|
|
{
|
|
float new_x, new_y;
|
|
int temp;
|
|
|
|
new_x = map_x(*x);
|
|
new_y = map_y(*y);
|
|
temp = 1;
|
|
|
|
vflush();
|
|
vlist_x[nvert] = new_x;
|
|
vlist_y[nvert] = new_y;
|
|
nvert++;
|
|
|
|
cpm_(&temp, &new_x, &new_y);
|
|
|
|
xcp = *x;
|
|
ycp = *y;
|
|
}
|
|
|
|
void vdtext_(int *length, int char_array[])
|
|
{
|
|
int i, lenout, len, temp1, temp2;
|
|
float dx, dy, temp_xcp, temp_ycp, temp3;
|
|
int strout[150];
|
|
|
|
len = *length;
|
|
|
|
if (len < 1) {
|
|
vdicgi_errh(" SVDI Shell (VDTEXT) Error Number 212, Severity Code 5 ");
|
|
return;
|
|
}
|
|
|
|
if (len > 136) {
|
|
vdicgi_errh(" SVDI Shell (VDTEXT) Error Number 213, Severity Code 5 ");
|
|
len = 136;
|
|
}
|
|
|
|
if (alpha_mode) {
|
|
temp1 = XEAGMD;
|
|
temp2 = 1;
|
|
temp3 = 1.; /* graphics */
|
|
cesc2_(&temp1, &temp2, &temp3);
|
|
alpha_mode = FALSE;
|
|
}
|
|
|
|
lenout = 0; /*count characters in string output buffer "strout" */
|
|
|
|
for (i = 0; i < len; i++) {
|
|
if (char_array[i] < 32 || char_array[i] > 126) {
|
|
switch (char_array[i]) {
|
|
case 8:
|
|
dx = -vector[6];
|
|
dy = 0.;
|
|
break;
|
|
case 10:
|
|
dx = 0.;
|
|
dy = -vector[5];
|
|
break;
|
|
case 13:
|
|
dx = -xcp;
|
|
dy = 0.;
|
|
break;
|
|
default:
|
|
dx = 0.;
|
|
dy = 0.;
|
|
vdicgi_errh(" SVDI Shell (VDTEXT) Error Number 208, Severity Code 5 ");
|
|
break;
|
|
}
|
|
/* Stuff to send, finish the string */
|
|
|
|
if (lenout != 0) {
|
|
temp_xcp = map_x(xcp);
|
|
temp_ycp = map_y(ycp);
|
|
ctx2_(&temp_xcp, &temp_ycp, strout, &lenout);
|
|
xcp += lenout * vector[6];
|
|
lenout = 0;
|
|
}
|
|
xcp += dx;
|
|
ycp += dy;
|
|
vdmova_(&xcp, &ycp);
|
|
}
|
|
|
|
else {
|
|
|
|
strout[lenout++] = char_array[i];
|
|
}
|
|
}
|
|
|
|
/* All done, get rid of them */
|
|
if (lenout != 0) {
|
|
temp_xcp = map_x(xcp);
|
|
temp_ycp = map_y(ycp);
|
|
ctx2_(&temp_xcp, &temp_ycp, strout, &lenout);
|
|
xcp += lenout * vector[6];
|
|
lenout = 0;
|
|
}
|
|
}
|
|
|
|
void vdpoly_(float x_array[], float y_array[], int *npts)
|
|
{
|
|
int i, iend;
|
|
|
|
vflush();
|
|
|
|
if (*npts > (int)dev_cap[24]) {
|
|
vdicgi_errh(" SVDI Shell (VDPOLY) exceeded max points for - device limit ");
|
|
iend = (int)dev_cap[24];
|
|
}
|
|
|
|
else if (*npts > VBUF_SIZE) {
|
|
vdicgi_errh(" SVDI Shell (VDPOLY) exceeded max points - internal buffer limit ");
|
|
iend = VBUF_SIZE;
|
|
}
|
|
else {
|
|
iend = *npts;
|
|
}
|
|
|
|
for (i = 0; i < iend; i++) {
|
|
vlist_x[nvert] = map_x(x_array[i]);
|
|
vlist_y[nvert] = map_y(y_array[i]);
|
|
nvert++;
|
|
}
|
|
|
|
cpg_(&nvert, vlist_x, vlist_y);
|
|
nvert = 0;
|
|
|
|
xcp = x_array[0];
|
|
ycp = y_array[0];
|
|
}
|
|
|
|
void vdiqcp_(float *x, float *y)
|
|
{
|
|
*x = xcp;
|
|
*y = ycp;
|
|
}
|
|
|
|
void vdiqos_(float attr_array[])
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < MAX_VECTOR; i++) {
|
|
attr_array[i] = vector[i];
|
|
}
|
|
}
|
|
|
|
void vdstfc_(int *color_index)
|
|
{
|
|
int new_color;
|
|
|
|
if (*color_index < 0 || *color_index > 255) {
|
|
vdicgi_errh(" SVDI Shell (VDSTFC) Error Number 724 Severity 5: ");
|
|
return;
|
|
}
|
|
|
|
vector[0] = (float)*color_index;
|
|
|
|
/* map foreground color into indices 2-n since 0 is reserved for background,
|
|
and 1 is default foreground */
|
|
new_color = *color_index + 2;
|
|
|
|
vflush();
|
|
|
|
clnc_(&new_color);
|
|
cmkc_(&new_color);
|
|
ctxc_(&new_color);
|
|
cflc_(&new_color);
|
|
}
|
|
|
|
void vdstbc_(int *color_index)
|
|
{
|
|
if (*color_index < 0 || *color_index > 255) {
|
|
vdicgi_errh(" SVDI Shell (VDSTBC) Error Number 724 Severity 5: ");
|
|
return;
|
|
}
|
|
vector[1] = (float)*color_index;
|
|
}
|
|
|
|
void vdstin_(float *intensity)
|
|
{
|
|
if (*intensity < 0. || *intensity > 1.) {
|
|
vdicgi_errh(" SVDI Shell (VDSTIN) Error Number 401 Severity 5: ");
|
|
return;
|
|
}
|
|
}
|
|
|
|
void vdstls_(int *line_style)
|
|
{
|
|
int temp;
|
|
|
|
if (*line_style < 0 || *line_style > 5) {
|
|
vdicgi_errh(" SVDI Shell (VDSTLS) Error Number 401 Severity 5: ");
|
|
return;
|
|
}
|
|
|
|
vector[3] = (float)*line_style;
|
|
vflush();
|
|
switch (*line_style) {
|
|
/* cgi linestyles are: 1 - solid, 2 - dash, 3 - dot, 4 - dashdot 5 - dash dot dot
|
|
vdi linestyles are: 0 - solid, 1 - dotted, 2 - dot dash
|
|
3 - short dash, 4 - long dash, 5 - medium dash */
|
|
case 0:
|
|
temp = 1;
|
|
clnt_(&temp);
|
|
break;
|
|
case 1:
|
|
temp = 3;
|
|
clnt_(&temp);
|
|
break;
|
|
case 2:
|
|
temp = 4;
|
|
clnt_(&temp);
|
|
break;
|
|
case 3:
|
|
temp = 2;
|
|
clnt_(&temp);
|
|
break;
|
|
case 4:
|
|
temp = 5;
|
|
clnt_(&temp);
|
|
break;
|
|
case 5:
|
|
temp = 2;
|
|
clnt_(&temp);
|
|
break;
|
|
default: vector[3] = 0.; break;
|
|
}
|
|
}
|
|
|
|
void vdstlw_(float *line_width)
|
|
{
|
|
float new_size;
|
|
|
|
if (*line_width < 0. || *line_width > 1.) {
|
|
vdicgi_errh(" SVDI Shell (VDSTLW) Error Number 401 Severity 5: ");
|
|
return;
|
|
}
|
|
|
|
vector[4] = *line_width;
|
|
|
|
/* cgi default state is scaled linewidth - not expressed in VDC */
|
|
new_size = *line_width / linewidth_nominal;
|
|
vflush();
|
|
clnw_(&new_size);
|
|
}
|
|
|
|
void vdstcs_(float *y_size)
|
|
{
|
|
float new_size, x, y, xconc, yconc, x1, y1, x2, y2, x3, y3, x4, y4;
|
|
float temp3;
|
|
int vstat, vconc, temp1, temp2;
|
|
|
|
xconc = 0.0;
|
|
yconc = 0.0;
|
|
x1 = 0.0;
|
|
y1 = 0.0;
|
|
x2 = 0.0;
|
|
y2 = 0.0;
|
|
x3 = 0.0;
|
|
y3 = 0.0;
|
|
x4 = 0.0;
|
|
y4 = 0.0;
|
|
|
|
new_size = map_x(*y_size);
|
|
|
|
if (alpha_mode) {
|
|
temp1 = XEAGMD;
|
|
temp2 = 1;
|
|
temp3 = 1.; /* graphics */
|
|
cesc2_(&temp1, &temp2, &temp3);
|
|
alpha_mode = FALSE;
|
|
}
|
|
|
|
cchh_(&new_size);
|
|
|
|
/* inquire what the realized size is and stuff it here */
|
|
x = map_x(xcp);
|
|
y = map_y(ycp);
|
|
cgtxx2_(&x, &y, &vstat, &vconc, &xconc, &yconc, &x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4);
|
|
if (vstat == CVAL) {
|
|
/* mod## y value being stored incorrectyl; swapped x & y */
|
|
vector[5] = ndc_map_y(y4 - y1);
|
|
vector[6] = ndc_map_x(x2 - x1);
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VDSTCS) inquire error from cgtxx ");
|
|
}
|
|
}
|
|
|
|
void vdaabu_(int *button)
|
|
{
|
|
int temp, vstat, rstat, mvalid, trigger;
|
|
float xpos, ypos, timeout;
|
|
|
|
if (dev_cap[0] != 0.) {
|
|
vflush(); /* flush polyline buffer */
|
|
temp = 1;
|
|
timeout = 1.;
|
|
crqlc_(&temp, &timeout, &vstat, &rstat, &mvalid, &trigger, &xpos, &ypos);
|
|
if (vstat == CVAL) {
|
|
*button = trigger;
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VDAABU) invalid request for crqlc ");
|
|
}
|
|
}
|
|
}
|
|
|
|
void vdaloc_(float *x, float *y)
|
|
{
|
|
int temp, vstat, rstat, mvalid, trigger;
|
|
float xpos, ypos, timeout;
|
|
|
|
if (dev_cap[0] != 0.) {
|
|
vflush(); /* flush polyline buffer */
|
|
temp = 1;
|
|
timeout = 1.;
|
|
crqlc_(&temp, &timeout, &vstat, &rstat, &mvalid, &trigger, &xpos, &ypos);
|
|
if (vstat == CVAL) {
|
|
*x = ndc_map_x(xpos);
|
|
*y = ndc_map_y(ypos);
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VDALOC) invalid request for crqlc ");
|
|
}
|
|
}
|
|
}
|
|
|
|
void vdabgl_(int *button, float *x, float *y)
|
|
{
|
|
int temp, vstat, rstat, mvalid, trigger;
|
|
float xpos, ypos, timeout;
|
|
|
|
if (dev_cap[0] != 0.) {
|
|
vflush(); /* flush polyline buffer */
|
|
temp = 1;
|
|
timeout = 1.;
|
|
crqlc_(&temp, &timeout, &vstat, &rstat, &mvalid, &trigger, &xpos, &ypos);
|
|
if (vstat == CVAL) {
|
|
*x = ndc_map_x(xpos);
|
|
*y = ndc_map_y(ypos);
|
|
*button = trigger;
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VDABGL) invalid request for crqlc ");
|
|
}
|
|
}
|
|
}
|
|
|
|
void vdakgl_(int *charac, float *x, float *y)
|
|
{
|
|
int temp, vstat, rstat, mvalid, trigger;
|
|
float xpos, ypos, timeout;
|
|
|
|
if (dev_cap[0] != 0.) {
|
|
vflush(); /* flush polyline buffer */
|
|
temp = 1;
|
|
timeout = 1.;
|
|
crqlc_(&temp, &timeout, &vstat, &rstat, &mvalid, &trigger, &xpos, &ypos);
|
|
if (vstat == CVAL) {
|
|
*x = ndc_map_x(xpos);
|
|
*y = ndc_map_y(ypos);
|
|
*charac = trigger;
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VDAKGL) invalid request for crqlc ");
|
|
}
|
|
}
|
|
}
|
|
|
|
void vdstla_(float *x, float *y)
|
|
{
|
|
int temp, vstat, rstat, mvalid, trigger;
|
|
float xpos, ypos, timeout;
|
|
|
|
if (dev_cap[0] != 0.) {
|
|
vflush(); /* flush polyline buffer */
|
|
temp = 1;
|
|
timeout = 1.;
|
|
crqlc_(&temp, &timeout, &vstat, &rstat, &mvalid, &trigger, &xpos, &ypos);
|
|
if (vstat == CVAL) {
|
|
*x = ndc_map_x(xpos);
|
|
*y = ndc_map_y(ypos);
|
|
}
|
|
else {
|
|
vdicgi_errh(" SVDI Shell (VDSTLA) invalid request for crqlc ");
|
|
}
|
|
}
|
|
}
|
|
|
|
void vdstos_(float attr_array[])
|
|
{
|
|
int temp;
|
|
|
|
temp = (int)attr_array[0];
|
|
vdstfc_(&temp);
|
|
temp = (int)attr_array[1];
|
|
vdstbc_(&temp);
|
|
vdstin_(attr_array + 2);
|
|
temp = (int)attr_array[3];
|
|
vdstls_(&temp);
|
|
vdstlw_(attr_array + 4);
|
|
vdstcs_(attr_array + 5);
|
|
}
|
|
|
|
void vdfram_(int itype) {}
|
|
|
|
void vbiqpk_(void) {}
|
|
void vberrh_(void) {}
|
|
|