procedure main() local f,o,r #вывод приглашения и инициализация строки-накопителя write("Enter a filepath:") r:=read() f:="" #открытие входного и выходного файла g:=open(r,"ru") t:=open(r||".uue","cw") #запись первой строки uue z:="begin 644 uue"||r[((*r)-3)+:4] write(t,z) #запускаем процедуру преобразования в uue #если строка f содержит 60 символов,то записываем #ее с символом М впереди #иначе записываем эту строку с другим символом, #отражающим ее размер while f:=f||(|rd(g)) do { if *f=60 then { write(t,"M"||f) f:="" } } if (*f~=0)&(*f<60) then { o:=(((*f)*6)/8)+32 write(t,char(o)||f) } #запись конечной строки и символа защиты от повреждения write(t,"`\n","end") end #перевод в двоичную систему,8-битный формат procedure to_bin(x) local r,s,n n:=x s:="" while n>=1 do { r:=n%2 s:=s||r n:=integer(n/2) } s:=reverse(s) while *s~=8 do { s:="0"||s } return string(s) end #перевод двоичного числа в десятичное procedure to_dec(d) local b,i,v b:=0 v:=reverse(d) every i:=1 to *d do { b:=b+((2^(i-1))*v[i]) } return b end #преобразование трех байт в четверку из 6 битов #и интерпретация их как символов ASCII procedure rd(g) local s,d,t,a1,a2,a3,a4,v d:="" v:="" while s:=reads(g,3) do { every t:=1 to *s do { d:=d||to_bin(ord(s[t])) } while *d~=24 do { d:=d||"0" } a1:=char(to_dec(d[1+:6])+32) a2:=char(to_dec(d[7+:6])+32) a3:=char(to_dec(d[13+:6])+32) a4:=char(to_dec(d[19+:6])+32) v:=a1||a2||a3||a4 return v } end