home *** CD-ROM | disk | FTP | other *** search
- {$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 <cr>}
- 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.
-