// ************************************************** // PROGRAMAÇÃO DE SOFTWARE BÁSICO // Paralela2.cpp // Exemplo de programa de acesso à porta paralela. // Este programa foi testado com o compilador G++, // tanto em ambiente Windows quanto em Linux. // ************************************************** #include #ifdef WIN32 // compila para o Windows #include #include // para glibc #else // compila para Linux #include // para glibc #endif using namespace std; #ifdef WIN32 //what does these typedefs do??? typedef short (_stdcall *inpfuncPtr)(short portaddr); typedef void (_stdcall *oupfuncPtr)(short portaddr, short datum); HINSTANCE hLib; inpfuncPtr inp32fp; oupfuncPtr oup32fp; #endif void testaParalela() { #ifdef WIN32 hLib = LoadLibrary("inpout32.dll"); if (hLib != NULL) { cout << "DLL carregada com sucesso !!!" << endl; } else { cout << "Problemas ao carregar a DLL !!!" << endl; cout << "Encerrando aplicação..." << endl; exit(1); } inp32fp = (inpfuncPtr) GetProcAddress(hLib, "Inp32"); if (inp32fp != NULL) { cout << "Função 'Inp32' encontrada !" << endl; } else { cout << "Problemas para obter o endereço da função 'Inp32'..." << endl; cout << "Encerrando aplicação..." << endl; exit(1); } oup32fp = (oupfuncPtr) GetProcAddress(hLib, "Out32"); if (oup32fp != NULL) { cout << "Função 'Out32' encontrada !" << endl; } else { cout << "Problemas para obter o endereço da função 'Out32'..." << endl; cout << "Encerrando aplicação..." << endl; exit(1); } #else if(ioperm(0x378, 3, 1) == 0) // Liberando 3 portas: 0x378, 0x379 e 0x37A { cout << "Permissão de portas concedida!!!" << endl; } else { cout << "Problemas ao liberar portas..." << endl; cout << "Encerrando aplicação..." << endl; exit(1); } #endif } short Inp32 (short portaddr) { #ifdef WIN32 return (inp32fp)(portaddr); #else return inb(portaddr); #endif } void Out32 (short portaddr, short datum) { #ifdef WIN32 (oup32fp)(portaddr,datum); #else outb(datum, portaddr); #endif } int main(void) { char c; cout << "Iniciando...." << endl; testaParalela(); cout << "Pressione qualquer tecla para continuar..." << endl; cin.get(c); Out32(0x378,10); do { cout << Inp32(0x379) << endl ; } while (1); #ifdef WIN32 FreeLibrary(hLib); #endif return 0; }