|
|
2.30b OS/2
/* LSTPHOTO.C */
/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
#include <io.h>
#include <dos.h>
#include <dir.h>
#include <bios.h>
#include <time.h>
#include <ctype.h>
#include <stdio.h>
#include <share.h>
#include <conio.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <malloc.h>
#include <sys/stat.h>
#include <sys/types.h>
#include "gen_defs.h"
#include "crc32.h"
#include "smmdefs.h"
extern int daylight=0;
extern long timezone=0L;
char *base41(unsigned int i, char *str)
{
char c;
unsigned int j=41*41,k;
for(c=0;c<3;c++) {
k=i/j;
str[c]='0'+k;
i-=(k*j);
j/=41;
if(str[c]>=':')
str[c]='A'+(str[c]-':');
if(str[c]>='[')
str[c]='#'+(str[c]-'['); }
str[c]=0;
return(str);
}
/****************************************************************************/
/* Updates 16-bit "rcrc" with character 'ch' */
/****************************************************************************/
void ucrc16(uchar ch, ushort *rcrc) {
ushort i, cy;
uchar nch=ch;
for (i=0; i<8; i++) {
cy=*rcrc & 0x8000;
*rcrc<<=1;
if (nch & 0x80) *rcrc |= 1;
nch<<=1;
if (cy) *rcrc ^= 0x1021; }
}
/****************************************************************************/
/* Returns 16-crc of string (not counting terminating NULL) */
/****************************************************************************/
ushort crc16(char *str)
{
int i=0;
ushort crc=0;
ucrc16(0,&crc);
while(str[i])
ucrc16(str[i++],&crc);
ucrc16(0,&crc);
ucrc16(0,&crc);
return(crc);
}
/****************************************************************************/
/* Returns 32-crc of string (not counting terminating NULL) */
/****************************************************************************/
ulong crc32(char *str)
{
int i=0;
ulong crc=0xffffffffUL;
while(str[i])
crc=ucrc32(str[i++],crc);
crc=~crc;
return(crc);
}
/****************************************************************************/
/* Converts unix time format (long - time_t) into a char str MM/DD/YY */
/****************************************************************************/
char *unixtodstr(time_t unix, char *str)
{
struct time curtime;
struct date date;
if(!unix)
strcpy(str,"00/00/00");
else {
unixtodos(unix,&date,&curtime);
if((unsigned)date.da_mon>12) { /* DOS leap year bug */
date.da_mon=1;
date.da_year++; }
if((unsigned)date.da_day>31)
date.da_day=1;
sprintf(str,"%02u/%02u/%02u",date.da_mon,date.da_day
,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900); }
return(str);
}
time_t checktime()
{
struct tm tm;
memset(&tm,0,sizeof(tm));
tm.tm_year=94;
tm.tm_mday=1;
return(mktime(&tm)^0x2D24BD00L);
}
int main()
{
char str[128],fname[128],tmp[128];
int i,file;
FILE *stream;
user_t user;
printf("\nLSTPHOTO v1.00 - Synchronet Match Maker Photograph List\n\n");
if(checktime()) {
printf("Time problem!\n");
exit(1); }
if((file=open("SMM.DAB",O_RDWR|O_BINARY|SH_DENYNO|O_CREAT
,S_IWRITE|S_IREAD))==-1) {
printf("\n\7Error opening/creating SMM.DAB\n");
exit(1); }
if((stream=fdopen(file,"w+b"))==NULL) {
printf("\n\7Error converting SMM.DAB file handle to stream\n");
exit(1); }
setvbuf(stream,0L,_IOFBF,4096);
while(!feof(stream)) {
if(!fread(&user,sizeof(user_t),1,stream))
break;
if(!(user.misc&USER_PHOTO) || user.misc&USER_DELETED || !user.number)
continue;
printf("%-25.25s %5lu %-25.25s %s ",user.system,user.number,user.name
,unixtodstr(user.photo,tmp));
for(i=0;user.system[i];i++)
if(isalnum(user.system[i]))
break;
if(!user.system[i])
fname[0]='~';
else
fname[0]=user.system[i];
for(i=strlen(user.system)-1;i>0;i--)
if(isalnum(user.system[i]))
break;
if(i<=0)
fname[1]='~';
else
fname[1]=user.system[i];
fname[2]=0;
strupr(fname);
strupr(user.system);
strcat(fname,base41(crc16(user.system),tmp));
strcat(fname,base41(user.number,tmp));
printf("%s\n",fname); }
return(0);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.