WinAPIFunction.st
author Claus Gittinger <cg@exept.de>
Thu, 09 Jun 2016 12:42:15 +0200
changeset 3903 5730e66fd49c
parent 1566 465a4de0e714
child 3907 3916d3edc89c
permissions -rw-r--r--
class: HTMLPrinterStream changed: #initialize lazy package dependency
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
659
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 1998 by eXept Software AG
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
              All Rights Reserved
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 hereby transferred.
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
ExternalFunction subclass:#WinAPIFunction
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
	instanceVariableNames:''
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	classVariableNames:''
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	poolDictionaries:''
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	category:'OS-Windows'
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
!
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!WinAPIFunction primitiveDefinitions!
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
%{
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
typedef WINAPI INT  (*WINAPI_INTFUNC)();
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
%}
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
! !
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
!WinAPIFunction class methodsFor:'documentation'!
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
copyright
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
"
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
 COPYRIGHT (c) 1998 by eXept Software AG
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
              All Rights Reserved
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
 This software is furnished under a license and may be used
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
 only in accordance with the terms of that license and with the
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
 inclusion of the above copyright notice.   This software may not
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
 be provided or otherwise made available to, or used by, any
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
 other person.  No title to or ownership of the software is
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
 hereby transferred.
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
"
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
!
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
documentation
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
"
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    WIN32 only:
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
    Experimental class representing external (non-Smalltalk) WINAPI functions.
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    These will provide the same functionality and protocol as
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    regular externalFunctions, but use a different calling convention.
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    Warning: under construction.
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
    [author:]
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
        Claus Gittinger
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    [see also:]
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
        ExternalAddress ExternalBytes
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
"
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
! !
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
!WinAPIFunction methodsFor:'function calling'!
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
call
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    "call the underlying C function, passing no argument.
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
     The return value is interpreted as an integer 
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
     (and must be converted to an externalBytes object,
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
      if it is a pointer to something).
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
     DANGER alert: This is an unprotected low-level entry.
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
     Not for normal application usage.
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    "
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
%{
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    WINAPI_INTFUNC func;
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    INT retVal;
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
660
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
    80
    func = (WINAPI_INTFUNC) __INST(code_);
659
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    if (func) {
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
        retVal = (*func)();
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
        RETURN (__MKINT(retVal));
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
    }
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
%}.
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
    self primitiveFailed
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    "Created: / 18.6.1998 / 18:01:28 / cg"
660
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
    89
    "Modified: / 18.6.1998 / 18:04:48 / cg"
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
    90
!
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
    91
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
    92
callWith:arg
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
    93
    "call the underlying C function, passing a single argument.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
    94
     The argument arg is converted to a corresponding C data type,
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
    95
     as defined in the convertST_to_C() function.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
    96
     The return value is interpreted as an integer 
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
    97
     (and must be converted to an externalBytes object,
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
    98
      if it is a pointer to something).
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
    99
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   100
     DANGER alert: This is an unprotected low-level entry.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   101
     Not for normal application usage.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   102
    "
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   103
%{
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   104
    WINAPI_INTFUNC func;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   105
    INT retVal;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   106
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   107
    func = (WINAPI_INTFUNC) __INST(code_);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   108
    if (func) {
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   109
        retVal = (*func)(convertST_to_C(arg));
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   110
        RETURN (__MKINT(retVal));
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   111
    }
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   112
%}.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   113
    self primitiveFailed
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   114
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   115
    "Created: / 18.6.1998 / 18:04:30 / cg"
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   116
    "Modified: / 18.6.1998 / 18:04:53 / cg"
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   117
!
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   118
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   119
callWith:arg1 with:arg2
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   120
    "call the underlying C function, passing two args.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   121
     The arguments are converted to a corresponding C data type,
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   122
     as defined in the convertST_to_C() function.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   123
     The return value is interpreted as an integer 
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   124
     (and must be converted to an externalBytes object,
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   125
      if it is a pointer to something).
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   126
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   127
     DANGER alert: This is an unprotected low-level entry.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   128
     Not for normal application usage.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   129
    "
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   130
%{
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   131
    WINAPI_INTFUNC func;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   132
    INT retVal;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   133
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   134
    func = (WINAPI_INTFUNC) __INST(code_);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   135
    if (func) {
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   136
        retVal = (*func)(convertST_to_C(arg1), convertST_to_C(arg2));
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   137
        RETURN (__MKINT(retVal));
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   138
    }
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   139
%}.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   140
    self primitiveFailed
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   141
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   142
    "Created: / 18.6.1998 / 18:05:07 / cg"
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   143
!
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   144
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   145
callWith:arg1 with:arg2 with:arg3
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   146
    "call the underlying C function, passing three args.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   147
     The arguments are converted to a corresponding C data type,
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   148
     as defined in the convertST_to_C() function.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   149
     The return value is interpreted as an integer 
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   150
     (and must be converted to an externalBytes object,
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   151
      if it is a pointer to something).
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   152
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   153
     DANGER alert: This is an unprotected low-level entry.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   154
     Not for normal application usage.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   155
    "
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   156
%{
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   157
    WINAPI_INTFUNC func;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   158
    INT retVal;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   159
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   160
    func = (WINAPI_INTFUNC) __INST(code_);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   161
    if (func) {
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   162
        retVal = (*func)(convertST_to_C(arg1), convertST_to_C(arg2), convertST_to_C(arg3));
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   163
        RETURN (__MKINT(retVal));
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   164
    }
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   165
%}.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   166
    self primitiveFailed
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   167
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   168
    "Created: / 18.6.1998 / 18:05:18 / cg"
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   169
!
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   170
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   171
callWithArguments:argArray
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   172
    "call the underlying C function, passing up to 10 arguments.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   173
     The arguments are converted to a corresponding C data type,
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   174
     as defined in the convertST_to_C() function.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   175
     The return value is interpreted as an integer 
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   176
     (and must be converted to an externalBytes object,
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   177
      if it is a pointer to something).
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   178
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   179
     DANGER alert: This is an unprotected low-level entry.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   180
     Not for normal application usage.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   181
    "
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   182
%{
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   183
    WINAPI_INTFUNC func;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   184
#   define NUMARGS 10
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   185
    INT args[NUMARGS];
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   186
    INT retVal;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   187
    OBJ *ap;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   188
    INT convertST_to_C();
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   189
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   190
    func = (WINAPI_INTFUNC) __INST(code_);
1566
465a4de0e714 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 660
diff changeset
   191
    if (func && __isArrayLike(argArray)) {
660
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   192
        int n = __arraySize(argArray);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   193
        int i;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   194
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   195
        if (n <= 10) {
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   196
            ap = __ArrayInstPtr(argArray)->a_element;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   197
            for (i=0; i<NUMARGS; i++) {
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   198
                args[i] = convertST_to_C(*ap++);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   199
            }
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   200
        }
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   201
        switch (n) {
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   202
            case 0:
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   203
                retVal = (*func)();
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   204
                break;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   205
            case 1:
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   206
                retVal = (*func)(args[0]);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   207
                break;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   208
            case 2:
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   209
                retVal = (*func)(args[0], args[1]);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   210
                break;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   211
            case 3:
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   212
                retVal = (*func)(args[0], args[1], args[2]);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   213
                break;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   214
            case 4:
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   215
                retVal = (*func)(args[0], args[1], args[2], args[3]);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   216
                break;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   217
            case 5:
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   218
                retVal = (*func)(args[0], args[1], args[2], args[3],
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   219
                                 args[4]);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   220
                break;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   221
            case 6:
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   222
                retVal = (*func)(args[0], args[1], args[2], args[3],
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   223
                                 args[4], args[5]);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   224
                break;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   225
            case 7:
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   226
                retVal = (*func)(args[0], args[1], args[2], args[3],
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   227
                                 args[4], args[5], args[6]);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   228
                break;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   229
            case 8:
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   230
                retVal = (*func)(args[0], args[1], args[2], args[3],
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   231
                                 args[4], args[5], args[6], args[7]);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   232
                break;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   233
            case 9:
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   234
                retVal = (*func)(args[0], args[1], args[2], args[3],
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   235
                                 args[4], args[5], args[6], args[7],
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   236
                                 args[8]);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   237
                break;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   238
            case 10:
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   239
                retVal = (*func)(args[0], args[1], args[2], args[3],
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   240
                                 args[4], args[5], args[6], args[7],
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   241
                                 args[8], args[9]);
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   242
                break;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   243
            default:
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   244
                goto err;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   245
        }
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   246
        RETURN (__MKINT(retVal));
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   247
    }
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   248
  err: ;
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   249
%}.
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   250
    self primitiveFailed
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   251
738f8b4edcac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 659
diff changeset
   252
    "Created: / 18.6.1998 / 18:05:46 / cg"
659
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
! !
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
!WinAPIFunction class methodsFor:'documentation'!
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
version
1566
465a4de0e714 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 660
diff changeset
   258
    ^ '$Header: /cvs/stx/stx/libbasic2/WinAPIFunction.st,v 1.3 2005-07-13 14:22:19 cg Exp $'
659
c48a5b89ca8e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
! !