|
|
1.1 ! root 1: #ifndef lint ! 2: static char rcsid[] = "$Header: TextKinds.c,v 1.3 87/09/13 13:25:40 swick Exp $"; ! 3: #endif lint ! 4: ! 5: /* ! 6: * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. ! 7: * ! 8: * All Rights Reserved ! 9: * ! 10: * Permission to use, copy, modify, and distribute this software and its ! 11: * documentation for any purpose and without fee is hereby granted, ! 12: * provided that the above copyright notice appear in all copies and that ! 13: * both that copyright notice and this permission notice appear in ! 14: * supporting documentation, and that the name of Digital Equipment ! 15: * Corporation not be used in advertising or publicity pertaining to ! 16: * distribution of the software without specific, written prior permission. ! 17: * ! 18: * ! 19: * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ! 20: * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ! 21: * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ! 22: * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ! 23: * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ! 24: * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ! 25: * SOFTWARE. ! 26: */ ! 27: #include "Xresource.h" ! 28: #include "Intrinsic.h" ! 29: #include "Text.h" ! 30: #include "TextP.h" ! 31: #include "Atoms.h" ! 32: /* #include "TextDisp.h" */ ! 33: #include <strings.h> ! 34: ! 35: extern char *tmpnam(); ! 36: ! 37: /* ||| Bogus definitions to go in some .h file */ ! 38: ! 39: extern int *XtDiskSourceCreate (/* name, mode */); ! 40: /* char *name; */ ! 41: /* XtEditType mode; */ ! 42: ! 43: extern int *XtStringSourceCreate (/* str, maxLength, mode */); ! 44: /* char *str; */ ! 45: /* int maxLength; */ ! 46: /* XtEditType mode; */ ! 47: ! 48: ! 49: /* Private definitions. */ ! 50: ! 51: typedef enum _TextKinds {diskText, stringText} TextKinds; ! 52: ! 53: static int *source; ! 54: ! 55: static Boolean initialized = FALSE; ! 56: ! 57: /* EditType enumeration constants */ ! 58: ! 59: static XrmQuark XtQTextRead; ! 60: static XrmQuark XtQTextAppend; ! 61: static XrmQuark XtQTextEdit; ! 62: ! 63: /*ARGSUSED*/ ! 64: #define done(address, type) \ ! 65: { (*toVal).size = sizeof(type); (*toVal).addr = (caddr_t) address; } ! 66: ! 67: extern void _XLowerCase(); ! 68: ! 69: static void CvtStringToEditMode(dpy, fromVal, toVal) ! 70: Display *dpy; ! 71: XrmValue fromVal; ! 72: XrmValue *toVal; ! 73: { ! 74: static XtEditType editType; ! 75: XrmQuark q; ! 76: char lowerName[1000]; ! 77: ! 78: /* ||| where to put LowerCase */ ! 79: _XLowerCase((char *) fromVal.addr, lowerName); ! 80: q = XrmAtomToQuark(lowerName); ! 81: if (q == XtQTextRead ) { ! 82: editType = XttextRead; ! 83: done(&editType, XtEditType); ! 84: return; ! 85: } ! 86: if (q == XtQTextAppend) { ! 87: editType = XttextAppend; ! 88: done(&editType, XtEditType); ! 89: return; ! 90: } ! 91: if (q == XtQTextEdit) { ! 92: editType = XttextEdit; ! 93: done(&editType, XtEditType); ! 94: return; ! 95: } ! 96: (*toVal).size = 0; ! 97: (*toVal).addr = NULL; ! 98: }; ! 99: ! 100: static TextKindsInitialize(w) ! 101: Widget w; ! 102: { ! 103: if (initialized) ! 104: return; ! 105: XtQTextRead = XrmAtomToQuark(XtEtextRead); ! 106: XtQTextAppend = XrmAtomToQuark(XtEtextAppend); ! 107: XtQTextEdit = XrmAtomToQuark(XtEtextEdit); ! 108: XrmRegisterTypeConverter(XrmRString, XtREditMode, CvtStringToEditMode); ! 109: initialized = TRUE; ! 110: ! 111: } ! 112: ! 113: static Widget AsciiTextCreate(w, args, argCount, src) ! 114: Widget w; ! 115: Arg *args; ! 116: int argCount; ! 117: int *src; ! 118: { ! 119: TextWidget tw = (TextWidget)w; ! 120: ArgList mergedArgs; ! 121: Arg myArgs[2]; ! 122: ! 123: XtSetArg(myArgs[0], XtNtextSource, (XtArgVal) src); ! 124: XtSetArg(myArgs[1], XtNtextSink, ! 125: (XtArgVal) XtAsciiSinkCreate(w, NULL, 0)); ! 126: ! 127: mergedArgs = XtMergeArgLists(args, argCount, myArgs, XtNumber(myArgs) ); ! 128: /* XXX first param is bogus */ ! 129: tw = (TextWidget) XtCreateWidget("textname", textWidgetClass, ! 130: w, mergedArgs, argCount+XtNumber(myArgs)); ! 131: ! 132: XtFree((char *) mergedArgs); ! 133: return (Widget)tw; ! 134: } ! 135: ! 136: /***** Public routines. *****/ ! 137: ! 138: Widget XtTextDiskCreate(w, args, argCount) ! 139: Widget w; ! 140: ArgList args; ! 141: int argCount; ! 142: { ! 143: if (!initialized) TextKindsInitialize(w); ! 144: source = XtDiskSourceCreate (w); ! 145: return (AsciiTextCreate (w, args, argCount, source)); ! 146: } ! 147: ! 148: XtTextDiskDestroy(w) ! 149: Widget w; ! 150: { ! 151: XtDestroyWidget(w); ! 152: } ! 153: ! 154: Widget XtTextStringCreate(w, args, argCount) ! 155: Widget w; ! 156: ArgList args; ! 157: int argCount; ! 158: { ! 159: if (!initialized) TextKindsInitialize(w); ! 160: ! 161: /* need option for specifying read append mode */ ! 162: source = XtStringSourceCreate (w, args, argCount); ! 163: return (AsciiTextCreate (w, args, argCount, source)); ! 164: } ! 165: ! 166: XtTextStringDestroy(w) ! 167: Widget w; ! 168: { ! 169: XtDestroyWidget(w); ! 170: } ! 171: ! 172: ! 173: Widget XtTextSourceCreate(w, args, argCount, passedSource) ! 174: Widget w; ! 175: ArgList args; ! 176: int argCount; ! 177: int *passedSource; /* ||| NOTE: should be in args */ ! 178: { ! 179: if (!initialized) TextKindsInitialize(w); ! 180: return (AsciiTextCreate (w, args, argCount, passedSource)); ! 181: } ! 182: ! 183: XtTextSourceDestroy(w) ! 184: Widget w; ! 185: { ! 186: XtDestroyWidget(w); ! 187: } ! 188:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.