merge the formfield patch from ooo-build
[ooovba.git] / basic / source / runtime / wnt.asm
blobb4d1bd15d2ede3c242ee38c3155a0da65f5a6856
1 ;*************************************************************************
3 ; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 ;
5 ; Copyright 2008 by Sun Microsystems, Inc.
7 ; OpenOffice.org - a multi-platform office productivity suite
9 ; $RCSfile: wnt.asm,v $
11 ; $Revision: 1.4 $
13 ; This file is part of OpenOffice.org.
15 ; OpenOffice.org is free software: you can redistribute it and/or modify
16 ; it under the terms of the GNU Lesser General Public License version 3
17 ; only, as published by the Free Software Foundation.
19 ; OpenOffice.org is distributed in the hope that it will be useful,
20 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
21 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 ; GNU Lesser General Public License version 3 for more details
23 ; (a copy is included in the LICENSE file that accompanied this code).
25 ; You should have received a copy of the GNU Lesser General Public License
26 ; version 3 along with OpenOffice.org. If not, see
27 ; <http://www.openoffice.org/license.html>
28 ; for a copy of the LGPLv3 License.
30 ;*************************************************************************
32 ; Anmerkungen
33 ; Direktaufruf von C- und PASCAL-Routinen, Windows und OS/2
35 ; Inhalt:
36 ; type = CallXXX (far *pProc, char *pStack, short nStack)
38 ; Kopie des Basic-Stacks (nStack Bytes) auf den C-Stack
39 ; und Aufruf der Prozedur.
41 .386
43 _TEXT SEGMENT DWORD PUBLIC 'CODE' USE32
45 ASSUME CS:_TEXT
47 PUBLIC _CallINT@12
48 PUBLIC _CallLNG@12
49 PUBLIC _CallDBL@12
50 PUBLIC _CallSTR@12
51 PUBLIC _CallFIX@12
53 _CallINT@12 LABEL byte
54 _CallLNG@12 LABEL byte
55 _CallDBL@12 LABEL byte
56 _CallSTR@12 LABEL byte
58 _CallFIX@12: PUSH EBP
59 MOV EBP,ESP
60 PUSH ESI
61 PUSH EDI
63 PUSH ECX
64 PUSH EDX
66 MOV DX,DS
67 MOVZX EAX,WORD PTR [EBP+16] ; EAX == nStack
68 SUB ESP,EAX ; Stack um nStack Bytes vergroessern
69 MOV EDI,ESP
70 MOV AX,SS
71 MOV ES,AX ; ES:EDI = Startadresse des fuer
72 ; Parameter reservierten Stackbereichs
73 MOV ESI,[EBP+12] ; DS:ESI == pStack
75 MOVZX ECX,WORD PTR [EBP+16] ; ECX == nStack
76 SHR ECX,1
77 CLD
78 JCXZ $1
79 REP MOVSW ; Stack uebernehmen
80 $1: MOV DS,DX
81 CALL DWORD PTR [EBP+8] ; Aufruf der Prozedur
82 ; CLI ; unter NT nicht erlaubt (privileged instruction)
83 MOV ESP,EBP
84 SUB ESP,16 ; wegen gepushter Register
85 ; (ESI, EDI)
86 ; STI
87 POP EDX
88 POP ECX
89 POP EDI
90 POP ESI
91 POP EBP
92 RET 12
94 _TEXT ENDS
96 END