home *** CD-ROM | disk | FTP | other *** search
- From: argv@island.uu.net (Dan Heller)
- Newsgroups: comp.sources.x
- Subject: v04i084: xconf -- X-based conferencing tool, Part03/05
- Message-ID: <935@island.uu.net>
- Date: 25 Jul 89 08:10:51 GMT
- Approved: island!argv@sun.com
-
- Submitted-by: Jon Crowcroft <J.Crowcroft@Cs.Ucl.AC.UK>
- Posting-number: Volume 4, Issue 84
- Archive-name: xconf/part03
-
-
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then feed it
- # into a shell via "sh file" or similar. To overwrite existing files,
- # type "sh file -c".
- # The tool that generated this appeared in the comp.sources.unix newsgroup;
- # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
- # If this archive is complete, you will see the following message at the end:
- # "End of archive 3 (of 5)."
- # Contents: xconf/Converters.c xconf/Text.c.ac xconf/ru.h
- # Wrapped by argv@sumatra on Tue Jul 25 01:01:06 1989
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'xconf/Converters.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'xconf/Converters.c'\"
- else
- echo shar: Extracting \"'xconf/Converters.c'\" \(25972 characters\)
- sed "s/^X//" >'xconf/Converters.c' <<'END_OF_FILE'
- X#ifndef lint
- Xstatic char Xrcsid[] = "$XConsortium: Converters.c,v 1.36 88/10/18 11:22:55 swick Exp $";
- X/* $oHeader: Converters.c,v 1.6 88/09/01 09:26:23 asente Exp $ */
- X#endif lint
- X/*LINTLIBRARY*/
- X
- X/***********************************************************
- XCopyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts,
- Xand the Massachusetts Institute of Technology, Cambridge, Massachusetts.
- X
- X All Rights Reserved
- X
- XPermission to use, copy, modify, and distribute this software and its
- Xdocumentation for any purpose and without fee is hereby granted,
- Xprovided that the above copyright notice appear in all copies and that
- Xboth that copyright notice and this permission notice appear in
- Xsupporting documentation, and that the names of Digital or MIT not be
- Xused in advertising or publicity pertaining to distribution of the
- Xsoftware without specific, written prior permission.
- X
- XDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- XALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- XDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- XANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- XWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- XARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- XSOFTWARE.
- X
- X******************************************************************/
- X
- X/* Conversion.c - implementations of resource type conversion procs */
- X
- X#include "StringDefs.h"
- X#include <stdio.h>
- X#include <X11/cursorfont.h>
- X#include "IntrinsicI.h"
- X#include "Quarks.h"
- X
- X#define done(address, type) \
- X { (*toVal).size = sizeof(type); (*toVal).addr = (caddr_t) address; }
- X
- Xvoid XtStringConversionWarning(from, toType)
- X String from, toType;
- X{
- X#ifdef notdef
- X static enum {Check, Report, Ignore} report_it = Check;
- X
- X /* %%% aarrgghh. We really want an app context handle! */
- X if (report_it == Check && _XtDefaultAppContext()->list[0] != NULL) {
- X XrmDatabase rdb = XtDatabase(_XtDefaultAppContext()->list[0]);
- X static void CvtStringToBoolean();
- X XrmName xrm_name[2];
- X XrmClass xrm_class[2];
- X XrmRepresentation rep_type;
- X XrmValue value;
- X xrm_name[0] = StringToName( "stringConversionWarnings" );
- X xrm_name[1] = NULL;
- X xrm_class[0] = StringToClass( "StringConversionWarnings" );
- X xrm_class[1] = NULL;
- X if (XrmQGetResource( rdb, xrm_name, xrm_class,
- X &rep_type, &value ))
- X {
- X if (rep_type == StringToQuark(XtRBoolean) && value.addr)
- X report_it = Report;
- X else if (rep_type == StringToQuark(XtRString)) {
- X XrmValue toVal;
- X XtDirectConvert(CvtStringToBoolean, NULL, 0, &value, &toVal);
- X if (toVal.addr && *(Boolean*)toVal.addr)
- X report_it = Report;
- X }
- X }
- X }
- X
- X if (report_it == Report) {
- X#endif /*notdef*/
- X String params[2];
- X Cardinal num_params = 2;
- X params[0] = from;
- X params[1] = toType;
- X XtWarningMsg("conversionError","string","XtToolkitError",
- X "Cannot convert string \"%s\" to type %s",
- X params,&num_params);
- X#ifdef notdef
- X }
- X#endif /*notdef*/
- X}
- X
- Xstatic void CvtXColorToPixel();
- Xstatic void CvtIntToBoolean();
- Xstatic void CvtIntToBool();
- Xstatic void CvtIntToPixmap();
- Xstatic void CvtIntToFont();
- Xstatic void CvtIntOrPixelToXColor();
- Xstatic void CvtIntToPixel();
- X
- Xstatic void CvtStringToBoolean();
- Xstatic void CvtStringToBool();
- Xstatic void CvtStringToCursor();
- Xstatic void CvtStringToDisplay();
- Xstatic void CvtStringToFile();
- Xstatic void CvtStringToFont();
- Xstatic void CvtStringToFontStruct();
- Xstatic void CvtStringToGeometry();
- Xstatic void CvtStringToInt();
- Xstatic void CvtStringToShort();
- Xstatic void CvtStringToUnsignedChar();
- Xstatic void CvtStringToPixel();
- X
- X/*ARGSUSED*/
- Xstatic void CvtIntToBoolean(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X static Boolean b;
- X
- X if (*num_args != 0)
- X XtWarningMsg("wrongParameters","cvtIntToBoolean","XtToolkitError",
- X "Integer to Boolean conversion needs no extra arguments",
- X (String *)NULL, (Cardinal *)NULL);
- X b = (*(int *)fromVal->addr != 0);
- X done(&b, Boolean);
- X};
- X
- X
- X/*ARGSUSED*/
- Xstatic void CvtIntToShort(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X static short s;
- X
- X if (*num_args != 0)
- X XtWarningMsg("wrongParameters","cvtIntToShort","XtToolkitError",
- X "Integer to Short conversion needs no extra arguments",
- X (String *)NULL, (Cardinal *)NULL);
- X s = (*(int *)fromVal->addr);
- X done(&s, short);
- X};
- X
- X
- X/*ARGSUSED*/
- Xstatic void CvtStringToBoolean(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X static Boolean b;
- X XrmQuark q;
- X char lowerName[1000];
- X
- X if (*num_args != 0)
- X XtWarningMsg("wrongParameters","cvtStringToBoolean","XtToolkitError",
- X "String to Boolean conversion needs no extra arguments",
- X (String *)NULL, (Cardinal *)NULL);
- X
- X LowerCase((char *) fromVal->addr, lowerName);
- X q = XrmStringToQuark(lowerName);
- X
- X if (q == XtQEtrue || q == XtQEon || q == XtQEyes) {
- X b = TRUE;
- X done(&b, Boolean);
- X return;
- X }
- X if (q == XtQEfalse || q ==XtQEoff || q == XtQEno) {
- X b = FALSE;
- X done(&b, Boolean);
- X return;
- X }
- X
- X XtStringConversionWarning((char *) fromVal->addr, "Boolean");
- X};
- X
- X
- X/*ARGSUSED*/
- Xstatic void CvtIntToBool(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X static Bool b;
- X
- X if (*num_args != 0)
- X XtWarningMsg("wrongParameters","cvtIntToBool","XtToolkitError",
- X "Integer to Bool conversion needs no extra arguments",
- X (String *)NULL, (Cardinal *)NULL);
- X b = (*(int *)fromVal->addr != 0);
- X done(&b, Bool);
- X};
- X
- X
- X/*ARGSUSED*/
- Xstatic void CvtStringToBool(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X static Bool b;
- X XrmQuark q;
- X char lowerName[1000];
- X
- X if (*num_args != 0)
- X XtWarningMsg("wrongParameters","cvtStringToBool",
- X "XtToolkitError",
- X "String to Bool conversion needs no extra arguments",
- X (String *)NULL, (Cardinal *)NULL);
- X
- X LowerCase((char *) fromVal->addr, lowerName);
- X q = XrmStringToQuark(lowerName);
- X
- X if (q == XtQEtrue || q == XtQEon || q == XtQEyes) {
- X b = TRUE;
- X done(&b, Bool);
- X return;
- X }
- X if (q == XtQEfalse || q ==XtQEoff || q == XtQEno) {
- X b = FALSE;
- X done(&b, Bool);
- X return;
- X }
- X
- X XtStringConversionWarning((char *) fromVal->addr, "Bool");
- X};
- X
- XXtConvertArgRec colorConvertArgs[] = {
- X {XtBaseOffset, (caddr_t) XtOffset(Widget, core.screen), sizeof(Screen *)},
- X {XtBaseOffset, (caddr_t) XtOffset(Widget, core.colormap),sizeof(Colormap)}
- X};
- X
- X
- Xstatic void CvtIntOrPixelToXColor(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X static XColor c;
- X Screen *screen;
- X Colormap colormap;
- X
- X if (*num_args != 2)
- X XtErrorMsg("wrongParameters","cvtIntOrPixelToXColor","XtToolkitError",
- X "Pixel to color conversion needs screen and colormap arguments",
- X (String *)NULL, (Cardinal *)NULL);
- X screen = *((Screen **) args[0].addr);
- X colormap = *((Colormap *) args[1].addr);
- X c.pixel = *(int *)fromVal->addr;
- X
- X XQueryColor(DisplayOfScreen(screen), colormap, &c);
- X done(&c, XColor);
- X};
- X
- X
- X/*ARGSUSED*/
- Xstatic void CvtStringToPixel(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X static XColor screenColor;
- X XColor exactColor;
- X Screen *screen;
- X XtPerDisplay perDpy;
- X XtAppContext app;
- X Colormap colormap;
- X Status status;
- X char message[1000];
- X XrmQuark q;
- X String params[1];
- X Cardinal num_params=1;
- X
- X if (*num_args != 2)
- X XtErrorMsg("wrongParameters","cvtStringToPixel","XtToolkitError",
- X "String to pixel conversion needs screen and colormap arguments",
- X (String *)NULL, (Cardinal *)NULL);
- X
- X screen = *((Screen **) args[0].addr);
- X perDpy = _XtGetPerDisplay(DisplayOfScreen(screen));
- X app = perDpy->appContext;
- X colormap = *((Colormap *) args[1].addr);
- X
- X LowerCase((char *) fromVal->addr, message);
- X q = XrmStringToQuark(message);
- X
- X if (q == XtQExtdefaultbackground) {
- X if (app->rv) { done(&screen->black_pixel, Pixel); return; }
- X else { done(&screen->white_pixel, Pixel); return; }
- X }
- X if (q == XtQExtdefaultforeground) {
- X if (app->rv) { done(&screen->white_pixel, Pixel); return; }
- X else { done(&screen->black_pixel, Pixel); return; }
- X }
- X
- X if ((char) fromVal->addr[0] == '#') { /* some color rgb definition */
- X
- X status = XParseColor(DisplayOfScreen(screen), colormap,
- X (String) fromVal->addr, &screenColor);
- X
- X if (status != 0)
- X status = XAllocColor(DisplayOfScreen(screen), colormap,
- X &screenColor);
- X } else /* some color name */
- X
- X status = XAllocNamedColor(DisplayOfScreen(screen), colormap,
- X (String) fromVal->addr, &screenColor,
- X &exactColor);
- X if (status == 0) {
- X params[0]=(String)fromVal->addr;
- X XtWarningMsg("noColormap","cvtStringToPixel","XtToolkitError",
- X "Cannot allocate colormap entry for \"%s\"",
- X params,&num_params);
- X } else {
- X done(&(screenColor.pixel), Pixel)
- X }
- X
- X};
- X
- X
- XXtConvertArgRec screenConvertArg[] = {
- X {XtBaseOffset, (caddr_t) XtOffset(Widget, core.screen), sizeof(Screen *)}
- X};
- X
- X/*ARGSUSED*/
- Xstatic void CvtStringToCursor(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X
- X{
- X static struct _CursorName {
- X char *name;
- X unsigned int shape;
- X Cursor cursor;
- X } cursor_names[] = {
- X {"X_cursor", XC_X_cursor, NULL},
- X {"arrow", XC_arrow, NULL},
- X {"based_arrow_down", XC_based_arrow_down, NULL},
- X {"based_arrow_up", XC_based_arrow_up, NULL},
- X {"boat", XC_boat, NULL},
- X {"bogosity", XC_bogosity, NULL},
- X {"bottom_left_corner", XC_bottom_left_corner, NULL},
- X {"bottom_right_corner", XC_bottom_right_corner, NULL},
- X {"bottom_side", XC_bottom_side, NULL},
- X {"bottom_tee", XC_bottom_tee, NULL},
- X {"box_spiral", XC_box_spiral, NULL},
- X {"center_ptr", XC_center_ptr, NULL},
- X {"circle", XC_circle, NULL},
- X {"clock", XC_clock, NULL},
- X {"coffee_mug", XC_coffee_mug, NULL},
- X {"cross", XC_cross, NULL},
- X {"cross_reverse", XC_cross_reverse, NULL},
- X {"crosshair", XC_crosshair, NULL},
- X {"diamond_cross", XC_diamond_cross, NULL},
- X {"dot", XC_dot, NULL},
- X#ifdef XC_dotbox
- X {"dotbox", XC_dotbox, NULL},
- X#endif
- X {"double_arrow", XC_double_arrow, NULL},
- X {"draft_large", XC_draft_large, NULL},
- X {"draft_small", XC_draft_small, NULL},
- X {"draped_box", XC_draped_box, NULL},
- X {"exchange", XC_exchange, NULL},
- X {"fleur", XC_fleur, NULL},
- X {"gobbler", XC_gobbler, NULL},
- X {"gumby", XC_gumby, NULL},
- X#ifdef XC_hand1
- X {"hand1", XC_hand1, NULL},
- X#endif
- X#ifdef XC_hand2
- X {"hand2", XC_hand2, NULL},
- X#endif
- X {"heart", XC_heart, NULL},
- X {"icon", XC_icon, NULL},
- X {"iron_cross", XC_iron_cross, NULL},
- X {"left_ptr", XC_left_ptr, NULL},
- X {"left_side", XC_left_side, NULL},
- X {"left_tee", XC_left_tee, NULL},
- X {"leftbutton", XC_leftbutton, NULL},
- X {"ll_angle", XC_ll_angle, NULL},
- X {"lr_angle", XC_lr_angle, NULL},
- X {"man", XC_man, NULL},
- X {"middlebutton", XC_middlebutton, NULL},
- X {"mouse", XC_mouse, NULL},
- X {"pencil", XC_pencil, NULL},
- X {"pirate", XC_pirate, NULL},
- X {"plus", XC_plus, NULL},
- X {"question_arrow", XC_question_arrow, NULL},
- X {"right_ptr", XC_right_ptr, NULL},
- X {"right_side", XC_right_side, NULL},
- X {"right_tee", XC_right_tee, NULL},
- X {"rightbutton", XC_rightbutton, NULL},
- X {"rtl_logo", XC_rtl_logo, NULL},
- X {"sailboat", XC_sailboat, NULL},
- X {"sb_down_arrow", XC_sb_down_arrow, NULL},
- X {"sb_h_double_arrow", XC_sb_h_double_arrow, NULL},
- X {"sb_left_arrow", XC_sb_left_arrow, NULL},
- X {"sb_right_arrow", XC_sb_right_arrow, NULL},
- X {"sb_up_arrow", XC_sb_up_arrow, NULL},
- X {"sb_v_double_arrow", XC_sb_v_double_arrow, NULL},
- X {"shuttle", XC_shuttle, NULL},
- X {"sizing", XC_sizing, NULL},
- X {"spider", XC_spider, NULL},
- X {"spraycan", XC_spraycan, NULL},
- X {"star", XC_star, NULL},
- X {"target", XC_target, NULL},
- X {"tcross", XC_tcross, NULL},
- X {"top_left_arrow", XC_top_left_arrow, NULL},
- X {"top_left_corner", XC_top_left_corner, NULL},
- X {"top_right_corner", XC_top_right_corner, NULL},
- X {"top_side", XC_top_side, NULL},
- X {"top_tee", XC_top_tee, NULL},
- X {"trek", XC_trek, NULL},
- X {"ul_angle", XC_ul_angle, NULL},
- X {"umbrella", XC_umbrella, NULL},
- X {"ur_angle", XC_ur_angle, NULL},
- X {"watch", XC_watch, NULL},
- X {"xterm", XC_xterm, NULL},
- X };
- X struct _CursorName *cache;
- X char *name = (char *)fromVal->addr;
- X register int i;
- X Screen *screen;
- X
- X if (*num_args != 1)
- X XtErrorMsg("wrongParameters","cvtStringToCursor","XtToolkitError",
- X "String to cursor conversion needs screen argument",
- X (String *)NULL, (Cardinal *)NULL);
- X
- X screen = *((Screen **) args[0].addr);
- X for (i=0, cache=cursor_names; i < XtNumber(cursor_names); i++, cache++ ) {
- X if (strcmp(name, cache->name) == 0) {
- X#ifndef JON
- X/*
- X * Of course yet another static which blows away multiple displays
- X * since second (identical) widget on new display with this cursor
- X * the cursor aint never been heard of...by the server
- X */
- X if (!cache->cursor)
- X#endif JON
- X cache->cursor =
- X XCreateFontCursor(DisplayOfScreen(screen), cache->shape );
- X done(&(cache->cursor), Cursor);
- X return;
- X }
- X }
- X XtStringConversionWarning(name, "Cursor");
- X};
- X
- X
- X/*ARGSUSED*/
- Xstatic void CvtStringToDisplay(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X static Display *d;
- X
- X if (*num_args != 0)
- X XtWarningMsg("wrongParameters","cvtStringToDisplay","XtToolkitError",
- X "String to Display conversion needs no extra arguments",
- X (String *)NULL, (Cardinal *)NULL);
- X
- X d = XOpenDisplay((char *)fromVal->addr);
- X if (d != NULL) {
- X done(&d, Display);
- X } else {
- X XtStringConversionWarning((char *) fromVal->addr, "Display");
- X }
- X};
- X
- X
- X/*ARGSUSED*/
- Xstatic void CvtStringToFile(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X static FILE *f;
- X
- X if (*num_args != 0)
- X XtWarningMsg("wrongParameters","cvtStringToFile","XtToolkitError",
- X "String to File conversion needs no extra arguments",
- X (String *) NULL, (Cardinal *)NULL);
- X
- X f = fopen((char *)fromVal->addr, "r");
- X if (f != NULL) {
- X done(&f, FILE);
- X } else {
- X XtStringConversionWarning((char *) fromVal->addr, "File");
- X }
- X};
- X
- X
- X/*ARGSUSED*/
- Xstatic void CvtStringToFont(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X static Font f;
- X Screen *screen;
- X Display *display;
- X char lcfont[1000];
- X XrmQuark q;
- X
- X if (*num_args != 1)
- X XtErrorMsg("wrongParameters","cvtStringToFont","XtToolkitError",
- X "String to font conversion needs screen argument",
- X (String *) NULL, (Cardinal *)NULL);
- X
- X screen = *((Screen **) args[0].addr);
- X LowerCase((char *) fromVal->addr, lcfont);
- X q = XrmStringToQuark(lcfont);
- X
- X if (q != XtQExtdefaultfont) {
- X f = XLoadFont(DisplayOfScreen(screen), (char *)fromVal->addr);
- X if (f != 0) {
- X done(&f, Font);
- X return;
- X }
- X XtStringConversionWarning((char *) fromVal->addr, "Font");
- X }
- X /* try and get the default font */
- X
- X display = DisplayOfScreen(screen);
- X
- X f = XLoadFont(display,"fixed");
- X
- X/* this crashes the server for some reason. I think that it is */
- X/* supposed to work. so for now we will use the above line */
- X/* done(&f, DefaultGCOfScreen(screen)->values.font); */
- X
- X if (f != 0) done(&f, Font);
- X}
- X
- X
- X/*ARGSUSED*/
- Xstatic void CvtIntToFont(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X if (*num_args != 0)
- X XtWarningMsg("wrongParameters","cvtIntToFont","XtToolkitError",
- X "Integer to Font conversion needs no extra arguments",
- X (String *) NULL, (Cardinal *)NULL);
- X done(fromVal->addr, int);
- X};
- X
- X
- X/*ARGSUSED*/
- Xstatic void CvtStringToFontStruct(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X static XFontStruct *f;
- X Screen *screen;
- X char lcfont[1000];
- X XrmQuark q;
- X
- X if (*num_args != 1)
- X XtErrorMsg("wrongParameters","cvtStringToFontStruct","XtToolkitError",
- X "String to cursor conversion needs screen argument",
- X (String *) NULL, (Cardinal *)NULL);
- X
- X screen = *((Screen **) args[0].addr);
- X LowerCase((char *) fromVal->addr, lcfont);
- X q = XrmStringToQuark(lcfont);
- X
- X if (q != XtQExtdefaultfont) {
- X f = XLoadQueryFont(DisplayOfScreen(screen), (char *)fromVal->addr);
- X if (f != NULL) {
- X done(&f, XFontStruct *);
- X return;
- X }
- X XtStringConversionWarning((char *) fromVal->addr, "XFontStruct");
- X }
- X
- X /* try and get the default font */
- X
- X /* This still crashes the server... */
- X/*
- X f = XQueryFont(DisplayOfScreen(screen),
- X DefaultGCOfScreen(screen)->values.font);
- X*/
- X /* ...so we do this instead */
- X
- X f = XLoadQueryFont(DisplayOfScreen(screen), "fixed");
- X
- X if (f != 0) done(&f, XFontStruct *);
- X}
- X
- X/*ARGSUSED*/
- Xstatic void CvtStringToInt(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X static int i;
- X
- X if (*num_args != 0)
- X XtWarningMsg("wrongParameters","cvtStringToInt","XtToolkitError",
- X "String to Integer conversion needs no extra arguments",
- X (String *) NULL, (Cardinal *)NULL);
- X if (sscanf((char *)fromVal->addr, "%d", &i) == 1) {
- X done(&i, int);
- X } else {
- X XtStringConversionWarning((char *) fromVal->addr, "Integer");
- X }
- X}
- X
- X/*ARGSUSED*/
- Xstatic void CvtStringToShort(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X static short i;
- X
- X if (*num_args != 0)
- X XtWarningMsg("wrongParameters","cvtStringToShort","XtToolkitError",
- X "String to Integer conversion needs no extra arguments",
- X (String *) NULL, (Cardinal *)NULL);
- X if (sscanf((char *)fromVal->addr, "%hd", &i) == 1) {
- X done(&i, short);
- X } else {
- X XtStringConversionWarning((char *) fromVal->addr, "Short");
- X }
- X}
- X/*ARGSUSED*/
- Xstatic void CvtStringToUnsignedChar(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X static int i;
- X static unsigned char uc;
- X
- X if (*num_args != 0)
- X XtWarningMsg("wrongParameters","cvtStringToUnsignedChar","XtToolkitError",
- X "String to Integer conversion needs no extra arguments",
- X (String *) NULL, (Cardinal *)NULL);
- X if (sscanf((char *)fromVal->addr, "%d", &i) == 1) {
- X
- X if ( i < 0 || i > 255 )
- X XtStringConversionWarning((char *) fromVal->addr, "Unsigned Char");
- X uc = (unsigned char)i;
- X done(&uc, unsigned char);
- X } else {
- X XtStringConversionWarning((char *) fromVal->addr, "Unsigned Char");
- X }
- X}
- X
- X
- X/*ARGSUSED*/
- Xstatic void CvtXColorToPixel(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X if (*num_args != 0)
- X XtWarningMsg("wrongParameters","cvtXColorToPixel","XtToolkitError",
- X "Color to Pixel conversion needs no extra arguments",
- X (String *) NULL, (Cardinal *)NULL);
- X done(&((XColor *)fromVal->addr)->pixel, int);
- X};
- X
- X/*ARGSUSED*/
- Xstatic void CvtIntToPixel(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X if (*num_args != 0)
- X XtWarningMsg("wrongParameters","cvtIntToPixel","XtToolkitError",
- X "Integer to Pixel conversion needs no extra arguments",
- X (String *) NULL, (Cardinal *)NULL);
- X done(fromVal->addr, int);
- X};
- X
- X/*ARGSUSED*/
- Xstatic void CvtIntToPixmap(args, num_args, fromVal, toVal)
- X XrmValuePtr args;
- X Cardinal *num_args;
- X XrmValuePtr fromVal;
- X XrmValuePtr toVal;
- X{
- X if (*num_args != 0)
- X XtWarningMsg("wrongParameters","cvtIntToPixmap","XtToolkitError",
- X "Integer to Pixmap conversion needs no extra arguments",
- X (String *) NULL, (Cardinal *)NULL);
- X done(fromVal->addr, int);
- X};
- X
- X
- Xvoid LowerCase(source, dest)
- X register char *source, *dest;
- X{
- X register char ch;
- X
- X for (; (ch = *source) != 0; source++, dest++) {
- X if ('A' <= ch && ch <= 'Z')
- X *dest = ch - 'A' + 'a';
- X else
- X *dest = ch;
- X }
- X *dest = 0;
- X}
- X
- XXrmQuark XtQBoolean;
- XXrmQuark XtQBool;
- XXrmQuark XtQColor;
- XXrmQuark XtQCursor;
- XXrmQuark XtQDisplay;
- XXrmQuark XtQDimension;
- XXrmQuark XtQFile;
- XXrmQuark XtQFont;
- XXrmQuark XtQFontStruct;
- XXrmQuark XtQInt;
- XXrmQuark XtQPixel;
- XXrmQuark XtQPixmap;
- XXrmQuark XtQPointer;
- XXrmQuark XtQPosition;
- XXrmQuark XtQShort;
- XXrmQuark XtQString;
- XXrmQuark XtQUnsignedChar;
- XXrmQuark XtQWindow;
- X
- XXrmQuark XtQEoff;
- XXrmQuark XtQEfalse;
- XXrmQuark XtQEno;
- XXrmQuark XtQEon;
- XXrmQuark XtQEtrue;
- XXrmQuark XtQEyes;
- XXrmQuark XtQEnotUseful;
- XXrmQuark XtQEwhenMapped;
- XXrmQuark XtQEalways;
- XXrmQuark XtQEdefault;
- X
- XXrmQuark XtQExtdefaultbackground;
- XXrmQuark XtQExtdefaultforeground;
- XXrmQuark XtQExtdefaultfont;
- X
- Xstatic Boolean initialized = FALSE;
- X
- Xvoid _XtConvertInitialize()
- X{
- X if (initialized) return;
- X initialized = TRUE;
- X
- X/* Representation types */
- X
- X XtQBoolean = XrmStringToQuark(XtRBoolean);
- X XtQColor = XrmStringToQuark(XtRColor);
- X XtQCursor = XrmStringToQuark(XtRCursor);
- X XtQDimension = XrmStringToQuark(XtRDimension);
- X XtQDisplay = XrmStringToQuark(XtRDisplay);
- X XtQFile = XrmStringToQuark(XtRFile);
- X XtQFont = XrmStringToQuark(XtRFont);
- X XtQFontStruct = XrmStringToQuark(XtRFontStruct);
- X XtQInt = XrmStringToQuark(XtRInt);
- X XtQBool = XrmStringToQuark(XtRBool);
- X XtQPixel = XrmStringToQuark(XtRPixel);
- X XtQPixmap = XrmStringToQuark(XtRPixmap);
- X XtQPointer = XrmStringToQuark(XtRPointer);
- X XtQPosition = XrmStringToQuark(XtRPosition);
- X XtQShort = XrmStringToQuark(XtRShort);
- X XtQString = XrmStringToQuark(XtRString);
- X XtQUnsignedChar = XrmStringToQuark(XtRUnsignedChar);
- X XtQWindow = XrmStringToQuark(XtRWindow);
- X
- X/* Boolean enumeration constants */
- X
- X XtQEfalse = XrmStringToQuark(XtEfalse);
- X XtQEno = XrmStringToQuark(XtEno);
- X XtQEoff = XrmStringToQuark(XtEoff);
- X XtQEon = XrmStringToQuark(XtEon);
- X XtQEtrue = XrmStringToQuark(XtEtrue);
- X XtQEyes = XrmStringToQuark(XtEyes);
- X
- X/* Default color and font enumeration constants */
- X
- X XtQExtdefaultbackground = XrmStringToQuark(XtExtdefaultbackground);
- X XtQExtdefaultforeground = XrmStringToQuark(XtExtdefaultforeground);
- X XtQExtdefaultfont = XrmStringToQuark(XtExtdefaultfont);
- X}
- X
- X_XtAddDefaultConverters(table)
- X ConverterTable table;
- X{
- X#define Add(from, to, proc, convert_args, num_args) \
- X _XtTableAddConverter(table, from, to, (XtConverter) proc, \
- X (XtConvertArgList) convert_args, num_args)
- X
- X Add(XtQColor, XtQPixel, CvtXColorToPixel, NULL, 0);
- X Add(XtQInt, XtQBoolean, CvtIntToBoolean, NULL, 0);
- X Add(XtQInt, XtQBool, CvtIntToBool, NULL, 0);
- X Add(XtQInt, XtQDimension, CvtIntToShort, NULL, 0);
- X Add(XtQInt, XtQPixel, CvtIntToPixel, NULL, 0);
- X Add(XtQInt, XtQPosition, CvtIntToShort, NULL, 0);
- X Add(XtQInt, XtQPixmap, CvtIntToPixmap, NULL, 0);
- X Add(XtQInt, XtQFont, CvtIntToFont, NULL, 0);
- X Add(XtQInt, XtQColor, CvtIntOrPixelToXColor,
- X colorConvertArgs, XtNumber(colorConvertArgs));
- X
- X Add(XtQString, XtQBoolean, CvtStringToBoolean, NULL, 0);
- X Add(XtQString, XtQBool, CvtStringToBool, NULL, 0);
- X Add(XtQString, XtQCursor, CvtStringToCursor,
- X screenConvertArg, XtNumber(screenConvertArg));
- X Add(XtQString, XtQDimension, CvtStringToShort, NULL, 0);
- X Add(XtQString, XtQDisplay, CvtStringToDisplay, NULL, 0);
- X Add(XtQString, XtQFile, CvtStringToFile, NULL, 0);
- X Add(XtQString, XtQFont, CvtStringToFont,
- X screenConvertArg, XtNumber(screenConvertArg));
- X Add(XtQString, XtQFontStruct, CvtStringToFontStruct,
- X screenConvertArg, XtNumber(screenConvertArg));
- X Add(XtQString, XtQInt, CvtStringToInt, NULL, 0);
- X Add(XtQString, XtQPosition, CvtStringToShort, NULL, 0);
- X Add(XtQString, XtQPixel, CvtStringToPixel,
- X colorConvertArgs, XtNumber(colorConvertArgs));
- X Add(XtQString, XtQShort, CvtStringToShort, NULL, 0);
- X Add(XtQString, XtQUnsignedChar,CvtStringToUnsignedChar,NULL, 0);
- X
- X Add(XtQPixel, XtQColor, CvtIntOrPixelToXColor,
- X colorConvertArgs, XtNumber(colorConvertArgs));
- X
- X _XtAddTMConverters(table);
- X}
- END_OF_FILE
- if test 25972 -ne `wc -c <'xconf/Converters.c'`; then
- echo shar: \"'xconf/Converters.c'\" unpacked with wrong size!
- fi
- # end of 'xconf/Converters.c'
- fi
- if test -f 'xconf/Text.c.ac' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'xconf/Text.c.ac'\"
- else
- echo shar: Extracting \"'xconf/Text.c.ac'\" \(25203 characters\)
- sed "s/^X//" >'xconf/Text.c.ac' <<'END_OF_FILE'
- X/* The following used to be a separate file, TextActs.c, but
- X is included here because textActionsTable can't be external
- X to the file declaring textClassRec */
- X
- X/* Misc. routines */
- Xvoid TextAcceptFocus(w)
- X Widget w;
- X{
- X TextWidget ctx = (TextWidget) w;
- X if (!ctx->text.hasfocus)
- X XSetInputFocus(XtDisplay(ctx), XtWindow(ctx),
- X RevertToPointerRoot, CurrentTime);
- X}
- X
- Xstatic StartAction(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X _XtTextPrepareToUpdate(ctx);
- X if (event != NULL) {
- X switch (event->type) {
- X case ButtonPress:
- X case ButtonRelease:
- X ctx->text.time = event->xbutton.time;
- X ctx->text.ev_x = event->xbutton.x;
- X ctx->text.ev_y = event->xbutton.y;
- X break;
- X case KeyPress:
- X case KeyRelease:
- X ctx->text.time = event->xkey.time;
- X ctx->text.ev_x = event->xkey.x;
- X ctx->text.ev_y = event->xkey.y;
- X break;
- X case MotionNotify:
- X ctx->text.time = event->xmotion.time;
- X ctx->text.ev_x = event->xmotion.x;
- X ctx->text.ev_y = event->xmotion.y;
- X break;
- X case EnterNotify:
- X case LeaveNotify:
- X ctx->text.time = event->xcrossing.time;
- X ctx->text.ev_x = event->xcrossing.x;
- X ctx->text.ev_y = event->xcrossing.y;
- X }
- X#ifdef JON
- X XtCallCallbacks(ctx, XtNcallback, (caddr_t)event);
- X#endif JON
- X }
- X}
- X
- Xstatic EndAction(ctx)
- X TextWidget ctx;
- X{
- X CheckResizeOrOverflow(ctx);
- X _XtTextExecuteUpdate(ctx);
- X}
- X
- X#ifdef notdef
- Xstatic DoFeep(ctx)
- X TextWidget ctx;
- X{
- X XBell(XtDisplay(ctx), 50);
- X}
- X#endif
- X
- Xstatic DeleteOrKill(ctx, from, to, kill)
- X TextWidget ctx;
- X XtTextPosition from, to;
- X Boolean kill;
- X{
- X XtTextBlock text;
- X char *ptr;
- X
- X if (kill && from < to) {
- X ptr = _XtTextGetText(ctx, from, to);
- X XStoreBuffer(XtDisplay(ctx), ptr, strlen(ptr), 1);
- X XtFree(ptr);
- X }
- X text.length = 0;
- X text.firstPos = 0;
- X if (ReplaceText(ctx, from, to, &text)) {
- X XBell(XtDisplay(ctx), 50);
- X return;
- X }
- X ctx->text.insertPos = from;
- X XtTextUnsetSelection((Widget)ctx);
- X ctx->text.showposition = TRUE;
- X}
- X
- X
- XStuffFromBuffer(ctx, buffer)
- X TextWidget ctx;
- X int buffer;
- X{
- X extern char *XFetchBuffer();
- X XtTextBlock text;
- X text.ptr = XFetchBuffer(XtDisplay(ctx), &(text.length), buffer);
- X text.firstPos = 0;
- X if (ReplaceText(ctx, ctx->text.insertPos, ctx->text.insertPos, &text)) {
- X XBell(XtDisplay(ctx), 50);
- X return;
- X }
- X ctx->text.insertPos = (*ctx->text.source->Scan)(ctx->text.source,
- X ctx->text.insertPos, XtstPositions, XtsdRight, text.length, TRUE);
- X XtTextUnsetSelection((Widget)ctx);
- X XtFree(text.ptr);
- X}
- X
- X
- Xstatic void UnKill(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X StuffFromBuffer(ctx, 1);
- X EndAction(ctx);
- X}
- X
- X
- Xstatic void Stuff(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X StuffFromBuffer(ctx, 0);
- X EndAction(ctx);
- X}
- X
- X
- Xstruct _SelectionList {
- X String *params;
- X Cardinal count;
- X Time time;
- X};
- X
- Xstatic void _GetSelection(w, time, params, num_params)
- XWidget w;
- XTime time;
- XString *params; /* selections in precedence order */
- XCardinal num_params;
- X{
- X void _SelectionReceived();
- X Atom selection;
- X int buffer;
- X
- X XmuInternStrings(XtDisplay(w), params, (Cardinal)1, &selection);
- X switch (selection) {
- X case XA_CUT_BUFFER0: buffer = 0; break;
- X case XA_CUT_BUFFER1: buffer = 1; break;
- X case XA_CUT_BUFFER2: buffer = 2; break;
- X case XA_CUT_BUFFER3: buffer = 3; break;
- X case XA_CUT_BUFFER4: buffer = 4; break;
- X case XA_CUT_BUFFER5: buffer = 5; break;
- X case XA_CUT_BUFFER6: buffer = 6; break;
- X case XA_CUT_BUFFER7: buffer = 7; break;
- X default: buffer = -1;
- X }
- X if (buffer >= 0) {
- X unsigned long nbytes;
- X int fmt8 = 8;
- X Atom type = XA_STRING;
- X char *line = XFetchBuffer(XtDisplay(w), &nbytes, buffer);
- X if (nbytes > 0)
- X _SelectionReceived(w, NULL, &selection, &type, (caddr_t)line,
- X &nbytes, &fmt8);
- X else if (num_params > 1)
- X _GetSelection(w, time, params+1, num_params-1);
- X } else {
- X struct _SelectionList* list;
- X if (--num_params) {
- X list = XtNew(struct _SelectionList);
- X list->params = params + 1;
- X list->count = num_params;
- X list->time = time;
- X } else list = NULL;
- X XtGetSelectionValue(w, selection, XA_STRING, _SelectionReceived,
- X (caddr_t)list, time);
- X }
- X}
- X
- X
- X/* ARGSUSED */
- Xstatic void _SelectionReceived(w, client_data, selection, type,
- X value, length, format)
- XWidget w;
- Xcaddr_t client_data;
- XAtom *selection, *type;
- Xcaddr_t value;
- Xunsigned long *length;
- Xint *format;
- X{
- X TextWidget ctx = (TextWidget)w;
- X XtTextBlock text;
- X
- X if (*type == 0 /*XT_CONVERT_FAIL*/ || *length == 0) {
- X struct _SelectionList* list = (struct _SelectionList*)client_data;
- X if (list != NULL) {
- X _GetSelection(w, list->time, list->params, list->count);
- X XtFree(client_data);
- X }
- X return;
- X }
- X
- X StartAction(ctx, NULL);
- X
- X text.ptr = (char*)value;
- X text.firstPos = 0;
- X text.length = *length;
- X text.format = FMT8BIT;
- X if (ReplaceText(ctx, ctx->text.insertPos, ctx->text.insertPos, &text)) {
- X XBell(XtDisplay(ctx), 50);
- X return;
- X }
- X ctx->text.insertPos = (*ctx->text.source->Scan)(ctx->text.source,
- X ctx->text.insertPos, XtstPositions, XtsdRight, text.length, TRUE);
- X XtTextUnsetSelection((Widget)ctx);
- X
- X EndAction(ctx);
- X
- X XtFree(client_data);
- X XtFree(value);
- X}
- X
- X
- Xstatic void InsertSelection(w, event, params, num_params)
- X Widget w;
- X XEvent *event;
- X String *params; /* precedence list of selections to try */
- X Cardinal *num_params;
- X{
- X static String default_params[] = {"PRIMARY", "CUT_BUFFER0"};
- X int count;
- X StartAction((TextWidget)w, event);
- X if ((count = *num_params) == 0) {
- X params = default_params;
- X count = XtNumber(default_params);
- X }
- X _GetSelection(w, ((TextWidget)w)->text.time, params, count);
- X EndAction((TextWidget)w);
- X}
- X
- X
- Xstatic XtTextPosition NextPosition(ctx, position, kind, direction)
- X TextWidget ctx;
- X XtTextPosition position;
- X XtTextScanType kind;
- X XtTextScanDirection direction;
- X{
- X XtTextPosition pos;
- X
- X pos = (*ctx->text.source->Scan)(
- X ctx->text.source, position, kind, direction, 1, FALSE);
- X if (pos == ctx->text.insertPos)
- X pos = (*ctx->text.source->Scan)(
- X ctx->text.source, position, kind, direction, 2, FALSE);
- X return pos;
- X}
- X
- X/* routines for moving around */
- X
- Xstatic void MoveForwardChar(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X ctx->text.insertPos = (*ctx->text.source->Scan)(
- X ctx->text.source, ctx->text.insertPos, XtstPositions, XtsdRight, 1,
- X TRUE);
- X EndAction(ctx);
- X}
- X
- Xstatic void MoveBackwardChar(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X ctx->text.insertPos = (*ctx->text.source->Scan)(
- X ctx->text.source, ctx->text.insertPos, XtstPositions, XtsdLeft,
- X 1, TRUE);
- X EndAction(ctx);
- X}
- X
- Xstatic void MoveForwardWord(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X ctx->text.insertPos = NextPosition(ctx, ctx->text.insertPos,
- X XtstWhiteSpace, XtsdRight);
- X EndAction(ctx);
- X}
- X
- Xstatic void MoveBackwardWord(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X ctx->text.insertPos = NextPosition(ctx, ctx->text.insertPos,
- X XtstWhiteSpace, XtsdLeft);
- X EndAction(ctx);
- X}
- X
- Xstatic void MoveBackwardParagraph(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X ctx->text.insertPos = NextPosition(ctx, ctx->text.insertPos,
- X XtstEOL, XtsdLeft);
- X EndAction(ctx);
- X}
- X
- Xstatic void MoveForwardParagraph(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X ctx->text.insertPos = NextPosition(ctx, ctx->text.insertPos,
- X XtstEOL, XtsdRight);
- X EndAction(ctx);
- X}
- X
- X
- Xstatic void MoveToLineStart(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X int line;
- X StartAction(ctx, event);
- X _XtTextShowPosition(ctx);
- X line = LineForPosition(ctx, ctx->text.insertPos);
- X ctx->text.insertPos = ctx->text.lt.info[line].position;
- X EndAction(ctx);
- X}
- X
- Xstatic void MoveToLineEnd(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X int line;
- X XtTextPosition next;
- X StartAction(ctx, event);
- X _XtTextShowPosition(ctx);
- X line = LineForPosition(ctx, ctx->text.insertPos);
- X next = ctx->text.lt.info[line+1].position;
- X if (next > ctx->text.lastPos)
- X next = ctx->text.lastPos;
- X else
- X next = (*ctx->text.source->Scan)(ctx->text.source, next, XtstPositions,
- X XtsdLeft, 1, TRUE);
- X ctx->text.insertPos = next;
- X EndAction(ctx);
- X}
- X
- X
- Xstatic void MoveNextLine(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X int width, width2, height, line;
- X XtTextPosition position, maxp;
- X StartAction(ctx, event);
- X _XtTextShowPosition(ctx);
- X line = LineForPosition(ctx, ctx->text.insertPos);
- X if (line == ctx->text.lt.lines - 1 &&
- X ctx->text.lt.info[ctx->text.lt.lines].position <= ctx->text.lastPos) {
- X _XtTextScroll(ctx, 1);
- X line = LineForPosition(ctx, ctx->text.insertPos);
- X }
- X (*ctx->text.sink->FindDistance)(ctx,
- X ctx->text.lt.info[line].position, ctx->text.lt.info[line].x,
- X ctx->text.insertPos, &width, &position, &height);
- X line++;
- X if (ctx->text.lt.info[line].position > ctx->text.lastPos) {
- X ctx->text.insertPos = ctx->text.lastPos;
- X EndAction(ctx);
- X return;
- X }
- X (*ctx->text.sink->FindPosition)(ctx,
- X ctx->text.lt.info[line].position, ctx->text.lt.info[line].x,
- X width, FALSE, &position, &width2, &height);
- X maxp = (*ctx->text.source->Scan)(ctx->text.source,
- X ctx->text.lt.info[line+1].position,
- X XtstPositions, XtsdLeft, 1, TRUE);
- X if (position > maxp)
- X position = maxp;
- X ctx->text.insertPos = position;
- X EndAction(ctx);
- X}
- X
- Xstatic void MovePreviousLine(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X int width, width2, height, line;
- X XtTextPosition position, maxp;
- X StartAction(ctx, event);
- X _XtTextShowPosition(ctx);
- X line = LineForPosition(ctx, ctx->text.insertPos);
- X if (line == 0) {
- X _XtTextScroll(ctx, -1);
- X line = LineForPosition(ctx, ctx->text.insertPos);
- X }
- X if (line > 0) {
- X (*ctx->text.sink->FindDistance)(ctx,
- X ctx->text.lt.info[line].position,
- X ctx->text.lt.info[line].x,
- X ctx->text.insertPos, &width, &position, &height);
- X line--;
- X (*ctx->text.sink->FindPosition)(ctx,
- X ctx->text.lt.info[line].position, ctx->text.lt.info[line].x,
- X width, FALSE, &position, &width2, &height);
- X maxp = (*ctx->text.source->Scan)(ctx->text.source,
- X ctx->text.lt.info[line+1].position,
- X XtstPositions, XtsdLeft, 1, TRUE);
- X if (position > maxp)
- X position = maxp;
- X ctx->text.insertPos = position;
- X }
- X EndAction(ctx);
- X}
- X
- X
- X
- Xstatic void MoveBeginningOfFile(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X ctx->text.insertPos = (*ctx->text.source->Scan)(ctx->text.source,
- X ctx->text.insertPos, XtstAll, XtsdLeft, 1, TRUE);
- X EndAction(ctx);
- X}
- X
- X
- Xstatic void MoveEndOfFile(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X ctx->text.insertPos = (*ctx->text.source->Scan)(ctx->text.source,
- X ctx->text.insertPos, XtstAll, XtsdRight, 1, TRUE);
- X EndAction(ctx);
- X}
- X
- Xstatic void ScrollOneLineUp(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X _XtTextScroll(ctx, 1);
- X EndAction(ctx);
- X}
- X
- Xstatic void ScrollOneLineDown(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X _XtTextScroll(ctx, -1);
- X EndAction(ctx);
- X}
- X
- Xstatic void MoveNextPage(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X _XtTextScroll(ctx, max(1, ctx->text.lt.lines - 2));
- X ctx->text.insertPos = ctx->text.lt.top;
- X EndAction(ctx);
- X}
- X
- Xstatic void MovePreviousPage(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X _XtTextScroll(ctx, -max(1, ctx->text.lt.lines - 2));
- X ctx->text.insertPos = ctx->text.lt.top;
- X EndAction(ctx);
- X}
- X
- X
- X
- X
- X/* delete routines */
- X
- Xstatic void DeleteForwardChar(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X XtTextPosition next;
- X
- X StartAction(ctx, event);
- X next = (*ctx->text.source->Scan)(
- X ctx->text.source, ctx->text.insertPos, XtstPositions,
- X XtsdRight, 1, TRUE);
- X DeleteOrKill(ctx, ctx->text.insertPos, next, FALSE);
- X EndAction(ctx);
- X}
- X
- Xstatic void DeleteBackwardChar(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X XtTextPosition next;
- X
- X StartAction(ctx, event);
- X next = (*ctx->text.source->Scan)(
- X ctx->text.source, ctx->text.insertPos, XtstPositions,
- X XtsdLeft, 1, TRUE);
- X DeleteOrKill(ctx, next, ctx->text.insertPos, FALSE);
- X EndAction(ctx);
- X}
- X
- Xstatic void DeleteForwardWord(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X XtTextPosition next;
- X
- X StartAction(ctx, event);
- X next = NextPosition(ctx, ctx->text.insertPos, XtstWhiteSpace, XtsdRight);
- X DeleteOrKill(ctx, ctx->text.insertPos, next, FALSE);
- X EndAction(ctx);
- X}
- X
- Xstatic void DeleteBackwardWord(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X XtTextPosition next;
- X
- X StartAction(ctx, event);
- X next = NextPosition(ctx, ctx->text.insertPos, XtstWhiteSpace, XtsdLeft);
- X DeleteOrKill(ctx, next, ctx->text.insertPos, FALSE);
- X EndAction(ctx);
- X}
- X
- Xstatic void KillForwardWord(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X XtTextPosition next;
- X
- X StartAction(ctx, event);
- X next = NextPosition(ctx, ctx->text.insertPos, XtstWhiteSpace, XtsdRight);
- X DeleteOrKill(ctx, ctx->text.insertPos, next, TRUE);
- X EndAction(ctx);
- X}
- X
- Xstatic void KillBackwardWord(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X XtTextPosition next;
- X
- X StartAction(ctx, event);
- X next = NextPosition(ctx, ctx->text.insertPos, XtstWhiteSpace, XtsdLeft);
- X DeleteOrKill(ctx, next, ctx->text.insertPos, TRUE);
- X EndAction(ctx);
- X}
- X
- Xstatic void KillCurrentSelection(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X DeleteOrKill(ctx, ctx->text.s.left, ctx->text.s.right, TRUE);
- X EndAction(ctx);
- X}
- X
- Xstatic void DeleteCurrentSelection(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X DeleteOrKill(ctx, ctx->text.s.left, ctx->text.s.right, FALSE);
- X EndAction(ctx);
- X}
- X
- Xstatic void KillToEndOfLine(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X int line;
- X XtTextPosition last, next;
- X StartAction(ctx, event);
- X _XtTextShowPosition(ctx);
- X line = LineForPosition(ctx, ctx->text.insertPos);
- X last = ctx->text.lt.info[line + 1].position;
- X next = (*ctx->text.source->Scan)(ctx->text.source, ctx->text.insertPos,
- X XtstEOL, XtsdRight, 1, FALSE);
- X if (last > ctx->text.lastPos)
- X last = ctx->text.lastPos;
- X if (last > next && ctx->text.insertPos < next)
- X last = next;
- X DeleteOrKill(ctx, ctx->text.insertPos, last, TRUE);
- X EndAction(ctx);
- X}
- X
- Xstatic void KillToEndOfParagraph(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X XtTextPosition next;
- X
- X StartAction(ctx, event);
- X next = (*ctx->text.source->Scan)(ctx->text.source, ctx->text.insertPos,
- X XtstEOL, XtsdRight, 1, FALSE);
- X if (next == ctx->text.insertPos)
- X next = (*ctx->text.source->Scan)(ctx->text.source, next, XtstEOL,
- X XtsdRight, 1, TRUE);
- X DeleteOrKill(ctx, ctx->text.insertPos, next, TRUE);
- X EndAction(ctx);
- X}
- X
- Xstatic void InsertNewLineAndBackup(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X InsertNewLineAndBackupInternal(ctx);
- X EndAction(ctx);
- X}
- X
- Xstatic int InsertNewLineAndBackupInternal(ctx)
- X TextWidget ctx;
- X{
- X XtTextBlock text;
- X text.length = 1;
- X text.ptr = "\n";
- X text.firstPos = 0;
- X if (ReplaceText(ctx, ctx->text.insertPos, ctx->text.insertPos, &text)) {
- X XBell( XtDisplay(ctx), 50);
- X return(EditError);
- X }
- X XtTextUnsetSelection((Widget)ctx);
- X ctx->text.showposition = TRUE;
- X return(EditDone);
- X}
- X
- X
- X
- Xstatic int InsertNewLine(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X XtTextPosition next;
- X
- X StartAction(ctx, event);
- X if (InsertNewLineAndBackupInternal(ctx))
- X return(EditError);
- X next = (*ctx->text.source->Scan)(ctx->text.source, ctx->text.insertPos,
- X XtstPositions, XtsdRight, 1, TRUE);
- X ctx->text.insertPos = next;
- X EndAction(ctx);
- X return(EditDone);
- X}
- X
- X
- Xstatic void InsertNewLineAndIndent(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X XtTextBlock text;
- X XtTextPosition pos1, pos2;
- X
- X StartAction(ctx, event);
- X pos1 = (*ctx->text.source->Scan)(ctx->text.source, ctx->text.insertPos,
- X XtstEOL, XtsdLeft, 1, FALSE);
- X pos2 = (*ctx->text.source->Scan)(ctx->text.source, pos1, XtstEOL,
- X XtsdLeft, 1, TRUE);
- X pos2 = (*ctx->text.source->Scan)(ctx->text.source, pos2, XtstWhiteSpace,
- X XtsdRight, 1, TRUE);
- X text.ptr = _XtTextGetText(ctx, pos1, pos2);
- X text.length = strlen(text.ptr);
- X if (InsertNewLine(ctx, event)) return;
- X text.firstPos = 0;
- X if (ReplaceText(ctx, ctx->text.insertPos, ctx->text.insertPos, &text)) {
- X XBell(XtDisplay(ctx), 50);
- X EndAction(ctx);
- X return;
- X }
- X ctx->text.insertPos = (*ctx->text.source->Scan)(ctx->text.source,
- X ctx->text.insertPos, XtstPositions, XtsdRight, text.length, TRUE);
- X XtFree(text.ptr);
- X EndAction(ctx);
- X}
- X
- Xstatic void SelectWord(ctx, event, params, num_params)
- X TextWidget ctx;
- X XEvent *event;
- X String *params;
- X Cardinal *num_params;
- X{
- X XtTextPosition l, r;
- X StartAction(ctx, event);
- X l = (*ctx->text.source->Scan)(ctx->text.source, ctx->text.insertPos,
- X XtstWhiteSpace, XtsdLeft, 1, FALSE);
- X r = (*ctx->text.source->Scan)(ctx->text.source, l, XtstWhiteSpace,
- X XtsdRight, 1, FALSE);
- X _XtTextSetNewSelection(ctx, l, r,
- X _SelectionList(ctx, params, *num_params),
- X *num_params);
- X EndAction(ctx);
- X}
- X
- X
- Xstatic void SelectAll(ctx, event, params, num_params)
- X TextWidget ctx;
- X XEvent *event;
- X String *params;
- X Cardinal *num_params;
- X{
- X StartAction(ctx, event);
- X _XtTextSetNewSelection(ctx, (XtTextPosition)0, ctx->text.lastPos,
- X _SelectionList(ctx, params, *num_params),
- X *num_params);
- X EndAction(ctx);
- X}
- X
- Xstatic void SelectStart(ctx, event, params, num_params)
- X TextWidget ctx;
- X XEvent *event;
- X String *params; /* unused */
- X Cardinal *num_params; /* unused */
- X{
- X StartAction(ctx, event);
- X AlterSelection(ctx, XtsmTextSelect, XtactionStart, NULL, ZERO);
- X EndAction(ctx);
- X}
- X
- Xstatic void SelectAdjust(ctx, event, params, num_params)
- X TextWidget ctx;
- X XEvent *event;
- X String *params; /* unused */
- X Cardinal *num_params; /* unused */
- X{
- X StartAction(ctx, event);
- X AlterSelection(ctx, XtsmTextSelect, XtactionAdjust, NULL, ZERO);
- X EndAction(ctx);
- X}
- X
- Xstatic void SelectEnd(ctx, event, params, num_params)
- X TextWidget ctx;
- X XEvent *event;
- X String *params;
- X Cardinal *num_params;
- X{
- X StartAction(ctx, event);
- X AlterSelection(ctx, XtsmTextSelect, XtactionEnd, params, num_params);
- X EndAction(ctx);
- X}
- X
- Xstatic void ExtendStart(ctx, event, params, num_params)
- X TextWidget ctx;
- X XEvent *event;
- X String *params; /* unused */
- X Cardinal *num_params; /* unused */
- X{
- X StartAction(ctx, event);
- X AlterSelection(ctx, XtsmTextExtend, XtactionStart, NULL, ZERO);
- X EndAction(ctx);
- X}
- X
- Xstatic void ExtendAdjust(ctx, event, params, num_params)
- X TextWidget ctx;
- X XEvent *event;
- X String *params; /* unused */
- X Cardinal *num_params; /* unused */
- X{
- X StartAction(ctx, event);
- X AlterSelection(ctx, XtsmTextExtend, XtactionAdjust, NULL, ZERO);
- X EndAction(ctx);
- X}
- X
- Xstatic void ExtendEnd(ctx, event, params, num_params)
- X TextWidget ctx;
- X XEvent *event;
- X String *params;
- X Cardinal *num_params;
- X{
- X StartAction(ctx, event);
- X AlterSelection(ctx, XtsmTextExtend, XtactionEnd, params, num_params);
- X EndAction(ctx);
- X}
- X
- X
- Xstatic void RedrawDisplay(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X StartAction(ctx, event);
- X ForceBuildLineTable(ctx);
- X DisplayTextWindow((Widget)ctx);
- X EndAction(ctx);
- X}
- X
- X
- X/* ARGSUSED */
- Xvoid _XtTextAbortDialog(w, closure, call_data)
- X Widget w; /* unused */
- X caddr_t closure; /* dialog */
- X caddr_t call_data; /* unused */
- X{
- X struct _dialog *dialog = (struct _dialog*)closure;
- X Widget popup = dialog->widget->core.parent;
- X TextWidget ctx = dialog->text;
- X
- X StartAction(ctx, (XEvent*)NULL);
- X XtPopdown(popup);
- X dialog->mapped = False;
- X if (dialog->message)
- X XtUnmanageChild( dialog->message );
- X EndAction(ctx);
- X}
- X
- X
- X/* Insert a file of the given name into the text. Returns 0 if file found,
- X -1 if not. */
- X
- Xstatic int InsertFileNamed(ctx, str)
- X TextWidget ctx;
- X char *str;
- X{
- X int fid;
- X XtTextBlock text;
- X char buf[1000];
- X XtTextPosition position;
- X
- X if (str == NULL || strlen(str) == 0) return -1;
- X fid = open(str, O_RDONLY);
- X if (fid <= 0) return -1;
- X _XtTextPrepareToUpdate(ctx);
- X position = ctx->text.insertPos;
- X text.firstPos = 0;
- X while ((text.length = read(fid, buf, 512)) > 0) {
- X text.ptr = buf;
- X (void) ReplaceText(ctx, position, position, &text);
- X position = (*ctx->text.source->Scan)(ctx->text.source, position,
- X XtstPositions, XtsdRight, text.length, TRUE);
- X }
- X (void) close(fid);
- X ctx->text.insertPos = position;
- X _XtTextExecuteUpdate(ctx);
- X return 0;
- X}
- X
- X/* ARGSUSED */
- Xstatic void DoInsert(w, closure, call_data)
- X Widget w; /* unused */
- X caddr_t closure; /* text widget */
- X caddr_t call_data; /* unused */
- X{
- X struct _dialog *dialog = (struct _dialog*)closure;
- X
- X if (InsertFileNamed( dialog->text,
- X XtDialogGetValueString(dialog->widget) )) {
- X char msg[128];
- X static Arg args[] = {
- X {XtNlabel, NULL},
- X {XtNfromVert, NULL},
- X {XtNleft, (XtArgVal)XtChainLeft},
- X {XtNright, (XtArgVal)XtChainRight},
- X {XtNborderWidth, 0},
- X };
- X sprintf( msg, "*** Error: %s ***",
- X (errno > 0 && errno < sys_nerr) ?
- X sys_errlist[errno] : "Can't open file" );
- X args[0].value = (XtArgVal)msg;
- X if (dialog->message) {
- X XtSetValues( dialog->message, args, ONE );
- X XtManageChild( dialog->message );
- X }
- X else {
- X args[1].value = (XtArgVal)dialog->doit;
- X dialog->message =
- X XtCreateManagedWidget( "message", labelWidgetClass,
- X dialog->widget, args, XtNumber(args) );
- X }
- X/* XBell(XtDisplay(w), 50); */
- X }
- X else {
- X _XtTextAbortDialog(w, closure, NULL);
- X }
- X}
- X
- X/*ARGSUSED*/
- Xstatic void TextFocusIn (ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{ ctx->text.hasfocus = TRUE; }
- X
- X/*ARGSUSED*/
- Xstatic void TextFocusOut(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{ ctx->text.hasfocus = FALSE; }
- X
- X#ifdef JON
- X
- X/*
- XXXX Here is where to update any other windows...
- X */
- X#endif
- X
- X#define STRBUFSIZE 100
- X
- Xstatic XComposeStatus compose_status = {NULL, 0};
- Xstatic void InsertChar(ctx, event)
- X TextWidget ctx;
- X XEvent *event;
- X{
- X char strbuf[STRBUFSIZE];
- X int keycode;
- X XtTextBlock text;
- X text.length = XLookupString (event, strbuf, STRBUFSIZE,
- X &keycode, &compose_status);
- X if (text.length==0) return;
- X StartAction(ctx, event);
- X text.ptr = &strbuf[0];
- X text.firstPos = 0;
- X if (ReplaceText(ctx, ctx->text.insertPos, ctx->text.insertPos, &text)) {
- X XBell(XtDisplay(ctx), 50);
- X EndAction(ctx);
- X return;
- X }
- X ctx->text.insertPos =
- X (*ctx->text.source->Scan)(ctx->text.source, ctx->text.insertPos,
- X XtstPositions, XtsdRight, text.length, TRUE);
- X XtTextUnsetSelection((Widget)ctx);
- X
- X EndAction(ctx);
- X}
- X
- Xstatic void InsertFile(w, event)
- X Widget w;
- X XEvent *event;
- X{
- X TextWidget ctx = (TextWidget)w;
- X register struct _dialog *dialog, *prev;
- X char *ptr;
- X static char *dialog_label = "Insert File:";
- X#ifdef notdef
- X XtTextBlock text;
- X#endif
- X register Widget popup;
- X static Arg popup_args[] = {
- X {XtNx, NULL},
- X {XtNy, NULL},
- X {XtNiconName, NULL},
- X {XtNgeometry, NULL},
- X {XtNallowShellResize, True},
- X {XtNsaveUnder, True},
- X };
- X Arg args[2];
- X int x, y;
- X Window j;
- X
- X StartAction(ctx, event);
- X if (ctx->text.source->edit_mode != XttextEdit) {
- X XBell(XtDisplay(w), 50);
- X EndAction(ctx);
- X return;
- X }
- X if (ctx->text.s.left < ctx->text.s.right) {
- X ptr = _XtTextGetText(ctx, ctx->text.s.left, ctx->text.s.right);
- X DeleteCurrentSelection(ctx, (XEvent*)NULL);
- X#ifdef notdef
- X if (InsertFileNamed(ctx, ptr)) {
- X XBell( XtDisplay(w), 50);
- X text.ptr = ptr;
- X text.length = strlen(ptr);
- X text.firstPos = 0;
- X (void) ReplaceText(ctx, ctx->text.insertPos, ctx->text.insertPos, &text);
- X ctx->text.s.left = ctx->text.insertPos;
- X ctx->text.s.right = ctx->text.insertPos =
- X (*ctx->text.source->Scan)(ctx->text.source, ctx->text.insertPos,
- X XtstPositions, XtsdRight, text.length, TRUE);
- X }
- X XtFree(ptr);
- X EndAction(ctx);
- X return;
- X#endif
- X }
- X else {
- X ptr = "";
- X }
- X XTranslateCoordinates( XtDisplay(w), XtWindow(w),
- X RootWindowOfScreen(XtScreen(w)), 0, 0, &x, &y, &j );
- X x += ctx->text.dialog_horiz_offset;
- X y += ctx->text.dialog_vert_offset;
- X if (ctx->text.sbar)
- X x += ctx->text.sbar->core.width + ctx->text.sbar->core.border_width;
- X prev = NULL;
- X for (dialog = ctx->text.dialog; dialog; dialog = dialog->next) {
- X if (!dialog->mapped)
- X break;
- END_OF_FILE
- if test 25203 -ne `wc -c <'xconf/Text.c.ac'`; then
- echo shar: \"'xconf/Text.c.ac'\" unpacked with wrong size!
- fi
- # end of 'xconf/Text.c.ac'
- fi
- if test -f 'xconf/ru.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'xconf/ru.h'\"
- else
- echo shar: Extracting \"'xconf/ru.h'\" \(576 characters\)
- sed "s/^X//" >'xconf/ru.h' <<'END_OF_FILE'
- X/*
- X * Not def'd anywhere useful
- X */
- X#define CPUSTATES 4
- X
- X#ifdef sun
- X#define DK_NDRIVE 4
- X#endif
- X
- X#include <pwd.h>
- X#ifdef hp
- X#include <time.h>
- X#endif
- X#include <sys/types.h>
- X#include <sys/socket.h>
- X#include <sys/ioctl.h>
- X#include <rpcsvc/rstat.h>
- X#include <utmp.h>
- X#include <rpcsvc/rusers.h>
- X#include <netinet/in.h>
- X#include <netdb.h>
- X#include <stdio.h>
- X#include <sgtty.h>
- X#include <signal.h>
- X#include <errno.h>
- X
- X
- X/*
- X * Also not cleanly available without includeing almost all of sys
- X */
- X#define FSCALE (1<<8)
- X
- X#ifdef pyr
- Xextern int errno;
- X#endif
- X
- X#define XHosts "/etc/X0.hosts"
- END_OF_FILE
- if test 576 -ne `wc -c <'xconf/ru.h'`; then
- echo shar: \"'xconf/ru.h'\" unpacked with wrong size!
- fi
- # end of 'xconf/ru.h'
- fi
- echo shar: End of archive 3 \(of 5\).
- cp /dev/null ark3isdone
- MISSING=""
- for I in 1 2 3 4 5 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 5 archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-