annotate lib-src/mule/mulelib.c @ 140:585fb297b004 r20-2b4

Import from CVS: tag r20-2b4
author cvs
date Mon, 13 Aug 2007 09:32:43 +0200
parents 131b0175ea99
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
70
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
1 #include <stdio.h>
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
2 #include <sys/param.h>
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
3 #include "mulelib.h"
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
4
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
5 #ifdef STDC_HEADERS
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
6 #include <stdlib.h>
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
7 #endif
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
8
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
9 #ifdef USG
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
10 #include <string.h>
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
11 #else
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
12 #include <strings.h>
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
13 #endif
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
14
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
15 #include <ctype.h>
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
16
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
17 char *mule_library_version = "2.2";
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
18
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
19 int mule_error;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
20 char mule_error_msg[256];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
21
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
22 static int mulelib_initialized = 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
23
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
24 #ifdef MSDOS
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
25 #define READ_TEXT "rt"
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
26 #else /* not MSDOS */
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
27 #define READ_TEXT "r"
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
28 #endif /* not MSDOS */
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
29
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
30 /********************
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
31 * General routines *
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
32 ********************/
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
33
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
34 #define LINE_SIZE 4096
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
35
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
36 FILE *
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
37 open_file(dirs, file)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
38 char *dirs, *file;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
39 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
40 char path[MAXPATHLEN], *tail;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
41 int len;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
42 FILE *fp;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
43
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
44 if (file[0] == '/'
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
45 #ifdef MSDOS
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
46 || file[0] && file[1] == ':'
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
47 #endif
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
48 )
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
49 return fopen(file, READ_TEXT);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
50
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
51 while (*dirs) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
52 (tail = index(dirs, ','))
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
53 #ifdef MSDOS
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
54 || (tail = index(dirs, ';'))
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
55 #else
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
56 || (tail = index(dirs, ':'))
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
57 #endif
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
58 || (tail = index(dirs, '\0'));
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
59
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
60 len = tail - dirs;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
61 strncpy(path, dirs, len);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
62 while (path[--len] == '/'); /* back to non-slash */
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
63 path[++len] = '/';
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
64 strcpy(&path[++len], file);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
65
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
66 fp = fopen (path, READ_TEXT);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
67 if (fp || *tail == '\0') return fp;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
68
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
69 dirs = tail + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
70 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
71 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
72
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
73 get_line(buf, size, fp)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
74 char *buf;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
75 int size;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
76 FILE *fp;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
77 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
78 int len;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
79
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
80 if (fgets(buf, size, fp) != NULL) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
81 len = strlen(buf);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
82 if (buf[len - 1] == '\n')
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
83 buf[--len] = '\0';
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
84 return len;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
85 } else
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
86 return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
87 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
88
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
89 #define PROCEED_CHAR(c) \
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
90 if (!(p1 = (char *)index(p0, c))) goto invalid_entry
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
91
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
92 warning1(format, arg1)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
93 char *format;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
94 int arg1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
95 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
96 fprintf(stderr, format, arg1);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
97 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
98
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
99 warning2(format, arg1, arg2)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
100 char *format;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
101 int arg1, arg2;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
102 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
103 fprintf(stderr, format, arg1, arg2);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
104 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
105
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
106 warning3(format, arg1, arg2, arg3)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
107 char *format;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
108 int arg1, arg2, arg3;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
109 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
110 fprintf(stderr, format, arg1, arg2, arg3);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
111 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
112
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
113 fatal1(arg)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
114 char *arg;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
115 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
116 fprintf(stderr, "%s", arg);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
117 exit(1);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
118 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
119
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
120 /*****************************
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
121 * Reading CHARSETS database *
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
122 *****************************/
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
123
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
124 /* extra information table */
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
125 char *font_name[128];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
126 int font_encoding[128];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
127
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
128 set_charsets_param(line)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
129 char *line;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
130 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
131 char *p0 = line, *p1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
132 int len;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
133 unsigned char lc, bytes, clm, type, graphic, final, direction;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
134 char *doc;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
135
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
136 lc = atoi(p0);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
137
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
138 PROCEED_CHAR(':');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
139 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
140 bytes = atoi(p0);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
141
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
142 PROCEED_CHAR(':');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
143 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
144 clm = atoi(p0);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
145
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
146 PROCEED_CHAR(':');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
147 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
148 type = atoi(p0);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
149
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
150 PROCEED_CHAR(':');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
151 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
152 graphic = atoi(p0);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
153
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
154 PROCEED_CHAR(':');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
155 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
156 final = atoi(p0);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
157
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
158 PROCEED_CHAR(':');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
159 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
160 direction = atoi(p0);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
161
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
162 PROCEED_CHAR(':');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
163 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
164 (p1 = index(p0, ':')) || (p1 = index(p0, '\0'));
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
165 len = p1 - p0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
166 doc = (char *)malloc(len + 1);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
167 bcopy(p0, doc, len);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
168 doc[len] = '\0';
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
169
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
170 update_mc_table(lc, bytes, clm, type, graphic, final, direction, doc);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
171
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
172 if (*p1) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
173 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
174 (p1 = index(p0, ':')) || (p1 = index(p0, '\0'));
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
175 len = p1 - p0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
176 font_name[lc & 0x7F] = (char *)malloc(len + 1);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
177 bcopy(p0, font_name[lc & 0x7F], len);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
178 font_name[lc & 0x7F][len] = '\0';
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
179
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
180 font_encoding[lc & 0x7F] = *p1 ? atoi(p1) : 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
181 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
182
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
183 return 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
184
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
185 invalid_entry:
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
186 mule_error = MULE_ERROR_INVALID_CHARSETS;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
187 sprintf(mule_error_msg, "Invalid line in CHARSETS file: %s", line);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
188 return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
189 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
190
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
191 set_ccl_program_param(line)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
192 char *line;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
193 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
194 int lc, len, i, j;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
195 char *p, *p1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
196 Lisp_Object ccl;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
197
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
198 lc = atoi(line) & 0x7F;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
199 p = p1 = index(line, ':') + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
200 if (!p) return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
201 len = 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
202 while (*p1) if (*p1++ == ' ') len++;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
203 ccl = make_vector(len);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
204 for (i = 0; i < len; i++) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
205 sscanf(p, "%x", XVECTOR (ccl)->contents + i);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
206 p = index(p + 1, ' ');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
207 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
208 x_ccl_programs[lc] = (CCL_PROGRAM *)malloc(sizeof (CCL_PROGRAM));
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
209 set_ccl_program(x_ccl_programs[lc], ccl);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
210 return 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
211 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
212
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
213 charsets_initialize(charsets)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
214 char *charsets;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
215 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
216 FILE *fp;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
217 char line[LINE_SIZE];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
218 int i, status;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
219
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
220 if (!charsets) charsets = CHARSETS;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
221 fp = open_file(PATH_DATA, charsets);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
222 if (!fp) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
223 mule_error = MULE_ERROR_NO_CHARSETS;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
224 sprintf(mule_error_msg, "File %s not in the path %s", charsets, PATH_DATA);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
225 return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
226 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
227 init_charset_once();
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
228 for (i = 0; i < 128; i++)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
229 x_ccl_programs[i] = NULL;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
230
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
231 status = 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
232 while (get_line(line, sizeof line, fp) >= 0) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
233 if (line[0] == '#') {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
234 if (status > 0) status++;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
235 continue;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
236 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
237 if (status <= 1) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
238 status = 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
239 if (set_charsets_param(line) < 0) return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
240 } else {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
241 if (set_ccl_program_param(line) < 0) return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
242 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
243 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
244 return 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
245 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
246
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
247 /*****************************
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
248 * Reading CODINGS database *
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
249 *****************************/
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
250
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
251 coding_type coding_system_table[CODING_SYSTEM_COUNT];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
252 int n_base_coding_system = 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
253 int n_coding_system;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
254
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
255 set_coding_system_param(line, cs)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
256 char *line;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
257 coding_type *cs;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
258 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
259 char *p0 = line, *p1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
260 int len, i;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
261
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
262 PROCEED_CHAR(':');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
263 len = p1 - p0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
264 cs->name = (char *)malloc(len + 1);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
265 bcopy(p0, cs->name, len);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
266 cs->name[len] = '\0';
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
267
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
268 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
269 i = atoi(p0);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
270 CODE_TYPE_SET(cs, i);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
271
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
272 PROCEED_CHAR(':');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
273 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
274 cs->mnemonic = *p0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
275
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
276 PROCEED_CHAR(':');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
277 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
278 i = atoi(p0);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
279 CODE_FORM (cs)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
280 = (i==0) ? CODE_EOL_AUTO : (i==1) ? CODE_EOL_LF
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
281 : (i==2) ? CODE_EOL_CRLF : CODE_EOL_CR;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
282 CODE_LF (cs) = CODE_CRLF (cs) = CODE_CR (cs) = Qnil;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
283
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
284 PROCEED_CHAR(':');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
285 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
286 if (CODE_TYPE (cs) == ISO2022) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
287 int flags[12];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
288 for (i = 0; i < 11; i++) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
289 if (!(flags[i] = atoi(p0))) flags[i] = Qnil;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
290 PROCEED_CHAR(',');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
291 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
292 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
293 flags[i] = atoi(p0);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
294 CODE_LC_SET(cs, flags[0], flags[1], flags[2], flags[3]);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
295 CODE_FORM_SET(cs, (Lisp_Object)flags[4], (Lisp_Object)flags[5],
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
296 (Lisp_Object)flags[6], (Lisp_Object)flags[7],
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
297 (Lisp_Object)flags[8], (Lisp_Object)flags[9],
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
298 (Lisp_Object)flags[10], (Lisp_Object)flags[11]);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
299 } else if (CODE_TYPE (cs) == BIG5) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
300 CODE_FORM_SET(cs, Qnil, Qnil, Qnil, Qnil, Qnil, Qnil, Qnil, Qnil);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
301 } else if (CODE_TYPE (cs) == CCL) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
302 int len;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
303 char *start = p0, c;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
304 Lisp_Object ccl;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
305
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
306 len = 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
307 while ((c = *p0++) != ',') if (c == ' ') len++;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
308 ccl = make_vector (len);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
309 for (i = 0; i < len; i++) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
310 sscanf(start, "%x", XVECTOR (ccl)->contents + i);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
311 start = index (start + 1, ' ');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
312 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
313 set_ccl_program (&CODE_CCL_ENCODE (cs), ccl);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
314
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
315 start = p0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
316 len = 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
317 while ((c = *p0++) != ':') if (c == ' ') len++;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
318 ccl = make_vector (len);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
319 for (i = 0; i < len; i++) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
320 sscanf(start, "%x", XVECTOR (ccl)->contents + i);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
321 start = index (start + 1, ' ');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
322 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
323 set_ccl_program (&CODE_CCL_DECODE (cs), ccl);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
324 p0 -= 2;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
325 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
326
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
327 PROCEED_CHAR(':');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
328 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
329 len = strlen(p0);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
330 cs->doc = (char *)malloc(len + 1);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
331 bcopy(p0, cs->doc, len + 1);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
332 return 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
333
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
334 invalid_entry:
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
335 mule_error = MULE_ERROR_INVALID_CODING;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
336 sprintf(mule_error_msg, "Invalid line in CODINGS file: %s", line);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
337 return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
338 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
339
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
340 char *coding_category_names[IDX_BIN + 1] = {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
341 "*coding-category-internal*",
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
342 "*coding-category-sjis*",
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
343 "*coding-category-iso-7*",
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
344 "*coding-category-iso-8-1*",
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
345 "*coding-category-iso-8-2*",
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
346 "*coding-category-iso-else*",
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
347 "*coding-category-big5*",
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
348 "*coding-category-bin*"};
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
349
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
350 set_coding_category(line, priority)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
351 char *line;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
352 int priority;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
353 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
354 char *p0 = line, *p1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
355 int i, len;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
356
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
357 PROCEED_CHAR(':');
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
358 len = p1 - p0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
359 for (i = 0; i <= IDX_BIN; i++) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
360 if (!strncmp(p0, XSYMBOL (code_category[i])->name, len))
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
361 break;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
362 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
363 if (i <= IDX_BIN) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
364 code_priority_category[priority] = i;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
365 p0 = p1 + 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
366 XSYMBOL (code_category[i])->value = make_symbol(p0);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
367 return 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
368 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
369
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
370 invalid_entry:
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
371 mule_error = MULE_ERROR_INVALID_CODING;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
372 sprintf(mule_error_msg, "Invalid line in CODINGS file: %s", line);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
373 return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
374 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
375
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
376 codings_initialize(codings)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
377 char *codings;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
378 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
379 FILE *fp;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
380 char line[LINE_SIZE];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
381 char *coding_category_header = "## LIST OF CODING CATEGORIES";
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
382 coding_type *cs;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
383 int i;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
384
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
385 if (!codings) codings = CODINGS;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
386 fp = open_file(PATH_DATA, codings);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
387 if (!fp) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
388 mule_error = MULE_ERROR_NO_CODING;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
389 sprintf(mule_error_msg, "File %s not in the path %s!", codings, PATH_DATA);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
390 return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
391 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
392 n_coding_system = 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
393 while (get_line(line, sizeof line, fp) >= 0
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
394 && strncmp(line, coding_category_header,
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
395 strlen(coding_category_header))) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
396 if (line[0] != '#') {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
397 if (set_coding_system_param(line, coding_system_table + n_coding_system)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
398 < 0)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
399 return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
400 n_coding_system++;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
401 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
402 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
403
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
404 n_base_coding_system = n_coding_system;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
405
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
406 for (i = 0; i < n_base_coding_system; i++) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
407 if (CODE_TYPE (&coding_system_table[i]) != CCL) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
408 sprintf(line, "%sunix", coding_system_table[i].name);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
409 coding_system_table[i].eol_lf = make_symbol(line);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
410 cs = &coding_system_table[n_coding_system++];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
411 *cs = coding_system_table[i];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
412 cs->name = XSYMBOL (coding_system_table[i].eol_lf)->name;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
413 CODE_FORM (cs) |= CODE_EOL_LF;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
414 CODE_LF (cs) = CODE_CRLF (cs) = CODE_CR (cs) = Qnil;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
415
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
416 sprintf(line, "%sdos", coding_system_table[i].name);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
417 coding_system_table[i].eol_crlf = make_symbol(line);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
418 cs = &coding_system_table[n_coding_system++];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
419 *cs = coding_system_table[i];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
420 cs->name = XSYMBOL (coding_system_table[i].eol_crlf)->name;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
421 CODE_FORM (cs) |= CODE_EOL_CRLF;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
422 CODE_LF (cs) = CODE_CRLF (cs) = CODE_CR (cs) = Qnil;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
423
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
424 sprintf(line, "%smac", coding_system_table[i].name);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
425 coding_system_table[i].eol_cr = make_symbol(line);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
426 cs = &coding_system_table[n_coding_system++];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
427 *cs = coding_system_table[i];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
428 cs->name = XSYMBOL (coding_system_table[i].eol_cr)->name;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
429 CODE_FORM (cs) |= CODE_EOL_CR;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
430 CODE_LF (cs) = CODE_CRLF (cs) = CODE_CR (cs) = Qnil;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
431 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
432 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
433
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
434 for (i = 0; i <= IDX_BIN; i++)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
435 code_category[i] = make_symbol(coding_category_names[i]);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
436 i = 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
437 while (get_line(line, sizeof line, fp) >= 0) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
438 if (line[0] && line[0] != '#') {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
439 if (set_coding_category(line, i) < 0)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
440 return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
441 i++;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
442 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
443 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
444 return 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
445 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
446
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
447 static
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
448 find_coding(str)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
449 char *str;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
450 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
451 int i;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
452
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
453 if (*str == '*') {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
454 for (i = 0; i < n_coding_system; i++)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
455 if (!strcmp(str, coding_system_table[i].name)) return i;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
456 } else {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
457 unsigned int eol_type;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
458 switch (str[1]) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
459 case '\0': eol_type = CODE_EOL_AUTO; break;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
460 case '.': eol_type = CODE_EOL_LF; break;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
461 case ':': eol_type = CODE_EOL_CRLF; break;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
462 case '\'': eol_type = CODE_EOL_CR; break;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
463 default: return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
464 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
465 for (i = 0; i < n_coding_system; i++)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
466 if (coding_system_table[i].mnemonic == *str
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
467 && (CODE_FORM (&coding_system_table[i]) & CODE_EOL_MASK) == eol_type)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
468 return i;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
469 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
470 return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
471 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
472
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
473 encode_code(code, mccode)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
474 Lisp_Object code;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
475 coding_type *mccode;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
476 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
477 int i;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
478
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
479 if ((i = find_coding(XSYMBOL (code)->name)) >= 0)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
480 *mccode = coding_system_table[i];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
481 else
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
482 CODE_TYPE_SET (mccode, NOCONV);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
483 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
484
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
485 set_coding_system(inname, incode, outname, outcode)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
486 char *inname, *outname;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
487 coding_type *incode, *outcode;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
488 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
489 int i;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
490
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
491 if (inname == NULL) inname = "*autoconv*";
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
492 if ((i = find_coding(inname)) < 0) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
493 mule_error = MULE_ERROR_UNKNOWN_CODE;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
494 sprintf(mule_error_msg, "Unknown code: %s", inname);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
495 return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
496 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
497 *incode = coding_system_table[i];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
498
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
499 if (outname == NULL) outname = "*internal*";
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
500 if ((i = find_coding(outname)) < 0) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
501 mule_error = MULE_ERROR_UNKNOWN_CODE;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
502 sprintf(mule_error_msg, "Unknown code: %s", outname);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
503 return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
504 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
505 *outcode = coding_system_table[i];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
506
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
507 return 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
508 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
509
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
510 code_conversion(incode, inbuf, insize, outcode, outbuf, outsize)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
511 coding_type *incode, *outcode;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
512 char *inbuf, *outbuf;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
513 int insize, outsize;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
514 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
515 Lisp_Object found = Qnil;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
516 char *buf1, *buf2;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
517 int buf1_used = 0, buf2_used = 0, n;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
518
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
519 if (insize > 0) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
520 if (CODE_TYPE (incode) == ITNCODE) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
521 buf1 = inbuf;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
522 n = insize;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
523 } else {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
524 buf1 = (char *)malloc(ENCODE_BUF_SIZE(insize, incode));
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
525 buf1_used = 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
526 n = encode(incode, inbuf, buf1, insize, &found);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
527 if (found != Qnil)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
528 incode->name = (char *)XSYMBOL (found)->name;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
529 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
530 } else {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
531 buf1 = inbuf;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
532 n = 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
533 CODE_CNTL(outcode) |= CC_END;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
534 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
535
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
536 if (CODE_TYPE (outcode) == ITNCODE) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
537 buf2 = buf1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
538 } else {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
539 if ((CODE_FORM (outcode) & CODE_EOL_MASK) == CODE_EOL_AUTO
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
540 && (CODE_FORM (incode) & CODE_EOL_MASK) != CODE_EOL_AUTO) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
541 unsigned int eol = CODE_FORM (incode) & CODE_EOL_MASK;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
542
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
543 CODE_FORM (outcode) |= eol;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
544 switch (eol) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
545 case CODE_EOL_LF:
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
546 outcode->name = (char *)XSYMBOL (outcode->eol_lf)->name; break;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
547 case CODE_EOL_CRLF:
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
548 outcode->name = (char *)XSYMBOL (outcode->eol_crlf)->name; break;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
549 case CODE_EOL_CR:
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
550 outcode->name = (char *)XSYMBOL (outcode->eol_cr)->name; break;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
551 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
552 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
553 buf2 = (char *)malloc(DECODE_BUF_SIZE(n, outcode));
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
554 buf2_used = 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
555 n = decode(outcode, buf1, buf2, n);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
556 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
557
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
558 if (n <= outsize) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
559 bcopy(buf2, outbuf, n);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
560 } else {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
561 bcopy(buf2, outbuf, outsize);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
562 mule_error = MULE_ERROR_OVERFLOW;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
563 sprintf(mule_error_msg, "Output buffer overflow");
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
564 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
565
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
566 if (buf2_used) free(buf2);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
567 if (buf1_used) free(buf1);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
568 return (n <= outsize ? n : -1);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
569 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
570
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
571 /****************
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
572 * MSDOS staffs *
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
573 ****************/
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
574
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
575 #ifdef MSDOS
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
576
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
577 static char emacsroot[MAXPATHLEN];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
578
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
579 void
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
580 init_environment (argc, argv, skip_args)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
581 int argc;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
582 char **argv;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
583 int skip_args;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
584 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
585 char *s, *t, *root;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
586 int len;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
587
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
588 /* Find our root from argv[0]. Assuming argv[0] is, say,
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
589 "c:/emacs/bin/emacs.exe" our root will be "c:/emacs". */
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
590 len = strlen (argv[0]);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
591 root = alloca (len + 10); /* A little extra space for the stuff below. */
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
592 strcpy (root, argv[0]);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
593 while (len > 0 && root[len] != '/' && root[len] != ':')
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
594 len--;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
595 root[len] = '\0';
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
596 if (len > 4 && strcmp (root + len - 4, "/bin") == 0)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
597 root[len - 4] = '\0';
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
598 else
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
599 strcpy (root, "c:/emacs"); /* Only under debuggers, I think. */
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
600 len = strlen (root);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
601 strcpy (emacsroot, root);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
602 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
603
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
604 char *
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
605 rootrelativepath (rel)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
606 char *rel;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
607 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
608 static char result[MAXPATHLEN + 10];
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
609
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
610 strcpy (result, emacsroot);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
611 strcat (result, "/");
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
612 strcat (result, rel);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
613 return result;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
614 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
615
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
616 #endif /* MSDOS */
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
617
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
618 /***************
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
619 * INITIALIZER *
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
620 ***************/
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
621
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
622 mulelib_initialize(argc, argv, charsets, codings)
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
623 int argc;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
624 char **argv, *charsets, *codings;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
625 {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
626 if (!mulelib_initialized) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
627 int i;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
628
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
629 #ifdef MSDOS
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
630 init_environment(argc, argv, 0);
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
631 #endif
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
632
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
633 for (i = 0; i < 128; i++) {
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
634 font_name[i] = NULL;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
635 font_encoding[i] = 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
636 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
637
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
638 if (charsets_initialize(charsets) < 0) return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
639 if (codings_initialize(codings) < 0) return -1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
640 mulelib_initialized = 1;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
641 }
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
642 return 0;
131b0175ea99 Import from CVS: tag r20-0b30
cvs
parents:
diff changeset
643 }