home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / e / amigae30a_fr.lha / AmigaE30f / Sources / Utils / Nkript.e < prev    next >
Encoding:
Text File  |  1994-10-02  |  2.2 KB  |  71 lines

  1. /* Nkript.e, très simple (dé)codeur de fichier
  2.    USAGE: nkript <file>
  3.  
  4.    nkript demande une clé de 4 lettre,et un code de 3 lettre.
  5.    Comme nkrip utilise EOR, vous pouvez utiliser ce programme pour coder et
  6.    décoder. La clé et le code ne sont sauvés nul part, comme ça il est
  7.    _relativement_ sûr. Ca a pour effet que si vous taper la mauvaise clé,
  8.    aucune erreur n'est donné, mais le fichier est simplement mal décodé.
  9.  
  10. */
  11.  
  12. MODULE 'tools/file'
  13.  
  14. ENUM ER_NONE,ER_FILE,ER_MEM,ER_USAGE,ER_OUT,ER_ILLEGAL,ER_NONUM
  15.  
  16. PROC main() HANDLE
  17.   DEF flen,mem=NIL,key,keyadd,file[200]:STRING,p
  18.   WriteF('Nkript (c) 1992 $#%!\n')
  19.   IF StrCmp(arg,'',1) OR StrCmp(arg,'?',2) THEN Raise(ER_USAGE)
  20.   mem,flen:=readfile(arg)
  21.   key:=readpass('key',4,FALSE)
  22.   keyadd:=readpass('pin',3,TRUE) OR 3
  23.   WriteF('Now (de)coding "\s".\n',arg)
  24.   MOVE.L flen,D7
  25.   LSR.L  #2,D7          /* D7 = #of LONGs */
  26.   MOVE.L key,D6
  27.   MOVE.L keyadd,D4
  28.   MOVE.L mem,A0
  29.   loop:
  30.   MOVE.L D4,D5
  31.   SUB.L  D6,D5
  32.   LSL.L  #3,D6          /* random alg.  D6*7+keyadd (11) */
  33.   ADD.L  D5,D6
  34.   EOR.L  D6,(A0)+
  35.   DBRA   D7,loop
  36.   SUB.L  #$10000,D7
  37.   BCC.S  loop           /* DBRA.L emulation */
  38.   p:=InStr(arg,'.',0)
  39.   StrCopy(file,arg,p)
  40.   IF StrCmp(arg+p,'.nkr',ALL)=FALSE THEN StrAdd(file,'.nkr',ALL)
  41.   writefile(file,mem,flen)
  42. EXCEPT DO
  43.   IF mem THEN freefile(mem)
  44.   SELECT exception
  45.     CASE ER_NONE;    WriteF('OK.\n')
  46.     CASE "OPEN";     WriteF('Ne peut atteindre le fichier "\s" !\n',exceptioninfo)
  47.     CASE "IN";       WriteF('Ne peut lire le fichier "\s" !\n',exceptioninfo)
  48.     CASE "OUT";      WriteF('Ne peut écrire le fichier "\s" !\n',exceptioninfo)
  49.     CASE "MEM";      WriteF('Pas de mémoire pour charger!\n')
  50.     CASE ER_USAGE;   WriteF('USAGE: Nkript <file>\n')
  51.     CASE ER_ILLEGAL; WriteF('Mauvais nombre de caractères\n')
  52.     CASE ER_NONUM;   WriteF('N''est pas un nombre décimal\n')
  53.   ENDSELECT
  54. ENDPROC
  55.  
  56. PROC readpass(messy,numchars,decflag)
  57.   DEF s[25]:STRING,a,t,n=0,f=1
  58.   WriteF('\s[\d]: ',messy,numchars)
  59.   ReadStr(stdout,s)
  60.   IF EstrLen(s)<>numchars THEN Raise(ER_ILLEGAL)
  61.   IF decflag
  62.     t:=s
  63.     FOR a:=1 TO numchars
  64.       n:=n+(t[]-"0"*f)
  65.       IF (t[]<"0") OR (t[]++>"9") THEN Raise(ER_NONUM)
  66.       f:=f*10
  67.     ENDFOR
  68.     ^s:=n
  69.   ENDIF
  70. ENDPROC ^s
  71.