' Verschlsseln durch Vertauschen der Buchstaben
' zustzlich xor-Verschlsselung in
' Kommentarzeilen
' von Georg Scheibler, 4920 Lemgo
' (c) 1992 MAXON Computer GmbH
a$="dies ist ein test"
DIM unused!(32000)
TEXT 0,13,a$
s1%=&HE62FA952
s2%=2345252
@crypt(s1%,s2%,TRUE,a$,*b$)
TEXT 0,30,b$
@crypt(s1%,s2%,FALSE,b$,*c$)
TEXT 0,50,c$
PROCEDURE crypt(key1%,key2%,crypt!,s$,d%)
  LOCAL d$,m%,h%,g%,z%
  ' konstanten fr PSZZG
  ' zur schnelleren Berechnung
  m%=2^(23-1) !MSB
  h%=2^(9-1)  !zweites bit
  g%=m%+m%-1  !grte Zahl
  '
  l%=LEN(s$)
  d$=SPACE$(l%)
  i%=0
  max%=l%
  ARRAYFILL unused!(),TRUE
  WHILE i%<l%
    key1%=@pszzg(key1%,g%,m%,h%)
    ptr%=key1% MOD max%
    IF unused!(ptr%)
      unused!(ptr%)=FALSE
      ' key2%=@pszzg(key2%,g%,m%,h%)
      IF crypt!
         MID$(d$,ptr%+1,1)=MID$(s$,i%+1,1)
        ' z%=ASC(MID$(s$,i%+1,1)) XOR key2%
        ' MID$(d$,ptr%+1,1)=CHR$(z%)
      ELSE
        MID$(d$,i%+1,1)=MID$(s$,ptr%+1,1)
        ' z%=ASC(MID$(s$,ptr%+1,1)) XOR key2%
        ' MID$(d$,i%+1,1)=CHR$(z%)
      ENDIF
      INC i%
    ENDIF
  WEND
  *d%=d$
RETURN
DEFFN pszzg(i%,g%,m%,h%)=((i%+i%) AND g%)-((0<(i% AND m%)) XOR ((i% AND h%)>0))
