Code: Alles auswählen
Global *inp.l, *out.l
#iodll$ = "INPOUT32.DLL"
#dreg = 0 ;Offset Datenregister
#sreg = 1 ;Offset Statusregister
#creg = 2 ;Offset Controlregister
#addr1 = $378 ;Adresse LPT1
#addr2 = $278 ;Adresse LPT2
#addr3 = $3E8 ;Adresse LPT3, manchmal auch anders
Procedure SetParData(reg.l, outwert.l) ;Daten an Port senden
If *out <> 0
CallFunctionFast(*out, reg, outwert) ;Senden an Port
EndIf
EndProcedure
Procedure.l GetParData(reg.l) ;Daten von Port holen
If *inp <> 0
inwert.l = CallFunctionFast(*inp, reg) ;Lesen von Port
Else
inwert.l = #False
EndIf
ProcedureReturn inwert
EndProcedure
If OpenLibrary(#dIDinpout, ppfd.s + #iodll$)
*out = GetFunction(#dIDinpout, "Out32")
*inp = GetFunction(#dIDinpout, "Inp32")
If Not(*out And *inp)
CloseLibrary(#dIDinpout)
MessageRequester("Port Error", "Function not found: " + #iodll$, #PB_MessageRequester_Ok)
EndIf
Else
MessageRequester("Port Error", "File not found: " + #iodll$, #PB_MessageRequester_Ok)
EndIf
SetParData(#addr1 + #dreg, wert) ;Daten setzen
wert.l = GetParData(#addr1 + #dreg) ;Daten lesen
Das Control-Bit 5 muss auf low gesetzt sein, sonst wird der Port als Eingang verwendet und reagiert nicht.
Viel Spass
Sven