16-11-2000, 21:32
Hi,
folgendes Programm macht überhaupt nicht das, was es soll. Es gibt nichtmal den printf in der 3. Zeile aus, es passiert eigentlich überhaupt nichts. Ich kann noch tippen und enter drücken, das steht dann auch toll da aber mehr nicht. Unter Windows klappts einwandfrei. Schauts euch mal an, die Nuß (wenns denn eine ist):
Danke, Sion
<pre>
//allgemeine Bibliotheken
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
//nur Windows zum Testen
#if defined(_WIN32)
#include <io.h>
void set_pin(int i) {(i);};
void clear_pin(int i) {(i);};
void usleep(int i) {(i);};
int pin_init_user(int i) {return 0;};
void pin_output_mode(int i) {(i);};
#define LP_PIN01 (1 << 16)
#define LP_PIN02 (1 << 0)
#define LP_PIN03 (1 << 1)
#define LP_PIN04 (1 << 2)
#define LP_PIN14 (1 << 2)
#define LP_PIN16 (1 << 2)
#define LP_PIN17 (1 << 2)
#define LPT2 0x278
#define LP_DATA_PINS 1
#else //nur Linux
#include "parapin.h"
#endif
#define LPT_PORT LPT2
#define MAIL_ENTRIES 2 //hier anpassen
#define WAIT 10 //wie viele Sekunden zwischen Mailchecken warten
int init_led(void);
int file_zero(char *);
struct mail_entry
{
char file[50];
int pin;
};
//////////////////////////////
// main
//////////////////////////////
int main(void)
{
struct mail_entry me[MAIL_ENTRIES];
int i;
printf("1st");
// Hier anpassen
strcpy(me[0].file, "/var/spool/mail/root");
me[0].pin = LP_PIN01;
strcpy(me[1].file, "/var/spool/mail/user");
me[1].pin = LP_PIN02;
if (init_led() != 0) {printf("Fehler!"); return 1;}
//die einzelnen Postfächer abfragen und entsprechend die LED's schalten
while (1)
{
for (i=0; i < MAIL_ENTRIES; i++)
{
if (file_zero(me[i].file) == 1) {set_pin(me[i].pin);printf("%s ist an", me[i].file);}
else {clear_pin(me[i].pin);printf("%s ist aus", me[i].file);}
}
usleep(1000*1000*WAIT);
}
return 0;
}
//////////////////////////////return=1 falls größer 0
// prüft, ob datei größer 0 =0 falls gleich 0
////////////////////////////// =-1 bei Fehler
int file_zero(char *fps)
{
int fp;
if ((fp=open(fps, O_RDONLY)) == -1) return -1;
if (lseek(fp, 1, SEEK_SET) != 1) return 0;
else return 1;
}
//////////////////////////////return=0 falls erfolgreich
// initialisiert LPT-PORT =1 falls Fehler
//////////////////////////////
int init_led(void)
{
if (pin_init_user(LPT_PORT) < 0) return 1;
pin_output_mode(LP_PIN01|LP_DATA_PINS|LP_PIN14|LP_ PIN16|LP_PIN17);
return 0;
}
</pre>
[Dieser Beitrag wurde von Sion am 16. November 2000 editiert.]
[Dieser Beitrag wurde von Sion am 16. November 2000 editiert.]
folgendes Programm macht überhaupt nicht das, was es soll. Es gibt nichtmal den printf in der 3. Zeile aus, es passiert eigentlich überhaupt nichts. Ich kann noch tippen und enter drücken, das steht dann auch toll da aber mehr nicht. Unter Windows klappts einwandfrei. Schauts euch mal an, die Nuß (wenns denn eine ist):
Danke, Sion
<pre>
//allgemeine Bibliotheken
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
//nur Windows zum Testen
#if defined(_WIN32)
#include <io.h>
void set_pin(int i) {(i);};
void clear_pin(int i) {(i);};
void usleep(int i) {(i);};
int pin_init_user(int i) {return 0;};
void pin_output_mode(int i) {(i);};
#define LP_PIN01 (1 << 16)
#define LP_PIN02 (1 << 0)
#define LP_PIN03 (1 << 1)
#define LP_PIN04 (1 << 2)
#define LP_PIN14 (1 << 2)
#define LP_PIN16 (1 << 2)
#define LP_PIN17 (1 << 2)
#define LPT2 0x278
#define LP_DATA_PINS 1
#else //nur Linux
#include "parapin.h"
#endif
#define LPT_PORT LPT2
#define MAIL_ENTRIES 2 //hier anpassen
#define WAIT 10 //wie viele Sekunden zwischen Mailchecken warten
int init_led(void);
int file_zero(char *);
struct mail_entry
{
char file[50];
int pin;
};
//////////////////////////////
// main
//////////////////////////////
int main(void)
{
struct mail_entry me[MAIL_ENTRIES];
int i;
printf("1st");
// Hier anpassen
strcpy(me[0].file, "/var/spool/mail/root");
me[0].pin = LP_PIN01;
strcpy(me[1].file, "/var/spool/mail/user");
me[1].pin = LP_PIN02;
if (init_led() != 0) {printf("Fehler!"); return 1;}
//die einzelnen Postfächer abfragen und entsprechend die LED's schalten
while (1)
{
for (i=0; i < MAIL_ENTRIES; i++)
{
if (file_zero(me[i].file) == 1) {set_pin(me[i].pin);printf("%s ist an", me[i].file);}
else {clear_pin(me[i].pin);printf("%s ist aus", me[i].file);}
}
usleep(1000*1000*WAIT);
}
return 0;
}
//////////////////////////////return=1 falls größer 0
// prüft, ob datei größer 0 =0 falls gleich 0
////////////////////////////// =-1 bei Fehler
int file_zero(char *fps)
{
int fp;
if ((fp=open(fps, O_RDONLY)) == -1) return -1;
if (lseek(fp, 1, SEEK_SET) != 1) return 0;
else return 1;
}
//////////////////////////////return=0 falls erfolgreich
// initialisiert LPT-PORT =1 falls Fehler
//////////////////////////////
int init_led(void)
{
if (pin_init_user(LPT_PORT) < 0) return 1;
pin_output_mode(LP_PIN01|LP_DATA_PINS|LP_PIN14|LP_ PIN16|LP_PIN17);
return 0;
}
</pre>
[Dieser Beitrag wurde von Sion am 16. November 2000 editiert.]
[Dieser Beitrag wurde von Sion am 16. November 2000 editiert.]