Annotation of coherent/d/support/bbsadmin/wfile4.c, revision 1.1

1.1     ! root        1: /* wfile.c
        !             2:  * This routine will write a contents entry to a specified file
        !             3: */
        !             4: 
        !             5: #define MASTERFILE "Contents"
        !             6: #define TRACE printf
        !             7: #define PATHNAME "/usr/spool/uucppublic/"
        !             8: #define LENPATH 22
        !             9: #define NAMELOCATE 2,1
        !            10: #define DESCLOCATE 4,1
        !            11: #define DATELOCATE 6,1
        !            12: #define SIZELOCATE 6,30
        !            13: #define PARTLOCATE 6,49
        !            14: #define REQLOCATE 9,1
        !            15: #define NOTELOCATE 12,1
        !            16: #define PATHLOCATE 15,1
        !            17: #define PATHLOCATE2 16,1
        !            18: #define PATHLOCATE3 17,1
        !            19: #define NAMEHI 2,12
        !            20: #define DESCHI 5,1
        !            21: #define DATEHI 7,5
        !            22: #define SIZEHI 7,30
        !            23: #define PARTHI 7,60
        !            24: #define REQHI 10,2
        !            25: #define NOTEHI  13,2
        !            26: #define PATHHI 18,2
        !            27: #define PATHHI2 18,34
        !            28: 
        !            29: #include <stdio.h>
        !            30: #include <curses.h>
        !            31: 
        !            32: char filename[14];
        !            33: 
        !            34: void entry_screen();
        !            35: int get_data();
        !            36: void getstring();
        !            37: 
        !            38: struct entry{
        !            39:                char filename [15];
        !            40:                char filesize [10];
        !            41:                char date[7];
        !            42:                char description [78];
        !            43:                char requires [60];
        !            44:                char notes [78];
        !            45:                char pathname [60];
        !            46:                int noparts;
        !            47:            }
        !            48: 
        !            49: 
        !            50: main()
        !            51: {
        !            52: WINDOW *win2;
        !            53: int x;
        !            54: 
        !            55:        initscr();
        !            56:        raw();
        !            57: 
        !            58:        if((win2=newwin(20, 79, 0,0)) == NULL)
        !            59:        {
        !            60:                printf("\007Window Memroy allocation for win2 failed!\n");
        !            61:                exit(1);
        !            62:        }
        !            63: 
        !            64: 
        !            65: /* the following loop will draw the data entry screen and then go into
        !            66:  * the function to get the data. This will continue until a '1' is
        !            67:  * returned from get_data.
        !            68: */
        !            69: 
        !            70:        do
        !            71:        {
        !            72:                entry_screen(win2);
        !            73:                x = get_data(win2);
        !            74:        }
        !            75:        while (x == 0);
        !            76:        
        !            77:        noraw();
        !            78:        endwin();
        !            79: }
        !            80: 
        !            81: 
        !            82: /* this function will draw the file entry screen */
        !            83: 
        !            84: void entry_screen(win2)
        !            85: WINDOW *win2;
        !            86: 
        !            87: {
        !            88: int x;
        !            89: 
        !            90:        wclear(win2);
        !            91: 
        !            92:        /* print field labels */
        !            93: 
        !            94:        wmove (win2,0,31);
        !            95:        waddstr (win2,"Add record to file");
        !            96: 
        !            97:        wmove (win2, NAMELOCATE );
        !            98:        waddstr (win2,"Filename:");
        !            99: 
        !           100:        wmove (win2, DESCLOCATE);
        !           101:        waddstr(win2,"Description:");
        !           102: 
        !           103:        wmove(win2, DATELOCATE );
        !           104:        waddstr(win2,"Date added/modified:");
        !           105: 
        !           106:        wmove(win2, SIZELOCATE);
        !           107:        waddstr(win2,"File size:");
        !           108: 
        !           109:        wmove(win2, PARTLOCATE);;
        !           110:        waddstr(win2,"Number of parts to download:");
        !           111: 
        !           112:        wmove(win2, REQLOCATE );
        !           113:        waddstr(win2,"Requires these other files:");
        !           114: 
        !           115:        wmove(win2, NOTELOCATE);
        !           116:        waddstr(win2,"Other notes:");
        !           117: 
        !           118:        wmove(win2, PATHLOCATE);
        !           119:        waddstr(win2, "Path to download file... Must give complete path including filename.");
        !           120:        wmove (win2, PATHLOCATE2);
        !           121:        waddstr(win2,"If a file is split into several parts, enter the first filename part");
        !           122:        wmove (win2, PATHLOCATE3);
        !           123:        waddstr(win2,"leaving the LAST character off of the filename:");
        !           124: 
        !           125: 
        !           126: /* highlite available fields */
        !           127: 
        !           128:        wstandout(win2);
        !           129: 
        !           130:        wmove (win2, NAMEHI);
        !           131:        waddstr(win2,"              ");
        !           132: 
        !           133:        wmove (win2,DESCHI);
        !           134:        for (x=1;x<79;x++)
        !           135:                waddstr(win2," ");
        !           136: 
        !           137:        wmove(win2, DATEHI);
        !           138:        waddstr(win2,"      ");
        !           139: 
        !           140:        wmove(win2, SIZEHI);
        !           141:        waddstr(win2,"          ");
        !           142: 
        !           143:        wmove(win2,PARTHI);
        !           144:        waddstr(win2,"  ");
        !           145:        
        !           146:        wmove (win2,REQHI);
        !           147:        for (x=1;x<61;x++)
        !           148:                waddstr(win2," ");
        !           149: 
        !           150:        wmove (win2,NOTEHI);
        !           151:        for (x=1;x<69;x++)
        !           152:                waddstr(win2," ");
        !           153:        
        !           154:        wmove (win2, PATHHI);
        !           155:        waddstr(win2,PATHNAME);
        !           156:                for (x=23;x<61;x++)
        !           157:                        waddstr(win2," ");
        !           158: 
        !           159:        wstandend(win2);
        !           160: 
        !           161:        refresh();
        !           162:        wrefresh(win2);
        !           163: 
        !           164: }
        !           165: 
        !           166: 
        !           167: /* this function will get the input and write it to a file */
        !           168: 
        !           169: int get_data(win2)
        !           170: WINDOW *win2;
        !           171: 
        !           172: {
        !           173: struct entry record;   
        !           174: /* char pathname[38]; */
        !           175: FILE *outfp;
        !           176: WINDOW *win3;
        !           177: int x;
        !           178: 
        !           179:        if( (win3=newwin(4,79,20,0)) == NULL )
        !           180:        {
        !           181:                wclear(win2);
        !           182:                wmove(win2,0,0);
        !           183:                wstandout(win2);
        !           184:                waddstr(win2,"\007Error allocating memory for win3. Press <RETURN>");
        !           185:                wrefresh(win2);
        !           186:                while('\n' != getch())
        !           187:                        ;
        !           188:                exit(1);
        !           189:        }
        !           190: 
        !           191:        wclear(win3);
        !           192:        wmove(win3,1,1);
        !           193:        waddstr(win3,"Enter a filename, or press <RETURN> to end");
        !           194:        wrefresh(win3);
        !           195:        getstring(win2, win3, NAMEHI, 14, 0);
        !           196:        strcpy(record.filename, filename);
        !           197: 
        !           198: 
        !           199:        if(strlen(record.filename) == 0)
        !           200:                exit(1);
        !           201: 
        !           202:        for(x=strlen(filename);x < sizeof (record.filename) ; x++)
        !           203:                record.filename[x] = '\0';
        !           204: 
        !           205:        wclear(win3);
        !           206:        wmove(win3,1,1);
        !           207:        waddstr(win3,"Describe the uses of this package");
        !           208:        wrefresh(win3);
        !           209: 
        !           210:        getstring(win2, win3, DESCHI, 78, 1);
        !           211:        strcpy(record.description, filename);
        !           212: 
        !           213:        for(x=strlen(filename);x < sizeof (record.description) ; x++)
        !           214:                record.description[x] = '\0';
        !           215: 
        !           216:        wclear(win3);
        !           217:        wmove(win3,1,1);
        !           218:        waddstr(win3,"Enter the date that the file was added or last modified");
        !           219:        wmove(win3,2,1);
        !           220:        waddstr(win3,"Enter no more than 6 characters");
        !           221:        wrefresh(win3);
        !           222: 
        !           223:        getstring(win2, win3, DATEHI, 6, 1);
        !           224:        strcpy(record.date, filename);
        !           225: 
        !           226:        for(x=strlen(filename);x < sizeof (record.date) ; x++)
        !           227:                record.date[x] = '\0';
        !           228: 
        !           229:        wclear(win3);
        !           230:        wmove(win3,1,1);
        !           231:        waddstr(win3,"Enter the file size in number of bytes");
        !           232:        wrefresh(win3);
        !           233: 
        !           234: 
        !           235:        getstring(win2, win3, SIZEHI, 10, 1);
        !           236:        strcpy(record.filesize, filename);
        !           237: 
        !           238:        for(x=strlen(filename);x < sizeof (record.filesize) ; x++)
        !           239:                record.filesize[x] = '\0';
        !           240: 
        !           241:        wclear(win3);
        !           242:        wmove(win3,3,1);
        !           243:        waddstr(win3,"Enter the number of parts that this file is divided into");
        !           244:        wrefresh(win3);
        !           245: 
        !           246:        getstring(win2, win3, PARTHI, 2, 1);
        !           247:        record.noparts = atoi(filename);
        !           248: 
        !           249: 
        !           250:        /* if the number of parts is 0 (not a split file), then we can
        !           251:         * cat the filename on to the end of the pathname. We can later
        !           252:         * test the length of the pathname to determine whether or not
        !           253:         * to ask for a pathname, as would be required for a split file.
        !           254:        */
        !           255: 
        !           256:        if(record.noparts ==0)
        !           257:        {
        !           258:                strcpy(record.pathname, PATHNAME);
        !           259:                strcat(record.pathname, record.filename);
        !           260:                wmove(win2,PATHHI);
        !           261:                wstandout(win2);
        !           262:                waddstr(win2, record.pathname);
        !           263:                wstandend(win2);
        !           264:                wrefresh(win2);
        !           265:        }
        !           266:        else
        !           267:                strcpy(record.pathname, PATHNAME);
        !           268: 
        !           269: 
        !           270:        wclear(win3);
        !           271:        wmove(win3,3,1);
        !           272:        waddstr(win3,"Enter the names of any support files required");
        !           273:        wrefresh(win3);
        !           274: 
        !           275:        getstring(win2, win3, REQHI, 60, 0);
        !           276:        if(strlen(filename) == 0 )
        !           277:        {
        !           278:                wmove(win2, REQHI);
        !           279:                wstandout(win2);
        !           280:                waddstr(win2,"none");
        !           281:                wstandend(win2);
        !           282:                wrefresh(win2);
        !           283:                strcpy(record.requires, "none");
        !           284:        }
        !           285:        else
        !           286:                strcpy(record.requires, filename);
        !           287: 
        !           288:        for(x=strlen(record.requires);x < sizeof (record.requires) ; x++)
        !           289:                record.requires[x] = '\0';
        !           290: 
        !           291:        wclear(win3);
        !           292:        wmove(win3,3,1);
        !           293:        waddstr(win3,"Enter any relevant notes about this file");
        !           294:        wrefresh(win3);
        !           295: 
        !           296:        getstring(win2, win3, NOTEHI, 78, 0);
        !           297:        if(strlen(filename) == 0)
        !           298:        {
        !           299:                wmove(win2,NOTEHI);
        !           300:                wstandout(win2);
        !           301:                waddstr(win2,"none");
        !           302:                wstandend(win2);
        !           303:                wrefresh(win2);
        !           304:                strcpy(record.notes, "none");
        !           305:        }
        !           306:        
        !           307:        else
        !           308:                strcpy(record.notes, filename);
        !           309: 
        !           310:        for(x=strlen(record.notes);x < sizeof (record.notes) ; x++)
        !           311:                record.notes[x] = '\0';
        !           312: 
        !           313:        wclear(win3);
        !           314:        wmove(win3,3,1);
        !           315:        waddstr(win3,"Enter the pathlist to this file.");
        !           316:        wrefresh(win3);
        !           317: 
        !           318:        /* if the length of the pathname is the default, as determined
        !           319:         * by "PATHNAME and LENPATH" #defs, then we need to get a
        !           320:         * completed pathlist.
        !           321:         * Remember, the need for this is also determined when asked
        !           322:         * for the number of parts (above).
        !           323:        */
        !           324: 
        !           325:        if(strlen(record.pathname) == LENPATH)
        !           326:        {
        !           327:                wmove(win2,PATHHI);
        !           328:                wstandout(win2);
        !           329:                waddstr(win2, PATHNAME);
        !           330:                wstandend(win2);
        !           331:                wrefresh(win2);
        !           332:                getstring(win2, win3, PATHHI2, 37, 1);
        !           333:                strcpy(record.pathname, PATHNAME);
        !           334:                strcat(record.pathname, filename);
        !           335:        }
        !           336: 
        !           337:        for(x=strlen(record.pathname);x < sizeof (record.pathname) ; x++)
        !           338:                record.pathname[x] = '\0';
        !           339: 
        !           340:        /* time to write the record */
        !           341: 
        !           342:        if ((outfp = fopen(MASTERFILE,"a")) == NULL)
        !           343:                {
        !           344:                wclear(win3);
        !           345:                wmove(win3,2,22);
        !           346:                waddstr("\007ERROR opening file for writing!");
        !           347:                wmove(win3,3,25);
        !           348:                waddstr(win3,"press <RETURN> to continue");
        !           349:                wrefresh(win3);
        !           350:                noraw();
        !           351:                while('\n' != wgetch(win3))
        !           352:                        ;
        !           353:                raw();
        !           354:                exit(1);
        !           355:                }
        !           356: 
        !           357:        else
        !           358:                {
        !           359:                fwrite(&record, sizeof(struct entry),1, outfp);
        !           360:                fclose(outfp);
        !           361:                wclear(win3);
        !           362:                wmove(win3, 2, 25);
        !           363:                waddstr(win3,"Record added... press <RETURN>");
        !           364:                wrefresh(win3);
        !           365:                noraw();
        !           366:                while('\n' != wgetch(win3))
        !           367:                        ;
        !           368:                raw();
        !           369:                wclear(win3);
        !           370:                wrefresh(win3);
        !           371:                }
        !           372: 
        !           373:        return(0);
        !           374:        
        !           375: }
        !           376: 
        !           377: 
        !           378: /* this function will get a string char by char and print to the approp.
        !           379:  * field on win2. This is to prevent people from entering too many characters.
        !           380: */
        !           381: 
        !           382: void getstring (win2, win3, row, col, maxchars, musthave)
        !           383: 
        !           384: WINDOW *win2, *win3;
        !           385: int row, col, maxchars, musthave;
        !           386: 
        !           387: {
        !           388: 
        !           389: 
        !           390:        noraw();
        !           391:        wmove(win2,row,col);
        !           392:        wrefresh(win2);
        !           393:        wgetstr(win2,filename);
        !           394:        wmove(win2,row,col);
        !           395:        wstandout(win2);
        !           396:        waddstr(win2,filename);
        !           397:        wstandend(win2);
        !           398:        wrefresh(win2);
        !           399:        raw();
        !           400: 
        !           401:        
        !           402: 
        !           403: }

unix.superglobalmegacorp.com

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