--- a/Win32OperatingSystem.st Fri Feb 03 17:32:35 2006 +0100
+++ b/Win32OperatingSystem.st Mon Feb 06 16:30:48 2006 +0100
@@ -79,6 +79,13 @@
privateIn:Win32OperatingSystem
!
+Win32OperatingSystem::Win32Handle subclass:#Win32TypeLibraryHandle
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:Win32OperatingSystem
+!
+
!Win32OperatingSystem primitiveDefinitions!
%{
@@ -96,6 +103,7 @@
# define NO_GETADAPTERSINFO
#endif
+#define WANT_OLE
#define USE_H_ERRNO
# if defined(i386) || defined(__i386__)
@@ -180,6 +188,7 @@
# undef Process
# include <stdarg.h> /* */
+
# ifndef WINDOWS_H_INCLUDED
# define WINDOWS_H_INCLUDED
# include <windows.h>
@@ -189,6 +198,13 @@
# include <iphlpapi.h>
# endif
+# ifdef WANT_OLE
+# ifndef OLEAUTO_H_INCLUDED
+# define OLEAUTO_H_INCLUDED
+# include <oleauto.h>
+# endif
+# endif
+
# if !defined(__BORLANDC__)
# undef stat
# define stat _stat
@@ -8737,18 +8753,18 @@
k := self key:'HKEY_CLASSES_ROOT\MIME\Database\Content Type\',mimeType.
k notNil ifTrue:[
- suffix := k valueNamed:'extension'.
- suffix notNil ifTrue:[
- ^ self executableForSuffix:suffix
- ].
+ suffix := k valueNamed:'extension'.
+ suffix notNil ifTrue:[
+ ^ self executableForSuffix:suffix
+ ].
].
- ^ nil
-
- "
- Win32OperatingSystem::RegistryEntry executableForMimeType:'application/pdf'
- Win32OperatingSystem::RegistryEntry executableForMimeType:'audio/mp3'
- Win32OperatingSystem::RegistryEntry executableForMimeType:'video/avi'
- Win32OperatingSystem::RegistryEntry executableForMimeType:'application/x-zip-compressed'
+ ^ nil
+
+ "
+ Win32OperatingSystem::RegistryEntry executableForMimeType:'application/pdf'
+ Win32OperatingSystem::RegistryEntry executableForMimeType:'audio/mp3'
+ Win32OperatingSystem::RegistryEntry executableForMimeType:'video/avi'
+ Win32OperatingSystem::RegistryEntry executableForMimeType:'application/x-zip-compressed'
"
!
@@ -8759,28 +8775,28 @@
suffix := suffixArg.
(suffix startsWith:'.') ifTrue:[
- suffix := suffix copyFrom:2
+ suffix := suffix copyFrom:2
].
k := self key:'HKEY_CLASSES_ROOT\.',suffix.
k notNil ifTrue:[
- fkey := (k valueNamed:'').
+ fkey := (k valueNamed:'').
].
fkey isNil ifTrue:[
- fkey := suffix,'_auto_file'
+ fkey := suffix,'_auto_file'
].
fkey notEmptyOrNil ifTrue:[
- k := Win32OperatingSystem::RegistryEntry key:('HKEY_CLASSES_ROOT\' , fkey , '\shell\open\command').
- k notNil ifTrue:[
- cmd := k valueNamed:''
- ].
+ k := Win32OperatingSystem::RegistryEntry key:('HKEY_CLASSES_ROOT\' , fkey , '\shell\open\command').
+ k notNil ifTrue:[
+ cmd := k valueNamed:''
+ ].
].
- ^ cmd
-
- "
- self executableForSuffix:'pdf'
- self executableForSuffix:'zip'
+ ^ cmd
+
+ "
+ self executableForSuffix:'pdf'
+ self executableForSuffix:'zip'
"
! !
@@ -9515,7 +9531,7 @@
!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.193 2006-02-03 15:30:07 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.194 2006-02-06 15:30:48 cg Exp $'
! !
!Win32OperatingSystem::Win32FILEHandle methodsFor:'release'!
@@ -9542,7 +9558,7 @@
!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.193 2006-02-03 15:30:07 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.194 2006-02-06 15:30:48 cg Exp $'
! !
!Win32OperatingSystem::Win32Handle methodsFor:'io'!
@@ -9924,6 +9940,120 @@
^ pid
! !
+!Win32OperatingSystem::Win32SerialPortHandle methodsFor:'setup'!
+
+baudRate:newRate
+%{
+ HANDLE port = (HANDLE)(__externalAddressVal(self));
+
+ if (port
+ && __isSmallInteger(newRate)) {
+ DCB dcb;
+
+ ZeroMemory(&dcb, sizeof(dcb));
+ dcb.DCBlength = sizeof(dcb);
+ GetCommState(port, &dcb);
+
+ dcb.BaudRate = __intVal(newRate);
+
+ if (! SetCommState(port, &dcb)) {
+ RETURN(false);
+ }
+ RETURN(true);
+ }
+%}.
+ self primitiveFailed.
+!
+
+dataBits:newNumberOfBits
+%{
+ HANDLE port = (HANDLE)(__externalAddressVal(self));
+
+ if (port
+ && __isSmallInteger(newNumberOfBits)) {
+ DCB dcb;
+
+ ZeroMemory(&dcb, sizeof(dcb));
+ dcb.DCBlength = sizeof(dcb);
+ GetCommState(port, &dcb);
+
+ dcb.ByteSize = __intVal(newNumberOfBits);
+
+ if (! SetCommState(port, &dcb)) {
+ RETURN(false);
+ }
+ RETURN(true);
+ }
+%}.
+ self primitiveFailed.
+!
+
+stopBitsType:newStopBitsSymbol
+ "newParityTypeSymbol must be one of #stop1, #stop2 or #stop1_5"
+%{
+ HANDLE port = (HANDLE)(__externalAddressVal(self));
+
+ if (port) {
+ DCB dcb;
+
+ ZeroMemory(&dcb, sizeof(dcb));
+ dcb.DCBlength = sizeof(dcb);
+ GetCommState(port, &dcb);
+
+ if (newStopBitsSymbol == @symbol(stop1)) {
+ dcb.Parity = 0 /* STOP1 */;
+ } else if (newStopBitsSymbol == @symbol(stop2)) {
+ dcb.Parity = 2 /* STOP2 */;
+ } else if (newStopBitsSymbol == @symbol(stop1_5)) {
+ dcb.Parity = 1 /* STOP1_5 */;
+ } else {
+ goto failure;
+ }
+
+ if (! SetCommState(port, &dcb)) {
+ RETURN(false);
+ }
+ RETURN(true);
+ }
+ failure: ;
+%}.
+ self primitiveFailed.
+!
+
+parityType:newParityTypeSymbol
+ "newParityTypeSymbol must be one of #odd, #even or #none (or nil)"
+
+%{
+ HANDLE port = (HANDLE)(__externalAddressVal(self));
+
+ if (port) {
+ DCB dcb;
+
+ ZeroMemory(&dcb, sizeof(dcb));
+ dcb.DCBlength = sizeof(dcb);
+ GetCommState(port, &dcb);
+
+
+ if ((newParityTypeSymbol == nil) || (newParityTypeSymbol == @symbol(none))) {
+ dcb.Parity = NOPARITY;
+ } else if (newParityTypeSymbol == @symbol(odd)) {
+ dcb.Parity = ODDPARITY;
+ } else if (newParityTypeSymbol == @symbol(even)) {
+ dcb.Parity = EVENPARITY;
+ } else {
+ goto failure;
+ }
+
+ if (! SetCommState(port, &dcb)) {
+ RETURN(false);
+ }
+ RETURN(true);
+ }
+ failure: ;
+%}.
+ self primitiveFailed.
+! !
+
!Win32OperatingSystem::Win32SerialPortHandle methodsFor:'opening'!
open:portName baudRate:baudRate stopBitsType:stopBitsType
@@ -10156,118 +10286,39 @@
%}.
! !
-!Win32OperatingSystem::Win32SerialPortHandle methodsFor:'setup'!
-
-baudRate:newRate
-%{
- HANDLE port = (HANDLE)(__externalAddressVal(self));
-
- if (port
- && __isSmallInteger(newRate)) {
- DCB dcb;
-
- ZeroMemory(&dcb, sizeof(dcb));
- dcb.DCBlength = sizeof(dcb);
- GetCommState(port, &dcb);
-
- dcb.BaudRate = __intVal(newRate);
-
- if (! SetCommState(port, &dcb)) {
- RETURN(false);
- }
- RETURN(true);
- }
-%}.
- self primitiveFailed.
-!
-
-dataBits:newNumberOfBits
-%{
- HANDLE port = (HANDLE)(__externalAddressVal(self));
-
- if (port
- && __isSmallInteger(newNumberOfBits)) {
- DCB dcb;
-
- ZeroMemory(&dcb, sizeof(dcb));
- dcb.DCBlength = sizeof(dcb);
- GetCommState(port, &dcb);
-
- dcb.ByteSize = __intVal(newNumberOfBits);
-
- if (! SetCommState(port, &dcb)) {
- RETURN(false);
- }
- RETURN(true);
- }
-%}.
- self primitiveFailed.
-!
-
-parityType:newParityTypeSymbol
- "newParityTypeSymbol must be one of #odd, #even or #none (or nil)"
-
+!Win32OperatingSystem::Win32TypeLibraryHandle class methodsFor:'instance creation'!
+
+loadTypeLib:pathName
+ |errorNumber newHandle|
%{
- HANDLE port = (HANDLE)(__externalAddressVal(self));
-
- if (port) {
- DCB dcb;
-
- ZeroMemory(&dcb, sizeof(dcb));
- dcb.DCBlength = sizeof(dcb);
- GetCommState(port, &dcb);
-
-
- if ((newParityTypeSymbol == nil) || (newParityTypeSymbol == @symbol(none))) {
- dcb.Parity = NOPARITY;
- } else if (newParityTypeSymbol == @symbol(odd)) {
- dcb.Parity = ODDPARITY;
- } else if (newParityTypeSymbol == @symbol(even)) {
- dcb.Parity = EVENPARITY;
+#ifdef WANT_OLE
+ if ( __isString(pathName) ) {
+ char *__pathName = __stringVal(pathName);
+ HANDLE hTypeLib = 0;
+ int rslt;
+
+ rslt = LoadTypeLib(__pathName, &hTypeLib);
+ fprintf(stderr, "rslt: %d handle: %x\n", rslt, hTypeLib);
+ if (hTypeLib) {
+ newHandle = __MKEXTERNALADDRESS(hTypeLib);
+ __qClass(newHandle) = self;
+ __STORE(newHandle, self);
} else {
- goto failure;
- }
-
- if (! SetCommState(port, &dcb)) {
- RETURN(false);
- }
- RETURN(true);
- }
- failure: ;
+ errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) );
+ }
+ }
+#endif /* WANT_OLE */
%}.
- self primitiveFailed.
-!
-
-stopBitsType:newStopBitsSymbol
- "newParityTypeSymbol must be one of #stop1, #stop2 or #stop1_5"
-%{
- HANDLE port = (HANDLE)(__externalAddressVal(self));
-
- if (port) {
- DCB dcb;
-
- ZeroMemory(&dcb, sizeof(dcb));
- dcb.DCBlength = sizeof(dcb);
- GetCommState(port, &dcb);
-
- if (newStopBitsSymbol == @symbol(stop1)) {
- dcb.Parity = 0 /* STOP1 */;
- } else if (newStopBitsSymbol == @symbol(stop2)) {
- dcb.Parity = 2 /* STOP2 */;
- } else if (newStopBitsSymbol == @symbol(stop1_5)) {
- dcb.Parity = 1 /* STOP1_5 */;
- } else {
- goto failure;
- }
-
- if (! SetCommState(port, &dcb)) {
- RETURN(false);
- }
- RETURN(true);
- }
- failure: ;
-%}.
- self primitiveFailed.
+ newHandle notNil ifTrue:[
+ Lobby register:newHandle.
+ ^ newHandle.
+ ].
+
+ errorNumber isNil ifTrue:[
+ self error:'invalid argument(s)'.
+ ] ifFalse:[
+ (OperatingSystem errorHolderForNumber:errorNumber) reportError
+ ].
! !
!Win32OperatingSystem::Win32SocketHandle class methodsFor:'constants'!
@@ -10908,7 +10959,7 @@
!Win32OperatingSystem class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.193 2006-02-03 15:30:07 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.194 2006-02-06 15:30:48 cg Exp $'
! !
Win32OperatingSystem initialize!