ISCE_INSAR/contrib/mdx/src/graphx_mdx.c

2916 lines
91 KiB
C
Executable File

/*
Copyright [year created], by the California Institute of Technology.
ALL RIGHTS RESERVED. United States Government Sponsorship acknowledged.
Any commercial use must be negotiated with the Office of Technology
Transfer at the California Institute of Technology.
This software may be subject to U.S. export control laws and regulations.
By accepting this document, the user agrees to comply with all applicable
U.S. export laws and regulations. User has the responsibility to obtain
export licenses, or other export authority as may be required before
exporting such information to foreign countries or providing access to
foreign persons.
Some code in this software may be derived of sample code obtained from programming manuals published by O'Reilly
& Associates, Inc., Copyright 1991. Permission to use, copy, modify, distribute, and sell published O'Reilly &
Associates, Inc. code is explicitly granted in the programming manuals. This notice and acknowledgement is provided
here insofar as such code may exist in this Software.
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <X11/Xlib.h>
/*
#include <X11/Intrinsic.h> Use these if no motif
#include <X11/StringDefs.h>
*/
#include <Xm/Xm.h>
#include <Xm/DrawingA.h>
#include <Xm/PanedW.h>
#include <Xm/Form.h>
#include <Xm/RowColumn.h>
#include <Xm/PushB.h>
#include <Xm/PushBG.h>
#include <Xm/DrawnB.h>
#include <Xm/ScrolledW.h>
#include <Xm/Label.h>
#include <X11/cursorfont.h>
#include <X11/keysym.h> /* for popup window only */
/* for VAX
struct descriptor
{
unsigned short length;
unsigned char data_type, dsc_class;
char *string_ptr;
};
*/
#define MAX_COLORS 256
#define SGImode
#define icon_width 29
#define icon_height 29
/* static char icon_bits[] = { */
const char icon_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x3e, 0x82, 0x00,
0xee, 0x62, 0xc6, 0x00, 0xaa, 0x42, 0x6c, 0x00, 0xba, 0xc2, 0x38, 0x00,
0x92, 0xc2, 0x38, 0x00, 0x82, 0x42, 0x62, 0x00, 0x82, 0x62, 0xc6, 0x00,
0x82, 0x3e, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
/* Global variables */
Display *dgx;
GC gc;
XtAppContext app_context;
Window root;
Window top[6];
Window wgx[321];
Window fgx[321];
Window lgx[321];
Widget scrl[321];
Widget labl[321];
Widget draw[321];
Widget form[321];
XmString a_llll[321];
Widget formy;
XEvent event;
Pixmap icon, disparity;
Colormap cmap;
XVisualInfo *visualList;
char b_bswap[4];
int *i_bswap;
int i_type[321];
int i_dx[321];
int i_wx[321];
int i_gx[6][30];
int i_tx[321];
int i_dmax;
int i_wmax;
int i_gmax;
int i_rmaxr, i_rmltr;
int i_gmaxg, i_gmltg;
int i_bmaxb, i_bmltb;
int i_init = 0;
int i_app = 0;
int i_ctype = 0;
int i_clrs = 0;
int screen;
int i_ctble;
int allocated;
int i_push = 0;
int i_db;
int i_mdsp;
int i_mxxx;
int i_myyy;
int i_message = 0;
char a_message[1600];
unsigned char red[MAX_COLORS], green[MAX_COLORS], blue[MAX_COLORS];
unsigned char rred[MAX_COLORS], ggreen[MAX_COLORS], bblue[MAX_COLORS];
Widget gftop;
Widget ewtop[10]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
/* Local functions */
static void Button_quit();
static void alo_colors();
static void put_colors();
void read_events();
int myhandler();
/* For: entry_window ***********************************************************************/
#include <Xm/LabelG.h>
#include <Xm/TextF.h>
/* For: file window ***********************************************************************/
char ident[]=" Graphx v79.0 February 16, 2011 ";
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <Xm/MainW.h>
#include <Xm/CascadeB.h>
#include <Xm/Frame.h>
#include <Xm/FileSB.h>
#include <Xm/MessageB.h>
typedef struct
{
Widget widget;
} selectData;
void closeCallBack ();
void okCallBack ();
/*-------------------------------------------------------------
** Global Variables
*/
#define MAX_ARGS 20
static XmStringCharSet charset = (XmStringCharSet) XmSTRING_DEFAULT_CHARSET;
/*************************************************************************/
#ifdef SGI
int version_gx_()
#endif
#ifdef SUN
int version_gx_()
#endif
#ifdef M10
int version_gx__()
#endif
#if defined(HP) || defined(_linux)
int version_gx()
#endif
{ int i_version;
i_version=79;
return(i_version);
}
/*************************************************************************/
#ifdef SGI
void get_colorrgb_(a_color,i_color)
#endif
#ifdef SUN
void get_colorrgb_(a_color,i_color)
#endif
#ifdef M10
void get_colorrgb__(a_color,i_color)
#endif
#if defined(HP) || defined(_linux)
void get_colorrgb(a_color,i_color)
#endif
#ifdef VAX
void get_colorrgb__(dsc,i_color)
struct descriptor *dsc;
#else
char *a_color;
#endif
int i_color[];
{
int i;
int i_cnt;
char a_lbl[80];
#ifdef VAX
char *a_color;
a_color=dsc->string_ptr;
#endif
XColor rgbcolor[1], dspcolor[1];
i_cnt = 0;
for (i=0; i < 78; i++) {
a_lbl[i] = a_color[i];
if (a_lbl[i] != 0 && a_lbl[i] != 32 ) i_cnt = i+1;
} /* enddo */
a_lbl[i_cnt] = 0;
a_lbl[79] = 0;
for (i=i_cnt; i < 80; i++) {
/* printf("i: %d\n",i); */
a_lbl[i] = 0;
} /* enddo */
/* printf("number of letters in null color name: %d\n",i_cnt);
printf("color: %s\n",a_lbl);
printf("dgx: %d\n",dgx);
printf("cmap: %d\n",cmap);
*/
if(XLookupColor(dgx,cmap,a_lbl,rgbcolor,dspcolor) != 0) {
/* printf("Found Color Name\n"); */
i_color[0]=(int)rgbcolor[0].red/256;
i_color[1]=(int)rgbcolor[0].green/256;
i_color[2]=(int)rgbcolor[0].blue/256;
/* printf("Colors found %d %d %d\n",i_color[0],i_color[1],i_color[2]); */
} /* end do */
/* if(XParseColor(dgx,cmap,a_lbl,rgbcolor) != 0) {
printf("made it to here\n");
i_color[0]=rgbcolor[0].red/256;
i_color[1]=rgbcolor[0].green/256;
i_color[2]=rgbcolor[0].blue/256;
printf("Colors found %d %d %d\n",i_color[0],i_color[1],i_color[2]);
} */ /* end do */
/* printf("Colors found are %d %d %d\n",i_color[0],i_color[1],i_color[2]); */
return;
}
/*************************************************************************/
#ifdef SGI
void plot_data_(i_d,i_w,i_num,r_x,r_y)
#endif
#ifdef SUN
void plot_data_(i_d,i_w,i_num,r_x,r_y)
#endif
#ifdef M10
void plot_data__(i_d,i_w,i_num,r_x,r_y)
#endif
#if defined(HP) || defined(_linux)
void plot_data(i_d,i_w,i_num,r_x,r_y)
#endif
int i_d[];
int i_w[];
int i_num[];
float r_x[10000], r_y[10000];
{
int i;
int i_x1,i_y1;
int i_x2,i_y2;
int xr, yr;
unsigned int width, height, bwr, dr;
/* Scale the values according to the size of the window */
XGetGeometry(dgx, wgx[i_gx[i_d[0]][i_w[0]]], &root, &xr, &yr, &width, &height, &bwr, &dr);
/* printf("plot_data1\n");
printf("plot_data2 %d\n",i_num); */
for (i = 0; i < i_num[0] - 1; i++) {
i_x1 = (int) ((r_x[i]) * width );
i_y1 = height - (int) ((r_y[i]) * height );
i_x2 = (int) ((r_x[i+1]) * width );
i_y2 = height - (int) ((r_y[i+1]) * height );
if (i_x1 < 0) i_x1 = 0;
if (i_x1 > width) i_x1 = width;
if (i_x2 < 0) i_x2 = 0;
if (i_x2 > width) i_x2 = width;
if (i_y1 < 0) i_y1 = 0;
if (i_y1 > height) i_y1 = height;
if (i_y2 < 0) i_y2 = 0;
if (i_y2 > height) i_y2 = height;
/* printf("hi from plot_data3\n");
printf("plot_data3 %d %d %d %d\n",i_x1, i_y1, i_x2, i_y2); */
XDrawLine(dgx, wgx[i_gx[i_d[0]][i_w[0]]], gc, i_x1, i_y1, i_x2, i_y2);
}
}
/*************************************************************************/
#ifdef SGI
void display_img_(i_d,i_w, i_x, i_y, i_width, i_height, i_bpl, r_rdat, r_gdat, r_bdat)
#endif
#ifdef SUN
void display_img_(i_d,i_w, i_x, i_y, i_width, i_height, i_bpl, r_rdat, r_gdat, r_bdat)
#endif
#ifdef M10
void display_img__(i_d,i_w, i_x, i_y, i_width, i_height, i_bpl, r_rdat, r_gdat, r_bdat)
#endif
#if defined(HP) || defined(_linux)
void display_img(i_d,i_w, i_x, i_y, i_width, i_height, i_bpl, r_rdat, r_gdat, r_bdat)
#endif
int i_d[];
int i_w[];
int i_x[];
int i_y[];
int i_width[];
int i_height[];
int i_bpl[];
float r_rdat[];
float r_gdat[];
float r_bdat[];
{
#ifdef M4
unsigned char i_nbits[16000001];
#else
unsigned char i_nbits[ 400001];
#endif
int i, j, k, l, m, i_bpp;
union temp {
unsigned char bbb[4];
int iii[2];
long lll[1];
};
union temp i_pix;
XImage xim;
for (i = 0 ; i < i_height[0] ; i++) for(j = 0; j < i_width[0] ; j++) {
#ifdef M4
if (i*i_width[0]+j > 4000000) {
#else
if (i*i_width[0]+j > 100000) {
#endif
printf("error - %d %d %d %d %d\n",i,j,i_width[0],i_height[0],i*i_width[0]+j);
exit(0);
} /* endif */
k = (int)((float)(i_rmaxr)*r_rdat[i*i_bpl[0]+j]);
l = (int)((float)(i_gmaxg)*r_gdat[i*i_bpl[0]+j]);
m = (int)((float)(i_bmaxb)*r_bdat[i*i_bpl[0]+j]);
if (k < 0) {
printf("rdat < 0 %d \n",k);
k = 0;
} /* endif */
if (k > i_rmaxr-1) {
/* printf("rdat => i_rmaxr %d %d \n",k,i_rmaxr); */
k = i_rmaxr-1;
} /* endif */
if (l < 0) {
printf("gdat < 0 %d \n",l);
l = 0;
} /* endif */
if (l > i_gmaxg-1) {
/* printf("gdat => i_gmaxg %d %d \n",l,i_gmaxg); */
l = i_gmaxg-1;
} /* endif */
if (m < 0) {
printf("bdat < 0 %d \n",m);
m = 0;
} /* endif */
if (m > i_bmaxb-1) {
/* printf("bdat => i_bmaxb %d %d \n",m,i_bmaxb); */
m = i_bmaxb-1;
} /* endif */
i_pix.lll[0] = (long)(k*i_rmltr)+(long)(l*i_gmltg)+(long)(m*i_bmltb);
if (*i_bswap == 1) {
if (visualList[0].depth == 8) {
i_bpp = 8;
i_nbits[(i*i_width[0]+j)] = i_pix.bbb[3];
} else if (visualList[0].depth == 15) {
i_bpp = 16;
i_nbits[(i*i_width[0]+j)*2+0] = i_pix.bbb[2];
i_nbits[(i*i_width[0]+j)*2+1] = i_pix.bbb[3];
} else if (visualList[0].depth == 16) {
i_bpp = 16;
i_nbits[(i*i_width[0]+j)*2+0] = i_pix.bbb[2];
i_nbits[(i*i_width[0]+j)*2+1] = i_pix.bbb[3];
} else if (visualList[0].depth == 24) {
i_bpp = 32;
i_nbits[(i*i_width[0]+j)*4+0] = i_pix.bbb[0];
i_nbits[(i*i_width[0]+j)*4+1] = i_pix.bbb[1];
i_nbits[(i*i_width[0]+j)*4+2] = i_pix.bbb[2];
i_nbits[(i*i_width[0]+j)*4+3] = i_pix.bbb[3];
} else {
printf("depth not supported \n");
} }
else {
if (visualList[0].depth == 8) {
i_bpp = 8;
i_nbits[(i*i_width[0]+j)] = i_pix.bbb[3];
} else if (visualList[0].depth == 15) {
i_bpp = 16;
i_nbits[(i*i_width[0]+j)*2+1] = i_pix.bbb[2];
i_nbits[(i*i_width[0]+j)*2+0] = i_pix.bbb[3];
} else if (visualList[0].depth == 16) {
i_bpp = 16;
i_nbits[(i*i_width[0]+j)*2+1] = i_pix.bbb[2];
i_nbits[(i*i_width[0]+j)*2+0] = i_pix.bbb[3];
} else if (visualList[0].depth == 24) {
i_bpp = 32;
i_nbits[(i*i_width[0]+j)*4+3] = i_pix.bbb[0];
i_nbits[(i*i_width[0]+j)*4+2] = i_pix.bbb[1];
i_nbits[(i*i_width[0]+j)*4+1] = i_pix.bbb[2];
i_nbits[(i*i_width[0]+j)*4+0] = i_pix.bbb[3];
} else {
printf("depth not supported \n");
}
}
}
xim.depth = visualList[0].depth;
xim.data = (char *)i_nbits;
xim.bitmap_pad = 8;
xim.width = i_width[0];
xim.height = i_height[0];
xim.format = ZPixmap;
xim.bits_per_pixel = i_bpp;
xim.byte_order = MSBFirst;
xim.bytes_per_line = i_width[0]*i_bpp/8;
xim.red_mask = visualList[0].red_mask;
xim.green_mask = visualList[0].green_mask;
xim.blue_mask = visualList[0].blue_mask;
XPutImage(dgx, wgx[i_gx[i_d[0]][i_w[0]]], gc, &xim, 0, 0, i_x[0], i_y[0], i_width[0], i_height[0]);
}
/*************************************************************************/
#ifdef SGI
void display_label_(i_d,i_w,a_string,i_center)
#endif
#ifdef SUN
void display_label_(i_d,i_w,a_string,i_center)
#endif
#ifdef M10
void display_label__(i_d,i_w,a_string,i_center)
#endif
#if defined(HP) || defined(_linux)
void display_label(i_d,i_w,a_string,i_center)
#endif
int i_d[];
int i_w[];
int i_center[];
char a_string[255];
{
int i;
int n;
int i_cnt;
char a_lbl[255];
/* displays a string at the top of a window */
XmString motif_string;
Arg args[2];
i_cnt = 0;
for (i=0; i < 254; i++) {
a_lbl[i] = a_string[i];
if (a_lbl[i] != 0 && a_lbl[i] != 32 ) i_cnt = i+1;
} /* enddo */
a_lbl[i_cnt] = 0;
motif_string = XmStringCreate((char *)a_lbl, XmSTRING_DEFAULT_CHARSET);
if (i_db > 8-1) printf("i_center = %d\n",i_center[0]);
n = 0;
XtSetArg(args[n], XmNlabelString, motif_string);n++;
if (i_center[0]==1) {XtSetArg(args[n],XmNalignment,XmALIGNMENT_BEGINNING);n++;}
else {XtSetArg(args[n],XmNalignment,XmALIGNMENT_CENTER);n++; }
/* endif */
XtSetValues(labl[i_gx[i_d[0]][i_w[0]]], args, n);
XFlush(dgx);
}
/*************************************************************************/
char *a_lll;
Widget main_windowew[10],rowcolew[10];
#ifdef SGI
void entry_window_(i_chn,a_label,a_data)
#endif
#ifdef SUN
void entry_window_(i_chn,a_label,a_data)
#endif
#ifdef M10
void entry_window__(i_chn,a_label,a_data)
#endif
#if defined(HP) || defined(_linux)
void entry_window(i_chn,a_label,a_data)
#endif
int i_chn[1];
char a_label[3360];
char a_data[3360];
{
static char a_labels[21][160];
static char a_datas[21][160];
static char a_smenu[21][160];
char a_title[160];
Widget textwin, formwin_e, labelwidgit_e, op_menu, pd_menu, menu_item[20];
int i;
int j;
int i_flag;
int n;
int num;
int iii;
int jjj;
int nnn;
Arg args[10];
void print_result();
void ewManager();
void ewdsp_reset();
if (i_db > 8-1) printf("inside entry_window %d\n",i_chn[0]);
if (ewtop[i_chn[0]] != 0) {
if (i_db > 8-1) printf("raising window to forground %d\n",i_chn[0]);
XRaiseWindow(dgx, XtWindow(ewtop[i_chn[0]]));
if (i_db > 8-1) printf("destroying rowcol widget %d\n",i_chn[0]);
XtDestroyWidget(rowcolew[i_chn[0]]); }
else {
/* printf("parsing title %d\n",i_chn[0]); */
num=0;
for (i=0; i<159; i++) {
a_title[i] = a_label[i];
if (a_title[i] != 0 && a_title[i] != 32 ) num = i+1;
} /* enddo */
/* printf("num= %d\n",num); */
a_title[num] = 0;
n = 0;
XtSetArg(args[n], XmNtitle, a_title); n++;
/* XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++; */
if (i_db > 7-1) printf("creating new entry window\n");
ewtop[i_chn[0]] = XtAppCreateShell(NULL,"appClass",
topLevelShellWidgetClass,dgx,
args, n);
/*
* Create main window.
*/
n = 0;
main_windowew[i_chn[0]] = XtCreateManagedWidget("main",
xmMainWindowWidgetClass, ewtop[i_chn[0]],
args, n);
XtAddCallback(main_windowew[i_chn[0]], XmNdestroyCallback,
ewdsp_reset, (XtPointer)i_chn[0]);
} /* end if */
if (i_db > 8-1) printf("Creating new rowcol widget %d\n",i_chn[0]);
rowcolew[i_chn[0]] = XtVaCreateWidget("rowcol",
xmRowColumnWidgetClass, main_windowew[i_chn[0]], NULL);
if (i_db > 8-1) printf("Parsing lables\n");
/* for (i = 0; i < XtNumber(a_labels); i++) { */
for (i = 1; i < 20; i++) {
num=0;
iii=0;
jjj=0;
nnn=0;
/* printf("i= %d\n",i); */
for (j=0; j<159; j++) {
a_datas[i][j] = a_data[(i*160+j)];
if (a_datas[i][j] != 0 && a_datas[i][j] != 32 ) num = j+1;
if (a_datas[i][j] != 124) { /* looks for a "|" */
a_smenu[iii][jjj]=a_datas[i][j];
if (a_datas[i][j] != 0 && a_datas[i][j] != 32 ) nnn = jjj+1;
jjj=jjj+1; }
else {
a_smenu[iii][nnn]=0;
iii=iii+1;
jjj=0;
nnn=0;
} /* endif */
} /* enddo */
a_datas[i][num] = 0;
a_smenu[iii][nnn] = 0;
jjj=a_smenu[0][0]-48;
if (a_smenu[0][1] != 0) jjj=jjj*10+a_smenu[0][1]-48;
if (i_db > 9-1) printf("a_datas[%d] = %s\n",i,a_datas[i]);
num=0;
for (j=0; j<159; j++) {
a_labels[i][j] = a_label[160*i+j];
if (a_labels[i][j] != 0 && a_labels[i][j] != 32 ) num = j+1;
} /* enddo */
a_labels[i][num] = 0;
if (i_db > 9-1) printf("a_labels[%d] = %s\n",i,a_labels[i]);
/* printf("num of %d = %d\n",i,num); */
if (num != 0) {
formwin_e = XtVaCreateWidget("form", xmFormWidgetClass, rowcolew[i_chn[0]],
XmNfractionBase, 10,
XmNheight, 35, /* added to force correct size on mac and pc !@#$% SJS 2/5/03 */
NULL);
if (a_labels[i][0] != 124) {
labelwidgit_e = XtVaCreateManagedWidget(a_labels[i],
xmLabelGadgetClass, formwin_e,
XmNtopAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_POSITION,
XmNrightPosition, 3,
XmNalignment, XmALIGNMENT_END,
NULL);
if (iii==0) {
textwin = XtVaCreateManagedWidget("textwin",
xmTextFieldWidgetClass, formwin_e,
XmNrightAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_POSITION,
XmNleftPosition, 4,
XmNtraversalOn, True,
XmNvalue, a_datas[i],
NULL);
/* When user hits return, print the label+value of textwin */
if (i_db > 9-1) printf("a_labels[%d] %d %s\n",i,&a_labels[i],a_labels[i]);
a_lll = (char *) &a_labels[i];
/* XtAddCallback(textwin, XmNactivateCallback,print_result, (XtPointer)a_lll); */
i_flag=(i_chn[0]*10000)+((i)*100)+0;
if (i_db > 9-1) printf("Adding Callback %d\n",i_flag);
XtAddCallback(textwin, XmNlosingFocusCallback,ewManager, (XtPointer)i_flag);
XtAddCallback(textwin, XmNactivateCallback,ewManager, (XtPointer)i_flag);
if (i_db > 8-1) printf("a_lll = %d %s %d %d %d\n",a_lll,a_lll,*(a_lll+0),*(a_lll+1),*(a_lll+2));
XtAddCallback(textwin, XmNactivateCallback,
XmProcessTraversal, (XtPointer)XmTRAVERSE_NEXT_TAB_GROUP);
}
else {
if (i_db > 8-1) printf("Creating option_menu widget. Default=%d\n",jjj);
n = 0;
pd_menu = XmCreatePulldownMenu(formwin_e, "My_Pulldown_Menu",args, n);
if (i_db > 8-1) printf("Creating submenus %d\n",iii);
for (j=1;j<iii+1;j++) {
i_flag=(i_chn[0]*10000)+((i)*100)+j;
if (i_db > 8-1) printf("adding pulldown option %d: %s\n",j, a_smenu[j]);
/* menu_item[j] = XtVaCreateManagedWidget(a_smenu[j],xmPushButtonGadgetClass,pd_menu,NULL); */
n=0;
menu_item[j] = XmCreatePushButton(pd_menu,a_smenu[j],args,n);
XtManageChild(menu_item[j]);
XtAddCallback(menu_item[j],XmNactivateCallback, ewManager, (XtPointer)i_flag);
} /* End do */
/* XtManageChild(pd_menu); */
n = 0;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
XtSetArg(args[n], XmNleftPosition, 4); n++;
XtSetArg(args[n], XmNsubMenuId, pd_menu); n++;
XtSetArg(args[n], XmNbuttonCount, iii); n++;
XtSetArg(args[n], XmNmenuHistory, menu_item[jjj]); n++;
op_menu = XmCreateOptionMenu(formwin_e,(char *)XmStringCreateSimple("Option_Menu"),args,n);
XtManageChild(op_menu);
}
} else {
labelwidgit_e = XtVaCreateManagedWidget(NULL,
xmLabelGadgetClass, formwin_e,
XmNtopAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_POSITION,
XmNrightPosition, 3,
XmNalignment, XmALIGNMENT_END,
NULL);
}
XtManageChild(formwin_e);
}
}
XtManageChild(rowcolew[i_chn[0]]);
XtRealizeWidget(ewtop[i_chn[0]]);
}
void print_result(textwin, label) /* To debug entry window */
Widget textwin;
char *label;
{
char *value = XmTextFieldGetString(textwin);
printf("%d %s %s\n", label, label, value);
printf("%d %d %d %d\n", label, *(label+0), *(label+1), *(label+2));
XtFree(value);
}
/*******************************************************************/
void ewManager(textwin, client_info, call_info)
Widget textwin;
XtPointer client_info;
XtPointer call_info;
{
/* char *value = XmTextFieldGetString(textwin); */
char *value;
int i;
int j;
int i_data;
int i_edsp;
int i_exxx;
int i_eyyy;
XEvent client_event;
i_data = (int) client_info;
i_edsp = (int)(i_data/10000);
i_exxx = (int)((i_data - (10000*i_edsp))/100);
i_eyyy = (int)((i_data - (10000*i_edsp)) - (100*i_exxx));
/* printf("eyyy=%d\n",i_eyyy); */
value=" ";
if (i_eyyy == 0) value = XmTextFieldGetString(textwin);
if (i_db > 7-1) printf("Set: %d, Entry: %d, SubEntry: %d, Value: %s\n",i_edsp,i_exxx,i_eyyy,value);
/* printf("%d %s %s\n", label, label, value);
printf("%d %d %d %d\n", label, *(label+0), *(label+1), *(label+2)); */
i_message = i_message+1;
if(i_message==10) i_message=0;
client_event.xclient.type = ClientMessage;
client_event.xclient.display = dgx;
client_event.xclient.window = XtWindow(textwin);
client_event.xclient.format = 32;
client_event.xclient.data.l[0] = i_edsp;
client_event.xclient.data.l[1] = i_exxx;
client_event.xclient.data.l[2] = i_eyyy;
client_event.xclient.data.l[3] = 10;
client_event.xclient.data.l[4] = i_message;
/* XSendEvent(dgx,wgx[i_gx[i_edsp][1]],False,ButtonReleaseMask,&client_event); */
/* XSendEvent(dgx,XtWindow(ewtop[i_edsp]),False,ButtonReleaseMask,&client_event); This should have worked arrrggg */
for (i=1;i<5+1;i++) {
if (top[i] != 0) j=i;
}
if (i_db > 7-1) printf("j= %d\n",j);
XSendEvent(dgx,wgx[i_gx[j][1]],False,ButtonReleaseMask,&client_event);
for (i=0;i<160;i++) {a_message[i_message*160+i] = *(value+i);}
if (i_db > 7-1) printf("message= %s\n",&a_message[i_message*160]);
/* XtFree(value); */
}
/*************************************************************************/
#ifdef SGI
void get_message_(i_msg,a_msg)
#endif
#ifdef SUN
void get_message_(i_msg,a_msg)
#endif
#ifdef M10
void get_message__(i_msg,a_msg)
#endif
#if defined(HP) || defined(_linux)
void get_message(i_msg,a_msg)
#endif
int i_msg[1];
char a_msg[160];
{
int i;
int i_flag;
i_flag = 0;
for (i=0; i < 160; i++) {
a_msg[i] = a_message[i_msg[0]*160+i];
a_message[i_msg[0]*160+i]=0;
if(a_msg[i]==0 | i_flag == 1) {
a_msg[i]=32;
i_flag = 1;
}
}
if (i_db > 7-1) printf("msg=%s\n",a_msg);
}
void ewdsp_reset(w, client_info)
Widget w;
XtPointer client_info;
{
int idata;
idata = (int) client_info;
if (i_db > 11-1) printf("setting ewtop to 0 %d\n", idata);
ewtop[idata]=0;
}
void closeCallBack (widgy, client_info, call_info)
Widget widgy; /* widget id */
XtPointer client_info; /* data from application */
XtPointer call_info; /* data from widget class */
{
/* XDestroyWindow(dgx,XtWindow(gftop)); */
XtDestroyWidget(gftop);
}
/*************************************************************************/
void MenuManager (widgy, client_info, call_info)
Widget widgy; /* widget id */
XtPointer client_info; /* data from application */
XtPointer call_info; /* data from widget class */
{
int i_data;
XEvent client_event;
i_data = (int) client_info;
i_mdsp = (int)(i_data/100);
i_mxxx = (int)((i_data - (100*i_mdsp))/10);
i_myyy = (int)((i_data - (100*i_mdsp)) - (10*i_mxxx));
if (i_db > 8-1) printf("Pull Down Window Number = %d %d %d %d\n",i_data, i_mdsp, i_mxxx,i_myyy);
client_event.xclient.type = ClientMessage;
client_event.xclient.display = dgx;
client_event.xclient.window = wgx[i_gx[i_mdsp][0]];
client_event.xclient.format = 32;
client_event.xclient.data.l[0] = i_mdsp;
client_event.xclient.data.l[1] = i_mxxx;
client_event.xclient.data.l[2] = i_myyy;
client_event.xclient.data.l[3] = 0;
client_event.xclient.data.l[4] = 0;
XSendEvent(dgx,wgx[i_gx[i_mdsp][0]],False,ButtonReleaseMask,&client_event);
}
/*************************************************************************/
void ButtonManager (widgy, client_info, call_info)
Widget widgy; /* widget id */
XtPointer client_info; /* data from application */
XtPointer call_info; /* data from widget class */
{
int i_g;
/* XFontStruct *font1; */
XmFontList fontlist;
int xr, yr;
unsigned int width, height, bwr, dr;
i_g = (int) client_info;
/* printf("Button Number = %d %d %d\n",i_g, i_dx[i_g], i_wx[i_g]); */
XtVaGetValues(draw[i_g],XmNfontList, &fontlist, NULL);
/* XtVaGetValues(draw[i_gx[i_dx[i_g]][0]],XmNfontList, &fontlist, NULL); */
/* font1==XLoadQueryFont(dgx, "-*-courier-*-r-*--12-*");
XmFontListCreate(font1, XmSTRING_DEFAULT_CHARSET); */
XGetGeometry(dgx, wgx[i_g], &root, &xr, &yr, &width, &height, &bwr, &dr);
/* printf("Button width/height = %d %d \n", width, height); */
XmStringDraw(dgx,wgx[i_g],fontlist,a_llll[i_g],gc,width/2,height/2-9,0,XmALIGNMENT_CENTER,
XmSTRING_DIRECTION_L_TO_R,NULL);
}
/*************************************************************************/
#ifdef SGI
void gx_getfile_(a_file,i_inflag)
#endif
#ifdef SUN
void gx_getfile_(a_file,i_inflag)
#endif
#ifdef M10
void gx_getfile__(a_file,i_inflag)
#endif
#if defined(HP) || defined(_linux)
void gx_getfile(dsc,i_inflag)
#endif
char a_file[120];
int i_inflag[0];
{
int n;
Arg args[10];
Widget main_window, menu_bar, menu_pane, button, fsbox;
Widget cascade, temp;
XmString str1;
int i;
int i_cnt;
int i_flag;
char a_lbl[120];
i_flag=i_inflag[0];
/* printf("i_flag in getfile = %d\n",i_flag); */
i_cnt = 0;
for (i=0; i < 118; i++) {
a_lbl[i] = a_file[i];
if (a_lbl[i] != 0 && a_lbl[i] != 32 ) i_cnt = i+1;
} /* enddo */
a_lbl[i_cnt] = 0;
/*
* Initialize the toolkit.
*/
n = 0;
/* XtSetArg(args[n], XmNtitle, "Filenames"); n++;
XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++; */
if (i_db > 3-1) printf("Creating shell\n");
gftop = XtAppCreateShell(NULL,"appClass",
topLevelShellWidgetClass,dgx,
args, n);
/* gftop = XtAppCreateShell(NULL,"appClass",
overrideShellWidgetClass,dgx,
args, n); */
if (i_db > 4-1) printf("Made top level shell\n");
/*
* Create main window.
*/
n = 0;
main_window = XmCreateMainWindow (gftop, "main1", args, n);
XtManageChild (main_window);
/*
* Create menu bar in main window.
*/
n = 0;
menu_bar = XmCreateMenuBar (main_window, "menu_bar", args, n);
XtManageChild (menu_bar);
/*
* Create "Actions" pulldown menu.
*/
n = 0;
menu_pane = XmCreatePulldownMenu (menu_bar, "menu_pane", args, n);
n = 0;
button = XmCreatePushButton (menu_pane, "Close", args, n);
XtManageChild (button);
XtAddCallback (button, XmNactivateCallback, closeCallBack, NULL);
n = 0;
XtSetArg (args[n], XmNsubMenuId, menu_pane); n++;
cascade = XmCreateCascadeButton (menu_bar, "Window", args, n);
XtManageChild (cascade);
str1 = XmStringCreateLtoR ("Files", XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg (args[n], XmNlistLabelString, str1); n++;
fsbox = XmCreateFileSelectionBox (main_window, "fileselect", args, n);
XtManageChild (fsbox);
XmStringFree (str1);
XtAddCallback (fsbox, XmNokCallback, okCallBack, (XtPointer)i_flag);
temp = XmFileSelectionBoxGetChild (fsbox, XmDIALOG_CANCEL_BUTTON);
XtUnmanageChild (temp);
temp = XmFileSelectionBoxGetChild (fsbox, XmDIALOG_HELP_BUTTON);
XtUnmanageChild (temp);
/*
* Set Main Window areas.
*/
XmMainWindowSetAreas (main_window, menu_bar, NULL, NULL, NULL, fsbox);
/*
* Realize the widget hierarchy and enter the main loop.
*/
XtRealizeWidget (gftop);
}
void
okCallBack (widgy, client_info, call_info)
Widget widgy;
XtPointer client_info;
XmFileSelectionBoxCallbackStruct *call_info;
{
Arg args[10];
XmString pathstring = NULL;
XmString carraige_rtn = NULL;
XEvent client_event;
int i, j;
int i_data;
int i_edsp;
char *value;
int n, stat_val;
static XmStringCharSet charset = (XmStringCharSet) XmSTRING_DEFAULT_CHARSET;
char *path;
i_data = (int) client_info;
i_edsp = 0;
value=" ";
value = XmTextFieldGetString(widgy);
n = 0;
carraige_rtn = XmStringCreateLtoR ("\012\012", charset);
pathstring = XmStringConcat (call_info->value, carraige_rtn);
XmStringGetLtoR (call_info->value, charset, &path);
XtDestroyWidget(gftop); /* this line closes file selection window */
i_message = i_message+1;
if(i_message==10) i_message=0;
client_event.xclient.type = ClientMessage;
client_event.xclient.display = dgx;
client_event.xclient.format = 32;
client_event.xclient.data.l[0] = 0;
client_event.xclient.data.l[1] = 0;
client_event.xclient.data.l[2] = i_data;
client_event.xclient.data.l[3] = 12;
client_event.xclient.data.l[4] = i_message;
for (i=1;i<5+1;i++) {
if (top[i] != 0) j=i;
}
if (i_db > 7-1) printf("okCallBack j= %d\n",j);
XSendEvent(dgx,wgx[i_gx[j][1]],False,ButtonReleaseMask,&client_event);
for (i=0;i<160;i++) {a_message[i_message*160+i] = *(path+i);}
if (i_db > 7-1) printf("message= %s\n",&a_message[i_message*160]);
}
/*************************************************************************/
#ifdef SGI
void topwin_(i_w)
#endif
#ifdef SUN
void topwin_(i_w)
#endif
#ifdef M10
void topwin_(i_w)
#endif
#if defined(HP) || defined(_linux)
void topwin(i_w)
#endif
int i_w[];
{
if (top[i_w[0]] != 0) XRaiseWindow(dgx, top[i_w[0]]);
}
/*************************************************************************/
#ifdef SGI
void get_wininfo_(i_d, i_w, i_vx, i_vy, i_vw, i_vh, i_cw, i_ch,i_widget)
#endif
#ifdef SUN
void get_wininfo_(i_d, i_w, i_vx, i_vy, i_vw, i_vh, i_cw, i_ch,i_widget)
#endif
#ifdef M10
void get_wininfo__(i_d, i_w, i_vx, i_vy, i_vw, i_vh, i_cw, i_ch,i_widget)
#endif
#if defined(HP) || defined(_linux)
void get_wininfo(i_d, i_w, i_vx, i_vy, i_vw, i_vh, i_cw, i_ch,i_widget)
#endif
int i_d[];
int i_w[];
int i_vx[], i_vy[];
int i_vw[], i_vh[];
int i_cw[], i_ch[];
int i_widget[];
{
int xr, yr;
unsigned int width, height, bwr, dr;
XGetGeometry(dgx, wgx[i_gx[i_d[0]][i_w[0]]], &root, &xr, &yr, &width, &height, &bwr, &dr);
i_vx[0] = -xr;
i_vy[0] = -yr;
i_cw[0] = width;
i_ch[0] = height;
XGetGeometry(dgx, fgx[i_gx[i_d[0]][i_w[0]]], &root, &xr, &yr, &width, &height, &bwr, &dr);
i_vw[0] = width;
i_vh[0] = height;
if (scrl[i_gx[i_d[0]][i_w[0]]] != 0) { /* gets proper viewport size when scrollbars are present Should
probably correct for this elsewhere so the configure event always returns the correct size */
XGetGeometry(dgx, XtWindow(scrl[i_gx[i_d[0]][i_w[0]]]), &root, &xr, &yr, &width, &height, &bwr, &dr);
i_vw[0] = width+xr;
i_vh[0] = height+yr;
if (i_db == -21) printf("scroll bar size= %d %d %d %d\n",xr,yr,width,height);
}
i_widget[0] = i_push;
}
/*************************************************************************/
#ifdef SGI
void move_scroll_(i_d,i_w,i_x,i_y)
#endif
#ifdef SUN
void move_scroll_(i_d,i_w,i_x,i_y)
#endif
#ifdef M10
void move_scroll__(i_d,i_w,i_x,i_y)
#endif
#if defined(HP) || defined(_linux)
void move_scroll(i_d,i_w,i_x,i_y)
#endif
int i_d[];
int i_w[];
int i_x[];
int i_y[];
{
Widget vsb;
Widget hsb;
/* XWindowChanges xwc; */
int increment=0;
int maximum=0;
int minimum=0;
int page_incr=0;
int slider_size=0;
int value=0;
XtVaGetValues(scrl[i_gx[i_d[0]][i_w[0]]],XmNverticalScrollBar, &vsb,NULL);
XtVaGetValues(scrl[i_gx[i_d[0]][i_w[0]]],XmNhorizontalScrollBar,&hsb,NULL);
XtVaGetValues(vsb,XmNincrement, &increment,
XmNmaximum, &maximum,
XmNminimum, &minimum,
XmNpageIncrement, &page_incr,
XmNsliderSize, &slider_size,
XmNvalue, &value,
NULL);
/*
printf("inc=%d, max=%d, min=%d, page=%d, slider=%d, value=%d\n",
increment,maximum,minimum,page_incr,slider_size,value);
*/
value=i_y[0];
if (value < minimum) value = minimum;
if (value > maximum-slider_size) value = maximum-slider_size;
XmScrollBarSetValues(vsb,value,slider_size,increment,page_incr,True);
XtVaGetValues(hsb,XmNincrement, &increment,
XmNmaximum, &maximum,
XmNminimum, &minimum,
XmNpageIncrement, &page_incr,
XmNsliderSize, &slider_size,
XmNvalue, &value,
NULL);
value=i_x[0];
if (value < minimum) value = minimum;
if (value > maximum-slider_size) value = maximum-slider_size;
XmScrollBarSetValues(hsb,value,slider_size,increment,page_incr,True);
/* The following code would change the slider positions, but not move the data properly
n = 0;
XtSetArg(args[n], XmNvalue, i_x[0]); n++;
XtSetValues(hsb, args, n);
n = 0;
XtSetArg(args[n], XmNvalue, i_y[0]); n++;
XtSetValues(vsb, args, n);
xwc.x=-i_x[0];
xwc.y=-i_y[0];
XConfigureWindow(dgx, wgx[i_gx[i_d[0]][i_w[0]]], CWX | CWY, &xwc);
*/
}
/*************************************************************************/
#ifdef SGI
void resize_win_(i_d,i_w,i_x,i_y)
#endif
#ifdef SUN
void resize_win_(i_d,i_w,i_x,i_y)
#endif
#ifdef M10
void resize_win__(i_d,i_w,i_x,i_y)
#endif
#if defined(HP) || defined(_linux)
void resize_win(i_d,i_w,i_x,i_y)
#endif
int i_d[];
int i_w[];
int i_x[];
int i_y[];
{
unsigned int wide;
unsigned int high;
int n;
Arg args[10];
int maximum=30000;
int minimum=100;
/* XWindowChanges xwc; */
wide=i_x[0];
if (wide < minimum) wide = minimum;
if (wide > maximum) wide = maximum;
high=i_y[0];
if (high < minimum) high = minimum;
if (high > maximum) high = maximum;
/* xwc.width=wide; ! for some reason, this code did not update the scoll bars properly
xwc.height=high;
XConfigureWindow(dgx, wgx[i_gx[i_d[0]][i_w[0]]], CWWidth | CWHeight, &xwc); */
/* XResizeWindow(dgx,wgx[i_gx[i_d[0]][i_w[0]]],wide,high); */
/* XtResizeWidget(draw[i_gx[i_d[0]][i_w[0]]],wide,high); */
n = 0;
XtSetArg(args[n], XmNwidth, wide); n++;
XtSetArg(args[n], XmNheight, high); n++;
XtSetValues(draw[i_gx[i_d[0]][i_w[0]]], args, n);
XFlush(dgx);
}
/*************************************************************************/
#ifdef SGI
void set_button_shadow_(i_d,i_w,i_shadow,i_debug)
#endif
#ifdef SUN
void set_button_shadow_(i_d,i_w,i_shadow,i_debug)
#endif
#ifdef M10
void set_button_shadow__(i_d,i_w,i_shadow,i_debug)
#endif
#if defined(HP) || defined(_linux)
void set_button_shadow(i_d,i_w,i_shadow,i_debug)
#endif
int i_d[];
int i_w[];
int i_shadow[];
int i_debug[];
{
int n;
Arg args[10];
n = 0;
if (i_shadow[0] == 1) {
XtSetArg(args[n], XmNshadowType, XmSHADOW_IN); n++;
if (i_debug[0] > 7-1) printf("setting shadow in %d %d\n",i_d[0],i_w[0]);
}
else {
XtSetArg(args[n], XmNshadowType, XmSHADOW_OUT); n++;
if (i_debug[0] > 7-1) printf("setting shadow out %d %d\n",i_d[0],i_w[0]);
}
XtSetValues(draw[i_gx[i_d[0]][i_w[0]]], args, n);
/* if (i_tx[i_g] == 0) {
XtVaSetValues(draw[i_g],XmNshadowType, XmSHADOW_IN,NULL);
}
else {
XtVaSetValues(draw[i_g],XmNshadowType, XmSHADOW_OUT,NULL);
i_tx[i_g]=1;
}
*/
}
/*************************************************************************/
#ifdef SGI
void move_win_(i_d,i_w,i_x,i_y)
#endif
#ifdef SUN
void move_win_(i_d,i_w,i_x,i_y)
#endif
#ifdef M10
void move_win__(i_d,i_w,i_x,i_y)
#endif
#if defined(HP) || defined(_linux)
void move_win(i_d,i_w,i_x,i_y)
#endif
int i_d[];
int i_w[];
int i_x[];
int i_y[];
{
XWindowChanges xwc;
xwc.x=-i_x[0];
xwc.y=-i_y[0];
XConfigureWindow(dgx, wgx[i_gx[i_d[0]][i_w[0]]], CWX | CWY, &xwc);
}
/*************************************************************************/
#ifdef SGI
void destroy_display_(i_d)
#endif
#ifdef SUN
void destroy_display_(i_d)
#endif
#ifdef M10
void destroy_display__(i_d)
#endif
#if defined(HP) || defined(_linux)
void destroy_display(i_d)
#endif
int i_d[];
{
XUnmapWindow(dgx,top[i_d[0]]);
XDestroyWindow(dgx,top[i_d[0]]);
}
/*************************************************************************/
#ifdef SGI
void getevent_(i_flg,i_event)
#endif
#ifdef SUN
void getevent_(i_flg,i_event)
#endif
#ifdef M10
void getevent_(i_flg,i_event)
#endif
#if defined(HP) || defined(_linux)
void getevent(i_flg,i_event)
#endif
int i_flg[];
int i_event[10];
{
XEvent report;
int i;
int i_loop;
char buffer[40];
int bufsize = 40;
KeySym keysym;
XComposeStatus compose;
i_event[0] = 0;
i_event[1] = 0;
i_event[2] = 0;
i_event[3] = 0;
i_event[4] = 0;
i_event[5] = 0;
i_event[6] = 0;
i_event[7] = 0;
if (i_flg[0] == 0 | XPending(dgx) ) {
i_loop = 0;
while(i_loop == 0) {
XtAppNextEvent(app_context,&report);
/* XNextEvent(dgx,&report); */
/* printf("report.type = %d \n",report.type); */
/* switch (report.type) {
case Expose:
printf("report=Expose %d\n",report.xexpose.window);
break;
case ConfigureNotify:
printf("report=ConfigureNotify %d\n",report.xconfigure.window);
break;
case ButtonPress:
printf("report=ButtonPress %d\n",report.xbutton.window);
break;
case ButtonRelease:
printf("report=ButtonRelease %d\n",report.xbutton.window);
break;
case KeyPress:
printf("report=KeyPress %d\n",report.xkey.window);
break;
case KeyRelease:
printf("report=KeyRelease %d\n",report.xkey.window);
break;
case DestroyNotify:
printf("report=DestroyNotify %d\n",report.xdestroywindow.window);
break;
default:
break; */ /* do nothing */
/* } */ /* end case */
switch (report.type) {
case Expose:
for(i=1; i<i_gmax+1; i++)
if (report.xexpose.window == wgx[i]) {
i_event[0] = i_dx[i];
i_event[1] = i_wx[i];
}
if (i_event[0] == 0) break;
i_event[2] = 1;
i_event[3] = report.xexpose.x;
i_event[4] = report.xexpose.y;
i_event[5] = report.xexpose.width;
i_event[6] = report.xexpose.height;
i_event[7] = report.xexpose.count;
i_loop = 1;
break;
case ConfigureNotify:
for (i=1; i<i_gmax+1; i++)
if (report.xconfigure.window == wgx[i]) {
i_event[0] = i_dx[i];
i_event[1] = i_wx[i];
}
for (i=1; i<i_gmax+1; i++)
if (report.xconfigure.window == fgx[i]) {
i_event[0] = i_dx[i];
i_event[1] = -i_wx[i];
}
if (i_event[0] == 0) break;
if (i_event[1] > 0) {
i_event[2] = 2;
i_event[3] = -report.xconfigure.x;
i_event[4] = -report.xconfigure.y;
i_event[5] = report.xconfigure.width;
i_event[6] = report.xconfigure.height;
i_event[7] = 0;
i_loop = 1; }
else {
i_event[1] = -i_event[1];
i_event[2] = 3;
i_event[3] = report.xconfigure.x;
i_event[4] = report.xconfigure.y;
i_event[5] = report.xconfigure.width;
i_event[6] = report.xconfigure.height;
i_event[7] = 0;
i_loop = 1;
} /* endif */
break;
case ButtonPress:
for (i=1; i<i_gmax+1; i++) {
if (report.xbutton.window == wgx[i]) {
i_event[0] = i_dx[i];
i_event[1] = i_wx[i];
}
if (report.xbutton.window == lgx[i]) {
i_event[0] = i_dx[i];
i_event[1] = -i_wx[i];
}
}
if (i_event[0] == 0) break;
i_event[2] = 4;
i_event[3] = report.xbutton.button;
i_event[4] = report.xbutton.x;
i_event[5] = report.xbutton.y;
i_event[6] = 0;
i_event[7] = 0;
i_loop = 1;
break;
case ButtonRelease:
for (i=1; i<i_gmax+1; i++) {
if (report.xbutton.window == wgx[i]) {
i_event[0] = i_dx[i];
i_event[1] = i_wx[i];
}
if (report.xbutton.window == lgx[i]) {
i_event[0] = i_dx[i];
i_event[1] = -i_wx[i];
}
}
if (i_event[0] == 0) break;
i_event[2] = 5;
i_event[3] = report.xbutton.button;
i_event[4] = report.xbutton.x;
i_event[5] = report.xbutton.y;
i_event[6] = 0;
i_event[7] = 0;
/* if (i_event[1] == 0) {
i_event[4] = i_mxxx;
i_event[5] = i_myyy;
i_event[6] = i_mdsp;
i_mxxx = 0;
i_myyy = 0;
i_mdsp = 0;
} */
i_loop = 1;
break;
case KeyPress:
for (i=1; i<i_gmax+1; i++) {
if (report.xkey.window == wgx[i]) {
i_event[0] = i_dx[i];
i_event[1] = i_wx[i];
}
if (report.xkey.window == lgx[i]) {
i_event[0] = i_dx[i];
i_event[1] = -i_wx[i];
}
}
if (i_event[0] == 0) break;
XLookupString(&report.xkey, buffer,bufsize,&keysym,&compose);
i_event[2] = 6;
i_event[3] = report.xkey.keycode;
i_event[4] = report.xkey.x;
i_event[5] = report.xkey.y;
i_event[6] = keysym;
i_event[7] = 0;
i_loop = 1;
break;
case KeyRelease:
for (i=1; i<i_gmax+1; i++) {
if (report.xkey.window == wgx[i]) {
i_event[0] = i_dx[i];
i_event[1] = i_wx[i];
}
if (report.xkey.window == lgx[i]) {
i_event[0] = i_dx[i];
i_event[1] = -i_wx[i];
}
}
if (i_event[0] == 0) break;
XLookupString(&report.xkey, buffer,bufsize,&keysym,&compose);
i_event[2] = 7;
i_event[3] = report.xkey.keycode;
i_event[4] = report.xkey.x;
i_event[5] = report.xkey.y;
i_event[6] = keysym;
i_event[7] = 0;
i_loop = 1;
break;
case DestroyNotify:
for (i=1; i<i_dmax+1; i++) {
if (report.xdestroywindow.window == top[i]) top[i] = 0;
/* printf("Setting top[%d] to zero\n",i); */
}
for (i=1; i<i_gmax+1; i++) {
if (report.xdestroywindow.window == wgx[i]) {
i_event[0] = i_dx[i];
i_event[1] = i_wx[i];
i_dx[i] = 0;
i_wx[i] = 0;
}
}
if (i_event[0] == 0) break;
i_event[2] = 8;
i_event[3] = 0;
i_loop = 1;
break;
case MotionNotify:
for (i=1; i<i_gmax+1; i++) {
if (report.xmotion.window == wgx[i]) {
i_event[0] = i_dx[i];
i_event[1] = i_wx[i];
}
if (report.xmotion.window == lgx[i]) {
i_event[0] = i_dx[i];
i_event[1] = -i_wx[i];
}
}
if (i_event[0] == 0) break;
i_event[2] = 9;
i_event[3] = report.xmotion.state;
i_event[4] = report.xmotion.x;
i_event[5] = report.xmotion.y;
i_event[6] = 0;
i_event[7] = 0;
i_loop = 1;
break;
case ClientMessage:
if (i_db > 9-1) printf("report=ClientMessage %d %d %d\n",report.xclient.data.l[0],
report.xclient.data.l[1],report.xclient.data.l[2]);
i_event[0] = report.xclient.data.l[0];
i_event[1] = 0;
i_event[2] = report.xclient.data.l[3];
i_event[3] = 0;
i_event[4] = report.xclient.data.l[1];
i_event[5] = report.xclient.data.l[2];
i_event[6] = report.xclient.data.l[4];
i_event[7] = 0;
i_loop = 1;
break;
default:
break; /* do nothing */
} /* end case */
if (i_event[2] == 4 | i_event[2] == 5) {
if (i_event[3] == 2 ) {
if (i_event[1] > 0 ) {
if (i_type[ i_event[1]] == 1 ) report.xbutton.button = 1; }
else {
if (i_type[-i_event[1]] == 4 ) report.xbutton.button = 1;
if (i_type[-i_event[1]] == 3 ) report.xbutton.button = 1;
} /* endif */
} /* endif */
} /* endif */
XtDispatchEvent(&report);
if (i_flg[0] == 1 && !XPending(dgx)) i_loop = 1;
} /* end while */
} /* end if */
}
/*************************************************************************/
#ifdef SGI
void clear_win_(i_d,i_w)
#endif
#ifdef SUN
void clear_win_(i_d,i_w)
#endif
#ifdef M10
void clear_win__(i_d,i_w)
#endif
#if defined(HP) || defined(_linux)
void clear_win(i_d,i_w)
#endif
int i_d[];
int i_w[];
{
XClearWindow(dgx, wgx[i_gx[i_d[0]][i_w[0]]]);
}
/*************************************************************************/
#ifdef SGI
void get_dialog_(a_msg,a_rsp)
#endif
#ifdef SUN
void get_dialog_(a_msg,a_rsp)
#endif
#ifdef M10
void get_dialog__(a_msg,a_rsp)
#endif
#if defined(HP) || defined(_linux)
void get_dialog(a_msg,a_rsp)
#endif
char a_msg[];
char a_rsp[];
{
XEvent report;
int j;
int i_loop;
static Window pop_win;
char buffer[40];
int bufsize;
int start_x,start_y;
KeySym keysym;
XComposeStatus compose;
int count;
unsigned int pop_width, pop_height;
char a_lbl[40];
int x,y;
int length;
int i_cnt;
int i_event[10];
GC def_gc;
i_event[0] = 0;
i_event[1] = 0;
i_event[2] = 0;
i_event[3] = 0;
i_event[4] = 0;
i_event[5] = 0;
i_event[6] = 0;
bufsize = 40;
count = 0;
x = 100;
y = 100;
i_cnt=0;
for (j=0; j < 39; j++) {
a_rsp[j] = 0;
a_lbl[j] = a_msg[j];
if (a_lbl[j] != 0 && a_lbl[j] != 32 ) i_cnt = j+1;
} /* enddo */
if (i_cnt == 40) i_cnt = 39;
a_lbl[i_cnt] = 0;
pop_width = 300;
pop_height = 75;
pop_win = XCreateSimpleWindow(dgx, root,x,y,pop_width,pop_height,
3,BlackPixel(dgx,screen),WhitePixel(dgx,screen));
def_gc = DefaultGC(dgx, screen);
/* Calculate starting position of string in window */
start_x = 5;
start_y = 20;
XSelectInput(dgx,pop_win,ExposureMask | KeyPressMask );
XMapWindow(dgx,pop_win);
i_loop = 0;
while(i_loop == 0) {
XNextEvent(dgx,&report);
switch (report.type) {
case Expose:
if (report.xexpose.window == pop_win) {
XDrawString(dgx,pop_win,def_gc,start_x,start_y ,a_lbl,strlen(a_lbl));
XDrawString(dgx,pop_win,def_gc,start_x,start_y+15,a_rsp,strlen(a_rsp));
}
break;
case KeyPress:
if (report.xkey.window == pop_win) {
count = XLookupString(&report.xkey, buffer,bufsize,&keysym,&compose);
if (count == 40) count=39;
buffer[count]=0;
if ((keysym == XK_Return) || (keysym == XK_KP_Enter) ||
(keysym== XK_Linefeed)) {
XUnmapWindow(dgx,pop_win);
XDestroyWindow(dgx,pop_win);
i_loop = 1;
break; }
else if (((keysym >= XK_KP_Space) && (keysym <= XK_KP_9)) ||
((keysym >= XK_space) && (keysym <= XK_asciitilde))) {
if ((strlen(a_rsp) + strlen(buffer)) >= 40 ) XBell(dgx,100);
else strcat(a_rsp,buffer); }
else if ((keysym >= XK_Shift_L) && (keysym <= XK_Hyper_R));
/* Do Nothing because it's a modifier key */
else if ((keysym >= XK_F1) && (keysym <= XK_F35)) {
if (buffer == NULL) printf("Unmapped function key\n");
else if ((strlen(a_rsp) + strlen(buffer)) >= 40) { XBell(dgx,100); }
else { strcat(a_rsp,buffer); } }
else if ((keysym == XK_BackSpace) || (keysym == XK_Delete)) {
if ((length = strlen(a_rsp)) > 0) {
a_rsp[length - 1] = (char)NULL;
XClearWindow(dgx,pop_win); }
else {
XBell(dgx,100); } }
else {
printf("keysym %s is not handled\n",XKeysymToString(keysym));
XBell(dgx,100); }
XDrawString(dgx,pop_win,def_gc,start_x,start_y ,a_lbl,strlen(a_lbl));
XDrawString(dgx,pop_win,def_gc,start_x,start_y+15,a_rsp,strlen(a_rsp));
break;
}
break;
default:
break; /* do nothing */
} /* end case */
if (i_event[1] == 4 | i_event[1] == 5) {
if (i_event[2] == 2 ) {
if (i_event[0] > 0 ) {
if (i_type[ i_event[0]] == 1 ) report.xbutton.button = 1; }
else {
if (i_type[-i_event[0]] == 4 ) report.xbutton.button = 1;
if (i_type[-i_event[0]] == 3 ) report.xbutton.button = 1;
} /* endif */
} /* endif */
} /* endif */
XtDispatchEvent(&report);
} /* end while */
for (j=0; j < 38; j++) {
if (a_rsp[j] == 0 ) a_rsp[j]=32;
} /* enddo */
}
/*************************************************************************/
int myhandler (display, myerr)
Display *display;
XErrorEvent *myerr;
{
char msg[80];
char ttt[80];
strcpy(ttt ,"BadDrawable (invalid Pixmap or Window parameter)");
XGetErrorText(display, myerr->error_code,msg,80);
if(strcmp(msg,ttt)!= 0 ) {
fprintf(stderr, "error code %s\n", msg);
}
return(0);
}
/*************************************************************************/
#ifdef SGI
int init_gx_(i_wxi,i_typ,a_labl,i_wxs,i_wys,i_frx,i_fry,a_menu,a_lcolor,i_cin,i_din)
#endif
#ifdef SUN
int init_gx_(i_wxi,i_typ,a_labl,i_wxs,i_wys,i_frx,i_fry,a_menu,a_lcolor,i_cin,i_din)
#endif
#ifdef M10
int init_gx__(i_wxi,i_typ,a_labl,i_wxs,i_wys,i_frx,i_fry,a_menu,a_lcolor,i_cin,i_din)
#endif
#if defined(HP) || defined(_linux)
int init_gx(i_wxi,i_typ,a_labl,i_wxs,i_wys,i_frx,i_fry,a_menu,a_lcolor,i_cin,i_din)
#endif
int i_wxi[];
int i_typ[];
int i_wxs[];
int i_wys[];
int i_frx[];
int i_fry[];
int i_cin[];
int i_din[];
char a_menu[];
char a_labl[];
char a_lcolor[];
{
Widget toplevel, maintoplevel;
Widget main_dx, form1, pane;
Widget temp;
Widget menu_bar, menu_pane, button, cascade;
Arg args[15];
int n = 1;
char *ww1[2];
char ww2[80];
char a_lbl[1000];
char a_clr[1000];
char a_title[20];
int i,j,k,l,num;
int ix;
int i_tttt;
int i_cnt[20];
int i_d;
int i_w;
int i_g;
int i_flag;
XWindowAttributes xwa;
XSetWindowAttributes xswa;
XVisualInfo vTemplate;
int visualsMatched;
int num_depths;
int *depths;
int default_depth;
Visual *default_visual;
Status rc; /* return status of various Xlib functions. */
XColor red, brown, blue, yellow, green, linec;
static char *visual_class[] = {
"StaticGray",
"GrayScale",
"StaticColor",
"PseudoColor",
"TrueColor",
"DirectColor"
};
XErrorHandler defaulterr;
Widget vsb;
Widget hsb;
ww1[0] = &ww2[0];
strcpy (ww2,"Graphx");
i_db = i_din[0];
if (i_db > 3-1) printf("Start.\n");
/* Initialize the intrinsics */
if (i_init == 0) {
i_init = 1;
i_bswap= (int *)&b_bswap;
b_bswap[0]=0;
b_bswap[1]=0;
b_bswap[2]=0;
b_bswap[3]=1;
if (*i_bswap == 1) {
if (i_db > 4-1) printf("This Machine is Big Endian\n"); }
else {
if (i_db > 4-1) printf("This Machine is Little Endian\n");
if (i_db > 4-1) printf("i_bswap=%d\n",*i_bswap);
}
i_clrs = i_cin[0];
if (i_clrs < 0) i_clrs = 0;
if (i_clrs > 256) i_clrs = 256;
if (i_db > 1-1) printf("Initializing X toolkit\n");
i_cnt[0]=0;
for (j=0; j < 78; j++) {
a_lbl[j] = a_labl[(j)];
if (a_lbl[j] != 0 && a_lbl[j] != 32 ) i_cnt[0] = j+1;
} /* enddo */
a_lbl[i_cnt[0]] = 0;
if (i_cnt[0] == 0) strcpy(a_lbl,"GraphX");
maintoplevel = XtAppInitialize(&app_context,
"Graphx",
NULL,0,
&n,ww1,
NULL,
NULL,0);
dgx = XtDisplay(maintoplevel);
screen = DefaultScreen(dgx);
gc = DefaultGC(dgx, screen);
root = XDefaultRootWindow(dgx);
depths = XListDepths(dgx,screen,&num_depths);
if (i_db > 3-1) {
printf(" \n");
printf("Number of Depths avail = %d\n",num_depths);
for (j=0; j<num_depths; j++) {
printf(" Depth(%d)=%d\n",j,depths[j]);
} /* enddo */
} /* enddo */
default_depth = DefaultDepth(dgx,screen);
if (i_db > 3-1) printf("Default Depth = %d\n",default_depth);
vTemplate.screen = screen;
visualList = XGetVisualInfo(dgx, VisualScreenMask,
&vTemplate, &visualsMatched);
if (visualsMatched == 0) {
printf("No visuals\n");
exit(0);
} /* endif */
default_visual = DefaultVisual(dgx,screen);
if (i_db > 3-1) {
printf(" \n");
printf("Number of visuals: %d\n",visualsMatched);
for (j=0; j<visualsMatched; j++) {
printf(" %d) Visual ID = %d size=%d bpc=%d depth=%d type=%s\n",j,visualList[j].visualid,
visualList[j].colormap_size,
visualList[j].bits_per_rgb,
visualList[j].depth,
visual_class[visualList[j].class]);
} /* enddo */
printf("Default Visual = %d\n",XVisualIDFromVisual(default_visual));
} /* end if */
vTemplate.screen = screen;
vTemplate.depth = 24;
vTemplate.class = TrueColor;
visualList = XGetVisualInfo(dgx, VisualScreenMask | VisualDepthMask | VisualClassMask,
&vTemplate, &visualsMatched);
if (visualsMatched == 0) {
vTemplate.class = TrueColor;
visualList = XGetVisualInfo(dgx, VisualScreenMask | VisualClassMask,
&vTemplate, &visualsMatched);
if (visualsMatched == 0) {
printf("No matching visuals\n");
exit(0);
} /* endif */
} /* endif */
if (i_db > 4-1) {
printf(" \n");
printf("Number of matching visuals: %d\n",visualsMatched);
for (j=0; j<visualsMatched; j++) {
printf("%d) Visual ID = %d size=%d bpc=%d depth=%d type=%s\n",j,visualList[j].visualid,
visualList[j].colormap_size,
visualList[j].bits_per_rgb,
visualList[j].depth,
visual_class[visualList[j].class]);
} /* enddo */
}
printf(" \n");
if (i_db > 2-1) printf("Using visual ID=%d size=%d bpc=%d depth=%d type=%s\n",
visualList[0].visualid,
visualList[0].colormap_size,
visualList[0].bits_per_rgb,
visualList[0].depth,
visual_class[visualList[0].class]);
i_rmaxr = visualList[0].red_mask;
i_rmltr = 1;
i_gmaxg = visualList[0].green_mask;
i_gmltg = 1;
i_bmaxb = visualList[0].blue_mask;
i_bmltb = 1;
for (j=0;j<32; j++) {
/* printf("i_rmaxr, 2*(int) (i_rmaxr/2) %d %d\n",i_rmaxr,2*(int) (i_rmaxr/2)); */
if (i_rmaxr == 2*(int) (i_rmaxr/2)) {
i_rmaxr = i_rmaxr/2;
i_rmltr = i_rmltr*2;
}
/* printf("i_gmaxg, 2*(int) (i_gmaxr/2) %d %d\n",i_gmaxg,2*(int) (i_gmaxg/2)); */
if (i_gmaxg == 2*(int) (i_gmaxg/2)) {
i_gmaxg = i_gmaxg/2;
i_gmltg = i_gmltg*2;
}
/* printf("i_bmaxb, 2*(int) (i_bmaxb/2) %d %d\n",i_bmaxb,2*(int) (i_bmaxb/2)); */
if (i_bmaxb == 2*(int) (i_bmaxb/2)) {
i_bmaxb = i_bmaxb/2;
i_bmltb = i_bmltb*2;
}
}
i_rmaxr=i_rmaxr+1;
i_gmaxg=i_gmaxg+1;
i_bmaxb=i_bmaxb+1;
if (i_db > 4-1) {
printf(" red_mask=%d\n",visualList[0].red_mask);
printf(" grn_mask=%d\n",visualList[0].green_mask);
printf(" blu_mask=%d\n",visualList[0].blue_mask);
printf("red max,mult = %d %d\n", i_rmaxr,i_rmltr);
printf("grn max,mult = %d %d\n", i_gmaxg,i_gmltg);
printf("blu max,mult = %d %d\n", i_bmaxb,i_bmltb);
}
defaulterr=XSetErrorHandler(myhandler);
/*XSetErrorHandler(defaulterr);*/
i_ctble = visualList[0].colormap_size;
/* printf("hello = %d\n",1); */
if (i_app == 0) {
/* if (i_clrs == 0 && visualList[0].visualid == XVisualIDFromVisual(default_visual)) {
if (i_db > 3-1) printf("using default color map\n");
cmap = XDefaultColormap(dgx, screen); }
else {
*/
if (i_db > 3-1) printf("creating private color map\n");
cmap = XCreateColormap(dgx,RootWindow(dgx,screen),visualList[0].visual,AllocNone);
/* }
*/
}
} /* endif */
if (i_db > 5-1) printf("dgx = %d \n",dgx);
if (i_db > 5-1) printf("root = %d\n",root);
if (i_wxi[0] == 0) return(0);
if (i_wxi[0] > 10) i_wxi[0] = 10;
if (i_wxs[0] < 1 ) i_wxs[0] = 500;
if (i_wys[0] < 1 ) i_wys[0] = 400;
for (i_w=1; i_w < i_wxi[0]+1; i_w++) {
if (i_db > 7-1) printf("i_w = %d\n",i_w);
if (i_wxs[i_w] < 1) i_wxs[i_w] = i_wxs[0];
if (i_wys[i_w] < 1) i_wys[i_w] = i_wys[0];
}
/* printf("hello = %d\n",2); */
n = 0;
XtSetArg(args[n], XmNtitle, "SHELL"); n++;
XtSetArg(args[n], XmNx, 0); n++;
XtSetArg(args[n], XmNy, 0); n++;
XtSetArg(args[n], XmNwidth, i_wxs[0]); n++;
XtSetArg(args[n], XmNheight, i_wys[0]); n++;
XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++;
i_d=0;
i_app = i_app+1;
for (i=1; i < 5+1; i++) {
if (i_db > 9-1) printf("i = %d\n",i);
if (top[i] == 0) {
i_d = i;
break;
}
}
if (i_d == 0) {
printf("Too Many displays \n");
return(0);
}
if (i_db > 3-1) printf("creating shell %d %d\n",i_app, i_d);
toplevel = XtAppCreateShell(NULL,"appClass",
topLevelShellWidgetClass,dgx,
args, n);
n = 0;
XtSetArg(args[n], XmNsashWidth, 0); n++;
XtSetArg(args[n], XmNsashHeight, 0); n++;
XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++;
main_dx = XtCreateManagedWidget("main",
xmMainWindowWidgetClass, toplevel,
args, n);
n = 0;
XtSetArg(args[n], XmNsashWidth, 0); n++;
XtSetArg(args[n], XmNsashHeight, 0); n++;
XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++;
form1 = XtCreateManagedWidget("form",
xmFormWidgetClass, main_dx,
args, n);
/*
* Create menu bar in main window.
*/
if (i_db > 6-1) printf("Creating Menubar\n");
n = 0;
/* XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++; */
menu_bar = XmCreateMenuBar (main_dx, "menu_bar", args, n);
if (i_db > 6-1) printf("Managing Menubar\n");
XtManageChild (menu_bar);
i_g = 0;
for (l=1; l<321;l++) {
if (i_dx[l]== 0) {
i_g = l;
break;
}
}
if (i_g == 0) {
printf("Too Many windows \n");
return(0);
}
i_w = 0;
i_dx[i_g] = i_d;
i_wx[i_g] = i_w;
i_gx[i_dx[i_g]][i_wx[i_g]]=i_g;
if (i_db > 5-1) printf("menu ** i_d,i_w,i_g = %d %d %d \n",i_d,i_w,i_g);
for (i=0;i<9+1; i++) {
num = 0;
for (j=0; j < 19; j++) {
a_lbl[j] = a_menu[(i*6*20+j)];
/* if (a_lbl[j] == "|" ) num = j; */
if (a_lbl[j] != 0 && a_lbl[j] != 32 ) num = j+1;
} /* enddo */
a_lbl[num] = 0;
if (num != 0) {
/* Create pulldown menu. */
i_w = 0;
/* printf("hello 3\n"); */
n = 0;
/* XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++; */
menu_pane = XmCreatePulldownMenu (menu_bar, "", args, n);
/* printf("hello 4\n"); */
for (j=0; j<19; j++) a_title[j] = a_lbl[j];
for (j=1; j<5+1; j++) {
num=0;
for (k=0; k<19; k++) {
a_lbl[k] = a_menu[(i*20*6+j*20+k)];
if (a_lbl[k] != 0 && a_lbl[k] != 32 ) num = k+1;
} /* enddo */
a_lbl[num] = 0;
if (num != 0) {
n = 0;
if (i != 9) {
i_flag=(i_d*100)+((i+1)*10)+j; }
else {
i_flag=(i_d*100)+j;
} /* end if */
/* XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++; */
button = XmCreatePushButton (menu_pane, a_lbl, args, n);
XtManageChild (button);
XtAddCallback (button, XmNactivateCallback, MenuManager, (XtPointer)i_flag);
}
} /* enddo */
n = 0;
/* XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++; */
XtSetArg(args[n], XmNsubMenuId, menu_pane); n++;
cascade = XmCreateCascadeButton (menu_bar, a_title, args, n);
XtManageChild (cascade);
if (i == 9) {
n = 0;
XtSetArg (args[n], XmNmenuHelpWidget, cascade); n++;
XtSetValues (menu_bar, args, n);
}
/* printf("hello 5\n"); */
}
}
if (i_db > 4-1) printf("creating pane\n");
n = 0;
XtSetArg(args[n], XmNsashWidth, 6); n++;
XtSetArg(args[n], XmNsashHeight, 6); n++;
XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNtopOffset, 10); n++;
pane = XtCreateManagedWidget("pane",
xmPanedWindowWidgetClass, form1,
args, n);
ix = 0;
if (i_db > 5-1) printf("i_d = %d \n",i_d);
if (i_db > 5-1) printf("i_wxi = %d \n",i_wxi[0]);
for (i_w=1; i_w < i_wxi[0]+1; i_w++) {
if (i_db > 6-1) printf("loop. %d %d %d \n",i_w,ix,i_frx[i_w]);
i_g = 0;
for (j=1; j<321;j++) {
if (i_dx[j]== 0) {
i_g = j;
break;
}
}
if (i_g == 0) {
printf("Too Many windows \n");
return(0);
}
i_dx[i_g] = i_d;
i_wx[i_g] = i_w;
i_gx[i_d][i_w]=i_g;
if (i_db > 5-1) printf("i_d,i_w,i_g = %d %d %d \n",i_d,i_w,i_g);
if (ix == 0) {
n = 0;
XtSetArg(args[n], XmNborderWidth, 0); n++;
XtSetArg(args[n], XmNfractionBase, i_frx[0]); n++;
XtSetArg(args[n], XmNhorizontalSpacing, 0); n++;
XtSetArg(args[n], XmNverticalSpacing, 0); n++;
if (i_fry[i_w] < 0) {
XtSetArg(args[n], XmNpaneMinimum, -i_fry[i_w]+10); n++;
XtSetArg(args[n], XmNpaneMaximum, -i_fry[i_w]+10); n++;
}
else {
if (i_fry[i_w] != 0) XtSetArg(args[n], XmNheight, i_fry[i_w]); n++;
XtSetArg(args[n], XmNpaneMinimum, 30); n++;
XtSetArg(args[n], XmNpaneMaximum, 2000); n++;
} /* endif */
/* XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++; */
formy = XtCreateManagedWidget("form",
xmFormWidgetClass, pane,
args, n);
} /* endif */
if (ix+i_frx[i_w] > i_frx[0]) i_frx[i_w] = i_frx[0]-ix;
n = 0;
XtSetArg(args[n], XmNborderWidth, 0); n++;
XtSetArg(args[n], XmNfractionBase, 100); n++;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
XtSetArg(args[n], XmNleftPosition, ix); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
XtSetArg(args[n], XmNrightPosition, ix+i_frx[i_w]); n++;
XtSetArg(args[n], XmNhorizontalSpacing, 0); n++;
XtSetArg(args[n], XmNverticalSpacing, 0); n++;
/* XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++; */
form[i_g] = XtCreateWidget("subform",
xmFormWidgetClass, formy,
args, n);
ix = ix+i_frx[i_w];
if (ix == i_frx[0]) ix = 0;
i_cnt[i_w] = 0;
for (j=0; j < 78; j++) {
a_lbl[j] = a_labl[(i_w*80+j)];
if (a_lbl[j] != 0 && a_lbl[j] != 32 ) i_cnt[i_w] = j+1;
} /* enddo */
a_lbl[i_cnt[i_w]] = 0;
if (i_db > 8-1) printf("i_cnt = %d %d \n",i_cnt[i_w],i_w);
if (i_db > 8-1) printf("i_typ = %d \n",i_typ[i_w]);
if (i_typ[i_w] == 5) i_typ[i_w] = -4; /* to be backward compatible with graphx14 */
i_tttt = i_typ[i_w];
if (i_tttt < 0) i_tttt = -i_tttt;
i_type[i_g]=i_tttt;
// if (i_tttt == 6) i_tttt=1;
scrl[i_g]=0;
switch (i_tttt) {
case 0:
draw[i_g] = form[i_g];
case 1:
if (i_cnt[i_w] > 0) {
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNwidth, i_wxs[i_w]); n++;
XtSetArg(args[n], XmNheight, i_wys[i_w]); n++;
/* XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++; */
draw[i_g] = XtCreateManagedWidget(a_lbl,
xmPushButtonWidgetClass, form[i_g],
args, n); }
else {
draw[i_g] = form[i_g];
} /* endif */
XtManageChild(form[i_g]);
XtManageChild(draw[i_g]);
break;
case 2:
n = 0;
XtSetArg(args[n], XmNborderWidth, 0); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNheight, i_wys[i_w]); n++;
/* XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++; */
XtSetArg(args[n], XmNlabelString, XmStringCreateSimple(a_lbl)); n++;
draw[i_g] = XtCreateWidget(" ",
xmLabelWidgetClass, form[i_g],
args, n);
XtManageChild(form[i_g]);
XtManageChild(draw[i_g]);
break;
case 3:
n = 0;
XtSetArg(args[n], XmNborderWidth, 0); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
labl[i_g] = XtCreateWidget(" ",
xmLabelWidgetClass, form[i_g],
args, n);
n = 0;
temp = labl[i_g];
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, temp); n++;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNborderWidth, 1); n++;
XtSetArg(args[n], XmNwidth, i_wxs[i_w]); n++;
XtSetArg(args[n], XmNheight, i_wys[i_w]); n++;
/* XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++; */
draw[i_g] = XtCreateWidget("draw",
xmDrawingAreaWidgetClass, form[i_g],
args, n);
XtManageChild(form[i_g]);
XtManageChild(labl[i_g]);
XtManageChild(draw[i_g]);
break;
case 4:
n = 0;
XtSetArg(args[n], XmNborderWidth, 0); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
labl[i_g] = XtCreateWidget(" ",
xmLabelWidgetClass, form[i_g],
args, n);
if (i_db > 99-1) printf("labl = %d \n",labl[i_g]);
n = 0;
temp = labl[i_g];
XtSetArg(args[n], XmNscrollingPolicy, XmAUTOMATIC); n++;
XtSetArg(args[n], XmNscrollBarDisplayPolicy, XmAS_NEEDED); n++;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, temp); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
XtSetArg(args[n], XmNrightPosition, 100); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNvisualPolicy, XmVARIABLE); n++;
/* XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++; */
scrl[i_g] = XtCreateWidget("scroll",
xmScrolledWindowWidgetClass, form[i_g],
args, n);
if (i_db > 99-1) printf("scrl = %d \n",scrl[i_g]);
n = 0;
XtSetArg(args[n], XmNwidth, i_wxs[i_w]); n++;
XtSetArg(args[n], XmNheight, i_wys[i_w]); n++;
XtSetArg(args[n], XmNborderWidth, 1); n++;
/* XtSetArg(args[n], XmNdepth, visualList[0].depth); n++;
XtSetArg(args[n], XmNvisual, visualList[0].visual); n++;
XtSetArg(args[n], XmNcolormap, cmap); n++; */
draw[i_g] = XtCreateWidget("draw",
xmDrawingAreaWidgetClass, scrl[i_g],
args, n);
if (i_db > 99-1) printf("draw = %d \n",draw[i_g]);
XtVaGetValues(scrl[i_g],XmNhorizontalScrollBar,&hsb,NULL);
XtVaGetValues(scrl[i_g],XmNverticalScrollBar, &vsb,NULL);
XmScrolledWindowSetAreas(scrl[i_g],hsb,vsb,draw[i_g]);
if (i_db > 99-1) printf("Set scroll \n");
XtManageChild(form[i_g]);
if (i_db > 99-1) printf("Managing form \n");
XtManageChild(labl[i_g]);
if (i_db > 99-1) printf("Managing labl \n");
XtManageChild(scrl[i_g]);
if (i_db > 99-1) printf("Managing scrl \n");
XtManageChild(draw[i_g]);
if (i_db > 99-1) printf("Managing draw \n");
break;
case 5:
break;
case 6:
if (i_cnt[i_w] > 0) {
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
/* For some reason, with both of the following statements active togeter, mdxs genrates error messages
(BadDrawable) on the SGI and other machines, even though it appears to work properly. To eliminate
the error messages, I could have comment out next line. Instead, I trap the error in myhandler and
don't display it. This could mask other errors, however, and should be better understood. */
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
/*
XtSetArg(args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
XtSetArg(args[n], XmNrightPosition, 90); n++;
XtSetArg(args[n], XmNleftPosition, 10); n++;
*/
XtSetArg(args[n], XmNrightOffset, 3); n++;
XtSetArg(args[n], XmNleftOffset, 3); n++;
XtSetArg(args[n], XmNshadowType, XmSHADOW_OUT); n++;
XtSetArg(args[n], XmNhighlightThickness, 0); n++;
XtSetArg(args[n], XmNwidth, i_wxs[i_w]); n++;
XtSetArg(args[n], XmNheight, i_wys[i_w]); n++;
draw[i_g] = XtCreateManagedWidget(a_lbl,
xmDrawnButtonWidgetClass, form[i_g],
args, n);
i_flag=i_g; /* (i_d*100)+((i_w+1)*10)+j; */
a_llll[i_g]=XmStringCreateSimple(a_lbl);
XtAddCallback(draw[i_g],XmNactivateCallback,ButtonManager, (XtPointer)i_flag);
XtAddCallback(draw[i_g],XmNexposeCallback, ButtonManager, (XtPointer)i_flag);
XtAddCallback(draw[i_g],XmNresizeCallback, ButtonManager, (XtPointer)i_flag);
n = 0;
XtSetArg(args[n], XmNborderWidth, 0); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNheight, i_wys[i_w]); n++;
XtSetArg(args[n], XmNlabelString, XmStringCreateSimple(a_lbl)); n++;
labl[i_g] = XtCreateWidget(" ",
xmLabelWidgetClass, draw[i_g],
args, n);
}
else {
draw[i_g] = form[i_g];
} /* endif */
XtManageChild(form[i_g]);
XtManageChild(draw[i_g]);
break;
} /* end case */
} /* enddo */
/*
* Set Main Window areas.
*/
/* if (i_db > 5-1) printf("setting window areas\n");
XmMainWindowSetAreas (main_dx, menu_bar, NULL, NULL, NULL, pane); */
if (i_db > 5-1) printf("Realizing top level widget\n");
XtRealizeWidget(toplevel);
if (i_db > 5-1) printf("getting top window id\n");
top[i_d] = XtWindow(toplevel);
if (i_db > 5-1) printf("top= %d %d\n",top[i_d],i_d);
XGetWindowAttributes(dgx,top[i_d],&xwa);
if (i_db > 5-1) printf("got window attributes\n");
XSetWindowColormap(dgx,top[i_d],cmap);
i_g=i_gx[i_d][0];
wgx[i_g] = XtWindow(menu_bar);
if (i_db > 6-1) printf("menu wgx= %d %d\n",wgx[i_g],i_g);
if (i_db > 6-1) printf("wgx= %d %d\n",wgx[i_g],i_g);
XSelectInput(dgx,wgx[i_g],ExposureMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask |
KeyPressMask | KeyReleaseMask | StructureNotifyMask);
for (i_w=1; i_w < i_wxi[0]+1; i_w++) {
i_g=i_gx[i_d][i_w];
fgx[i_g] = XtWindow(form[i_g]);
wgx[i_g] = XtWindow(draw[i_g]); /* get the window id's for drawing */
XSetWindowColormap(dgx,top[i_d],cmap);
if (i_type[i_g] == 3) lgx[i_g] = XtWindow(labl[i_g]); /* get the labels id's for drawing */
if (i_type[i_g] == 4) lgx[i_g] = XtWindow(labl[i_g]); /* get the labels id's for drawing */
if (i_db > 6-1) printf("fgx= %d %d\n",fgx[i_g],i_g);
if (i_db > 6-1) printf("wgx= %d %d\n",wgx[i_g],i_g);
/* if (i_type[i_g] == 4) printf("lgx= %d %d\n",lgx[i_g],i_g); */
XSelectInput(dgx,wgx[i_g],ExposureMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask |
KeyPressMask | KeyReleaseMask | StructureNotifyMask);
XSelectInput(dgx,fgx[i_g],ExposureMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask |
KeyPressMask | KeyReleaseMask | StructureNotifyMask);
if (i_typ[i_w] < 0) {
/* XGetWindowAttributes(dgx,wgx[i_g],xwa); */
xswa.backing_store=Always;
XChangeWindowAttributes(dgx,wgx[i_g],CWBackingStore,&xswa);
if (i_db > 6-1) printf("BackingStore set to always %d, %d\n",i_d,i_w);
} else {
xswa.backing_store=NotUseful;
XChangeWindowAttributes(dgx,wgx[i_g],CWBackingStore,&xswa);
if (i_db > 6-1) printf("BackingStore set to NotUseful %d, %d\n",i_d,i_w);
} /* Endif */
} /* Enddo */
/* Create the mdx icon */
icon = XCreateBitmapFromData(dgx, top[i_d], icon_bits,
icon_width, icon_height);
i_cnt[0]=0;
for (j=0; j < 78; j++) {
a_lbl[j] = a_labl[(j)];
if (a_lbl[j] != 0 && a_lbl[j] != 32 ) i_cnt[0] = j+1;
} /* enddo */
a_lbl[i_cnt[0]] = 0;
if (i_cnt[0] == 0) strcpy(a_lbl,"GraphX");
XSetStandardProperties(dgx, top[i_d], a_lbl, a_lbl,
icon, ww1, 1, NULL);
/* screen = DefaultScreen(dgx); */
/* gc = DefaultGC(dgx, screen); */
/* gc = XCreateGC(dgx,top[i_d],0,NULL); */
i_cnt[0]=0;
for (j=0; j < 78; j++) {
a_clr[j] = a_lcolor[(j)];
if (a_clr[j] != 0 && a_clr[j] != 32 ) i_cnt[0] = j+1;
} /* enddo */
a_clr[i_cnt[0]] = 0;
if (i_cnt[0]=0) {
rc = XAllocNamedColor(dgx, cmap, "white", &linec, &linec);}
else {
rc = XAllocNamedColor(dgx, cmap, a_clr, &linec, &linec);
}
if (rc == 0) {
printf("XAllocNamedColor - failed to allocated forground color %s. Using 'white' \n",a_clr);
XSetForeground(dgx,gc,WhitePixel(dgx,screen)); }
else {
XSetForeground(dgx,gc,linec.pixel);
}
XSetBackground(dgx,gc,BlackPixel(dgx,screen));
i_dmax=0;
i_wmax=0;
i_gmax=0;
for (i_g=1; i_g<321; i_g++) {
if (i_dx[i_g] != 0) i_gmax = i_g;
if (i_dx[i_g]>i_dmax) i_dmax=i_dx[i_g];
if (i_wx[i_g]>i_wmax) i_wmax=i_wx[i_g];
}
if (i_db > 2-1) printf("Graphx initialization complete\n");
if (i_db > 6-1) printf("i_dmax= %d \n",i_dmax);
if (i_db > 6-1) printf("i_wmax= %d \n",i_wmax);
if (i_db > 6-1) printf("i_gmax= %d \n",i_gmax);
if (i_db > 7-1) printf("i_wx= %d %d %d %d %d %d %d\n",i_wx[1],i_wx[2],i_wx[3],i_wx[4],i_wx[5],i_wx[6],i_wx[7]);
if (i_db > 7-1) printf("wgx = %d %d %d %d %d %d %d\n",wgx[1],wgx[2],wgx[3],wgx[4],wgx[5],wgx[6],wgx[7]);
return(i_d);
}
/*************************************************************************/
void free_graphics()
{
read_events();
XFlush(dgx);
XCloseDisplay(dgx);
}
static void Button_quit(w, free, data)
Widget w;
Pixmap free;
XmAnyCallbackStruct *data;
{
/* Quit Graphsub */
cmap = XDefaultColormap(dgx, screen);
if (top[1] != 0) XSetWindowColormap(dgx,top[1],cmap);
XFlush(dgx);
XFreeColormap(dgx,cmap);
XFreePixmap(XtDisplay(w), free);
free_graphics();
exit(0);
}
void read_events()
{
XFlush(dgx);
while(XPending(dgx)) {
XtNextEvent(&event);
XtDispatchEvent(&event);
}
}
/* io routines - modified from Quyen's routines */
#include <fcntl.h>
/*************************************************************************/
#ifdef SGI
int initdk_(i_flag, a_filename)
#endif
#ifdef SUN
int initdk_(i_flag, a_filename)
#endif
#ifdef M10
int initdk_(i_flag, a_filename)
#endif
#if defined(HP) || defined(_linux)
int initdk(i_flag, a_filename)
#endif
int *i_flag; char *a_filename;
{ int i;
int i_stat;
for(i=0; i < strlen(a_filename); i++)
if( *(a_filename+i) == ' ') *(a_filename+i) = '\0' ;
if (i_flag == 0) {
if((i_stat=open(a_filename,O_RDWR)) < 0){
if( (i_stat = open(a_filename,O_RDONLY)) < 0) {
if( (i_stat = open(a_filename,O_CREAT|O_RDWR,0666)) < 0) {
printf(" Cannot open the filename: %s\n",a_filename);
}
} else {
printf(" Open filename %s as READ ONLY\n",a_filename);
} /* end if */
} else {
printf(" Open filename %s as RDWR \n",a_filename);
} /* endif */
if( i_stat < 0 ) i_stat = open(a_filename,O_CREAT|O_RDWR,0666);
if(i_stat == -1)printf(" Cannot open the filename: %s\n",a_filename);
} else {
if((i_stat=open(a_filename,O_RDONLY)) < 0){
printf(" Cannot open the filename: %s\n",a_filename);
}
}
return(i_stat);
}
/*************************************************************************/
#ifdef SGI
int iowrit_(i_chan, b_buff, bytes)
#endif
#ifdef SUN
int iowrit_(i_chan, b_buff, bytes)
#endif
#ifdef M10
int iowrit_(i_chan, b_buff, bytes)
#endif
#if defined(HP) || defined(_linux)
int iowrit(i_chan, b_buff, bytes)
#endif
int *i_chan, *bytes;
char *b_buff;
{
int nbytes;
nbytes = write(*i_chan, b_buff, *bytes);
if(nbytes != *bytes) fprintf(stderr,
" ** ERROR **: only %d bytes transfered out of %d bytes\n",
nbytes, *bytes);
return(nbytes);
}
/*************************************************************************/
#ifdef SGI
int ioread_(i_chan, b_buff, bytes)
#endif
#ifdef SUN
int ioread_(i_chan, b_buff, bytes)
#endif
#ifdef M10
int ioread_(i_chan, b_buff, bytes)
#endif
#if defined(HP) || defined(_linux)
int ioread(i_chan, b_buff, bytes)
#endif
int *i_chan, *bytes ;
char *b_buff;
{
int nbytes;
nbytes = read(*i_chan, b_buff, *bytes);
/* if(nbytes != *bytes) fprintf(stderr,
" ** ERROR **: only %d bytes are read out of %d requested\n",
nbytes, *bytes); */
return(nbytes);
}
/*************************************************************************/
#ifdef SGI
int ioseek_(i_chan, lbyte,i_flag)
#endif
#ifdef SUN
int ioseek_(i_chan, lbyte,i_flag)
#endif
#ifdef M10
int ioseek_(i_chan, lbyte,i_flag)
#endif
#if defined(HP) || defined(_linux)
int ioseek(i_chan, lbyte,i_flag)
#endif
int *i_chan, *i_flag, *lbyte;
{
int nloc;
off_t ibytes;
ibytes = *lbyte ;
if(*i_flag == 0) {
nloc = lseek(*i_chan, ibytes, SEEK_SET); }
else if (*i_flag == 1) {
nloc = lseek(*i_chan, ibytes, SEEK_CUR); }
else if (*i_flag == 2) {
nloc = lseek(*i_chan, ibytes, SEEK_END); }
else {
nloc = lseek(*i_chan, ibytes, SEEK_CUR);
} /* endif */
return(nloc);
}
#ifdef IO64
/*************************************************************************/
#ifdef SGI
long long ioseek64_(i_chan, lbyte,i_flag)
#endif
#ifdef SUN
long long ioseek64_(i_chan, lbyte,i_flag)
#endif
#ifdef M10
long long ioseek64_(i_chan, lbyte,i_flag)
#endif
#if defined(HP) || defined(_linux)
long long ioseek64(i_chan, lbyte,i_flag)
#endif
int *i_chan, *i_flag;
long long *lbyte;
{
long long nloc;
off_t ibytes;
ibytes = *lbyte;
if(*i_flag == 0) {
nloc = lseek(*i_chan, ibytes, SEEK_SET); }
else if (*i_flag == 1) {
nloc = lseek(*i_chan, ibytes, SEEK_CUR); }
else if (*i_flag == 2) {
nloc = lseek(*i_chan, ibytes, SEEK_END); }
else {
nloc = lseek(*i_chan, ibytes, SEEK_CUR);
} /* endif */
return(nloc);
}
#endif
/*************************************************************************/
#ifdef SGI
int closedk_(i_chan)
#endif
#ifdef SUN
int closedk_(i_chan)
#endif
#ifdef M10
int closedk_(i_chan)
#endif
#if defined(HP) || defined(_linux)
int closedk(i_chan)
#endif
int *i_chan;
{
return(close(*i_chan));
}