Files
hustoj/core/sim/sim_3_01/fname.h
2024-10-10 12:56:56 +08:00

123 lines
3.0 KiB
C

/* This file is part of the auxiliaries library.
Written by Dick Grune, dick@dickgrune.com
$Id: fname.h,v 1.13 2017-01-22 14:50:00 Gebruiker Exp $
*/
/* Support for UNICODE file names */
/*
To accommodate UNICODE file names on various platforms, this file defines
the types
Fchar file name character
Dir_t struct for accessing a directory
Dirent_t struct for accessing a directory entry
and the functions
Dir_t* Opendir(const Fchar*);
Dirent_t* Readdir(Dir_t*);
int Closedir(Dir_t*);
Fchar *Fnamecpy(Fchar *dest, Fchar *source);
Fchar *Fnamecat(Fchar*, const Fchar*);
int Fnamelen(const Fchar*);
int Fnamecmp(const Fchar*, const Fchar*);
int Stat(const Fchar *fn, struct stat *st);
FILE *Fopen(const Fchar *fn, const char *rb);
The stream is still char*!
int Fclose(FILE*);
const char *Fname2str(const Fchar *fn);
const Fchar *str2Fname(const char *s);
The result of these two routines is transient: is is good only until
the next call.
The only way to obtain a file name is through readdir; the command line
arguments are in ASCII. So a program can be adapted by replacing
DIR by Dir_t, and
struct dirent by Dirent_t.
Compiling and correcting using the above replacements until there are no
more errors or warnings will then yield an UTF-16 compatible program, as
far as the input is concerned. Output is done in UTF-8; there seems to be
no way to do output in UFT-16.
For details about UTF-16 see fname.c.
*/
#ifndef _FNAME_H_
#define _FNAME_H_
/* lint cannot handle the weird code Windows throws at it, so even under
Windows we claim to have UTF8
*/
#ifdef MSDOS
#define IS_UTF_16
#endif
#ifdef lint
#undef IS_UTF_16
#endif
#ifdef IS_UTF_16 /* file names in UTF-16 */
#define _UNICODE
#include <tchar.h>
#include <sys/stat.h>
#include <dirent.h>
/* Private entries */
typedef _TCHAR Fchar;
typedef _WDIR Dir_t;
typedef struct _tdirent Dirent_t;
/* Public entries */
#define Opendir _topendir
#define Closedir _tclosedir
#define Readdir _treaddir
#define Fnamecpy wcscpy
#define Fnamecat wcscat
#define Fnamelen (int)wcslen
#define Fnamecmp wcscmp
extern const char *Fname2str(const Fchar *fn); /* transient! */
extern const Fchar *str2Fname(const char *s); /* transient! */
extern int Stat(const Fchar *fn, struct stat *st);
extern FILE *Fopen(const Fchar *fn, const char *rb);/* stream is still char* */
#define Fclose fclose
#else /* not MSDOS */ /* file names are in UTF-8 */
#include <sys/stat.h>
#include <dirent.h>
#include <string.h>
/* life is simple */
/* Public entries */
typedef char Fchar;
#define Fnamecpy strcpy
#define Fnamecat strcat
#define Fnamelen strlen
#define Fnamecmp strcmp
#define Fname2str(fn) (fn)
#define str2Fname(s) (s)
#define Stat(fn,st) stat(fn,st)
typedef DIR Dir_t;
typedef struct dirent Dirent_t;
#define Opendir opendir
#define Closedir closedir
#define Readdir readdir
#define Fopen fopen
#define Fclose fclose
#endif /* MSDOS */
#endif /* _FNAME_H_ */