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 >
C/C++ Source or Header  |  2014-05-19  |  2KB  |  113 lines

  1. /*
  2.         MAKEUL datei version(hex!)
  3. */
  4.  
  5. UBYTE chartab[]={"abcdef0123456790!_ABCDEFGHIJKLMNOPQRSTUVWXYZ$()=?&*+-#"};
  6.  
  7. extern ULONG __asm crc32(register __a0 void*,register __d0 int);
  8.  
  9. ULONG rseed;
  10.  
  11. int somechar(void)
  12. {
  13.     rseed=FastRand(rseed);
  14.     return(chartab[rseed%(strlen(chartab))]);    
  15. }
  16.  
  17. int lzw_pack( void*, void*, ULONG, ULONG );
  18.  
  19. int main(int argc,char **argv)
  20. {
  21.     BPTR f;
  22.     void *mailbuf;
  23.     long maillen;
  24.     ULONG crc,mdver,*conv;
  25.     int c;
  26.     BOOL v20 = FALSE, comp = FALSE;
  27.  
  28.     if( argc>3 && !stricmp( argv[3], "-2" ) )
  29.         v20 = TRUE;
  30.     if( argc>3 && !stricmp( argv[3], "-C" ) )
  31.         comp = TRUE;
  32.     if( argc>4 && !stricmp( argv[4], "-2" ) )
  33.         v20 = TRUE;
  34.     if( argc>4 && !stricmp( argv[4], "-C" ) )
  35.         comp = TRUE;
  36.  
  37.     rseed=time(0);
  38.     if(argc<3) return(20);
  39.  
  40.     f=Open(argv[1],MODE_OLDFILE);
  41.     if(!f) return(15);
  42.     Seek(f,0,OFFSET_END);
  43.     maillen=Seek(f,0,OFFSET_BEGINNING);
  44.     mailbuf=AllocVec(maillen,0);
  45.     if(!mailbuf) { Close(f); return(10); }
  46.     Read(f,mailbuf,maillen);
  47.     Close(f);
  48.  
  49.     /* Komprimieren? */
  50.     if( comp )
  51.     {
  52.         long *compbuffer = AllocVec( maillen, MEMF_CLEAR );
  53.         int compsize;
  54.  
  55.         compbuffer[0] = maillen;
  56.         compsize = lzw_pack( mailbuf, &compbuffer[1], maillen, 13 );
  57.  
  58.         /* Round to four */
  59.         while( compsize & 3 )
  60.             compsize++;
  61.         compsize+=4;
  62.  
  63.         FreeVec( mailbuf );
  64.         maillen = compsize;
  65.         mailbuf = compbuffer;
  66.     }
  67.  
  68.     crc=crc32( mailbuf, maillen );
  69.  
  70.     srand( crc^0xdc00dcf2 );
  71.     conv=mailbuf;
  72.     for(c=0; c<maillen/4; c++) {
  73.         *conv^=rand();
  74.         conv++;
  75.     }
  76.  
  77.     f=Open("md_coded",MODE_NEWFILE);
  78.     Write(f,mailbuf,maillen);
  79.     Close(f);
  80.  
  81.     FreeVec(mailbuf);
  82.  
  83.     stch_l(argv[2],&mdver);
  84.  
  85.     if( comp )
  86.     {
  87.         Printf("X-MICRODOTUPDATE: %lc%08lX%lc%04lX%lc%lc%lc%lc&\n",
  88.             somechar(),
  89.             crc^0xdc00dcf2,
  90.             somechar(),
  91.             mdver^0x7777,
  92.             v20 ? '_' : '!' ,
  93.             somechar(),
  94.             somechar(),
  95.             somechar());
  96.     }
  97.     else
  98.     {
  99.         Printf("X-MICRODOTUPDATE: %lc%08lX%lc%04lX%lc%lc%lc%lc\n",
  100.             somechar(),
  101.             crc^0xdc00dcf2,
  102.             somechar(),
  103.             mdver^0x7777,
  104.             v20 ? '_' : '!' ,
  105.             somechar(),
  106.             somechar(),
  107.             somechar());
  108.     }
  109.  
  110.     return(0);    
  111.  
  112. }
  113.