Annotation of coherent/d/support/bbsadmin/mwcbbs.c, revision 1.1.1.1

1.1       root        1: #include "contents.h"
                      2: #include <stdio.h>
                      3: #include <curses.h>
                      4: 
                      5: char selection[15];
                      6: char filenames [MAXRECORDS][15];
                      7: char workfile[15];
                      8: char workstring[80];
                      9: char getfiles[26][115];
                     10: char open_mode;
                     11: int place[MAXRECORDS];
                     12: int limit, screen_num;
                     13: 
                     14: void show_files(); /* this should display the filenames on a curses screen */
                     15: int lite(); /* inverse/normal video display of a filename */
                     16: int rfile(); /* read records from a given file */
                     17: void write_win(); /*does the actual work of writing filenames to a window */
                     18: void display_form(); /* for for displaying selected filename */
                     19: void display_record(); /* display selected filename */
                     20: void menu(); /* menu printed at bottom of screen */
                     21: void build_uucp(); /* this will build multiple uucp requests */
                     22: 
                     23: struct entry{
                     24:                char filename [15];
                     25:                char filesize [10];
                     26:                char date[7];
                     27:                char description [78];
                     28:                char requires [60];
                     29:                char notes [78];
                     30:                char pathname [60];
                     31:                int noparts;
                     32:            }
                     33: 
                     34: 
                     35: main(argc, argv)
                     36: int argc;
                     37: char *argv[];
                     38: {
                     39: 
                     40: int x;
                     41: 
                     42: 
                     43:        if(argc < 1)
                     44:        {
                     45:                printf("Usage: mwcbbs filename\n");
                     46:                exit(1);
                     47:        }
                     48: 
                     49: 
                     50:        if(strlen(argv[1]) == 0)
                     51:        {
                     52:                printf("filename not specified. Please enter a filename: ");
                     53:                gets (workfile);
                     54:        }
                     55:        else
                     56: 
                     57:                strcpy(workfile, argv[1]);
                     58: 
                     59:        open_mode = 'd';
                     60: 
                     61:        screen_num = 0;
                     62: 
                     63:        x = rfile();
                     64:        show_files  (x);
                     65: 
                     66: }
                     67: 
                     68: 
                     69: 
                     70: 
                     71: /*     show_files()
                     72:  *     This function will display the filenames read to a curses
                     73:  *     screen.
                     74: */
                     75: 
                     76: 
                     77: void show_files(EOF_FLAG)
                     78: int EOF_FLAG;
                     79: 
                     80: {
                     81: char arrow;
                     82: int prevcol =1;
                     83: int prevrow =0;                        /* prevcol = column before arrow          */
                     84: int newrow =0;                 /* prevrow = row before arrow             */
                     85: int newcol =1;                 /* newrow = row after arrow               */
                     86: int counter = 0;               /* newcol = column after arrow            */
                     87:                                
                     88:                                
                     89: WINDOW *win1, *win2;           
                     90:                                
                     91:        initscr();              
                     92:        noecho();
                     93:        raw();
                     94: 
                     95:        /* allocate memory for window. print message on failure. */
                     96: 
                     97:        if((win1=newwin(20, 79, 0,0)) == NULL)
                     98:        {
                     99:                printf("\007Window Memroy allocation for win1 failed!\n");
                    100:                exit(1);
                    101:        }
                    102: 
                    103:        if((win2=newwin(20, 79, 0,0)) == NULL)
                    104:        {
                    105:                printf("\007Window Memroy allocation for win2 failed!\n");
                    106:                exit(1);
                    107:        }
                    108: 
                    109:        write_win(win1);
                    110:        menu();
                    111: 
                    112: 
                    113: /*  highlite a filename. This is accomplished by going to a designated
                    114:  * row and column, as determined by the row and counter nested loops.
                    115:  * The innermost loop gets the character found, copies the retrieved 
                    116:  * character into a string and deletes the character from the screen.
                    117:  * When the filename has been deleted from the screen, it is reprinted
                    118:  * to the screen with highliting turned on. Padding for spaces must be
                    119:  * accounted for since deleting chars shifts everything on the line one
                    120:  * space to the left.
                    121: */
                    122: 
                    123:        /* print the first file in inverse video */
                    124: 
                    125:        lite (win1, prevrow, prevcol, 1);
                    126: 
                    127:        do
                    128:        {
                    129: 
                    130:        /* now we need to get a key (preferably an arrow) */
                    131: 
                    132: 
                    133: 
                    134:              arrow = getch();   /* This stupid code should allow to use arrows keys   */
                    135:              if (arrow == 27)  /* that looks more frendly than hjkl. Vlad 8/15/91    */
                    136:                {
                    137:                 getch();
                    138:                 arrow = getch(); /* When an arrow key is pressed, an escape  */
                    139:                 if (arrow == 68) /* sequence is returned. The value '27'     */
                    140:                    arrow = 'h';  /* begins the sequence and the relevant     */
                    141:                 if (arrow == 67) /* values needed end the sequence. The      */
                    142:                    arrow = 'l';  /* middle value is not needed, so it is     */
                    143:                 if (arrow == 66) /* skipped over with a getch() statement    */
                    144:                   arrow = 'j';
                    145:                 if (arrow == 65)
                    146:                    arrow = 'k';                
                    147:                 }
                    148: 
                    149: 
                    150: /* each movement case in the following switch...case will test to see if the
                    151:  * new position returns a space. If a space is returned, then we will hit
                    152:  * an empty field, which we don't want to do. If we hit an empty space,
                    153:  * then don't move the cursor.
                    154: */
                    155: 
                    156:                switch(arrow)
                    157:                {
                    158:                        case 'h':       /* move left */
                    159:                                newcol = prevcol - 15;
                    160:                                if (newcol < 1)
                    161:                                        newcol = 61;
                    162:                                if (' ' == mvwinch(win1,newrow,newcol))
                    163:                                        newcol = 1;
                    164:                                break;
                    165: 
                    166: 
                    167:                        case 'l':       /* move right */
                    168:                                newcol = prevcol + 15;
                    169:                                if (newcol > 61)
                    170:                                        newcol = 1;
                    171:                                if (' ' == mvwinch(win1,newrow,newcol))
                    172:                                        newcol = 1;
                    173:                                break;
                    174: 
                    175: 
                    176:                        case 'j':       /* move down */
                    177:                                newrow = prevrow + 1;
                    178:                                if (newrow == 20)
                    179:                                        newrow = 0;
                    180:                                if (' ' == mvwinch(win1,newrow,newcol))
                    181:                                        newrow = 0;
                    182:                                break;
                    183: 
                    184: 
                    185:                        case 'k':       /* move up */
                    186:                                newrow = prevrow -1;
                    187:                                if (newrow == -1)
                    188:                                        newrow = 19;
                    189:                                if (' ' == mvwinch(win1,newrow,newcol))
                    190:                                        newrow = 0;
                    191:                                break;
                    192: 
                    193: 
                    194:                        case 'p':       
                    195:                                screen_num --;
                    196:                                newrow = 0;
                    197:                                newcol = 1;
                    198:                                if (screen_num < 0)
                    199:                                        screen_num = 0;
                    200:                                else
                    201:                                {
                    202:                                        EOF_FLAG = rfile();
                    203:                                        write_win(win1);
                    204:                                }
                    205:                                break;
                    206:        
                    207: 
                    208:                        case 'n':       
                    209:                                newrow = 0;
                    210:                                newcol = 1;
                    211:                                if (EOF_FLAG == -1)
                    212:                                        break;
                    213:                                else
                    214:                                {
                    215:                                        screen_num ++;
                    216:                                        EOF_FLAG = rfile();
                    217:                                        write_win(win1);
                    218:                                }
                    219:                                break;  
                    220: 
                    221: 
                    222:                        case 'q':
                    223:                                break;
                    224: 
                    225:                        case 'Q':
                    226:                                break;
                    227: 
                    228:                        case 'S':
                    229:                        case 's':
                    230:                                wclear(win1);
                    231:                                wrefresh(win1);
                    232:                                wclear(win2);
                    233:                                display_form(win2);
                    234:                                display_record(win2,prevrow, prevcol, screen_num);
                    235:                                clear();
                    236:                                menu();
                    237:                                write_win(win1);
                    238:                                wclear(win2);
                    239:                                wrefresh(win2);
                    240:                                refresh();
                    241:                                wrefresh(win1);
                    242:                                break;
                    243: 
                    244:                        default:
                    245:                                newcol = prevcol;
                    246:                                newrow = prevrow;
                    247:                                break;
                    248: 
                    249:                }
                    250: 
                    251:        /* print previous file highlited in normal video */
                    252:        lite (win1, prevrow, prevcol, 0);       
                    253: 
                    254:        /* print new filename selection in inverse video */
                    255: 
                    256:        lite (win1, newrow, newcol, 1);
                    257: 
                    258:        /* set our previous coordinates so that we can go back
                    259:         * and unlite a field when the next directin is given.
                    260:        */
                    261: 
                    262:                prevrow = newrow;
                    263:                prevcol = newcol;
                    264: 
                    265:        
                    266:        }
                    267:        while (arrow != 'q');
                    268: 
                    269:        echo();
                    270:        noraw();
                    271:        endwin();
                    272: }
                    273:                
                    274: 
                    275:                
                    276: 
                    277: /* this routine will take a pointer to a window and row/col
                    278:  * coordinates and print a filename found at the coordinates
                    279:  * in INVERSE video.
                    280: */
                    281: 
                    282: int lite(win1, row, col, liteflag)
                    283: 
                    284: WINDOW *win1;
                    285: int row, col, liteflag;
                    286: 
                    287: {
                    288: 
                    289: int x,y;
                    290: char litestring[15];
                    291: 
                    292:        wmove(win1, row,col);
                    293: 
                    294:        /* get existing filename char by char, deleting each
                    295:         * char as it is read into a string variable.
                    296:        */
                    297:        
                    298:        for(x=0; x<15; x++)
                    299:        {
                    300:                litestring[x] = winch(win1);
                    301:        /* if we hit a space, we've hit the end of the filename */
                    302:                if(litestring[x] == ' ')
                    303:                        break;
                    304:                wdelch(win1);
                    305:        }
                    306: 
                    307:        litestring[x] = '\0';
                    308: 
                    309: 
                    310:        /* repad the spaces to keep the remaning filenames
                    311:         * on this row in their proper columns.
                    312:        */
                    313: 
                    314:        for(y=0;y<x;y++)
                    315:                winsch(win1,' ');
                    316: 
                    317:        if (liteflag == 1)
                    318:                wstandout(win1);
                    319: 
                    320:        waddstr(win1, litestring);
                    321:        wmove(win1, row, col);
                    322: 
                    323:        if (liteflag == 1)
                    324:                wstandend(win1);
                    325: 
                    326: 
                    327:        /* copy filename to a string to be displayed on stdscr.
                    328:         * as a filename is highlited, it is also displayed on
                    329:         * stdscr. 'selection' will be used in case the user
                    330:         * hits return to locate the filename's entry in the
                    331:         * Contents file.
                    332:        */
                    333: 
                    334:        strcpy(selection, litestring);
                    335:        move (23,0);
                    336:        printw("Selected filename is: %14s", selection);
                    337: 
                    338:        refresh();
                    339:        wrefresh(win1);
                    340: 
                    341:        return(0);
                    342: 
                    343: }
                    344:                
                    345: 
                    346:                
                    347: 
                    348: 
                    349: int rfile()
                    350: 
                    351: {
                    352: struct entry record;
                    353: FILE *infp;
                    354: int EOF_FLAG;
                    355: 
                    356:        /* open file, abort on error */
                    357: 
                    358:        if ((infp = fopen(workfile,"r")) == NULL)
                    359:                {
                    360:                printf("\007ERROR opening file for input!\n");
                    361:                exit(1);
                    362:                }
                    363: 
                    364:        /* open a file then go to a an offset calculated by a 
                    365:         * value passed from the calling program. Once we hit
                    366:         * the max number of records that can be held by a screen,
                    367:         * terminate the read and set a flag to show that we did
                    368:         * not hit EOF. If we did hit EOF, terminate the loop
                    369:         * and set a flag to show that we did hit EOF.
                    370:        */
                    371: 
                    372:        /* start reading from a specified point in the file */
                    373:        fseek(infp, (sizeof (struct entry) * (screen_num * 100)), 0l);
                    374: 
                    375:        limit = 0;
                    376:        while((fread(&record, sizeof(struct entry),1, infp)) != 0)
                    377:                {
                    378:                strcpy(filenames[limit], record.filename);
                    379:                place[limit] = limit;
                    380:                limit++;
                    381:                if (limit == 100)
                    382:                        break;
                    383:                }
                    384: 
                    385:        /* if x made it to 100, then we did NOT hit EOF */
                    386: 
                    387: if ( (limit == 100) && (fread (&record,sizeof(struct entry),1,infp)) !=  0)
                    388:                EOF_FLAG = 0;
                    389:        else
                    390:                EOF_FLAG = -1;
                    391: 
                    392:        fclose(infp);
                    393:        return (EOF_FLAG);
                    394: 
                    395: }
                    396: 
                    397: 
                    398: 
                    399: /*
                    400:  * writewin();
                    401:  * this routine does the actual work of writing filenames to a window
                    402: */
                    403: 
                    404: void write_win(win1)
                    405: 
                    406: WINDOW *win1;
                    407: 
                    408: {
                    409: 
                    410: int r,c;       /* these are our rows and columns */
                    411: int counter = 0;       /* this counts the number of files written */
                    412: 
                    413: 
                    414: 
                    415:        /* clear the window */
                    416:        wclear(win1);
                    417: 
                    418:        /* the following loop will write the filenames to the window.
                    419:         * 15 characters per screen field are allowed, since a filename 
                    420:         * can only be 14 chars in length. This will leave at least one 
                    421:         * space between filenames.
                    422:        */
                    423: 
                    424:                for (r = 0; r < 20; r++)
                    425:                {
                    426:        
                    427:                        /* if we've run out of files, terminate loop */
                    428: 
                    429:                        if (counter == limit)
                    430:                                break;
                    431: 
                    432:                        /* increment column by 15 positions. This
                    433:                         * will cause the filenames to line up
                    434:                         * on the window.
                    435:                        */
                    436:        
                    437:                        for (c = 1; c < 75; c+= 15)
                    438:                        {
                    439:                        wmove(win1, r, c);
                    440:                        waddstr(win1, filenames[counter]);
                    441: 
                    442:                /* increment counter. When it equals the number of
                    443:                 * records, passed as 'limit', the loop should
                    444:                 * terminate.
                    445:                */
                    446: 
                    447:                        counter ++;
                    448:                        if (counter == limit)
                    449:                                break;
                    450:                        }
                    451:                }
                    452: 
                    453: 
                    454: }
                    455: 
                    456: /* this function will draw a template for the selected record */
                    457: 
                    458: void display_form(win2)
                    459: WINDOW *win2;
                    460: 
                    461: 
                    462: {
                    463: int x;
                    464: 
                    465:        clear();
                    466:        wclear(win2);
                    467: 
                    468:        /* print field labels */
                    469: 
                    470:        wmove (win2, NAMELOCATE );
                    471:        waddstr (win2,"Filename:");
                    472: 
                    473:        wmove (win2, DESCLOCATE);
                    474:        waddstr(win2,"Description:");
                    475: 
                    476:        wmove(win2, DATELOCATE );
                    477:        waddstr(win2,"Date added/modified:");
                    478: 
                    479:        wmove(win2, SIZELOCATE);
                    480:        waddstr(win2,"File size:");
                    481: 
                    482:        if(open_mode != 'd')
                    483:                {
                    484:                wmove(win2, PARTLOCATE);;
                    485:                waddstr(win2,"Number of parts to download:");
                    486:                }
                    487: 
                    488:        wmove(win2, REQLOCATE );
                    489:        waddstr(win2,"Requires these other files:");
                    490: 
                    491:        wmove(win2, NOTELOCATE);
                    492:        waddstr(win2,"Other notes:");
                    493: 
                    494:        if(open_mode != 'd')
                    495:                {
                    496:                wmove(win2, PATHLOCATE);
                    497:                waddstr(win2, "Path to download file... Must give complete path including filename.");
                    498:                wmove (win2, PATHLOCATE2);
                    499:                waddstr(win2,"If a file is split into several parts, enter the first filename part");
                    500:                wmove (win2, PATHLOCATE3);
                    501:                waddstr(win2,"leaving the LAST character off of the filename:");
                    502:                }
                    503: 
                    504: 
                    505: /* highlite available fields */
                    506: 
                    507:        wstandout(win2);
                    508: 
                    509:        wmove (win2, NAMEHI);
                    510:        waddstr(win2,"              ");
                    511: 
                    512:        wmove (win2,DESCHI);
                    513:        for (x=1;x<79;x++)
                    514:                waddstr(win2," ");
                    515: 
                    516:        wmove(win2, DATEHI);
                    517:        waddstr(win2,"      ");
                    518: 
                    519:        wmove(win2, SIZEHI);
                    520:        waddstr(win2,"          ");
                    521: 
                    522:        if (open_mode != 'd')
                    523:                {
                    524:                wmove(win2,PARTHI);
                    525:                waddstr(win2,"  ");
                    526:                }
                    527: 
                    528:        wmove (win2,REQHI);
                    529:        for (x=1;x<61;x++)
                    530:                waddstr(win2," ");
                    531: 
                    532:        wmove (win2,NOTEHI);
                    533:        for (x=1;x<69;x++)
                    534:                waddstr(win2," ");
                    535: 
                    536:        if(open_mode != 'd')
                    537:                {
                    538:                wmove (win2, PATHHI);
                    539:                waddstr(win2,PATHNAME);
                    540:                        for (x=23;x<61;x++)
                    541:                                waddstr(win2," ");
                    542:                }
                    543: 
                    544:        wstandend(win2);
                    545:        refresh();
                    546:        wrefresh(win2);
                    547: 
                    548: 
                    549: 
                    550: }
                    551: 
                    552: /* following function prints the menu at the bottom of stdscr */
                    553: 
                    554: void menu()
                    555: 
                    556: {
                    557: /* print a menu of options to stdscr. They will appear at the bottom of
                    558:  * the screen with the first letter highlited as an indication to
                    559:  * the user that pressing the highlited key will result in the indicated
                    560:  * action.
                    561: */
                    562: 
                    563: 
                    564: 
                    565:        if(open_mode == 'd')
                    566:                {
                    567:                move (21,0);
                    568:                printw("Select file to download.");
                    569:                refresh();
                    570:                }
                    571: 
                    572:        move(21, 50);
                    573:        standout();
                    574:        printw("Options:");
                    575:        move(22,46);
                    576:        printw("n");
                    577:        move(23,46);
                    578:        printw("p");
                    579:        move(22,60);
                    580:        printw("q");
                    581:        move(23,60);
                    582:        printw("s");
                    583:        standend();
                    584:        move(22,47);
                    585:        addstr("ext page");
                    586:        move(23,47);
                    587:        addstr("rev. page");
                    588:        move(22,61);
                    589:        addstr("uit");
                    590:        move(23,61);
                    591:        addstr("elect file");
                    592: 
                    593: 
                    594: }
                    595: 
                    596: 
                    597: /* this function will open the file and read the appropriate record,
                    598:  * then display it on the window in the approp. positions.
                    599: */
                    600: 
                    601: void display_record (win2, row, col, screen_num)
                    602: WINDOW *win2;
                    603: int row, col, screen_num;
                    604: 
                    605: {
                    606: WINDOW *win3;
                    607: struct entry record;
                    608: char choice;
                    609: FILE *infp;
                    610: int x;
                    611: 
                    612:        if ((infp = fopen(workfile,"r")) == NULL)
                    613:        {
                    614:                printf("\007ERROR opening file for input!\n");
                    615:                exit(1);
                    616:        }
                    617: 
                    618:        fseek(infp,REC_FORMULA, 0l);
                    619:        fread(&record, sizeof (struct entry),1,infp);
                    620:        fclose (infp);
                    621: 
                    622:        wstandout(win2);
                    623: 
                    624:        wmove(win2,NAMEHI);
                    625:        waddstr(win2,record.filename);
                    626: 
                    627:        wmove(win2,DESCHI);
                    628:        waddstr(win2,record.description);
                    629: 
                    630:        wmove(win2,DATEHI);
                    631:        wprintw(win2,"%.6s",record.date);
                    632: 
                    633:        wmove(win2,SIZEHI);
                    634:        waddstr(win2,record.filesize);
                    635: 
                    636:        if(open_mode != 'd')
                    637:                {
                    638:                wmove(win2,PARTHI);
                    639:                wprintw(win2,"%.2d",record.noparts);
                    640:                }
                    641: 
                    642:        wmove(win2,REQHI);
                    643:        waddstr(win2,record.requires);
                    644: 
                    645:        wmove(win2,NOTEHI);
                    646:        waddstr(win2,record.notes);
                    647: 
                    648:        if(open_mode != 'd')
                    649:                {
                    650:                wmove(win2,PATHHI);
                    651:                waddstr(win2,record.pathname);
                    652:                }
                    653: 
                    654:        wrefresh(win2);
                    655:        wstandend(win2);
                    656: 
                    657: 
                    658: /* allocate another window as a message area */
                    659: 
                    660:        if ( (win3=newwin(2,40,20,0)) == NULL)
                    661:                {
                    662:                printf("Memory allocation for win3 failed!\n");
                    663:                exit(1);
                    664:                }
                    665: 
                    666: 
                    667:        wclear(win3);
                    668:        wmove(win3,0,0);
                    669:        waddstr(win3,"Press <RETURN> for next screen.");
                    670:        wrefresh(win3); 
                    671:        while(13 != wgetch(win3))
                    672:                ;
                    673: 
                    674: /* the following will display an extended screen of download information
                    675:  * and ask the user if he/she wants to download the file */
                    676: 
                    677:        wclear(win2);
                    678:        wmove(win2,1,0);
                    679:        waddstr(win2,"Size of file is: ");
                    680:        wmove(win2,1,40);
                    681:        waddstr(win2,"Number of parts to download: ");
                    682:        wstandout(win2);
                    683:        wmove(win2,1,18);
                    684:        waddstr(win2,record.filesize);
                    685:        wmove(win2,1,69);
                    686:        record.noparts = (record.noparts == 0) ? 1 : record.noparts;
                    687:        wprintw(win2,"%d",record.noparts);
                    688:        wstandend(win2);
                    689:        wmove(win2,3,5);
                    690:        wprintw(win2,"The following commands will be needed to download ");
                    691:        wstandout(win2);
                    692:        waddstr(win2,record.filename);
                    693:        wstandend(win2);
                    694: 
                    695: /* if there is more than one part to download, call a function to generate
                    696:  * the multiple uucp requests necessary to grab each piece from mwcbbs.
                    697: */
                    698: 
                    699:        if (record.noparts >1)
                    700:                {
                    701:                build_uucp(record);
                    702:                for (x=0;x<record.noparts;x++)
                    703:                        {
                    704:        /* limit ourselves to 10 displayed commands */
                    705:                        if (x==10)
                    706:                                {
                    707:                                wmove(win2,16,0);
                    708:                                wprintw(win2,"There are %d more parts to download which do not appear on ths screen.", (record.noparts - x));
                    709:                                break;
                    710:                                }
                    711:                        wmove(win2,5+x,0);
                    712:                        waddstr(win2,getfiles[x]);
                    713:                        }
                    714:                }
                    715:        else
                    716:                {
                    717:                strcpy(getfiles[0],HOST);
                    718:                strcat(getfiles[0],record.pathname);
                    719:                strcat(getfiles[0],RECEIVER);
                    720:                wmove(win2,5,0);
                    721:                waddstr(win2,getfiles);
                    722:                wrefresh(win2);
                    723:                }
                    724: 
                    725:        wclear(win3);
                    726:        wmove(win3,0,0);
                    727:        waddstr(win3,"Do you wish to download this file?");
                    728:        wmove(win3,1,0);
                    729:        waddstr(win3,"[y] yes or any other key to abort.");
                    730:        wrefresh(win2);
                    731:        wrefresh(win3);
                    732:        choice = '\0';
                    733:        while(choice == '\0')
                    734:                choice = wgetch(win3);
                    735: 
                    736:        if(choice == 'y' || choice == 'Y')
                    737:                {       
                    738:                wclear(win3);
                    739:                wmove(win3,0,0);
                    740:                waddstr(win3,"Processing requests...");
                    741:                wrefresh(win3);
                    742:                for(x = 0; x < record.noparts; x++)
                    743:                        system(getfiles[x]);
                    744:                wclear(win3);
                    745:                wmove(win3,0,0);
                    746:                waddstr(win3,"Press <RETURN> to continue.");
                    747:                wrefresh(win3);
                    748:                while(13 != wgetch(win3))
                    749:                        ;
                    750: 
                    751:                wclear(win2);
                    752:                wmove(win2,5,15);
                    753:                waddstr(win2,"The following file(s) will be recevied by your system:");
                    754:                wmove(win2,7,1);
                    755:                if (record.noparts <2)
                    756:                        {
                    757:                        waddstr(win2,record.pathname);
                    758:                        wrefresh(win2);
                    759:                        }
                    760:                else
                    761:                        {
                    762:                        record.pathname[strlen(record.pathname)] = 'a';
                    763:                        waddstr(win2,record.pathname);
                    764:                        record.pathname[(strlen(record.pathname) -1) ] = 97 + record.noparts-1;
                    765:                        wmove(win2,8,15);
                    766:                        waddstr(win2,"-thru-");
                    767:                        wmove(win2,9,1);
                    768:                        waddstr(win2,record.pathname);
                    769:                        wmove(win2,11,1);
                    770:                        waddstr(win2,"When you receive these files, concatenate them into one file");           
                    771:                        wmove(win2,12,1);
                    772:                        waddstr(win2,"named: ");
                    773:                        wstandout(win2);
                    774:                        wmove(win2,12,9);
                    775:                        waddstr(win2,record.filename);
                    776:                        wstandend(win2);
                    777:                        wrefresh(win2);
                    778:                        }
                    779:                wclear(win3);
                    780:                wmove(win3,0,0);
                    781:                waddstr(win3,"Press <RETURN> to continue.");
                    782:                wrefresh(win3);
                    783:                while(13 != wgetch(win3))
                    784:                        ;
                    785:                }
                    786: 
                    787: }
                    788: 
                    789: 
                    790: /* this function will take the pathname and append the necessary
                    791:  * character(s) to generate the multiple requests necessary to
                    792:  * download multipart files.
                    793: */
                    794: 
                    795: void build_uucp(record)
                    796: struct entry *record;
                    797: 
                    798: {
                    799: int x,y;
                    800: 
                    801:        y = strlen(record.pathname);
                    802: 
                    803:        for(x=0;x< record.noparts;x++)
                    804:                {
                    805:                strcpy(getfiles[x],HOST);
                    806:                record.pathname[y] = 97 + x;
                    807:                strcat(getfiles[x],record.pathname);
                    808:                strcat(getfiles[x],RECEIVER);
                    809:                }
                    810: }

unix.superglobalmegacorp.com

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