home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / oxcc1433.zip / SRC / CFF.H < prev    next >
C/C++ Source or Header  |  1995-11-02  |  25KB  |  814 lines

  1. /* CFF.H    -- user api include file for the cff library */
  2.  
  3. #define CALLER(a) (((unsigned*)&a)[-1])
  4.  
  5. #if defined(__GNUC__) || defined(__OXCC__)
  6. #ifndef __ITEMH__
  7. #define __ITEMH__
  8. typedef unsigned long long  KeyItem;   /* type for a key's associated item */
  9. #endif
  10. #endif
  11.  
  12. typedef union             /* 2 BYTES */
  13.     {
  14.         unsigned short val;
  15.         unsigned char b[2];
  16. } SVAL;
  17.  
  18. typedef union            /* 4 BYTES */
  19.     {
  20.     unsigned long a0;
  21.     void *a1;
  22.     struct
  23.         {
  24.         SVAL    lo_word;
  25.         SVAL    hi_word;
  26.         } a2;
  27.     struct
  28.         {
  29.             unsigned int pad :28;
  30.             unsigned int type :4;
  31.         } a3;
  32.     struct
  33.         {
  34.             unsigned char b[4];
  35.         } a4;
  36.     int a8;
  37.     short a9;
  38.     char a10;
  39.     float a11;
  40. } ADDR;
  41.  
  42. #ifndef __STORH__
  43. #define __STORH__
  44.  
  45. typedef union _stor    /* 8 BYTES */
  46.     {
  47.     unsigned long    a0;
  48.     void *a1;
  49. #if defined(__GNUC__) || defined(__OXCC__)
  50.     KeyItem item;
  51. #endif
  52.     struct
  53.         {
  54.         unsigned short    lo_word;
  55.         unsigned short    hi_word;
  56.         unsigned int size :28;        /* in bytes or nibbles */
  57.         unsigned int type :4;        /* describes the STOR type */
  58.         } a2;
  59.     struct
  60.         {
  61.             short s0;
  62.             short s1;
  63.             short s2;
  64.             short s3;
  65.         } a3;
  66.     struct
  67.         {
  68.             unsigned long    s0;
  69.             unsigned long    s1;
  70.         } a4;
  71.     struct
  72.         {
  73.             unsigned char    b[8];
  74.         } a5;
  75. #if    defined(__GNUC__) || defined(__OXCC__)
  76.     struct
  77.         {
  78.             unsigned long long dupname :48;
  79.             unsigned long long dupid :16;
  80.         } a6;
  81. #endif
  82.     struct
  83.         {
  84.             unsigned int home : 30;
  85.             unsigned int full : 2;
  86.         } a7;
  87.     int a8;
  88.     short a9;
  89.     char a10;
  90.     float a11;
  91.     double a12;
  92. } STOR, Item;
  93. #endif /* __STORH__ */
  94.  
  95. /* DEFINITIONS FOR "a2.type */
  96. #define STO_INACTIVE (0)
  97. #define STO_NIL  (1)
  98. #define STO_VALUE (2)    
  99. #define STO_CHUNK (3)
  100. #define STO_KEYINFO (4)
  101. #define STO_NILCHUNK (5)
  102. #define STO_COMPCHUNK (6)
  103. #define STO_ALLOCATED (7)
  104. #define STO_DELETED (8)    /* always ored with non zero */
  105. #define STOMASK (7)
  106.  
  107. typedef struct {
  108.     unsigned long    name;
  109.     unsigned short    xname;
  110.     unsigned short    id;
  111. } DupName;
  112.  
  113. typedef struct            /* 12 BYTES */
  114.     {
  115.         STOR c0;
  116.         ADDR c1;
  117.     } CAT;
  118. #define CATEXACT  (8)
  119. #define CATHASH (cat.c1.a0)
  120.  
  121. typedef struct    /* 20 bytes */
  122.     {
  123.         STOR    stor;
  124.         CAT        cat;
  125. } SDB;
  126.  
  127.  
  128. /* DEFINE CFF OPEN MODES */
  129.  
  130. #define F_RDONLY    (0x0001)
  131. #define F_WRONLY    (0x0002)
  132. #define F_RDWR        (0x0003)
  133. #define F_CREAT        (0x0004)
  134. #define F_TEMP        (0x0008)
  135. #define F_UNIQ        (0x0010)
  136. #define F_EXCL        (0x0020)
  137. #define F_BITMAP    (0x0040)
  138. #define F_TRUNC        (0x0080)
  139. #define F_APPEND    (0x0100)
  140. #define F_DELETING    (0x0200)
  141. #define F_FILEONLY    (0x0400)
  142. #define F_BIGDIR    (0x0800)
  143. #define F_HUGEDIR    (0x1000)
  144. #define F_SETUP        (0x4000)
  145. #define F_PARENTS    (0x4000)
  146. #define F_SORTED    (0x8000)
  147. #define F_UNTAGGED    (0x10000)
  148. #define F_STAT        (0x20000)    /* TRULY READONLY */
  149. #define F_TEXT        (0x40000)    /* DOS crap, default mode is binary */
  150. #define F_ZIPFILE    (0x80000)    /* compress the file aspect */
  151. #define F_ZIPDATA    (0x100000)    /* compress data chunks */
  152. #define F_TEMPFILE    (F_RDWR|F_CREAT|F_UNIQ|F_TEMP)
  153.  
  154. /* BUFFER RELEASE MODES */
  155. #define R_DIRTY        (0x80000000)
  156. #define R_CLEAN        (0x40000000)
  157. #define R_FLUSH        (0x20000000)
  158.  
  159. /* DEFINE SOME SYSTEM CALL VALUES */
  160. #define S_READBLK (1)
  161. #define S_WRITEBLK (2)
  162. #define S_GETSPACE (3)
  163. #define S_GIVESPACE (4)
  164. #define S_CLOSE (5)
  165. #define S_OPEN (6)
  166. #define S_CREATE (7)
  167. #define S_UNLINK (8)
  168. #define S_SEEK (9)
  169. #define S_FLUSH (10)
  170. #define S_CLOSETRUNC (11)
  171.  
  172. #define S_SET (0)
  173. #define S_CUR (1)
  174. #define S_END (2)
  175.  
  176. /* DEFINE CFF OBJECT PROPERTIES -- returned by cfobtype(void *something) */
  177. #define OB_SHARE    (0x00000001)
  178. #define OB_ISDIR    (0x00000002)
  179. #define OB_BMOK        (0x00000004)
  180. #define OB_SMOK        (0x00000008)
  181. #define OB_MEM        (0x00000010)
  182. #define OB_RAWDEV    (0x00000020)
  183. #define OB_CFILE    (0x00000040)
  184. #define OB_SETUP    (0x00000080)
  185. #define OB_FOD        (0x00000100)
  186. #define OB_ROOTDIR    (0x00000200)
  187. #define OB_DIRTY    (0x00000400)
  188. #define OB_DELCLOSE    (0x00000800)
  189. #define OB_WRITE    (0x00001000)
  190. #define OB_BITMAP    (0x00002000)
  191. #define OB_XFILE    (0x00004000)
  192. #define OB_ISNEW    (0x00008000)
  193. #define OB_SMEM        (0x00010000)
  194. #define OB_FILEONLY    (0x40000000)
  195. #define OB_HASHDIR    (0x20000000)
  196. #define OB_TREEDIR    (0x10000000)
  197. #define OB_UNTAGGED (0x08000000)
  198. #define OB_PREALLOC (0x01000000)
  199. #define OB_ZIPFILE    (0x00800000)
  200. #define OB_ZIPDATA    (0x00400000)
  201. #define OB_CHUNK    (0x00200000)
  202. #define OB_VALUE    (0x00100000)
  203.  
  204. #ifndef NULL
  205. #define NULL ((void *)0)
  206. #endif
  207. #ifndef EOF
  208. #define EOF     (-1)
  209. #endif
  210. #define YES     (1)
  211. #define NO      (0)
  212. #define OK      (1)
  213. #define NODUPS    (0)
  214. #define OKDUPS    (1)
  215. #define CNTDUPS (2)
  216. #define DUPNAMES (4)
  217.  
  218. #define PREALLOC1 (8)
  219. #define PREALLOC2 (16)
  220. #define PREALLOC3 (32)
  221.  
  222. #define ERROR   (-1)
  223. #define FOUND    (1)
  224. #define NOTFOUND (0)
  225. #define NONE    (-1)    /* no value */
  226. #define INVALID (-4)    /* invalid value */
  227. #define LESS    (-1)    /* a is less than b */
  228. #define EQUAL    (0)        /* a and b are equal */
  229. #define GREATER    (2)        /* a is greater than b */
  230. #define    BOI    (-2)        /* beginning of index */
  231. #define    EOI    (-3)        /* end of index */
  232.  
  233. typedef struct opninfo {
  234.     long initial_entries;
  235.     unsigned long bitmap_prealloc;
  236.     long data_prealloc;
  237. } OPNINFO;
  238.  
  239. typedef struct cfdirent {
  240.     int d_namlen;
  241.     char *d_name;
  242.     unsigned long d_bytesalloc;
  243.     unsigned long d_bytesused;
  244.     unsigned long d_mode;
  245.     unsigned long d_entrycnt;
  246.     unsigned long d_ino;
  247.     unsigned long d_mtime;
  248.     unsigned long d_ctime;
  249.     void *d_fpt;
  250. } CFDIRENT;
  251.  
  252. /* Function codes for the cfmisc instruction */
  253. enum CfMisc {
  254.     CF_ALLOC,CF_USED,CF_DEPTH,CF_MARK,CF_HEAD,CF_TAIL,CF_NEXT,
  255.     CF_PREV,CF_KEYLEN,CF_DATALEN,CF_MODBUFS,
  256.     CF_CURBUFS,CF_SETKEYCMP,CF_SETITEMCMP,CF_SETERRFUNC,
  257.     CF_LAZY,CF_VERYLAZY,CF_CLRLAZY,CF_ISNEW,CF_FLUSH,
  258.     CF_FILESIZE,CF_FILEALLOC,CF_PREALLOC,CF_ALIGNMENT,
  259.     CF_MAPSIZE,CF_ISSORTED,CF_KEY,CF_ITEM,CF_CREEP,
  260.     CF_SETPRINTFUNC,CF_DATA,CF_GETMARK,CF_SETMARK
  261. };
  262.  
  263. typedef struct cffstat {
  264.         unsigned long    st_smhead;
  265.         unsigned long    st_smtail;
  266.         unsigned short    st_id;
  267.         unsigned short    st_keysize;
  268.  
  269.         STOR           st_dups;
  270.         unsigned long  st_bmhead;
  271.         unsigned long  st_bmtail;
  272.         unsigned long  st_mode;
  273.         short st_uid;
  274.         short st_gid;
  275.         long  st_mtime;
  276.         long  st_ctime;
  277.  
  278.         unsigned long  st_highleaf;
  279.         unsigned long  st_size;
  280.         unsigned long  st_alloc;
  281.         unsigned long  st_entrycnt;
  282.         short            st_mapsize;
  283.         unsigned short st_dupids;
  284.  
  285.         long  st_atime;
  286.         long  st_filesize;
  287.         long  st_filealloc;
  288.         long  st_obtype;
  289.         unsigned int st_filedups;
  290.         long  st_ino;
  291.         short st_blksize;
  292.         short st_dev;
  293.         short st_nlink;
  294.         short st_rdev;
  295. } CFSTAT;
  296.  
  297. /* MODE BITS */
  298. #define M_AFMT        (0x30000000)
  299. #define M_ROOTDIR    (0x80000000)
  300. #define M_FILEONLY    (0x40000000)
  301. #define M_HASHDIR    (0x20000000)
  302. #define M_TREEDIR    (0x10000000)
  303. #define M_UNTAGGED    (0x08000000)
  304. #define M_BITMAP    (0x04000000)
  305. #define M_EXTRNFILE    (0x02000000)
  306. #define M_PREALLOC    (0x01000000)
  307. #define M_ZIPFILE    (0x00800000)
  308. #define M_ZIPDATA    (0x00400000)
  309. #define M_CHUNK        (0x00200000)
  310. #define M_VALUE        (0x00100000)
  311. #define M_IFMT        (0x0000F000)
  312. #define M_IFREG        (0x00008000)
  313. #define M_IFDIR        (0x00004000)
  314. #define M_IFIFO        (0x00002000)
  315. #define M_IFCHR        (0x00001000)
  316. #define M_IFBLK        (0x00003000)
  317. #define M_IREAD        (0x00000100)
  318. #define M_IWRITE    (0x00000080)
  319. #define M_IEXEC        (0x00000040)
  320.  
  321.  
  322. extern void *PERMCAT;
  323. extern void *PERMINFO;
  324. extern void *PERMFILE;
  325. extern void *MEMTEMP;
  326. #define MEMTMP MEMTEMP
  327.  
  328. extern char *cff_version;
  329. extern char *cff_copyright;
  330.  
  331.  
  332. #ifdef __cplusplus
  333. extern "C" {
  334. #endif
  335.  
  336. /* STDIO STUFF */
  337. #define __BUFSIZ_  4096
  338.  
  339. extern  struct  cf_iobuf {
  340.     int      _cnt;
  341.     char*    _ptr;
  342.     char*    _base;
  343.     int         _bufsiz;
  344.     short         _flag;
  345.     unsigned char _file;
  346.     char     _sbuf;
  347. } cf_iob[];
  348. extern void *cf_filelist[];
  349.  
  350. typedef struct cf_iobuf cfFILE;
  351.  
  352. #define cf_IOFBF    00000
  353. #define cf_IOREAD   00001
  354. #define cf_IOWRT    00002
  355. #define cf_IONBF    00004
  356. #define cf_IOMYBUF  00010
  357. #define cf_IOEOF    00020
  358. #define cf_IOERR    00040
  359. #define cf_IOSTRG   00100
  360. #define cf_IOLBF    00200
  361. #define cf_IORW     00400
  362. #define cf_IOAPPEND 01000
  363. #define cf_IOTEXT   02000  /* for MSDOS cr/lf style files */
  364.  
  365. #define cfstdin     (&cf_iob[0])
  366. #define cfstdout    (&cf_iob[1])
  367. #define cfstderr    (&cf_iob[2])
  368. #define cfstdaux    (&cf_iob[3])
  369. #define cfstdprn    (&cf_iob[4])
  370.  
  371. #define cfgetc(p) (--(p)->_cnt>=0 ? \
  372.   (int)(*(unsigned char*)(p)->_ptr++) : \
  373.   cf_filbuf(p))
  374. #define cfputc(x,p) (--(p)->_cnt>=0? \
  375.   ((int)((unsigned char)((*(p)->_ptr++=(unsigned)(x))))): \
  376.   cf_flsbuf((unsigned)(x),p))
  377.  
  378. #define cfclearerr(p) ((p)->_flag &= ~(cf_IOERR|cf_IOEOF))
  379. #define cfgetchar()   cfgetc(cfstdin)
  380. #define cfputchar(x)  cfputc(x,cfstdout)
  381. #define cffeof(p)     (((p)->_flag&cf_IOEOF)!=0)
  382. #define cfferror(p)   (((p)->_flag&cf_IOERR)!=0)
  383. #define cffileno(p)   (cf_filelist[(p)->_file])
  384.  
  385. int    cf_filbuf(cfFILE*);
  386. int    cf_flsbuf(unsigned, cfFILE*);
  387. int    cffclose(cfFILE*);
  388. cfFILE*  cffdopen(void *, char*);
  389. int    cffflush(cfFILE*);
  390. int    cffgetc(cfFILE*);
  391. char*  cffgets(char*, int, cfFILE *);
  392. cfFILE*  cffopen(char*, char*);
  393. int    cffputc(int, cfFILE*);
  394. int    cffputs(char*, cfFILE*);
  395. int    cffread(void*, int, int, cfFILE*);
  396. cfFILE*  cffreopen(char*, char*, cfFILE*);
  397. int    cffseek(cfFILE*, long, int);
  398. long   cfftell(cfFILE *);
  399. int    cffwrite(void*, int, int, cfFILE*);
  400. char*  cfgets(char*);
  401. int    cfgetw(cfFILE*);
  402. int    cfputs(char*);
  403. int    cfputw(int, cfFILE*);
  404. void   cfrewind(cfFILE*);
  405. int    cfsetbuf(cfFILE*, char*);
  406. int    cfsetbuffer(cfFILE*, char*, int);
  407. int    cfsetlinebuf(cfFILE*);
  408. int    cfsetvbuf(cfFILE*, char*, int, int);
  409. int    cfungetc(int, cfFILE*);
  410.  
  411. int    cfprintf(const char *fmt, ...);
  412. int cffprintf(cfFILE *iop, const char *fmt, ...);
  413. int cfsprintf(char *str, const char *fmt, ...);
  414. int cfvprintf(const char *fmt, char *args);
  415. int cfvfprintf(cfFILE *iop, const char *fmt, char *args);
  416. int cfvsprintf(char *str, const char *fmt, char *args);
  417.  
  418. int cfsscanf(char *str, const char *fmt, ...);
  419. int cfvsscanf(char *str, const char *fmt, char **args);
  420. int cffscanf(cfFILE *iop, const char *fmt, ...);
  421. int cfvfscanf(cfFILE *iop, const char *fmt, char **args);
  422. int cfscanf(const char *fmt, ...);
  423. int cfvscanf(const char *fmt, char **args);
  424.  
  425.  
  426. void cfinit(char *appname, int lbufpages, char *permfile);
  427. void cfexit();
  428. void cfport_settestflags(int flags);
  429.  
  430. void cfhash(const void *keyptr, int keysize, CAT *cat);
  431. long cfrdwr_object(void *handle, void *userbuffer, long amount, int mode);
  432. long cfseek(void *handle, long amount, int mode);
  433.  
  434. int cfkeycmp (void *keya, int lena, void *keyb, int lenb);
  435. int cflexical_keycmp (void *keya, int lena, void *keyb, int lenb);
  436. int cfitemcmp(void *itema, void *itemb);
  437.  
  438. void cfprintbitmaps(void *something);
  439. void cfprintentries(void *something);
  440. void *cfopen(char *path, long mode, void *info);
  441. void *cfsubopen(void *handle, char *name, long mode, void *info);
  442. void *cfopen_chunk(void *handle, void *item);
  443. void *cfmake_chunk(void *handle, void *key , int keylen, int chunksize);
  444. void *cfdup(void *handle);
  445.  
  446. void cfclose(void *handle);
  447. int cfunlink(void *something, ... );
  448. int cfstat(void *something, void *stbuf);
  449. int cfsubstat(void *handle, char *name, void *stbuf);
  450. void *cfcopy(void *something_dst, void *something_src);
  451. long cfcopy_file(void *handle_dst, void *handle_src);
  452. int cfcopy_object(void *handle_dst, void *handle_src);
  453. void cftotalloc(void *something, unsigned long *used, unsigned long *alloc);
  454. void *cflocalize(void *handle, void *item);
  455. void cfrelease(void *ptr, long mode);
  456.  
  457. #define cfread(a,b,c) \
  458. cfrdwr_object(a,b,c,S_READBLK)
  459. #define cfwrite(a,b,c) \
  460. cfrdwr_object(a,b,c,S_WRITEBLK)
  461.  
  462. int cfdef(char *key, char *def);
  463. int cfsysdef(char *key, char *def);
  464. int cfappdef(char *key, char *def);
  465. int cfundef(char *key);
  466. int cfsysundef(char *key); 
  467. int cfappundef(char *key);
  468. int cftrn(char *strn, char **newstrn);
  469. int cfpathtrn(char *strn, char **newstrn);
  470. void cfflush(void *handle);
  471. void cfsync(void);
  472. int cftruncate(void *something, unsigned long size);
  473. int cfrename(const char *oldname, const char *newname);
  474. int cfrekey(void *oldhd, void *oldkey, int oldkeylen, void *newhd, void *newkey, int newkeylen);
  475.  
  476. int cfinsertx(void *handle,void *key,int len,void *item,int dups,void *adup);
  477. #define cfinsert(handle,keyptr,keylen,itemptr) \
  478. cfinsertx(handle,keyptr,keylen,itemptr,NODUPS,NULL)
  479. #define cfinsert_dupnum(handle,keyptr,keylen,itemptr,dupnum) \
  480. cfinsertx(handle,keyptr,keylen,itemptr,OKDUPS,dupnum)
  481. #define cfinsert_dupname(handle,keyptr,keylen,itemptr,dupname) \
  482. cfinsertx(handle,keyptr,keylen,itemptr,DUPNAMES,dupname)
  483.  
  484. int cfqget(void *handle, void *keyptr, int keylen, void *bufptr, int buflen);
  485. int cfqfind(void *handle, void *keyptr, int keylen, Item *keyi, Item *dati);
  486. int cfqfindkey(void *handle, void *keyptr, int keylen, Item *keyi);
  487. int cfqfinddat(void *handle, void *keyptr, int keylen, Item *dati);
  488. int cffindx(void *handle, void *keyptr, int keylen, void *itemptr, void *adup);
  489. #define cffind(handle,key,len,item) \
  490. cffindx(handle,key,len,item,NULL)
  491. #define cffind_dupnum(handle,key,len,item,dupnum) \
  492. cffindx(handle,key,len,item,dupnum)
  493. #define cffind_dupname(handle,dupname,itemptr) \
  494. cffindx(handle,dupname,8,itemptr,(void *)0xffffffff)
  495. #define cfreinsert(handle,key,len,item) \
  496. cffindx(handle,key,-len,item,NULL)
  497. #define cfreinsert_dupnum(handle,key,len,item,dupnum) \
  498. cffindx(handle,key,-len,item,dupnum)
  499. #define cfreinsert_dupname(handle,key,len,itemptr,dupname) \
  500. cffindx(handle,dupname,-8,itemptr,(void *)0xffffffff)
  501.  
  502. int cffind_item(void *handle, void *key, int keylen, void *itemptr);
  503. int cffind_mark(void *handle, void *itemptr);
  504.  
  505. #define cfdelete(a,b,c) \
  506. cfdelete_item(a,b,c,NULL)
  507. int cfdelete_item(void *handle, void *key, int keylen, void *itemptr);
  508. int cfdelete_dupnum(void *handle, void *key, int keylen, long dupnum);
  509. #define cfdelete_lastdupnum(a,b,c) \
  510. cfdelete_dupnum(a,b,c,-1)
  511. int cfdelete_dupname(void *handle, void *key, int keylen, void *dupname);
  512. int cfdelete_lastdupname(void *handle, void *key, int keylen);
  513. int cfdelete_alldupnames(void *handle, void *key, int keylen);
  514. int cfdelete_alldupnums(void *handle, void *key, int keylen);
  515. int cflastdupname(void *handle, void *key, int keylen, void *dupname);
  516.  
  517. long cfpush_item(void *handle, void *itemptr);
  518. long cfpush_value(void *handle, unsigned long *value);
  519. long cfpush_data(void *handle, void *datptr, int datsize);
  520. long cfpop_item(void *handle, void *itemptr);
  521. long cfpop_value(void *handle, unsigned long *value);
  522. long cfpop_data(void *handle, void *datptr, int datsize);
  523. long cfstackdepth(void *handle);
  524.  
  525. long cfcountdups(void *handle, void *key, int keylen);
  526. long cfmisc(void *something, int func, ...);
  527.  
  528. void *cfopendir(void *path);
  529. void cfclosedir(void *it);
  530. CFDIRENT *cfreaddir(void *it);
  531. CFDIRENT *cfreadfulldir(void *it);
  532. void cfrewinddir(void *it);
  533. void cftelldir(void *it, STOR *entry);
  534. void cfseekdir(void *it, STOR *entry);
  535. long cfentrycnt(void *something);
  536. long cffilesize(void *something);
  537.  
  538. int cfseq_dupnum(void *handle, void *key, int len, void *itemptr, int mode);
  539. #define cfhead_dupnum(a,b,c,d) cfseq_dupnum(a,b,c,d,CF_HEAD)
  540. #define cftail_dupnum(a,b,c,d) cfseq_dupnum(a,b,c,d,CF_TAIL)
  541. #define cfnext_dupnum(a,b,c,d) cfseq_dupnum(a,b,c,d,CF_NEXT)
  542. #define cfprev_dupnum(a,b,c,d) cfseq_dupnum(a,b,c,d,CF_PREV)
  543.  
  544. int cfseq_dupname(void *handle, void *key, int len, void *itemptr, int mode);
  545. #define cfhead_dupname(a,b,c,d) cfseq_dupname(a,b,c,d,CF_HEAD)
  546. #define cftail_dupname(a,b,c,d) cfseq_dupname(a,b,c,d,CF_TAIL)
  547. #define cfnext_dupname(a,b,c,d) cfseq_dupname(a,b,c,d,CF_NEXT)
  548. #define cfprev_dupname(a,b,c,d) cfseq_dupname(a,b,c,d,CF_PREV)
  549.  
  550.  
  551. #define cfdepth(a) \
  552. cfmisc(a, CF_DEPTH)
  553. #define cfmark(a) \
  554. cfmisc(a, CF_MARK)
  555. #define cfhead(a,b) \
  556. cfmisc(a, CF_HEAD, b)
  557. #define cftail(a,b) \
  558. cfmisc(a, CF_TAIL, b)
  559. #define cfnext(a,b) \
  560. cfmisc(a, CF_NEXT, b)
  561. #define cfprev(a,b) \
  562. cfmisc(a, CF_PREV, b)
  563. #define cfkeylen(a,b) \
  564. cfmisc(a, CF_KEYLEN, b)
  565. #define cfdatalen(a,b) \
  566. cfmisc(a, CF_DATALEN, b)
  567. #define cfbytesused(a) \
  568. cfmisc(a, CF_USED)
  569. #define cfbytesalloc(a) \
  570. cfmisc(a, CF_ALLOC)
  571. #define cfmodbufs(a) \
  572. cfmisc(NULL, CF_MODBUFS, a)
  573. #define cfcurbufs() \
  574. cfmisc(NULL, CF_CURBUFS)
  575. #define cfsetkeycmp(a,b) \
  576. cfmisc(a, CF_SETKEYCMP, b)
  577. #define cfsetitemcmp(a,b) \
  578. cfmisc(a, CF_SETITEMCMP, b)
  579. #define cfseterrfunc(a) \
  580. cfmisc(NULL, CF_SETERRFUNC, a)
  581. #define cfsetprintfunc(a) \
  582. cfmisc(NULL, CF_SETPRINTFUNC, a)
  583. #define cfisnew(a) \
  584. cfmisc(a,CF_ISNEW)
  585. #define cfsetverylazy(a) \
  586. cfmisc(a, CF_LAZY)
  587. #define cfsetlazy(a) \
  588. cfmisc(a, CF_VERYLAZY)
  589. #define cfclrlazy(a) \
  590. cfmisc(a, CF_CLRLAZY)
  591. #define cffilealloc(a) \
  592. cfmisc(a, CF_FILEALLOC)
  593. #define cfprealloc(a) \
  594. cfmisc(a, CF_PREALLOC)
  595. #define cfalignment(a) \
  596. cfmisc(a, CF_ALIGNMENT)
  597. #define cfmapsize(a) \
  598. cfmisc(a, CF_MAPSIZE)
  599. #define cfissorted(a) \
  600. cfmisc(a, CF_ISSORTED)
  601. #define cfkey(ccb,key,len) \
  602. cfmisc(ccb, CF_KEY, key, len)
  603. #define cfitem(ccb, item) \
  604. cfmisc(ccb, CF_ITEM, item)
  605. #define cfdata(ccb, buf, len) \
  606. cfmisc(ccb, CF_DATA, buf, len)
  607.  
  608. void cfpflags(char *name, void *handle);
  609. long cfobtype(void *handle);
  610. void *cfgetspace(void *handle, long amount, void *addr);
  611. int cfretspace(void *handle, void *addr);
  612.  
  613. void *cfputx(void *handle, void *keyptr, int keylen, void *itemptr,
  614.                     int dupflg, void *adup, void *bufptr, long buflen);
  615. #define cfput(handle,key,len,buf,buflen,itemptr) \
  616. cfputx(handle,key,len,itemptr,NODUPS,NULL,buf,buflen)
  617. #define cfput_dupnum(handle,key,len,buf,buflen,itemptr,dupnum) \
  618. cfputx(handle,key,len,itemptr,OKDUPS,dupnum,buf,buflen)
  619. #define cfput_dupname(handle,key,len,buf,buflen,itemptr,dupname) \
  620. cfputx(handle,key,len,itemptr,DUPNAMES,dupname,buf,buflen)
  621. #define cfreput(handle,key,len,buf,buflen,itemptr) \
  622. cfputx(handle,key,len,itemptr,NODUPS,NULL,buf,-buflen)
  623. #define cfreput_dupnum(handle,key,len,buf,buflen,itemptr,dupnum) \
  624. cfputx(handle,key,len,itemptr,OKDUPS,dupnum,buf,-buflen)
  625. #define cfreput_dupname(handle,key,len,buf,buflen,itemptr,dupname) \
  626. cfputx(handle,key,len,itemptr,DUPNAMES,dupname,buf,-buflen)
  627.  
  628.  
  629. int cfgetx(void *handle, void *keyptr, int keylen,
  630.                     void *bufptr, long buflen, void *adup);
  631. #define cfget(handle,key,len,buf,buflen) \
  632. cfgetx(handle,key,len,buf,buflen,NULL)
  633. #define cfget_dupnum(handle,key,len,buf,buflen,dupnum) \
  634. cfgetx(handle,key,len,buf,buflen,dupnum)
  635. #define cfget_dupname(handle,dupname,buf,buflen) \
  636. cfgetx(handle,dupname,8,buf,buflen,(void *)0xffffffff)
  637. int cfchdir(char *);
  638. void cfgetcwd(char *cwd, int size);
  639. int cfdozip(void *, int, void *, int, int);
  640. #define cfzip(dst,dsize,src,ssize) \
  641. cfdozip(dst,dsize,src,ssize,0)
  642. #define cfunzip(dst,dsize,src,ssize) \
  643. cfdozip(dst,dsize,src,ssize,-1)
  644.  
  645.  
  646. void *malloc(size_t);
  647. void free(void *);
  648. unsigned mallocsize(const void *);
  649.  
  650. #if 0 /* some include files use size_t for these functions */
  651. void *calloc(unsigned, unsigned);
  652. void *realloc(void *, unsigned);
  653. void *memalign(unsigned, unsigned);
  654. void *valloc(unsigned);
  655. #endif
  656.  
  657. void *mallocC(long, unsigned);
  658. void *callocC(long, unsigned, unsigned);
  659. void *reallocC(long, void *, unsigned);
  660. void *vallocC(long, unsigned);
  661. void *memalignC(long, unsigned, unsigned);
  662. void freeC(long, void *);
  663. void freecat(long);
  664. void *cfmalloc(unsigned, STOR *);
  665. void cffree(STOR *);
  666.  
  667. /* DEFINITIONS FOR THE INTERNAL COPY OF DLD */
  668. /* Error codes */
  669.  
  670. #define DLD_ENOFILE    1        /* cannot open file */
  671. #define DLD_EBADMAGIC    2        /* bad magic number */
  672. #define DLD_EBADHEADER    3        /* failure reading header */
  673. #define DLD_ENOTEXT    4        /* premature eof in text section */
  674. #define DLD_ENOSYMBOLS    5        /* premature end of file in symbols */
  675. #define DLD_ENOSTRINGS    6        /* bad string table */
  676. #define DLD_ENOTXTRELOC    7        /* premature eof in text relocation */
  677. #define DLD_ENODATA    8        /* premature eof in data section */
  678. #define DLD_ENODATRELOC    9        /* premature eof in data relocation */
  679. #define DLD_EMULTDEFS    10        /* multiple definitions of symbol */
  680. #define DLD_EBADLIBRARY    11        /* malformed library archive */
  681. #define DLD_EBADCOMMON    12        /* common block not supported */
  682. #define DLD_EBADOBJECT    13        /* malformed input file (not rel or
  683.                        archive) */
  684. #define DLD_EBADRELOC    14        /* bad relocation info */
  685. #define DLD_ENOMEMORY    15        /* virtual memory exhausted */
  686. #define DLD_EUNDEFSYM    16        /* undefined symbol */
  687.  
  688. extern int dld_errno;            /* error code returned by dld */
  689. extern int dld_undefined_sym_count; /* # of undefined global symbols */
  690.  
  691. extern int dld_init ();            /* initialize the dld routines */
  692. extern int dld_link ();            /* dynamically link and load an object
  693.                        file */
  694. extern void *
  695. dld_get_symbol ();            /* return the address of the named
  696.                        identifier  */
  697. extern void *
  698. dld_get_func ();            /* return the address of the named
  699.                            function */
  700. extern void *
  701. dld_get_bare_symbol ();            /* same as dld_get_symbol except that
  702.                                no underscore (_) is prepended.  Use
  703.                                to locate symbols defined by
  704.                                assembly routines. */
  705. extern int dld_unlink_by_file ();   /* unlink a file */
  706. extern int dld_unlink_by_symbol (); /* unlink the module that defines the
  707.                                    given symbol */
  708.  
  709. extern int
  710. dld_function_executable_p ();        /* return true if the named C function
  711.                                    is executable */
  712.  
  713. extern char **
  714. dld_list_undefined_sym ();        /* return an array of undefined symbols */
  715.  
  716. extern char *
  717. dld_find_executable ();            /* return the full path name of the
  718.                                given executable file. */
  719.  
  720. extern int
  721. dld_create_reference ();        /* explicitly create a reference to the
  722.                        given symbol. */
  723.  
  724. extern int dld_define_sym ();        /* explicitly define the value for the
  725.                        given symbol. */
  726.  
  727. extern void
  728. dld_remove_defined_symbol ();        /* remove a explicitly defined symbol */
  729.  
  730. extern void dld_perror ();        /* print error messages. */
  731.  
  732. extern void dld_demand_load();    /* define all undefined symbols
  733.                                     with negative numbers */
  734.  
  735. extern void dld_use_library();    /* add a filename for undefined symbol
  736.                                     search */
  737.  
  738. extern void dld_nouse_library();    /* remove a library from the search list */
  739.  
  740. extern void  *dld_resolve_symbol();    /* resolve one of the demand loadable undefs */
  741.  
  742. extern void dld_trace();        /* set the trace level */
  743.  
  744. extern char *dld_symname();        /* return name of a demand loadable undef */
  745.  
  746. extern void *dld_rename_symbol(char *old, char *new);
  747.  
  748. extern int dld_rename_file(char *old, char *new);
  749.  
  750. extern void dld_lib_check(int dynlink);    /* force search of library list */
  751.  
  752. extern void dld_load_symb(char *symb, int dynlink);
  753.  
  754. extern int dld_scan_file(void *fhandle, void *thandle);
  755.  
  756. extern void dld_oxset_libtype(int type);
  757.  
  758. extern void dld_oxset_libnum(int libnum);
  759.  
  760. extern void dld_oxload_thunk(int thunknum);
  761.  
  762. extern int dld_oxprep_thunk(char *symb);
  763.  
  764. typedef struct {
  765.     void *pad;
  766.     char *name;
  767.     long value;
  768. } dldSymbol;
  769.  
  770. /* PATTERN MATCH FLAGS */
  771. #define P_LEADING_DOT    (0x1)
  772. #define P_IS_PATH        (0x2)
  773. #define P_PAT_PATH        (0x4)
  774. #define P_USES_ESCAPES    (0x8)
  775. #define P_PCDOS            (0x10)
  776.  
  777. int pattern_match (char *pattern, char *string, int flags);
  778. int check_for_pattern(char *cp, int flags);
  779.  
  780. /* CTYPE DEFINITIONS */
  781.    
  782. #define _mU (0x01)
  783. #define _mL (0x02)
  784. #define _mN (0x04)
  785. #define _mX (0x08)
  786. #define _mS (0x10)
  787. #define _mP (0x20)
  788. #define _mC (0x40)
  789. #define _mB (0x80)
  790.  
  791. extern  unsigned char      cfctype[];
  792.    
  793. #define isalpha(c)  (cfctype[(unsigned char) c]&(_mU|_mL))
  794. #define isupper(c)  (cfctype[(unsigned char) c]&_mU)
  795. #define islower(c)  (cfctype[(unsigned char) c]&_mL)
  796. #define isdigit(c)  (cfctype[(unsigned char) c]&_mN)
  797. #define isxdigit(c) (cfctype[(unsigned char) c]&(_mX|_mN))
  798. #define isspace(c)  (cfctype[(unsigned char) c]&_mS)
  799. #define ispunct(c)  (cfctype[(unsigned char) c]&_mP)
  800. #define isalnum(c)  (cfctype[(unsigned char) c]&(_mU|_mL|_mN))
  801. #define isprint(c)  (cfctype[(unsigned char) c]&(_mP|_mU|_mL|_mN|_mB))
  802. #define isgraph(c)  (cfctype[(unsigned char) c]&(_mP|_mU|_mL|_mN))
  803. #define iscntrl(c)  (cfctype[(unsigned char) c]&_mC)
  804. #define isascii(c)  ((unsigned char)(c)<=(0x7f))
  805.  
  806. #define toupper(c)  ({unsigned char _c = (unsigned char)(c); islower(_c) ? (_c-32) : _c; })
  807. #define tolower(c)  ({unsigned char _c = (unsigned char)(c); isupper(_c) ? (_c+32) : _c; })
  808. #define toascii(c)  ((c)&(0x7f))
  809.  
  810. #ifdef __cplusplus
  811. }
  812. #endif
  813.  
  814.