|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
#ifdef REV_INFO
|
|
Packit |
b099d7 |
#ifndef lint
|
|
Packit |
b099d7 |
static char rcsid[] = "$XConsortium: editor.c /main/8 1995/07/14 12:04:07 drk $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
/**---------------------------------------------------------------------
|
|
Packit |
b099d7 |
***
|
|
Packit |
b099d7 |
*** file: editor.c
|
|
Packit |
b099d7 |
*** description: This program demonstrates the Motif text,
|
|
Packit |
b099d7 |
*** main_parent window, and dialog widgets, as well as the cut and paste
|
|
Packit |
b099d7 |
*** functions.
|
|
Packit |
b099d7 |
***
|
|
Packit |
b099d7 |
*** defaults: editor.c depends on these defaults:
|
|
Packit |
b099d7 |
***
|
|
Packit |
b099d7 |
#
|
|
Packit |
b099d7 |
*allowShellResize: true
|
|
Packit |
b099d7 |
*borderWidth: 0
|
|
Packit |
b099d7 |
*highlightThickness: 2
|
|
Packit |
b099d7 |
*traversalOn: true
|
|
Packit |
b099d7 |
***-------------------------------------------------------------------*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** Include Files
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <fcntl.h>
|
|
Packit |
b099d7 |
#include <errno.h>
|
|
Packit |
b099d7 |
#include <sys/types.h>
|
|
Packit |
b099d7 |
#include <sys/stat.h>
|
|
Packit |
b099d7 |
#include <X11/Xatom.h>
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <testlib.h>
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** Global Variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define MENU_HELP 200
|
|
Packit |
b099d7 |
#define MENU_EXIT 201
|
|
Packit |
b099d7 |
#define MENU_OPEN 202
|
|
Packit |
b099d7 |
#define MENU_NEW 203
|
|
Packit |
b099d7 |
#define MENU_CLOSE 204
|
|
Packit |
b099d7 |
#define MENU_SAVE 205
|
|
Packit |
b099d7 |
#define MENU_SAVE_AS 206
|
|
Packit |
b099d7 |
#define MENU_PRINT 207
|
|
Packit |
b099d7 |
#define MENU_CUT 208
|
|
Packit |
b099d7 |
#define MENU_COPY 209
|
|
Packit |
b099d7 |
#define MENU_PASTE 210
|
|
Packit |
b099d7 |
#define MENU_CLEAR 211
|
|
Packit |
b099d7 |
#define MENU_FILE 212
|
|
Packit |
b099d7 |
#define MENU_EDIT 213
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define DIALOG_FSELECT 300
|
|
Packit |
b099d7 |
#define DIALOG_CWARNING 301
|
|
Packit |
b099d7 |
#define DIALOG_XWARNING 302
|
|
Packit |
b099d7 |
#define DIALOG_NEW 303
|
|
Packit |
b099d7 |
#define DIALOG_SAVE 304
|
|
Packit |
b099d7 |
#define DIALOG_HELP 305
|
|
Packit |
b099d7 |
#define DIALOG_PRINT 306
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define DEFAULT_WIDTH 500
|
|
Packit |
b099d7 |
#define DEFAULT_HEIGHT 400
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define MAX_NAME_LEN 50
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void CreateText ();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* defines a temporary file for file transfers */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget text; /* multi-line text widget */
|
|
Packit |
b099d7 |
Widget cut_button; /* clipboard cut button */
|
|
Packit |
b099d7 |
Widget copy_button; /* clipboard copy button */
|
|
Packit |
b099d7 |
Widget paste_button; /* clipboard paste button */
|
|
Packit |
b099d7 |
Widget clear_button; /* clipboard clear button */
|
|
Packit |
b099d7 |
Widget open_dialog; /* file selection dialog */
|
|
Packit |
b099d7 |
Widget new_dialog; /* file name prompt dialog */
|
|
Packit |
b099d7 |
Widget close_warning; /* special internal selection dialog */
|
|
Packit |
b099d7 |
Widget exit_warning; /* special internal selection dialog */
|
|
Packit |
b099d7 |
Widget general_warning; /* warning dialog */
|
|
Packit |
b099d7 |
Widget save_dialog; /* save as prompt dialog */
|
|
Packit |
b099d7 |
Widget print_warning; /* warning dialog */
|
|
Packit |
b099d7 |
Boolean file_saved = True; /* indicates that the present file is saved */
|
|
Packit |
b099d7 |
char *filename = NULL; /* string containing file name */
|
|
Packit |
b099d7 |
int start_pos, end_pos; /* start and end position of last action */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmStringCharSet charset = (XmStringCharSet) XmSTRING_DEFAULT_CHARSET;
|
|
Packit |
b099d7 |
/* used to set up XmStrings */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
char Error[128];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget main_parent;/* MainWindow */
|
|
Packit |
b099d7 |
Widget menu_bar; /* RowColumn */
|
|
Packit |
b099d7 |
Bool text_first; /* "Open"/"New" selected for the first time */
|
|
Packit |
b099d7 |
Bool text_startup;
|
|
Packit |
b099d7 |
Bool edit_startup;
|
|
Packit |
b099d7 |
Bool file_startup;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* bits for exclamation point in dialog */
|
|
Packit |
b099d7 |
char warningBits[] = {
|
|
Packit |
b099d7 |
0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
|
|
Packit |
b099d7 |
0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
|
|
Packit |
b099d7 |
0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
|
|
Packit |
b099d7 |
0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
|
|
Packit |
b099d7 |
0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
|
|
Packit |
b099d7 |
0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
|
|
Packit |
b099d7 |
0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
Packit |
b099d7 |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00,
|
|
Packit |
b099d7 |
0x00, 0xe0, 0x07, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf0, 0x0f, 0x00,
|
|
Packit |
b099d7 |
0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xe0, 0x07, 0x00,
|
|
Packit |
b099d7 |
0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* CreateDefaultImage - create a default images for warning symbol.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
**********************************<->***********************************/
|
|
Packit |
b099d7 |
static XImage * CreateDefaultImage (bits, width, height)
|
|
Packit |
b099d7 |
char *bits;
|
|
Packit |
b099d7 |
int width, height;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XImage *image;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
image = (XImage *) XtMalloc (sizeof (XImage));
|
|
Packit |
b099d7 |
image->width = width;
|
|
Packit |
b099d7 |
image->height = height;
|
|
Packit |
b099d7 |
image->data = bits;
|
|
Packit |
b099d7 |
image->depth = 1;
|
|
Packit |
b099d7 |
image->xoffset = 0;
|
|
Packit |
b099d7 |
image->format = XYBitmap;
|
|
Packit |
b099d7 |
image->byte_order = LSBFirst;
|
|
Packit |
b099d7 |
image->bitmap_unit = 8;
|
|
Packit |
b099d7 |
image->bitmap_bit_order = LSBFirst;
|
|
Packit |
b099d7 |
image->bitmap_pad = 8;
|
|
Packit |
b099d7 |
image->bytes_per_line = (width+7)/8;
|
|
Packit |
b099d7 |
return (image);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** OpenFile
|
|
Packit |
b099d7 |
** Open the present file. Returns true if file
|
|
Packit |
b099d7 |
** exists and open is sucessful.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Boolean OpenFile()
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
struct stat statbuf; /* Information on a file. */
|
|
Packit |
b099d7 |
int file_length; /* Length of file. */
|
|
Packit |
b099d7 |
char * file_string; /* Contents of file. */
|
|
Packit |
b099d7 |
FILE *fp = NULL; /* Pointer to open file */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((fp = fopen(filename, "r+")) == NULL)
|
|
Packit |
b099d7 |
if ((fp = fopen(filename, "r")) != NULL) {
|
|
Packit |
b099d7 |
fprintf(stderr, "Warning: file opened read only.\n");
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
return(False);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (stat(filename, &statbuf) == 0)
|
|
Packit |
b099d7 |
file_length = statbuf.st_size;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
file_length = 1000000; /* arbitrary file length */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* read the file string */
|
|
Packit |
b099d7 |
file_string = XtMalloc((unsigned)file_length);
|
|
Packit |
b099d7 |
fread(file_string, sizeof(char), file_length, fp);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* close up the file */
|
|
Packit |
b099d7 |
if (fclose(fp) != NULL) fprintf(stderr, "Warning: unable to close file.\n");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* added the file string to the text widget */
|
|
Packit |
b099d7 |
XmTextSetString(text, file_string);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
file_saved = True; /* intialize to True */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* make appropriate item sensitive */
|
|
Packit |
b099d7 |
XtSetSensitive(text, True);
|
|
Packit |
b099d7 |
XtSetSensitive(cut_button, True);
|
|
Packit |
b099d7 |
XtSetSensitive(copy_button, True);
|
|
Packit |
b099d7 |
XtSetSensitive(clear_button, True);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** SaveFile
|
|
Packit |
b099d7 |
** Save the present file.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Boolean SaveFile()
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char * file_string = NULL; /* Contents of file. */
|
|
Packit |
b099d7 |
FILE *tfp; /* Pointer to open temporary file. */
|
|
Packit |
b099d7 |
char namebuf[BUFSIZ]; /* for "system" call below */
|
|
Packit |
b099d7 |
int status;
|
|
Packit |
b099d7 |
char *tempname = (char *)XtMalloc(25); /* Temporary file name. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
strcpy(tempname, "/tmp/xmeditXXXXXX");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((tfp = fopen(mktemp(tempname), "w")) == NULL) {
|
|
Packit |
b099d7 |
fprintf(stderr, "Warning: unable to open temp file, text not saved.\n");
|
|
Packit |
b099d7 |
return(False);;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* get the text string */
|
|
Packit |
b099d7 |
file_string = XmTextGetString(text);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* write to a temp file */
|
|
Packit |
b099d7 |
fwrite(file_string, sizeof(char), strlen(file_string) + 1, tfp);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* flush and close the temp file */
|
|
Packit |
b099d7 |
if (fflush(tfp) != NULL) fprintf(stderr,"Warning: unable to flush file.\n");
|
|
Packit |
b099d7 |
if (fclose(tfp) != NULL) fprintf(stderr,"Warning: unable to close file.\n");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (file_string != NULL) {
|
|
Packit |
b099d7 |
XtFree(file_string); /* free the text string */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* move the tempname to the saved file, but do it independent
|
|
Packit |
b099d7 |
of filesystem boundaries */
|
|
Packit |
b099d7 |
sprintf (namebuf, "cp %s %s\0", tempname, filename);
|
|
Packit |
b099d7 |
status = system(namebuf);
|
|
Packit |
b099d7 |
unlink (tempname);
|
|
Packit |
b099d7 |
if (status == 0) {
|
|
Packit |
b099d7 |
file_saved = True;
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
fprintf(stderr, "Warning: unable to save file.\n");
|
|
Packit |
b099d7 |
XtFree(tempname);
|
|
Packit |
b099d7 |
return(False);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree(tempname);
|
|
Packit |
b099d7 |
return(True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** CloseFile
|
|
Packit |
b099d7 |
** Close the present file.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
void CloseFile()
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* zero out the text string in the text widget.
|
|
Packit |
b099d7 |
caution: is causes a value changed callack. */
|
|
Packit |
b099d7 |
/* Do this only if text widget is created. */
|
|
Packit |
b099d7 |
if (text_first != True)
|
|
Packit |
b099d7 |
XmTextSetString(text, "");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
file_saved = True; /* reinitialize file_saved flag */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* free the file name */
|
|
Packit |
b099d7 |
if (filename != NULL) {
|
|
Packit |
b099d7 |
XtFree(filename);
|
|
Packit |
b099d7 |
filename = NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* set text to insensitive */
|
|
Packit |
b099d7 |
/* Do this only if text widget is created. */
|
|
Packit |
b099d7 |
if (text_first != True)
|
|
Packit |
b099d7 |
XtSetSensitive(text, False);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** CopyFileToClipboard
|
|
Packit |
b099d7 |
** Copy the present file to the clipboard.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
void CopyFileToClipboard(time)
|
|
Packit |
b099d7 |
Time time;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char *selected_string = XmTextGetSelection (text); /* text selection */
|
|
Packit |
b099d7 |
long item_id = 0; /* clipboard item id */
|
|
Packit |
b099d7 |
long data_id = 0; /* clipboard data id */
|
|
Packit |
b099d7 |
long status = 0; /* clipboard status */
|
|
Packit |
b099d7 |
XmString clip_label;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* using the clipboard facilities, copy the selected text to the clipboard */
|
|
Packit |
b099d7 |
if (selected_string != NULL) {
|
|
Packit |
b099d7 |
clip_label = XmStringCreateLtoR ("NEW_EDITOR", charset);
|
|
Packit |
b099d7 |
/* start copy to clipboard, and continue till
|
|
Packit |
b099d7 |
a sucessful start copy is made */
|
|
Packit |
b099d7 |
status = 0;
|
|
Packit |
b099d7 |
while (status != ClipboardSuccess)
|
|
Packit |
b099d7 |
status = XmClipboardStartCopy (XtDisplay(text), XtWindow(text),
|
|
Packit |
b099d7 |
clip_label, time,
|
|
Packit |
b099d7 |
text, NULL, &item_id);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* move the data to the clipboard, and
|
|
Packit |
b099d7 |
continue till a sucessful copy is made */
|
|
Packit |
b099d7 |
status = 0;
|
|
Packit |
b099d7 |
while (status != ClipboardSuccess)
|
|
Packit |
b099d7 |
status = XmClipboardCopy (XtDisplay(text), XtWindow(text),
|
|
Packit |
b099d7 |
item_id, "STRING", selected_string,
|
|
Packit |
b099d7 |
(long)strlen(selected_string)+1, 0,
|
|
Packit |
b099d7 |
&data_id);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* end the copy to the clipboard and continue till
|
|
Packit |
b099d7 |
a sucessful end copy is made */
|
|
Packit |
b099d7 |
status = 0;
|
|
Packit |
b099d7 |
while (status != ClipboardSuccess)
|
|
Packit |
b099d7 |
status = XmClipboardEndCopy (XtDisplay(text), XtWindow(text),
|
|
Packit |
b099d7 |
item_id);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* allow pasting when an item is sucessfully copied to the clipboard */
|
|
Packit |
b099d7 |
XtSetSensitive(paste_button, True);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** DeletePrimarySelection
|
|
Packit |
b099d7 |
** Deletes the primary selection.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
void DeletePrimarySelection()
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XClientMessageEvent cm;
|
|
Packit |
b099d7 |
XEvent *event;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* send a client message to the text widget
|
|
Packit |
b099d7 |
to delete the current selection */
|
|
Packit |
b099d7 |
cm.type = ClientMessage;
|
|
Packit |
b099d7 |
cm.display = XtDisplay(text);
|
|
Packit |
b099d7 |
cm.message_type = XmInternAtom(XtDisplay(text), "KILL_SELECTION", FALSE);
|
|
Packit |
b099d7 |
cm.window = XtWindow(text);
|
|
Packit |
b099d7 |
cm.format = 32;
|
|
Packit |
b099d7 |
cm.data.l[0] = XA_PRIMARY;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
event = (XEvent *) &cm;
|
|
Packit |
b099d7 |
XSendEvent(XtDisplay(text), cm.window, TRUE, NoEventMask, event);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** PasteItemFromClipboard
|
|
Packit |
b099d7 |
** paste item from the clipboard to the current cursor location
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
void PasteItemFromClipboard()
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* retrieve the current data from the clipboard
|
|
Packit |
b099d7 |
and paste it at the current cursor position */
|
|
Packit |
b099d7 |
char * selected_string = XmTextGetSelection (text);
|
|
Packit |
b099d7 |
/* containts of selection */
|
|
Packit |
b099d7 |
int status = 0; /* clipboard status */
|
|
Packit |
b099d7 |
char *buffer; /* temporary text buffer */
|
|
Packit |
b099d7 |
unsigned long length; /* length of buffer */
|
|
Packit |
b099d7 |
unsigned long outlength = 0; /* length of bytes copied */
|
|
Packit |
b099d7 |
long private_id = 0; /* id of item on clipboard */
|
|
Packit |
b099d7 |
XmTextPosition cursorPos; /* text cursor position */
|
|
Packit |
b099d7 |
register int n; /* arg count */
|
|
Packit |
b099d7 |
Arg args[10]; /* arg list */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* find the length of the paste item, continue till the length is found */
|
|
Packit |
b099d7 |
while (status != ClipboardSuccess) {
|
|
Packit |
b099d7 |
status = XmClipboardInquireLength(XtDisplay(text), XtWindow(text),
|
|
Packit |
b099d7 |
"STRING", &length);
|
|
Packit |
b099d7 |
if (status == ClipboardNoData) {
|
|
Packit |
b099d7 |
length = 0;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (length == 0) {
|
|
Packit |
b099d7 |
fprintf(stderr, "Warning: paste failed, no items to paste.\n");
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* malloc to necessary space */
|
|
Packit |
b099d7 |
buffer = XtMalloc(length);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
status = XmClipboardRetrieve (XtDisplay(text), XtWindow(text), "STRING",
|
|
Packit |
b099d7 |
buffer, length, &outlength, &private_id);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Dialogs need to be added to indicate errors in pasting */
|
|
Packit |
b099d7 |
if (status != ClipboardSuccess) {
|
|
Packit |
b099d7 |
fprintf(stderr, "Warning: paste failed, status = %d\n", status);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* get cursor position for pasting */
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNcursorPosition, &cursorPos); n++;
|
|
Packit |
b099d7 |
XtGetValues(text, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* add new text */
|
|
Packit |
b099d7 |
XmTextReplace(text, cursorPos, cursorPos, buffer);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** FileChangedCB
|
|
Packit |
b099d7 |
** Process callback from Text.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
void FileChangedCB (w, client_data, call_data)
|
|
Packit |
b099d7 |
Widget w; /* widget id */
|
|
Packit |
b099d7 |
XtPointer client_data; /* data from application */
|
|
Packit |
b099d7 |
XtPointer call_data; /* data from widget class */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* set the file_saved flag to indicate that the
|
|
Packit |
b099d7 |
file has been modified and the user should be
|
|
Packit |
b099d7 |
notified before exiting. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
file_saved = False;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** MenuCB
|
|
Packit |
b099d7 |
** Process callback from PushButtons in PulldownMenus.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
void MenuCB (w, client_data, call_data)
|
|
Packit |
b099d7 |
Widget w; /* widget id */
|
|
Packit |
b099d7 |
XtPointer client_data; /* data from application */
|
|
Packit |
b099d7 |
XtPointer call_data; /* data from widget class */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int n; /* arg count */
|
|
Packit |
b099d7 |
Arg args[10]; /* arg list */
|
|
Packit |
b099d7 |
char *command; /* command used in printing */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch ((int)client_data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case MENU_OPEN:
|
|
Packit |
b099d7 |
case MENU_NEW:
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Create Text if not already created.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (text_first == True) {
|
|
Packit |
b099d7 |
CreateText (main_parent);
|
|
Packit |
b099d7 |
XtManageChild (text);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmAddTabGroup(text);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetSensitive(text, False);
|
|
Packit |
b099d7 |
text_first = False;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/* if "Open", display the file selection dialog */
|
|
Packit |
b099d7 |
if ((int)client_data == MENU_OPEN)
|
|
Packit |
b099d7 |
XtManageChild (open_dialog);
|
|
Packit |
b099d7 |
/* else, display the prompt dialog */
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XtManageChild (new_dialog);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MENU_CLOSE:
|
|
Packit |
b099d7 |
/* the present file has not been saved since
|
|
Packit |
b099d7 |
the last modification */
|
|
Packit |
b099d7 |
if (!file_saved) /* display the 'save' message dialog */
|
|
Packit |
b099d7 |
XtManageChild (close_warning);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
CloseFile();
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MENU_SAVE:
|
|
Packit |
b099d7 |
/* open a temp file for writing */
|
|
Packit |
b099d7 |
SaveFile();
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MENU_SAVE_AS:
|
|
Packit |
b099d7 |
/* Display the 'save as' dialog with the
|
|
Packit |
b099d7 |
present filename displayed in it. */
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNtextString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR (filename, charset)); n++;
|
|
Packit |
b099d7 |
XtSetValues(save_dialog, args, n);
|
|
Packit |
b099d7 |
XtManageChild (save_dialog);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MENU_PRINT:
|
|
Packit |
b099d7 |
if (!file_saved)
|
|
Packit |
b099d7 |
XtManageChild(print_warning);
|
|
Packit |
b099d7 |
else if (filename != NULL) {
|
|
Packit |
b099d7 |
/* malloc space for the command name.
|
|
Packit |
b099d7 |
Note: command = size of the filename +
|
|
Packit |
b099d7 |
"lp " + null terminator */
|
|
Packit |
b099d7 |
command = XtMalloc(strlen(filename) + 4);
|
|
Packit |
b099d7 |
sprintf(command, "lp %s\0", filename);
|
|
Packit |
b099d7 |
if (system(command) != NULL)
|
|
Packit |
b099d7 |
fprintf(stderr, "print failed");
|
|
Packit |
b099d7 |
XtFree(command);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MENU_EXIT:
|
|
Packit |
b099d7 |
/* exit if there is no files open */
|
|
Packit |
b099d7 |
if (!file_saved) /* display the 'save' message dialog */
|
|
Packit |
b099d7 |
XtManageChild (exit_warning);
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
/* close up file pointers and descriptors */
|
|
Packit |
b099d7 |
CloseFile();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* exit this program */
|
|
Packit |
b099d7 |
exit (0);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MENU_CUT:
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* needed to get the event time */
|
|
Packit |
b099d7 |
XmAnyCallbackStruct * cb =
|
|
Packit |
b099d7 |
(XmAnyCallbackStruct *) call_data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* call routine to copy selection to clipboard */
|
|
Packit |
b099d7 |
CopyFileToClipboard(cb->event->xbutton.time);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* call routine to delete primary selection */
|
|
Packit |
b099d7 |
DeletePrimarySelection();
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MENU_COPY:
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* needed to get the event time */
|
|
Packit |
b099d7 |
XmAnyCallbackStruct * cb =
|
|
Packit |
b099d7 |
(XmAnyCallbackStruct *) call_data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* call routine to copy selection to clipboard */
|
|
Packit |
b099d7 |
CopyFileToClipboard(cb->event->xbutton.time);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MENU_PASTE:
|
|
Packit |
b099d7 |
/* call the routine that pastes the
|
|
Packit |
b099d7 |
text at the cursor position */
|
|
Packit |
b099d7 |
PasteItemFromClipboard();
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MENU_CLEAR:
|
|
Packit |
b099d7 |
/* call routine to delete primary selection */
|
|
Packit |
b099d7 |
DeletePrimarySelection();
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MENU_HELP:
|
|
Packit |
b099d7 |
/* no help at this time */
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
/* unknown client_data was recieved and
|
|
Packit |
b099d7 |
there is no setup to handle this */
|
|
Packit |
b099d7 |
fprintf(stderr, "Warning: in menu callback\n");
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** DialogApplyCB
|
|
Packit |
b099d7 |
** Process callback from Dialog apply actions.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void DialogApplyCB (w, client_data, call_data)
|
|
Packit |
b099d7 |
Widget w; /* widget id */
|
|
Packit |
b099d7 |
XtPointer client_data; /* data from application */
|
|
Packit |
b099d7 |
XtPointer call_data; /* data from widget class */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char *command; /* command used in printing */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch ((int)client_data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case DIALOG_PRINT:
|
|
Packit |
b099d7 |
if (filename != NULL) {
|
|
Packit |
b099d7 |
/* malloc space for the command name.
|
|
Packit |
b099d7 |
Note: command = size of the filename +
|
|
Packit |
b099d7 |
"lp " + null terminator */
|
|
Packit |
b099d7 |
command = XtMalloc(strlen(filename) + 4);
|
|
Packit |
b099d7 |
sprintf(command, "lp %s\0", filename);
|
|
Packit |
b099d7 |
if (system(command) != NULL)
|
|
Packit |
b099d7 |
fprintf(stderr, "print failed");
|
|
Packit |
b099d7 |
XtFree(command);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
case DIALOG_CWARNING:
|
|
Packit |
b099d7 |
CloseFile();
|
|
Packit |
b099d7 |
file_saved = True; /* reset the default */
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case DIALOG_XWARNING:
|
|
Packit |
b099d7 |
CloseFile();
|
|
Packit |
b099d7 |
exit(0);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
/* unknown client_data was recieved and
|
|
Packit |
b099d7 |
there is no setup to handle this */
|
|
Packit |
b099d7 |
fprintf (stderr, "Warning: in apply callback\n");
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** DialogCancelCB
|
|
Packit |
b099d7 |
** Process callback from Dialog cancel actions.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void DialogCancelCB (w, client_data, call_data)
|
|
Packit |
b099d7 |
Widget w; /* widget id */
|
|
Packit |
b099d7 |
XtPointer client_data; /* data from application */
|
|
Packit |
b099d7 |
XtPointer call_data; /* data from widget class */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
switch ((int)client_data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case DIALOG_FSELECT:
|
|
Packit |
b099d7 |
/* popdown the file selection box */
|
|
Packit |
b099d7 |
XtUnmanageChild (open_dialog);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case DIALOG_CWARNING:
|
|
Packit |
b099d7 |
case DIALOG_XWARNING:
|
|
Packit |
b099d7 |
case DIALOG_NEW:
|
|
Packit |
b099d7 |
case DIALOG_PRINT:
|
|
Packit |
b099d7 |
case DIALOG_SAVE:
|
|
Packit |
b099d7 |
case DIALOG_HELP:
|
|
Packit |
b099d7 |
/* no action is necessary at this time */
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
/* a unknown client_data was recieved and
|
|
Packit |
b099d7 |
there is no setup to handle this */
|
|
Packit |
b099d7 |
fprintf (stderr, "Warning: in cancel callback\n");
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** DialogAcceptCB
|
|
Packit |
b099d7 |
** Process callback from Dialog actions.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void DialogAcceptCB (w, client_data, call_data)
|
|
Packit |
b099d7 |
Widget w; /* widget id */
|
|
Packit |
b099d7 |
XtPointer client_data; /* data from application */
|
|
Packit |
b099d7 |
XtPointer call_data; /* data from widget class */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char *command; /* command used in printing */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch ((int)client_data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case DIALOG_FSELECT:
|
|
Packit |
b099d7 |
/* open the file and read it into the text widget */
|
|
Packit |
b099d7 |
if (filename != NULL) {
|
|
Packit |
b099d7 |
XtFree(filename);
|
|
Packit |
b099d7 |
filename = NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFileSelectionBoxCallbackStruct *fcb =
|
|
Packit |
b099d7 |
(XmFileSelectionBoxCallbackStruct *) call_data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* get the filename from the file selection box */
|
|
Packit |
b099d7 |
XmStringGetLtoR(fcb->value, charset, &filename);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Open file, print error if it does not exist. */
|
|
Packit |
b099d7 |
if (!OpenFile())
|
|
Packit |
b099d7 |
fprintf(stderr, "Warning: unable to open file\n");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* popdown the file selection box */
|
|
Packit |
b099d7 |
XtUnmanageChild (open_dialog);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case DIALOG_NEW:
|
|
Packit |
b099d7 |
/* open the file and read it into the text widget */
|
|
Packit |
b099d7 |
if (filename != NULL) {
|
|
Packit |
b099d7 |
XtFree(filename);
|
|
Packit |
b099d7 |
filename = NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmSelectionBoxCallbackStruct *scb =
|
|
Packit |
b099d7 |
(XmSelectionBoxCallbackStruct *) call_data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* get the filename string from the file
|
|
Packit |
b099d7 |
name prompt box */
|
|
Packit |
b099d7 |
XmStringGetLtoR(scb->value, charset, &filename);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* open file if it exists,
|
|
Packit |
b099d7 |
if not set items sensitive */
|
|
Packit |
b099d7 |
if (!OpenFile(True)) {
|
|
Packit |
b099d7 |
/* make appropriate item sensitive */
|
|
Packit |
b099d7 |
XtSetSensitive(text, True);
|
|
Packit |
b099d7 |
XtSetSensitive(cut_button, True);
|
|
Packit |
b099d7 |
XtSetSensitive(copy_button, True);
|
|
Packit |
b099d7 |
XtSetSensitive(clear_button, True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* popdown the file selection box */
|
|
Packit |
b099d7 |
XtUnmanageChild (new_dialog);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case DIALOG_CWARNING:
|
|
Packit |
b099d7 |
/* save the file */
|
|
Packit |
b099d7 |
if (SaveFile()) {
|
|
Packit |
b099d7 |
CloseFile(); /* close the file */
|
|
Packit |
b099d7 |
} else
|
|
Packit |
b099d7 |
fprintf(stderr,
|
|
Packit |
b099d7 |
"Warning: unable to save file, file not closed");
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case DIALOG_XWARNING:
|
|
Packit |
b099d7 |
/* save the file */
|
|
Packit |
b099d7 |
if (SaveFile()) {
|
|
Packit |
b099d7 |
CloseFile(); /* close the file */
|
|
Packit |
b099d7 |
exit(0);
|
|
Packit |
b099d7 |
} else
|
|
Packit |
b099d7 |
fprintf(stderr,
|
|
Packit |
b099d7 |
"Warning: unable to save file, exit aborted");
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case DIALOG_SAVE:
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmSelectionBoxCallbackStruct *scb =
|
|
Packit |
b099d7 |
(XmSelectionBoxCallbackStruct *) call_data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* get the filename string from the file
|
|
Packit |
b099d7 |
selection box */
|
|
Packit |
b099d7 |
XmStringGetLtoR(scb->value, charset, &filename);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SaveFile();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtUnmanageChild (save_dialog);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case DIALOG_PRINT:
|
|
Packit |
b099d7 |
/* save the file */
|
|
Packit |
b099d7 |
if (SaveFile()) {
|
|
Packit |
b099d7 |
if (filename != NULL) {
|
|
Packit |
b099d7 |
/* malloc space for the command name.
|
|
Packit |
b099d7 |
Note: command = size of the filename +
|
|
Packit |
b099d7 |
"lp " + null terminator */
|
|
Packit |
b099d7 |
command = XtMalloc(strlen(filename) + 4);
|
|
Packit |
b099d7 |
sprintf(command, "lp %s\0", filename);
|
|
Packit |
b099d7 |
if (system(command) != NULL)
|
|
Packit |
b099d7 |
fprintf(stderr, "print failed");
|
|
Packit |
b099d7 |
XtFree(command);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
} else
|
|
Packit |
b099d7 |
fprintf(stderr,
|
|
Packit |
b099d7 |
"Warning: unable to save file, file not printed");
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case DIALOG_HELP:
|
|
Packit |
b099d7 |
/* no help at this time */
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
/* unknown callback type */
|
|
Packit |
b099d7 |
fprintf (stderr, "Warning: in accept callback\n");
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** CreateSpecialWarningDialog
|
|
Packit |
b099d7 |
** Create special 4 button message box out of a
|
|
Packit |
b099d7 |
** Selection box.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static Widget CreateSpecialWarningDialog (parent, name, image_string, message,
|
|
Packit |
b099d7 |
arglist, argcount)
|
|
Packit |
b099d7 |
Widget parent;
|
|
Packit |
b099d7 |
String name;
|
|
Packit |
b099d7 |
String image_string;
|
|
Packit |
b099d7 |
String message;
|
|
Packit |
b099d7 |
ArgList arglist;
|
|
Packit |
b099d7 |
int argcount;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget warning_dialog; /* special warning selection box */
|
|
Packit |
b099d7 |
Widget work_area; /* rowcolumn for pixmap and text */
|
|
Packit |
b099d7 |
Widget pixmap_label; /* pixmap label */
|
|
Packit |
b099d7 |
Widget text_label; /* text label */
|
|
Packit |
b099d7 |
Widget apply_button; /* apply button */
|
|
Packit |
b099d7 |
Widget ok_button; /* ok button */
|
|
Packit |
b099d7 |
Widget kid[5]; /* buttons */
|
|
Packit |
b099d7 |
Pixel foreground; /* dialog foreground */
|
|
Packit |
b099d7 |
Pixel background; /* dialog background */
|
|
Packit |
b099d7 |
Pixmap pixmap; /* dialog pixmap */
|
|
Packit |
b099d7 |
register int i; /* kid index */
|
|
Packit |
b099d7 |
Arg args[10]; /* arg list */
|
|
Packit |
b099d7 |
register int n; /* arg count */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
warning_dialog = XmCreatePromptDialog(parent, name, arglist, argcount);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++;
|
|
Packit |
b099d7 |
work_area = XmCreateRowColumn(warning_dialog, "workarea", args, n);
|
|
Packit |
b099d7 |
XtManageChild(work_area);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNforeground, &foreground); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNbackground, &background); n++;
|
|
Packit |
b099d7 |
XtGetValues(warning_dialog, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelType, XmPIXMAP); n++;
|
|
Packit |
b099d7 |
pixmap = XmGetPixmap(XtScreen(warning_dialog), image_string,
|
|
Packit |
b099d7 |
foreground, background);
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelPixmap, pixmap); n++;
|
|
Packit |
b099d7 |
pixmap_label = XmCreateLabel(work_area, "pixmap_label", args, n);
|
|
Packit |
b099d7 |
XtManageChild(pixmap_label);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR(message, charset)); n++;
|
|
Packit |
b099d7 |
text_label = XmCreateLabel(work_area, "text_label", args, n);
|
|
Packit |
b099d7 |
XtManageChild(text_label);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
apply_button = XmSelectionBoxGetChild (warning_dialog,
|
|
Packit |
b099d7 |
XmDIALOG_APPLY_BUTTON);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Discard", charset)); n++;
|
|
Packit |
b099d7 |
XtSetValues(apply_button, args, n);
|
|
Packit |
b099d7 |
XtManageChild(apply_button);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ok_button = XmSelectionBoxGetChild (warning_dialog,
|
|
Packit |
b099d7 |
XmDIALOG_OK_BUTTON);
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Save", charset)); n++;
|
|
Packit |
b099d7 |
XtSetValues(ok_button, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Unmanage unneeded children.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
i = 0;
|
|
Packit |
b099d7 |
kid[i++] = XmSelectionBoxGetChild (warning_dialog, XmDIALOG_TEXT);
|
|
Packit |
b099d7 |
kid[i++] = XmSelectionBoxGetChild (warning_dialog,
|
|
Packit |
b099d7 |
XmDIALOG_SELECTION_LABEL);
|
|
Packit |
b099d7 |
XtUnmanageChildren (kid, i);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(warning_dialog);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void CreateFileMenuCB (w, client_data, call_data)
|
|
Packit |
b099d7 |
Widget w; /* widget id */
|
|
Packit |
b099d7 |
XtPointer client_data; /* data from application */
|
|
Packit |
b099d7 |
XtPointer call_data; /* data from widget class */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CreateFileMenu((Widget)client_data);
|
|
Packit |
b099d7 |
XtDestroyWidget(w);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CreateFileMenu(file_button)
|
|
Packit |
b099d7 |
Widget file_button;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget menu_pane;
|
|
Packit |
b099d7 |
XImage *image; /* image for warning pixmap */
|
|
Packit |
b099d7 |
Widget button; /* PushButton */
|
|
Packit |
b099d7 |
register int n; /* arg count */
|
|
Packit |
b099d7 |
Arg args[10]; /* arg list */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Create "File" PulldownMenu.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
menu_pane = XmCreatePulldownMenu (menu_bar, "menu_pane", args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
image = CreateDefaultImage (warningBits, 32, 32);
|
|
Packit |
b099d7 |
XmInstallImage (image, "warning_image");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Open", charset)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonic, 'O'); n++;
|
|
Packit |
b099d7 |
button = XmCreatePushButton (menu_pane, "Open", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (button, XmNactivateCallback, MenuCB, (XtPointer) MENU_OPEN);
|
|
Packit |
b099d7 |
XtManageChild (button);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
open_dialog = XmCreateFileSelectionDialog(menu_pane,
|
|
Packit |
b099d7 |
"file selection dialog", NULL, 0);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback (open_dialog, XmNokCallback,
|
|
Packit |
b099d7 |
DialogAcceptCB, (XtPointer) DIALOG_FSELECT);
|
|
Packit |
b099d7 |
XtAddCallback (open_dialog, XmNcancelCallback,
|
|
Packit |
b099d7 |
DialogCancelCB, (XtPointer) DIALOG_FSELECT);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("New", charset)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonic, 'N'); n++;
|
|
Packit |
b099d7 |
button = XmCreatePushButton (menu_pane, "New", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (button, XmNactivateCallback, MenuCB, (XtPointer) MENU_NEW);
|
|
Packit |
b099d7 |
XtManageChild (button);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNselectionLabelString, XmStringCreateLtoR
|
|
Packit |
b099d7 |
("Enter name of new file.", charset)); n++;
|
|
Packit |
b099d7 |
new_dialog = XmCreatePromptDialog(menu_pane,
|
|
Packit |
b099d7 |
"new file dialog", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (new_dialog, XmNokCallback,
|
|
Packit |
b099d7 |
DialogAcceptCB, (XtPointer) DIALOG_NEW);
|
|
Packit |
b099d7 |
XtAddCallback (new_dialog, XmNcancelCallback,
|
|
Packit |
b099d7 |
DialogCancelCB, (XtPointer) DIALOG_NEW);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Close", charset)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonic, 'C'); n++;
|
|
Packit |
b099d7 |
button = XmCreatePushButton (menu_pane, "Close", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (button, XmNactivateCallback, MenuCB, (XtPointer) MENU_CLOSE);
|
|
Packit |
b099d7 |
XtManageChild (button);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
close_warning = CreateSpecialWarningDialog(menu_pane, "save_warning",
|
|
Packit |
b099d7 |
"warning_image", "Save Changes?", args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback (close_warning, XmNapplyCallback,
|
|
Packit |
b099d7 |
DialogApplyCB, (XtPointer) DIALOG_CWARNING);
|
|
Packit |
b099d7 |
XtAddCallback (close_warning, XmNokCallback,
|
|
Packit |
b099d7 |
DialogAcceptCB, (XtPointer) DIALOG_CWARNING);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Save", charset)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonic, 'S'); n++;
|
|
Packit |
b099d7 |
button = XmCreatePushButton (menu_pane, "Save", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (button, XmNactivateCallback, MenuCB, (XtPointer) MENU_SAVE);
|
|
Packit |
b099d7 |
XtManageChild (button);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Save As...", charset)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonic, 'A'); n++;
|
|
Packit |
b099d7 |
button = XmCreatePushButton (menu_pane, "Save As...", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (button, XmNactivateCallback, MenuCB, (XtPointer) MENU_SAVE_AS);
|
|
Packit |
b099d7 |
XtManageChild (button);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNselectionLabelString, XmStringCreateLtoR
|
|
Packit |
b099d7 |
("Save As...", charset)); n++;
|
|
Packit |
b099d7 |
save_dialog = XmCreatePromptDialog(menu_pane, "save dialog", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (save_dialog, XmNokCallback,
|
|
Packit |
b099d7 |
DialogAcceptCB, (XtPointer) DIALOG_SAVE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Print", charset)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonic, 'P'); n++;
|
|
Packit |
b099d7 |
button = XmCreatePushButton (menu_pane, "Print", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (button, XmNactivateCallback, MenuCB, (XtPointer) MENU_PRINT);
|
|
Packit |
b099d7 |
XtManageChild (button);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNselectionLabelString, XmStringCreateLtoR
|
|
Packit |
b099d7 |
("Save file before printing?", charset)); n++;
|
|
Packit |
b099d7 |
print_warning = CreateSpecialWarningDialog(menu_pane, "print_warning",
|
|
Packit |
b099d7 |
"warning_image", "Save file before printing?", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (print_warning, XmNokCallback,
|
|
Packit |
b099d7 |
DialogAcceptCB, (XtPointer) DIALOG_PRINT);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Exit", charset)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonic, 'E'); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNacceleratorText,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("F3", charset)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNaccelerator, "<Key>F3:"); n++;
|
|
Packit |
b099d7 |
button = XmCreatePushButton (menu_pane, "Exit", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (button, XmNactivateCallback, MenuCB, (XtPointer) MENU_EXIT);
|
|
Packit |
b099d7 |
XtManageChild (button);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
exit_warning = CreateSpecialWarningDialog(menu_pane, "exit warning",
|
|
Packit |
b099d7 |
"warning_image", "Save Changes?", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (exit_warning, XmNapplyCallback,
|
|
Packit |
b099d7 |
DialogApplyCB, (XtPointer) DIALOG_XWARNING);
|
|
Packit |
b099d7 |
XtAddCallback (exit_warning, XmNokCallback,
|
|
Packit |
b099d7 |
DialogAcceptCB, (XtPointer) DIALOG_XWARNING);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNsubMenuId, menu_pane); n++;
|
|
Packit |
b099d7 |
XtSetValues(file_button, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void CreateEditMenuCB (w, client_data, call_data)
|
|
Packit |
b099d7 |
Widget w; /* widget id */
|
|
Packit |
b099d7 |
XtPointer client_data; /* data from application */
|
|
Packit |
b099d7 |
XtPointer call_data; /* data from widget class */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CreateEditMenu((Widget)client_data);
|
|
Packit |
b099d7 |
XtDestroyWidget(w);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CreateEditMenu (edit_button)
|
|
Packit |
b099d7 |
Widget edit_button;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget menu_pane;
|
|
Packit |
b099d7 |
XImage *image; /* image for warning pixmap */
|
|
Packit |
b099d7 |
Widget button; /* PushButton */
|
|
Packit |
b099d7 |
register int n; /* arg count */
|
|
Packit |
b099d7 |
Arg args[10]; /* arg list */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Create "Edit" PulldownMenu.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
menu_pane = XmCreatePulldownMenu (menu_bar, "menu_pane", args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
image = CreateDefaultImage (warningBits, 32, 32);
|
|
Packit |
b099d7 |
XmInstallImage (image, "warning_image");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Cut", charset)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonic, 't'); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNacceleratorText,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Shift+Del", charset)); n++;
|
|
Packit |
b099d7 |
#ifdef hpux
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNaccelerator, "Shift<Key>DeleteChar:"); n++;
|
|
Packit |
b099d7 |
#else /* hpux */
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNaccelerator, "Shift<Key>Delete:"); n++;
|
|
Packit |
b099d7 |
#endif /* hpux */
|
|
Packit |
b099d7 |
cut_button = XmCreatePushButton (menu_pane, "Cut", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (cut_button, XmNactivateCallback, MenuCB, (XtPointer) MENU_CUT);
|
|
Packit |
b099d7 |
XtManageChild (cut_button);
|
|
Packit |
b099d7 |
XtSetSensitive(cut_button, False);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Copy", charset)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonic, 'C'); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNacceleratorText,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Ctrl+Ins", charset)); n++;
|
|
Packit |
b099d7 |
#ifdef hpux
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNaccelerator, "Ctrl<Key>InsertChar:"); n++;
|
|
Packit |
b099d7 |
#else /* hpux */
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNaccelerator, "Ctrl<Key>Insert:"); n++;
|
|
Packit |
b099d7 |
#endif /* hpux */
|
|
Packit |
b099d7 |
copy_button = XmCreatePushButton (menu_pane, "Copy", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (copy_button, XmNactivateCallback, MenuCB, (XtPointer) MENU_COPY);
|
|
Packit |
b099d7 |
XtManageChild (copy_button);
|
|
Packit |
b099d7 |
XtSetSensitive(copy_button, False);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Paste", charset)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonic, 'P'); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNacceleratorText,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Shift+Ins", charset)); n++;
|
|
Packit |
b099d7 |
#ifdef hpux
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNaccelerator, "Shift<Key>InsertChar:"); n++;
|
|
Packit |
b099d7 |
#else /* hpux */
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNaccelerator, "Shift<Key>Insert:"); n++;
|
|
Packit |
b099d7 |
#endif /* hpux */
|
|
Packit |
b099d7 |
paste_button = XmCreatePushButton (menu_pane, "Paste", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (paste_button, XmNactivateCallback, MenuCB, (XtPointer) MENU_PASTE);
|
|
Packit |
b099d7 |
XtManageChild (paste_button);
|
|
Packit |
b099d7 |
XtSetSensitive(paste_button, False);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Clear", charset)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonic, 'e'); n++;
|
|
Packit |
b099d7 |
/* pseudo accelerator - Text already handles
|
|
Packit |
b099d7 |
this action appropriately */
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNacceleratorText,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Del", charset)); n++;
|
|
Packit |
b099d7 |
clear_button = XmCreatePushButton (menu_pane, "Clear", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (clear_button, XmNactivateCallback, MenuCB, (XtPointer) MENU_CLEAR);
|
|
Packit |
b099d7 |
XtManageChild (clear_button);
|
|
Packit |
b099d7 |
XtSetSensitive(clear_button, False);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNsubMenuId, menu_pane); n++;
|
|
Packit |
b099d7 |
XtSetValues(edit_button, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** CreateMenuBar
|
|
Packit |
b099d7 |
** Create MenuBar in MainWindow
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static Widget CreateMenuBar (parent)
|
|
Packit |
b099d7 |
Widget parent;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget cascade; /* CascadeButton */
|
|
Packit |
b099d7 |
Widget file_cascade; /* CascadeButton */
|
|
Packit |
b099d7 |
Widget edit_cascade; /* CascadeButton */
|
|
Packit |
b099d7 |
Widget menu_pane; /* RowColumn */
|
|
Packit |
b099d7 |
Widget button; /* PushButton */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XImage *image; /* image for warning pixmap */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Arg args[10]; /* arg list */
|
|
Packit |
b099d7 |
register int n; /* arg count */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Create MenuArea.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
menu_bar = XmCreateMenuBar (parent, "menu_bar", args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("File", charset)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonic, 'F'); n++;
|
|
Packit |
b099d7 |
file_cascade = XmCreateCascadeButton (menu_bar, "File", args, n);
|
|
Packit |
b099d7 |
XtManageChild (file_cascade);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreateLtoR("Edit", charset)); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonic, 'E'); n++;
|
|
Packit |
b099d7 |
edit_cascade= XmCreateCascadeButton (menu_bar, "Edit", args, n);
|
|
Packit |
b099d7 |
XtManageChild (edit_cascade);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Create "Help" button.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
cascade = XmCreateCascadeButton (menu_bar, "Help", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (cascade, XmNactivateCallback, MenuCB, (XtPointer) MENU_HELP);
|
|
Packit |
b099d7 |
XtManageChild (cascade);
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNmenuHelpWidget, cascade); n++;
|
|
Packit |
b099d7 |
XtSetValues (menu_bar, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Create "Create File Menu" button if File menu not created at
|
|
Packit |
b099d7 |
* startup time.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (file_startup == True)
|
|
Packit |
b099d7 |
CreateFileMenu(file_cascade);
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
cascade = XmCreateCascadeButton (menu_bar, "Create File Menu", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (cascade, XmNactivateCallback, CreateFileMenuCB,
|
|
Packit |
b099d7 |
(XtPointer) file_cascade);
|
|
Packit |
b099d7 |
XtManageChild (cascade);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Create "Create Edit Menu" button if Edit menu not created at
|
|
Packit |
b099d7 |
* startup time.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (edit_startup == True)
|
|
Packit |
b099d7 |
CreateEditMenu(edit_cascade);
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
cascade = XmCreateCascadeButton (menu_bar, "Create Edit Menu", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (cascade, XmNactivateCallback, CreateEditMenuCB,
|
|
Packit |
b099d7 |
(XtPointer) edit_cascade);
|
|
Packit |
b099d7 |
XtManageChild (cascade);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return (menu_bar);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** CreateText
|
|
Packit |
b099d7 |
** Create Text.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void CreateText (parent)
|
|
Packit |
b099d7 |
Widget parent;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg args[10]; /* arg list */
|
|
Packit |
b099d7 |
register int n; /* arg count */
|
|
Packit |
b099d7 |
register int i; /* counter */
|
|
Packit |
b099d7 |
XFontStruct * newfont;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* create text widget */
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNrows, 24); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNcolumns, 80); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNresizeWidth, False); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNresizeHeight, False); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNscrollVertical, True); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNscrollHorizontal, True); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
text = XmCreateScrolledText (parent, "text", args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* add value changed callback */
|
|
Packit |
b099d7 |
XtAddCallback (text, XmNmodifyVerifyCallback, FileChangedCB, NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*-------------------------------------------------------------
|
|
Packit |
b099d7 |
** main
|
|
Packit |
b099d7 |
** Initialize toolkit.
|
|
Packit |
b099d7 |
** Create MainWindow and subwidgets.
|
|
Packit |
b099d7 |
** Realize Shell1 widgets.
|
|
Packit |
b099d7 |
** Process events.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
void main (argc,argv)
|
|
Packit |
b099d7 |
unsigned int argc;
|
|
Packit |
b099d7 |
char **argv;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget form; /* Form */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Arg args[10]; /* arg list */
|
|
Packit |
b099d7 |
register int n; /* arg count */
|
|
Packit |
b099d7 |
register int i; /* counter */
|
|
Packit |
b099d7 |
char c;
|
|
Packit |
b099d7 |
char progname[MAX_NAME_LEN + 1];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
text_first = True;
|
|
Packit |
b099d7 |
file_startup = False;
|
|
Packit |
b099d7 |
edit_startup = False;
|
|
Packit |
b099d7 |
text_startup = False;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
strncpy(progname, argv[0], MAX_NAME_LEN);
|
|
Packit |
b099d7 |
if (argc > 1) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
while (--argc > 0) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
argv++;
|
|
Packit |
b099d7 |
c = **argv;
|
|
Packit |
b099d7 |
if (c != '-')
|
|
Packit |
b099d7 |
continue;
|
|
Packit |
b099d7 |
c = *(*argv + 1);
|
|
Packit |
b099d7 |
switch(c) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case 'a':
|
|
Packit |
b099d7 |
file_startup = True;
|
|
Packit |
b099d7 |
edit_startup = True;
|
|
Packit |
b099d7 |
text_startup = True;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case 'e':
|
|
Packit |
b099d7 |
edit_startup = True;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case 'f':
|
|
Packit |
b099d7 |
file_startup = True;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case 'T':
|
|
Packit |
b099d7 |
text_startup = True;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case 'h':
|
|
Packit |
b099d7 |
print_usage();
|
|
Packit |
b099d7 |
exit(0);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Initialize toolkit and open display.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
CommonTestInit(argc, argv);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Create MainWindow.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNshadowThickness, 0); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNwidth, DEFAULT_WIDTH); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNheight, DEFAULT_HEIGHT); n++;
|
|
Packit |
b099d7 |
main_parent = XmCreateMainWindow (Shell1, "main_parent", args, n);
|
|
Packit |
b099d7 |
XtManageChild (main_parent);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Create MenuBar in MainWindow.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
CreateMenuBar (main_parent);
|
|
Packit |
b099d7 |
XtManageChild (menu_bar);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (text_startup == True) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CreateText (main_parent);
|
|
Packit |
b099d7 |
XtManageChild (text);
|
|
Packit |
b099d7 |
XmAddTabGroup(text);
|
|
Packit |
b099d7 |
XtSetSensitive(text, False);
|
|
Packit |
b099d7 |
text_first = False;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/* Realize Shell1 widgets.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XtRealizeWidget (Shell1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Process events.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XtAppMainLoop (app_context);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
print_usage()
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
printf("Usage: editor [-e -f -T -a -h]\n\tWhere :\n");
|
|
Packit |
b099d7 |
printf("\t\ta - Create all the required widgets at startup time\n");
|
|
Packit |
b099d7 |
printf("\t\te - Create Edit Menu pane widget at startup time\n");
|
|
Packit |
b099d7 |
printf("\t\tf - Create File Menu pane widget at startup time\n");
|
|
Packit |
b099d7 |
printf("\t\tT - Create Text widget at startup time\n");
|
|
Packit |
b099d7 |
printf("\t\th - print this message\n");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|