diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/avp/decal.h | 2 | ||||
| -rw-r--r-- | src/avp/particle.h | 2 | ||||
| -rw-r--r-- | src/avp/stratdef.h | 2 | ||||
| -rw-r--r-- | src/avp/win95/frontend/avp_menudata.c | 2 | ||||
| -rw-r--r-- | src/avp/win95/pldnet.c | 183 | ||||
| -rw-r--r-- | src/avp/win95/scrshot.cpp | 94 | ||||
| -rw-r--r-- | src/fixer.h | 59 | ||||
| -rw-r--r-- | src/main.c | 50 | ||||
| -rw-r--r-- | src/net.c | 150 | ||||
| -rw-r--r-- | src/win95/shpanim.h | 2 | ||||
| -rw-r--r-- | src/win95/string.hpp | 2 | ||||
| -rw-r--r-- | src/winapi.c | 4 |
12 files changed, 295 insertions, 257 deletions
diff --git a/src/avp/decal.h b/src/avp/decal.h index 7e05f72..c0d6a78 100644 --- a/src/avp/decal.h +++ b/src/avp/decal.h @@ -114,4 +114,4 @@ extern int NumFixedDecals; extern int CurrentFixedDecalIndex; #define MAX_NO_OF_DECALS_PER_HIERARCHICAL_SECTION 16 -#endif
\ No newline at end of file +#endif diff --git a/src/avp/particle.h b/src/avp/particle.h index 6796ffe..f5ec688 100644 --- a/src/avp/particle.h +++ b/src/avp/particle.h @@ -198,4 +198,4 @@ extern void MakeElectricalExplosion(VECTORCH *positionPtr); #define MAX_NO_OF_BLOOD_PARTICLES 500 extern int NumberOfBloodParticles; -#endif
\ No newline at end of file +#endif diff --git a/src/avp/stratdef.h b/src/avp/stratdef.h index f1b54c8..67360a7 100644 --- a/src/avp/stratdef.h +++ b/src/avp/stratdef.h @@ -296,4 +296,4 @@ extern STRATEGYBLOCK *ActiveStBlockList[]; #endif -#endif
\ No newline at end of file +#endif diff --git a/src/avp/win95/frontend/avp_menudata.c b/src/avp/win95/frontend/avp_menudata.c index bdc4d44..c2b391e 100644 --- a/src/avp/win95/frontend/avp_menudata.c +++ b/src/avp/win95/frontend/avp_menudata.c @@ -18,7 +18,7 @@ #include "detaillevels.h" #include "cd_player.h" -#define MPLAYER_SUPPORT 1 +#define MPLAYER_SUPPORT 0 #define MAX_MULTIPLAYER_NAME_LENGTH 10 diff --git a/src/avp/win95/pldnet.c b/src/avp/win95/pldnet.c index 9394267..9222819 100644 --- a/src/avp/win95/pldnet.c +++ b/src/avp/win95/pldnet.c @@ -48,184 +48,11 @@ #define DB_LEVEL 3 #include "db.h" - -/* This is stuff I added to get this file to compile for the Linux port */ -#include <ctype.h> - -DPID AVPDPNetID; -int QuickStartMultiplayer=1; - -typedef struct DPNAME -{ - int dwSize; - - char *lpszShortNameA; - char *lpszLongNameA; -} DPNAME; -DPNAME AVPDPplayerName; - -#define DP_OK 0 - -typedef int HRESULT; - -int glpDP; /* directplay object */ - -#define DPRECEIVE_ALL 1 -#define DPSYS_ADDPLAYERTOGROUP 2 -#define DPSYS_CREATEPLAYERORGROUP 3 -#define DPPLAYERTYPE_PLAYER 4 -#define DPSYS_DELETEPLAYERFROMGROUP 5 -#define DPSYS_HOST 6 -#define DPSYS_SESSIONLOST 7 -#define DPSYS_SETPLAYERORGROUPDATA 8 -#define DPSYS_SETPLAYERORGROUPNAME 9 -#define DPEXT_HEADER_SIZE 10 -#define DPERR_BUSY 11 -#define DPERR_CONNECTIONLOST 12 -#define DPERR_INVALIDPARAMS 13 -#define DPERR_INVALIDPLAYER 14 -#define DPERR_NOTLOGGEDIN 15 -#define DPERR_SENDTOOBIG 16 -#define DPERR_BUFFERTOOSMALL 17 -#define DPID_SYSMSG 18 -#define DPSYS_DESTROYPLAYERORGROUP 19 -#define DPID_ALLPLAYERS 20 - -typedef struct LPDPMSG_GENERIC -{ - int dwType; -} DPMSG_GENERIC; -typedef DPMSG_GENERIC * LPDPMSG_GENERIC; - -typedef struct LPDPMSG_CREATEPLAYERORGROUP -{ - int dwType; - - DPID dpId; - int dwPlayerType; - - DPNAME dpnName; -} DPMSG_CREATEPLAYERORGROUP; -typedef DPMSG_CREATEPLAYERORGROUP * LPDPMSG_CREATEPLAYERORGROUP; - -typedef struct LPDPMSG_DESTROYPLAYERORGROUP -{ - int dwType; - - DPID dpId; - int dwPlayerType; -} DPMSG_DESTROYPLAYERORGROUP; -typedef DPMSG_DESTROYPLAYERORGROUP * LPDPMSG_DESTROYPLAYERORGROUP; - -BOOL DpExtInit(DWORD cGrntdBufs, DWORD cBytesPerBuf, BOOL bErrChcks) -{ - fprintf(stderr, "DpExtInit(%d, %d, %d)\n", cGrntdBufs, cBytesPerBuf, bErrChcks); - - return FALSE; -} - -void DpExtUnInit() -{ - fprintf(stderr, "DpExtUnInit()\n"); -} - -HRESULT DpExtRecv(int lpDP2A, void *lpidFrom, void *lpidTo, DWORD dwFlags, void *lplpData, LPDWORD lpdwDataSize) -{ - fprintf(stderr, "DpExtRecv(%d, %p, %p, %d, %p, %p)\n", lpDP2A, lpidFrom, lpidTo, dwFlags, lplpData, lpdwDataSize); - - return 1; -} - -HRESULT DpExtSend(int lpDP2A, DPID idFrom, DPID idTo, DWORD dwFlags, void *lpData, DWORD dwDataSize) -{ - fprintf(stderr, "DpExtSend(%d, %d, %d, %d, %p, %d)\n", lpDP2A, idFrom, idTo, dwFlags, lpData, dwDataSize); - - return 1; -} - -/* directplay.c */ -int DirectPlay_ConnectingToLobbiedGame(char* playerName) -{ - fprintf(stderr, "DirectPlay_ConnectingToLobbiedGame(%s)\n", playerName); - - return 0; -} - -int DirectPlay_ConnectingToSession() -{ - fprintf(stderr, "DirectPlay_ConnectingToSession()\n"); - - return 0; -} - -BOOL DirectPlay_UpdateSessionList(int *SelectedItem) -{ - fprintf(stderr, "DirectPlay_UpdateSessionList(%p)\n", SelectedItem); - - return 0; -} - -int DirectPlay_JoinGame() -{ - fprintf(stderr, "DirectPlay_JoinGame()\n"); - - return 0; -} - -void DirectPlay_EnumConnections() -{ - fprintf(stderr, "DirectPlay_EnumConnections()\n"); -} - -int DirectPlay_HostGame(char *playerName, char *sessionName,int species,int gamestyle,int level) -{ - extern int DetermineAvailableCharacterTypes(int); - - int maxPlayers=DetermineAvailableCharacterTypes(FALSE); - if(maxPlayers<1) maxPlayers=1; - if(maxPlayers>8) maxPlayers=8; - - if(!netGameData.skirmishMode) { - fprintf(stderr, "DirectPlay_HostGame(%s, %s, %d, %d, %d)\n", playerName, sessionName, species, gamestyle, level); - } else { - //fake multiplayer - //need to set the id to an non zero value - AVPDPNetID=100; - - memset(&AVPDPplayerName, 0, sizeof(AVPDPplayerName)); - AVPDPplayerName.dwSize = sizeof(DPNAME); - AVPDPplayerName.lpszShortNameA = playerName; - AVPDPplayerName.lpszLongNameA = playerName; - } - - InitAVPNetGameForHost(species,gamestyle,level); - - return 1; -} - -int DirectPlay_ConnectToSession(int sessionNumber, char *playerName) -{ - fprintf(stderr, "DirectPlay_ConnectToSession(%d, %s)\n", sessionNumber, playerName); - - return 0; -} - -int DirectPlay_Disconnect() -{ - fprintf(stderr, "DirectPlay_Disconnect()\n"); - - return 1; -} - -HRESULT IDirectPlayX_GetPlayerName(int glpDP, DPID id, void *data, void *size) -{ - fprintf(stderr, "IDirectPlayX_GetPlayerName(%d, %d, %p, %p)\n", glpDP, id, data, size); - - return 1; -} - -/* End of Linux-related junk */ - +/* in net.c */ +extern DPID AVPDPNetID; +extern int QuickStartMultiplayer; +extern DPNAME AVPDPplayerName; +extern int glpDP; #define CalculateBytesSentPerSecond 0 diff --git a/src/avp/win95/scrshot.cpp b/src/avp/win95/scrshot.cpp index cbc7d6b..0299fa4 100644 --- a/src/avp/win95/scrshot.cpp +++ b/src/avp/win95/scrshot.cpp @@ -8,11 +8,10 @@ #include "gamedef.h" #include "ourasert.h" #include "frontend/avp_menus.h" + extern "C"{ -// extern DDPIXELFORMAT DisplayPixelFormat; extern SCREENDESCRIPTORBLOCK ScreenDescriptorBlock; extern int VideoModeTypeScreen; - extern long BackBufferPitch; extern unsigned char *ScreenBuffer; extern unsigned char TestPalette[]; extern unsigned char KeyboardInput[]; @@ -94,12 +93,22 @@ void HandleScreenShot() #endif } - + +extern "C" { +unsigned char *GetScreenShot24(int *width, int *height); +}; + void ScreenShot() { int i; char Name[40]; - strcpy(Name,"AVP"); + + int width, height; + unsigned char *buf = GetScreenShot24(&width, &height); + if (buf == NULL) + return; + + strcpy(Name,"avp"); int length=strlen(Name); strncpy(&Name[length],"00.bmp",8); for(i=0;i<100;i++) @@ -109,13 +118,12 @@ void ScreenShot() FILE* tempfp=fopen(Name,"r"); if(!tempfp)break; else - { + { fclose(tempfp); } } if(i==100) return; - FILE * fp = fopen(Name,"wb"); if (!fp) { @@ -139,8 +147,8 @@ void ScreenShot() h.Pm2Info.Size = 0; h.WinInfo.Size = 40; - h.WinInfo.Width = ScreenDescriptorBlock.SDB_Width; - h.WinInfo.Height = ScreenDescriptorBlock.SDB_Height; + h.WinInfo.Width = width; + h.WinInfo.Height = height; h.WinInfo.Planes = 1; h.WinInfo.BitCount = 24; h.WinInfo.Compression = 0; @@ -176,76 +184,26 @@ void ScreenShot() PutDword(h.WinInfo.ClrUsed, fp); PutDword(h.WinInfo.ClrImportant, fp); - - int red_shift,red_scale,green_shift,green_scale,blue_shift,blue_scale; - if(VideoModeTypeScreen==VideoModeType_15) - { - fprintf(stderr, "ScreenShot: VideoModeTypeScreen==VideoModeType_15\n"); -/* - int m; - for (red_shift = 0, m = DisplayPixelFormat.dwRBitMask; - !(m & 1); red_shift++, m >>= 1); - red_scale=255/m; - - for (green_shift = 0, m = DisplayPixelFormat.dwGBitMask; - !(m & 1); green_shift++, m >>= 1); - green_scale=255/m; - - for (blue_shift = 0, m = DisplayPixelFormat.dwBBitMask; - !(m & 1); blue_shift++, m >>= 1); - blue_scale=255/m; -*/ - } - // write 24 bit image - LockSurfaceAndGetBufferPointer(); - unsigned char* BufferPtr=ScreenBuffer+BackBufferPitch*(h.WinInfo.Height-1); +// unsigned char *BufferPtr = &buf[(width * 3) * (height - 1)]; + unsigned char *BufferPtr = &buf[0]; for (i=h.WinInfo.Height-1; i>=0; --i) { int j; - if(VideoModeTypeScreen==VideoModeType_8) + for (j=0; j<h.WinInfo.Width; ++j) { - for (j=0; j<h.WinInfo.Width; ++j) - { - PutByte((BYTE)TestPalette[BufferPtr[j]*3+2]<<2,fp); //b - PutByte((BYTE)TestPalette[BufferPtr[j]*3+1]<<2,fp); //g - PutByte((BYTE)TestPalette[BufferPtr[j]*3]<<2,fp); //r - } - } - else if(VideoModeTypeScreen==VideoModeType_15) - { - short colour; - for (j=0; j<h.WinInfo.Width; ++j) - { - colour=*(short*)&BufferPtr[j*2]; - - fprintf(stderr, "ScreenShot: VideoModeTypeScreen==VideoModeType_15\n"); -/* - PutByte((BYTE)(((colour & DisplayPixelFormat.dwBBitMask)>>blue_shift)*blue_scale),fp); //b - PutByte((BYTE)(((colour & DisplayPixelFormat.dwGBitMask)>>green_shift)*green_scale),fp); //g - PutByte((BYTE)(((colour & DisplayPixelFormat.dwRBitMask)>>red_shift)*red_scale),fp); //r -*/ - } + PutByte((BYTE)BufferPtr[j*3+2],fp); //b + PutByte((BYTE)BufferPtr[j*3+1],fp); //g + PutByte((BYTE)BufferPtr[j*3],fp); //r } - else if(VideoModeTypeScreen==VideoModeType_24) - { - for (j=0; j<h.WinInfo.Width; ++j) - { - PutByte((BYTE)BufferPtr[j*3+2],fp); //b - PutByte((BYTE)BufferPtr[j*3+1],fp); //g - PutByte((BYTE)BufferPtr[j*3],fp); //r - } - } // pad to 4 byte boundary for (j=~(h.WinInfo.Width*3-1) & 3; j; --j) PutByte(0,fp); - BufferPtr-=BackBufferPitch; +// BufferPtr -= width * 3; + BufferPtr += width * 3; } - UnlockSurface(); - fclose(fp); - + free(buf); + fclose(fp); } - - diff --git a/src/fixer.h b/src/fixer.h index 3240cc5..522caaa 100644 --- a/src/fixer.h +++ b/src/fixer.h @@ -140,6 +140,65 @@ int SetEndOfFile(HANDLE file); unsigned int timeGetTime(); unsigned int GetTickCount(); +typedef struct DPNAME +{ + int dwSize; + + char *lpszShortNameA; + char *lpszLongNameA; +} DPNAME; + +#define DP_OK 0 + +typedef int HRESULT; + +#define DPRECEIVE_ALL 1 +#define DPSYS_ADDPLAYERTOGROUP 2 +#define DPSYS_CREATEPLAYERORGROUP 3 +#define DPPLAYERTYPE_PLAYER 4 +#define DPSYS_DELETEPLAYERFROMGROUP 5 +#define DPSYS_HOST 6 +#define DPSYS_SESSIONLOST 7 +#define DPSYS_SETPLAYERORGROUPDATA 8 +#define DPSYS_SETPLAYERORGROUPNAME 9 +#define DPEXT_HEADER_SIZE 10 +#define DPERR_BUSY 11 +#define DPERR_CONNECTIONLOST 12 +#define DPERR_INVALIDPARAMS 13 +#define DPERR_INVALIDPLAYER 14 +#define DPERR_NOTLOGGEDIN 15 +#define DPERR_SENDTOOBIG 16 +#define DPERR_BUFFERTOOSMALL 17 +#define DPID_SYSMSG 18 +#define DPSYS_DESTROYPLAYERORGROUP 19 +#define DPID_ALLPLAYERS 20 + +typedef struct DPMSG_GENERIC +{ + int dwType; +} DPMSG_GENERIC; +typedef DPMSG_GENERIC * LPDPMSG_GENERIC; + +typedef struct DPMSG_CREATEPLAYERORGROUP +{ + int dwType; + + DPID dpId; + int dwPlayerType; + + DPNAME dpnName; +} DPMSG_CREATEPLAYERORGROUP; +typedef DPMSG_CREATEPLAYERORGROUP * LPDPMSG_CREATEPLAYERORGROUP; + +typedef struct DPMSG_DESTROYPLAYERORGROUP +{ + int dwType; + + DPID dpId; + int dwPlayerType; +} DPMSG_DESTROYPLAYERORGROUP; +typedef DPMSG_DESTROYPLAYERORGROUP * LPDPMSG_DESTROYPLAYERORGROUP; + #ifdef __cplusplus }; #endif @@ -60,6 +60,31 @@ void ReadJoysticks() /* ** */ +unsigned char *GetScreenShot24(int *width, int *height) +{ + unsigned char *buf; + + if (surface == NULL) { + return NULL; + } + + buf = (unsigned char *)malloc(surface->w * surface->h * 3); + + if (surface->flags & SDL_OPENGL) { + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glReadPixels(0, 0, surface->w, surface->h, GL_RGB, GL_BYTE, buf); + } else { + fprintf(stderr, "GetScreenShot24: add software mode 16->24!\n"); + } + + *width = surface->w; + *height = surface->h; + + return buf; +} + +/* ** */ + PROCESSORTYPES ReadProcessorType() { return PType_PentiumMMX; @@ -219,6 +244,8 @@ int InitialiseWindowsSystem() return 0; } +static int GotPrintScn, HavePrintScn; + static int KeySymToKey(int keysym) { switch(keysym) { @@ -328,7 +355,7 @@ static int KeySymToKey(int keysym) case SDLK_COMMA: return KEY_COMMA; case SDLK_PERIOD: - return KEY_FSTOP; /* fstop? */ + return KEY_FSTOP; case SDLK_SPACE: return KEY_SPACE; @@ -553,10 +580,21 @@ void CheckForWindowsMessages() case SDL_MOUSEBUTTONUP: break; case SDL_KEYDOWN: - handle_keypress(KeySymToKey(event.key.keysym.sym), event.key.keysym.unicode, 1); + if (event.key.keysym.sym == SDLK_PRINT) { + if (HavePrintScn == 0) + GotPrintScn = 1; + HavePrintScn = 1; + } else { + handle_keypress(KeySymToKey(event.key.keysym.sym), event.key.keysym.unicode, 1); + } break; case SDL_KEYUP: - handle_keypress(KeySymToKey(event.key.keysym.sym), 0, 0); + if (event.key.keysym.sym == SDLK_PRINT) { + GotPrintScn = 0; + HavePrintScn = 0; + } else { + handle_keypress(KeySymToKey(event.key.keysym.sym), 0, 0); + } break; case SDL_QUIT: AvP.MainLoopRunning = 0; /* TODO */ @@ -616,7 +654,11 @@ void CheckForWindowsMessages() SDL_ShowCursor(0); } - /* ctrl-z for iconify window? */ + if (GotPrintScn) { + GotPrintScn = 0; + + ScreenShot(); + } } void InGameFlipBuffers() diff --git a/src/net.c b/src/net.c new file mode 100644 index 0000000..13809b3 --- /dev/null +++ b/src/net.c @@ -0,0 +1,150 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> + +#include <pthread.h> + +#include "fixer.h" + +#include "3dc.h" +#include "inline.h" +#include "module.h" +#include "stratdef.h" +#include "equipmnt.h" + +#include "pldnet.h" + + +DPID AVPDPNetID; +int QuickStartMultiplayer=1; +DPNAME AVPDPplayerName; +int glpDP; /* directplay object */ + +static pthread_t NetThread; +static pthread_mutex_t NetMutex; + +BOOL DpExtInit(DWORD cGrntdBufs, DWORD cBytesPerBuf, BOOL bErrChcks) +{ + fprintf(stderr, "DpExtInit(%d, %d, %d)\n", cGrntdBufs, cBytesPerBuf, bErrChcks); + + return TRUE; +} + +void DpExtUnInit() +{ + fprintf(stderr, "DpExtUnInit()\n"); +} + +HRESULT DpExtRecv(int lpDP2A, void *lpidFrom, void *lpidTo, DWORD dwFlags, void *lplpData, LPDWORD lpdwDataSize) +{ + fprintf(stderr, "DpExtRecv(%d, %p, %p, %d, %p, %p)\n", lpDP2A, lpidFrom, lpidTo, dwFlags, lplpData, lpdwDataSize); + + return 1; +} + +HRESULT DpExtSend(int lpDP2A, DPID idFrom, DPID idTo, DWORD dwFlags, void *lpData, DWORD dwDataSize) +{ + fprintf(stderr, "DpExtSend(%d, %d, %d, %d, %p, %d)\n", lpDP2A, idFrom, idTo, dwFlags, lpData, dwDataSize); + + return 1; +} + +/* directplay.c */ +int DirectPlay_ConnectingToLobbiedGame(char* playerName) +{ + fprintf(stderr, "DirectPlay_ConnectingToLobbiedGame(%s)\n", playerName); + + return 0; +} + +int DirectPlay_ConnectingToSession() +{ + fprintf(stderr, "DirectPlay_ConnectingToSession()\n"); + + return 0; +} + +BOOL DirectPlay_UpdateSessionList(int *SelectedItem) +{ + fprintf(stderr, "DirectPlay_UpdateSessionList(%p)\n", SelectedItem); + + return 0; +} + +int DirectPlay_JoinGame() +{ + fprintf(stderr, "DirectPlay_JoinGame()\n"); + + return 0; +} + +void DirectPlay_EnumConnections() +{ + fprintf(stderr, "DirectPlay_EnumConnections()\n"); + + netGameData.tcpip_available = 1; + netGameData.ipx_available = 0; + netGameData.modem_available = 0; + netGameData.serial_available = 0; +} + +int DirectPlay_HostGame(char *playerName, char *sessionName,int species,int gamestyle,int level) +{ + extern int DetermineAvailableCharacterTypes(int); + + int maxPlayers=DetermineAvailableCharacterTypes(FALSE); + if(maxPlayers<1) maxPlayers=1; + if(maxPlayers>8) maxPlayers=8; + + if(!netGameData.skirmishMode) { + fprintf(stderr, "DirectPlay_HostGame(%s, %s, %d, %d, %d)\n", playerName, sessionName, species, gamestyle, level); + + //fake multiplayer + //need to set the id to an non zero value + AVPDPNetID=100; + + memset(&AVPDPplayerName, 0, sizeof(AVPDPplayerName)); + AVPDPplayerName.dwSize = sizeof(DPNAME); + AVPDPplayerName.lpszShortNameA = playerName; + AVPDPplayerName.lpszLongNameA = playerName; + + glpDP = 1; + } else { + //fake multiplayer + //need to set the id to an non zero value + AVPDPNetID=100; + + memset(&AVPDPplayerName, 0, sizeof(AVPDPplayerName)); + AVPDPplayerName.dwSize = sizeof(DPNAME); + AVPDPplayerName.lpszShortNameA = playerName; + AVPDPplayerName.lpszLongNameA = playerName; + } + + InitAVPNetGameForHost(species,gamestyle,level); + + return 1; +} + +int DirectPlay_ConnectToSession(int sessionNumber, char *playerName) +{ + fprintf(stderr, "DirectPlay_ConnectToSession(%d, %s)\n", sessionNumber, playerName); + + return 0; +} + +int DirectPlay_Disconnect() +{ + fprintf(stderr, "DirectPlay_Disconnect()\n"); + + return 1; +} + +HRESULT IDirectPlayX_GetPlayerName(int glpDP, DPID id, void *data, void *size) +{ + fprintf(stderr, "IDirectPlayX_GetPlayerName(%d, %d, %p, %p)\n", glpDP, id, data, size); + + return 1; +} + +/* End of Linux-related junk */ diff --git a/src/win95/shpanim.h b/src/win95/shpanim.h index 869cc41..1722c18 100644 --- a/src/win95/shpanim.h +++ b/src/win95/shpanim.h @@ -198,4 +198,4 @@ void CopyAnimationFrameToShape (SHAPEANIMATIONCONTROLDATA *sacd, struct displayb #endif -#endif
\ No newline at end of file +#endif diff --git a/src/win95/string.hpp b/src/win95/string.hpp index 71f7558..9994a67 100644 --- a/src/win95/string.hpp +++ b/src/win95/string.hpp @@ -180,4 +180,4 @@ inline int valid(String const & str) #endif -#endif
\ No newline at end of file +#endif diff --git a/src/winapi.c b/src/winapi.c index fb4687f..f812cf1 100644 --- a/src/winapi.c +++ b/src/winapi.c @@ -45,8 +45,10 @@ HANDLE CreateFile(const char *file, int mode, int x, int y, int flags, int flags exit(EXIT_FAILURE); } fd = open(file, O_RDONLY); - if (fd == -1) + if (fd == -1) { + perror("CreateFile"); return INVALID_HANDLE_VALUE; + } break; case GENERIC_WRITE: if (flags != CREATE_ALWAYS) { |
