Annotation of sbbs/sbbs2/dstsedit/dstsedit.c, revision 1.1.1.1

1.1       root        1: /* DSTSEDIT.C */
                      2: 
                      3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
                      4: 
                      5: #include <dos.h>
                      6: #include <dir.h>
                      7: #include <stdio.h>
                      8: #include <io.h>
                      9: #include <sys/stat.h>
                     10: #include <fcntl.h>
                     11: #include <errno.h>
                     12: #include <stdlib.h>
                     13: 
                     14: #include "..\sbbsdefs.h"
                     15: 
                     16: /****************************************************************************/
                     17: /* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
                     18: /* number of times if the attempted file is already open or denying access  */
                     19: /* for some other reason.      All files are opened in BINARY mode.                    */
                     20: /****************************************************************************/
                     21: int nopen(char *str, int access)
                     22: {
                     23:        char logstr[256];
                     24:        int file,share,count=0;
                     25: 
                     26: if(access==O_RDONLY) share=O_DENYWRITE;
                     27:        else share=O_DENYALL;
                     28: while(((file=open(str,O_BINARY|share|access,S_IWRITE))==-1)
                     29:        && errno==EACCES && count++<LOOP_NOPEN)
                     30: #ifndef __OS2__
                     31:     if(count>10)
                     32:         delay(50);
                     33: #else
                     34:        ;
                     35: #endif
                     36: if(file==-1 && errno==EACCES)
                     37:        puts("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
                     38: return(file);
                     39: }
                     40: 
                     41: /****************************************************************************/
                     42: /* Converts a date string in format MM/DD/YY into unix time format                     */
                     43: /****************************************************************************/
                     44: time_t dstrtounix(char *str)
                     45: {
                     46:        struct time curtime;
                     47:        struct date date;
                     48: 
                     49: if(!strcmp(str,"00/00/00"))
                     50:        return(0);
                     51: curtime.ti_hour=curtime.ti_min=curtime.ti_sec=0;
                     52: if(str[6]<7)
                     53:        date.da_year=2000+((str[6]&0xf)*10)+(str[7]&0xf);
                     54: else
                     55:        date.da_year=1900+((str[6]&0xf)*10)+(str[7]&0xf);
                     56: date.da_mon=((str[0]&0xf)*10)+(str[1]&0xf);
                     57: date.da_day=((str[3]&0xf)*10)+(str[4]&0xf);
                     58: return(dostounix(&date,&curtime));
                     59: }
                     60: 
                     61: /****************************************************************************/
                     62: /* Converts unix time format (long - time_t) into a char str MM/DD/YY          */
                     63: /****************************************************************************/
                     64: char *unixtodstr(time_t unix, char *str)
                     65: {
                     66:        struct time curtime;
                     67:        struct date date;
                     68: 
                     69: if(!unix)
                     70:        strcpy(str,"00/00/00");
                     71: else {
                     72:        unixtodos(unix,&date,&curtime);
                     73:        if((unsigned)date.da_mon>12) {    /* DOS leap year bug */
                     74:                date.da_mon=1;
                     75:                date.da_year++; }
                     76:        if((unsigned)date.da_day>31)
                     77:                date.da_day=1;
                     78:        sprintf(str,"%02u/%02u/%02u",date.da_mon,date.da_day
                     79:                ,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900); }
                     80: return(str);
                     81: }
                     82: 
                     83: 
                     84: int main(int argc, char **argv)
                     85: {
                     86:        char ch, str[512], path[256]
                     87:                ,*lst="%c) %-25s: %13lu\n"
                     88:                ,*nv="\nNew value: ";
                     89:        int file;
                     90:        stats_t stats;
                     91:        time_t t;
                     92: 
                     93: if(argc>1)
                     94:        strcpy(path,argv[1]);
                     95: else
                     96:        getcwd(path,MAXDIR);
                     97: if(path[strlen(path)-1]!='\\')
                     98:        strcat(path,"\\");
                     99: 
                    100: sprintf(str,"%sDSTS.DAB",path);
                    101: if((file=nopen(str,O_RDONLY))==-1) {
                    102:        printf("Can't open %s\r\n",str);
                    103:        exit(1); }
                    104: read(file,&t,4L);
                    105: if(read(file,&stats,sizeof(stats_t))!=sizeof(stats_t)) {
                    106:        close(file);
                    107:        printf("Error reading %u bytes from %s\r\n",sizeof(stats_t),str);
                    108:        exit(1); }
                    109: close(file);
                    110: while(1) {
                    111:        clrscr();
                    112:        printf("Synchronet Daily Statistics Editor v1.01\r\n\r\n");
                    113:        printf("S) %-25s: %13s\n","Date Stamp",unixtodstr(t,str));
                    114:        printf(lst,'L',"Total Logons",stats.logons);
                    115:        printf(lst,'O',"Logons Today",stats.ltoday);
                    116:        printf(lst,'T',"Total Time on",stats.timeon);
                    117:        printf(lst,'I',"Time on Today",stats.ttoday);
                    118:        printf(lst,'U',"Uploaded Files Today",stats.uls);
                    119:        printf(lst,'B',"Uploaded Bytes Today",stats.ulb);
                    120:        printf(lst,'D',"Downloaded Files Today",stats.dls);
                    121:        printf(lst,'W',"Downloaded Bytes Today",stats.dlb);
                    122:        printf(lst,'P',"Posts Today",stats.ptoday);
                    123:        printf(lst,'E',"E-Mails Today",stats.etoday);
                    124:        printf(lst,'F',"Feedback Today",stats.ftoday);
                    125:        printf("%c) %-25s: %13u\r\n",'N',"New Users Today",stats.nusers);
                    126: 
                    127:        printf("Q) Quit and save changes\r\n");
                    128:        printf("X) Quit and don't save changes\r\n");
                    129: 
                    130:        printf("\r\nWhich: ");
                    131: 
                    132:        ch=toupper(getch());
                    133:        printf("%c\r\n",ch);
                    134: 
                    135:        switch(ch) {
                    136:                case 'S':
                    137:                        printf("Date stamp (MM/DD/YY): ");
                    138:                        gets(str);
                    139:                        if(str[0])
                    140:                                t=dstrtounix(str);
                    141:                        break;
                    142:                case 'L':
                    143:                        printf(nv);
                    144:                        gets(str);
                    145:                        if(str[0])
                    146:                                stats.logons=atol(str);
                    147:                        break;
                    148:                case 'O':
                    149:                        printf(nv);
                    150:                        gets(str);
                    151:                        if(str[0])
                    152:                                stats.ltoday=atol(str);
                    153:                        break;
                    154:                case 'T':
                    155:                        printf(nv);
                    156:                        gets(str);
                    157:                        if(str[0])
                    158:                                stats.timeon=atol(str);
                    159:                        break;
                    160:                case 'I':
                    161:                        printf(nv);
                    162:                        gets(str);
                    163:                        if(str[0])
                    164:                                stats.ttoday=atol(str);
                    165:                        break;
                    166:                case 'U':
                    167:                        printf(nv);
                    168:                        gets(str);
                    169:                        if(str[0])
                    170:                                stats.uls=atol(str);
                    171:                        break;
                    172:                case 'B':
                    173:                        printf(nv);
                    174:                        gets(str);
                    175:                        if(str[0])
                    176:                                stats.ulb=atol(str);
                    177:                        break;
                    178:                case 'D':
                    179:                        printf(nv);
                    180:                        gets(str);
                    181:                        if(str[0])
                    182:                                stats.dls=atol(str);
                    183:             break;
                    184:                case 'W':
                    185:                        printf(nv);
                    186:                        gets(str);
                    187:                        if(str[0])
                    188:                                stats.dlb=atol(str);
                    189:             break;
                    190:                case 'P':
                    191:                        printf(nv);
                    192:                        gets(str);
                    193:                        if(str[0])
                    194:                                stats.ptoday=atol(str);
                    195:             break;
                    196:                case 'E':
                    197:                        printf(nv);
                    198:                        gets(str);
                    199:                        if(str[0])
                    200:                                stats.etoday=atol(str);
                    201:             break;
                    202:                case 'F':
                    203:                        printf(nv);
                    204:                        gets(str);
                    205:                        if(str[0])
                    206:                                stats.ftoday=atol(str);
                    207:             break;
                    208:                case 'N':
                    209:                        printf(nv);
                    210:                        gets(str);
                    211:                        if(str[0])
                    212:                                stats.nusers=atoi(str);
                    213:                        break;
                    214:                case 'Q':
                    215:                        sprintf(str,"%sDSTS.DAB",path);
                    216:                        if((file=nopen(str,O_WRONLY))==-1) {
                    217:                                printf("Error opening %s\r\n",str);
                    218:                                exit(1); }
                    219:                        write(file,&t,4L);
                    220:                        write(file,&stats,sizeof(stats_t));
                    221:                        close(file);
                    222:                case 'X':
                    223:                        exit(0);
                    224:                default:
                    225:                        putchar(7);
                    226:                        break; } }
                    227: }

unix.superglobalmegacorp.com

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