; ; Command & Conquer Red Alert(tm) ; Copyright 2025 Electronic Arts Inc. ; ; This program is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 3 of the License, or ; (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program. If not, see . ; page ,132 ;Thunk Compiler Version 1.8 May 11 1995 13:16:19 ;File Compiled Tue Jan 23 15:12:09 1996 ;Command Line: C:\BIN\THUNK.EXE thipx.thk TITLE $thipx.asm .386 OPTION READONLY OPTION OLDSTRUCTS IFNDEF IS_16 IFNDEF IS_32 %out command line error: specify one of -DIS_16, -DIS_32 .err ENDIF ;IS_32 ENDIF ;IS_16 IFDEF IS_32 IFDEF IS_16 %out command line error: you can't specify both -DIS_16 and -DIS_32 .err ENDIF ;IS_16 ;************************* START OF 32-BIT CODE ************************* .model FLAT,STDCALL ;-- Import common flat thunk routines (in k32) externDef MapHInstLS :near32 externDef MapHInstLS_PN :near32 externDef MapHInstSL :near32 externDef MapHInstSL_PN :near32 externDef FT_Prolog :near32 externDef FT_Thunk :near32 externDef QT_Thunk :near32 externDef FT_Exit0 :near32 externDef FT_Exit4 :near32 externDef FT_Exit8 :near32 externDef FT_Exit12 :near32 externDef FT_Exit16 :near32 externDef FT_Exit20 :near32 externDef FT_Exit24 :near32 externDef FT_Exit28 :near32 externDef FT_Exit32 :near32 externDef FT_Exit36 :near32 externDef FT_Exit40 :near32 externDef FT_Exit44 :near32 externDef FT_Exit48 :near32 externDef FT_Exit52 :near32 externDef FT_Exit56 :near32 externDef SMapLS :near32 externDef SUnMapLS :near32 externDef SMapLS_IP_EBP_8 :near32 externDef SUnMapLS_IP_EBP_8 :near32 externDef SMapLS_IP_EBP_12 :near32 externDef SUnMapLS_IP_EBP_12 :near32 externDef SMapLS_IP_EBP_16 :near32 externDef SUnMapLS_IP_EBP_16 :near32 externDef SMapLS_IP_EBP_20 :near32 externDef SUnMapLS_IP_EBP_20 :near32 externDef SMapLS_IP_EBP_24 :near32 externDef SUnMapLS_IP_EBP_24 :near32 externDef SMapLS_IP_EBP_28 :near32 externDef SUnMapLS_IP_EBP_28 :near32 externDef SMapLS_IP_EBP_32 :near32 externDef SUnMapLS_IP_EBP_32 :near32 externDef SMapLS_IP_EBP_36 :near32 externDef SUnMapLS_IP_EBP_36 :near32 externDef SMapLS_IP_EBP_40 :near32 externDef SUnMapLS_IP_EBP_40 :near32 MapSL PROTO NEAR STDCALL p32:DWORD .code ;************************* COMMON PER-MODULE ROUTINES ************************* .data public thipx_ThunkData32 ;This symbol must be exported. thipx_ThunkData32 label dword dd 3130534ch ;Protocol 'LS01' dd 0a179h ;Checksum dd 0 ;Jump table address. dd 3130424ch ;'LB01' dd 0 ;Flags dd 0 ;Reserved (MUST BE 0) dd 0 ;Reserved (MUST BE 0) dd offset QT_Thunk_thipx - offset thipx_ThunkData32 dd offset FT_Prolog_thipx - offset thipx_ThunkData32 .code externDef ThunkConnect32@24:near32 public thipx_ThunkConnect32@16 thipx_ThunkConnect32@16: pop edx push offset thipx_ThkData16 push offset thipx_ThunkData32 push edx jmp ThunkConnect32@24 thipx_ThkData16 label byte db "thipx_ThunkData16",0 pfnQT_Thunk_thipx dd offset QT_Thunk_thipx pfnFT_Prolog_thipx dd offset FT_Prolog_thipx .data QT_Thunk_thipx label byte db 32 dup(0cch) ;Patch space. FT_Prolog_thipx label byte db 32 dup(0cch) ;Patch space. .code ;************************ START OF THUNK BODIES************************ ; public _IPX_Close_Socket95@4 _IPX_Close_Socket95@4: mov cl,3 jmp II_IPX_Close_Socket95@4 public _IPX_Initialise@4 _IPX_Initialise@4: mov cl,6 jmp II_IPX_Close_Socket95@4 public _IPX_Open_Socket95@4 _IPX_Open_Socket95@4: mov cl,4 ; _IPX_Close_Socket95(16) = _IPX_Close_Socket95(32) {} ; ; dword ptr [ebp+8]: param1 ; public II_IPX_Close_Socket95@4 II_IPX_Close_Socket95@4: push ebp mov ebp,esp push ecx sub esp,60 push word ptr [ebp+8] ;param1: dword->word call dword ptr [pfnQT_Thunk_thipx] cwde leave retn 4 ; public _IPX_Get_Connection_Number95@0 _IPX_Get_Connection_Number95@0: mov cl,2 jmp II_IPX_Get_Connection_Number95@0 public _IPX_Uninitialise@0 _IPX_Uninitialise@0: mov cl,5 ; _IPX_Get_Connection_Number95(16) = _IPX_Get_Connection_Number95(32) {} ; ; public II_IPX_Get_Connection_Number95@0 II_IPX_Get_Connection_Number95@0: push ebp mov ebp,esp push ecx sub esp,60 call dword ptr [pfnQT_Thunk_thipx] cwde leave retn ; public _IPX_Get_Internet_Address95@12 _IPX_Get_Internet_Address95@12: mov cl,1 ; _IPX_Get_Internet_Address95(16) = _IPX_Get_Internet_Address95(32) {} ; ; dword ptr [ebp+8]: param1 ; dword ptr [ebp+12]: netnum ; dword ptr [ebp+16]: node ; public II_IPX_Get_Internet_Address95@12 II_IPX_Get_Internet_Address95@12: push ebp mov ebp,esp push ecx sub esp,60 push word ptr [ebp+8] ;param1: dword->word call SMapLS_IP_EBP_12 push eax call SMapLS_IP_EBP_16 push eax call dword ptr [pfnQT_Thunk_thipx] cwde call SUnMapLS_IP_EBP_12 call SUnMapLS_IP_EBP_16 leave retn 12 ; public __IPX_Get_User_ID95@8 __IPX_Get_User_ID95@8: mov cl,0 ; __IPX_Get_User_ID95(16) = __IPX_Get_User_ID95(32) {} ; ; dword ptr [ebp+8]: param1 ; dword ptr [ebp+12]: user_id ; public II__IPX_Get_User_ID95@8 II__IPX_Get_User_ID95@8: push ebp mov ebp,esp push ecx sub esp,60 push word ptr [ebp+8] ;param1: dword->word call SMapLS_IP_EBP_12 push eax call dword ptr [pfnQT_Thunk_thipx] cwde call SUnMapLS_IP_EBP_12 leave retn 8 ELSE ;************************* START OF 16-BIT CODE ************************* OPTION SEGMENT:USE16 .model LARGE,PASCAL .code externDef __IPX_Get_User_ID95:far16 externDef _IPX_Get_Internet_Address95:far16 externDef _IPX_Get_Connection_Number95:far16 externDef _IPX_Close_Socket95:far16 externDef _IPX_Open_Socket95:far16 externDef _IPX_Uninitialise:far16 externDef _IPX_Initialise:far16 FT_thipxTargetTable label word dw offset __IPX_Get_User_ID95 dw seg __IPX_Get_User_ID95 dw offset _IPX_Get_Internet_Address95 dw seg _IPX_Get_Internet_Address95 dw offset _IPX_Get_Connection_Number95 dw seg _IPX_Get_Connection_Number95 dw offset _IPX_Close_Socket95 dw seg _IPX_Close_Socket95 dw offset _IPX_Open_Socket95 dw seg _IPX_Open_Socket95 dw offset _IPX_Uninitialise dw seg _IPX_Uninitialise dw offset _IPX_Initialise dw seg _IPX_Initialise .data public thipx_ThunkData16 ;This symbol must be exported. thipx_ThunkData16 dd 3130534ch ;Protocol 'LS01' dd 0a179h ;Checksum dw offset FT_thipxTargetTable dw seg FT_thipxTargetTable dd 0 ;First-time flag. .code externDef ThunkConnect16:far16 public thipx_ThunkConnect16 thipx_ThunkConnect16: pop ax pop dx push seg thipx_ThunkData16 push offset thipx_ThunkData16 push seg thipx_ThkData32 push offset thipx_ThkData32 push cs push dx push ax jmp ThunkConnect16 thipx_ThkData32 label byte db "thipx_ThunkData32",0 ENDIF END