mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 20:07:17 +00:00
f41aeca9ff
Mon Sep 13 05:00:11 1993 Eric Youngdale * [Makefile] [if1632/relay.c] [include/dlls.h] [selector.c] [loader/wine.c] [tools/build.c] Added ability to generate missing functions statistics. Mon Sep 13 12:09:47 1993 Scott A. Laird (scott@curly) * [WIN31-APPLETS] Added new file. * [if1632/kernel.spec] Added definitions for GetProfile{Int,String} and SetHandleCount. * [if1632/keyboard.spec] Created interface specification for Keyboard driver DLL. * [if1632/relay.c] Added keyboard.dll to list of included DLLs. * [if1632/user.spec] Added LoadAccelerators definition. * [loader/resource.c] Added LoadAccelerators stub. * [misc/file.c] Changed OpenFile, and added SetHandleCount (for winfile.exe) * [misc/keyboard.c] Added keyboard code. * [misc/profile.c] [misc/xt.c] Moved GetPrivateProfile* commands here, and added GetProfile* commands. Mon Sep 13 10:24:37 1993 Andrew Bulhak * [windows/utility.c] Implemented MulDiv(), OutputDebugString() and wvsprintf() Fri Sep 10 09:13:30 1993 John Brezak * [*/Makefile] Created patch to allow BSD make to build wine. * [windows/win.c] Fixed NULL pointer reference. * [windows/message.c] [misc/xt.c] Defined HZ to handle system specific timing. * [windows/graphics.c] Use M_PI is PI * [objects/pallete.c] NetBSD does not have /usr/include/values.h and MAXINT is INT_MAX. * [dump.c] [ldt.c] [wine.c] ifdef'ed linux headers for linux compile. * [loader/ldtlib.c] Add NetBSD system calls when compiled on that system. * [loader/selector.c] Use mmap(MAP_ANON, ...) for NetBSD. * [if1632/call.S] Fixed selector assumptions. Thu Sep 9 20:01:37 1993 David Metcalfe * [controls/WinButton*] [controls/button.c] [controls/widget.c] [windows/win.c] [windows/class.c] Added 3D button control and tied into CreateWindow() Thu Sep 9 07:35:24 1993 Scott Laird * [if1632/sound.spec] Created interface specification for SOUND DLL. * [if1632/win87em.spec] Added more functions to the WIN87EM DLL interface specification * [misc/emulate.c] Created stubs for the new math emulation functions. * [misc/sound.c] Created stubs for the SOUND DLL. Sun Sep 5 21:02:10 1993 John Burton * [if1632/kernel.spec] Added interface specifications for OpenFile, _lclose, _lread, _lopen, and _lwrite. * [include/windows.h] Added OF_ macros * [misc/file.c] Implemented OpenFile, _lclose, _lread, _lopen and _lwrite. Fri Sep 3 18:47:03 1993 Alexandre Julliard * [windows/dc.c] Bug fix * [objects/text.c] Bug fix Fri Sep 3 18:47:03 1993 Bob Amstadt * [objects/linedda.c] Finished LineDDA().
209 lines
5.8 KiB
C
209 lines
5.8 KiB
C
/************************************************************************
|
|
* FILE.C Copyright (C) 1993 John Burton
|
|
*
|
|
* File I/O routines for the Linux Wine Project.
|
|
*
|
|
* There are two main parts to this module - first there are the
|
|
* actual emulation functions, and secondly a routine for translating
|
|
* DOS filenames into UNIX style filenames.
|
|
*
|
|
* For each DOS drive letter, we need to store the location in the unix
|
|
* file system to map that drive to, and the current directory for that
|
|
* drive.
|
|
*
|
|
* Finally we need to store the current drive letter in this module.
|
|
*
|
|
* WARNING : Many options of OpenFile are not yet implemeted.
|
|
*
|
|
*
|
|
************************************************************************/
|
|
|
|
#include <windows.h>
|
|
#include <assert.h>
|
|
#include <stdio.h>
|
|
#include <fcntl.h>
|
|
#include <string.h>
|
|
#include <limits.h>
|
|
|
|
/***************************************************************************
|
|
This structure stores the infomation needed for a single DOS drive
|
|
***************************************************************************/
|
|
struct DosDriveStruct
|
|
{
|
|
char RootDirectory [256]; /* Unix base for this drive letter */
|
|
char CurrentDirectory [256]; /* Current directory for this drive */
|
|
};
|
|
|
|
/***************************************************************************
|
|
Table for DOS drives
|
|
***************************************************************************/
|
|
struct DosDriveStruct DosDrives[] =
|
|
{
|
|
{"/mnt/floppy1" , ""},
|
|
{"/mnt/floppy2" , ""},
|
|
{"/mnt/HardDisk", "/wine"},
|
|
{"" , "/wine/Wine"}
|
|
};
|
|
|
|
#define NUM_DRIVES (sizeof (DosDrives) / sizeof (struct DosDriveStruct))
|
|
|
|
|
|
/**************************************************************************
|
|
Global variable to store current drive letter (0 = A, 1 = B etc)
|
|
**************************************************************************/
|
|
int CurrentDrive = 2;
|
|
|
|
/**************************************************************************
|
|
ParseDOSFileName
|
|
|
|
Return a fully specified DOS filename with the disk letter separated from
|
|
the path information.
|
|
**************************************************************************/
|
|
void ParseDOSFileName (char *UnixFileName, char *DosFileName, int *Drive)
|
|
{
|
|
int character;
|
|
|
|
for (character = 0; character < strlen(DosFileName); character++)
|
|
{
|
|
if (DosFileName[character] == '\\')
|
|
DosFileName[character] = '/';
|
|
}
|
|
|
|
|
|
if (DosFileName[1] == ':')
|
|
{
|
|
*Drive = DosFileName[0] - 'A';
|
|
if (*Drive > 26)
|
|
*Drive = *Drive - 'a' + 'A';
|
|
DosFileName = DosFileName + 2;
|
|
}
|
|
else
|
|
*Drive = CurrentDrive;
|
|
|
|
if (DosFileName[0] == '/')
|
|
{
|
|
strcpy (UnixFileName, DosDrives[*Drive].RootDirectory);
|
|
strcat (UnixFileName, DosFileName);
|
|
return;
|
|
}
|
|
|
|
strcpy (UnixFileName, DosDrives[*Drive].RootDirectory);
|
|
strcat (UnixFileName, DosDrives[*Drive].CurrentDirectory);
|
|
strcat (UnixFileName, "/");
|
|
strcat (UnixFileName, DosFileName);
|
|
return;
|
|
}
|
|
|
|
|
|
/***************************************************************************
|
|
_lopen
|
|
|
|
Emulate the _lopen windows call
|
|
***************************************************************************/
|
|
WORD KERNEL__lopen (LPSTR lpPathName, WORD iReadWrite)
|
|
{
|
|
char UnixFileName[256];
|
|
int Drive;
|
|
int handle;
|
|
|
|
ParseDOSFileName (UnixFileName, lpPathName, &Drive);
|
|
|
|
|
|
|
|
handle = open (UnixFileName, iReadWrite);
|
|
|
|
#ifdef DEBUG_FILE
|
|
fprintf (stderr, "_lopen: %s (Handle = %d)\n", UnixFileName, handle);
|
|
#endif
|
|
return handle;
|
|
}
|
|
|
|
/***************************************************************************
|
|
_lread
|
|
***************************************************************************/
|
|
WORD KERNEL__lread (WORD hFile, LPSTR lpBuffer, WORD wBytes)
|
|
{
|
|
int result;
|
|
|
|
result = read (hFile, lpBuffer, wBytes);
|
|
#ifdef DEBUG_FILE
|
|
fprintf(stderr, "_lread: hFile = %d, lpBuffer = %s, wBytes = %d\n",
|
|
hFile, lpBuffer, wBytes);
|
|
#endif
|
|
return result;
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
_lwrite
|
|
****************************************************************************/
|
|
WORD KERNEL__lwrite (WORD hFile, LPSTR lpBuffer, WORD wBytes)
|
|
{
|
|
#ifdef DEBUG_FILE
|
|
fprintf(stderr, "_lwrite: hFile = %d, lpBuffer = %s, wBytes = %d\n",
|
|
hFile, lpBuffer, wBytes);
|
|
#endif
|
|
return write (hFile, lpBuffer, wBytes);
|
|
}
|
|
|
|
/***************************************************************************
|
|
_lclose
|
|
***************************************************************************/
|
|
WORD KERNEL__lclose (WORD hFile)
|
|
{
|
|
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;
|
|
|
|
fprintf(stderr,"Openfile(%s,<struct>,%d) ",lpFileName,wStyle);
|
|
|
|
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<OPEN_MAX) ? wNumber : OPEN_MAX);
|
|
}
|
|
|
|
|
|
|
|
|
|
|