2
* $Id: environ.h,v 1.14 2004/05/31 16:08:41 andrew_belov Exp $
3
* ---------------------------------------------------------------------------
4
* All environment-specific declarations are held here.
8
#ifndef ENVIRON_INCLUDED
9
#define ENVIRON_INCLUDED
11
/* First of all, let's try to guess what kind of compiler we're using. The
12
COMPILER macro will lead us all the way */
14
#ifndef C_DEFS_INCLUDED /* All-time definitions */
28
#if defined(__TURBOC__)||defined(__BORLANDC__)
30
#elif defined(_MSC_VER)||defined(_QC)
38
#if (defined(_MSC_VER)&&_MSC_VER<600)||(!defined(_MSC_VER)&&defined(_QC))
39
#define MSC_ANCIENT /* Old-style Microsoft compiler */
42
#elif defined(__IBMC__)||defined(__IBMCPP__)
44
#elif defined(__GNUC__)
46
#elif defined(__WATCOMC__)
51
#elif defined(__HIGHC__)||defined(__HIGHC_ANSI__)||defined(_OS2)
52
#define COMPILER HIGHC
55
#define COMPILER GENERIC
58
/* Now, make it clear about target OS */
61
#define OS2 2 /* OS/2-32 is OS2+__32BIT__ */
68
#if defined(_OS2)||defined(__OS2__)||defined(__EMX__)
78
#if TARGET==DOS||TARGET==OS2&&!defined(__32BIT__)
84
#define HAVE_VOL_LABELS
87
#if TARGET==OS2||TARGET==WIN32
95
#elif COMPILER==MSC||COMPILER==MSVC
102
#if COMPILER==ICC&&defined(DEBUG)
103
#define __DEBUG_ALLOC__ /* For heap checking */
117
#elif COMPILER!=GCC && !defined(SUNOS)
121
/* OS-dependent headers */
132
#include <sys/types.h>
133
#include <sys/stat.h> /* For dev_t, chmod(), etc. */
136
/* Keywords remapping */
163
#error *** A FAR/NEAR translation must be defined for this compiler!
166
/* Special functions enablement */
169
#define FINETUNE_BUFSIZ /* Alternate adjustment method */
172
#if defined(TILED)&&!defined(MSC_ANCIENT)
173
#define ASM8086 /* Enable assembly routines */
176
/* Library functions/equates remapping */
180
#define farmalloc malloc
181
#define farrealloc realloc
182
#define farcalloc calloc
183
#define coreleft() 1048576 /* Don't know/care about it */
185
#define farfree _ffree
186
#define farmalloc(s) _fmalloc((size_t)s)
187
#define farrealloc(p, s) _frealloc(p, (size_t)s)
188
#define farcalloc(n, s) _fcalloc((size_t)(n), (size_t)(s))
189
#define coreleft _memmax /* Size of largest unallocated block */
193
#define findfirst _dos_findfirst
194
#define findnext _dos_findnext
195
#define getvect _dos_getvect
196
#define setvect _dos_setvect
201
#define diskfree_t _diskfree_t
202
#define dosdate_t _dosdate_t
203
#define dostime_t _dostime_t
205
#define find_t _find_t
206
#define _interrupt __interrupt
207
#define rccoord __rccoord
208
#define stackavail _stackavail
209
#define strlwr _strlwr
210
#define strupr _strupr
211
#define videoconfig __videoconfig
221
#define _fcalloc fcalloc
222
#define _fmemcmp fmemcmp
223
#define _fmemset fmemset
224
#define _frealloc frealloc
225
#define _fstrcat fstrcat
226
#define _fstrchr fstrchr
227
#define _fstrcmp fstrcmp
228
#define _fstrcpy fstrcpy
229
#define _fstrlen fstrlen
232
#if (COMPILER==MSC&&_MSC_VER>=0x0700)||COMPILER==IBMC||COMPILER==HIGHC||TARGET==OS2&&defined(LIBC)
233
#define filelength _filelength
234
#define fcloseall _fcloseall
236
#if COMPILER==BCC||COMPILER==MSC
239
#if COMPILER==ICC||COMPILER==HIGHC
244
#define O_BINARY 0 /* N/A under UNIX */
245
#endif /* __QNXNTO__ */
252
/* BSD 4.3 LIBC forwarders */
253
#ifdef HAVE_STRCASECMP
254
#define stricmp strcasecmp
255
#define strnicmp strncasecmp
258
/* Watcom variables remapping: the "-5r" convention requires this */
260
#if TARGET==OS2&&COMPILER==WCC&&defined(LIBC)
261
#pragma aux stdin "*"
262
#pragma aux stdout "*"
263
#pragma aux stderr "*"
264
#pragma aux stdaux "*"
265
#pragma aux stdprn "*"
266
#pragma aux _timezone "*"
267
#pragma aux _daylight "*"
268
#pragma aux errno "*"
271
/* MetaWare High C/C++, GCC, etc. add-ons */
273
#if !defined(HAVE_MIN)&&!defined(min)
274
#define min(a, b) ((a)<(b)?(a):(b))
277
#if !defined(HAVE_MAX)&&!defined(max)
278
#define max(a, b) ((a)>(b)?(a):(b))
281
/* Structures that are already present in Borland C but missing from MS C */
301
/* DOS Extended FCB */
315
unsigned char ti_min;
316
unsigned char ti_hour;
317
unsigned char ti_hund;
318
unsigned char ti_sec;
333
/* Far pointer creation macro */
336
#define MK_FP(seg,ofs) ((void FAR *)(((unsigned long)seg<<16)+(unsigned long)ofs))
339
/* Far memory comparison macro/function */
342
#define far_memcmp memcmp
346
#define far_memcmp _fmemcmp
349
/* Error message output */
352
#define error_report() msg_cprintf(H_ERR, M_ERROR_CODE, errno, strerror(errno))
353
#define error_freport() msg_cprintf(H_ERR, M_ERROR_CODE, errno, strerror(errno))
355
/* LIBCS.DLL complains about missing message resources */
356
#if defined(LIBC)&&TARGET==OS2
357
#define error_report()
359
#define error_report() \
361
msg_cprintf(H_ERR, M_ERROR_CODE, errno, strerror(errno)); \
362
msg_cprintf(H_ERR, (FMSG *)lf); \
367
/* Signal handler parameter set */
372
#define SIGHDLPARAMS int sig
375
/* Host operating system. Note that OS codes are defined separately in
376
DEFINES.H, so this macro has no effect until DEFINES.H is included. */
388
/* Fixed-bit quantities. Atomic integer types comprising no less than the
389
designated number of bits */
391
#define UINT32 unsigned long
392
#define INT32 unsigned long
394
/* Case sensitivity (under OS/2, this actually depends on the IFS used!) */
397
#define CASE_INSENSITIVE
400
/* Maximum size of path/path component */
402
#if TARGET==OS2||defined(__TILED__)
403
#define CCHMAXPATH 260
404
#define CCHMAXPATHCOMP 256
406
#define CCHMAXPATH 512
407
#define CCHMAXPATHCOMP CCHMAXPATH
409
#define MAXWILDAST 128 /* Maximum # of asterisks in wildcards */
411
/* Our own archive filename storage */
414
#undef FILENAME_MAX /* Already defined in some compilers */
417
#define FILENAME_MAX 500
419
#define FILENAME_MAX 512
422
/* Wildcard equates */
424
#define WC_RESERVE 10 /* Number of bytes to reserve for w/c */
426
/* Length of screen-wide strings */
428
#define INPUT_LENGTH 80 /* Used in various queries */
429
#define TXTD_LENGTH 78 /* Used when displaying found text */
431
/* Length of command lines */
434
#define CMDLINE_LENGTH 160
436
#define CMDLINE_LENGTH 264
438
#define CMDLINE_LENGTH 512 /* ASR fix: applies to Unices too!
439
15/01/2003 -- Win32 preparations */
442
/* Number of command-line parameters. It must NOT be too high since some arrays
443
are based on its value */
446
#define PARAMS_MAX 64 /* parameters+spaces: 64*2=128 */
447
#define SFLIST_MAX 64 /* ARJSFX filelist array limit */
449
#define PARAMS_MAX 131 /* ~262 */
450
#define SFLIST_MAX 131
452
#define PARAMS_MAX 1024 /* May be less on some platforms */
453
#define SFLIST_MAX 1024
456
/* FAR memory block size limit */
460
#define FAR_BLK_MAX 65535
462
#define FAR_BLK_MAX 65512
464
#define FAR_BLK_MAX 65535
466
#define FLIST_ALLOC_MAX FAR_BLK_MAX
468
#define FAR_BLK_MAX 469762048 /* Unless it's Aurora */
469
#define FLIST_ALLOC_MAX 65535
471
#define FAR_BLK_MAX 524288000 /* ASR fix 27/10/2002: larger
472
values overflow the 2G limit in
473
FILELIST.C, leading to
474
ARJSFXV/Linux failure */
475
#define FLIST_ALLOC_MAX 65535
478
/* CFA block increments. It will be wise to keep them proportional to the
479
page size under OS/2, and memory-conserving under DOS. As a sidenote, this
480
significantly reduces the memory requirements for ARJ under DOS. */
483
#define CFA_BLOCK_SIZE 16384
485
#define CFA_BLOCK_SIZE 4096
487
#define CFA_BLOCK_SIZE 16384 /* Presume i386 paged RAM */
490
/* Maximum # of files in the filelist. No longer an environment limit but
491
a marketing logic! */
493
#define FILELIST_INCREMENT 256 /* Increment count for order blocks */
494
/* In original ARJ, there was a "commercial" filelist capacity (EXT LIC). The
495
shareware/ordinary license limit was FLIST_ALLOC_MAX-1. */
496
#define EXT_FILELIST_CAPACITY ((unsigned long)FAR_BLK_MAX*4-5)
497
#define FILELIST_CAPACITY (FLIST_ALLOC_MAX-1)
498
#define FLIST_SPEC_BASE FILELIST_CAPACITY /* Special entries start here */
500
/* Implicit filelist limits */
502
#define FCLIM_DELETION FILELIST_CAPACITY /* Limit for deletion */
503
#define FCLIM_ARCHIVE EXT_FILELIST_CAPACITY /* Archive filelist size */
504
#define FCLIM_EXCLUSION FILELIST_CAPACITY /* Limit for exclusion */
505
#define FCLIM_EA FILELIST_CAPACITY /* Limit for EA [in/ex]clusion */
507
/* Console settings */
512
#define CR 0x0D /* CR */
517
#define LF 0x0A /* LF */
522
#define BEL 0x07 /* Bell */
527
#define TAB 0x09 /* Tab */
528
#define TAB_POS 8 /* Tab stops spacing */
530
#define CON_LBOUND 32 /* Lowest displayable character */
531
#define CON_UBOUND 126 /* Highest displayable character */
533
#if TARGET==UNIX||COMPILER==ICC||COMPILER==HIGHC||TARGET==OS2&&defined(LIBC)
534
#define STDOUT_SETBUF_FIX /* XPG.4 libraries (namely, IBM LIBC
535
and GLIBC) do excessive stdout
539
#if TARGET==UNIX||TARGET==OS2
540
#define DIRECT_TO_ANSI /* Means to reimplement screen commands
544
/* UNIX and DOS-style path separators */
547
#define PATH_SEPARATORS "/"
549
#define PATH_SEPARATORS "\\:/" /* Path separators allowed by target
553
#define PATHSEP_DEFAULT '/'
554
#define PATHSEP_DEFSTR "/"
556
#define PATHSEP_DEFAULT '\\'
557
#define PATHSEP_DEFSTR "\\"
560
/* File buffering equates (defining NO_CACHING will disable buffering) */
562
#define CACHE_SIZE 4096 /* Allocate this amount for buffer */
563
#define CACHE_SIZE_SFXJR 8192 /* ARJSFXJR incoming data cache size */
564
#define PROC_BLOCK_SIZE 27648 /* Size of sequential processing block */
566
#define VBUF_ADD 4096 /* Old archive stream */
567
#define VBUF_EXTRACT 8192 /* Input archive stream */
568
#define TBUF_ARJ 4096 /* Output archive stream */
570
#define VBUF_SFX 4096
572
#define VBUF_SFX 2048
574
#elif TARGET==OS2||TARGET==WIN32
575
/* Microsoft C constraints (fragmented heap, and so on...) */
577
#define VBUF_ADD 1024
578
#define VBUF_EXTRACT 1024
579
#define TBUF_ARJ 1024
580
#define VBUF_SFX 1024
582
#define VBUF_ADD 8192
583
#define VBUF_EXTRACT 16384
584
#define TBUF_ARJ 8192
585
#define VBUF_SFX 8192
588
#define VBUF_ADD 8192
589
#define VBUF_EXTRACT 8192
590
#define VBUF_ARJ 8192
591
#define TBUF_ARJ 8192
592
#define VBUF_SFX 8192
594
#error *** Buffering limits must be defined for the target platform!
596
#define TBUF_MINFREE 42000U /* If less memory left, tbuf>>=1 */
597
#define VBUF_MINFREE 40000U /* If less memory left, vbuf>>=1 */
600
* Error handling capabilities:
602
* NO_TERM_HDL disables termination handler
603
* NO_FATAL_ERROR_HDL disables fatal error handler
608
#define NO_TERM_HDL /* Disable termination handler */
611
#define HAVE_BREAK_HANDLER
614
/* File attribute mapping */
617
#define FATTR_HIDDEN 0x0002
618
#define FATTR_SYSTEM 0x0004
619
#define FATTR_RDONLY 0x0001
620
#define FATTR_ARCH 0x0020
621
#define FATTR_NOARCH 0x0000
622
#define FATTR_DIREC 0x0010
623
#define FATTR_LABEL 0x0008
625
#define FATTR_IROTH 0x0004
626
#define FATTR_IWOTH 0x0002
627
#define FATTR_IXOTH 0x0001
628
#define FATTR_IRGRP (FATTR_IROTH<<3)
629
#define FATTR_IWGRP (FATTR_IWOTH<<3)
630
#define FATTR_IXGRP (FATTR_IXOTH<<3)
631
#define FATTR_IRUSR (FATTR_IRGRP<<3)
632
#define FATTR_IWUSR (FATTR_IWGRP<<3)
633
#define FATTR_IXUSR (FATTR_IXGRP<<3)
634
#define FATTR_SVTX 0x0200 /* Sticky bit */
635
#define FATTR_SGID 0x0400 /* Set GID on exec */
636
#define FATTR_SUID 0x0800 /* Set UID on exec */
637
#define FATTR_UFMASK 0x0FFF /* UID/GID/VTX + rwxrwxrwx */
638
#define ufattr(a) ((a)&FATTR_UFMASK)
639
/* Internal mapping for wild_list(), etc. */
640
#define FATTR_DT_ANY 0x0000 /* Default */
641
#define FATTR_DT_REG 0x1000 /* Regular files */
642
#define FATTR_DT_DIR 0x2000 /* Directories */
643
#define FATTR_DT_UXSPECIAL 0x4000 /* Links, pipes, etc. */
644
#define uftype(a) ((a)&~FATTR_UFMASK)
646
/* Certain capabilities of non-UNIX operating systems aren't supported at all
647
or are heavily modified */
650
#define MAP_UNIX_ATTRS /* Convert to DOS representation */
654
#define STD_ATTRS 0x27 /* Borland compatibility mask */
655
/* The following is for fileinfo searches */
656
#define STD_FI_ATTRS (FATTR_DIREC|FATTR_HIDDEN|FATTR_SYSTEM|FATTR_RDONLY)
657
#define STD_DIR_ATTR FATTR_DIREC
658
#define STD_FATTR_NOARCH FATTR_NOARCH
660
#define STD_FI_ATTRS (FATTR_DT_REG|FATTR_DT_DIR|FATTR_DT_UXSPECIAL)
661
#define STD_DIR_ATTR FATTR_DT_DIR
662
#define STD_FATTR_NOARCH 0644
665
/* Priority classes */
667
#if TARGET==OS2||TARGET==WIN32
668
#define PRIORITY_CLASSES 4 /* 1...4 */
670
#define PRIORITY_CLASSES 41 /* -20...20 -> 1...41 */
672
#define PRIORITY_CLASSES 100 /* For compatibility */
675
/* OS-specific options */
677
#if TARGET==DOS||TARGET==OS2||TARGET==WIN32
679
#define EXE_EXTENSION ".EXE"
680
#define MOD_EXTENSION ".COM"
682
#define EXE_EXTENSION ".exe"
683
#define MOD_EXTENSION ".dll"
686
#define EXE_EXTENSION ""
687
#define NULL_EXE_EXTENSION /* For ARJ_USER to construct SFX names */
688
#define MOD_EXTENSION ".so"
691
/* OS-dependent types */
693
typedef unsigned short ATTRIB; /* Attributes in internal structures */
695
/* File count type */
697
#define FILE_COUNT unsigned long
700
/* Hard link search structure in ffblks and properties */
712
/* lfn_findfirst/findnext customized structure */
716
/* To stay compatible with findfirst/findnext functions that rely on DOS
719
char ff_reserved[21];
725
int ff_ftype; /* Wild UNIX representation - for
726
circular symlink treatment */
728
unsigned long ff_ftime;
729
unsigned long ff_fsize;
730
char ff_name[CCHMAXPATH];
739
char dir[CCHMAXPATH]; /* dirent doesn't hold it */
740
char wildcard[CCHMAXPATH]; /* dirent doesn't hold it */
741
int attrs; /* dirent doesn't hold it */
742
struct l_search l_search;
744
unsigned long ff_atime;
745
unsigned long ff_ctime;
748
/* File information structure (used in file_find and so on) */
750
struct file_properties
757
char type; /* One of ARJT_* */
759
/* For hardlink detection */
761
struct l_search l_search;
766
/* Priority structure */
774
/* After defining all OS-dependent types, we may include additional files */
776
#include "filelist.h" /* For flist_root structure */
778
/* Exported from ENVIRON.C */
780
extern int friendly_systems[];
781
extern char dev_null[];
782
extern char dev_con[];
783
extern char cur_dir_spec[];
784
extern char up_dir_spec[];
785
extern char pathsep_str[];
786
extern char all_wildcard[];
787
extern char root_wildcard[];
793
/* A substitution of kbhit() */
795
#if COMPILER==BCC||COMPILER==MSC||COMPILER==MSVC
796
#define flush_kbd() kbhit()
798
#define flush_kbd() fetch_keystrokes()
801
/* OS-dependent strcmp() used for comparing filenames */
803
#ifdef HAVE_STRCASECMP
804
#define stricmp strcasecmp
807
#ifdef CASE_INSENSITIVE
808
#define strcmp_os(s1, s2) stricmp(s1, s2)
809
#define strncmp_os(s1, s2, l) strnicmp(s1, s2, l)
811
#define strcmp_os(s1, s2) strcmp(s1, s2)
812
#define strncmp_os(s1, s2, l) strncmp(s1, s2, l)
815
/* IBM's implementation of XPG4 CRT (LIBCS.DLL in OS/2) can't do localtime() properly.
816
So we expose a timezone variable and use a homebrew implementation. May be used as a
817
macro, i.e. real timezone converted to seconds. */
819
#if (defined(LIBC)&&TARGET==OS2)||TARGET==WIN32
820
#define TZ_VAR _timezone
823
/* fchmod() to make SFX'es executable and other archives non-executable */
826
int file_acc(FILE *stream);
827
void make_executable(FILE *stream);
828
#define make_nonexecutable(stream) fchmod(fileno(stream), file_acc(stream)&~0111)
830
#define make_executable(stream)
831
#define make_nonexecutable(stream)
834
/* Block optimizers in insane compilers. __LINE__ is for the compiler to be unable
835
to optimize the function arguments if called more than once. */
837
#if COMPILER==HIGHC||COMPILER==ICC
838
#define stop_optimizer() nullsub(__LINE__)
839
#else /* Others are considered sane */
840
#define stop_optimizer()
844
* Exported function prototypes - see ENVIRON.C for details
848
#define SKIP_GET_EXE_NAME
849
void get_exe_name(char *dest, char *arg);
851
void get_exe_name(char *dest);
853
#if TARGET==OS2&&SFX_LEVEL>=ARJSFX
854
char *malloc_env_str(char *t);
855
#define free_env_str(str) free(str)
856
int system_cmd(char *cmd);
858
#define malloc_env_str(t) getenv(t)
859
#define free_env_str(str)
860
#define system_cmd(cmd) system(cmd)
863
#if SFX_LEVEL!=ARJSFXJR
866
int verify_far_heap();
867
#if SFX_LEVEL>=ARJSFXV&&COMPILER!=BCC
873
int setdisk(int drive);
875
void arj_gettime(struct time *ts);
876
void arj_getdate(struct date *ds);
878
#define arj_gettime(x) gettime(x)
879
#define arj_getdate(x) getdate(x)
881
#if TARGET==OS2&&defined(TILED)
882
void FAR *farcalloc_based(unsigned long num, unsigned long size);
883
void farfree_based(void FAR *ptr);
885
#define farcalloc_based farcalloc
886
#define farfree_based farfree
888
void set_priority(struct priority *priority);
889
int test_for_winnt();
890
int file_chmod(char *name, int action, int attrs);
891
int lfn_findfirst(char *path, struct new_ffblk *new_ffblk, int attrib);
892
int lfn_findnext(struct new_ffblk *new_ffblk);
893
void lfn_findclose(struct new_ffblk *new_ffblk);
894
void toupper_loc(unsigned char *ptr, int length);
895
time_t sum_time(time_t t1, time_t t2);
896
time_t sub_time(time_t t1, time_t t2);
897
void case_path(char *s);
898
int find_dupl_drivespecs(char **argtable, int args);
899
int file_test_access(char *name);
902
void fix_ansi_name(char *name);
903
void nullsub(int arg, ...);
904
/* IN ARJ32, it fixes filename to comply with OEM/ANSI codepage issues */
905
#define fix_ansi_name(name)
906
void arj_delay(unsigned int seconds);
908
int file_exists(char *name);
909
FILE *file_open(char *name, char *mode);
910
void default_case_path(char *dest, char *src);
912
unsigned long get_ticks();
913
unsigned long file_getfree(char *name);
914
int file_find(char *name, struct file_properties *properties);
915
#if SFX_LEVEL>=ARJ||defined(REARJ)
916
long file_getfsize(char *name);
918
unsigned long file_getftime(char *name);
919
int file_getlabel(char *label, char drive, ATTRIB *attrib, unsigned long *ftime);
920
int read_line(char *buf, int size);
921
void get_mode_str(char *str, unsigned int mode);
922
int exec_pgm(char *cmdline);
923
#if TARGET==OS2&&SFX_LEVEL>=ARJSFX
924
char *malloc_env_str(char *t);
925
#define free_env_str(str) free(str)
926
int system_cmd(char *cmd);
928
#define malloc_env_str(t) getenv(t)
929
#define free_env_str(str)
930
#define system_cmd(cmd) system(cmd)
932
int read_line_noecho(char *buf, int size);
933
unsigned int get_bytes_per_cluster(char *name);
934
void get_canonical_longname(char *cname, char *name);
935
void get_canonical_shortname(char *cname, char *name);
936
void install_smart_handler();
937
int is_file(FILE *stream);
938
int file_is_removable(char *name);
939
int is_tty(FILE *stream);
940
int file_mkdir(char *name);
941
int match_wildcard(char *name, char *wcard);
942
int file_rmdir(char *name);
943
int file_unlink(char *name);
944
int file_rename(char *oldname, char *newname);
945
int dos_clear_arch_attr(char *name);
946
int reset_drive(char *name);
947
int fetch_keystrokes();
948
int dos_chmod(char *name, int attrib);
949
int file_chsize(FILE *stream, unsigned long size);
950
int file_setftime_on_stream(FILE *stream, unsigned long ftime);
951
int file_setatime(char *name, unsigned long ftime);
952
int file_setctime(char *name, unsigned long ftime);
953
int file_setftime(char *name, unsigned long ftime);
954
int file_setlabel(char *label, char drive, ATTRIB attrib, unsigned long ftime);
955
int file_settype(FILE *stream, int istext);
956
void set_file_apis(int is_ansi);
957
#if SFX_LEVEL>=ARJSFXV
958
int create_subdir_tree(char *path, int qmode, int datatype);
960
int create_subdir_tree(char *path, int datatype);
962
int is_filename_valid(char *name);
963
int is_directory(char *name);
964
char *malloc_subdir_wc(char *name);
965
int file_copy(char *dest, char *src, int chk);
967
int wild_list(struct flist_root *root, struct flist_root *search_flist, char *name, int expand_wildcards, int recurse_subdirs, int file_type, FILE_COUNT *count);
969
int wild_list(struct flist_root *root, char *name, int file_type, int expand_wildcards, int recurse_subdirs, FILE_COUNT *count);
972
#if SFX_LEVEL>=ARJSFX&&SFX_LEVEL<=ARJSFXV
973
void file_getcwd(char *buf, int len);
974
void file_chdir(char *dir);
978
char *file_getcwd(char *buf);
979
int file_chdir(char *dir);
983
#endif /* !ARJSFXJR */
985
int file_setftime_on_hf(int hf, unsigned long ftime);