BOOL PCMCIA_Get_WD_handle(HANDLE *phWD) { WD_VERSION ver; *phWD = WD_Open(); if (*phWD==INVALID_HANDLE_VALUE) { printf("Failed opening " WD_PROD_NAME " device\n"); return FALSE; } BZERO(ver); WD_Version(*phWD,&ver); if (ver.dwVer<WD_VER) { printf("Incorrect " WD_PROD_NAME " version\n"); WD_Close (*phWD); *phWD = INVALID_HANDLE_VALUE; return FALSE; } return TRUE; }
// Function: LPT_Open() // Register an ISA card to enable working with it. // The handle returned from this function is used by most of the functions in this file. // Parameters: // phLPT [out] returns the handle to the opened card. // Return Value: // TRUE if the card was opened successfully. FALSE if there were any errors. BOOL LPT_Open (LPT_HANDLE *phLPT) { LPT_HANDLE hLPT = (LPT_HANDLE)malloc(sizeof(LPT_STRUCT)); WD_VERSION ver; DWORD dwStatus; *phLPT = NULL; LPT_ErrorString[0] = '\0'; if (!hLPT) { sprintf(LPT_ErrorString, "Failed allocating memory\n"); return FALSE; } BZERO(*hLPT); dwStatus = LPT_RegisterWinDriver(); if (dwStatus) { sprintf(LPT_ErrorString, "Failed registering WinDriver license\n"); goto Exit; } hLPT->hWD = WD_Open(); // Verify that the handle is valid and that the version number is correct if (hLPT->hWD==INVALID_HANDLE_VALUE) { sprintf(LPT_ErrorString, "Failed opening WinDriver device\n"); goto Exit; } BZERO(ver); WD_Version(hLPT->hWD,&ver); if (ver.dwVer<WD_VER) { sprintf(LPT_ErrorString, "Incorrect WinDriver version. Expected %d.%02d, got %ld.%02ld\n", WD_VER/100, WD_VER, ver.dwVer/100, ver.dwVer); goto Exit; } LPT_SetCardElements(hLPT); hLPT->cardReg.fCheckLockOnly = FALSE; dwStatus = WD_CardRegister(hLPT->hWD, &hLPT->cardReg); if (dwStatus) { sprintf(LPT_ErrorString, "Failed locking device. Status 0x%lx - %s\n", dwStatus, Stat2Str(dwStatus)); goto Exit; } BZERO (hLPT->IntA); hLPT->IntA.Int.hInterrupt = hLPT->cardReg.Card.Item[LPT_IntA].I.Int.hInterrupt; hLPT->IntA.Int.dwOptions = hLPT->cardReg.Card.Item[LPT_IntA].I.Int.dwOptions; // LPT_Open() was successful *phLPT = hLPT; return TRUE; Exit: // An error occured during the execution of LPT_Open() if (hLPT->cardReg.hCard) WD_CardUnregister(hLPT->hWD, &hLPT->cardReg); if (hLPT->hWD!=INVALID_HANDLE_VALUE) WD_Close(hLPT->hWD); free (hLPT); return FALSE; }