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 >
Wrap
Text File
|
1992-03-06
|
1KB
|
48 lines
MODULE 'exec/memory'
ENUM ER_NONE,ER_OUTOFMEM,ER_BADARGS,ER_NOSOURCE,ER_NODEST,ER_WRITE
DEF source=NIL,dest=NIL,rdargs=NIL,myargs:PTR TO LONG,mem=NIL:PTR TO CHAR
PROC shutdown()
IF source THEN Close(source)
IF dest THEN Close(dest)
IF rdargs THEN FreeArgs(rdargs)
IF mem THEN FreeMem(mem,16384)
ENDPROC
PROC main() HANDLE
DEF message:PTR TO LONG,key=0,ptr:PTR TO CHAR,bytes,loop,h
IF (mem:=AllocMem(16384,MEMF_ANY OR MEMF_CLEAR))=NIL THEN Raise(ER_OUTOFMEM)
myargs:=[0,0,0,0]
IF (rdargs:=ReadArgs('SOURCE/A,TO/K/A,KEY/K/A,DECRYPT/S',
myargs,NIL))=NIL THEN Raise(ER_BADARGS)
ptr:=myargs[2]
h:=0
WHILE Char(ptr)<>0
key:=key+(Char(ptr)*h)
h:=h+256
IF h>512 THEN h:=0
ptr++
ENDWHILE
Rnd(-key)
IF (source:=Open(myargs[0],OLDFILE))=NIL THEN Raise(ER_NOSOURCE)
IF (dest:=Open(myargs[1],NEWFILE))=NIL THEN Raise(ER_NODEST)
WHILE bytes:=Read(source,mem,16384)
IF myargs[3]
FOR loop:=0 TO bytes-1 DO PutChar(mem+loop,Char(mem+loop)-Rnd(256) AND 255)
ELSE
FOR loop:=0 TO bytes-1 DO PutChar(mem+loop,Char(mem+loop)+Rnd(256) AND 255)
ENDIF
IF Write(dest,mem,bytes)<>bytes THEN Raise(ER_WRITE)
ENDWHILE
Raise(ER_NONE)
EXCEPT
shutdown()
IF exception>0
message:=['out of memory','bad arguments','could not open source file',
'could not open destination file','error while writing file']
WriteF('\s\n',message[exception-1])
ENDIF
ENDPROC