Was genau macht die Funktion
-
Hallo!
Ich habe auf www.pronix.de einen Quellcode zum auslesen des Druckerports unter DOS gefunden. Ich werde aber aus der Funktion zum auslesen nicht ganz schlau...
Könnte mir mal jemand bitte erklären, was die UND-Verknüpfung soll? Würde mir echt helfen...#include <stdio.h> #include <stdlib.h> #include <dos.h> /*0x378 ist die Adresse der Schnittstelle von LPT1*/ #define LPT1_PORT 0x378 struct status { unsigned :3; /*Bit 0-2 nicht verwendet*/ unsigned fehler :1; /*0=Druckerfehler*/ unsigned online :1; /*1=Drucker online*/ unsigned papier :1; /*1=kein Papier*/ unsigned empfang:1; /*Emfangsbestätigung*/ unsigned busy :1; /*Drucker bereit*/ }LPT1_status; /*Status am LPT1-Port auslesen*/ void druckerstatus(char *statuszeiger) { *statuszeiger = inp( LPT1_PORT+1 ) & 0xF8; /* was soll die Verknüpfung?? */ } int main() { druckerstatus( (char *) &LPT1_status); if(LPT1_status.busy && LPT1_status.online) { printf("Drucker ist bereit!\n"); exit (0); } else if(!LPT1_status.online) printf("Drucker nicht online!\n"); else if(LPT1_status.papier) printf("Kein Papier vorhanden!\n"); else printf("Drucker ist nicht bereit!\n"); return 0; }
Danke im voraus, Bernd
-
Die (Bitweise) UndVerknüpfung sorgt dafür, dass du im Ergebnis nur die gesetzten Bits hast, die du nicht ausmaskierst hast.
Bsp:
Du hast eine Statusvariable mit 8 Bits, interressierst dich aber nur für den Status der beiden Bits, die ganz rechts stehen:unsigned char byTest = byStatus & 3;
Jetzt haben in byTest alle Bits bis auf die letzten beiden 0.
Und die letzten beiden wurden von dem Statusbyte übernommen.Also du kannst jetzt wesentlich einfacher die 4 möglichen Zustände abfragen, da du ja nur die 2 Bit testen musst.
Achja, in deinem Bsp. wird nur der Status der 5 Bit ganz links übernommen, die 3 Bits ganz rechts werden ausmaskiert.
Hoffe, das war jetzt nicht zu verwirrend