|
|
1.1 root 1: /* ANS2MSG.C */
2:
3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
4:
5: /* Convert ANSI messages to Synchronet .MSG (Ctrl-A code) format */
6:
7: #include <stdio.h>
8: #include <conio.h>
9:
10: int main(int argc, char **argv)
11: {
12: char esc,n[25],ni;
13: int i,ch;
14: FILE *in,*out;
15:
16: if(argc<3) {
17: printf("\nANS2MSG v1.06\n");
18: printf("\nusage: ans2msg infile.ans outfile.msg\n");
19: exit(0); }
20:
21: if((in=fopen(argv[1],"rb"))==NULL) {
22: printf("\nerror opening %s\n",argv[1]);
23: exit(1); }
24:
25: if((out=fopen(argv[2],"wb"))==NULL) {
26: printf("\nerror opening %s\n",argv[2]);
27: exit(1); }
28:
29: esc=0;
30: while((ch=fgetc(in))!=EOF) {
31: if(ch=='[' && esc) { /* ANSI escape sequence */
32: ni=0; /* zero number index */
33: while((ch=fgetc(in))!=EOF) {
34: if(isdigit(ch)) { /* 1 digit */
35: n[ni]=ch&0xf;
36: ch=fgetc(in);
37: if(ch==EOF)
38: break;
39: if(isdigit(ch)) { /* 2 digits */
40: n[ni]*=10;
41: n[ni]+=ch&0xf;
42: ch=fgetc(in);
43: if(ch==EOF)
44: break;
45: if(isdigit(ch)) { /* 3 digits */
46: n[ni]*=10;
47: n[ni]+=ch&0xf;
48: ch=fgetc(in); } }
49: ni++; }
50: if(ch==';')
51: continue;
52: switch(ch) {
53: case '=':
54: case '?':
55: ch=fgetc(in); /* First digit */
56: if(isdigit(ch)) ch=fgetc(in); /* l or h ? */
57: if(isdigit(ch)) ch=fgetc(in);
58: if(isdigit(ch)) fgetc(in);
59: break;
60: case 'J':
61: if(n[0]==2) /* clear screen */
62: fputs("\1l",out); /* ctrl-al */
63: break;
64: case 'K':
65: fputs("\1>",out); /* clear to eol */
66: break;
67: case 'm':
68: for(i=0;i<ni;i++) {
69: fputc(1,out); /* ctrl-ax */
70: switch(n[i]) {
71: default:
72: case 0:
73: case 2: /* no attribute */
74: fputc('n',out);
75: break;
76: case 1: /* high intensity */
77: fputc('h',out);
78: break;
79: case 3:
80: case 4:
81: case 5: /* blink */
82: case 6:
83: case 7:
84: fputc('i',out);
85: break;
86: case 8: /* concealed */
87: fputc('e',out);
88: break;
89: case 30:
90: fputc('k',out);
91: break;
92: case 31:
93: fputc('r',out);
94: break;
95: case 32:
96: fputc('g',out);
97: break;
98: case 33:
99: fputc('y',out);
100: break;
101: case 34:
102: fputc('b',out);
103: break;
104: case 35:
105: fputc('m',out);
106: break;
107: case 36:
108: fputc('c',out);
109: break;
110: case 37:
111: fputc('w',out);
112: break;
113: case 40:
114: fputc('0',out);
115: break;
116: case 41:
117: fputc('1',out);
118: break;
119: case 42:
120: fputc('2',out);
121: break;
122: case 43:
123: fputc('3',out);
124: break;
125: case 44:
126: fputc('4',out);
127: break;
128: case 45:
129: fputc('5',out);
130: break;
131: case 46:
132: fputc('6',out);
133: break;
134: case 47:
135: fputc('7',out);
136: break; } }
137: break;
138: case 'C':
139: fprintf(out,"\1%c",0x7f+n[0]);
140: break;
141: default:
142: printf("Unsupported ANSI code '%c'\r\n",ch);
143: break; }
144: break; } /* end of while */
145: esc=0;
146: continue; } /* end of ANSI expansion */
147: if(ch=='\x1b')
148: esc=1;
149: else {
150: esc=0;
151: fputc(ch,out); } }
152: fcloseall();
153: return(0);
154: }
155:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.