home *** CD-ROM | disk | FTP | other *** search
- /* Nkript.e, very simple file (de)coder
- USAGE: nkript <file> */
-
- ENUM ER_NONE,ER_FILE,ER_MEM,ER_USAGE,ER_OUT,ER_ILLEGAL,ER_NONUM
-
- DEF flen,mem,handle=NIL,key,keyadd,file[200]:STRING,p
-
- PROC main()
- WriteF('Nkript (c) 1992 $#%!\n')
- IF StrCmp(arg,'',1) OR StrCmp(arg,'?',2) THEN error(ER_USAGE)
- flen:=FileLength(arg)
- handle:=Open(arg,OLDFILE)
- IF (flen<1) OR (handle=NIL) THEN error(ER_FILE)
- mem:=New(flen+4)
- IF mem=NIL THEN error(ER_MEM)
- IF Read(handle,mem,flen)<>flen THEN error(ER_FILE)
- Close(handle); handle:=NIL
- key:=readpass('key',4,FALSE)
- keyadd:=readpass('pin',3,TRUE) OR 3
- WriteF('Now (de)coding "\s".\n',arg)
- nkript()
- p:=InStr(arg,'.',0)
- StrCopy(file,arg,p)
- IF StrCmp(arg+p,'.nkr',ALL)=FALSE THEN StrAdd(file,'.nkr',ALL)
- handle:=Open(file,NEWFILE)
- IF handle=NIL THEN error(ER_OUT)
- WriteF('Writing "\s".\n',file)
- IF Write(handle,mem,flen)<>flen THEN error(ER_OUT)
- error(ER_NONE)
- ENDPROC
-
- PROC nkript()
- MOVE.L flen,D7
- LSR.L #2,D7 /* D7 = #of LONGs */
- MOVE.L key,D6
- MOVE.L keyadd,D4
- MOVE.L mem,A0
- l: MOVE.L D4,D5
- SUB.L D6,D5
- LSL.L #3,D6 /* random alg. D6*7+keyadd (11) */
- ADD.L D5,D6
- EOR.L D6,(A0)+
- DBRA D7,l
- SUB.L #$10000,D7
- BCC.S l /* DBRA.L emulation */
- ENDPROC
-
- PROC readpass(messy,numchars,decflag)
- DEF s[25]:STRING,a,t,n=0,f=1
- WriteF('\s[\d]: ',messy,numchars)
- ReadStr(stdout,s)
- IF EstrLen(s)<>numchars THEN error(ER_ILLEGAL)
- IF decflag
- t:=s
- FOR a:=1 TO numchars
- n:=n+(t[]-"0"*f)
- IF (t[]<"0") OR (t[]++>"9") THEN error(ER_NONUM)
- f:=f*10
- ENDFOR
- ^s:=n
- ENDIF
- ENDPROC ^s
-
- PROC error(nr)
- IF handle THEN Close(handle)
- SELECT nr
- CASE ER_NONE; WriteF('Done.\n')
- CASE ER_FILE; WriteF('Could not read file "\s" !\n',arg)
- CASE ER_MEM; WriteF('No memory for loading file!\n')
- CASE ER_USAGE; WriteF('USAGE: Nkript <file>\n')
- CASE ER_OUT; WriteF('Could not write file "\s" !\n',file)
- CASE ER_ILLEGAL; WriteF('Wrong #of chars\n')
- CASE ER_NONUM; WriteF('not a decimal number\n')
- ENDSELECT
- CleanUp(0)
- ENDPROC
-