70 lines
1.8 KiB
C
70 lines
1.8 KiB
C
|
/*****************************************************************************
|
||
|
*
|
||
|
* io.h
|
||
|
*
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#ifdef POSIX
|
||
|
|
||
|
typedef int HF;
|
||
|
#define hfNil (-1)
|
||
|
#define hfIn 0
|
||
|
#define hfOut 1
|
||
|
#define hfErr 2
|
||
|
|
||
|
#define hfOpenPtchOf open
|
||
|
#define hfCreatPtch(p) creat(p, 0600)
|
||
|
#define cbReadHfPvCb read
|
||
|
#define cbWriteHfPvCb write
|
||
|
#define CloseHf close
|
||
|
#define OF_READ O_RDONLY
|
||
|
#define OF_WRITE O_WRONLY
|
||
|
|
||
|
#define fInteractiveHf isatty
|
||
|
|
||
|
#define c_tszNullDevice TEXT("/dev/null")
|
||
|
|
||
|
#else
|
||
|
|
||
|
typedef HFILE HF;
|
||
|
#define hfNil ((HF)HFILE_ERROR)
|
||
|
#define hfIn ((HF)(UINT_PTR)GetStdHandle(STD_INPUT_HANDLE))
|
||
|
#define hfOut ((HF)(UINT_PTR)GetStdHandle(STD_OUTPUT_HANDLE))
|
||
|
#define hfErr ((HF)(UINT_PTR)GetStdHandle(STD_ERROR_HANDLE))
|
||
|
|
||
|
#define hfOpenPtchOf _lopen
|
||
|
#define hfCreatPtch(p) _lcreat(p, 0)
|
||
|
#define cbReadHfPvCb _lread
|
||
|
#define CloseHf _lclose
|
||
|
|
||
|
#define c_tszNullDevice TEXT("nul")
|
||
|
|
||
|
/*
|
||
|
* _lwrite has the quirk that writing zero bytes causes the file
|
||
|
* to be truncated. (Instead of just plain writing zero bytes.)
|
||
|
*/
|
||
|
INLINE CB
|
||
|
cbWriteHfPvCb(HF hf, PCVOID pv, CB cb) {
|
||
|
if (cb) {
|
||
|
return _lwrite(hf, pv, cb);
|
||
|
} else {
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#define fInteractiveHf(hf) (GetFileType((HANDLE)IntToPtr(hf)) == FILE_TYPE_CHAR)
|
||
|
|
||
|
#endif
|
||
|
|
||
|
void STDCALL WriteHfPvCb(HF hf, PCVOID pv, CB cb);
|
||
|
|
||
|
INLINE void
|
||
|
WriteHfPtchCtch(HF hf, PCTCH ptch, CTCH ctch)
|
||
|
{
|
||
|
WriteHfPvCb(hf, ptch, cbCtch(ctch));
|
||
|
}
|
||
|
|
||
|
#ifdef POSIX
|
||
|
UINT GetTempFileName(PCSTR, PCSTR, UINT, PTCH);
|
||
|
#endif
|