|
|
1.1 root 1: /*%cc -O %
2: */
3: char copr[] = "Copyright (c) 1976 Thomas S. Duff";
4: #include <stdio.h>
5: #define NCOLS (132+1)
6: #define CENTRE 1
7: #define UL 2
8: #define UR 4
9: #define LL 8
10: #define LR 16
11: char line[NCOLS+1][3];
12: char outline[NCOLS];
13: int eof;
14: int xs, ys;
15: int nsp;
16: char buf[BUFSIZ];
17: main(argc, argv)
18: char *argv[];
19: {
20: extern fout;
21: if(argc!=3){
22: fprintf(stderr, "Usage: rnd verscale horscale\n");
23: exit(1);
24: }
25: setbuf(stdout, buf);
26: ys=atoi(argv[1]);
27: xs=atoi(argv[2]);
28: readline();
29: while(!eof){
30: readline();
31: fill();
32: writeline();
33: }
34: }
35: readline(){
36: register c;
37: register i;
38: for(i=1;i!=NCOLS;i++){
39: line[i][0]=line[i][1];
40: line[i][1]=line[i][2];
41: }
42: if(eof)
43: for(i=1;i!=NCOLS;i++)
44: line[i][3]=0;
45:
46: else{
47: for(i=1;i!=NCOLS;i++){
48: switch(getchar()){
49: case EOF:
50: eof++;
51: case '\n':
52: for(;i!=NCOLS;i++)
53: line[i][2]=0;
54: return;
55: case ' ':
56: line[i][2]=0;
57: break;
58: default:
59: line[i][2]=1;
60: }
61: }
62: while(getchar()!='\n');
63: }
64: }
65: #define wchars(bit,ctrl) if(outline[i]&bit)for(ctrl)putx();else for(ctrl)nsp++
66: writeline(){
67: register i, j, k;
68: int t;
69: for(j=0;j<ys/2;j++){
70: t=xs/2-j*xs/ys;
71: if(t<0)
72: t=0;
73: for(i=1;i!=NCOLS;i++){
74: wchars(UL, k=0;k<t;k++);
75: wchars(CENTRE, ;k<xs-t;k++);
76: wchars(UR, ;k<xs;k++);
77: }
78: nsp=0;
79: putchar('\n');
80: }
81: for(;j<ys;j++){
82: t=j*xs/ys-xs/2;
83: if(t<0)
84: t=0;
85: for(i=1;i!=NCOLS;i++){
86: wchars(LL, k=0;k<t;k++);
87: wchars(CENTRE, ;k<xs-t;k++);
88: wchars(LR, ;k<xs;k++);
89: }
90: nsp=0;
91: putchar('\n');
92: }
93: }
94: putx(){
95: register i;
96: i=nsp;
97: if(i)
98: do
99: putchar(' ');
100: while(--i);
101: putchar('#');
102: nsp=0;
103: }
104: #define NDIRS 4
105: char corner[NDIRS] = {
106: UL,
107: UR,
108: LL,
109: LR};
110: struct{
111: int x0, y0, x1, y1, x2, y2;
112: }full[NDIRS] = {
113: -1,0,0,0,-1,1,
114: 0,0,1,0,1,1,
115: -1,1,-1,2,0,2,
116: 1,1,1,2,0,2
117: };
118: struct{
119: int x0, y0, x1, y1;
120: }empty[NDIRS] = {
121: -1,1,0,0,
122: 0,0,1,1,
123: -1,1,0,2,
124: 0,2,1,1
125: };
126: fill(){
127: register i, j;
128: for(i=1;i!=NCOLS;i++)
129: if(line[i][1]){
130: outline[i]=CENTRE;
131: for(j=0;j!=NDIRS;j++)
132: if(line[full[j].x0+i][full[j].y0])
133: outline[i]|=corner[j];
134: else if(line[full[j].x1+i][full[j].y1])
135: outline[i]|=corner[j];
136: else if(line[full[j].x2+i][full[j].y2])
137: outline[i]|=corner[j];
138: }
139: else{
140: outline[i]=0;
141: for(j=0;j!=NDIRS;j++)
142: if(line[empty[j].x0+i][empty[j].y0]
143: && line[empty[j].x1+i][empty[j].y1])
144: outline[i]|=corner[j];
145: }
146: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.