home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol085
/
signs.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1984-04-29
|
4KB
|
119 lines
{$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.