home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 4 / CDPD_IV.bin / e / mailinglists / binaries / readargs.lha / crypt.e next >
Text File  |  1992-03-06  |  1KB  |  48 lines

  1. MODULE 'exec/memory'
  2.  
  3. ENUM ER_NONE,ER_OUTOFMEM,ER_BADARGS,ER_NOSOURCE,ER_NODEST,ER_WRITE
  4.  
  5. DEF source=NIL,dest=NIL,rdargs=NIL,myargs:PTR TO LONG,mem=NIL:PTR TO CHAR
  6.  
  7. PROC shutdown()
  8.   IF source THEN Close(source)
  9.   IF dest THEN Close(dest)
  10.   IF rdargs THEN FreeArgs(rdargs)
  11.   IF mem THEN FreeMem(mem,16384)
  12. ENDPROC
  13.  
  14. PROC main() HANDLE
  15.   DEF message:PTR TO LONG,key=0,ptr:PTR TO CHAR,bytes,loop,h
  16.   IF (mem:=AllocMem(16384,MEMF_ANY OR MEMF_CLEAR))=NIL THEN Raise(ER_OUTOFMEM)
  17.   myargs:=[0,0,0,0]
  18.   IF (rdargs:=ReadArgs('SOURCE/A,TO/K/A,KEY/K/A,DECRYPT/S',
  19.     myargs,NIL))=NIL THEN Raise(ER_BADARGS)
  20.   ptr:=myargs[2]
  21.   h:=0
  22.   WHILE Char(ptr)<>0
  23.     key:=key+(Char(ptr)*h)
  24.     h:=h+256
  25.     IF h>512 THEN h:=0
  26.     ptr++
  27.   ENDWHILE
  28.   Rnd(-key)
  29.   IF (source:=Open(myargs[0],OLDFILE))=NIL THEN Raise(ER_NOSOURCE)
  30.   IF (dest:=Open(myargs[1],NEWFILE))=NIL THEN Raise(ER_NODEST)
  31.   WHILE bytes:=Read(source,mem,16384)
  32.     IF myargs[3]
  33.       FOR loop:=0 TO bytes-1 DO PutChar(mem+loop,Char(mem+loop)-Rnd(256) AND 255)
  34.     ELSE
  35.       FOR loop:=0 TO bytes-1 DO PutChar(mem+loop,Char(mem+loop)+Rnd(256) AND 255)
  36.     ENDIF
  37.     IF Write(dest,mem,bytes)<>bytes THEN Raise(ER_WRITE)
  38.   ENDWHILE
  39.   Raise(ER_NONE)
  40. EXCEPT
  41.   shutdown()
  42.   IF exception>0
  43.     message:=['out of memory','bad arguments','could not open source file',
  44.               'could not open destination file','error while writing file']
  45.     WriteF('\s\n',message[exception-1])
  46.   ENDIF
  47. ENDPROC
  48.