Annotation of sbbs/sbbs2/smm/delphoto.c, revision 1.1.1.1

1.1       root        1: /* DELPHOTO.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: time_t checktime()
                     96: {
                     97:        struct tm tm;
                     98: 
                     99: memset(&tm,0,sizeof(tm));
                    100: tm.tm_year=94;
                    101: tm.tm_mday=1;
                    102: return(mktime(&tm)^0x2D24BD00L);
                    103: }
                    104: 
                    105: 
                    106: int main(int argc, char **argv)
                    107: {
                    108:        char str[128],fname[128],path[128],tmp[128];
                    109:        int i,file;
                    110:        FILE *index, *stream;
                    111:        ulong number,crc;
                    112:        user_t user;
                    113:        ixb_t ixb;
                    114:        struct ffblk ff;
                    115: 
                    116: printf("\nDELPHOTO v1.00 - Synchronet Match Maker Photograph Deletion\n\n");
                    117: 
                    118: if(checktime()) {
                    119:     printf("Time problem!\n");
                    120:     exit(1); }
                    121: 
                    122: if(argc<3) {
                    123:        printf("usage: delphoto user_number system_name\n");
                    124:        exit(1); }
                    125: 
                    126: if((file=open("SMM.DAB",O_RDWR|O_BINARY|SH_DENYNO|O_CREAT
                    127:     ,S_IWRITE|S_IREAD))==-1) {
                    128:        printf("\n\7Error opening/creating SMM.DAB\n");
                    129:     exit(1); }
                    130: if((stream=fdopen(file,"w+b"))==NULL) {
                    131:        printf("\n\7Error converting SMM.DAB file handle to stream\n");
                    132:     exit(1); }
                    133: setvbuf(stream,0L,_IOFBF,4096);
                    134: 
                    135: if((file=open("SMM.IXB",O_RDWR|O_BINARY|SH_DENYNO|O_CREAT
                    136:     ,S_IWRITE|S_IREAD))==-1) {
                    137:        printf("\n\7Error opening/creating SMM.IXB\n");
                    138:     exit(1); }
                    139: if((index=fdopen(file,"w+b"))==NULL) {
                    140:        printf("\n\7Error converting SMM.IXB file handle to stream\n");
                    141:     exit(1); }
                    142: setvbuf(stream,0L,_IOFBF,1024);
                    143: 
                    144: number=atol(argv[1]);
                    145: str[0]=0;
                    146: for(i=2;i<argc;i++) {
                    147:        if(str[0])
                    148:                strcat(str," ");
                    149:        strcat(str,argv[i]); }
                    150: 
                    151: strupr(str);
                    152: str[25]=0;
                    153: 
                    154: crc=crc32(str);
                    155: rewind(index);
                    156: i=0;
                    157: while(!feof(index)) {
                    158:        if(!fread(&ixb,sizeof(ixb_t),1,index))
                    159:                break;
                    160:        if(!ixb.number)    /* DELETED */
                    161:                continue;
                    162:        if(ixb.system!=crc || ixb.number!=number)
                    163:                continue;
                    164:        fseek(stream
                    165:                ,((ftell(index)-sizeof(ixb_t))/sizeof(ixb_t))
                    166:                *sizeof(user_t),SEEK_SET);
                    167:        if(!fread(&user,sizeof(user_t),1,stream))
                    168:                continue;
                    169:        i=1;
                    170:        break; }
                    171: if(!i) {
                    172:        printf("\7User #%lu @ %s not found!\n",number,str);
                    173:        exit(2); }
                    174: 
                    175: if(!(user.misc&USER_PHOTO)) {
                    176:        printf("\7User #%lu @ %s doesn't have a photo attached to their profile.\n"
                    177:                ,number,str);
                    178:        exit(3); }
                    179: 
                    180: for(i=0;user.system[i];i++)
                    181:        if(isalnum(user.system[i]))
                    182:         break;
                    183: if(!user.system[i])
                    184:        fname[0]='~';
                    185: else
                    186:        fname[0]=user.system[i];
                    187: for(i=strlen(user.system)-1;i>0;i--)
                    188:        if(isalnum(user.system[i]))
                    189:                break;
                    190: if(i<=0)
                    191:        fname[1]='~';
                    192: else
                    193:        fname[1]=user.system[i];
                    194: fname[2]=0;
                    195: strupr(user.system);
                    196: strcat(fname,base41(crc16(user.system),tmp));
                    197: strcat(fname,base41(user.number,tmp));
                    198: strcat(fname,".*");
                    199: strupr(fname);
                    200: sprintf(path,"PHOTO\\%s",fname);
                    201: i=findfirst(path,&ff,0);
                    202: if(i)
                    203:        printf("\7%s doesn't exist!\n",path);
                    204: else {
                    205:        sprintf(path,"PHOTO\\%s",ff.ff_name);
                    206:        if(remove(path))
                    207:                printf("\7%s couldn't be removed!\n",path); }
                    208: 
                    209: user.misc&=~USER_PHOTO;
                    210: user.updated=time(NULL);
                    211: user.photo=0;
                    212: fseek(stream
                    213:        ,((ftell(index)-sizeof(ixb_t))/sizeof(ixb_t))
                    214:        *sizeof(user_t),SEEK_SET);
                    215: fwrite(&user,sizeof(user_t),1,stream);
                    216: ixb.updated=user.updated;
                    217: fseek(index,ftell(index)-sizeof(ixb_t),SEEK_SET);
                    218: fwrite(&ixb,sizeof(ixb_t),1,index);
                    219: 
                    220: printf("Photo removed successfully from database.\n");
                    221: return(0);
                    222: }
                    223: 

unix.superglobalmegacorp.com

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