1 /* Reference Manager */
2 /* by Harald M. Stauss */
3 /* Main Module */
4 /* Last change 30.04.2003 */
5
6 #include <Xm/MainW.h>
7 #include <Xm/RowColumn.h>
8 #include <Xm/CascadeB.h>
9 #include <Xm/SeparatoG.h>
10 #include <Xm/PushBG.h>
11 #include <Xm/ToggleBG.h>
12 #include <Xm/List.h>
13 #include <Xm/FileSB.h>
14 #include <Xm/Label.h>
15 #include <Xm/MessageB.h>
16 #include <Xm/Text.h>
17 #include <X11/Xmu/Editres.h>
18 #include <stdio.h>
19
20 #include "nrutil.c"
21 #include "sort.c"
22 #include "mybiblio.h"
23
24 #define VERSION "BibTeX Manager, Ver. 1.7"
25
26 /* G l o b a l V a r i a b e l s */
27 /* key: pointer to an array of unsigned long */
28 /* index of key = number of element in Widget liste */
29 /* value of key = index to citation in CLASS BIBLIO b */
30 /* element 0 in key gives the number of elements in key */
31
32 #define N_INPUT_FILTER 5 /* number of input filters */
33
34 /* Structure for menu system */
35 typedef struct {
36 Widget f_menu;
37 Widget f_new;
38 Widget f_load;
39 Widget f_save;
40 Widget f_print;
41 Widget f_quit;
42 } f_menu;
43
44 typedef struct {
45 Widget e_menu;
46 Widget e_add;
47 Widget e_edit;
48 Widget e_delete;
49 Widget e_reduce;
50 } e_menu;
51
52 typedef struct {
53 Widget s_menu;
54 Widget s_searchall;
55 Widget s_and;
56 Widget s_or;
57 Widget s_not;
58 Widget s_showall;
59 Widget s_case;
60 } s_menu;
61
62 typedef struct {
63 f_menu file;
64 e_menu edit;
65 s_menu search;
66 } main_menu;
67
68
69 XtAppContext app;
70 MYBIBLIO b;
71 unsigned long *key;
72 char *database;
73 Widget toplevel;
74 Widget liste;
75 Widget message;
76 main_menu mymenu;
77
78 int
main(int argc,char * argv[])79 main(int argc, char *argv[])
80 {
81 Widget main_w, menubar, PullDown;
82
83 void file_cb(Widget, XtPointer, XtPointer);
84 void edit_cb(Widget, XtPointer, XtPointer);
85 void search_cb(Widget, XtPointer, XtPointer);
86 void set_message(unsigned long);
87
88 /* toplevel */
89 toplevel = XtVaAppInitialize (&app, "XmBibTeX", NULL, 0,
90 &argc, argv, NULL, NULL);
91 XtVaSetValues(toplevel,
92 XmNtitle, VERSION,
93 NULL);
94
95 XtAddEventHandler(toplevel, (EventMask)0, True,
96 _XEditResCheckMessages, NULL);
97 /* mainwindow */
98 main_w=XtVaCreateManagedWidget("main_w", xmMainWindowWidgetClass, toplevel,
99 XmNheight, 400,
100 XmNwidth, 600,
101 NULL);
102 liste=XtVaCreateManagedWidget("reflist", xmListWidgetClass, main_w,
103 XmNvisibleItemCount, 10,
104 NULL);
105
106
107 /* messagearea */
108 message = XtVaCreateManagedWidget("message", xmLabelWidgetClass, main_w,
109 XmNalignment, XmALIGNMENT_BEGINNING,
110 XmNlabelString, XmStringCreateLocalized(" "),
111 NULL);
112 XtVaSetValues(main_w, XmNmessageWindow, message, NULL);
113 set_message(0);
114
115 /* menusystem */
116 menubar = XmCreateMenuBar(main_w, "menubar", NULL, 0);
117 /* F i l e m e n u */;
118 PullDown=XmCreatePulldownMenu(menubar, "FilePullDown", NULL,0);
119 mymenu.file.f_menu=XtVaCreateManagedWidget("File",
120 xmCascadeButtonWidgetClass, menubar,
121 XmNlabelString, XmStringCreateLocalized("File"),
122 XmNmnemonic, 'F',
123 XmNsubMenuId, PullDown,
124 NULL);
125 mymenu.file.f_new=XtVaCreateManagedWidget("New",
126 xmPushButtonGadgetClass, PullDown,
127 XmNmnemonic, 'N',
128 NULL);
129 XtAddCallback(mymenu.file.f_new, XmNactivateCallback, file_cb, (XtPointer)0);
130 mymenu.file.f_load=XtVaCreateManagedWidget("Load",
131 xmPushButtonGadgetClass, PullDown,
132 XmNmnemonic, 'L',
133 NULL);
134 XtAddCallback(mymenu.file.f_load, XmNactivateCallback, file_cb, (XtPointer)1);
135 mymenu.file.f_save=XtVaCreateManagedWidget("Save",
136 xmPushButtonGadgetClass, PullDown,
137 XmNmnemonic, 'S',
138 NULL);
139 XtAddCallback(mymenu.file.f_save, XmNactivateCallback, file_cb, (XtPointer)2);
140 XtVaCreateManagedWidget("separator", xmSeparatorGadgetClass, PullDown, NULL);
141 mymenu.file.f_print=XtVaCreateManagedWidget("Print",
142 xmPushButtonGadgetClass, PullDown,
143 XmNmnemonic, 'P',
144 NULL);
145 XtAddCallback(mymenu.file.f_print, XmNactivateCallback, file_cb, (XtPointer)3);
146 XtVaCreateManagedWidget("separator", xmSeparatorGadgetClass, PullDown, NULL);
147 mymenu.file.f_quit=XtVaCreateManagedWidget("Quit",
148 xmPushButtonGadgetClass, PullDown,
149 XmNmnemonic, 'Q',
150 NULL);
151 XtAddCallback(mymenu.file.f_quit, XmNactivateCallback, file_cb, (XtPointer)4);
152 /* E d i t m e n u */;
153 PullDown=XmCreatePulldownMenu(menubar, "EditPullDown", NULL,0);
154 mymenu.edit.e_menu=XtVaCreateManagedWidget("Edit",
155 xmCascadeButtonWidgetClass, menubar,
156 XmNlabelString, XmStringCreateLocalized("Edit"),
157 XmNmnemonic, 'E',
158 XmNsubMenuId, PullDown,
159 NULL);
160 mymenu.edit.e_add=XtVaCreateManagedWidget("Add reference",
161 xmPushButtonGadgetClass, PullDown,
162 XmNmnemonic, 'A',
163 NULL);
164 XtAddCallback(mymenu.edit.e_add, XmNactivateCallback, edit_cb, (XtPointer)0);
165 mymenu.edit.e_edit=XtVaCreateManagedWidget("Edit reference",
166 xmPushButtonGadgetClass, PullDown,
167 XmNmnemonic, 'E',
168 NULL);
169 XtAddCallback(mymenu.edit.e_edit, XmNactivateCallback, edit_cb, (XtPointer)1);
170 mymenu.edit.e_delete=XtVaCreateManagedWidget("Delete reference",
171 xmPushButtonGadgetClass, PullDown,
172 XmNmnemonic, 'D',
173 NULL);
174 XtAddCallback(mymenu.edit.e_delete, XmNactivateCallback, edit_cb, (XtPointer)2);
175 XtVaCreateManagedWidget("separator", xmSeparatorGadgetClass, PullDown, NULL);
176 mymenu.edit.e_reduce=XtVaCreateManagedWidget("Reduce to listed references",
177 xmPushButtonGadgetClass, PullDown,
178 XmNmnemonic, 'R',
179 NULL);
180 XtAddCallback(mymenu.edit.e_reduce, XmNactivateCallback, edit_cb, (XtPointer)3);
181 /* S e a r c h m e n u */;
182 PullDown=XmCreatePulldownMenu(menubar, "SearchPullDown", NULL,0);
183 mymenu.search.s_menu=XtVaCreateManagedWidget("Search",
184 xmCascadeButtonWidgetClass, menubar,
185 XmNlabelString, XmStringCreateLocalized("Search"),
186 XmNmnemonic, 'S',
187 XmNsubMenuId, PullDown,
188 NULL);
189 mymenu.search.s_searchall=XtVaCreateManagedWidget("Search in all fields",
190 xmPushButtonGadgetClass, PullDown,
191 XmNmnemonic, 'S',
192 NULL);
193 XtAddCallback(mymenu.search.s_searchall, XmNactivateCallback, search_cb, (XtPointer)0);
194 XtVaCreateManagedWidget("separator", xmSeparatorGadgetClass, PullDown, NULL);
195 mymenu.search.s_and=XtVaCreateManagedWidget("AND",
196 xmPushButtonGadgetClass, PullDown,
197 XmNmnemonic, 'A',
198 NULL);
199 XtAddCallback(mymenu.search.s_and, XmNactivateCallback, search_cb, (XtPointer)1);
200 mymenu.search.s_or=XtVaCreateManagedWidget("OR",
201 xmPushButtonGadgetClass, PullDown,
202 XmNmnemonic, 'O',
203 NULL);
204 XtAddCallback(mymenu.search.s_or, XmNactivateCallback, search_cb, (XtPointer)2);
205 mymenu.search.s_not=XtVaCreateManagedWidget("NOT",
206 xmPushButtonGadgetClass, PullDown,
207 XmNmnemonic, 'N',
208 NULL);
209 XtAddCallback(mymenu.search.s_not, XmNactivateCallback, search_cb, (XtPointer)3);
210 XtVaCreateManagedWidget("separator", xmSeparatorGadgetClass, PullDown, NULL);
211 mymenu.search.s_showall=XtVaCreateManagedWidget("View all references",
212 xmPushButtonGadgetClass, PullDown,
213 XmNmnemonic, 'V',
214 NULL);
215 XtAddCallback(mymenu.search.s_showall, XmNactivateCallback, search_cb, (XtPointer)4);
216 XtVaCreateManagedWidget("separator", xmSeparatorGadgetClass, PullDown, NULL);
217 mymenu.search.s_case=XtVaCreateManagedWidget("Case sensitive",
218 xmToggleButtonGadgetClass, PullDown,
219 XmNmnemonic, 'C',
220 NULL);
221 XtAddCallback(mymenu.search.s_case, XmNvalueChangedCallback, search_cb, (XtPointer)5);
222
223 XtSetSensitive(mymenu.file.f_new,False);
224 XtSetSensitive(mymenu.file.f_save,False);
225 XtSetSensitive(mymenu.file.f_print,False);
226 XtSetSensitive(mymenu.edit.e_edit,False);
227 XtSetSensitive(mymenu.edit.e_delete,False);
228 XtSetSensitive(mymenu.edit.e_reduce,False);
229 XtSetSensitive(mymenu.search.s_searchall,False);
230 XtSetSensitive(mymenu.search.s_and,False);
231 XtSetSensitive(mymenu.search.s_or,False);
232 XtSetSensitive(mymenu.search.s_not,False);
233 XtSetSensitive(mymenu.search.s_showall,False);
234 XtSetSensitive(mymenu.search.s_case,False);
235
236 XtManageChild(menubar);
237 XmMainWindowSetAreas(main_w, menubar, NULL, NULL, NULL, liste);
238
239 /* setup arrays */
240 database=new char[255];
241 key=new unsigned long[1];
242 key[0]=0;
243
244 XtRealizeWidget (toplevel);
245 XtAppMainLoop (app);
246 }
247
248
249 /* C a l l b a c k F u n c t i o n s */
250
file_cb(Widget widget,XtPointer client_data,XtPointer call_data)251 void file_cb(Widget widget, XtPointer client_data, XtPointer call_data)
252 {
253 extern void load_cb(Widget, XtPointer, XtPointer);
254 extern void ftype_cb(Widget, XtPointer, XtPointer);
255 extern void save_cb(Widget, XtPointer, XtPointer);
256 extern void print_cb(Widget, XtPointer, XtPointer);
257 void fsb_cancel(Widget, XtPointer, XtPointer);
258 void set_message(unsigned long);
259
260 static Widget fsb_load, ftype, fsb_save, fsb_print;
261 XmStringTable str_list;
262
263 switch((intptr_t)client_data) {
264 case 0: // .................................new;
265 XmListDeleteAllItems(liste);
266 key=(unsigned long *)realloc(key, sizeof(unsigned long));
267 key[0]=0;
268 b.~MYBIBLIO();
269 b=*(new MYBIBLIO());
270 XtVaSetValues(toplevel,
271 XmNtitle, VERSION,
272 NULL);
273 set_message(0);
274 XtSetSensitive(mymenu.file.f_new,False);
275 XtSetSensitive(mymenu.file.f_save,False);
276 XtSetSensitive(mymenu.file.f_print,False);
277 XtSetSensitive(mymenu.edit.e_edit,False);
278 XtSetSensitive(mymenu.edit.e_delete,False);
279 XtSetSensitive(mymenu.edit.e_reduce,False);
280 XtSetSensitive(mymenu.search.s_searchall,False);
281 XtSetSensitive(mymenu.search.s_and,False);
282 XtSetSensitive(mymenu.search.s_or,False);
283 XtSetSensitive(mymenu.search.s_not,False);
284 XtSetSensitive(mymenu.search.s_showall,False);
285 XtSetSensitive(mymenu.search.s_case,False);
286 break;
287 case 1: // ..................................load;
288 if (!fsb_load) {
289 fsb_load=XmCreateFileSelectionDialog(toplevel, "filesb", NULL, 0);
290 XtAddCallback(fsb_load,XmNokCallback, load_cb, NULL);
291 XtAddCallback(fsb_load,XmNcancelCallback, fsb_cancel, NULL);
292 str_list=(XmStringTable) XtMalloc(N_INPUT_FILTER*sizeof(XmString));
293 str_list[0]=XmStringCreateLocalized("BibTeX");
294 str_list[1]=XmStringCreateLocalized("Medline Ovid");
295 str_list[2]=XmStringCreateLocalized("Medline Spirs");
296 str_list[3]=XmStringCreateLocalized("Medline PubMed");
297 str_list[4]=XmStringCreateLocalized("Inspec");
298 ftype=XmCreateScrolledList(fsb_load, "filetype", NULL, 0);
299 XtVaSetValues(ftype,
300 XmNselectionPolicy, XmSINGLE_SELECT,
301 XmNvisibleItemCount, 3,
302 XmNitemCount, N_INPUT_FILTER,
303 XmNitems, str_list,
304 NULL);
305 XtAddCallback(ftype, XmNsingleSelectionCallback, ftype_cb, NULL);
306 XmListSelectPos(ftype, 1, True);
307 XtFree((char *)str_list);
308 }
309 XtManageChild(ftype);
310 XtManageChild(fsb_load);
311 XtPopup (XtParent(fsb_load), XtGrabNone);
312 break;
313 case 2: // ..................................save;
314 if (!fsb_save) {
315 fsb_save=XmCreateFileSelectionDialog(toplevel, "filesb", NULL, 0);
316 XtAddCallback(fsb_save,XmNokCallback, save_cb, NULL);
317 XtAddCallback(fsb_save,XmNcancelCallback, fsb_cancel, NULL);
318 XtVaSetValues(XtParent(fsb_save),
319 XmNtitle, "Save Database",
320 NULL);
321 }
322 XtManageChild(fsb_save);
323 break;
324 case 3: // ...................................print;
325 if (!fsb_print) {
326 fsb_print=XmCreateFileSelectionDialog(toplevel, "filesb", NULL, 0);
327 XtAddCallback(fsb_print,XmNokCallback, print_cb, NULL);
328 XtAddCallback(fsb_print,XmNcancelCallback, fsb_cancel, NULL);
329 XtVaSetValues(XtParent(fsb_print),
330 XmNtitle, "Save LaTeX",
331 NULL);
332 }
333 XtManageChild(fsb_print);
334 break;
335 case 4: // ...................................quit;
336 delete[]key;
337 delete[]database;
338 XtDestroyWidget(toplevel);
339 exit(0);
340 break;
341 }
342 }
343
ftype_cb(Widget widget,XtPointer client_data,XtPointer call_data)344 void ftype_cb(Widget widget, XtPointer client_data, XtPointer call_data) {
345 XmListCallbackStruct *cbs=(XmListCallbackStruct *) call_data;
346 Widget fsbox=XtParent(XtParent(widget));
347 char *choice, tit[80];
348
349 XmStringGetLtoR(cbs->item, XmFONTLIST_DEFAULT_TAG, &choice);
350 XtVaSetValues(fsbox,
351 XmNuserData, cbs->item_position,
352 NULL);
353 strcpy(tit,"Load "); strcat(tit, choice);
354 XtVaSetValues(XtParent(fsbox),
355 XmNtitle, tit,
356 NULL);
357 }
358
359
fsb_cancel(Widget widget,XtPointer client_data,XtPointer call_data)360 void fsb_cancel(Widget widget, XtPointer client_data, XtPointer call_data) {
361 XtUnmanageChild(widget);
362 }
363
edit_cb(Widget widget,XtPointer client_data,XtPointer call_data)364 void edit_cb(Widget widget, XtPointer client_data, XtPointer call_data)
365 {
366 unsigned long listid, n, nk;
367 short islisted;
368 int *pos_list, pos_cnt;
369 int rc, i;
370 char *ref;
371 XmStringTable str_list;
372
373 extern int c_refform(short, short);
374 unsigned long find_freekey(unsigned long);
375 void set_message(unsigned long);
376
377 ref =new char[100];
378 str_list=(XmStringTable) XtMalloc(sizeof(XmString));
379
380 switch((intptr_t)client_data) {
381 case 0: // ................................add new reference
382 b.ClearDummy();
383 b.d->doctype=(char *)realloc(b.d->doctype, sizeof("article")+1);
384 strcpy(b.d->doctype, "article");
385 b.d->id=find_freekey(b.last);
386 if (c_refform(0,0)) {
387 b.add_citation();
388 key[0]++;
389 key=(unsigned long *)realloc(key,(key[0]+1)*sizeof(unsigned long));
390 key[key[0]]=b.last-1;
391 b.FromDummy(key[key[0]]);
392 sprintf(ref,"%u %.15s %.30s %.15s %.4s",
393 b.c[key[key[0]]]->id,
394 b.c[key[key[0]]]->author,
395 b.c[key[key[0]]]->title,
396 b.c[key[key[0]]]->journal,
397 b.c[key[key[0]]]->year);
398 str_list[0]=XmStringCreateLocalized(ref);
399 XmListAddItems(liste,str_list,1,0);
400 set_message(b.last);
401 if (b.last>0) {
402 XtSetSensitive(mymenu.file.f_new,True);
403 XtSetSensitive(mymenu.file.f_save,True);
404 XtSetSensitive(mymenu.file.f_print,True);
405 XtSetSensitive(mymenu.edit.e_edit,True);
406 XtSetSensitive(mymenu.edit.e_delete,True);
407 XtSetSensitive(mymenu.edit.e_reduce,True);
408 XtSetSensitive(mymenu.search.s_searchall,True);
409 XtSetSensitive(mymenu.search.s_and,True);
410 XtSetSensitive(mymenu.search.s_or,True);
411 XtSetSensitive(mymenu.search.s_not,True);
412 XtSetSensitive(mymenu.search.s_showall,True);
413 XtSetSensitive(mymenu.search.s_case,True);
414 }
415 }
416 break;
417 case 1: // ................................edit reference
418 if(XmListGetSelectedPos(liste,&pos_list,&pos_cnt) && pos_cnt>0) {
419 listid=pos_list[0];
420 XtFree((char *)pos_list);
421 b.ToDummy(key[listid]);
422 if (c_refform(b.DocTypeN(key[listid]),1)) {
423 b.FromDummy(key[listid]);
424 sprintf(ref,"%u %.15s %.30s %.15s %.4s",
425 b.c[key[listid]]->id,
426 b.c[key[listid]]->author,
427 b.c[key[listid]]->title,
428 b.c[key[listid]]->journal,
429 b.c[key[listid]]->year);
430 str_list[0]=XmStringCreateLocalized(ref);
431 XmListReplaceItemsPos(liste,str_list,1,listid);
432 }
433 }
434 break;
435 case 2: // ................................delete reference
436 if(XmListGetSelectedPos(liste,&pos_list,&pos_cnt) && pos_cnt>0) {
437 listid=pos_list[0];
438 XtFree((char *)pos_list);
439 b.del_citation(key[listid]);
440 for (n=listid; n<key[0]; n++) key[n]=key[n+1]-1;
441 key[0]--;
442 key=(unsigned long *)realloc(key,(key[0]+1)*sizeof(unsigned long));
443 XmListDeletePos(liste,listid);
444 set_message(key[0]);
445 if (b.last==0) {
446 XtSetSensitive(mymenu.file.f_new,False);
447 XtSetSensitive(mymenu.file.f_save,False);
448 XtSetSensitive(mymenu.file.f_print,False);
449 XtSetSensitive(mymenu.edit.e_edit,False);
450 XtSetSensitive(mymenu.edit.e_delete,False);
451 XtSetSensitive(mymenu.edit.e_reduce,False);
452 XtSetSensitive(mymenu.search.s_searchall,False);
453 XtSetSensitive(mymenu.search.s_and,False);
454 XtSetSensitive(mymenu.search.s_or,False);
455 XtSetSensitive(mymenu.search.s_not,False);
456 XtSetSensitive(mymenu.search.s_showall,False);
457 XtSetSensitive(mymenu.search.s_case,False);
458 }
459 }
460 break;
461 case 3: // ................................reduce to listed references
462 for (n=0; n<b.last; n++) {
463 // ...................................... already selected ? ;
464 islisted=0;
465 for (nk=1; nk<=key[0]; nk++) if (n==key[nk]) islisted=1;
466 // ...................................... if not than delete;
467 if(!islisted) {
468 b.del_citation(n);
469 for (nk=1; nk<=key[0]; nk++)
470 if (key[nk]>n) key[nk]--;
471 n--;
472 }
473 }
474
475 break;
476 }
477
478 XtFree((char *)str_list);
479 delete[]ref;
480 }
481
find_freekey(unsigned long limit)482 unsigned long find_freekey(unsigned long limit) {
483 unsigned long i, n, erste;
484 float *id;
485 char text[100];
486
487 if (b.last>0) {
488 if (limit>b.last) limit=b.last;
489 id=new float[limit+1];
490
491 for(i=0; i<limit; i++) id[i]=b.c[i]->id;
492 sort(limit,id-1);
493
494 n=(unsigned long)id[0]; erste=0;
495 for(i=0; i<limit; i++) {
496 if(id[i]>n) {
497 erste=n;
498 i=limit;
499 }
500 n++;
501 }
502
503 if (erste==0) erste=(unsigned long)id[limit-1]+1;
504 delete[]id;
505 }
506 else
507 erste=1;
508 return erste;
509 }
510
set_message(unsigned long nref)511 void set_message(unsigned long nref) {
512 char text[100];
513 sprintf(text,"number of references: %u", nref);
514 XtVaSetValues(message,
515 XmNlabelString, XmStringCreateLocalized(text),
516 NULL);
517 }
518
search_cb(Widget widget,XtPointer client_data,XtPointer call_data)519 void search_cb(Widget widget, XtPointer client_data, XtPointer call_data)
520 {
521 unsigned long n, nk;
522 short hinzu;
523 int i;
524 static int cis=1; // case insensitive
525 unsigned long *gefunden;
526 XmStringTable str_list;
527 char *ref;
528 Arg args[5];
529 Widget mbox, rowcol, w;
530
531 extern int c_refform(short, short);
532 extern char *mystrstr(const char *s1, const char *s2, short c);
533 extern void searchall_cb(Widget widget, XtPointer client_data, XtPointer call_data);
534 void set_message(unsigned long);
535 void satext_cb(Widget widget, XtPointer client_data, XtPointer call_data);
536 void satoggle_cb(Widget widget, XtPointer client_data, XtPointer call_data);
537
538
539 gefunden = new unsigned long[b.last+1];
540 gefunden[0]= 0;
541 ref = new char[100];
542
543 switch((intptr_t)client_data) {
544 case 0: // ................................. search in all fields;
545 i=0;
546 XtSetArg(args[i], XmNtitle, "Search all fields"); i++;
547 XtSetArg(args[i], XmNautoUnmanage, False); i++;
548 XtSetArg(args[i], XmNmessageString,
549 XmStringCreateLocalized("Search in all fields for:")); i++;
550 mbox=XmCreateMessageDialog(liste, "mbox", args, i);
551 XtUnmanageChild(XmMessageBoxGetChild(mbox, XmDIALOG_HELP_BUTTON));
552 XtAddCallback(mbox, XmNokCallback, searchall_cb, (XtPointer)cis);
553 XtAddCallback(mbox, XmNcancelCallback, fsb_cancel, NULL);
554 rowcol=XtVaCreateWidget("rowcol", xmRowColumnWidgetClass, mbox,
555 XmNradioBehavior, True,
556 NULL);
557 w=XtVaCreateManagedWidget("text", xmTextWidgetClass, rowcol,
558 NULL);
559 XtAddCallback(w, XmNvalueChangedCallback, satext_cb, NULL);
560 w=XtVaCreateManagedWidget("and", xmToggleButtonGadgetClass, rowcol,
561 XmNset, True,
562 NULL);
563 b.d->id=1;
564 XtAddCallback(w, XmNvalueChangedCallback, satoggle_cb, (XtPointer)1);
565 w=XtVaCreateManagedWidget("or ", xmToggleButtonGadgetClass, rowcol,
566 NULL);
567 XtAddCallback(w, XmNvalueChangedCallback, satoggle_cb, (XtPointer)2);
568 w=XtVaCreateManagedWidget("not", xmToggleButtonGadgetClass, rowcol,
569 NULL);
570 XtAddCallback(w, XmNvalueChangedCallback, satoggle_cb, (XtPointer)3);
571 XtManageChild(rowcol);
572 XtManageChild(mbox);
573 break;
574 case 1: // ................................. AND;
575 b.ClearDummy();
576 b.d->id=0;
577 if (c_refform(0,2)) {
578 for (n=1; n<=key[0]; n++) {
579 hinzu=1;
580 if (b.d->id)
581 if (b.c[key[n]]->id != b.d->id) hinzu=0;
582 if (strcmp(b.d->doctype,""))
583 if (!b.c[key[n]]->doctype) hinzu=0;
584 else if (!mystrstr(b.c[key[n]]->doctype,b.d->doctype, cis)) hinzu=0;
585 if (strcmp(b.d->keyword,""))
586 if (!b.c[key[n]]->keyword) hinzu=0;
587 else if (!mystrstr(b.c[key[n]]->keyword,b.d->keyword, cis)) hinzu=0;
588 if (strcmp(b.d->abstract,""))
589 if (!b.c[key[n]]->abstract) hinzu=0;
590 else if (!mystrstr(b.c[key[n]]->abstract,b.d->abstract, cis)) hinzu=0;
591 if (strcmp(b.d->address,""))
592 if (!b.c[key[n]]->address) hinzu=0;
593 else if (!mystrstr(b.c[key[n]]->address,b.d->address, cis)) hinzu=0;
594 if (strcmp(b.d->annote,""))
595 if (!b.c[key[n]]->annote) hinzu=0;
596 else if (!mystrstr(b.c[key[n]]->annote,b.d->annote, cis)) hinzu=0;
597 if (strcmp(b.d->author,""))
598 if (!b.c[key[n]]->author) hinzu=0;
599 else if (!mystrstr(b.c[key[n]]->author,b.d->author, cis)) hinzu=0;
600 if (strcmp(b.d->booktitle,""))
601 if (!b.c[key[n]]->booktitle) hinzu=0;
602 else if (!mystrstr(b.c[key[n]]->booktitle,b.d->booktitle, cis)) hinzu=0;
603 if (strcmp(b.d->chapter,""))
604 if (!b.c[key[n]]->chapter) hinzu=0;
605 else if (!mystrstr(b.c[key[n]]->chapter,b.d->chapter, cis)) hinzu=0;
606 if (strcmp(b.d->comment,""))
607 if (!b.c[key[n]]->comment) hinzu=0;
608 else if (!mystrstr(b.c[key[n]]->comment,b.d->comment, cis)) hinzu=0;
609 if (strcmp(b.d->crossref,""))
610 if (!b.c[key[n]]->crossref) hinzu=0;
611 else if (!mystrstr(b.c[key[n]]->crossref,b.d->crossref, cis)) hinzu=0;
612 if (strcmp(b.d->edition,""))
613 if (!b.c[key[n]]->edition) hinzu=0;
614 else if (!mystrstr(b.c[key[n]]->edition,b.d->edition, cis)) hinzu=0;
615 if (strcmp(b.d->editor,""))
616 if (!b.c[key[n]]->editor) hinzu=0;
617 else if (!mystrstr(b.c[key[n]]->editor,b.d->editor, cis)) hinzu=0;
618 if (strcmp(b.d->howpublished,""))
619 if (!b.c[key[n]]->howpublished) hinzu=0;
620 else if (!mystrstr(b.c[key[n]]->howpublished,b.d->howpublished, cis)) hinzu=0;
621 if (strcmp(b.d->institution,""))
622 if (!b.c[key[n]]->institution) hinzu=0;
623 else if (!mystrstr(b.c[key[n]]->institution,b.d->institution, cis)) hinzu=0;
624 if (strcmp(b.d->journal,""))
625 if (!b.c[key[n]]->journal) hinzu=0;
626 else if (!mystrstr(b.c[key[n]]->journal,b.d->journal, cis)) hinzu=0;
627 if (strcmp(b.d->key,""))
628 if (!b.c[key[n]]->key) hinzu=0;
629 else if (!mystrstr(b.c[key[n]]->key,b.d->key, cis)) hinzu=0;
630 if (strcmp(b.d->month,""))
631 if (!b.c[key[n]]->month) hinzu=0;
632 else if (!mystrstr(b.c[key[n]]->month,b.d->month, cis)) hinzu=0;
633 if (strcmp(b.d->note,""))
634 if (!b.c[key[n]]->note) hinzu=0;
635 else if (!mystrstr(b.c[key[n]]->note,b.d->note, cis)) hinzu=0;
636 if (strcmp(b.d->number,""))
637 if (!b.c[key[n]]->number) hinzu=0;
638 else if (!mystrstr(b.c[key[n]]->number,b.d->number, cis)) hinzu=0;
639 if (strcmp(b.d->organization,""))
640 if (!b.c[key[n]]->organization) hinzu=0;
641 else if (!mystrstr(b.c[key[n]]->organization,b.d->organization, cis)) hinzu=0;
642 if (strcmp(b.d->pages,""))
643 if (!b.c[key[n]]->pages) hinzu=0;
644 else if (!mystrstr(b.c[key[n]]->pages,b.d->pages, cis)) hinzu=0;
645 if (strcmp(b.d->publisher,""))
646 if (!b.c[key[n]]->publisher) hinzu=0;
647 else if (!mystrstr(b.c[key[n]]->publisher,b.d->publisher, cis)) hinzu=0;
648 if (strcmp(b.d->reprint,""))
649 if (!b.c[key[n]]->reprint) hinzu=0;
650 else if (strcmp(b.c[key[n]]->reprint,b.d->reprint)) hinzu=0;
651 if (strcmp(b.d->school,""))
652 if (!b.c[key[n]]->school) hinzu=0;
653 else if (!mystrstr(b.c[key[n]]->school,b.d->school, cis)) hinzu=0;
654 if (strcmp(b.d->series,""))
655 if (!b.c[key[n]]->series) hinzu=0;
656 else if (!mystrstr(b.c[key[n]]->series,b.d->series, cis)) hinzu=0;
657 if (strcmp(b.d->title,""))
658 if (!b.c[key[n]]->title) hinzu=0;
659 else if (!mystrstr(b.c[key[n]]->title,b.d->title, cis)) hinzu=0;
660 if (strcmp(b.d->type,""))
661 if (!b.c[key[n]]->type) hinzu=0;
662 else if (!mystrstr(b.c[key[n]]->type,b.d->type, cis)) hinzu=0;
663 if (strcmp(b.d->volume,""))
664 if (!b.c[key[n]]->volume) hinzu=0;
665 else if (!mystrstr(b.c[key[n]]->volume,b.d->volume, cis)) hinzu=0;
666 if (strcmp(b.d->year,""))
667 if (!b.c[key[n]]->year) hinzu=0;
668 else if (!mystrstr(b.c[key[n]]->year,b.d->year, cis)) hinzu=0;
669 if (hinzu) {
670 gefunden[0]++;
671 gefunden[gefunden[0]]=key[n];
672 }
673 } /* endfor */
674 // ........................................ Liste neu aufbauen;
675 str_list=(XmStringTable) XtMalloc(gefunden[0]*sizeof(XmString));
676 key=(unsigned long *)realloc(key,(gefunden[0]+1)*sizeof(unsigned long));
677 key[0]=gefunden[0];
678 for(n=1; n<=gefunden[0]; n++) {
679 key[n]=gefunden[n];
680 sprintf(ref,"%u %.15s %.30s %.15s %.4s",
681 b.c[gefunden[n]]->id,
682 b.c[gefunden[n]]->author,
683 b.c[gefunden[n]]->title,
684 b.c[gefunden[n]]->journal,
685 b.c[gefunden[n]]->year);
686 str_list[n-1]=XmStringCreateLocalized(ref);
687 }
688 XmListDeleteAllItems(liste);
689 XtVaSetValues(liste,
690 XmNitems, str_list,
691 XmNitemCount, gefunden[0],
692 NULL);
693 set_message(gefunden[0]);
694 XtFree((char *)str_list);
695
696 } /* endif */
697 break;
698 case 2: // ................................. OR;
699 b.ClearDummy();
700 b.d->id=0;
701 if (c_refform(0,2)) {
702 for (n=0; n<b.last; n++) {
703 // ...................................... already selected ? ;
704 hinzu=0;
705 for (nk=1; nk<=key[0]; nk++) if (n==key[nk]) hinzu=1;
706 // ...................................... if not than check;
707 if(!hinzu) {
708 hinzu=1;
709 if (b.d->id)
710 if (b.c[n]->id != b.d->id) hinzu=0;
711 if (strcmp(b.d->doctype,""))
712 if (!b.c[n]->doctype) hinzu=0;
713 else if (!mystrstr(b.c[n]->doctype,b.d->doctype, cis)) hinzu=0;
714 if (strcmp(b.d->keyword,""))
715 if (!b.c[n]->keyword) hinzu=0;
716 else if (!mystrstr(b.c[n]->keyword,b.d->keyword, cis)) hinzu=0;
717 if (strcmp(b.d->abstract,""))
718 if (!b.c[n]->abstract) hinzu=0;
719 else if (!mystrstr(b.c[n]->abstract,b.d->abstract, cis)) hinzu=0;
720 if (strcmp(b.d->address,""))
721 if (!b.c[n]->address) hinzu=0;
722 else if (!mystrstr(b.c[n]->address,b.d->address, cis)) hinzu=0;
723 if (strcmp(b.d->annote,""))
724 if (!b.c[n]->annote) hinzu=0;
725 else if (!mystrstr(b.c[n]->annote,b.d->annote, cis)) hinzu=0;
726 if (strcmp(b.d->author,""))
727 if (!b.c[n]->author) hinzu=0;
728 else if (!mystrstr(b.c[n]->author,b.d->author, cis)) hinzu=0;
729 if (strcmp(b.d->booktitle,""))
730 if (!b.c[n]->booktitle) hinzu=0;
731 else if (!mystrstr(b.c[n]->booktitle,b.d->booktitle, cis)) hinzu=0;
732 if (strcmp(b.d->chapter,""))
733 if (!b.c[n]->chapter) hinzu=0;
734 else if (!mystrstr(b.c[n]->chapter,b.d->chapter, cis)) hinzu=0;
735 if (strcmp(b.d->comment,""))
736 if (!b.c[n]->comment) hinzu=0;
737 else if (!mystrstr(b.c[n]->comment,b.d->comment, cis)) hinzu=0;
738 if (strcmp(b.d->crossref,""))
739 if (!b.c[n]->crossref) hinzu=0;
740 else if (!mystrstr(b.c[n]->crossref,b.d->crossref, cis)) hinzu=0;
741 if (strcmp(b.d->edition,""))
742 if (!b.c[n]->edition) hinzu=0;
743 else if (!mystrstr(b.c[n]->edition,b.d->edition, cis)) hinzu=0;
744 if (strcmp(b.d->editor,""))
745 if (!b.c[n]->editor) hinzu=0;
746 else if (!mystrstr(b.c[n]->editor,b.d->editor, cis)) hinzu=0;
747 if (strcmp(b.d->howpublished,""))
748 if (!b.c[n]->howpublished) hinzu=0;
749 else if (!mystrstr(b.c[n]->howpublished,b.d->howpublished, cis)) hinzu=0;
750 if (strcmp(b.d->institution,""))
751 if (!b.c[n]->institution) hinzu=0;
752 else if (!mystrstr(b.c[n]->institution,b.d->institution, cis)) hinzu=0;
753 if (strcmp(b.d->journal,""))
754 if (!b.c[n]->journal) hinzu=0;
755 else if (!mystrstr(b.c[n]->journal,b.d->journal, cis)) hinzu=0;
756 if (strcmp(b.d->key,""))
757 if (!b.c[n]->key) hinzu=0;
758 else if (!mystrstr(b.c[n]->key,b.d->key, cis)) hinzu=0;
759 if (strcmp(b.d->month,""))
760 if (!b.c[n]->month) hinzu=0;
761 else if (!mystrstr(b.c[n]->month,b.d->month, cis)) hinzu=0;
762 if (strcmp(b.d->note,""))
763 if (!b.c[n]->note) hinzu=0;
764 else if (!mystrstr(b.c[n]->note,b.d->note, cis)) hinzu=0;
765 if (strcmp(b.d->number,""))
766 if (!b.c[n]->number) hinzu=0;
767 else if (!mystrstr(b.c[n]->number,b.d->number, cis)) hinzu=0;
768 if (strcmp(b.d->organization,""))
769 if (!b.c[n]->organization) hinzu=0;
770 else if (!mystrstr(b.c[n]->organization,b.d->organization, cis)) hinzu=0;
771 if (strcmp(b.d->pages,""))
772 if (!b.c[n]->pages) hinzu=0;
773 else if (!mystrstr(b.c[n]->pages,b.d->pages, cis)) hinzu=0;
774 if (strcmp(b.d->publisher,""))
775 if (!b.c[n]->publisher) hinzu=0;
776 else if (!mystrstr(b.c[n]->publisher,b.d->publisher, cis)) hinzu=0;
777 if (strcmp(b.d->reprint,""))
778 if (!b.c[n]->reprint) hinzu=0;
779 else if (strcmp(b.c[n]->reprint,b.d->reprint)) hinzu=0;
780 if (strcmp(b.d->school,""))
781 if (!b.c[n]->school) hinzu=0;
782 else if (!mystrstr(b.c[n]->school,b.d->school, cis)) hinzu=0;
783 if (strcmp(b.d->series,""))
784 if (!b.c[n]->series) hinzu=0;
785 else if (!mystrstr(b.c[n]->series,b.d->series, cis)) hinzu=0;
786 if (strcmp(b.d->title,""))
787 if (!b.c[n]->title) hinzu=0;
788 else if (!mystrstr(b.c[n]->title,b.d->title, cis)) hinzu=0;
789 if (strcmp(b.d->type,""))
790 if (!b.c[n]->type) hinzu=0;
791 else if (!mystrstr(b.c[n]->type,b.d->type, cis)) hinzu=0;
792 if (strcmp(b.d->volume,""))
793 if (!b.c[n]->volume) hinzu=0;
794 else if (!mystrstr(b.c[n]->volume,b.d->volume, cis)) hinzu=0;
795 if (strcmp(b.d->year,""))
796 if (!b.c[n]->year) hinzu=0;
797 else if (!mystrstr(b.c[n]->year,b.d->year, cis)) hinzu=0;
798 }
799
800 if (hinzu) {
801 gefunden[0]++;
802 gefunden[gefunden[0]]=n;
803 }
804 } /* endfor */
805 // ........................................ Liste neu aufbauen;
806 str_list=(XmStringTable) XtMalloc(gefunden[0]*sizeof(XmString));
807 key=(unsigned long *)realloc(key,(gefunden[0]+1)*sizeof(unsigned long));
808 key[0]=gefunden[0];
809 for(n=1; n<=gefunden[0]; n++) {
810 key[n]=gefunden[n];
811 sprintf(ref,"%u %.15s %.30s %.15s %.4s",
812 b.c[gefunden[n]]->id,
813 b.c[gefunden[n]]->author,
814 b.c[gefunden[n]]->title,
815 b.c[gefunden[n]]->journal,
816 b.c[gefunden[n]]->year);
817 str_list[n-1]=XmStringCreateLocalized(ref);
818 }
819 XmListDeleteAllItems(liste);
820 XtVaSetValues(liste,
821 XmNitems, str_list,
822 XmNitemCount, gefunden[0],
823 NULL);
824 set_message(gefunden[0]);
825 XtFree((char *)str_list);
826
827 } /* endif */
828 break;
829 case 3: // ................................. NOT;
830 b.ClearDummy();
831 b.d->id=0;
832 if (c_refform(0,2)) {
833 for (n=1; n<=key[0]; n++) {
834 hinzu=1;
835 if (b.d->id)
836 if (b.c[key[n]]->id == b.d->id) hinzu=0;
837 if (strcmp(b.d->doctype,""))
838 if (!b.c[key[n]]->doctype) hinzu=1;
839 else if (mystrstr(b.c[key[n]]->doctype,b.d->doctype, cis)) hinzu=0;
840 if (strcmp(b.d->keyword,""))
841 if (!b.c[key[n]]->keyword) hinzu=1;
842 else if (mystrstr(b.c[key[n]]->keyword,b.d->keyword, cis)) hinzu=0;
843 if (strcmp(b.d->abstract,""))
844 if (!b.c[key[n]]->abstract) hinzu=1;
845 else if (mystrstr(b.c[key[n]]->abstract,b.d->abstract, cis)) hinzu=0;
846 if (strcmp(b.d->address,""))
847 if (!b.c[key[n]]->address) hinzu=1;
848 else if (mystrstr(b.c[key[n]]->address,b.d->address, cis)) hinzu=0;
849 if (strcmp(b.d->annote,""))
850 if (!b.c[key[n]]->annote) hinzu=1;
851 else if (mystrstr(b.c[key[n]]->annote,b.d->annote, cis)) hinzu=0;
852 if (strcmp(b.d->author,""))
853 if (!b.c[key[n]]->author) hinzu=1;
854 else if (mystrstr(b.c[key[n]]->author,b.d->author, cis)) hinzu=0;
855 if (strcmp(b.d->booktitle,""))
856 if (!b.c[key[n]]->booktitle) hinzu=1;
857 else if (mystrstr(b.c[key[n]]->booktitle,b.d->booktitle, cis)) hinzu=0;
858 if (strcmp(b.d->chapter,""))
859 if (!b.c[key[n]]->chapter) hinzu=1;
860 else if (mystrstr(b.c[key[n]]->chapter,b.d->chapter, cis)) hinzu=0;
861 if (strcmp(b.d->comment,""))
862 if (!b.c[key[n]]->comment) hinzu=1;
863 else if (mystrstr(b.c[key[n]]->comment,b.d->comment, cis)) hinzu=0;
864 if (strcmp(b.d->crossref,""))
865 if (!b.c[key[n]]->crossref) hinzu=1;
866 else if (mystrstr(b.c[key[n]]->crossref,b.d->crossref, cis)) hinzu=0;
867 if (strcmp(b.d->edition,""))
868 if (!b.c[key[n]]->edition) hinzu=1;
869 else if (mystrstr(b.c[key[n]]->edition,b.d->edition, cis)) hinzu=0;
870 if (strcmp(b.d->editor,""))
871 if (!b.c[key[n]]->editor) hinzu=1;
872 else if (mystrstr(b.c[key[n]]->editor,b.d->editor, cis)) hinzu=0;
873 if (strcmp(b.d->howpublished,""))
874 if (!b.c[key[n]]->howpublished) hinzu=1;
875 else if (mystrstr(b.c[key[n]]->howpublished,b.d->howpublished, cis)) hinzu=0;
876 if (strcmp(b.d->institution,""))
877 if (!b.c[key[n]]->institution) hinzu=1;
878 else if (mystrstr(b.c[key[n]]->institution,b.d->institution, cis)) hinzu=0;
879 if (strcmp(b.d->journal,""))
880 if (!b.c[key[n]]->journal) hinzu=1;
881 else if (mystrstr(b.c[key[n]]->journal,b.d->journal, cis)) hinzu=0;
882 if (strcmp(b.d->key,""))
883 if (!b.c[key[n]]->key) hinzu=1;
884 else if (mystrstr(b.c[key[n]]->key,b.d->key, cis)) hinzu=0;
885 if (strcmp(b.d->month,""))
886 if (!b.c[key[n]]->month) hinzu=1;
887 else if (mystrstr(b.c[key[n]]->month,b.d->month, cis)) hinzu=0;
888 if (strcmp(b.d->note,""))
889 if (!b.c[key[n]]->note) hinzu=1;
890 else if (mystrstr(b.c[key[n]]->note,b.d->note, cis)) hinzu=0;
891 if (strcmp(b.d->number,""))
892 if (!b.c[key[n]]->number) hinzu=1;
893 else if (mystrstr(b.c[key[n]]->number,b.d->number, cis)) hinzu=0;
894 if (strcmp(b.d->organization,""))
895 if (!b.c[key[n]]->organization) hinzu=1;
896 else if (mystrstr(b.c[key[n]]->organization,b.d->organization, cis)) hinzu=0;
897 if (strcmp(b.d->pages,""))
898 if (!b.c[key[n]]->pages) hinzu=1;
899 else if (mystrstr(b.c[key[n]]->pages,b.d->pages, cis)) hinzu=0;
900 if (strcmp(b.d->publisher,""))
901 if (!b.c[key[n]]->publisher) hinzu=1;
902 else if (mystrstr(b.c[key[n]]->publisher,b.d->publisher, cis)) hinzu=0;
903 if (strcmp(b.d->reprint,""))
904 if (!b.c[key[n]]->reprint) hinzu=1;
905 else if (!strcmp(b.c[key[n]]->reprint,b.d->reprint)) hinzu=0;
906 if (strcmp(b.d->school,""))
907 if (!b.c[key[n]]->school) hinzu=1;
908 else if (mystrstr(b.c[key[n]]->school,b.d->school, cis)) hinzu=0;
909 if (strcmp(b.d->series,""))
910 if (!b.c[key[n]]->series) hinzu=1;
911 else if (mystrstr(b.c[key[n]]->series,b.d->series, cis)) hinzu=0;
912 if (strcmp(b.d->title,""))
913 if (!b.c[key[n]]->title) hinzu=1;
914 else if (mystrstr(b.c[key[n]]->title,b.d->title, cis)) hinzu=0;
915 if (strcmp(b.d->type,""))
916 if (!b.c[key[n]]->type) hinzu=1;
917 else if (mystrstr(b.c[key[n]]->type,b.d->type, cis)) hinzu=0;
918 if (strcmp(b.d->volume,""))
919 if (!b.c[key[n]]->volume) hinzu=1;
920 else if (mystrstr(b.c[key[n]]->volume,b.d->volume, cis)) hinzu=0;
921 if (strcmp(b.d->year,""))
922 if (!b.c[key[n]]->year) hinzu=1;
923 else if (mystrstr(b.c[key[n]]->year,b.d->year, cis)) hinzu=0;
924 if (hinzu) {
925 gefunden[0]++;
926 gefunden[gefunden[0]]=key[n];
927 }
928 } /* endfor */
929 // ........................................ Liste neu aufbauen;
930 str_list=(XmStringTable) XtMalloc(gefunden[0]*sizeof(XmString));
931 key=(unsigned long *)realloc(key,(gefunden[0]+1)*sizeof(unsigned long));
932 key[0]=gefunden[0];
933 for(n=1; n<=gefunden[0]; n++) {
934 key[n]=gefunden[n];
935 sprintf(ref,"%u %.15s %.30s %.15s %.4s",
936 b.c[gefunden[n]]->id,
937 b.c[gefunden[n]]->author,
938 b.c[gefunden[n]]->title,
939 b.c[gefunden[n]]->journal,
940 b.c[gefunden[n]]->year);
941 str_list[n-1]=XmStringCreateLocalized(ref);
942 }
943 XmListDeleteAllItems(liste);
944 XtVaSetValues(liste,
945 XmNitems, str_list,
946 XmNitemCount, gefunden[0],
947 NULL);
948 set_message(gefunden[0]);
949 XtFree((char *)str_list);
950
951 } /* endif */
952
953 break;
954 case 4: // ................................. view all;
955 str_list=(XmStringTable) XtMalloc(b.last*sizeof(XmString));
956 key=(unsigned long *)realloc(key,(b.last+1)*sizeof(unsigned long));
957 key[0]=b.last;
958 for(n=0; n<b.last; n++) {
959 key[n+1]=n;
960 sprintf(ref,"%u %.15s %.30s %.15s %.4s",
961 b.c[n]->id,
962 b.c[n]->author,
963 b.c[n]->title,
964 b.c[n]->journal,
965 b.c[n]->year);
966 str_list[n]=XmStringCreateLocalized(ref);
967 }
968 XmListDeleteAllItems(liste);
969 XtVaSetValues(liste,
970 XmNitems, str_list,
971 XmNitemCount, b.last,
972 NULL);
973 set_message(b.last);
974 XtFree((char *)str_list);
975 break;
976 case 5: // ................................ case insensitive ?;
977 if (cis) cis=0; else cis=1;
978 break;
979 }
980 delete[]gefunden; delete[]ref;
981 }
982
983
satext_cb(Widget widget,XtPointer client_data,XtPointer call_data)984 void satext_cb(Widget widget, XtPointer client_data, XtPointer call_data) {
985 char *text;
986
987 if (text = XmTextGetString(widget)) {
988 b.d->keyword=(char *)realloc(b.d->keyword, strlen(text)+1);
989 strcpy(b.d->keyword, text);
990 XtFree(text);
991 }
992
993 }
994
satoggle_cb(Widget widget,XtPointer client_data,XtPointer call_data)995 void satoggle_cb(Widget widget, XtPointer client_data, XtPointer call_data) {
996 if (XmToggleButtonGadgetGetState(widget))
997 b.d->id=(unsigned long) client_data;
998 }
999