/*
MultiSlice RTP Environment
(C) 1998,1999,2000,2001,2002 Yohann Sulaiman.
(C) 1998 Gloria Bueno
(C) 2002 Free Software Foundation, Inc.
This file is part of the source code of the MultiSlice RTP Environment.
MultiSlice RTP Environment is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
MultiSlice RTP Environment is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with MultiSlice RTP Environment; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*-------------------------------------------------------------*/
/* */
/* File: open.c */
/* */
/* C-T Image Application Program */
/* */
/* OSF/Motif version. */
/* */
/*-------------------------------------------------------------*/
#include "main.h"
#include "log.h"
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/Xutil.h>
#include <X11/cursorfont.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <Xm/Xm.h>
#include <Xm/Form.h>
#include <Xm/Frame.h>
#include <Xm/DrawingA.h>
#include <Xm/PushB.h>
#include <Xm/CascadeB.h>
#include <Xm/Separator.h>
#include <Xm/RowColumn.h>
#include <Xm/Label.h>
#include <Xm/Xm.h>
#include <Xm/FileSB.h>
#include <Xm/DialogS.h>
#include <Xm/MessageB.h>
#include <Xm/Scale.h>
#include <Xm/BulletinB.h>
#include <Xm/ToggleB.h>
/* Extern variables */
extern XtAppContext app;
extern GC image_gc_1;
extern GC image_gc_2;
extern int running;
extern int file_loader;
extern int squash[21];
extern int run_once;
extern int array2[512][512];
extern int array1[512][512];
extern int time;
extern char *file_yhs;
extern GC arrayGC[21];
extern GC ysxorGC[21];
extern GC ystheGC[21];
extern int yhs_filename[11];
extern char *yhs_filename1;
extern char *yhs_filename2;
extern char *yhs_filename3;
extern char *yhs_filename4;
extern char *yhs_filename5;
extern char *yhs_filename6;
extern char *yhs_filename7;
extern char *yhs_filename8;
extern char *yhs_filename9;
extern char *yhs_filename10;
extern char *tempfileold;
extern char *tempfilenew;
extern char *addcharac;
extern char *yhs_file1;
extern char *yhs_file2;
extern char *yhs_file3;
extern char *yhs_file4;
extern char *yhs_file5;
extern char *yhs_file6;
extern char *yhs_file7;
extern char *yhs_file8;
extern char *yhs_file9;
extern char *yhs_file10;
extern char *yhs_file11;
extern char *yhs_file12;
extern char *yhs_file13;
extern char *yhs_file14;
extern char *yhs_file15;
extern char *yhs_file16;
extern char *yhs_file17;
extern char *yhs_file18;
extern char *yhs_file19;
extern char *yhs_file20;
extern long fg, bg;
extern Pixmap thePixmap_1;
extern Pixmap thePixmap_2;
extern Colormap ysmap;
extern XImage *theXImage_1;
extern XImage *theXImage_2;
extern Widget view[21];
extern int selection;
extern char *action;
extern Widget top_level, draw_1, draw_2, main_window, view_image;
extern void refresh_action(void);
extern void refresh_filename(void);
extern int remove_images;
extern int file_not_loaded;
extern int vis_depth;
extern int yhs_files_open;
extern int one,two,three,four,five,six,seven,eight,nine,ten;
extern int eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen,nineteen,twenty;
extern Visual *theVisual;
extern int engage_false_colour;
extern Pixmap thePixmap_y[21];
extern Pixmap cov;
extern Widget flasher_button,menu_bar;
extern XImage *theXImage_y[21];
extern int curfile,resize;
int savefile;
extern Widget manage1,manage2,manage3,manage4,manage5,manage6,manage7,manage8,manage9,manage10;
extern Widget manage11,manage12,manage13,manage14,manage15,manage16,manage17,manage18,manage19,manage20;
char *file_name = "File not loaded";
/* Variables for setting resources */
static Arg args[MAXARGS];
static Cardinal argcount;
/* Local variables */
static Widget open_dialog = (Widget) NULL;
static Widget view_dialog = (Widget) NULL;
static XGCValues xgcv;
static unsigned char *image_1 = NULL;
static unsigned char *image_2 = NULL;
static unsigned char *image_y = NULL;
Atom ATOM_WM_COLMAP_WIN;
extern Widget manager[21];
Widget da,db,dc,dd,de,df,dg,dh,di,dj,dk,dl;
Widget dm,dn,dq,dr,ds,dt,du,dv,l,m,n,o;
unsigned long fgy,bgy;
int once=0;
/* Function prototypes */
extern XtCallbackProc handle_expose_y(Widget w, XtPointer client_data,
XmDrawingAreaCallbackStruct *call_data);
extern XtCallbackProc squish(Widget w, XtPointer client_data,
XmAnyCallbackStruct *call_data);
void sbox_set(Widget d, XtPointer client_data,XmToggleButtonCallbackStruct *call_data);
void pbox_cb(Widget m, XtPointer client_data, XmSelectionBoxCallbackStruct *call_data);
void update_time();
void create_open_dialog(Widget parent);
void create_view_dialog(Widget parent);
void activate_open_dialog(Widget w, XtPointer client_data,
XmAnyCallbackStruct *call_data);
void activate_view_dialog(Widget w, XtPointer client_data,
XmAnyCallbackStruct *call_data);
void deactivate_open_dialog(void);
void deactivate_view_dialog(void);
extern void mouse_track_1(Widget w, XtPointer client_data, XEvent *event);
static void fs_ok(Widget w, XtPointer client_data,
XmSelectionBoxCallbackStruct *call_data);
static void fs_cancel(Widget w, XtPointer client_data,
XmSelectionBoxCallbackStruct *call_data);
static void fv_ok(Widget w, XtPointer client_data,
XmSelectionBoxCallbackStruct *call_data);
static void fv_cancel(Widget w, XtPointer client_data,
XmSelectionBoxCallbackStruct *call_data);
void load_file(char *filename, Widget w);
static void setup_ximage();
void close_me_callback(Widget w, XtPointer client_data,
XmDrawingAreaCallbackStruct *call_data);
void multi_window_callback(Widget w, XtPointer client_data,
XmAnyCallbackStruct *call_data);
void multi_merge_callback(Widget w, XtPointer client_data,
XmAnyCallbackStruct *call_data);
void inverse_callback(Widget w, XtPointer client_data,
XmAnyCallbackStruct *call_data);
void reduce_callback(Widget w, XtPointer client_data,
XmAnyCallbackStruct *call_data);
extern void red_callback(Widget w, XtPointer client_data,
XmAnyCallbackStruct *call_data);
void expand_callback(Widget w, XtPointer client_data,
XmAnyCallbackStruct *call_data);
void cascade_callback(Widget w, XtPointer client_data,
XmAnyCallbackStruct *call_data);
void tile_callback(Widget w, XtPointer client_data,
XmAnyCallbackStruct *call_data);
void operate_callback(Widget w, XtPointer client_data,
XmAnyCallbackStruct *call_data);
extern void sq();
void resize_callback();
void reduction();
void delreload();
void deletestring();
/* Function definition */
void create_open_dialog(Widget parent) {
XmString title;
Widget temp_widget = parent;
/* Ensure the parent of the dialog is a shell widget */
while ( !XtIsShell(temp_widget) ) {
temp_widget = XtParent(temp_widget);
}
title = XmStringLtoRCreate("Load....", XmSTRING_DEFAULT_CHARSET);
argcount = 0;
XtSetArg(args[argcount], XmNfilterLabelString, title); argcount++;
open_dialog = XmCreateFileSelectionDialog(temp_widget, "open dialog",
args, argcount);
/* Remove the help button from the file selection dialog box */
temp_widget = XmFileSelectionBoxGetChild(open_dialog, XmDIALOG_HELP_BUTTON);
XtUnmanageChild(temp_widget);
/* Add callbacks for the "OK" and "Cancel" buttons */
XtAddCallback(open_dialog, XmNokCallback,
(XtCallbackProc) fs_ok, (XtPointer) NULL);
XtAddCallback(open_dialog, XmNcancelCallback,
(XtCallbackProc) fs_cancel, (XtPointer) NULL);
XmStringFree(title);
}
/* Function definition */
void create_view_dialog(Widget parent) {
XmString title;
Widget temp_widget = parent;
/* Ensure the parent of the dialog is a shell widget */
while ( !XtIsShell(temp_widget) ) {
temp_widget = XtParent(temp_widget);
}
if (yhs_files_open < 20)
{
title = XmStringLtoRCreate("Load....", XmSTRING_DEFAULT_CHARSET);
argcount = 0;
XtSetArg(args[argcount], XmNfilterLabelString, title); argcount++;
view_dialog = XmCreateFileSelectionDialog(temp_widget, "view dialog",
args, argcount);
/* Remove the help button from the file selection dialog box */
temp_widget = XmFileSelectionBoxGetChild(view_dialog, XmDIALOG_HELP_BUTTON);
XtUnmanageChild(temp_widget);
/* Add callbacks for the "OK" and "Cancel" buttons, note that fs_ok and fv_ok are different. */
XtAddCallback(view_dialog, XmNokCallback,
(XtCallbackProc) fv_ok, (XtPointer) NULL);
XtAddCallback(view_dialog, XmNcancelCallback,
(XtCallbackProc) fv_cancel, (XtPointer) NULL);
XmStringFree(title);
}
}
void activate_open_dialog(Widget w,