The changes made to the Xedit files are described in Modifying the Xedit Application.
/* * rcs_id[] = “$XConsortium: xedit.h,v 1.18 89/07/21 19:52:58 kit Exp $”; */ ... #include <X11/Xaw/Viewport.h> #include <X11/Xaw/Cardinals.h> /* * For the ToolTalk demonstration, add the following include line. */ #include <desktop/tt_c.h> /* ToolTalk header */ extern struct _app_resources { Boolean enableBackups; char *backupNamePrefix; char *backupNameSuffix; ... /* externals in xedit.c */ extern void Feep(); /* * For the ToolTalk demonstration, add the following externals. */ extern void processToolTalkMessage(); /* Process ToolTalk message */ extern void dieFromToolTalkError(); /* Fail if error occurs */ extern Display *CurDpy; /* Display */ ... /* externs in commands.c */ ... extern void DoChangeFont(); /* Change font */
#if (!defined(lint) && !defined(SABER)) \ static char Xrcsid[] = “$XConsortium: \ xedit.c,v 1.23 89/12/07 \ 19:19:17 kit Exp $”; #endif /* lint && SABER */ ... void main(argc, argv) int argc; char **argv; { Widget top; String filename = NULL; static void makeButtonsAndBoxes(); /* * For the ToolTalk demonstration, add the following lines: */ int ttmark; /* ToolTalk mark */ int ttfd; /* ToolTalk file descriptor */ char *procid; /* Process identifier */ Tt_status ttrc; /* ToolTalk status */ top = XtInitialize( “xedit”, \ “Xedit”, NULL, 0, &argc, argv); ... XtRealizeWidget(top); XDefineCursor(XtDisplay(top),XtWindow(top), \ XCreateFontCursor( XtDisplay(top), \ XC_left_ptr)); /* * For the ToolTalk demonstration, * add the following lines * to make the top of stack the ToolTalk * session and set * it to be the default session. */ ttmark = tt_mark(); ttrc = tt_default_session_set( /* set the default session .. */ tt_X_session( /* .. to the X session for .. */ DisplayString( /* .. the X server displaying ..*/ XtDisplay(top)))); /* .. our top window... */ /* * Fail if no default session */ dieFromToolTalkError( \ “tt_default_session_set”,ttrc); procid = tt_open(); /* Initialize ToolTalk */ /* * Fail if no process identifier */ dieFromToolTalkError(“tt_open” \ ,tt_ptr_error(procid)); ttfd = tt_fd(); /* ToolTalk file descriptor */ /* * Fail if no file descriptor */ dieFromToolTalkError(“tt_fd”, \ tt_int_error(ttfd)); /* * Activate file descriptor */ XtAddInput(ttfd, (XtPointer)XtInputReadMask, \ processToolTalkMessage, 0); XtMainLoop(); } ... MakeCommandButton(b_row, “load”, DoLoad); /* * For the ToolTalk demonstration, add the * next line to make * a button for the font change command: */ MakeCommandButton(b_row, “changefont”, \ DoChangeFont); filenamewindow = MakeStringBox(b_row, \ “filename”, filename); } XtCreateManagedWidget(“bc_label”, labelWidgetClass, outer, NULL, ZERO); ... void Feep() { XBell(CurDpy, 0); /* * For the ToolTalk demonstration, add the * following lines to receive and * process an incoming message: */ } void processToolTalkMessage() /* Process ToolTalk message */ { int ttmark; /* ToolTalk mark */ Tt_message incoming; /* Incoming message */ ttmark = tt_mark(); /* ToolTalk mark */ incoming = tt_message_receive(); /* Receive incoming message */ /* * The callback should process the * message, so we should never * get a message returned. */ if (incoming == 0) return; /* Return incoming message */ if (tt_is_err(tt_ptr_error(incoming))) { dieFromToolTalkError(“tt_message_receive”, tt_ptr_error(incoming)); } /* * This is not a message we recognize. * If it is a request, or a notice that * caused us to start, fail it. */ if (tt_message_class(incoming) == TT_REQUEST || tt_message_status(incoming) == TT_WRN_START_MESSAGE) { tt_message_fail(incoming); } tt_message_destroy(incoming); /* Destroy message */ tt_release(ttmark); /* Free space */ } void dieFromToolTalkError(procname, errid) char *procname; Tt_status errid; /* Fail if error occurs */ { /* * Don't die on warnings or TT_OK. */ if (tt_is_err(errid)) { fprintf(stderr,”%s returned ToolTalk error: %s\n”, procname, tt_status_message(errid)); exit(1); } }
#if (!defined(lint) && !defined(SABER)) static char Xrcsid[] = “$XConsortium: commands.c,v 1.27 89/12/10 17:08:26 rws Exp $”; #endif /* lint && SABER */ ... #ifdef USG int rename (from, to) char *from, *to; { (void) unlink (to); if (link (from, to) == 0) { unlink (from); return 0; } else { return -1; } } #endif /* * For the ToolTalk demonstration, add the * following lines to have Xfontsel * send a callback that the operation has either * completed or failed: */ static Tt_callback_action FinishChangeFont(m,p)/* ToolTalk message callback */ Tt_message m; /* ToolTalk message */ Tt_pattern p; /* ToolTalk pattern */ { static XFontStruct *fs; /* Font structure */ int ttmark; /* ToolTalk mark */ ttmark = tt_mark(); /* ToolTalk mark */ /* * If operation fails, notify user */ if (TT_FAILED==tt_message_state(m)) { XeditPrintf(“Font change failed\n”); tt_message_destroy(m); /* Destroy message */ } else if (TT_HANDLED==tt_message_state(m)) { XFontStruct *newfs; /* Try to load the new font */ newfs = XLoadQueryFont(CurDpy,tt_message_arg_val(m,0)); /* If the new font is OK, and there is an * old font, * unload the old font. Then use the new font */ if (newfs) { if (fs) { XUnloadFont(CurDpy, fs->fid); } XtVaSetValues(textwindow, XtNfont, newfs, 0); fs = newfs; } tt_message_destroy(m); /* Destroy message */ } tt_release(ttmark); /* Release mark */ /* * Process callback to notify sender * operation completed */ return TT_CALLBACK_PROCESSED; } void DoChangeFont() /* Change font */ { Tt_message m; /* ToolTalk message */ Tt_status ttrc; /* ToolTalk status */ /* * Create request */ m = tt_prequest_create(TT_SESSION, “GetFontName”); /* * Add arguments to message */ tt_message_arg_add(m,TT_OUT,”string”, (char *)NULL); /* * Add callback to notify when change * complete */ tt_message_callback_add(m,FinishChangeFont); /* * Send message */ ttrc = tt_message_send(m); /* * Fail if error occurs */ dieFromToolTalkError(“tt_message_send”,ttrc); } void DoSave() {