1 /* xtr.h */
2 /*****************************************************************************
3 					�ԣ�������У���������أԣ�
4 
5 							�ζ��̥إå��ե������
6 *****************************************************************************/
7 
8 #ifdef MSDOS			/* DOS �� XTR ��Ĥ���Ȥ��������� */
9 #undef MSDOS
10 #define MSDOS 1
11 #else
12 #ifdef __MSDOS__
13 #define MSDOS 1
14 #else
15 #ifdef _DOS
16 #define MSDOS 1
17 #endif
18 #endif
19 #endif
20 
21 #ifdef WINNT			/* NT �� XTR ��Ĥ���Ȥ��������� */
22 #undef WINNT
23 #define WINNT 1
24 #else
25 #ifdef __WIN32__
26 #define WINNT 1
27 #else
28 #ifdef WIN32
29 #define WINNT 1
30 #endif
31 #endif
32 #endif
33 
34 #if WINNT && MSDOS
35 #undef MSDOS
36 #endif
37 
38 #ifdef WINNT			/* NT �ǤǤ���ư�����������ѥС������Ȥ��� */
39 #ifndef FLOATEXPR		/* DOS �ǤǤ���ư���������Ǥˤ���ˤ� FLOATEXPR �����*/
40 #define FLOATEXPR 1
41 #endif
42 #endif
43 
44 #if MSDOS || WINNT
45 #else
46 #define UNIX 1
47 #define FLOATEXPR 1
48 #endif
49 
50 #ifdef UNIX
51 #define DIRECT_SH 1		/* DOS���ޥ�ɤμ¹Ԥ�system()��Ȥ�ʤ� */
52 #define RE3_REGEXP 1	/* re3 �Ǥϸ����ѥ����������ɽ����Ȥ���褦�ˤ��� */
53 #endif
54 
55 /* XTR �ΥС������ */
56 #ifdef UNIX
57 #define XTR_VER "1.50e/UN*X"	/* UN*X�С������ */
58 #else
59 #ifdef WINNT
60 #define XTR_VER "1.50e/NT"	/* WindowsNT�С������ */
61 #else
62 #ifdef FLOATEXPR
63 #define XTR_VER "1.50e/F"	/* DOS��ư�������С������ */
64 #else
65 #define XTR_VER "1.50e"		/* DOS�����С������ */
66 #endif /* !FLOATEXPR */
67 #endif /* !WINNT */
68 #endif /* !UNIX */
69 #ifdef __human68k__
70 #undef XTR_VER
71 #define XTR_VER "1.50e/HUMAN68K"
72 #endif
73 
74 /**************************************************************************/
75 
76 #ifdef HAVE_CONFIG_H
77 #include <config.h>
78 #else /* !HAVE_CONFIG_H */
79 #if MSDOS || WINNT
80 #include <config.dos>
81 #endif /* MSDOS || WINNT */
82 #endif /* !HAVE_CONFIG_H */
83 
84 #ifdef PROTOTYPES
85 #define ARGS(args) args
86 #else
87 #define ARGS(args) ()
88 #endif
89 
90 #ifdef __STDC__
91 #define voidstar void *
92 #else
93 #define voidstar char *
94 #endif
95 
96 #include <assert.h>
97 #include <setjmp.h>
98 #include <signal.h>
99 #include <sys/types.h>
100 #include <sys/stat.h>
101 
102 #include <ctype.h>
103 #ifndef HAVE_ISASCII
104 #define isascii(c)	(((unsigned)(c)) < 128)
105 #endif
106 int TOLOWER ARGS((int));
107 int TOUPPER ARGS((int));
108 #define TOLOWER(c)	(isupper((c)) ? tolower((c)) : (c))
109 #define TOUPPER(c)	(islower((c)) ? toupper((c)) : (c))
110 
111 #ifdef STDC_HEADERS
112 #include <stdarg.h>
113 #define VA_START(a,b)	va_start((a),(b))
114 #else
115 #include <varargs.h>
116 #define VA_START(a,b)	va_start((a))
117 #endif
118 
119 #include <stdio.h>
120 #ifndef HAVE_VPRINTF
121 int vfprintf ARGS((FILE *, const char *, va_list));
122 #endif
123 #ifndef HAVE_FLUSHALL
124 int flushall ARGS(());
125 #endif
126 #ifndef FDOPEN_DECLARED
127 FILE *fdopen ARGS((int, const char *));
128 #endif
129 
130 #ifdef STDC_HEADERS
131 #include <stdlib.h>
132 #else
133 voidstar malloc ARGS((size_t));
134 voidstar realloc ARGS((voidstar, size_t));
135 #endif
136 #ifndef HAVE_STRTOD
137 double strtod ARGS((const char *, char **));
138 #endif
139 #ifndef HAVE_STRTOL
140 long strtol ARGS((const char *, char **, int));
141 #endif
142 #ifndef HAVE_STRTOUL
143 unsigned long strtoul ARGS((const char *, char **, int));
144 #endif
145 #ifndef EXIT_SUCCESS
146 #define EXIT_SUCCESS 0
147 #define EXIT_FAILURE 1
148 #endif
149 
150 #if HAVE_STRING_H || STDC_HEADERS
151 #include <string.h>
152 #else
153 #include <strings.h>
154 #define strchr index
155 #define strrchr rindex
156 #endif
157 #ifndef HAVE_MEMCMP
158 int memcmp ARGS((const char *, const char *, int));
159 #endif
160 #ifndef HAVE_MEMCPY
161 #define memcpy(d,s,n)	memmove((d),(s),(n))
162 #endif
163 #ifndef HAVE_STRCSPN
164 int strcspn ARGS((const char *, const char *));
165 #endif
166 #ifndef HAVE_STRSPN
167 int strspn ARGS((const char *, const char *));
168 #endif
169 #ifndef HAVE_STRSTR
170 char *strstr ARGS((const char *, const char *));
171 #endif
172 #ifndef HAVE_STRUPR
173 char *strupr ARGS((char *));
174 #endif
175 #ifndef HAVE_MEMMOVE
176 char *memmove ARGS((char *, const char *, int));
177 #endif
178 #ifndef HAVE_MEMSET
179 char *memset ARGS((char *, int, int));
180 #endif
181 #ifndef HAVE_STRICMP
182 #ifdef HAVE_STRCMPI
183 #define stricmp strcmpi
184 #else /* !HAVE_STRCMPI */
185 #ifdef HAVE_STRCASECMP
186 #define stricmp strcasecmp
187 #else /* !HAVE_STRCASECMP */
188 int stricmp ARGS((const char *, const char *));
189 #endif /* !HAVE_STRCASECMP */
190 #endif /* !HAVE_STRCMPI */
191 #endif /* !HAVE_STRICMP */
192 #ifndef HAVE_STRNICMP
193 #ifdef HAVE_STRNCASECMP
194 #define strnicmp strncasecmp
195 #else /* !HAVE_STRNCASECMP */
196 int strnicmp ARGS((const char *, const char *, int));
197 #endif /* !HAVE_STRNCASECMP */
198 #endif /* !HAVE_STRNICMP */
199 #ifdef __human68k__
200 extern int (*STRCMP)();
201 #endif
202 
203 #if HAVE_FCNTL_H
204 #include <fcntl.h>
205 #endif
206 
207 #ifdef UNIX
208 #if HAVE_UNISTD_H
209 #include <unistd.h>
210 #endif
211 #else
212 #include <io.h>
213 #endif
214 
215 #if HAVE_LIMITS_H || STDC_HEADERS
216 #include <limits.h>
217 #endif
218 
219 #if TIME_WITH_SYS_TIME
220 #include <sys/time.h>
221 #include <time.h>
222 #else
223 #if HAVE_SYS_TIME_H
224 #include <sys/time.h>
225 #else
226 #include <time.h>
227 #endif
228 #endif
229 
230 #ifndef HAVE_MKTIME
231 time_t mktime ARGS((struct tm *));
232 #endif
233 #ifndef HAVE_STRFTIME
234 int strftime ARGS((char *, int, const char *, const struct tm *));
235 #endif
236 
237 #ifndef alloca
238 #ifdef __GNUC__
239 #define alloca __builtin_alloca
240 #else /* !__GNUC__ */
241 #if HAVE_ALLOCA_H
242 #include <alloca.h>
243 #else
244 #ifdef _AIX
245 #pragma alloca
246 #else
247 voidstar alloca ARGS((size_t));
248 #endif /* !_AIX */
249 #endif /* !HAVE_ALLOCA_H */
250 #endif /* !__GNUC__ */
251 #endif /* !alloca */
252 
253 #ifdef FLOATEXPR
254 #include <math.h>
255 #include <float.h>
256 #endif
257 
258 #if MSDOS || WINNT || __human68k__
259 #include <conio.h>
260 #else
261 #ifdef UNIX
262 int getch ARGS(());
263 int kbhit ARGS(());
264 #endif
265 #endif
266 
267 #ifdef MSDOS
268 #include <dos.h>
269 #endif
270 
271 #ifdef __TURBOC__
272 #include <dir.h>
273 #include <alloc.h>
274 #endif
275 
276 #ifdef UNIX
277 #include "mbc.h"
278 #endif
279 #include "xjctype.h"
280 #include "xjstring.h"
281 
282 #if __TURBOC__ || _MSC_VER
283 /* Turbo(Borland)C++ �� MSC(VC) �γ�ĥ������� */
284 #define CDECL	cdecl
285 #ifdef MSDOS
286 #define FAR	far
287 #define NEAR	near
288 #else /* !MSDOS */
289 #define FAR
290 #define NEAR
291 #endif /* !MSDOS */
292 #else /* !(__TURBOC__ || _MSC_VER) */
293 #define CDECL
294 #define FAR
295 #define NEAR
296 #endif /* !(__TURBOC__ || _MSC_VER) */
297 
298 
299 /********************** ������� ******************************************/
300 
301 typedef unsigned char	uchar;
302 #if 0
303 typedef unsigned short	ushort;
304 typedef unsigned long	ulong;
305 #endif
306 typedef unsigned char	boolean;
307 typedef unsigned short	moji;
308 
309 typedef struct strdesc {
310 	uchar	*s;
311 	short	len;
312 } strdesc_t;
313 
314 typedef enum matype {
315 	MA_NOARG,
316 	MA_VERBATIM,
317 	MA_FSTRING,
318 	MA_QSTRING,
319 	MA_EXPR,
320 	MA_VBLOCK,
321 	MA_FBLOCK,
322 	MA_AUTO,
323 } matype_t;
324 
325 /* �ޥ�������η� */
326 typedef struct marg {
327 	uchar		*s;
328 	short		len;
329 	matype_t	typ;
330 } marg_t;
331 
332 
333 /* �ޥ�������Τ���� */
334 typedef struct macro {
335 	uchar		*name;			/* �ޥ���̾ */
336 	marg_t 		body;			/* ���� */
337 	matype_t	matyp;			/* �������� */
338 	short		maxargc;		/* �����ο��κ����� */
339 	uchar 		*pvars;			/* �ѥ�᡼���ѿ��ꥹ�� */
340 	struct macro *prev;
341 } macro_t;
342 
343 
344 /* �ѿ��ꥹ�ȹ�¤����� */
345 typedef struct var {
346 	uchar *name;			/* �ѿ�̾ */
347 	uchar *val;				/* �� */
348 	short len;				/* Ĺ�� */
349 	struct var *prev;
350 } var_t;
351 
352 
353 
354 
355 /* �ִ��ꥹ�ȹ�¤����� */
356 typedef struct rpl {
357 	uchar		pref;	/* ����ʸ�������Ƭʸ���ʱѻ�����ʸ������Ͽ�� */
358 	uchar		gmode;	/* GetStr�ؤΥѥ�᡼�� */
359 	short		maxlen;	/* ���ι��� slist �Υꥹ����Ǥ�fnd�κ����Ĺ�� */
360 	struct def	*slist;
361 	struct rpl	*prev;
362 } rpl_t;
363 
364 typedef struct def {
365 	uchar		*fnd;	/* ����ʸ���� */
366 	short		fndlen;	/* ����ʸ�����Ĺ�� */
367 	uchar		*rpl;	/* �ִ�ʸ���� */
368 	short		rpllen;	/* �ִ�ʸ�����Ĺ�� */
369 	ushort		mode;	/* �⡼�ɡʹ�Ƭ����������Ƭ����������ʤɡ�*/
370 	uchar		cmode;	/* ����⡼�ɡ����楳���ɡ��ޥ�����ǽ����ʤɡ�*/
371 	uchar		grp;	/* ���롼�ס����楳��������ξ���*/
372 	struct def	*prev;
373 } def_t;
374 
375 
376 
377 /* �����ѥ�᡼����¸�ѥ����å��ꥹ�� */
378 typedef struct params {
379 	uchar e_ ;
380 	uchar w_ ;
381 	uchar f_ ;
382 	uchar a_ ;
383 	uchar aj_;
384 	uchar ac_;
385 	uchar ar_;
386 	uchar ab_;
387 	uchar as_;
388 	uchar ss_;
389 	uchar sj_;
390 	uchar al_;
391 	uchar ai_;
392 	uchar af_;
393 	uchar i_ ;
394 	uchar h_ ;
395 	uchar ip_;
396 	uchar ii_;
397 	uchar il_;
398 	uchar l_ ;
399 	uchar q_ ;
400 	uchar t_ ;
401 	uchar s_ ;
402 	uchar sz_;
403 	uchar sh_;
404 	uchar sk_;
405 	uchar sn_;
406 	uchar pj_;
407 	uchar pm_;
408 	uchar r_ ;
409 	uchar ko_;
410 	uchar kn_;
411 	uchar kh_;
412 	uchar kc_;
413 	uchar kz_;
414 	uchar kk_;
415 	uchar ke_;
416 	uchar kx_;
417 	uchar kf_;
418 	uchar kj_;
419 	uchar nk_;
420 	uchar z_ ;
421 
422 	uchar w;
423 	uchar a;
424 	uchar i;
425 	uchar h;
426 	uchar ip;
427 	uchar l;
428 	uchar t;
429 	uchar s;
430 	uchar sk;
431 
432 	short count;
433 	struct params *prev;
434 } params_t;
435 
436 #if UNIX
437 struct reg_match_t {
438 	const char *beg;
439 	int len;
440 };
441 #endif
442 
443 
444 /* ���ο��ͷ������ */
445 /*
446  * �⤷���ޥ��� FLOATEXPR ���������Ƥ����顢
447  * ���ο��ͷ��ϡ���ư�������� (double)��
448  * �����Ǥʤ���С������� (long)��
449  */
450 
451 #ifdef FLOATEXPR
452 typedef double exprval_t;
453 #define EXPRVAL_MIN				(-DBL_MAX)
454 #define EXPRVAL_MAX				DBL_MAX
455 #ifdef __STDC__
456 #define EXPRVAL_PRINTF_FMT		"%." _Quote(DBL_DIG) "g"
457 #else
458 #define EXPRVAL_PRINTF_FMT		"%g"
459 #endif
460 #else
461 typedef long exprval_t;				/* ���ο��ͷ� */
462 #define EXPRVAL_MIN				LONG_MIN
463 #define EXPRVAL_MAX				LONG_MAX
464 #define EXPRVAL_PRINTF_FMT		"%ld"
465 #endif
466 typedef long exprintval_t;
467 
468 /* EvalExpr �� evlevel ������Ϳ����⡼��
469  * �ɤ��ޤǼ����ɤफ�����
470  */
471 typedef enum EVLEV {
472 	EXPR_MAX,				/* ����Ǥ������Ĺ���ɤ� */
473 	EXPR_SEMIMAX,			/* ����ޤ˽в��Ф����ޤ� */
474 	EXPR_MIN,				/* ñ�༰�����ɤޤʤ� */
475 	EXPR_PRIM,				/* �켡���Τ��ɤ� */
476 } evlev_t;
477 
478 /* SkipExpr �� skipmode ������Ϳ����⡼��
479  * ���Ȥ����������ɤ�ʤ��ä��Ȥ��ɤ����뤫�����
480  */
481 typedef enum SKIPMODE {
482 	SKIP_NORMAL,			/* ɸ��ʥ��顼���Ф���� */
483 	SKIP_NOERR,				/* ���顼��̵�뤹�� */
484 	SKIP_ELSE0,				/* �������ɤ�ʤ���Ф�ȤΥݥ������֤� */
485 	SKIP_ELSE1,				/* �������ɤ�ʤ���У�ʸ�����������å� */
486 } skipmode_t;
487 
488 /* �Ȥ߹��ߴؿ��ν��� */
489 
490 #ifndef const
491 #ifndef __STDC__
492 #define const
493 #endif
494 #endif
495 
496 #ifndef __P
497 #ifdef __STDC__
498 #define __P(args) args
499 #else
500 #define __P(args) ()
501 #endif
502 #endif
503 
504 typedef int (*sffnp_t) __P((uchar *d));
505 
506 typedef int (*sf00fnp_t) __P((uchar *d));
507 typedef int (*sf01fnp_t) __P((uchar *d, exprval_t n));
508 typedef int (*sf02fnp_t) __P((uchar *d, exprval_t n1, exprval_t n2));
509 typedef int (*sfs0fnp_t) __P((uchar *d, const uchar *s));
510 typedef int (*sf10fnp_t) __P((uchar *d, const uchar *s, int len));
511 typedef int (*sf11fnp_t) __P((uchar *d, const uchar *s, int len, int n));
512 typedef int (*sf12fnp_t) __P((uchar *d, const uchar *s, int len, int n1, int n2));
513 typedef int (*sf20fnp_t) __P((uchar *d, const uchar *s1, int len1, const uchar *s2, int len2));
514 typedef int (*sf21fnp_t) __P((uchar *d, const uchar *s1, int len1, const uchar *s2, int len2, int n));
515 typedef int (*sf22fnp_t) __P((uchar *d, const uchar *s1, int len1, const uchar *s2, int len2, int n1, int n2));
516 
517 typedef exprval_t (CDECL *sfx1fnp_t) __P((exprval_t a));
518 typedef exprval_t (CDECL *sfx2fnp_t) __P((exprval_t a, exprval_t b));
519 
520 typedef enum sftype {
521 	SF_UNKNOWN,
522 	SF_0,
523 	SF_X,
524 	SF_X_X,
525 	SX_X,
526 	SX_X_X,
527 	SF_S,
528 	SF_Sn,
529 	SF_Sn_N,
530 	SF_Sn_N_N,
531 	SF_Sn_Sn,
532 	SF_Sn_Sn_N,
533 	SF_Sn_Sn_N_N,
534 } sftype_t;
535 
536 /* �����ƥ��ѿ��η� */
537 
538 #define	V_UNKNOWN	0x0000
539 #define	V_INT		0x0010
540 #define	V_UINT		0x0011
541 #define V_RONLY		0x8000
542 
543 
544 /********************** ��� ************************************************/
545 #define MAXWIDTH	250		/* ���Ԥκ����� */
546 #define LBVSIZE		(MAXWIDTH + 10)	/* lbv[] �Υ����� */
547 #define LBUFSIZE	1024	/* �饤��Хåե����礭�� */
548 #define CBUFSIZE	1024	/* ���楳���ɽ����Τ���ΥХåե��Υ����� */
549 #define SBUFSIZE	4096	/* �������ƥ����ȥХåե��Υ����� */
550 #define IBUFSIZE	2048	/* ����ʸ����Хåե��Υ����� */
551 #define CPOSVSIZE	128		/* ���������楳���ɰ��ֵ����٥����Υ����� */
552 #define MAXMARGC	100		/* �ޥ����ޥ�ɰ����ο��κ����� */
553 #define EVALBUFSIZE	1024	/* ����ɾ������ΥХåե����礭���ν���� */
554 #define XTR_ENV		"XTR"			/* ��������⡼�ɻ���δĶ��ѿ� */
555 #define XTRPATH_ENV	"XTRPATH"		/* ����ե����븡���ѥ��δĶ��ѿ� */
556 #ifdef UNIX
557 #define XTR_EXT		"xtr"
558 #define BAK_EXT		"bak"
559 #define TMPPATH_ENV	"TMPDIR"
560 #else
561 #define XTR_EXT		"XTR"			/* ����ե������ɸ���ĥ�� */
562 #define BAK_EXT		"BAK"			/* �Хå����åץե�����γ�ĥ�� */
563 #define TMPPATH_ENV	"TMP"			/* �ƥ�ݥ��ե�����ѥ��δĶ��ѿ� */
564 #endif
565 
566 #define ON		1
567 #define OFF		0
568 #define OK		0
569 #define NG		(-1)
570 #define ERR		(-1)
571 #define TRUE	1
572 #define FALSE	0
573 #define EOF2	0xffff
574 #define SP		' '
575 #define ZENSP	0x8140
576 #define HWSP	0x8640
577 #define ZENSPS	"\201\100"
578 #define HWSPS	"\206\100"
579 
580 #define SSPACES	" \f\n\r\t\v"			/* Single byte space chars */
581 
582 
583 /* �ƥ����ȥե�����ν�������ʸ�� */
584 /* -1 �ʤ�ʪ��Ū�ʥե����뽪ü�Τߤ�ե�����ν����Ȥ��� */
585 #if MSDOS || WINNT
586 #define EOFCHAR	0x1a					/* ^Z */
587 #else
588 #define EOFCHAR	(-1)
589 #endif
590 
591 /* �ƥ����ȥե�����β��ԥޡ����� CR/LF �� */
592 #if MSDOS || WINNT || __human68k__
593 #define NL_IS_CRLF	1					/* CR/LF */
594 #else
595 #define NL_IS_CRLF	0					/* LF �Τ� */
596 #endif
597 
598 /* ���ޥ�ɥ饤���ץ����Ƴ��ʸ�� */
599 #define SWITCHAR		'-'
600 
601 /* �ǥ��쥯�ȥ�ζ��ڤ�ʸ�� */
602 #if MSDOS || WINNT
603 #define DIRSLASH		'\\'			/* ɸ��ǥ��쥯�ȥ���ڤ�� '\\' */
604 #define DIRSLASHS		"\\"
605 #define ALTDIRSLASH		'/'
606 #define ALTDIRSLASHS	"/"
607 #else
608 #define DIRSLASH		'/'				/* '/' ��ɸ�� */
609 #define DIRSLASHS		"/"
610 #define ALTDIRSLASH		'\\'
611 #define ALTDIRSLASHS	"\\"
612 #endif
613 
614 /* fopen() open mode */
615 #if MSDOS || WINNT || __human68k__
616 #define READ_TEXT		"rt"
617 #define WRITE_TEXT		"wt"
618 #define APPEND_TEXT		"at"
619 #define READ_BINARY		"rb"
620 #define WRITE_BINARY	"wb"
621 #define APPEND_BINARY	"ab"
622 #else
623 #define READ_TEXT		"r"
624 #define WRITE_TEXT		"w"
625 #define APPEND_TEXT		"a"
626 #define READ_BINARY		"r"
627 #define WRITE_BINARY	"w"
628 #define APPEND_BINARY	"a"
629 #endif
630 
631 /* ��¤�� def �� mode �Υӥå���� */
632 #define R_EOW1		0x0001	/* ����������  }  (�����DZ�����ѿ����ʤ��) */
633 #define R_SOW1		0x0002	/* ��Ƭ������  {  (��Ƭ�Ǻ�����ѿ����ʤ��) */
634 #define R_EOW2		0x0004	/* ����������  }} (�����DZ��϶���Τ߲�) */
635 #define R_SOW2		0x0008	/* ��Ƭ������  {{ (��Ƭ�Ǻ��϶���Τ߲�) */
636 #define R_EOL2		0x0010	/* ����������  $$ (�����Ǹ�˶����) */
637 #define R_SOL2		0x0020	/* ��Ƭ������  ^^ (��Ƭ�����˶����) */
638 #define R_EOL		0x0040	/* ��������    $  (�����˹���) */
639 #define R_SOL		0x0080	/* ��Ƭ����    ^  (�����˹�Ƭ) */
640 #define R_SPECIAL	0x0100	/* �ƥ����Ⱦ夫��ϻ��ȤǤ��ʤ� (special) */
641 #define R_CMPMASK	0x01ff	/* �⡼�ɤ���Ӥ��뤿��Υޥ��� */
642 #define R_ICASE		0x0200	/* �硿��ʸ�����̤ʤ��� (ignore case) */
643 #define R_MACRO		0x0400	/* ���ִ����� (macro rpl) */
644 #define R_EVAL		0x0800	/* �ִ����ʸ����� %-�Ѵ���Ԥ� (eval) */
645 #define R_WILD		0x1000	/* �磻��ɥ�����ͭ�� (wild card) */
646 #define R_SAMELEN	0x2000	/* �ִ������Ĺ�����Ѥ��ʤ� (same length) */
647 #define R_IZENHAN	0x4000	/* ����Ⱦ�Ѷ��̤ʤ� (ignore zen/han) */
648 #define R_REMOVE	0x8000	/* ������ä��ؼ� */
649 
650 /* ��¤�� def ������⡼�� cmode ��� */
651 enum cmod {
652 	C_NOCNTRL,				/* �������̵�� */
653 	C_NIL,					/* ñ�˷���� 0 �Ȥʤ������������̵�� */
654 	C_ATTR,					/* ɽ��°�����åȤ����楳���ɡ����Ի��˲��ɬ�� */
655 	C_ARESET,				/* ɽ��°����������楳���� */
656 	C_WIDE,					/* �ܳѻ�������楳���ɡ����Ի��˲����ɬ�� */
657 	C_WRESET,				/* �ܳѲ�������楳���� */
658 	C_VEXPAND,				/* ���ܳѻ�������楳���� */
659 	C_VRESET,				/* ���ܳѲ�������楳���� */
660 	C_QEXPAND,				/* ���ܳѻ�������楳���� */
661 	C_QRESET,				/* ���ܳѲ�������楳���� */
662 	C_HALF,					/* ����Ⱦ�ѻ�������楳���ɡ����Ի��˲����ɬ�� */
663 	C_HRESET,				/* ����Ⱦ�Ѳ�������楳���� */
664 	C_FONT,					/* �ե���Ȼ������楳���ɡ����ڡ������˲��ɬ�� */
665 	C_FRESET,				/* �ե���Ȳ�������楳���� */
666 	C_TERMINATE,			/* ��λ���������楳���� */
667 	C_NEWLINE,				/*  */
668 	C_NEWPAGE,				/*  */
669 	C_RESET,				/* ����������楳���� */
670 	C_RESET2,				/* ʸ���������� */
671 	C_KICODE,				/* �ˣɥ�������� */
672 	C_KOCODE,				/* �ˣϥ�������� */
673 	C_HICODE,				/* Ⱦ��in��������� */
674 	C_HOCODE,				/* Ⱦ��out��������� */
675 	C_DOTCMD,				/* �����ߥ��ޥ�ɤ�Ƴ���ʽ���� "~."��*/
676 	C_INDSET,				/* ����ǥ�ȥޡ����ʽ���� "~/"��*/
677 	C_LEXPAND,				/* ����ĥ�ʽ���� "~>"��*/
678 	C_REXPAND,				/* ����ĥ�ʽ���� "~<"��*/
679 	C_ESCAPE,				/* ʸ�����������סʽ���� "~\"��*/
680 	C_PCFORM,				/* %-form �ʽ���� "~%"��*/
681 	C_LBREAK,				/* �������ԡʽ���� "~|"��*/
682 	C_VBEGIN,				/* ���������ϡʽ���� "~{"��*/
683 	C_VEND,					/* ��������λ�ʽ���� "~}"��*/
684 };
685 
686 /* ��¤�� rpl �� gmode ��GetStr�ؤΥѥ�᡼������� */
687 #define G_OVERNL	0x01	/* ���ԥޡ������ִ��оݤ� */
688 #define G_WILD		0x02	/* �磻��ɥ����ɤ��� */
689 
690 /* �ִ��о�ʸ������Υ磻��ɥ����ɤ�����ɽ�� */
691 #define WILD_PREF		0x00 		/* ���Х����� */
692 #define WILD_XMULTI		0xa1		/* "**" */
693 #define WILD_MULTI		0xa2		/* "*" */
694 #define WILD_SINGLE		0xa3		/* "?" */
695 #define WILD_OPTSPACE	0xa4		/* " " */
696 #define WILD_SPACE		0xa5		/* "  " */
697 
698 
699 /* ʸ�����Ф��⡼�ɡ�~<, ~>�� */
700 
701 #define CHREXP_NEXTCHR		1			/* ~< */
702 #define CHREXP_PREVCHR		2			/* ~> */
703 #define CHREXP_SPADJ		4			/* ��·���ζ���Ĵ�� */
704 
705 
706 /************************ Macros ********************************************/
707 
708 /* ʸ�����åȤˤ��뤫Ĵ�٤� */
709 #define Member(c, cset)	(jstrchr((char *)(cset),(c)) != NULL)
710 
711 /* ʸ�����̤�Ĵ�٤�ޥ��� */
712 
713 #define Isspace(c)				(isascii(c) && isspace(c))
714 #define Isalnum(c)  			(isascii(c) && isalnum(c))
715 #define Isalpha(c)  			(isascii(c) && isalpha(c))
716 #define Isdigit(c)  			(isascii(c) && isdigit(c))
717 #define Iscntrl(c)  			(isascii(c) && iscntrl(c))
718 #define Isprint(c)  			(isascii(c) && isprint(c))
719 #define Isgraph(c)  			(isascii(c) && isgraph(c))
720 #define Islower(c)  			(isascii(c) && islower(c))
721 #define Isupper(c)  			(isascii(c) && isupper(c))
722 #define Ispunct(c)  			(isascii(c) && ispunct(c))
723 #define Isxdigit(c) 			(isascii(c) && isxdigit(c))
724 
725 
726 /* ���Х���ʸ���� */
727 #define  Is1B(c)		((unsigned)(c) < 0x100)
728 
729 /* �ƥ����Ȳ����� */
730 #if UNIX
731 #define ISHWSP(c)		0
732 #else
733 #define ISHWSP(c)		((c) == HWSP)
734 #endif
735 
736 #define  IsHanSp(c)		((c) == SP || ISHWSP(c))
737 #define  IsXSpace(c)	(Isspace(c) || (c) == ZENSP || ISHWSP(c))
738 #define  IsHSpace(c)	(IsHanSp(c) || (c)=='\t'|| (c)==ZENSP)
739 #define  IsVSpace(c)	((c) == '\n'||(c) == '\r'||(c) == '\f'||(c) == '\v')
740 #define  IsXAlnum(c)	(Is1B(c) && !kcmode && isalnum(c) ||\
741 						 !knmode && (jisalpha(c)||jisdigit(c) ||\
742 				    	 (unsigned)(c)>= 0x839f && (unsigned)(c)<= 0x849e) ||\
743 						 Member(c, alnum2))
744 
745 /* ��ʸ�Ѥ�ʸ���� */
746 #if UNIX
747 #define  IsWabunmoji(c)	((unsigned)(c) >= 0x829f && (unsigned)(c) <= 0x839e \
748 						|| (unsigned)(c) >= 0x889f \
749 						|| (unsigned)(c) >= 0x8152 && (unsigned)(c) <= 0x815b )
750 #else /* !UNIX */
751 #define  IsWabunmoji(c)	((unsigned)(c) >= 0x829f && (unsigned)(c) <= 0x839e \
752 						|| (unsigned)(c) >= 0x889f && (unsigned)(c) <= 0xeafc \
753 						|| (unsigned)(c) >= 0x8152 && (unsigned)(c) <= 0x815b )
754 #endif /* !UNIX */
755 
756 /* jiskigou�ܦ� */
757 #if UNIX
758 #define Jiskigou(c)		((c) >= 0x8141 && (c) < 0x824f)
759 #else
760 #define Jiskigou(c)		((c) >= 0x8141 && ((c) < 0x824f || (c) > 0xea9e)) /* 78JIS */
761 #endif
762 
763 /* �б�����Ⱦ��(ANK)ʸ�������ꤦ������ʸ���� */
764 #if UNIX
765 #define IsANKZen(c)		((c) >= 0x8140 && ((c) < 0x829e || (c) >= 0x8340 && (c) < 0x839f))
766 #else
767 #define IsANKZen(c)		((c) >= 0x8140 && ((c) < 0x829e || \
768 						 (c) >= 0x8340 && ((c) < 0x839f || (c) > 0xea9e)))
769 #endif
770 
771 /* ���Х���Ⱦ�Ѥ� */
772 #if UNIX
773 #define IsHW(c)			0
774 #else
775 #define IsHW(c)			((unsigned)(c) >= 0x8540 && (unsigned)(c) <= 0x869e)
776 #endif
777 /* ���Х��Ȥ����Х���Ⱦ�Ѥ� */
778 #define IsHan(c)		(Is1B(c) || IsHW(c))
779 
780 /* ���������Τ���Υޥ��� */
781 #if UNIX
782 #define MkMoji(c1,c2)	((((c1) & 0377) << 8 ) | ((c2) & 0377))
783 #else /* !UNIX */
784 #define MkMoji(c1,c2)	(((unsigned)(c1) << 8) | (uchar)(c2))
785 #endif /* !UNIX */
786 #define MojiK(s)			MkMoji(*(s), *((s) + 1))
787 #define IsKanji1(c)			(iskanji(c) && !nokanjimode)
788 #define IsKanji12(c1,c2)	(IsKanji1(c1) && iskanji2(c2))
789 #define IsKanjiMoji(c)		(iskanji(Moji_1(c)) && iskanji2(Moji_2(c)))
790 #define IsKanjiStr(s)		IsKanji12(*(s), *((s)+1))
791 #define Moji(s)				(IsKanjiStr(s) ? MojiK(s) : *(s))
792 #if UNIX
793 #define Moji_1(c)			(((c) >> 8) & 0xff)
794 #define Moji_2(c)			((c) & 0xff)
795 #else /* !UNIX */
796 #define Moji_1(c)			((unsigned)(c) >> 8)
797 #define Moji_2(c)			((unsigned)(uchar)(c))
798 #endif /* !UNIX */
799 
800 /* n �Х����ܤ������Σ��Х����ܤ������å� */
801 #define NthIsKanji2(s, n)	(!nokanjimode && nthctype((char *)(s), (n)) == CT_KJ2)
802 
803 /* ʸ����ʸ����˥��åȤ�������ʸ���ΥХ��ȿ����֤��ޥ��� */
804 #define SetMoji(c, str)		(Is1B(c) ? (*(str)=(c), 1) : SetKanji((c), (str)))
805 #define SetMoji_(c, str)	(void)(SetMoji(c, str))
806 
807 /* ���Х���ʸ����ʸ����˥��åȤ��������֤��ޥ��� */
808 #define SetKanji(c, str)	(*(str) = Moji_1(c), *((str)+1) = Moji_2(c), 2)
809 #define SetKanji_(c, str)	(void)(SetKanji(c, str))
810 
811 /* �ݥ�����ʸ���ʤᡢ�Ϥ��ʸ�����֤��ޥ��� */
812 #define RdMoji(s)	(IsKanjiStr(s) ? ((s)+= 2, MojiK((s)- 2)) : *(s)++)
813 
814 /* �ݥ�����ʸ���ʤ᤿�Ȥ�����֤� */
815 #define SkipMoji(s)		(IsKanjiStr(s) ? (s) + 2 : (s) + 1)
816 
817 /* ��ʸ�����ԡ����ơ����줾��Υݥ�������ʬ�ʤ�� */
818 #define MoveMojiAdv(dst, src)	do { \
819 									if (IsKanjiStr(src)) \
820 										*(dst)++ = *(src)++; \
821 									*(dst)++ = *(src)++; \
822 								} while (0)
823 
824 /* ʸ����κǸ��ʸ����ؤ��ݥ������֤� */
825 #define StrLast(s)			(!*(s) ? (s) : \
826 								nokanjimode ? (s) + strlen((char *)(s)) - 1 : \
827 								(uchar *)jstradv((char *)(s), jstrlen((char *)(s)) - 1))
828 
829 #define StrLastN(s, n)		((n) <= 0 ? (s) : nokanjimode ? (s) + (n) - 1 : \
830 								(uchar *)jstradv((char *)(s), btom((char *)(s), (n)) - 1))
831 
832 #define StrEnd(s)			((s) + strlen((char *)s))
833 
834 
835 /* ����ܥ�̾������ */
836 #define IsSym1(c)			(isascii(c) && IsSym1_(c))
837 #define IsSym2(c)			(isascii(c) && IsSym2_(c))
838 
839 #define IsSym1_(c)			(isalpha(c) || (c)=='_' || (c)=='$')
840 #define IsSym2_(c)			(IsSym1_(c) || isdigit(c))
841 
842 #define IsKSym1(c)			(!isascii(c) || IsSym1_(c))
843 #define IsKSym2(c)			(!isascii(c) || IsSym2_(c))
844 
845 #define IsKSym1Str(s)		IsKSym1(*(s))
846 #define IsKSym2Str(s)		IsKSym2(*(s))
847 
848 
849 /* ʸ������������ */
850 #define equ(s1, s2)			(*(s1) == *(s2) && !strcmp((char *)(s1), (char *)(s2)))
851 #define equ1(s, c)			(*(s) == (c) && !*((s)+1))
852 #define equ2(s, c1, c2)		(*(s) == (c1) && *((s)+1) == (c2) && !*((s)+2))
853 
854 #define CutSpace(v)			((v) = SkipSpace(v))
855 
856 
857 /*********************** misc util macros *****************************/
858 
859 
860 /* ���ĤΥȡ�������äĤ���ޥ��� */
861 #define _Paste2(z, y)		_Paste2_x(z, y)
862 #ifdef __STDC__
863 #define _Paste2_x(z, y)		z##y
864 #else
865 #define _Paste2_x(z, y)		z/**/y
866 #endif
867 
868 /* �ȡ��������֥륯�����ȤǰϤ�ޥ��� */
869 #define _Quote(y)			_Quote_x(y)
870 #ifdef __STDC__
871 #define _Quote_x(y)			#y
872 #else
873 #define _Quote_x(y)			"y"
874 #endif
875 
876 
877 /* ��ʸ�������ʸ������פǾ��ʬ���� switch  */
878 
879 #define switch2(s)	switch (strlen(s) >= 2 ? *(s) * 0x100 + *((s)+1) : *(s))
880 #define case2(c1,c2)	case (c1)*0x100+(c2)
881 
882 /********* ����¾�Υޥ��� *******/
883 
884 #define SBUFBTM						sbufbtm
885 
886 #define mada_start_of_line			(!lineoverflag && lbv[x] <= bindentp)
887 
888 #define VFree(v)					do { XFree((voidstar)(v)); v = NULL; } while (0)
889 
890 #define ClearRetValue()				do { VFree(retvalue.s); retvalue.len = 0; } while (0)
891 #define SetRetValue(p, n)			do { \
892 										XFree((voidstar)retvalue.s); \
893 										retvalue.s = (p); \
894 										retvalue.len = (n); \
895 									} while (0)
896 
897 /* ʸ�����ѿ��ν������ѿ�̾�� "_s" ���դ���Ƚ���ͤ�����̾�ˤʤ��
898  * SFree(pfcenter) : pfcenter != pfcenter_s �ΤȤ� XFree(pfcenter) ���롣
899  * SReset(pfcenter) : pfcenter �����ͤ� pfcenter_s �ˤ��롣
900  */
901 #define SFree(v)			do { if ((v) != _Paste2(v, _s)) XFree((voidstar)(v)); } while (0)
902 #define SReset(v)			do { \
903 								if ((v) != _Paste2(v, _s)) { \
904 									XFree((voidstar)(v)); \
905 									v = _Paste2(v, _s); \
906 								} \
907 							} while (0)
908 #define Abs(x)				((x) < 0 ? -(x) : (x))
909 
910 #ifndef min
911 #define min(a,b)			((a) <= (b) ? (a) : (b))
912 #endif
913 #ifndef max
914 #define max(a,b)			((a) >= (b) ? (a) : (b))
915 #endif
916 
917 
918 /*************************** Prototypes *************************************/
919 
920 void Terminate ARGS((int exit_status));
921 void SimpleCommand ARGS((const uchar *cmd));
922 void PushParam ARGS((int count));
923 void PopParam ARGS((int countmode));
924 void SetOFile ARGS((const uchar *name));
925 void Include ARGS((const uchar *fname, int abs_fname_flg));
926 
927 voidstar XMalloc ARGS((size_t len));
928 void XFree ARGS((voidstar p));
929 voidstar XRealloc ARGS((voidstar p, size_t len));
930 void AllocEnd ARGS((void));
931 
932 void Command ARGS((const uchar *cmds));
933 int IsSpecialCmd ARGS((const uchar *s));
934 void EvalReturnExpr ARGS((const uchar *expr, evlev_t evlevel));
935 uchar *SkipCommandArg ARGS((const uchar *s));
936 int CheckBlockEnd ARGS((const uchar *src, int n, int contlnflag, const uchar **endp));
937 uchar *CommandLineEnd ARGS((const uchar *s, int continuedflag));
938 uchar *GetCommandLine ARGS((int *lenp));
939 
940 void DefineRplStr ARGS((const uchar *str));
941 void ResetRplList ARGS((rpl_t **rlistpp));
942 
943 void ResetCntrl ARGS((def_t **cntrlp));
944 def_t *DupCntrl1 ARGS((def_t *org));
945 def_t *DupCntrl ARGS((def_t *org));
946 def_t *AddCntrl ARGS((def_t *org, def_t *add));
947 def_t *RemCntrl ARGS((def_t *org, def_t *rem));
948 int RemFCntrl ARGS((def_t **cntrlp, def_t *rem));
949 int ExtractCntrl ARGS((def_t *cntrls, int grp));
950 int ExtractResetCntrl ARGS((def_t *cntrls, def_t *rescntrls));
951 int ExtractReputCntrl ARGS((def_t *rescntrl));
952 void ResetCntrlLists ARGS((void));
953 void CntrlWrapBefor ARGS((void));
954 void CntrlWrapAfter ARGS((void));
955 void ResCntrlPosVects ARGS((void));
956 void SetCntrlPosVects ARGS((void));
957 
958 void Trans ARGS((void));
959 void Trans1 ARGS((void));
960 void MkIndentEnd ARGS((void));
961 void NewParag ARGS((void));
962 void NewLine ARGS((void));
963 void FreshLine ARGS((void));
964 int IsSpLine ARGS((void));
965 void InitParag ARGS((void));
966 void MkIndent ARGS((void));
967 int IsParagEnd ARGS((void));
968 void Fill ARGS((void));
969 int IsNewSentence ARGS((unsigned c));
970 
971 int Replace ARGS((void));
972 uchar *RplStr ARGS((const uchar *str, int mask));
973 
974 unsigned GetChr ARGS((void));
975 void UngetChr ARGS((unsigned c));
976 void UngetN ARGS((const uchar *str, int n));
977 unsigned LookChr ARGS((void));
978 void UnlookChrs ARGS((void));
979 int GetStr ARGS((int n, int gmode));
980 void UngetStrN ARGS((int n));
981 void GetSkipSpace ARGS((void));
982 int GetLine ARGS((void));
983 void ILineNoCount ARGS((void));
984 
985 void WriteLine ARGS((void));
986 void Write1 ARGS((int c));
987 void WriteLineNCol ARGS((int n));
988 void WriteIndent ARGS((int i));
989 void WriteNC ARGS((const uchar *p, int n));
990 void WriteN ARGS((const uchar *p, int n));
991 void WriteNN ARGS((const uchar *p, int n));
992 void WriteChr ARGS((unsigned c));
993 void WriteCntrl ARGS((def_t *cntrl));
994 void WriteResetCntrl ARGS((def_t *cntrl, def_t *rescntrl));
995 void WriteNHW ARGS((const uchar *p, int n, int hwmode));
996 void WriteChrN ARGS((unsigned c, int n));
997 void WriteTerminate ARGS((void));
998 void WriteNewLine ARGS((void));
999 void WritePage ARGS((void));
1000 void PageSetting ARGS((void));
1001 void WritePageHeader ARGS((void));
1002 void WritePageFooter ARGS((void));
1003 void WriteLineAdj ARGS((void));
1004 void SetSpAdjPos ARGS((int pos));
1005 void SetChrExpPos ARGS((int pos, int mode));
1006 void ResChrExp ARGS((void));
1007 
1008 void PutChr ARGS((unsigned c));
1009 void PutChr1 ARGS((unsigned c));
1010 void InitLine ARGS((void));
1011 void AdjKIKO ARGS((const uchar *s, int n));
1012 void PutChrN ARGS((unsigned c, int n));
1013 void DelSpaces ARGS((void));
1014 void PutStr ARGS((const uchar *str));
1015 void PutStrN ARGS((const uchar *str, int n));
1016 void PutCntrl ARGS((def_t *cntrl));
1017 void PutCntrl1 ARGS((const uchar *p, int len));
1018 void ReputCntrl ARGS((def_t *cntrl));
1019 void PutResetCntrl ARGS((def_t *cntrl, def_t *rescntrl));
1020 int PrevCol ARGS((int col));
1021 int NextCol ARGS((int col));
1022 int IsAttribCol ARGS((int col));
1023 
1024 void Wrap ARGS((int wrappos));
1025 
1026 unsigned ANKtoHW ARGS((unsigned ank));
1027 unsigned HWtoANK ARGS((unsigned hw));
1028 unsigned HWtoZen ARGS((unsigned hw));
1029 unsigned ANKtoZen ARGS((unsigned ank));
1030 unsigned ANKtoZen2 ARGS((unsigned ank, unsigned ank2, unsigned *dakuten));
1031 unsigned ASCtoZen ARGS((unsigned asc));
1032 unsigned ZentoASC ARGS((unsigned zen));
1033 unsigned ZentoANK ARGS((unsigned zen));
1034 unsigned ZentoANK2 ARGS((unsigned zen, unsigned *dakuten));
1035 unsigned ChangeANKtoZen ARGS((unsigned ank, unsigned zen));
1036 
1037 int MkRomNum ARGS((uchar *dst, int n, int upperflag));
1038 int MkNthNum ARGS((uchar *dst, long n));
1039 int RTrimSpace ARGS((uchar *str));
1040 int RTrimSpaceN ARGS((uchar *str, int len));
1041 uchar *SkipSpace ARGS((const uchar *p));
1042 uchar *BackSkipSpace ARGS((const uchar *s, const uchar *p));
1043 uchar *SkipSym2 ARGS((const uchar *p));
1044 uchar *SkipKSym2 ARGS((const uchar *p));
1045 uchar *SkipAlpha ARGS((const uchar *p));
1046 uchar *SkipAlnum ARGS((const uchar *p));
1047 uchar *SkipDigit ARGS((const uchar *p));
1048 uchar *SkipXDigit ARGS((const uchar *p));
1049 int StrSpn ARGS((const uchar *src, const uchar *chrs));
1050 int StrCSpn ARGS((const uchar *src, const uchar *chrs));
1051 int StrRSpn ARGS((const uchar *src, int len, const uchar *chrs));
1052 int StrRCSpn ARGS((const uchar *src, int len, const uchar *chrs));
1053 int CopyStr ARGS((uchar *dst, const uchar *src));
1054 int CopyStrDiff ARGS((uchar *dst, const uchar *src_s, const uchar *src_e));
1055 int CopyStrN ARGS((uchar *dst, const uchar *src, int len));
1056 uchar *DupStr ARGS((const uchar *src));
1057 uchar *DupStrDiff ARGS((const uchar *src_s, const uchar *src_e));
1058 uchar *DupStrN ARGS((const uchar *src, int len));
1059 int StrUpper ARGS((uchar *dst, const uchar *src));
1060 int StrLower ARGS((uchar *dst, const uchar *src));
1061 int StrCapitalize ARGS((uchar *dst, const uchar *src));
1062 int StrCapitalize1 ARGS((uchar *dst, const uchar *src));
1063 int StrZen ARGS((uchar *dst, const uchar *src));
1064 int StrZen2 ARGS((uchar *dst, const uchar *src));
1065 int StrZen3 ARGS((uchar *dst, const uchar *src));
1066 int StrHan ARGS((uchar *dst, const uchar *src));
1067 int StrHan2 ARGS((uchar *dst, const uchar *src));
1068 int StrHan3 ARGS((uchar *dst, const uchar *src));
1069 int StrJis ARGS((uchar *dst, const uchar *src));
1070 int StrQuote ARGS((uchar *dst, const uchar *src, int n));
1071 int StrQuote2 ARGS((uchar *dst, const uchar *src, int n));
1072 int StrBrace ARGS((uchar *dst, const uchar *src, int n));
1073 int ReadEscSequence ARGS((uchar *dst, const uchar *src, const uchar **endp));
1074 int ReadString ARGS((uchar *dst, const uchar *src));
1075 uchar *SkipStringB ARGS((const uchar *p, int brkchr));
1076 int ReadStringB ARGS((uchar *dst, const uchar *src, const uchar **endp, int brkchr));
1077 int ReadStringN ARGS((uchar *dst, const uchar *src, int n));
1078 unsigned StrNthE ARGS((const uchar *str, int n));
1079 uchar *PairSearch ARGS((const uchar *p, int lpar, int rpar));
1080 int SubStr ARGS((uchar *dst, const uchar *src, int len, int start, int n));
1081 int BSubStr ARGS((uchar *dst, const uchar *src, int len, int start, int n));
1082 int BIndex ARGS((const uchar *str1, int len1, const uchar *str2, int len2));
1083 int StrRep ARGS((uchar *dst, const uchar *src, int len, int n));
1084 int StrFil ARGS((uchar *dst, const uchar *src, int len, int n));
1085 int StrCommaNum ARGS((uchar *dst, const uchar *src, int len, const uchar *comma, int commalen, int n));
1086 int StrKanjiNum ARGS((uchar *dst, const uchar *src, int len));
1087 
1088 int IsFuncArgStr ARGS((const uchar *p));
1089 int EvalExpr ARGS((uchar *dst, const uchar *src, const uchar **endp, evlev_t evlevel));
1090 int RdNum ARGS((const uchar *src, const uchar **endp));
1091 exprval_t RdNumber ARGS((const uchar *src, const uchar **endp));
1092 int WtNum ARGS((uchar *dst, int num));
1093 int WtNumber ARGS((uchar *dst, exprval_t num));
1094 int PFormat ARGS((uchar *dst, const uchar *f_fmt, const uchar *valstr, int len));
1095 int CopyEnvVal ARGS((uchar *dst, const uchar *name));
1096 int EvalPcForm ARGS((uchar *dst, const uchar *src, const uchar **endp));
1097 int EvalString ARGS((uchar *dst, const uchar *src));
1098 int EvalStringB ARGS((uchar *dst, const uchar *src, const uchar **endp, int bflag));
1099 int EvalStringN ARGS((uchar *dst, const uchar *src, int n));
1100 int EvalExprStr ARGS((uchar *dst, const uchar *src));
1101 exprval_t EvalExprVal ARGS((const uchar *src, const uchar **endp, evlev_t evlevel));
1102 uchar *SkipExpr ARGS((const uchar *src, evlev_t evlevel, skipmode_t skipmode));
1103 uchar *AEvalExpr ARGS((int *lenp, const uchar *src, const uchar **endp, evlev_t evlevel));
1104 uchar *AEvalPcForm ARGS((int *lenp, const uchar *src, const uchar **endp));
1105 uchar *AEvalString ARGS((int *lenp, const uchar *src));
1106 uchar *AEvalStringB ARGS((int *lenp, const uchar *src, const uchar **endp,int bflag));
1107 uchar *AEvalStringN ARGS((int *lenp, const uchar *src, int n));
1108 uchar *AEvalExprStr ARGS((int *lenp, const uchar *src));
1109 uchar *AReadString ARGS((int *lenp, const uchar *src));
1110 uchar *AReadStringB ARGS((int *lenp, const uchar *src,const uchar **endp,int brkchr));
1111 
1112 uchar *GetSFVar ARGS((int *lenp, const uchar *name));
1113 sftype_t GetSFunc ARGS((sffnp_t *fnpp, const uchar *name));
1114 unsigned GetSysVar ARGS((voidstar *varpp, const uchar *name));
1115 
1116 uchar *GetVar ARGS((const uchar *name, int *lenp));
1117 void PutVar ARGS((const uchar *name, const uchar *val, int len));
1118 int CopyArg ARGS((uchar *dst, int n));
1119 macro_t *GetMacro ARGS((const uchar *name));
1120 void FreeMargv ARGS((int argc, marg_t *argv));
1121 int MacroCommand ARGS((const uchar *cmd));
1122 int FuncMacroCall ARGS((uchar *dst, macro_t *macp, const uchar *args));
1123 void DefineCommand ARGS((const uchar *src));
1124 void DoText ARGS((const uchar *src, int len));
1125 
1126 void ExecDosCommand ARGS((const uchar *src));
1127 
1128 void Disp ARGS((int endflag));
1129 void More ARGS((void));
1130 void Error ARGS((const uchar *fmt, ...));
1131 void FError ARGS((const uchar *fmt, ...));
1132 void Message ARGS((const uchar *fmt, ...));
1133 
1134 void InitCBreak ARGS((void));
1135 void TermCBreak ARGS((void));
1136 void ChgStdin ARGS((void));
1137 void SetModeB ARGS((FILE *fp, int binflag));
1138 void SetFModeB ARGS((int binflag));
1139 void SetInMode ARGS((FILE *fp));
1140 void SetOutMode ARGS((FILE *fp));
1141 int RawMode ARGS((int flag));
1142 int IsFileName ARGS((const uchar *s));
1143 int FileExists ARGS((const uchar *fname));
1144 uchar *FNameExt ARGS((const uchar *fname));
1145 uchar *FNameName ARGS((const uchar *fname));
1146 int FNameHasPath ARGS((const uchar *fname));
1147 uchar *PathCat ARGS((uchar *path, const uchar *fname));
1148 uchar *PathFName ARGS((const uchar *path, const uchar *fname));
1149 uchar *ChgExt ARGS((const uchar *fnam, const uchar *fext));
1150 int SameFile ARGS((const uchar *fnam1, const uchar *fnam2));
1151 
1152 #if UNIX
1153 int reg_compile ARGS((const char *, int, unsigned int));
1154 int reg_match ARGS((const char *, int, unsigned int, const char *, int *, struct reg_match_t **));
1155 int reg_free ARGS((const char *, int, unsigned int));
1156 #endif
1157 
1158 
1159 /************************ Global Variables **********************************/
1160 
1161 /* ʸ���� */
1162 extern uchar nullstr_s[];
1163 extern uchar esetcmd_s[], *esetcmd, eclrcmd_s[], *eclrcmd;
1164 extern uchar gtkinsoku_s[], *gtkinsoku, gtkinsoku2_s[], *gtkinsoku2;
1165 extern uchar gmkinsoku_s[], *gmkinsoku;
1166 extern uchar prespadjchrs_s[], *prespadjchrs;
1167 extern uchar postspadjchrs_s[], *postspadjchrs;
1168 extern uchar alnum2_s[], *alnum2, itemmark_s[], *itemmark;
1169 extern uchar quotestr_s[], *quotestr;
1170 extern uchar phleft_s[], *phleft, phcenter_s[], *phcenter;
1171 extern uchar phright_s[], *phright;
1172 extern uchar pfleft_s[], *pfleft, pfcenter_s[], *pfcenter;
1173 extern uchar pfright_s[], *pfright;
1174 
1175 /* �ѥ�᡼�� */
1176 extern uchar *newpfleft, *newpfcenter, *newpfright;
1177 extern uchar *pagebegin, *pageend;
1178 extern int cmddot_char, cmddot_mchar;
1179 extern uchar *ifilename, *ifilename1, *ofilename, *bakfilename;
1180 extern FILE *ifp, *ofp;
1181 extern uchar *clrcmd1, *clrcmd2;
1182 extern int emode, wrapmode, width, wlmode, wlimit, wkmode, kikosize, fillmode;
1183 extern int spadjlimit;
1184 extern int normadjmode, sjmode, centeradjmode, rightadjmode, bothadjmode;
1185 extern int ajmode;
1186 extern int asmode, almode, aimode, afmode, bindentmode, indent;
1187 extern int ignorelinespmode;
1188 extern int ignoreindentmode, hindentmode, hindent, pindentmode, pindent;
1189 extern int linespmode, splines, quotemode, tabtospmode, itabstop;
1190 extern int sptotabmode, otabstop, szmode, shmode, skmode, snmode, rplmode;
1191 extern int remodeno;
1192 extern int alttabsp;
1193 extern int pagemode, pagelines, phlines, pflines, pagetopsp;
1194 extern int pagebtmmode, pagebtmsp;
1195 extern int pageoffset;
1196 extern int pagestep, absppmode, anktohwmode, vexpmodeno, pmmode, nocntrlmode;
1197 extern int noffmode, nocrmode;
1198 extern int wexpmodeno, sgr98mode, prkikomodeno, prhihomodeno;
1199 extern int oidasimode, kkmode, khmode, kzmode, knmode, kcmode, kemode;
1200 extern int kxmode, kfmode, jtexmode;
1201 extern int binarymode, moremode, moresize, mkbakmode, ofilemode, chgextmode;
1202 extern int debug, delaymode, delaytime;
1203 extern int stdinmode, stdoutmode;
1204 extern int noctrlzmode, plaintextmode, zerolinefeedmode, ssmode;
1205 extern int silentmode, nokanjimode, nountermlinemode, noerrmode;
1206 extern int hanzenconv, zenhanconv;
1207 extern unsigned evalbufsize;
1208 
1209 /* ���֥ե饰 */
1210 extern int solflag, sol2flag, newlineflag, madaindentflag, inindentflag;
1211 extern int linebreak, lineoverflag, nonewlineflag, firstphmadaflag;
1212 extern int pageendflag, pagecutflag, wlimitflag, indentsetflag;
1213 extern int chrexpflag;
1214 extern int nobreakpos, textescapeflag;
1215 extern int intextflag, includeflag;
1216 extern int tmpincludeflag, inmtextflag;
1217 extern int coninmode, conoutmode, prnoutmode, eotflag, resetmadaflag;
1218 extern int vexpflag, wexpflag;
1219 extern int printpagemadaflag, printpageflag;
1220 extern int first_indent;
1221 extern int nevflag;
1222 extern int errorflag;
1223 extern int spacelines, linespaced;
1224 
1225 /* ʸ�����ִ����ޥ����ѿ������� */
1226 extern rpl_t *rlist_top;
1227 extern rpl_t *srlist_top;
1228 extern marg_t *margv;
1229 extern int   margc, fargc;
1230 extern strdesc_t retvalue;
1231 extern var_t *varlist, *localvarlist;
1232 extern macro_t	*macrolist;
1233 
1234 extern uchar *sbuf, *sbufbtm, *sbufp, *ibuf, *ibufp, *lbuf;
1235 extern uchar *lbv[LBVSIZE];
1236 extern uchar *cbuf, *cbufp;
1237 extern int clength, x;
1238 extern params_t *params;
1239 extern int aindent, bindent, wlrem, morecnt;
1240 extern uchar *bindentp;
1241 extern int pageno, abspageno, pagestepcnt, newpageno, phpfchgflag;
1242 extern unsigned ilineno, nlcount, lineno;
1243 extern unsigned cc, prevc, indentchar;
1244 
1245 extern int pagewidth, pagehwmode;
1246 extern def_t *c_terminate, *c_newline, *c_newpage;
1247 extern def_t *c_reset, *c_reset2, *c_areset, *c_vreset, *c_qreset, *c_wreset;
1248 extern def_t *c_hreset, *c_freset, *c_kicode, *c_kocode, *c_hicode, *c_hocode;
1249 extern def_t *c_attr, *c_wide, *c_vexpand, *c_qexpand, *c_half, *c_font;
1250 extern def_t *c_pagefont, *c_pagekicode, *c_pagekocode;
1251 
1252 extern jmp_buf errorjb;
1253 
1254 extern uchar *xtrenv, *xtrpath, *tmppath, *xtrprog, *xtrver;
1255 
1256 /*
1257  * Local variables:
1258  * mode: c
1259  * c-indent-level: 4
1260  * c-continued-statement-offset: 4
1261  * c-brace-offset: -4
1262  * c-argdecl-indent: 4
1263  * c-label-offset: -4
1264  * tab-width: 4
1265  * tab-stop-list: (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80)
1266  * End:
1267  */
1268 /***************************** end of xtr.h *********************************/
1269