Advertisement
atm-irbis

UUE decoder

Mar 23rd, 2012
3,493
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Icon 1.96 KB | None | 0 0
  1. procedure main()
  2. local f,d,s,c,g,kk,xc,zx
  3. #печать строки "Введите путь к декодируемому файлу"
  4. write("Enter a file path:")
  5. #считывание пути
  6. xc:=read()
  7. f:=open(xc,"ru")
  8. #считываем первую строку и вырезаем лишние пробелы,
  9. #выделяем из первой строки декодируемого файла его
  10. #имя и создаем файл с таким именем
  11. d:=!f
  12. zx:=trim(d[11:*d])
  13. g:=open("C:/"||zx,"cwu")
  14. #процесс считывания строк с одновременным декодированием
  15. #строка kk - служит накопительным буфером для байтов файла
  16. kk:=""
  17. while s:=!f do {
  18.     if *s>=4 then {
  19.      c:=s[2:*s]
  20.      if c~=="nd" then kk:=kk||udec(c)
  21.     }
  22. }
  23. write(g,kk)
  24. end
  25.  
  26. procedure to_bin(x)
  27. local r,s,n
  28. n:=x
  29. s:=""
  30. while n>=1 do {
  31.  r:=n%2
  32.  s:=s||r
  33.  n:=integer(n/2)
  34. }
  35. s:=reverse(s)
  36. while *s~=6 do {
  37.   s:="0"||s
  38. }
  39. return string(s)
  40. end
  41.  
  42. procedure to_dec(d)
  43. local b,i,v
  44. b:=0
  45. v:=reverse(d)
  46. every i:=1 to *d do {
  47.   b:=b+((2^(i-1))*v[i])
  48. }
  49. return b
  50. end
  51.  
  52. #процедура преобразования:выделяем из строки 4 символа,кодируем их в код ASCII
  53. #затем вычитаем 32,преобразуем в бинарный вид,соединяем все в одну строку и
  54. #режем ее на три байта,которые складываем в накопительную переменную,итак
  55. #до окончания исходной строки.
  56. procedure udec(s)
  57. local size,pr,sq,sz,a1,a2,a3,a4,sf
  58. sq:=""
  59. size:=*s
  60. every i:=1 to size by 4 do {
  61.  pr:=s[i+:4]
  62.  a1:=to_bin(ord(pr[1])-32)
  63.  a2:=to_bin(ord(pr[2])-32)
  64.  a3:=to_bin(ord(pr[3])-32)
  65.  a4:=to_bin(ord(pr[4])-32)
  66.  sz:=a1||a2||a3||a4
  67.  sf:=char(to_dec(sz[1+:8]))||char(to_dec(sz[9+:8]))||char(to_dec(sz[17+:8]))
  68.  sq:=sq||sf
  69. }
  70. return sq
  71. sq:=""
  72. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement