aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIOhannes m zmölnig <zmoelnig@users.sourceforge.net>2007-11-10 17:45:38 +0000
committerIOhannes m zmölnig <zmoelnig@users.sourceforge.net>2007-11-10 17:45:38 +0000
commit0a00fa0d27971967797f2d93398af129b7471847 (patch)
tree92073c2a9501d096dc4d8e1e64c10b1b4887df6e
parentfa3d10953e68379bfc96a86347bd177629f3e8a0 (diff)
dos2unix
svn path=/trunk/externals/zexy/; revision=8977
-rw-r--r--src/winNT_portio.c254
1 files changed, 127 insertions, 127 deletions
diff --git a/src/winNT_portio.c b/src/winNT_portio.c
index f06b997..83fe89e 100644
--- a/src/winNT_portio.c
+++ b/src/winNT_portio.c
@@ -1,127 +1,127 @@
-/*
- * this is a wrapper for the cor port i/o functions for WinNT/2000/XP.
- * this is to be replaced by some functions that are platform/interface
- * specific to access the data lines.
- * for now, this is only for parport access, but in future there will be a way
- * to plug this on the usb bus.
- * if the interface changes, only this file has to be adopted for the target system
- */
-#if defined __WIN32__ && defined Z_WANT_LPT
-
-#include <stdio.h>
-#include <windows.h>
-
-int read_parport(int port);
-void write_parport(int port, int value);
-int open_port(int port);
-
-static BOOL bPrivException = FALSE;
-
-int read_parport(int port)
-{
- // byte = _inp((unsigned short)port);
- unsigned char value;
-#ifdef _MSC_VER
- __asm mov edx,port
- __asm in al,dx
- __asm mov value,al
-#else
- // hmm, i should read some documentation about inline assembler
- post("lpt: cannot read from parport (recompile!)");
- return 0;
-#endif
- return (int)value;
-}
-
-void write_parport(int port, int invalue)
-{
- // _outp((unsigned short)port, value);
- BYTE value = (BYTE)invalue;
-#ifdef _MSC_VER
- __asm mov edx,port
- __asm mov al,value
- __asm out dx,al
-#else
- // hmm, i should read some documentation about inline assembler
- // and probably about assembler in general...
- post("lpt: cannot write to parport (recompile!)");
- /*
- asm(
- "mov %%edx,%0\n"
- "mov %%al,%1\n"
- "out %%dx,%%al\n"
- :
- : "a"(port),"b"(value)
- );
- */
-#endif
-}
-
-static LONG WINAPI HandlerExceptionFilter ( EXCEPTION_POINTERS *pExPtrs )
-{
-
- if (pExPtrs->ExceptionRecord->ExceptionCode == EXCEPTION_PRIV_INSTRUCTION)
- {
- pExPtrs->ContextRecord->Eip ++; // Skip the OUT or IN instruction that caused the exception
- bPrivException = TRUE;
- return EXCEPTION_CONTINUE_EXECUTION;
- }
- else
- return EXCEPTION_CONTINUE_SEARCH;
-}
-
-static BOOL StartUpIoPorts(UINT PortToAccess, BOOL bShowMessageBox, HWND hParentWnd)
-{
- HANDLE hUserPort;
-
- hUserPort = CreateFile("\\\\.\\UserPort", GENERIC_READ, 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
- CloseHandle(hUserPort); // Activate the driver
- Sleep(100); // We must make a process switch
-
- SetUnhandledExceptionFilter(HandlerExceptionFilter);
-
- bPrivException = FALSE;
- read_parport(PortToAccess); // Try to access the given port address
-
- if (bPrivException)
- {
- if (bShowMessageBox)
- {
-#if 0
- MessageBox(hParentWnd,"Privileged instruction exception has occured!\r\n\r\n"
- "To use this external under Windows NT, 2000 or XP\r\n"
- "you need to install the driver 'UserPort.sys' and grant\r\n"
- "access to the ports used by this program.\r\n\r\n"
- "See the file README for further information!\r\n", NULL, MB_OK);
-#endif
- }
- return FALSE;
- }
- return TRUE;
-}
- /* check if we are running NT/2k/XP */
-static int IsWinNT(void)
-{
- OSVERSIONINFO OSVersionInfo;
- OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
-
- GetVersionEx(&OSVersionInfo);
-
- return OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT;
-}
-
- /* open parport */
-int open_port(int port)
-{
- if(IsWinNT()) /* we are under NT and need kernel driver */
- {
- if(StartUpIoPorts(port, 1, 0))
- return(0);
- return(-1);
- }
- else /* no need to use kernel driver */
- {
- return(0);
- }
-}
-#endif /* __WIN32__ & Z_WANT_LPT */
+/*
+ * this is a wrapper for the cor port i/o functions for WinNT/2000/XP.
+ * this is to be replaced by some functions that are platform/interface
+ * specific to access the data lines.
+ * for now, this is only for parport access, but in future there will be a way
+ * to plug this on the usb bus.
+ * if the interface changes, only this file has to be adopted for the target system
+ */
+#if defined __WIN32__ && defined Z_WANT_LPT
+
+#include <stdio.h>
+#include <windows.h>
+
+int read_parport(int port);
+void write_parport(int port, int value);
+int open_port(int port);
+
+static BOOL bPrivException = FALSE;
+
+int read_parport(int port)
+{
+ // byte = _inp((unsigned short)port);
+ unsigned char value;
+#ifdef _MSC_VER
+ __asm mov edx,port
+ __asm in al,dx
+ __asm mov value,al
+#else
+ // hmm, i should read some documentation about inline assembler
+ post("lpt: cannot read from parport (recompile!)");
+ return 0;
+#endif
+ return (int)value;
+}
+
+void write_parport(int port, int invalue)
+{
+ // _outp((unsigned short)port, value);
+ BYTE value = (BYTE)invalue;
+#ifdef _MSC_VER
+ __asm mov edx,port
+ __asm mov al,value
+ __asm out dx,al
+#else
+ // hmm, i should read some documentation about inline assembler
+ // and probably about assembler in general...
+ post("lpt: cannot write to parport (recompile!)");
+ /*
+ asm(
+ "mov %%edx,%0\n"
+ "mov %%al,%1\n"
+ "out %%dx,%%al\n"
+ :
+ : "a"(port),"b"(value)
+ );
+ */
+#endif
+}
+
+static LONG WINAPI HandlerExceptionFilter ( EXCEPTION_POINTERS *pExPtrs )
+{
+
+ if (pExPtrs->ExceptionRecord->ExceptionCode == EXCEPTION_PRIV_INSTRUCTION)
+ {
+ pExPtrs->ContextRecord->Eip ++; // Skip the OUT or IN instruction that caused the exception
+ bPrivException = TRUE;
+ return EXCEPTION_CONTINUE_EXECUTION;
+ }
+ else
+ return EXCEPTION_CONTINUE_SEARCH;
+}
+
+static BOOL StartUpIoPorts(UINT PortToAccess, BOOL bShowMessageBox, HWND hParentWnd)
+{
+ HANDLE hUserPort;
+
+ hUserPort = CreateFile("\\\\.\\UserPort", GENERIC_READ, 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+ CloseHandle(hUserPort); // Activate the driver
+ Sleep(100); // We must make a process switch
+
+ SetUnhandledExceptionFilter(HandlerExceptionFilter);
+
+ bPrivException = FALSE;
+ read_parport(PortToAccess); // Try to access the given port address
+
+ if (bPrivException)
+ {
+ if (bShowMessageBox)
+ {
+#if 0
+ MessageBox(hParentWnd,"Privileged instruction exception has occured!\r\n\r\n"
+ "To use this external under Windows NT, 2000 or XP\r\n"
+ "you need to install the driver 'UserPort.sys' and grant\r\n"
+ "access to the ports used by this program.\r\n\r\n"
+ "See the file README for further information!\r\n", NULL, MB_OK);
+#endif
+ }
+ return FALSE;
+ }
+ return TRUE;
+}
+ /* check if we are running NT/2k/XP */
+static int IsWinNT(void)
+{
+ OSVERSIONINFO OSVersionInfo;
+ OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+
+ GetVersionEx(&OSVersionInfo);
+
+ return OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT;
+}
+
+ /* open parport */
+int open_port(int port)
+{
+ if(IsWinNT()) /* we are under NT and need kernel driver */
+ {
+ if(StartUpIoPorts(port, 1, 0))
+ return(0);
+ return(-1);
+ }
+ else /* no need to use kernel driver */
+ {
+ return(0);
+ }
+}
+#endif /* __WIN32__ & Z_WANT_LPT */