%begin {Character set conversion for P-Code Pascal tape. ADC} %const %byte %array Map(0:63) = {0} 0 {NULL}, {1} 'A','B','C','D','E','F','G','H','I','J','K','L', 'M','N','O','P','Q','R','S','T','U','V','W','X', 'Y','Z', {27} '0','1','2','3','4','5','6','7','8','9', {37} '+','-','*','/','(',')','$','=',' ',',','.','''', '[',']',':',0(4),'^',0,'<','>',0(3),';', 0(*) %integer Sym, Stopping %const %integer Input ended = 9 %string(255) Line %integer %function Get sym %own %short %integer Count = 0, k %integer Sym = 0, j %for j = 1, 1, 6 %cycle {Read a six-bit character} Read symbol(k) %if Count&7 = 0 Sym = (Sym<<1) ! (k>>7) k = (k<<1) & x'FF' Count = Count + 1 %repeat %result = Map(Sym) %end %on Input Ended %start Stopping = 1 -> EOF %finish Line = "" Stopping = 0 %cycle Sym = Get sym %if Sym = 0 %start Sym = Get Sym %until Sym # 0 EOF: %if Length(Line) > 10 %start Length(Line) = Length(Line) - 10 {Strip seq number} %finish %while Line # "" %and Char no(Line, Length(Line)) = ' ' %cycle Length(Line) = Length(Line) - 1 %repeat Print string(Line) Newline %if Stopping # 0 %start Close output %stop %finish Line = "" %finish Line = Line . To String(Sym) %repeat %end %of %program