[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