AUSAM/source/S/message.c
#define CHPERL 11 /* characters per line */
#define LNPERCH 12 /* lines per character */
#define CHR '@' /* the character printed out */
char letters[] "/usr/lib/letters";
int line[LNPERCH * CHPERL];
char **gargv;
int colcnt; /* current printing column */
int blanks; /* blanks since last character */
main(ac, av)
char *av[];
{
register char c;
register cnt, *wp;
int fd, count, linec;
if ((fd = open(letters, 0)) < 0)
{
perror(letters);
return 1;
}
if (ac == 1) prints(2, "\007Go Ahead (11 chars/line; 5 lines/page)\n");
else gargv = ++av;
for (;;)
{
for (count = 0; count < CHPERL; count++)
{
if ((c = getch()) == '\n' || c == 0) break;
if (c < ' ')
{
prints(2, "Control-chrs. not allowed.\n");
c = ' ';
}
seek(fd, (c - ' ') * 2 * LNPERCH, 0);
if (read(fd, &line[count * LNPERCH], 2 * LNPERCH) != 2 * LNPERCH)
{
perror(letters);
return 1;
}
}
if (c == 0 && count == 0) break;
if (c && c != '\n') while ((c = getch()) && c != '\n');
for (linec = 0; linec < LNPERCH; linec++)
{
wp = &line[linec];
for (cnt = 0; cnt < count; cnt++)
{
print(*wp);
wp =+ LNPERCH;
}
putchar('\n');
blanks = 0;
colcnt = 0;
}
if (c == 0) break;
}
}
getch()
{
char c;
if (gargv)
{
if (gargv == -1) return 0;
if (**gargv) return *(*gargv)++;
if (*++gargv == -1) return 0;
return '\n';
}
if (read(0, &c, 1) != 1) return 0;
return c;
}
print(wd)
register wd;
{
register mask, col;
mask = 04000;
do
if ((wd & mask) == 0) blanks++;
else
{
col = colcnt; colcnt =+ blanks; blanks = col;
while ((col = (col + 8) & ~07) <= colcnt)
{
putchar('\t');
blanks = col;
}
for (col = blanks; col < colcnt; col++) putchar(' ');
blanks = 0;
colcnt++;
putchar(CHR);
}
while (mask =>> 1);
}