home *** CD-ROM | disk | FTP | other *** search
/ ftp.whtech.com / ftp.whtech.com.tar / ftp.whtech.com / club100 / txt / crypt.src < prev    next >
Text File  |  2006-10-19  |  3KB  |  192 lines

  1. ;CLUB 100 Library - 415/939-1246 BBS, 937-5039 NEWSLETTER, 932-8856 VOICE
  2. ;
  3. ; CRYPT.100 v3.1 
  4. ;           -- encryption/decryption
  5. ;              with m/l speed
  6. ;
  7. ; <see CRYPT.ADD for v3.1 revisions>
  8. ;
  9. ; c1987 by Jon  Diercks
  10. ;    [73327,2353]
  11. ;
  12. ; shortened for Alt LCD buffer
  13. ;
  14.     org    $fcc0
  15. ;
  16. ;rom/ram adresses
  17. ;
  18. chkf    equ    $5aab    ;ck file name in directory
  19. faddr    equ    $5ae3    ;get file address
  20. beep    equ    $7662    ;make a beep
  21. files    equ    $1f42    ;list RAM: dir
  22. newln    equ    $4bb8    ;send newline if necessary
  23. dnewln    equ    $5791    ;disp <hl> on newline
  24. upcase    equ    $0fe9    ;convert a to uppercase
  25. chget    equ    $12cb    ;get char to a
  26. upget    equ    $5d64    ;get upcase chr(chget+upcase)
  27. crlf    equ    $4222
  28. linput    equ    $4644    ;line input
  29. ;    <text placed at $f685
  30. ;     hl=$f684
  31. ;     c flag set if ^C abort>
  32. inputb    equ    $f685    ;input buffer
  33. menu    equ    $5797
  34. ;
  35. ;
  36. ;program starts here
  37. ;
  38. ;
  39. start    disp    welcom
  40.     ent    start
  41. ;
  42. finput    call    files
  43. finp1    lxi    hl,file?
  44.     call    input
  45.     lxi    hl,inputb
  46.     dcx    hl
  47. ;
  48. lp1    inx    hl    ;ensure .do
  49.     mov    a,m
  50.     cpi    '.'
  51.     jz    do
  52.     ora    a
  53.     jnz    lp1
  54. ;
  55. do    lxi    d,dotyp    ;put in .DO extension
  56.     mvi    b,4
  57.     call    $3469    ;ldir
  58. ;
  59.     lxi    de,inputb
  60.     mvi    a,10
  61.     call    chkf    ;file in dir?
  62.     jnz    finp2    ;get it
  63. ;
  64. goof    call    beep    ;file not found
  65.     jmp    finp1    ;try again
  66. ;
  67. finp2    call    faddr    ;hl=file start
  68.     shld    filept
  69. ;
  70. kinput    lxi    hl,key?
  71.     call    input
  72. ;following loop subtracts 64 from each
  73. ; char in keyword, then checks to see
  74. ; if it's valid.
  75.     lxi    hl,inputb
  76.     mvi    b,64
  77. kinp1    mov    a,m
  78.     ana    a    ;done?
  79.     jz    minput
  80.     sub    b    ;a=a-64
  81.     jz    goof2    ;0 invalid
  82.     cpi    27    ;>26 invalid
  83.     jnc    goof2
  84.     mov    m,a    ;put it back
  85.     inx    hl
  86.     jmp    kinp1
  87. ;
  88. goof2    call    beep
  89.     jmp    kinput    ;try again
  90. ;
  91. input    call    dnewln    ;print prompt
  92.     call    linput
  93.     jc    menu    ;^C abort
  94.     rst    2
  95.     jz    menu    ;null input
  96. ;
  97.     lxi    hl,inputb
  98. ;
  99. makeup    mov    a,m    ;switch <hl>-null to upper case
  100.     ana    a    ;done?
  101.     rz
  102.     call    upcase
  103.     mov    m,a    ;put upcase back where you got lc
  104.     inx    hl
  105.     jmp    makeup
  106. ;
  107. minput    disp    e/d?
  108. minp1    call    upget
  109.     cpi    'E'
  110.     jnz    minp2
  111.     rst    4    ;print E
  112.     sub    a    ;encrypt
  113.     jmp    minp3
  114. minp2    cpi    'D'
  115.     jnz    minp1    ;not d/e - try again
  116.     rst    4    ;print D
  117.     sub    a    ;decrypt mode
  118.     inr    a    ;a=1
  119. minp3    sta    mode
  120. ;
  121. gofrit    lxi    de,inputb    ;key
  122.     lhld    filept    ;file pointer
  123. gloop    mov    a,m    ;get a char from file
  124.     cpi    26    ;eof?
  125.     rz        ;done
  126.     cpi    33
  127.     jc    go4    ;skip if <=space
  128.     cpi    127
  129.     jnc    go4    ;skip if >126
  130.     mov    c,a
  131.     ldax    de    ;next key byte
  132.     ana    a    ;end of key?
  133.     jnz    go1    ;not yet
  134.     lxi    de,inputb    ;start over
  135.     ldax    de
  136. go1    mov    b,a
  137. ;now c contains character from file,
  138. ; and b contains character from keyword
  139. ; so add them together
  140. ;first, find which mode
  141. ;then the real fun begins!
  142. ; have to mod a so that it's still
  143. ; <127 and >32!
  144.     lda    mode
  145.     ana    a    ;a=0=encrypt?
  146.     jz    go2    ;yes
  147.     mov    a,c    ;decrypt
  148.     sub    b
  149.     cpi    33    ;if >33 then
  150.     jnc    go3    ;go on else
  151.     adi    94    ;mod 94
  152.     jmp    go3    ;then go on
  153. go2    mov    a,c    ;encrypt
  154.     add    b
  155.     cpi    127    ;if <127 then
  156.     jc    go3    ;go on else
  157.     sui    94    ;mod 94
  158. go3    mov    m,a    ;put char back
  159.     inx    de    ;move fwd in key
  160. go4    inx    hl    ;move fwd in file
  161.     jmp    gloop
  162. ;
  163. ;
  164. ;
  165. ;string constants
  166. ;
  167. welcom    db    12    ;^L = cls
  168.     db    27
  169.     dm    pCRYPT! - v3.1
  170.     db    27
  171.     dm    q
  172.     db    13
  173.     db    10
  174.     db    0
  175. file?    dm    File:
  176.     db    0
  177. key?    dm    Kwrd:
  178.     db    0
  179. e/d?    dm    <E>ncr or <D>ecr?
  180.     db    0
  181. dotyp    dm    .DO
  182.     db    0
  183. ;
  184. ;
  185. ;variable space
  186. ;
  187. mode    ds    1    ;0=encrypt;1=decrypt
  188. filept    ds    2
  189. ;store hl - file pointer
  190. ;END
  191.  
  192.