/************************************************************************ * FILE.C Copyright (C) 1993 John Burton * * File I/O routines for the Linux Wine Project. * * WARNING : Many options of OpenFile are not yet implemeted. * * NOV 93 Erik Bos (erik@(trashcan.)hacktic.nl * - removed ParseDosFileName, and DosDrive structures. * - structures dynamically configured at runtime. * - _lopen modified to use GetUnixFileName. * * DEC 93 Erik Bos (erik@(trashcan.)hacktic.nl) * - Existing functions modified to use dosfs functions. * - Added _llseek, _lcreate, GetDriveType, GetTempDrive, * GetWindowsDirectory, GetSystemDirectory, GetTempFileName. * ************************************************************************/ #define DEBUG_FILE #include #include #include #include #include "prototypes.h" char WindowsDirectory[256], SystemDirectory[256], TempDirectory[256]; /*************************************************************************** _lopen Emulate the _lopen windows call ***************************************************************************/ WORD KERNEL__lopen (LPSTR lpPathName, WORD iReadWrite) { int handle; char *UnixFileName; #ifdef DEBUG_FILE fprintf (stderr, "_lopen: open %s\n", lpPathName); #endif if ((UnixFileName = GetUnixFileName(lpPathName)) == NULL) return HFILE_ERROR; handle = open (UnixFileName, iReadWrite); #ifdef DEBUG_FILE fprintf (stderr, "_lopen: open: %s (handle %d)\n", UnixFileName, handle); #endif if (handle == -1) return HFILE_ERROR; else return handle; } /*************************************************************************** _lread ***************************************************************************/ WORD KERNEL__lread (WORD hFile, LPSTR lpBuffer, WORD wBytes) { int result; #ifdef DEBUG_FILE fprintf(stderr, "_lread: handle %d, buffer = %ld, length = %d\n", hFile, lpBuffer, wBytes); #endif result = read (hFile, lpBuffer, wBytes); if (result == -1) return HFILE_ERROR; else return result; } /**************************************************************************** _lwrite ****************************************************************************/ WORD KERNEL__lwrite (WORD hFile, LPSTR lpBuffer, WORD wBytes) { int result; #ifdef DEBUG_FILE fprintf(stderr, "_lwrite: handle %d, buffer = %ld, length = %d\n", hFile, lpBuffer, wBytes); #endif result = write (hFile, lpBuffer, wBytes); if (result == -1) return HFILE_ERROR; else return result; } /*************************************************************************** _lclose ***************************************************************************/ WORD KERNEL__lclose (WORD hFile) { #ifdef DEBUG_FILE fprintf(stderr, "_lclose: handle %d\n", hFile); #endif close (hFile); } /************************************************************************** OpenFile Warning: This is nearly totally untested. It compiles, that's it... -SL 9/13/93 **************************************************************************/ WORD KERNEL_OpenFile (LPSTR lpFileName, LPOFSTRUCT ofs, WORD wStyle) { int base,flags; #ifdef DEBUG_FILE fprintf(stderr,"Openfile(%s,,%d) ",lpFileName,wStyle); #endif base=wStyle&0xF; flags=wStyle&0xFFF0; flags&=0xFF0F; /* strip SHARE bits for now */ flags&=0xD7FF; /* strip PROMPT & CANCEL bits for now */ flags&=0x7FFF; /* strip REOPEN bit for now */ flags&=0xFBFF; /* strib VERIFY bit for now */ if(flags&OF_CREATE) { base |=O_CREAT; flags &=0xEFFF; } fprintf(stderr,"now %d,%d\n",base,flags); if(flags&(OF_DELETE|OF_EXIST)) { fprintf(stderr,"Unsupported OpenFile option\n"); return -1; } else { return KERNEL__lopen (lpFileName, wStyle); } } /************************************************************************** SetHandleCount Changes the number of file handles available to the application. Since Linux isn't limited to 20 files, this one's easy. - SL **************************************************************************/ WORD SetHandleCount (WORD wNumber) { printf("SetHandleCount(%d)\n",wNumber); return((wNumber %s\n",bDriveLetter, lpszPrefixString,uUnique,lpszTempFileName); #endif return unique; } /*************************************************************************** SetErrorMode ***************************************************************************/ WORD SetErrorMode(WORD x) { fprintf(stderr,"wine: SetErrorMode %4x (ignored)\n",x); }