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()
{