/* $Id$ */ #ifndef _COMMON_H #define _COMMON_H #include "../config.h" #pragma pack(1) #define LEAVE 0 #define KFS 1 #define TFS 2 #define DSF 3 #define MAXNAME 35 #define MAXUFLAGS 16 #define METRIC_EQUAL 0 #define METRIC_POINT 1 #define METRIC_NODE 2 #define METRIC_NET 3 #define METRIC_ZONE 4 #define METRIC_DOMAIN 5 #define METRIC_MAX METRIC_DOMAIN /* * Fidonet message status bits */ #define M_PVT 0x0001 #define M_CRASH 0x0002 #define M_RCVD 0x0004 #define M_SENT 0x0008 #define M_FILE 0x0010 #define M_TRANSIT 0x0020 #define M_ORPHAN 0x0040 #define M_KILLSENT 0x0080 #define M_LOCAL 0x0100 #define M_HOLD 0x0200 #define M_REQ 0x0800 #define M_RRQ 0x1000 #define M_IRR 0x2000 #define M_AUDIT 0x4000 #define M_FILUPD 0x8000 /* * Analogue Modem flag values, order is important, first the * compresion capabilities, then the linespeeds. This is late * tested by portsel to find the fastest common connection * speed for a given line if you have multiple dialout modems. */ #define NL_MNP 0x00000001L #define NL_V42 0x00000002L #define NL_V42B 0x00000004L #define NL_V22 0x00000008L #define NL_V29 0x00000010L #define NL_V32 0x00000020L #define NL_H96 0x00000040L #define NL_HST 0x00000080L #define NL_MAX 0x00000100L #define NL_PEP 0x00000200L #define NL_CSP 0x00000400L #define NL_V32B 0x00000800L #define NL_H14 0x00001000L #define NL_V32T 0x00002000L #define NL_H16 0x00004000L #define NL_ZYX 0x00008000L #define NL_Z19 0x00010000L #define NL_VFC 0x00020000L #define NL_V34 0x00040000L #define NL_X2C 0x00080000L #define NL_X2S 0x00100000L #define NL_V90C 0x00200000L #define NL_V90S 0x00400000L /* * ISDN Flags */ #define ND_V110L 0x00000001L #define ND_V110H 0x00000002L #define ND_V120L 0x00000004L #define ND_V120H 0x00000008L #define ND_X75 0x00000010L /* * TCP/IP flags */ #define IP_IBN 0x00000001L #define IP_IFC 0x00000002L #define IP_ITN 0x00000004L #define IP_IVM 0x00000008L #define IP_IP 0x00000010L #define IP_IFT 0x00000020L /* * Online special flags */ #define OL_CM 0x00000001L #define OL_MO 0x00000002L #define OL_LO 0x00000004L #define OL_MN 0x00000008L /* * Request flags */ #define RQ_RQMODE 0x0000000fL #define RQ_RQ_BR 0x00000001L #define RQ_RQ_BU 0x00000002L #define RQ_RQ_WR 0x00000004L #define RQ_RQ_WU 0x00000008L #define RQ_XA (RQ_RQ_BR | RQ_RQ_BU | RQ_RQ_WR | RQ_RQ_WU) #define RQ_XB (RQ_RQ_BR | RQ_RQ_BU | RQ_RQ_WR ) #define RQ_XC (RQ_RQ_BR | RQ_RQ_WR | RQ_RQ_WU) #define RQ_XP (RQ_RQ_BR | RQ_RQ_BU ) #define RQ_XR (RQ_RQ_BR | RQ_RQ_WR ) #define RQ_XW ( RQ_RQ_WR ) #define RQ_XX ( RQ_RQ_WR | RQ_RQ_WU) /* * Returned function keys */ #define KEY_BACKSPACE 8 #define KEY_LINEFEED 10 #define KEY_ENTER 13 #define KEY_ESCAPE 27 #define KEY_RUBOUT 127 #define KEY_UP 200 #define KEY_DOWN 201 #define KEY_LEFT 202 #define KEY_RIGHT 203 #define KEY_HOME 204 #define KEY_END 205 #define KEY_INS 206 #define KEY_DEL 207 #define KEY_PGUP 208 #define KEY_PGDN 209 #define LINES 24 #define COLS 80 /* * ANSI colors */ #define BLACK 0 #define BLUE 1 #define GREEN 2 #define CYAN 3 #define RED 4 #define MAGENTA 5 #define BROWN 6 #define LIGHTGRAY 7 #define DARKGRAY 8 #define LIGHTBLUE 9 #define LIGHTGREEN 10 #define LIGHTCYAN 11 #define LIGHTRED 12 #define LIGHTMAGENTA 13 #define YELLOW 14 #define WHITE 15 #define MAXSUBJ 71 #define MSGTYPE 2 /* #define FLG_PVT 0x0001 #define FLG_CRS 0x0002 #define FLG_RCV 0x0004 #define FLG_SNT 0x0008 #define FLG_ATT 0x0010 #define FLG_TRN 0x0020 #define FLG_ORP 0x0040 #define FLG_K_S 0x0080 #define FLG_LOC 0x0100 #define FLG_HLD 0x0200 #define FLG_RSV 0x0400 #define FLG_FRQ 0x0800 #define FLG_RRQ 0x1000 #define FLG_RRC 0x2000 #define FLG_ARQ 0x4000 #define FLG_FUP 0x8000 */ typedef struct _parsedaddr { char *target; char *remainder; char *comment; } parsedaddr; #define ADDR_NESTED 1 #define ADDR_MULTIPLE 2 #define ADDR_UNMATCHED 4 #define ADDR_BADTOKEN 8 #define ADDR_BADSTRUCT 16 #define ADDR_ERRMAX 5 /* * From rfcaddr.c */ char *addrerrstr(int); void tidyrfcaddr(parsedaddr); parsedaddr parserfcaddr(char *); typedef struct _faddr { char *name; unsigned int point; unsigned int node; unsigned int net; unsigned int zone; char *domain; } faddr; typedef struct _fa_list { struct _fa_list *next; faddr *addr; int force; } fa_list; typedef struct _ftnmsg { int flags; int ftnorigin; faddr *to; faddr *from; time_t date; char *subj; char *msgid_s; char *msgid_a; unsigned long msgid_n; char *reply_s; char *reply_a; unsigned long reply_n; char *origin; char *area; } ftnmsg; extern struct _ftscprod { unsigned short code; char *name; } ftscprod[]; /* * Nodelist entry */ typedef struct _node { faddr addr; /* Node address */ unsigned short upnet; /* Uplink netnumber */ unsigned short upnode; /* Uplink nodenumber */ unsigned short region; /* Region belongin to */ unsigned char type; unsigned char pflag; char *name; /* System name */ char *location; /* System location */ char *sysop; /* Sysop name */ char *phone; /* Phone number */ unsigned speed; /* Baudrate */ unsigned long mflags; /* Modem flags */ unsigned long dflags; /* ISDN flags */ unsigned long iflags; /* TCP-IP flags */ unsigned long oflags; /* Online flags */ unsigned long xflags; /* Request flags */ char *uflags[MAXUFLAGS]; /* User flags */ } node; extern struct _fkey { char *key; unsigned long flag; } fkey[]; extern struct _dkey { char *key; unsigned long flag; } dkey[]; extern struct _ikey { char *key; unsigned long flag; } ikey[]; extern struct _okey { char *key; unsigned long flag; } okey[]; extern struct _xkey { char *key; unsigned long flag; } xkey[]; extern struct _nodelist { char *domain; FILE *fp; } *nodevector; struct _ixentry { unsigned short zone; unsigned short net; unsigned short node; unsigned short point; }; extern struct _pkey { char *key; unsigned char type; unsigned char pflag; } pkey[]; extern char SigName[32][16]; int ttyfd; /* Filedescriptor for raw mode */ struct termios tbufs, tbufsavs; /* Structure for raw mode */ /* * From attach.c */ int attach(faddr, char *, int, char); /* * From dostran.c */ char *Dos2Unix(char *); char *Unix2Dos(char *); /* * From execute.c */ int execute(char *, char *, char *, char *, char *, char *); int execsh(char *, char *, char *, char *); /* * From expipe.c */ FILE *expipe(char *, char *, char *); int exclose(FILE *); /* * From faddr.c */ char *aka2str(fidoaddr aka); fidoaddr str2aka(char *addr); /* * From falists.c */ void tidy_falist(fa_list **); void fill_list(fa_list **,char *,fa_list **); void fill_path(fa_list **,char *); void sort_list(fa_list **); void uniq_list(fa_list **); int in_list(faddr *,fa_list **, int); /* * From ftn.c */ faddr *parsefnode(char *); faddr *parsefaddr(char *); char *ascinode(faddr *,int); char *ascfnode(faddr *,int); void tidy_faddr(faddr *); int metric(faddr *, faddr *); faddr *fido2faddr(fidoaddr); fidoaddr *faddr2fido(faddr *); faddr *bestaka_s(faddr *); int is_local(faddr *); int chkftnmsgid(char *); /* * From getheader.c */ int getheader(faddr *, faddr *, FILE *, char *); /* * From gmtoffset.c */ long gmt_offset(time_t); char *gmtoffset(time_t); char *str_time(time_t); char *t_elapsed(time_t, time_t); /* * From mbfile.c */ int file_cp(char *from, char *to); int file_rm(char *path); int file_mv(char *oldpath, char *newpath); int file_exist(char *path, int mode); long file_size(char *path); long file_crc(char *path, int); time_t file_time(char *path); int mkdirs(char *name); int diskfree(int); /* * From nodelist.c */ int initnl(void); node *getnlent(faddr *); void olflags(unsigned long); void rqflags(unsigned long); void moflags(unsigned long); void diflags(unsigned long); void ipflags(unsigned long); /* * From nodelock.c */ int nodelock(faddr *); int nodeulock(faddr *); /* * From noderecord.c */ int noderecord(faddr *); /* * From pktname.c */ char *prepbuf(faddr *); char *pktname(faddr *, char); char *reqname(faddr *); char *floname(faddr *, char); char *splname(faddr *); char *bsyname(faddr *); char *stsname(faddr *); char *polname(faddr *); char *dayname(void); char *arcname(faddr *, unsigned short, int); /* * From rawio.c */ void Setraw(void); /* Set raw mode */ void Unsetraw(void); /* Unset raw mode */ unsigned char Getone(void); /* Get one raw character */ long Speed(void); /* Get (locked) tty speed */ int Waitchar(unsigned char *, int); /* Wait n * 10mSec for char */ int Escapechar(unsigned char *); /* Escape sequence test */ unsigned char Readkey(void); /* Read a translated key */ /* * From strutil.c */ char *padleft(char *str, int size, char pad); char *tl(char *str); void Striplf(char *String); void tlf(char *str); char *tu(char *str); char *tlcap(char *); char *Hilite(char *, char *); void Addunderscore(char *); void strreplace(char *, char *, char*); char *GetLocalHM(void); char *StrTimeHM(time_t); char *StrTimeHMS(time_t); char *GetLocalHMS(void); char *StrDateMDY(time_t *); char *StrDateDMY(time_t); char *GetDateDMY(void); /* * From term.c */ void TermInit(int); void Enter(int); void pout(int, int, char *); void poutCR(int, int, char *); void poutCenter(int,int,char *); void colour(int, int); void Center(char *); void clear(void); void locate(int, int); void fLine(int); void sLine(void); void mvprintw(int, int, const char *, ...); /* * From unpacker.c */ char *unpacker(char *); int getarchiver(char *); /* * From packet.c */ FILE *openpkt(FILE *, faddr *, char); void closepkt(void); /* * From ftnmsg.c */ char *ftndate(time_t); FILE *ftnmsghdr(ftnmsg *,FILE *,faddr *,char, char *); void tidy_ftnmsg(ftnmsg *); /* * From rfcdate.c */ time_t parsefdate(char *, void *); char *rfcdate(time_t); /* * Frome mime.c */ char *qp_decode(char *); /* int=0 for text (normal mode), int=1 for headers and gatebau MSGID */ char *qp_encode(char *,int); char *b64_decode(char *); char *b64_encode(char *); /* * From rfcmsg.c */ typedef struct _rfcmsg { struct _rfcmsg *next; char *key; char *val; } rfcmsg; rfcmsg *parsrfc(FILE *); void tidyrfc(rfcmsg *); void dumpmsg(rfcmsg *,FILE *); /* * From hdr.c */ char *hdr(char *, rfcmsg *); /* * From batchrd.c */ char *bgets(char *, int, FILE *); /* * recognized charsets */ #define CHRS_AUTODETECT -1 #define CHRS_NOTSET 0 #define CHRS_ASCII 1 /* us-ascii */ #define CHRS_BIG5 2 /* Chinese Big5 charset */ #define CHRS_CP424 3 /* hebrew EBCDIC */ #define CHRS_CP437 4 /* Latin-1 MS codage (cp437) */ #define CHRS_CP850 5 /* Latin-1 MS codage (cp850) */ #define CHRS_CP852 6 /* Polish MS-DOS codage */ #define CHRS_CP862 7 /* Hebrew PC */ #define CHRS_CP866 8 /* Cyrillic Alt-PC (cp866) */ #define CHRS_CP895 9 /* Kamenicky (DOS charset in CZ & SK) */ #define CHRS_EUC_JP 10 /* Japanese EUC */ #define CHRS_EUC_KR 11 /* Korean EUC */ #define CHRS_FIDOMAZOVIA 12 /* Polish "FIDOMAZOVIA" charset */ #define CHRS_GB 13 /* Chinese GB 2312 8 bits */ #define CHRS_HZ 14 /* Chinese HZ coding */ #define CHRS_ISO_2022_CN 15 /* Chinese GB 2312 7 bits */ #define CHRS_ISO_2022_JP 16 /* Japanese iso-2022-jp */ #define CHRS_ISO_2022_KR 17 /* Korean iso-2022-kr */ #define CHRS_ISO_2022_TW 18 /* Taiwanese iso-2022-tw */ #define CHRS_ISO_8859_1 19 /* Latin-1, Western Europe, America */ #define CHRS_ISO_8859_1_QP 20 #define CHRS_ISO_8859_2 21 /* Latin-2, Eastern Europe */ #define CHRS_ISO_8859_3 22 /* Latin-3, Balkanics languages */ #define CHRS_ISO_8859_4 23 /* Latin-4, Scandinavian, Baltic */ #define CHRS_ISO_8859_5 24 /* Cyrillic (iso-8859-5) */ #define CHRS_ISO_8859_6 25 /* Arabic (iso-8859-6) */ #define CHRS_ISO_8859_7 26 /* Greek (iso-8859-7) */ #define CHRS_ISO_8859_8 27 /* Hebrew (iso-8859-8) */ #define CHRS_ISO_8859_9 28 /* Latin-5, Turkish */ #define CHRS_ISO_8859_10 29 /* Latin-6, Lappish/Nordic/Eskimo */ #define CHRS_ISO_8859_11 30 /* Thai (iso-8859-11, aka TIS620) */ #define CHRS_ISO_8859_15 31 /* Latin-0 (Latin-1 + a few letters) */ #define CHRS_KOI8_R 32 /* Cyrillic Koi8 (Russian) */ #define CHRS_KOI8_U 33 /* Cyrillic Koi8 (Ukranian) */ #define CHRS_MACINTOSH 34 /* Macintosh */ #define CHRS_MIK_CYR 35 /* Bulgarian "Mik" cyrillic charset */ #define CHRS_NEC 36 /* Japanese NEC-JIS charset */ #define CHRS_SJIS 37 /* Japanese Shift-JIS (MS codage) */ #define CHRS_UTF_7 38 /* Unicode in UTF-7 encoding */ #define CHRS_UTF_8 39 /* Unicode in UTF-8 encoding */ #define CHRS_VISCII_10 40 /* VISCII 1.0 */ #define CHRS_VISCII_11 41 /* VISCII 1.1 */ #define CHRS_ZW 42 /* Chinese Zw encoding */ #define CHRS_ISO_11 91 #define CHRS_ISO_4 92 #define CHRS_ISO_60 93 /* * languages (used for LANG_DEFAULT definition) */ #define LANG_WEST 1 /* West-European languages */ #define LANG_EAST 2 /* East-Eurpean languages */ #define LANG_JAPAN 3 /* japanese */ #define LANG_KOREA 4 /* korean */ #define LANG_CHINA 5 /* chinese */ #define LANG_CYRILLIC 6 /* Cyrillic based languages */ /* * Define these according to the values used in your country */ #define CHRS_DEFAULT_FTN CHRS_CP437 #define CHRS_DEFAULT_RFC CHRS_ISO_8859_1 #define LANG_DEFAULT LANG_WEST #if (LANG_DEFAULT==LANG_JAPAN || LANG_DEFAULT==LANG_KOREA || LANG_DEFAULT==LANG_CHINA) #define LANG_BITS 16 #else #define LANG_BITS 8 #endif /* * used to recognize pgpsigned messages */ #define PGP_SIGNED_BEGIN "-----BEGIN PGP SIGNED MESSAGE-----" #define PGP_SIG_BEGIN "-----BEGIN PGP SIGNATURE-----" #define PGP_SIG_END "-----END PGP SIGNATURE-----" /* * charset reading functions */ int getoutcode(int); int getincode(int); char *getcharset(int); char *getchrs(int); int getcode(char *); int readchrs(char *); int readcharset(char *); void writechrs(int,FILE *,int); /* * some special chars values */ #define NUL 0 #define NL 10 #define FF 12 #define CR 13 #define ESC 27 /* ************ general functions ************* */ char *hdrconv(char *, int, int); char *hdrnconv(char *, int, int, int); char *strnkconv(const char *, int, int, int); char *strkconv(const char *, int, int); void kconv(char *, char **, int, int); /* ************ 8 bit charsets **************** */ void noconv(char *, char **); void eight2eight(char *, char **, char *); /* * maptabs names */ #define CP424__CP862 "cp424__cp862" #define CP424__ISO_8859_8 "cp424__iso-8859-8" #define CP437__ISO_8859_1 "cp437__iso-8859-1" #define CP437__MACINTOSH "cp437__mac" #define CP850__ISO_8859_1 "cp437__iso-8859-1" #define CP850__MACINTOSH "cp437__mac" #define CP852__FIDOMAZOVIA "cp852__fidomazovia" #define CP852__ISO_8859_2 "cp852__iso-8859-2" #define CP862__CP424 "cp862__cp424" #define CP862__ISO_8859_8 "cp862__iso-8859-8" #define CP866__ISO_8859_5 "mik__iso-8859-5" #define CP866__KOI8 "cp866__koi8" #define CP895__CP437 "cp895__cp437" #define CP895__ISO_8859_2 "cp895__iso-8859-2" #define FIDOMAZOVIA__CP852 "fidomazovia__cp852" #define FIDOMAZOVIA__ISO_8859_2 "fidomazovia__iso-8859-2" #define ISO_11__ISO_8859_1 "iso-11__iso-8859-1" #define ISO_4__ISO_8859_1 "iso-4__iso-8859-1" #define ISO_60__ISO_8859_1 "iso-60__iso-8859-1" #define ISO_8859_1__CP437 "iso-8859-1__cp437" #define ISO_8859_1__MACINTOSH "iso-8859-1__mac" #define ISO_8859_1__CP850 "iso-8859-1__cp437" #define ISO_8859_2__CP852 "iso-8859-2__cp852" #define ISO_8859_2__CP895 "iso-8859-2__cp895" #define ISO_8859_2__FIDOMAZOVIA "iso-8859-2__fidomazovia" #define ISO_8859_5__CP866 "iso-8859-5__mik" #define ISO_8859_5__KOI8 "iso-8859-5__koi8" #define ISO_8859_5__MIK_CYR "iso-8859-5__mik" #define ISO_8859_8__CP424 "iso-8859-8__cp424" #define ISO_8859_8__CP862 "iso-8859-8__cp862" #define KOI8__CP866 "koi8__cp866" #define KOI8__ISO_8859_5 "koi8__iso-8859-5" #define KOI8__MIK_CYR "koi8__mik" #define MACINTOSH__CP437 "mac__cp437" #define MACINTOSH__CP850 "mac__cp437" #define MACINTOSH__ISO_8859_1 "mac__iso-8859-1" #define MIK_CYR__ISO_8859_5 "mik__iso-8859-5" #define MIK_CYR__KOI8 "mik__koi8" /* ??? */ int SkipESCSeq(FILE *, int, int *); int getkcode(int, char [],char []); int iso2022_detectcode(char *, int); #define DOS #define SPACE 0xA1A1 /* GB "space" symbol */ #define BOX 0xA1F5 /* GB "blank box" symbol */ #define isGB1(c) ((c)>=0x21 && (c)<=0x77) /* GB 1st byte */ #define isGB1U(c) ((c)>=0x78 && (c)<=0x7D) /* GB 1st byte unused*/ #define isGB2(c) ((c)>=0x21 && (c)<=0x7E) /* GB 2nd byte */ #define HI(code) (((code) & 0xFF00)>>8) #define LO(code) ((code) & 0x00FF) #define DB(hi,lo) ((((hi)&0xFF) << 8) | ((lo)&0xFF)) #define CLEAN7(c) ((c) & 0x7F) /* strip MSB */ #define notAscii(c) ((c)&0x80) /* Chinese charsets */ void gb2hz(char *in, char **out); void hz2gb(char *in, char **out); void zw2hz(char *in, char **out); void zw2gb(char *in, char **out); #define SJIS1(A) ((A >= 129 && A <= 159) || (A >= 224 && A <= 239)) #define SJIS2(A) (A >= 64 && A <= 252) #define HANKATA(A) (A >= 161 && A <= 223) #define ISEUC(A) (A >= 161 && A <= 254) #define ISMARU(A) (A >= 202 && A <= 206) #define ISNIGORI(A) ((A >= 182 && A <= 196) || (A >= 202 && A <= 206)) void OPENINOUTFILES(FILE **, FILE **, char *); void CLOSEINOUTFILES(FILE **, FILE **, char **); void han2zen(FILE *, int *, int *, int); void sjis2jis(int *, int *); void jis2sjis(int *, int *); /* ************ 16 bits charsets ************* */ /* japanese charsets */ void shift2seven(char *, char **, int, char [], char []); void shift2euc(char *, char **, int, int); void euc2seven(char *, char **, int, char [], char []); void euc2euc(char *, char **, int, int); void shift2shift(char *, char **, int, int); void euc2shift(char *, char **, int, int); void seven2shift(char *, char **); void seven2euc(char *, char **); void seven2seven(char *, char **, char [], char []); void utf7_to_eight(char *, char **, int *); void utf8_to_eight(char *, char **, int *); /* * parsedate.c */ typedef struct _TIMEINFO { time_t time; long usec; long tzone; } TIMEINFO; /* ** Meridian: am, pm, or 24-hour style. */ typedef enum _MERIDIAN { MERam, MERpm, MER24 } MERIDIAN; typedef union { time_t Number; enum _MERIDIAN Meridian; } CYYSTYPE; #define tDAY 257 #define tDAYZONE 258 #define tMERIDIAN 259 #define tMONTH 260 #define tMONTH_UNIT 261 #define tSEC_UNIT 262 #define tSNUMBER 263 #define tUNUMBER 264 #define tZONE 265 extern CYYSTYPE cyylval; time_t parsedate(char *, TIMEINFO *); /* * msgflags.c */ int flag_on(char *,char *); int flagset(char *); char *compose_flags(int,char *); char *strip_flags(char *); int flag_on(char *,char *); /* * strcasestr.c */ #ifndef HAVE_STRCASESTR char *strcasestr(char *, char *); #endif #endif