File: xmen_getfile.c

package info (click to toggle)
scilab 4.0-12
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 100,640 kB
  • ctags: 57,333
  • sloc: ansic: 377,889; fortran: 242,862; xml: 179,819; tcl: 42,062; sh: 10,593; ml: 9,441; makefile: 4,377; cpp: 1,354; java: 621; csh: 260; yacc: 247; perl: 130; lex: 126; asm: 72; lisp: 30
file content (140 lines) | stat: -rw-r--r-- 3,903 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/* Copyright ENPC */
/********************************************************
 * choice.c The XWindow part 
 * All the generic stuff for dealing with choice widgets.
 * (from xgc) 
 ***********************************************************/
#include "../sci_mem_alloc.h"
#include "men_scilab.h"

extern int set_cmap __PARAMS((Window w)); 
extern void DisplayInit __PARAMS((char *string,Display **dpy,Widget *toplevel));
extern int ok_prep  __PARAMS((char *filemask,char *dirname,char *title,int flag,int *err));
extern int ok_end  __PARAMS((void));
extern int w_init  __PARAMS((  Widget w));
extern int set_temp_wf_cursor __PARAMS((Cursor cursor));
extern void Rescan    __PARAMS( (Widget widget, XEvent*	event,
				String* params,    Cardinal* num_params));
extern int reset_wf_cursor  __PARAMS((void));
extern int create_file_panel  __PARAMS((  Widget w, char * description));
extern int getMenuBut0  __PARAMS((  Widget *w));

extern void C2F(cvstr)();

extern XtAppContext app_con; 

extern Widget file_popup;
extern Boolean	file_msg_is_popped;
extern Widget	file_msg_popup;
extern Cursor   cur_wf_cursor,arrow_wf_cursor,wait_wf_cursor;

static int ok_Flag_sci; 
static char *xgetf_str ;
static int error=0;

/*************************************************     
 * Really Ugly I'm ashamed 
 * The main function to activate the file menu 
 **********************************************************/

int GetFileWindow(char *filemask, char **file, char *dirname, int flag,
		  int *ierr, char *title)
{
  int err=0;
  static Display *dpy = (Display *) NULL;
  static  Widget toplevel,toplevel1;
  error= 0;
  getMenuBut0(&toplevel);
  DisplayInit("",&dpy,&toplevel1);
  if ( toplevel == (Widget) 0) 
    {
      /* we are in scilab -nw */
      toplevel = toplevel1;
    }
  popup_file_panel1(toplevel,title);
  ok_prep(filemask,dirname,title,flag,&err);
  if ( err != 1 )   XtSpecialLoop();
  ok_end();
  XtSetSensitive(toplevel,True);
  *file = xgetf_str;
  *ierr = error;
  if ( ok_Flag_sci == -1 ) 
    return(FALSE);
  else
    return(TRUE);
}

/*************************************************     
 * X11 Event loop 
 **********************************************************/

void XtSpecialLoop(void)
{
  XEvent event;
  ok_Flag_sci= 0;
  for (;;) {
    XtAppNextEvent(app_con,&event);
    XtDispatchEvent(&event);
    if (ok_Flag_sci != 0) break;
  }
}

/*************************************************     
 * The cancel command callback 
 **********************************************************/

void cancel_getfile(void)
{ 
  ok_Flag_sci = -1;
}

/*************************************************     
 * Activated when file is choosed 
 * write result in a static var (str) 
 **********************************************************/

int write_getfile(char *dir, char *file)
{
  xgetf_str = (char *) MALLOC( (strlen(dir)+strlen(file)+2)*(sizeof(char)));
  if (xgetf_str != 0)
    { 
      int ind ;
      sprintf(xgetf_str,"%s/%s",dir,file);
      ind = strlen(xgetf_str) - 1 ;
      if (xgetf_str[ind] == '\n') xgetf_str[ind] = '\0' ;
    }
  else 
    {
      Scistring("Malloc : No more place");
      error = 1;
    }
  ok_Flag_sci= 1;
  return(0);
}

/*************************************************     
 * Activate the file menu 
 **********************************************************/

int popup_file_panel1(Widget w, char *description)
{
    extern Atom     wm_delete_window;
    w_init(w);
    set_temp_wf_cursor(wait_wf_cursor);
    XtSetSensitive(w, False);
    if (!file_popup)
	create_file_panel(w,description);
    else
      Rescan((Widget) 0, (XEvent*) 0, (String*) 0, (Cardinal*) 0);

    XtPopup(file_popup, XtGrabNonexclusive);
    (void) XSetWMProtocols(XtDisplay(file_popup), XtWindow(file_popup),
			   &wm_delete_window, 1);
    if (file_msg_is_popped)
	XtAddGrab(file_msg_popup, False, False);
    reset_wf_cursor();
    return(0);
}