|
|
1.1 root 1: /* $Header: TextKinds.c,v 1.1 87/09/11 07:58:58 toddb Exp $ */
2: #ifndef lint
3: static char *sccsid = "@(#)TextKinds.c 1.18 2/25/87";
4: #endif lint
5:
6: /*
7: * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
8: *
9: * All Rights Reserved
10: *
11: * Permission to use, copy, modify, and distribute this software and its
12: * documentation for any purpose and without fee is hereby granted,
13: * provided that the above copyright notice appear in all copies and that
14: * both that copyright notice and this permission notice appear in
15: * supporting documentation, and that the name of Digital Equipment
16: * Corporation not be used in advertising or publicity pertaining to
17: * distribution of the software without specific, written prior permission.
18: *
19: *
20: * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
21: * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
22: * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
23: * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
24: * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
25: * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
26: * SOFTWARE.
27: */
28:
29: #include "Xlib.h"
30: #include "Intrinsic.h"
31: #include "Text.h"
32: #include "Atoms.h"
33: #include "TextDisp.h"
34: #include <strings.h>
35:
36: extern char *tmpnam();
37:
38: /* ||| Bogus definitions to go in some .h file */
39:
40: extern int *XtDiskSourceCreate (/* name, mode */);
41: /* char *name; */
42: /* XtEditType mode; */
43:
44: extern int *XtStringSourceCreate (/* str, maxLength, mode */);
45: /* char *str; */
46: /* int maxLength; */
47: /* XtEditType mode; */
48:
49:
50: /* Private definitions. */
51:
52: typedef enum TextKinds {diskText, stringText};
53:
54: static XtEditType editMode;
55: static XtEditType defaultEditMode = XttextRead;
56: static XFontStruct *defaultFont;
57: static XFontStruct *textFontStruct;
58: static char *nullValue = NULL;
59: static int *source, textLength;
60: static int defaultLength = 100;
61: static int foreground, background;
62: static char *fileName, *textString;
63:
64: static Resource rawResources[] = {
65: {XtNfont, XtCFont, XrmRFontStruct, sizeof (XFontStruct *),
66: (caddr_t) &textFontStruct, (caddr_t) &defaultFont},
67: {XtNforeground, XtCColor, XrmRPixel, sizeof (int),
68: (caddr_t) &foreground, (caddr_t) &XtDefaultFGPixel},
69: {XtNbackground, XtCColor, XrmRPixel, sizeof (int),
70: (caddr_t) &background, (caddr_t) &XtDefaultBGPixel},
71: };
72:
73: static Resource stringResources[] = {
74: {XtNforeground, XtCColor, XrmRPixel, sizeof (int),
75: (caddr_t) &foreground, (caddr_t) &XtDefaultFGPixel},
76: {XtNbackground, XtCColor, XrmRPixel, sizeof (int),
77: (caddr_t) &background, (caddr_t) &XtDefaultBGPixel},
78: {XtNstring, XtCString, XrmRString, sizeof (char *),
79: (caddr_t) &textString, (caddr_t) &nullValue},
80: {XtNfont, XtCFont, XrmRFontStruct, sizeof (XFontStruct *),
81: (caddr_t) &textFontStruct, (caddr_t) &defaultFont},
82: {XtNlength, XtCLength, XrmRInt, sizeof (int), (caddr_t) &textLength,
83: (caddr_t)&defaultLength},
84: {XtNeditType, XtCEditType, XtREditMode, sizeof(editMode),
85: (caddr_t)&editMode, (caddr_t)&defaultEditMode},
86: };
87:
88: static Resource diskResources[] = {
89: {XtNforeground, XtCColor, XrmRPixel, sizeof (int),
90: (caddr_t) &foreground, (caddr_t) &XtDefaultFGPixel},
91: {XtNbackground, XtCColor, XrmRPixel, sizeof (int),
92: (caddr_t) &background, (caddr_t) &XtDefaultBGPixel},
93: {XtNfile, XtCFile, XrmRString, sizeof (char *),
94: (caddr_t) &fileName, (caddr_t) &nullValue},
95: {XtNfont, XtCFont, XrmRFontStruct, sizeof (XFontStruct *),
96: (caddr_t) &textFontStruct, (caddr_t) &defaultFont},
97: {XtNeditType, XtCEditType, XtREditMode, sizeof(editMode),
98: (caddr_t)&editMode, (caddr_t)&defaultEditMode},
99: };
100:
101: static Boolean initialized = FALSE;
102:
103: static TextKindsInitialize(dpy)
104: Display *dpy;
105: {
106: if (initialized)
107: return;
108: initialized = TRUE;
109:
110: defaultFont = XLoadQueryFont(dpy, "fixed");
111: }
112:
113: static Window AsciiTextCreate(dpy, parent, args, argCount, names, classes, src)
114: Display *dpy;
115: Window parent;
116: Arg *args;
117: int argCount;
118: XrmNameList names;
119: XrmClassList classes;
120: int *src;
121: {
122: Window textWidget;
123: ArgList mergedArgs;
124: Arg myArgs[2];
125:
126: XtSetArg(myArgs[0], XtNtextSource, (XtArgVal) src);
127: XtSetArg(myArgs[1], XtNtextSink,
128: (XtArgVal) XtAsciiSinkCreate(dpy, textFontStruct,
129: foreground, background));
130:
131: mergedArgs = XtMergeArgLists(args, argCount, myArgs, XtNumber(myArgs) );
132: textWidget = XtTextCreate(
133: dpy, parent, mergedArgs, argCount+XtNumber(myArgs));
134:
135: XtSetNameAndClass(dpy, textWidget, names, classes);
136: XrmFreeNameList(names);
137: XrmFreeClassList(classes);
138: XtFree((char *) mergedArgs);
139: return textWidget;
140: }
141:
142: /* Public routines. */
143:
144: Window XtTextDiskCreate(dpy, parent, args, argCount)
145: Display *dpy;
146: Window parent;
147: ArgList args;
148: int argCount;
149: {
150: XrmNameList names;
151: XrmClassList classes;
152: char *tmpName;
153:
154: if (!initialized) TextKindsInitialize(dpy);
155: XtGetResources (dpy,
156: diskResources, XtNumber(diskResources), args, argCount, parent,
157: "text", "Text", &names, &classes);
158: /* NOTE: Do not want to leave temp file around. Must be unlinked
159: somewhere */
160: if (fileName == NULL) {
161: tmpName = tmpnam (fileName);
162: fileName = XtMalloc (sizeof (tmpName));
163: (void) strcpy (fileName, tmpName);
164: }
165: source = XtDiskSourceCreate (fileName, editMode);
166: return (AsciiTextCreate (dpy, parent, args, argCount, names, classes, source));
167: }
168:
169: XtTextDiskDestroy(dpy, w)
170: Display *dpy;
171: Window w;
172: {
173: XDestroyWindow(dpy, w);
174: (void) XtSendDestroyNotify(dpy, w);
175: }
176:
177: Window XtTextStringCreate(dpy, parent, args, argCount)
178: Display *dpy;
179: Window parent;
180: ArgList args;
181: int argCount;
182: {
183: XrmNameList names;
184: XrmClassList classes;
185:
186: if (!initialized) TextKindsInitialize(dpy);
187: XtGetResources (dpy, stringResources, XtNumber(stringResources), args, argCount,
188: parent, "text", "Text", &names, &classes);
189: if (textString == NULL) {
190: textString = (char *) XtMalloc (1000);
191: textLength = 1000;
192: }
193: /* need option for specifying read append mode */
194: source = XtStringSourceCreate (textString, textLength, editMode);
195: return (AsciiTextCreate (dpy, parent, args, argCount, names, classes, source));
196: }
197:
198: XtTextStringDestroy(dpy, w)
199: Display *dpy;
200: Window w;
201: {
202: XDestroyWindow(dpy, w);
203: (void) XtSendDestroyNotify(dpy, w);
204: }
205:
206: Window XtTextSourceCreate(dpy, parent, args, argCount, passedSource)
207: Display *dpy;
208: Window parent;
209: ArgList args;
210: int argCount;
211: int *passedSource; /* ||| NOTE: should be in args */
212: {
213: XrmNameList names;
214: XrmClassList classes;
215:
216: if (!initialized) TextKindsInitialize(dpy);
217: XtGetResources (dpy, rawResources, XtNumber(rawResources), args, argCount, parent,
218: "text", "Text", &names, &classes);
219: return (AsciiTextCreate (dpy, parent, args, argCount, names, classes,
220: passedSource));
221: }
222:
223: XtTextSourceDestroy(dpy, w)
224: Display *dpy;
225: Window w;
226: {
227: XDestroyWindow(dpy, w);
228: (void) XtSendDestroyNotify(dpy, w);
229: }
230:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.