#include #include #include #include #include #define BUFSIZE 32768L #define MSG_Private 1 #define MSG_Crash 2 #define MSG_Recvd 4 #define MSG_Sent 8 #define MSG_File 16 #define MSG_Fwd 32 #define MSG_Unknown 64 #define MSG_K_S 128 #define MSG_Local 256 #define MSG_Hold 512 #define MSG_Del 32768 typedef struct { char from[36], /* User who created msg */ to[36], /* User who may read msg */ topic[72], /* Topic of msg */ time[20]; /* Date/Time string of message */ int create, /* Date when MSGS was received */ Mstart; /* Start offset of message */ short up, /* NC */ parent, /* Parent # of this msg */ flags, /* Attribute bits */ mailer[8], /* needed for the mailer */ size, /* # bytes in message */ reads, /* Number of times read */ cost, /* Cost of message*100 */ Ozone,Onet, /* Net on which msg was created */ Onode, /* Node on which msg was created */ Opoint, Dzone,Dnet, /* Destination net for msg */ Dnode, /* Destination node for msg */ Dpoint; } MSGHEADER; short upperCase=0; char upTransTable[256]; void set_Regex(Regex* &r, char *str) { if(r) delete r; if(!upperCase) r = new Regex(str, 1); else r = new Regex(str, 1, 40, upTransTable); } int main(int argc, char * argv[]) { String hdrName, msgName, ErrorList= (String)argv[0] + ": "; char *buf; FILE *hdrFile, *msgFile; MSGHEADER hdr; size_t bufSize=0; short i, plusKilled=0, errors=0; Regex *rFrom=0, *rTo=0, *rSubject=0, *rText=0; for(i=0; i<256; i++) upTransTable[i]= (isalpha(i) && islower(i)) ? _toupper(i) : i; if( argc>=2 ) { i=2; while(ibufSize) { free(buf); buf = malloc(hdr.size); bufSize = hdr.size; } fread(buf, hdr.size+1, 1, msgFile); if( rText ? String(buf).contains(*rText) : 1 ) { cout << "\002From: " << hdr.from << endl; cout << "To: " << hdr.to << endl; cout << "Subj: " << hdr.topic << endl; cout << endl; cout.write(buf, hdr.size+1); } } } free(buf); } fclose(hdrFile); } } else { cerr << ErrorList << errors << " Fehler..\n"; cerr << "\tUsage: readmsg [-f FromPattern] [-t ToPattern] [-T TextPattern] [-s SubjectPattern] [+k]\n"; } if(rFrom ) delete rFrom; if(rTo ) delete rTo; if(rSubject) delete rSubject; } return 0; }