|
|
1.1 ! root 1: /* LSTPHOTO.C */ ! 2: ! 3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ ! 4: ! 5: #include <io.h> ! 6: #include <dos.h> ! 7: #include <dir.h> ! 8: #include <bios.h> ! 9: #include <time.h> ! 10: #include <ctype.h> ! 11: #include <stdio.h> ! 12: #include <share.h> ! 13: #include <conio.h> ! 14: #include <errno.h> ! 15: #include <fcntl.h> ! 16: #include <string.h> ! 17: #include <stdlib.h> ! 18: #include <stdarg.h> ! 19: #include <malloc.h> ! 20: #include <sys/stat.h> ! 21: #include <sys/types.h> ! 22: ! 23: #include "gen_defs.h" ! 24: #include "crc32.h" ! 25: #include "smmdefs.h" ! 26: ! 27: extern int daylight=0; ! 28: extern long timezone=0L; ! 29: ! 30: ! 31: ! 32: char *base41(unsigned int i, char *str) ! 33: { ! 34: char c; ! 35: unsigned int j=41*41,k; ! 36: ! 37: for(c=0;c<3;c++) { ! 38: k=i/j; ! 39: str[c]='0'+k; ! 40: i-=(k*j); ! 41: j/=41; ! 42: if(str[c]>=':') ! 43: str[c]='A'+(str[c]-':'); ! 44: if(str[c]>='[') ! 45: str[c]='#'+(str[c]-'['); } ! 46: str[c]=0; ! 47: return(str); ! 48: } ! 49: ! 50: /****************************************************************************/ ! 51: /* Updates 16-bit "rcrc" with character 'ch' */ ! 52: /****************************************************************************/ ! 53: void ucrc16(uchar ch, ushort *rcrc) { ! 54: ushort i, cy; ! 55: uchar nch=ch; ! 56: ! 57: for (i=0; i<8; i++) { ! 58: cy=*rcrc & 0x8000; ! 59: *rcrc<<=1; ! 60: if (nch & 0x80) *rcrc |= 1; ! 61: nch<<=1; ! 62: if (cy) *rcrc ^= 0x1021; } ! 63: } ! 64: ! 65: /****************************************************************************/ ! 66: /* Returns 16-crc of string (not counting terminating NULL) */ ! 67: /****************************************************************************/ ! 68: ushort crc16(char *str) ! 69: { ! 70: int i=0; ! 71: ushort crc=0; ! 72: ! 73: ucrc16(0,&crc); ! 74: while(str[i]) ! 75: ucrc16(str[i++],&crc); ! 76: ucrc16(0,&crc); ! 77: ucrc16(0,&crc); ! 78: return(crc); ! 79: } ! 80: ! 81: /****************************************************************************/ ! 82: /* Returns 32-crc of string (not counting terminating NULL) */ ! 83: /****************************************************************************/ ! 84: ulong crc32(char *str) ! 85: { ! 86: int i=0; ! 87: ulong crc=0xffffffffUL; ! 88: ! 89: while(str[i]) ! 90: crc=ucrc32(str[i++],crc); ! 91: crc=~crc; ! 92: return(crc); ! 93: } ! 94: ! 95: /****************************************************************************/ ! 96: /* Converts unix time format (long - time_t) into a char str MM/DD/YY */ ! 97: /****************************************************************************/ ! 98: char *unixtodstr(time_t unix, char *str) ! 99: { ! 100: struct time curtime; ! 101: struct date date; ! 102: ! 103: if(!unix) ! 104: strcpy(str,"00/00/00"); ! 105: else { ! 106: unixtodos(unix,&date,&curtime); ! 107: if((unsigned)date.da_mon>12) { /* DOS leap year bug */ ! 108: date.da_mon=1; ! 109: date.da_year++; } ! 110: if((unsigned)date.da_day>31) ! 111: date.da_day=1; ! 112: sprintf(str,"%02u/%02u/%02u",date.da_mon,date.da_day ! 113: ,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900); } ! 114: return(str); ! 115: } ! 116: ! 117: ! 118: time_t checktime() ! 119: { ! 120: struct tm tm; ! 121: ! 122: memset(&tm,0,sizeof(tm)); ! 123: tm.tm_year=94; ! 124: tm.tm_mday=1; ! 125: return(mktime(&tm)^0x2D24BD00L); ! 126: } ! 127: ! 128: ! 129: int main() ! 130: { ! 131: char str[128],fname[128],tmp[128]; ! 132: int i,file; ! 133: FILE *stream; ! 134: user_t user; ! 135: ! 136: printf("\nLSTPHOTO v1.00 - Synchronet Match Maker Photograph List\n\n"); ! 137: ! 138: if(checktime()) { ! 139: printf("Time problem!\n"); ! 140: exit(1); } ! 141: ! 142: if((file=open("SMM.DAB",O_RDWR|O_BINARY|SH_DENYNO|O_CREAT ! 143: ,S_IWRITE|S_IREAD))==-1) { ! 144: printf("\n\7Error opening/creating SMM.DAB\n"); ! 145: exit(1); } ! 146: if((stream=fdopen(file,"w+b"))==NULL) { ! 147: printf("\n\7Error converting SMM.DAB file handle to stream\n"); ! 148: exit(1); } ! 149: setvbuf(stream,0L,_IOFBF,4096); ! 150: ! 151: while(!feof(stream)) { ! 152: if(!fread(&user,sizeof(user_t),1,stream)) ! 153: break; ! 154: if(!(user.misc&USER_PHOTO) || user.misc&USER_DELETED || !user.number) ! 155: continue; ! 156: ! 157: printf("%-25.25s %5lu %-25.25s %s ",user.system,user.number,user.name ! 158: ,unixtodstr(user.photo,tmp)); ! 159: for(i=0;user.system[i];i++) ! 160: if(isalnum(user.system[i])) ! 161: break; ! 162: if(!user.system[i]) ! 163: fname[0]='~'; ! 164: else ! 165: fname[0]=user.system[i]; ! 166: for(i=strlen(user.system)-1;i>0;i--) ! 167: if(isalnum(user.system[i])) ! 168: break; ! 169: if(i<=0) ! 170: fname[1]='~'; ! 171: else ! 172: fname[1]=user.system[i]; ! 173: fname[2]=0; ! 174: strupr(fname); ! 175: strupr(user.system); ! 176: strcat(fname,base41(crc16(user.system),tmp)); ! 177: strcat(fname,base41(user.number,tmp)); ! 178: printf("%s\n",fname); } ! 179: ! 180: return(0); ! 181: } ! 182:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.