home *** CD-ROM | disk | FTP | other *** search
/ synchro.net / synchro.net.tar / synchro.net / main / BBS / OPXSPEC1.ZIP / mailfdx.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-27  |  3.6 KB  |  121 lines

  1. //********************************************************
  2. // (c) Copyright 1999-2000 Santronics Software, Inc.
  3. //               All Rights Reserved.
  4. //********************************************************
  5. //
  6. // File Name : mailfdx.c
  7. // Date      : 01/27/2000
  8. // Author    : SSI
  9. //
  10. // Virtual Memory File Structures and reading example for
  11. // the Silver Xpress's MAIL.FDX file
  12. //
  13. // example usage:  mailfdx mail.fdx
  14. //
  15. //********************************************************
  16.  
  17. #include <stdio.h>
  18.  
  19. #pragma pack(1)
  20.  
  21. #define byte  unsigned char
  22. #define word  unsigned short
  23. #define ulong unsigned long
  24.  
  25. /* VASHEADER: The following is the header for a MAIL.FDX file */
  26.  
  27. typedef struct _VASHEADER {
  28.   word RowsInPage;       // number of VAS records
  29.   word ColsInPage;       // always 1
  30.   word PagesDown;        // number of pages
  31.   word PagesAcross;      // number of pages across
  32.   word ElSize;           // size of element, ie, sizeof(MAILFDXTYPE)
  33.   word PageSize;         // bytes of data in one page
  34.   word PageCount;        // number of pages in entire array
  35.   ulong NextAvail;       // Next file position for new page
  36.   byte ID[7];            // MUST BE  0x06VARRAY
  37. } VASHEADER, *PVASHEADER;
  38.  
  39. /*
  40.   MAILFDXTYPE: each record is a direct 1 to 1 correspondence
  41.                to the MAIL.DAT file.
  42. */
  43.  
  44.  
  45. typedef struct _MAILFDXTYPE {
  46.   word iarea;             // area number msg belongs too
  47.   word inum;              // msg number
  48.   char istype;            // 'D' Direct, 'K' Keyword, or ' '
  49.   byte resp;              // response, see flags below
  50.   byte flags;             // see action flags below
  51.   ulong fpos;             // byte offset to MAIL.DAT Xpress header
  52. } MAILFDXTYPE, *PMAILFDXTYPE;
  53.  
  54. /* response flags */
  55.  
  56. #define _already_read  0x01  // set when read by reader
  57. #define _reply_exist   0x02  // set if reader create a reply
  58. #define _search_msg    0x04  // set if this is a message is a search hit
  59.  
  60. /* action flags - used internally for search system */
  61.  
  62. #define  _mailgrp_kill   0x01
  63. #define  _mailgrp_file   0x02
  64. #define  _mailgrp_print  0x04
  65. #define  _mailgrp_read   0x08
  66. #define  _mailgrp_urgent 0x10
  67. #define  _mailgrp_tagged 0x20
  68. #define  _mailgrp_dos    0x40
  69.  
  70. void main (int argc, char *argv[])
  71.  {
  72.    FILE         *fv;
  73.    VASHEADER    VAShdr;
  74.    MAILFDXTYPE  mailfdx;
  75.    ulong        pofs;
  76.    int          i,j;
  77.  
  78.    printf("sizeof of VASHDR [%d]\n",sizeof(VASHEADER));
  79.  
  80.  
  81.    if ( (fv=fopen(argv[1],"r+b")) == NULL ) {
  82.      printf("File [%s] not found",argv[1]);
  83.      return;
  84.    }
  85.    fread(&VAShdr,sizeof(VAShdr),1,fv);
  86.  
  87.    if (VAShdr.ID[0] != 0x06) {
  88.      printf("NOT A XPRESS MAIL.FDX FILE [%2X]",VAShdr.ID[0]);
  89.      fclose(fv);
  90.      return;
  91.    }
  92.  
  93.    printf("RowsInPage  [%4u]\n",VAShdr.RowsInPage);
  94.    printf("ColsInPage  [%4u]\n",VAShdr.ColsInPage);
  95.    printf("PagesDown   [%4u]\n",VAShdr.PagesDown);
  96.    printf("PagesAcross [%4u]\n",VAShdr.PagesAcross);
  97.    printf("ElSize      [%4u]\n",VAShdr.ElSize);
  98.    printf("PageSize    [%4u]\n",VAShdr.PageSize);
  99.    printf("PageCount   [%4u]\n",VAShdr.PageCount);
  100.    printf("NextAvail   [%4lu]\n\n",VAShdr.NextAvail);
  101.  
  102.    for (i=0;i<VAShdr.PageCount;i++) {
  103.      fseek(fv,sizeof(VASHEADER)+(long)4*i,SEEK_SET);
  104.      fread(&pofs,1,4,fv);
  105.      fseek(fv,pofs,SEEK_SET);
  106.      for (j=0;j<VAShdr.RowsInPage;j++) {
  107.      fread(&mailfdx,sizeof(MAILFDXTYPE),1,fv);
  108.      printf("area [%4d] msg# [%4d] type [%c] resp [%04X]" //
  109.             " flags [%04X] fpos [%5lu]\n",
  110.             mailfdx.iarea,
  111.             mailfdx.inum,
  112.             mailfdx.istype,
  113.             mailfdx.resp,
  114.             mailfdx.flags,
  115.             mailfdx.fpos
  116.            );
  117.      }
  118.    }
  119.  }
  120.  
  121.