{$E+} program signs; {kilobaud, Aug '78, page 90 program originally in North Star BASIC by Joseph J. Roehrig numbers in brackets indicate line numbers in original program } LABEL 1; TYPE $str8 = string 8; VAR fout : text; V : array[0..31] of integer; {patterns} L$ : array[1..27] of char; {top of array equ number of chars} L : array[1..27,1..7] of integer; {dimensions of each letter} Z : array[1..5] of integer; D1$: array[1..7]of char; D$ : array[1..7]of char; {top of array equ total number of letters} C$ : char; a, b, c, d, f, g, q, e : integer; function ucase(ch:char):char; {This function filters all non-alphabetical characters, replacing them with blanks. It also converts all lower case letters to upper case.} begin if ch in ['A'..'Z'] then ucase := ch {accept uppers} else if ch in ['a'..'z'] then {translate to upper case} ucase := chr(ord(ch) - 32) else ucase := ' ' {filter illegal characters} end; {ucase} procedure setarray; {This procedure fills the array L with the font values from "font.dat". It takes the place of a series of DATA statements in the original BASIC program.} var letter : $str8; a,b : integer; fin : file of $str8; {L : array [1..27,1..7] of integer - global} begin reset('font.dat',fin); {font.dat contains array values} for a := 1 to 27 do {70, set loop value to tot # chars formed} begin readln(fin,letter); {'letter' contains 8 char; 1st 7 are significant} for b := 1 to 7 do {8th is "for info" label} begin L[a,b] := ord(letter[b])-64; {80} end; {for b} end; {for a} end; {procedure setarray} begin {main program} D1$ := ' '; {7 blanks} L$ := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ '; {15} z[1] := 10000; z[2] := 1000; z[3] := 100; z[4] := 10; z[5] := 1; for a := 1 to 7 do {40 7 is the number of lines of ltrs} begin D$[a] := ' '; {fill array D$ with blanks} end; v[0]:=0; v[1]:=1; {50 read binary number line} v[2]:=10; v[3]:=11; v[4]:=100; v[5]:=101; v[6]:=110; v[7]:=111; v[8]:=1000; v[9]:=1001; v[10]:= 1010; v[11]:=1011; v[12]:= 1100; v[13]:=1101; v[14]:=1110; v[15]:=1111; for a := 16 to 31 do v[a] := 10000+v[a-16]; {60} {there has to be a better way to fill this array, when you find it, let me know} setarray; {70,80} rewrite('lst:',fout); writeln('Instructions: This program will accept upper case'); writeln('characters and blanks. (Lower case letters will translate)'); writeln('Enter a period and a carriage return to end.'); writeln; while D1$[1] <> '.' do begin {while} Writeln('Input line:'); writeln('_______'); readln(D1$); if D1$[1] = '.' then goto 1; {sorry, had to GOTO} for e := 1 to 7 do D$[e] := ucase(D1$[e]); {98 "get paper ready & enter } for d := 1 to 7 do {105} begin for b := 1 to 7 do {110} begin c := b; {120} C$ := D$[c]; {122} c := ord(C$); c := c-64; {124} if 0 > c then c := 27; f := L[c,d]; {135} f := v[f]; {136} q := c; {137} for e := 1 to 5 do {150} begin g := trunc(f div z[e]); {160} f := f-(g*z[e]); {165} if g = 1 then write(fout,L$[q],L$[q]) {170} else write(fout,' '); end; {for e} write(fout,' '); {200, number of spaces between letters} end; {for b} writeln(fout,' '); {220, ends each line of print} end; {for d} writeln(fout); writeln(fout); {230, 2 blank lines between each printed string} 1: end; {while} end. .