Example D-2 is an example of a typical algorithm of this callback.
Tt_message myFileCB( Tt_message msg, Tttk_op op, char *pathname, int trust, int isMe ) { tt_free( pathname ); Tt_status status = TT_OK; switch (op) { case TTDT_MODIFIED: if ((_modifiedByMe) && (! isMe)) { // Hmm, the other editor either does not know or // does not care that we are already modifying the // file, so the last saver will win. } else { // Interrogate user if she ever modifies the buffer _modifiedByOther = 1; XtAddCallback( myTextWidget, XmNmodifyVerifyCallback, myTextModifyCB, 0 ); } break; case TTDT_GET_MODIFIED: tt_message_arg_ival_set( msg, 1, _modifiedByMe ); tt_message_reply( msg ); break; case TTDT_SAVE: status = mySave( trust ); if (status == TT_OK) { tt_message_reply( msg ); } else { tttk_message_fail( msg, status, 0, 0 ); } break; case TTDT_REVERT: status = myRevert( trust ); if (status == TT_OK) { tt_message_reply( msg ); } else { tttk_message_fail( msg, status, 0, 0 ); } break; case TTDT_REVERTED: if (! isMe) { _modifiedByOther = 0; } break; case TTDT_SAVED: if (! isMe) { _modifiedByOther = 0; int choice = myUserChoice( myContext, myBaseFrame, "Another tool has saved " "this file.", 2, "Ignore", "Revert" ); switch (choice) { case 1: myRevert( 1 ); break; } } break; case TTDT_MOVED: case TTDT_DELETED: // Do something appropriate break; } tttk_message_destroy( msg ); return 0; }