/* DAn Williams Aug 14 2004 Demo of parallel port access and controll. uses inpout.dll Enjoy. Code Modified by James Marcelin November 20, 2008 */ #include <conio.h> #include <stdio.h> #include <windows.h>
/* definitions on what port is what base address depends, so use this */ #define LPT1 0x378 #define LPT2 0x278 #define LPT3 0x3BC
/* register offsets */ #define DATA 0 #define STATUS 1 #define CONTROLL 2
#define BASE_ADDRESS LPT1 /* this is the address we use (modify here if you need to) */
typedef short (__stdcall *INP32)(short PortAddress); typedef void (__stdcall *OUT32)(short PortAddress, short Data);
int main(void) {
short value; HINSTANCE hLib; INP32 Inp32; OUT32 Out32; /******************** LIBRARY INIT ***********************/ if ((hLib = LoadLibrary(TEXT("inpout32.dll"))) == NULL) { printf("Unable to load inpout32.dll, did you copy it to the system folder?\n"); return 0; } if ((Inp32 = (INP32)GetProcAddress(hLib, "Inp32")) == NULL) { printf("Unable to establish handle to input function.\n"); return 0; } if ((Out32 = (OUT32)GetProcAddress(hLib, "Out32")) == NULL) { printf("Unable to establish handle to output function.\n"); return 0; }
/*********************** MAIN CODE **************************/
// Write to the data register value = 0x55; printf("Writing 0x%2X to port 0x%X...\n" ,value ,BASE_ADDRESS ); Out32( BASE_ADDRESS , value ); // Read it back value = Inp32(BASE_ADDRESS); printf("\n(Reading) Port %04X = %04X\n", BASE_ADDRESS, value);
// Now use a different value value = 0xAA; printf("\nWriting 0x%2X to port 0x%X...\n" ,value ,BASE_ADDRESS ); Out32(BASE_ADDRESS, value);
// Read it back value = Inp32(BASE_ADDRESS); printf("\n(Reading) Port %04X = %04X\n\n", BASE_ADDRESS, value);
/******************** CLEANUP ******************************/
// GO FREEE LITTLE LIBRARIES!, GO FREEEEE!!! FreeLibrary(hLib);
// were done. printf("Press any key to exit.\n"); _getch();
return 1; }
|