-extern char *ad_dir __P((const char *));
-extern char *ad_path __P((const char *, int));
-extern int ad_mode __P((const char *, int));
-extern int ad_mkdir __P((const char *, int));
-extern int ad_open __P((const char *, int, int, int, struct adouble *));
-extern int ad_refresh __P((struct adouble *));
-
-/* extend header to RW if R or W (W if R for locking),
+extern int ad_setfuid __P((const uid_t ));
+extern uid_t ad_getfuid __P((void ));
+
+extern char *ad_dir __P((const char *));
+extern char *ad_path __P((const char *, int));
+extern char *ad_path_osx __P((const char *, int));
+extern char *ad_path_ads __P((const char *, int));
+extern char *ad_path_sfm __P((const char *, int));
+
+extern int ad_mode __P((const char *, int));
+extern int ad_mkdir __P((const char *, int));
+extern void ad_init __P((struct adouble *, int, int ));
+
+extern int ad_open __P((const char *, int, int, int, struct adouble *));
+extern int ad_refresh __P((struct adouble *));
+extern int ad_stat __P((const char *, struct stat *));
+extern int ad_metadata __P((const char *, int, struct adouble *));
+
+#define ad_open_metadata(name, flags, mode, adp)\
+ ad_open(name, ADFLAGS_MD|(flags), O_RDWR |(mode), 0666, (adp))
+
+#define ad_close_metadata(adp) ad_close( (adp), ADFLAGS_MD)
+
+/* build a resource fork mode from the data fork mode:
+ * remove X mode and extend header to RW if R or W (W if R for locking),