Advertisement
atm-irbis

UUE coder

Mar 23rd, 2012
3,585
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Icon 1.90 KB | None | 0 0
  1. procedure main()
  2. local f,o,r
  3. #вывод приглашения и инициализация строки-накопителя
  4. write("Enter a filepath:")
  5. r:=read()
  6. f:=""
  7. #открытие входного и выходного файла
  8. g:=open(r,"ru")
  9. t:=open(r||".uue","cw")
  10.  
  11. #запись первой строки uue
  12. z:="begin 644 uue"||r[((*r)-3)+:4]
  13. write(t,z)
  14.  
  15. #запускаем процедуру преобразования в uue
  16. #если строка f содержит 60 символов,то записываем
  17. #ее с символом М впереди
  18. #иначе записываем эту строку с другим символом,
  19. #отражающим ее размер
  20. while f:=f||(|rd(g)) do {
  21.     if *f=60 then {
  22.         write(t,"M"||f)
  23.         f:=""
  24.     }
  25. }
  26. if (*f~=0)&(*f<60) then {
  27.     o:=(((*f)*6)/8)+32
  28.     write(t,char(o)||f)
  29. }
  30.  
  31. #запись конечной строки и символа защиты от повреждения
  32. write(t,"`\n","end")
  33. end
  34.  
  35. #перевод в двоичную систему,8-битный формат
  36. procedure to_bin(x)
  37. local r,s,n
  38. n:=x
  39. s:=""
  40. while n>=1 do {
  41.  r:=n%2
  42.  s:=s||r
  43.  n:=integer(n/2)
  44. }
  45. s:=reverse(s)
  46. while *s~=8 do {
  47.   s:="0"||s
  48. }
  49. return string(s)
  50. end
  51.  
  52. #перевод двоичного числа в десятичное
  53. procedure to_dec(d)
  54. local b,i,v
  55. b:=0
  56. v:=reverse(d)
  57. every i:=1 to *d do {
  58.   b:=b+((2^(i-1))*v[i])
  59. }
  60. return b
  61. end
  62.  
  63. #преобразование трех байт в четверку из 6 битов
  64. #и интерпретация их как символов ASCII
  65. procedure rd(g)
  66. local s,d,t,a1,a2,a3,a4,v
  67. d:=""
  68. v:=""
  69. while s:=reads(g,3) do {
  70. every t:=1 to *s do {
  71.  d:=d||to_bin(ord(s[t]))   
  72. }
  73. while *d~=24 do {
  74.  d:=d||"0" 
  75. }
  76. a1:=char(to_dec(d[1+:6])+32)
  77. a2:=char(to_dec(d[7+:6])+32)
  78. a3:=char(to_dec(d[13+:6])+32)
  79. a4:=char(to_dec(d[19+:6])+32)
  80. v:=a1||a2||a3||a4
  81. return v
  82. }
  83. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement