|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.