|
|
1.1 root 1: #ifndef lint
2: static char rcs_id[] = "$Header: xedit.c,v 1.10 87/09/11 08:22:18 toddb Exp $";
3: #endif
4:
5: /*
6: * COPYRIGHT 1987
7: * DIGITAL EQUIPMENT CORPORATION
8: * MAYNARD, MASSACHUSETTS
9: * ALL RIGHTS RESERVED.
10: *
11: * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
12: * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
13: * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR
14: * ANY PURPOSE. IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
15: *
16: * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT RIGHTS,
17: * APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN ADDITION TO THAT
18: * SET FORTH ABOVE.
19: *
20: *
21: * Permission to use, copy, modify, and distribute this software and its
22: * documentation for any purpose and without fee is hereby granted, provided
23: * that the above copyright notice appear in all copies and that both that
24: * copyright notice and this permission notice appear in supporting documentation,
25: * and that the name of Digital Equipment Corporation not be used in advertising
26: * or publicity pertaining to distribution of the software without specific,
27: * written prior permission.
28: */
29:
30: #include "xedit.h"
31:
32: int Editable;
33: int saved;
34: int backedup;
35: int lastChangeNumber;
36: char *displayname;
37: char *filename;
38: char *loadedfile;
39: char *savedfile;
40: char *searchstring;
41: char *replacestring;
42:
43: Window master;
44: Window Row1;
45: Window Row2;
46: Window fileBox;
47: Window replaceBox;
48: Window searchBox;
49: Window textwindow;
50: Window messwindow;
51: Window undoBox;
52: Window labelwindow;
53:
54: Window quitbutton;
55: Window loadbutton;
56: Window savebutton;
57: Window editbutton;
58: Window filenamewindow;
59:
60: Window searchstringwindow;
61: Window replacestringwindow;
62: Window qbutton;
63: Window ubutton;
64: Window umbutton;
65: Window searchbutton;
66: Window lsearchbutton;
67: Window replacebutton;
68: Window replaceallbutton;
69: Window jumpbutton;
70:
71: Display *CurDpy;
72:
73: XtTextSource *source, *asource, *dsource, *psource, *messsource;
74: XtTextSink *sink;
75:
76: extern DoQ();
77:
78: static Arg Row1Desc[]={
79: { XtNwindow, (caddr_t) &quitbutton },
80: { XtNwindow, (caddr_t) &savebutton },
81: { XtNwindow, (caddr_t) &editbutton },
82: /* { XtNwindow, (caddr_t) &qbutton }, */
83: { XtNwindow, (caddr_t) &loadbutton },
84: { XtNwindow, (caddr_t) &filenamewindow },
85: { XtNwindow, (caddr_t) &ubutton },
86: { XtNwindow, (caddr_t) &umbutton },
87: { XtNwindow, (caddr_t) &jumpbutton },
88: /* { XtNwindow, (caddr_t) &linebutton }, */
89: { NULL, NULL }
90: };
91:
92: static Arg Row2Desc[]={
93: { XtNwindow, (caddr_t) &lsearchbutton },
94: { XtNwindow, (caddr_t) &searchbutton },
95: { XtNwindow, (caddr_t) &searchstringwindow },
96: { XtNwindow, (caddr_t) &replacebutton },
97: { XtNwindow, (caddr_t) &replaceallbutton },
98: { XtNwindow, (caddr_t) &replacestringwindow },
99: { NULL, NULL }
100: };
101:
102:
103: Arg *fixup(args)
104: Arg *args;
105: {
106: Arg *arglist = args;
107: while(arglist->name){
108: arglist->value = *((caddr_t*)arglist->value);
109: arglist++;
110: }
111: return args;
112: }
113:
114: makeButtonsAndBoxes()
115: {
116: int boxHeight;
117: static Arg TextArgDesc[] = {
118: { XtNtextOptions , (caddr_t)(scrollVertical | wordBreak) },
119: { XtNname, (caddr_t)"EditWindow" },
120: };
121: static Arg MessArgs[] = {
122: { XtNtextOptions, (caddr_t)(scrollVertical | wordBreak) },
123: { XtNname, (caddr_t)"MessageWindow" },
124: };
125: static Arg labelArgs[] = {
126: { XtNjustify, (caddr_t)XtjustifyCenter },
127: { XtNlabel, (caddr_t)"no file yet" },
128: };
129: Row1 = QXtButtonBoxCreate(CurDpy, master, 0,0);
130: quitbutton = makeCommandButton(Row1, "Quit", DoQuit);
131: savebutton = makeCommandButton(Row1, "Save", DoSave);
132: editbutton = makeCommandButton(Row1, "Edit", DoEdit);
133: /* qbutton = makeCommandButton(Row1, "q", DoQ); */
134: loadbutton = makeCommandButton(Row1, "Load", DoLoad);
135: filenamewindow = makeStringBox(Row1, filename,110);
136: ubutton = makeCommandButton(Row1, "Undo", DoUndo);
137: umbutton = makeCommandButton(Row1, "More", DoUndoMore);
138: jumpbutton = makeCommandButton(Row1, "Jump", DoJump);
139: /* linebutton = makeCommandButton(Row1, "Line?", DoLine); */
140: Row2 = QXtButtonBoxCreate(CurDpy, master, 0,0 );
141: lsearchbutton = makeCommandButton(Row2, "<< ", DoSearchLeft);
142: searchbutton = makeCommandButton(Row2,"Search >>",DoSearchRight);
143: searchstringwindow = makeStringBox(Row2, searchstring, 120);
144: replacebutton= makeCommandButton(Row2, "Replace", DoReplaceOne);
145: replaceallbutton = makeCommandButton(Row2, "All", DoReplaceAll);
146: replacestringwindow = makeStringBox(Row2, replacestring, 120);
147: QXtButtonBoxAddButton(CurDpy, Row1, fixup(Row1Desc), XtNumber(Row1Desc));
148: QXtButtonBoxAddButton(CurDpy, Row2, fixup(Row2Desc), XtNumber(Row2Desc));
149: {
150: static Arg getargs[] = {
151: { XtNheight, 0 }
152: };
153: QXtButtonBoxGetValues(CurDpy, Row1, getargs, XtNumber(getargs));
154: boxHeight = (int)(getargs[0].value);
155: }
156:
157: messsource = (XtTextSource*)TCreateEDiskSource("/dev/null", XttextEdit);;
158: messwindow = QXtTextSourceCreate(CurDpy, master, MessArgs,
159: XtNumber(MessArgs), messsource);
160: labelwindow= QXtLabelCreate(CurDpy,master, labelArgs, XtNumber(labelArgs));
161: textwindow = QXtTextSourceCreate(CurDpy, master, TextArgDesc,
162: XtNumber(TextArgDesc), source);
163: QXtVPanedRefigureMode(CurDpy, master, FALSE);
164: QXtVPanedWindowAddPane(CurDpy, master, Row1, 0, boxHeight, 100, FALSE);
165: QXtVPanedWindowAddPane(CurDpy, master, Row2, 1, boxHeight,100, FALSE);
166: QXtVPanedWindowAddPane(CurDpy, master, messwindow, 2, 30, 5000,TRUE);
167: QXtVPanedWindowAddPane(CurDpy, master, labelwindow, 3, 5, 50,FALSE);
168: QXtVPanedWindowAddPane(CurDpy, master, textwindow, 4, 50, 5000,TRUE);
169: QXtVPanedRefigureMode(CurDpy, master, TRUE);
170: }
171:
172: static XrmResourceDataBase rdb;
173: static int mHeight, mWidth, mX, mY;
174: static char *geometry;
175: int false = 0;
176: char *backupNamePrefix;
177: char *backupNameSuffix;
178: int editInPlace;
179: int enableBackups;
180:
181: static Resource resourcelist[] = {
182: {XtNwidth, XtCWidth, XrmRInt, sizeof(int),
183: (caddr_t)&mWidth, (caddr_t)NULL},
184: {XtNheight, XtCHeight, XrmRInt, sizeof(int),
185: (caddr_t)&mHeight, (caddr_t)NULL},
186: {XtNx, XtCX, XrmRInt, sizeof(int),
187: (caddr_t)&mX, (caddr_t)NULL},
188: {XtNy, XtCY, XrmRInt, sizeof(int),
189: (caddr_t)&mY, (caddr_t)NULL},
190: {"geometry", "Geometry", XrmRString, sizeof(char *),
191: (caddr_t)&geometry, NULL},
192: {"EditInPlace", "editInPlace", XrmRBoolean, sizeof(int),
193: (XtArgVal)&editInPlace, (caddr_t)&false},
194: {"EnableBackups", "enableBackups", XrmRBoolean, sizeof(int),
195: (XtArgVal)&enableBackups, (caddr_t)&false},
196: {"BackupNamePrefix", "backupNamePrefix", XrmRString, sizeof(char *),
197: (XtArgVal)&backupNamePrefix, NULL},
198: {"BackupNameSuffix", "backupNameSuffix", XrmRString, sizeof(char *),
199: (XtArgVal)&backupNameSuffix, NULL},
200: };
201:
202:
203: initResources(argc, argv)
204: int argc;
205: char **argv;
206: {
207: FILE *rfile;
208: char str[1024], *displayName;
209: int numargs;
210: XrmNameList name;
211: XrmClassList class;
212: static XrmOptionDescRec opTable[] = {
213: {"=", "geometry", XrmoptionStickyArg, (caddr_t)NULL },
214: };
215: Arg args[5];
216: numargs = 0;
217: XtInitialize();
218: sprintf(str, "%s/.Xdefaults", getenv("HOME"));
219: if (rfile = fopen(str, "r")){
220: XrmGetDataBase(rfile, &rdb);
221: XrmSetCurrentDataBase(rdb);
222: fclose(rfile);
223: } else {
224: /* use system defaults here? */
225: }
226: XrmParseCommand(opTable, XtNumber(opTable), "xedit", &argc, argv);
227: if(argv[1] && rindex(argv[1], ':')){
228: displayName = argv[1];
229: argc--; argv++;
230: } else
231: displayName = "";
232: if ((CurDpy = XOpenDisplay(displayName)) == 0) {
233: printf("xedit: Error While trying to open display!\n");
234: exit(1);
235: }
236: QXtGetResources(CurDpy, resourcelist, XtNumber(resourcelist),
237: 0,0, QRootWindow(CurDpy, DefaultScreen(CurDpy)),
238: "xedit","Xedit", &name, &class);
239: XParseGeometry(geometry, &mX, &mY, &mWidth, &mHeight);
240: if((!mHeight) || (!mWidth)){
241: #ifdef X11
242: mWidth = 500;
243: mHeight = 500;
244: #endif X11
245: #ifdef X10
246: OpaqueFrame frame;
247: int cwidth, cheight;
248: WindowInfo info;
249: frame.bdrwidth = 1;
250: frame.border = BlackPixmap;
251: frame.background = WhitePixmap;
252: master = XCreate(argv[0], argv[0], geometry, "=504x470-0-300",
253: &frame, 400, 250);
254: XQueryWindow(master, &info);
255: XDestroyWindow(master);
256: mX = info.x;
257: mY = info.y;
258: mWidth = info.width;
259: mHeight = info.height;
260: #endif X10
261: }
262: MakeArg(XtNname, (caddr_t) "xedit");
263: MakeArg(XtNheight, (caddr_t) mHeight);
264: MakeArg(XtNwidth, (caddr_t) mWidth);
265: MakeArg(XtNx, (caddr_t) mX);
266: MakeArg(XtNy, (caddr_t) mY);
267: master = QXtVPanedWindowCreate(CurDpy, QRootWindow(CurDpy,
268: DefaultScreen(CurDpy)),
269: args, numargs);
270: #ifdef X11
271: XtMakeMaster(CurDpy, master);
272: #endif X11
273: QXStoreName(CurDpy, master, "xedit");
274: #ifdef X11
275: XDefineCursor(CurDpy, master, XtGetCursor(CurDpy, XC_left_ptr));
276: #endif X11
277: #ifdef X10
278: XDefineCursor(master, XtGetCursor("left_ptr"));
279: #endif X10
280: if(argv[1]) strcpy(filename, argv[1]);
281: }
282:
283: main(argc, argv)
284: int argc;
285: char **argv;
286: {
287: XEvent event;
288: backedup = 0;
289: saved = 0;
290: filename = malloc(1000);
291: searchstring = malloc(1000);
292: replacestring = malloc(1000);
293: initResources(argc, argv);
294: dsource = (XtTextSource*)TCreateEDiskSource("/dev/null", XttextRead);
295: asource = TCreateApAsSource();
296: source = CreatePSource(dsource, asource);
297: makeButtonsAndBoxes();
298: QXMapWindow(CurDpy, master);
299: if (*filename) DoLoad();
300: while (1) {
301: QXNextEvent(CurDpy, &event);
302: XtDispatchEvent(&event);
303: }
304: }
305:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.