[Vm-dev] [commit] r2521 - Add Bochs plugin makefiles for win32.
commits at squeakvm.org
commits at squeakvm.org
Thu Dec 1 22:12:33 UTC 2011
Author: eliot
Date: 2011-12-01 14:12:32 -0800 (Thu, 01 Dec 2011)
New Revision: 2521
Added:
trunk/platforms/win32/plugins/BochsIA32Plugin/
trunk/platforms/win32/plugins/BochsIA32Plugin/Makefile
Modified:
trunk/platforms/win32/plugins/FilePlugin/sqWin32FilePrims.c
Log:
Add Bochs plugin makefiles for win32.
Add console stdio support for win32.
Added: trunk/platforms/win32/plugins/BochsIA32Plugin/Makefile
===================================================================
--- trunk/platforms/win32/plugins/BochsIA32Plugin/Makefile (rev 0)
+++ trunk/platforms/win32/plugins/BochsIA32Plugin/Makefile 2011-12-01 22:12:32 UTC (rev 2521)
@@ -0,0 +1,24 @@
+DLLTOOLEXTRA := $(PLATDIR)/../processors/IA32/winbochs/cpu/libcpu.a \
+ $(PLATDIR)/../processors/IA32/winbochs/fpu/libfpu.a \
+ $(PLATDIR)/../processors/IA32/winbochs/disasm/libdisasm.a
+DLLWRAPEXTRA := $(DLLTOOLEXTRA)
+
+LINK_WITH_GPP := yes
+EXTRALIBS:= -L../../../processors/IA32/winbochs/cpu \
+ -L../../../processors/IA32/winbochs/fpu \
+ -L../../../processors/IA32/winbochs/disasm \
+ -lcpu -lfpu -ldisasm
+
+include ../../Makefile.plugin
+
+CXXINCLUDES:= -I$(PLATDIR)/../processors/IA32/winbochs \
+ -I$(PLATDIR)/../processors/IA32/bochs \
+ -I$(PLATDIR)/../processors/IA32/bochs/instrument/stubs
+
+CXXFLAGS:= -m32 -mno-cygwin -DWIN32 -msse2 -ggdb2 -mwindows -mthreads -mwin32 \
+ -mno-rtd -mms-bitfields -mno-accumulate-outgoing-args
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(CXXINCLUDES) $<
+
+CXX:=g++
Modified: trunk/platforms/win32/plugins/FilePlugin/sqWin32FilePrims.c
===================================================================
--- trunk/platforms/win32/plugins/FilePlugin/sqWin32FilePrims.c 2011-12-01 22:10:33 UTC (rev 2520)
+++ trunk/platforms/win32/plugins/FilePlugin/sqWin32FilePrims.c 2011-12-01 22:12:32 UTC (rev 2521)
@@ -80,7 +80,11 @@
sqInt sqFileAtEnd(SQFile *f) {
win32FileOffset ofs;
/* Return true if the file's read/write head is at the end of the file. */
- if (!sqFileValid(f)) FAIL();
+ if (!sqFileValid(f))
+ FAIL();
+ /* If a stdio handle then assume not at end. */
+ if (f->isStdioStream)
+ return 0;
ofs.offset = 0;
ofs.dwLow = SetFilePointer(FILE_HANDLE(f), 0, &ofs.dwHigh, FILE_CURRENT);
return ofs.offset >= sqFileSize(f);
@@ -89,8 +93,10 @@
sqInt sqFileClose(SQFile *f) {
/* Close the given file. */
- if (!sqFileValid(f)) FAIL();
- if(!CloseHandle(FILE_HANDLE(f))) FAIL();
+ if (!sqFileValid(f))
+ FAIL();
+ if(!CloseHandle(FILE_HANDLE(f)))
+ FAIL();
RemoveHandleFromTable(win32Files, FILE_HANDLE(f));
f->file = NULL;
f->sessionID = 0;
@@ -103,18 +109,22 @@
int sz;
/* convert the file name into a null-terminated C string */
sz = MultiByteToWideChar(CP_UTF8, 0, fileNameIndex, fileNameSize, NULL, 0);
- if(sz > MAX_PATH) FAIL();
+ if(sz > MAX_PATH)
+ FAIL();
MultiByteToWideChar(CP_UTF8, 0, fileNameIndex, fileNameSize, win32Path, sz);
win32Path[sz] = 0;
- if(hasCaseSensitiveDuplicate(win32Path)) FAIL();
- if(!DeleteFileW(win32Path)) FAIL();
+ if(hasCaseSensitiveDuplicate(win32Path))
+ FAIL();
+ if(!DeleteFileW(win32Path))
+ FAIL();
return 1;
}
squeakFileOffsetType sqFileGetPosition(SQFile *f) {
win32FileOffset ofs;
/* Return the current position of the file's read/write head. */
- if (!sqFileValid(f)) FAIL();
+ if (!sqFileValid(f))
+ FAIL();
ofs.offset = 0;
ofs.dwLow = SetFilePointer(FILE_HANDLE(f), 0, &ofs.dwHigh, FILE_CURRENT);
return ofs.offset;
@@ -152,7 +162,8 @@
/* convert the file name into a null-terminated C string */
sz = MultiByteToWideChar(CP_UTF8, 0, fileNameIndex, fileNameSize, NULL, 0);
- if(sz > MAX_PATH) FAIL();
+ if(sz > MAX_PATH)
+ FAIL();
MultiByteToWideChar(CP_UTF8, 0, fileNameIndex, fileNameSize, win32Path, sz);
win32Path[sz] = 0;
@@ -192,12 +203,14 @@
sqInt
sqFileStdioHandlesInto(SQFile files[3])
{
+ DWORD mode;
+
files[0].sessionID = thisSession;
files[0].file = GetStdHandle(STD_INPUT_HANDLE);
files[0].fileSize = 0;
files[0].writable = false;
files[0].lastOp = 0; /* unused on win32 */
- files[0].isStdioStream = 1;
+ files[0].isStdioStream = GetConsoleMode(files[0].file, &mode) != 0;
AddHandleToTable(win32Files, files[0].file);
files[1].sessionID = thisSession;
@@ -205,7 +218,7 @@
files[1].fileSize = 0;
files[1].writable = true;
files[1].lastOp = 0; /* unused on win32 */
- files[1].isStdioStream = 1;
+ files[1].isStdioStream = GetConsoleMode(files[1].file, &mode) != 0;
AddHandleToTable(win32Files, files[1].file);
files[2].sessionID = thisSession;
@@ -213,7 +226,7 @@
files[2].fileSize = 0;
files[2].writable = true;
files[2].lastOp = 0; /* unused on win32 */
- files[2].isStdioStream = 1;
+ files[2].isStdioStream = GetConsoleMode(files[2].file, &mode) != 0;
AddHandleToTable(win32Files, files[2].file);
return 7;
@@ -228,8 +241,14 @@
*/
DWORD dwReallyRead;
- if (!sqFileValid(f)) FAIL();
- ReadFile(FILE_HANDLE(f), (LPVOID) (byteArrayIndex+startIndex), count, &dwReallyRead, NULL);
+ if (!sqFileValid(f))
+ FAIL();
+ if (f->isStdioStream)
+ ReadConsole(FILE_HANDLE(f), (LPVOID) (byteArrayIndex+startIndex), count,
+ &dwReallyRead, NULL);
+ else
+ ReadFile(FILE_HANDLE(f), (LPVOID) (byteArrayIndex+startIndex), count,
+ &dwReallyRead, NULL);
return (int)dwReallyRead;
}
@@ -241,18 +260,22 @@
/* convert the file name into a null-terminated C string */
sz = MultiByteToWideChar(CP_UTF8, 0, oldNameIndex, oldNameSize, NULL,0);
- if(sz > MAX_PATH) FAIL();
+ if(sz > MAX_PATH)
+ FAIL();
MultiByteToWideChar(CP_UTF8, 0, oldNameIndex, oldNameSize, oldPath, sz);
oldPath[sz] = 0;
/* convert the file name into a null-terminated C string */
sz = MultiByteToWideChar(CP_UTF8, 0, newNameIndex, newNameSize, NULL,0);
- if(sz > MAX_PATH) FAIL();
+ if(sz > MAX_PATH)
+ FAIL();
MultiByteToWideChar(CP_UTF8, 0, newNameIndex, newNameSize, newPath, sz);
newPath[sz] = 0;
- if(hasCaseSensitiveDuplicate(oldPath)) FAIL();
- if(!MoveFileW(oldPath, newPath)) FAIL();
+ if(hasCaseSensitiveDuplicate(oldPath))
+ FAIL();
+ if(!MoveFileW(oldPath, newPath))
+ FAIL();
return 1;
}
@@ -261,7 +284,8 @@
win32FileOffset ofs;
ofs.offset = position;
/* Set the file's read/write head to the given position. */
- if (!sqFileValid(f)) FAIL();
+ if (!sqFileValid(f))
+ FAIL();
SetFilePointer(FILE_HANDLE(f), ofs.dwLow, &ofs.dwHigh, FILE_BEGIN);
return 1;
}
@@ -269,14 +293,16 @@
squeakFileOffsetType sqFileSize(SQFile *f) {
/* Return the length of the given file. */
win32FileOffset ofs;
- if (!sqFileValid(f)) FAIL();
+ if (!sqFileValid(f))
+ FAIL();
ofs.offset = 0;
ofs.dwLow = GetFileSize(FILE_HANDLE(f), &ofs.dwHigh);
return ofs.offset;
}
sqInt sqFileFlush(SQFile *f) {
- if (!sqFileValid(f)) FAIL();
+ if (!sqFileValid(f))
+ FAIL();
/* note: ignores the return value in case of read-only access */
FlushFileBuffers(FILE_HANDLE(f));
return 1;
@@ -285,7 +311,8 @@
sqInt sqFileTruncate(SQFile *f, squeakFileOffsetType offset) {
win32FileOffset ofs;
ofs.offset = offset;
- if (!sqFileValid(f)) FAIL();
+ if (!sqFileValid(f))
+ FAIL();
SetFilePointer(FILE_HANDLE(f), ofs.dwLow, &ofs.dwHigh, FILE_BEGIN);
if(!SetEndOfFile(FILE_HANDLE(f))) return 0;
return 1;
@@ -308,11 +335,16 @@
*/
DWORD dwReallyWritten;
win32FileOffset ofs;
- if (!(sqFileValid(f) && f->writable)) FAIL();
+ if (!(sqFileValid(f) && f->writable))
+ FAIL();
- WriteFile(FILE_HANDLE(f), (LPVOID) (byteArrayIndex + startIndex), count, &dwReallyWritten, NULL);
+ if (f->isStdioStream)
+ WriteConsole(FILE_HANDLE(f), (LPVOID) (byteArrayIndex + startIndex), count, &dwReallyWritten, NULL);
+ else
+ WriteFile(FILE_HANDLE(f), (LPVOID) (byteArrayIndex + startIndex), count, &dwReallyWritten, NULL);
- if ((int)dwReallyWritten != count) FAIL();
+ if ((int)dwReallyWritten != count)
+ FAIL();
return (int) dwReallyWritten;
}
@@ -342,7 +374,8 @@
}
/* convert the file name into a null-terminated C string */
sz = MultiByteToWideChar(CP_UTF8, 0, fileName, -1, NULL,0);
- if(sz > MAX_PATH) FAIL();
+ if(sz > MAX_PATH)
+ FAIL();
MultiByteToWideChar(CP_UTF8, 0, fileName, -1, win32Path, sz);
win32Path[sz] = 0;
More information about the Vm-dev
mailing list