home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
back2roots/padua
/
padua.7z
/
padua
/
ftp.vapor.com
/
microdot-1
/
md1_src_02.lzx
/
makeul.c
< prev
next >
Wrap
C/C++ Source or Header
|
2014-05-19
|
2KB
|
113 lines
/*
MAKEUL datei version(hex!)
*/
UBYTE chartab[]={"abcdef0123456790!_ABCDEFGHIJKLMNOPQRSTUVWXYZ$()=?&*+-#"};
extern ULONG __asm crc32(register __a0 void*,register __d0 int);
ULONG rseed;
int somechar(void)
{
rseed=FastRand(rseed);
return(chartab[rseed%(strlen(chartab))]);
}
int lzw_pack( void*, void*, ULONG, ULONG );
int main(int argc,char **argv)
{
BPTR f;
void *mailbuf;
long maillen;
ULONG crc,mdver,*conv;
int c;
BOOL v20 = FALSE, comp = FALSE;
if( argc>3 && !stricmp( argv[3], "-2" ) )
v20 = TRUE;
if( argc>3 && !stricmp( argv[3], "-C" ) )
comp = TRUE;
if( argc>4 && !stricmp( argv[4], "-2" ) )
v20 = TRUE;
if( argc>4 && !stricmp( argv[4], "-C" ) )
comp = TRUE;
rseed=time(0);
if(argc<3) return(20);
f=Open(argv[1],MODE_OLDFILE);
if(!f) return(15);
Seek(f,0,OFFSET_END);
maillen=Seek(f,0,OFFSET_BEGINNING);
mailbuf=AllocVec(maillen,0);
if(!mailbuf) { Close(f); return(10); }
Read(f,mailbuf,maillen);
Close(f);
/* Komprimieren? */
if( comp )
{
long *compbuffer = AllocVec( maillen, MEMF_CLEAR );
int compsize;
compbuffer[0] = maillen;
compsize = lzw_pack( mailbuf, &compbuffer[1], maillen, 13 );
/* Round to four */
while( compsize & 3 )
compsize++;
compsize+=4;
FreeVec( mailbuf );
maillen = compsize;
mailbuf = compbuffer;
}
crc=crc32( mailbuf, maillen );
srand( crc^0xdc00dcf2 );
conv=mailbuf;
for(c=0; c<maillen/4; c++) {
*conv^=rand();
conv++;
}
f=Open("md_coded",MODE_NEWFILE);
Write(f,mailbuf,maillen);
Close(f);
FreeVec(mailbuf);
stch_l(argv[2],&mdver);
if( comp )
{
Printf("X-MICRODOTUPDATE: %lc%08lX%lc%04lX%lc%lc%lc%lc&\n",
somechar(),
crc^0xdc00dcf2,
somechar(),
mdver^0x7777,
v20 ? '_' : '!' ,
somechar(),
somechar(),
somechar());
}
else
{
Printf("X-MICRODOTUPDATE: %lc%08lX%lc%04lX%lc%lc%lc%lc\n",
somechar(),
crc^0xdc00dcf2,
somechar(),
mdver^0x7777,
v20 ? '_' : '!' ,
somechar(),
somechar(),
somechar());
}
return(0);
}