encrypt.scm 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. (define-module (encrypt))
  2. (define-public version-number "0.1")
  3. (define-public email-address "jbranso@dismail.de")
  4. (define-public (print-version program-name)
  5. (display (string-append program-name " version "
  6. version-number "\n")))
  7. (define-public (print-help program-name)
  8. (display "caesar [options]\n")
  9. (display "caesar [-s SHIFT] -f FILE \n")
  10. (display "")
  11. (display "-v --version Display version\n")
  12. (display "-h, --help Display this help info\n")
  13. (display "-f, --file Specify a file to encrypt.\n")
  14. (display "-s, --shift Specify the shift to use.\n")
  15. (display (string-append "Send bug reports to "
  16. email-address "\n")))
  17. (define-public (encrypt shift char)
  18. (define lower #f)
  19. (define upper #f)
  20. (if (char-lower-case? char)
  21. (begin
  22. (set! lower #\a)
  23. (set! upper #\z))
  24. (begin
  25. (set! lower #\A)
  26. (set! upper #\Z)))
  27. ;; add the shift
  28. (let ([char (integer->char
  29. (+ (char->integer char) shift))])
  30. ;;if after adding the shift, the char is greater than the upper
  31. ;;char, then we need to tweak things.
  32. (if (char>? char upper)
  33. (integer->char
  34. (let ([lower (char->integer lower)]
  35. [char (char->integer char)]
  36. [upper (char->integer upper)])
  37. (+ lower
  38. (- char
  39. (+ 1 upper)))))
  40. char)))