1: /* 2: * Generated by the ICS builderXcessory (BX). 3: * 4: * 5: * Builder Xcessory 3.0. 6: * 7: */ 8: #include <Xm/Xm.h> 9: 10: /* 11: * Standard includes for builtins. 12: */ 13: #include <stdio.h> 14: #include <string.h> 15: #include <ctype.h> 16: #include "hsplicer-creation-c.h" 17: #include "splicer_defs.h" 18: #include <Xm/Form.h> 19: #include <Xm/Text.h> 20: #include <Xm/PushB.h> 21: #include <Xm/Separator.h> 22: 23: 24: /* 25: * Macros to make code look nicer between ANSI and K&R. 26: */ 27: #ifndef ARGLIST 28: #if (NeedFunctionPrototypes == 0) 29: #define PROTOTYPE(p) () 30: #define ARGLIST(p) p 31: #define ARG(a, b) a b; 32: #define GRA(a, b) a b; 33: #define UARG(a, b) a b; 34: #define GRAU(a, b) a b; 35: #else 36: #define PROTOTYPE(p) p 37: #define ARGLIST(p) ( 38: #define ARG(a, b) a b, 39: #define GRA(a, b) a b) 40: #ifdef __cplusplus 41: #define UARG(a, b) a, 42: #define GRAU(a, b) a) 43: #else 44: #define UARG(a, b) a b, 45: #define GRAU(a, b) a b) 46: #endif 47: #endif 48: #endif 49: 50: Widget BxFindTopShell PROTOTYPE((Widget)); 51: WidgetList BxWidgetIdsFromNames PROTOTYPE((Widget, char*, char*)); 52: 53: #define MAXBUFFER (100) 54: char filename[200]; 55: char *printstring,*getenv(); 56: void SpManageWarningBox(),free(),*calloc(),*realloc(); 57: 58: 59: 60: /* Function Name: BxExitCB 61: * 62: * Description: This functions expects an integer to be passed in 63: * client data. It calls the exit() system call with 64: * the integer value as the argument to the function. 65: * 66: * Arguments: Widget w: the activating widget. 67: * XtPointer client: the integer exit value. 68: * XtPointer call: the call data (unused). 69: */ 70: 71: /* ARGSUSED */ 72: void 73: BxExitCB ARGLIST((w, client, call)) 74: UARG( Widget, w) 75: ARG( XtPointer, client) 76: GRAU( XtPointer, call) 77: { 78: int exitValue = (int)client; 79: void exit(); 80: 81: if(printstring) free(printstring); 82: exit(exitValue); 83: } 84: 85: /* ARGSUSED */ 86: void 87: HssaveCB(w, client, call) 88: Widget w; 89: XtPointer client; 90: XtPointer call; 91: { 92: FILE *fptr_out; 93: char outfile[200],buffer[500]; 94: 95: /*SUPPRESS 594*/ 96: XmFileSelectionBoxCallbackStruct *filebox=(XmFileSelectionBoxCallbackStruct*)call; 97: (void)strcpy(outfile,XmCvtXmStringToCT(filebox->value)); 98: if((fptr_out=fopen(outfile,"w"))==NULL) 99: { 100: (void)sprintf("Error opening help output file %s.",outfile); 101: SpManageWarningBox(buffer); 102: } 103: else 104: { 105: (void)fputs((char*)XmTextGetString(textHelp),fptr_out); 106: fclose(fptr_out); 107: } 108: } 109: 110: /* ARGSUSED */ 111: void 112: HsprintCB(w, client, call) 113: Widget w; 114: XtPointer client; 115: XtPointer call; 116: { 117: void XmTextFieldSetString(); 118: 119: if(!printstring) 120: { 121: printstring=(char*)calloc(500,sizeof(char)); 122: (void)sprintf(printstring,"lpr -rP%s",getenv("PRINTER")); 123: } 124: XmTextFieldSetString(textFieldPrint,printstring); 125: XtManageChild(formPrint); 126: } 127: /* Function Name: BxUnmanageCB 128: * 129: * Description: Given a string of the form: 130: * "(WL)[widgetName, widgetName, ...]" 131: * BxUnmanageCB attempts to convert the name to a Widget 132: * ID and unmanage the widget. 133: * 134: * Arguments: Widget w: the widget activating the callback. 135: * XtPointer client: the list of widget names to attempt 136: * to find and unmanage. 137: * XtPointer call: the call data (unused). 138: * 139: * Notes: * This function expects that there is an application 140: * shell from which all other widgets are descended. 141: */ 142: 143: /* ARGSUSED */ 144: void 145: BxUnmanageCB ARGLIST((w, client, call)) 146: ARG( Widget, w) 147: ARG( XtPointer, client) 148: GRAU( XtPointer, call) 149: { 150: WidgetList widgets; 151: int i; 152: 153: /* 154: * This function returns a NULL terminated WidgetList. The memory for 155: * the list needs to be freed when it is no longer needed. 156: */ 157: widgets = BxWidgetIdsFromNames(w, "BxUnmanageCB", (String)client); 158: 159: i = 0; 160: while( widgets && widgets[i] != NULL ) 161: { 162: XtUnmanageChild(widgets[i]); 163: i++; 164: } 165: XtFree((char *)widgets); 166: } 167: /* Function Name: BxManageCB 168: * 169: * Description: Given a string of the form: 170: * "(WL)[widgetName, widgetName, ...]" 171: * BxManageCB attempts to convert the name to a Widget 172: * ID and manage the widget. 173: * 174: * Arguments: Widget w: the widget activating the callback. 175: * XtPointer client: the list of widget names to attempt 176: * to find and manage. 177: * XtPointer call: the call data (unused). 178: * 179: * Notes: * This function expects that there is an application 180: * shell from which all other widgets are descended. 181: */ 182: 183: /* ARGSUSED */ 184: void 185: BxManageCB ARGLIST((w, client, call)) 186: ARG( Widget, w) 187: ARG( XtPointer, client) 188: GRAU( XtPointer, call) 189: { 190: WidgetList widgets; 191: int i; 192: 193: /* 194: * This function returns a NULL terminated WidgetList. The memory for 195: * the list needs to be freed when it is no longer needed. 196: */ 197: widgets = BxWidgetIdsFromNames(w, "BxManageCB", (String)client); 198: 199: i = 0; 200: while( widgets && widgets[i] != NULL ) 201: { 202: XtManageChild(widgets[i]); 203: i++; 204: } 205: XtFree((char *)widgets); 206: } 207: 208: /* Function Name: DestroyWidget 209: * 210: * Description: When called, destroys the widget passed to it 211: * as client data. This is used by the BXHelpCB function. 212: * 213: * Arguments: Widget w: the activating widget. 214: * XtPointer client: the widget to destroy 215: * XtPointer call: the call data (unused). 216: */ 217: 218: /* ARGSUSED */ 219: static void 220: DestroyWidget ARGLIST((w, client, call)) 221: UARG( Widget, w) 222: ARG( XtPointer, client) 223: GRAU( XtPointer, call) 224: { 225: XtDestroyWidget((Widget)client); 226: } 227: 228: /* Function Name: BxHelpCB 229: * 230: * Description: This functions expects a string to be passed as 231: * client data. It creates and manages a dialog with a Text 232: * widget to display the string and a Dismiss button. The dialog 233: * is destroyed when it is dismissed. 234: * 235: * Arguments: Widget w: the activating widget. 236: * XtPointer client: the string to display 237: * XtPointer call: the call data (unused). 238: */ 239: 240: /* ARGSUSED */ 241: void 242: BxHelpCB ARGLIST((w, client, call)) 243: ARG( Widget, w) 244: ARG( XtPointer, client) 245: GRAU( XtPointer, call) 246: { 247: String text = (String) client; 248: Widget formDialog = XmCreateFormDialog(w, "formDialog", NULL, 0); 249: Widget textWidget = XmCreateText(formDialog, "textWidget", NULL, 0); 250: Widget separator = XmCreateSeparator(formDialog, "separator", NULL, 0); 251: Widget dismiss = XmCreatePushButton(formDialog, "dismiss", NULL, 0); 252: String dismiss_label = "Dismiss"; 253: 254: XtVaSetValues(XtParent(formDialog), XmNtitle, "HelpText", NULL); 255: 256: XtVaSetValues(textWidget, 257: XmNvalue, text, 258: XmNeditable, False, 259: XmNtopAttachment, XmATTACH_FORM, 260: XmNbottomAttachment, XmATTACH_WIDGET, 261: XmNbottomWidget, separator, 262: XmNleftAttachment, XmATTACH_FORM, 263: XmNrightAttachment, XmATTACH_FORM, 264: XmNwordWrap, True, 265: XmNeditMode, XmMULTI_LINE_EDIT, 266: XmNwidth, 250, 267: XmNheight, 100, 268: NULL); 269: 270: XtVaSetValues(separator, 271: XmNbottomAttachment, XmATTACH_WIDGET, 272: XmNbottomWidget, dismiss, 273: XmNbottomOffset, 10, 274: XmNleftAttachment, XmATTACH_FORM, 275: XmNrightAttachment, XmATTACH_FORM, 276: NULL); 277: 278: XtVaSetValues(dismiss, 279: XtVaTypedArg, XmNlabelString, XmRString, 280: dismiss_label, strlen(dismiss_label)+1, 281: XmNbottomAttachment, XmATTACH_FORM, 282: XmNbottomOffset, 10, 283: XmNleftAttachment, XmATTACH_POSITION, 284: XmNleftPosition, 25, 285: XmNrightAttachment, XmATTACH_POSITION, 286: XmNrightPosition, 75, 287: NULL); 288: 289: XtAddCallback(dismiss, XmNactivateCallback, DestroyWidget, 290: (XtPointer)XtParent(formDialog)); 291: 292: XtManageChild(textWidget); 293: XtManageChild(separator); 294: XtManageChild(dismiss); 295: XtManageChild(formDialog); 296: } 297: 298: /* ARGSUSED */ 299: void 300: HsHelpTopicCB(w, client, call) 301: Widget w; 302: XtPointer client; 303: XtPointer call; 304: { 305: FILE *fptr; 306: char buffer[MAXBUFFER],*helptext; 307: int len_allocated; 308: 309: /*SUPPRESS 594*/ 310: String name = (String) client; 311: (void)sprintf(filename,"%s/%s",getenv("SPLICER_HELPFILES_PATH"),name); 312: 313: if((fptr=fopen(filename,"r"))==NULL) 314: { 315: (void)sprintf(buffer,"Error opening help topic file %s",filename); 316: SpManageWarningBox(buffer); 317: } 318: else 319: { 320: helptext=(char*)calloc(len_allocated=ALLOC_INT,sizeof(char)); 321: helptext[0]='\0'; 322: while(fgets(buffer,MAXBUFFER,fptr)!=NULL) 323: { 324: if((int)strlen(buffer)+(int)strlen(helptext)>=len_allocated) 325: { 326: helptext=(char*)realloc(helptext,(len_allocated+ALLOC_INT)*sizeof(char)); 327: len_allocated+=ALLOC_INT; 328: } 329: (void)strcat(helptext,buffer); 330: } 331: fclose(fptr); 332: XtVaSetValues(textHelp,XmNvalue,helptext,NULL); 333: free(helptext); 334: } 335: } 336: 337: void SpManageWarningBox(message) 338: char *message; 339: { 340: XtVaSetValues(messageBoxError,XmNmessageString,XmStringCreateLocalized(message),NULL); 341: XtManageChild(messageBoxError); 342: } 343: 344: 345: 346: /* ARGSUSED */ 347: void 348: HsPrintOKCB(w, client, call) 349: Widget w; 350: XtPointer client; 351: XtPointer call; 352: { 353: FILE *fptr; 354: char buffer[500],tmpfile[500]; 355: int system(); 356: 357: /*SUPPRESS 594*/ 358: 359: /* make temporary file of help text */ 360: if((fptr=fopen(tmpnam(tmpfile),"w"))==NULL) 361: { 362: (void)sprintf("Error opening temporary file for printing %s.",tmpfile); 363: SpManageWarningBox(buffer); 364: } 365: else 366: { 367: (void)fputs((char*)XmTextGetString(textHelp),fptr); 368: fclose(fptr); 369: } 370: 371: /* get printer name from environment and send command */ 372: printstring=XmTextGetString(textFieldPrint); 373: (void)strcpy(buffer,printstring); 374: (void)strcat(buffer," "); 375: (void)strcat(buffer,tmpfile); 376: system(buffer); 377: } 378: 379: /* ARGSUSED */ 380: void 381: HsTextHelpCer(w, client, call) 382: Widget w; 383: XtPointer client; 384: XtPointer call; 385: { 386: /*SUPPRESS 594*/ 387: } 388: 389: /* ARGSUSED */ 390: void 391: HsTextHelpCreateCB(w, client, call) 392: Widget w; 393: XtPointer client; 394: XtPointer call; 395: { 396: /*SUPPRESS 594*/ 397: char buffer[MAXBUFFER],*helptext; 398: int len_allocated; 399: 400: /*SUPPRESS 594*/ 401: helptext=(char*)calloc(len_allocated=ALLOC_INT,sizeof(char)); 402: helptext[0]='\0'; 403: while(fgets(buffer,MAXBUFFER,stdin)!=NULL) 404: { 405: if((int)strlen(buffer)+(int)strlen(helptext)>=len_allocated) 406: { 407: helptext=(char*)realloc(helptext,(len_allocated+ALLOC_INT)*sizeof(char)); 408: len_allocated+=ALLOC_INT; 409: } 410: (void)strcat(helptext,buffer); 411: } 412: XtVaSetValues(textHelp,XmNvalue,helptext,NULL); 413: free(helptext); 414: } 415: