|
|
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.