Annotation of coherent/g/usr/bin/uuinstall/display_rec.c, revision 1.1.1.1

1.1       root        1: /* display_rec.c: Display a sys, port or dial entry. This will open
                      2:  * the appropriate file and read an entire port, sys, or dial entry,
                      3:  * diaplaying it on the screen. If there are too many lines to be
                      4:  * displayed, the user will be told that he may select the modify
                      5:  * option from the action menu to be pulled into an editor so that
                      6:  * he may view the entire entry in that manner.
                      7:  */
                      8: 
                      9: #include "uuinstall.h"
                     10: 
                     11: /* these are the possible operations we will perform. This is stored
                     12:  * in opflag.
                     13:  */
                     14: 
                     15: #define VIEW   0166
                     16: #define DELETE         0144
                     17: #define EDIT   0155
                     18: 
                     19: display_rec(position, opflag)
                     20: int position;                  /* the record # we are looking for */
                     21: int opflag;                    /* this will tell us if we are viewing,
                     22:                                 * deleting, or going to edit an entry.
                     23:                                 */
                     24: {
                     25:        int counter = -1;
                     26:        int lines_before = 0;
                     27:        int entry_lines = 0;
                     28:        char fname[30] = {"/usr/lib/uucp/"};
                     29:        char workstring[80];
                     30:        char b;
                     31:        FILE * filefd;          /* point to file we will work with */
                     32:        char compare[7] = {""}; /* hold the string (sys, port or dial)
                     33:                                 * that we will compare against when
                     34:                                 * trying to determine the boundaries of
                     35:                                 * an entry within one of these files.
                     36:                                 */
                     37: 
                     38:        /* determine which file we're working with, build our filename
                     39:         * string and compare string based upon this.
                     40:         */
                     41: 
                     42:        if (dialflag){
                     43:                strcat(fname,"dial");
                     44:                strcpy(compare,"dialer");
                     45:        }
                     46:        if (sysflag){
                     47:                strcat(fname,"sys");
                     48:                strcpy(compare,"system");
                     49:        }
                     50:        if (portflag){
                     51:                strcat(fname,"port");
                     52:                strcpy(compare,"port");
                     53:        }
                     54: 
                     55:        /* open the file */
                     56:        if ((filefd = fopen(fname,"r")) == NULL){
                     57:                mvwaddstr(portwin,12,24,"Error opening file for reading!");
                     58:                wrefresh(portwin);
                     59:                sleep(1);
                     60:                wclear(portwin);
                     61:                wrefresh(portwin);
                     62:                return;
                     63:        }
                     64: 
                     65:        /* read the file, looking for "port", "system" or "dialer", depending
                     66:         * upon which file we're reading. When a line like this is found,
                     67:         * increment our counter, then test to see if the counter matches the
                     68:         * position (or entry #) within the file we're searching. If it matches,
                     69:         * terminate the loop. This is how we find the entry we want to display.
                     70:         * We will also keep track of the number of lines we read before finding
                     71:         * the desired entry and the number of lines in the entry. This
                     72:         * information will be used to delete or edit an entry, if we are indeed 
                     73:         * going to perform a delete or edit operation.
                     74:         */
                     75: 
                     76:        while (fgets(workstring, sizeof(workstring) -1, filefd) != NULL){
                     77:                if (strstr(workstring,compare))
                     78:                        counter ++;
                     79:                if(position == counter)
                     80:                        break;
                     81:                if((opflag == DELETE) || (opflag == EDIT))
                     82:                        lines_before ++;
                     83:        }
                     84: 
                     85:        /* clear other windows */
                     86:        wclear(selwin);
                     87:        wclear(promptwin);
                     88:        wrefresh(promptwin);
                     89:        wrefresh(selwin);
                     90: 
                     91:        /* display the entry for view and delete operations*/           
                     92: 
                     93:        if(opflag != EDIT){
                     94:                wclear(portwin);
                     95:                wmove(portwin,0,22);
                     96:                wstandout(portwin);
                     97:                wprintw(portwin,"Entry from file %s .",fname);
                     98:                wstandend(portwin);
                     99: 
                    100:                /* print the line that is already in our buffer */
                    101:                mvwaddstr(portwin,2,1,workstring);
                    102:        }
                    103:        entry_lines++;
                    104: 
                    105:        /* now print the rest of the entry. We read and print until
                    106:         * we hit a line consisting only of a newline char.
                    107:         */
                    108: 
                    109:        while (fgets(workstring, sizeof(workstring) -1, filefd) != NULL){
                    110:                if(workstring[0] != '\n'){      
                    111: 
                    112:                        /* test for entry too long for screen. */
                    113:                        if ( (2 + entry_lines) <= 22){
                    114:                                if(opflag != EDIT)
                    115:                                        mvwaddstr(portwin,2+entry_lines,1,workstring);
                    116:                        }else{
                    117:                                if (opflag != EDIT){
                    118:                                        wstandout(portwin);
                    119:                                        mvwaddstr(portwin,23,3,"Entry too long! To view entire entry, select MODIFY mode from action menu.");
                    120:                                        wstandend(portwin);
                    121:                                        wrefresh(portwin);
                    122:                                }
                    123:                        }
                    124:                        entry_lines++;
                    125:                }else{
                    126:                        break;
                    127:                }
                    128:        }
                    129: 
                    130:        fclose(filefd);
                    131:        wrefresh(portwin);
                    132: 
                    133:        /* if we're deleting, get a confirmation before continuing. IF not,
                    134:         * we're just viewing, so any old keypress will send us back to the
                    135:         * main menu.
                    136:         */
                    137: 
                    138:        if(opflag == DELETE){
                    139:                mvwaddstr(portwin,1,19,"Do you wish to delete this entry? (y/n)");
                    140:                wrefresh(portwin);
                    141:                b = ' ';
                    142:                do{
                    143:                        b = wgetch(portwin);
                    144:                }
                    145:                while ( (b != 'n') && (b != 'y') );
                    146: 
                    147:                if (b == 'y')
                    148:                        delete_entry(fname, lines_before, entry_lines, 0);
                    149:        }else{
                    150:                if(opflag == EDIT){
                    151:                        delete_entry(fname, lines_before, entry_lines, 1);
                    152:                }else{
                    153:                        mvwaddstr(portwin,1,21,"Press any key to return to main menu.");
                    154:                        wrefresh(portwin);
                    155:                        b = wgetch(portwin);
                    156:                }
                    157:        }
                    158:        wclear(portwin);
                    159:        wrefresh(portwin);
                    160: }

unix.superglobalmegacorp.com

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