Annotation of researchv9/X11/src/X.V11R1/clients/xedit/xedit.c, revision 1.1.1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.