home *** CD-ROM | disk | FTP | other *** search
- /* MailTOC_Dump.c - Program to dump Mailbox table_of_contents to stdout.
- Based on info provided by Chris Paris cap+@cmu.edu.
- Get file "mailforward*.tar.Z" from the archive and see
- index_files.rtf in it.
-
- This should be run in a ~/Mailboxes/*.mbox directory where file
- table_of_contents is in the current directory.
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/time.h>
- #include <sys/types.h>
- #include <sys/stat.h>
-
-
- typedef struct table_of_contents_header {
- long magic; /* magic number: 0xd9758 */
- long num_msgs; /* number of messages in mbox */
- long mbox_time; /* the m_time of mbox */
- float listview_height; /* height of upper section of split view containing list */
- float llx; /* lower left X coordinate of window */
- float lly; /* lower left Y coordinate */
- float width; /* width of window */
- float height; /* height of window */
- } MailTocHeader;
-
- typedef struct message_index {
- long record_length; /* the length of this record, including this word */
- long message_offset; /* offset in mbox where this message begins */
- long message_length; /* length in bytes of this message in mbox */
- long message_date; /* the date of this message */
- char status; /* read, unread, deleted */
- char msgtype; /* regular or NeXT mail */
- char mystery[2]; /* I don't know what these are */
- } MailMsgIndex;
-
-
- main()
- {
- FILE *fp;
- MailTocHeader header;
- MailMsgIndex mindex;
- int nread, i, c;
- unsigned long year, month, day;
-
- fp = fopen("table_of_contents", "r");
- if(fp == NULL)
- {
- fprintf(stderr, "Can't open table_of_contents file.\n");
- fprintf(stderr, "Run within a ~/Mailboxes/*.mbox directory.\n");
- exit(1);
- }
-
- nread = fread(&header, (size_t)sizeof(MailTocHeader), 1, fp);
- if(nread==0)
- {
- fprintf(stderr,"No header could be read.\n");
- exit(2);
- }
- /* dump header info */
- printf("Magic (should be 0xd9758): 0x%lx\n", header.magic);
- printf("# of messages: %ld\n", header.num_msgs);
- printf("Modification time of mbox: %s", ctime(&header.mbox_time));
- printf("Height of message list view: %.1f\n",header.listview_height);
- printf("Window Origin(x,y)=(%.f, %.f), Size(w,h)=(%.f, %.f)\n",
- header.llx, header.lly, header.width, header.height);
-
- /* Now, dump records for each message */
- for(i=0; i<header.num_msgs; i++)
- {
- nread = fread(&mindex, (size_t)sizeof(MailMsgIndex), 1, fp);
- if(nread == 0)
- {
- fprintf(stderr,"Premature EOF\n");
- exit(3);
- }
-
- printf("---[%d]---\n", i+1);
- printf("Record Length: %ld\n", mindex.record_length);
- printf("Message Offset into mbox: %ld\n", mindex.message_offset);
- printf("Message Length (bytes): %ld\n", mindex.message_length);
- day = month = year = mindex.message_date;
- year >>= 9;
- month >>= 5; month &= 0xf;
- day &= 0x1f;
- printf("Message Date (Y-M-D): %d-%d-%d\n", year, month, day);
- printf("Status: Read( ), Last-Read(>), Unread(*), Deleted(d): [%c]\n", mindex.status);
- printf("NeXTmail(r) or regular ( ): [%c]\n",mindex.msgtype);
- printf("Mystery byte-1: %d (dec), [%c]\n", (int)(mindex.mystery[0]), mindex.mystery[0]);
- printf("Mystery byte-2: %d (dec), [%c]\n", (int)(mindex.mystery[1]), mindex.mystery[1]);
- printf("From: ");
- while((c=fgetc(fp)) != (int)'\0')
- putchar(c);
- printf("\nSubject: ");
- while((c=fgetc(fp)) != (int)'\0')
- putchar(c);
- printf("\nAttachment Dir: ");
- while((c=fgetc(fp)) != (int)'\0')
- putchar(c);
- printf("\n");
- }
- printf("---End of TOC---\n");
- fclose(fp);
- }
-