home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / c / ios_src / fastimp.c < prev    next >
C/C++ Source or Header  |  1993-01-31  |  4KB  |  178 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include "portab.h"
  5. #include "vars.h"
  6.  
  7. void FASTsave (MSGHEADER *Hdr, BYTE *msg, WORD area) {
  8.     BYTE Hfile [128],
  9.           Mfile [128],
  10.           buffer[128];
  11.           
  12.     WORD    i,
  13.             tofile,
  14.             attrib;
  15.     
  16.     struct ffblk blk;
  17.     
  18.     FILE *Mfp, *Hfp;
  19.     
  20.     Hdr->mailer[7] |= SCANNED;
  21.     Hdr->flags &=~(DELETED);
  22.  
  23.     /*
  24.     **    Bekijk of deze area al geopend is. Als deze area geopend is
  25.     **    dan kan er gewoon doorgegaan worden zonder dat er een nieuwe
  26.     **    area geopend dient te worden.
  27.     */
  28.     
  29.     for (i=0; i < N_FASTAREAS; i++) {
  30.         if (lastareawritten[i] == area) {
  31.             tofile = i;
  32.             break;
  33.         }
  34.     }
  35.     
  36.     /*
  37.     **    Als er nog geen geopende file bestaat voor deze area,
  38.     **    kijk dan of er nog gesloten kanalen zijn die geopend kunnen
  39.     **    worden.
  40.     */
  41.     
  42.     if (i >= N_FASTAREAS) {
  43.         for (i=0; i < N_FASTAREAS; i++) {
  44.             if (LHDRfile[i] == FILEclosed &&
  45.                 LMSGfile[i] == FILEclosed)
  46.             {
  47.             
  48.             /*
  49.             **    Er bestaat nog een gesloten kanaal waar deze area
  50.             **    gebruik van kan maken.
  51.             */
  52.             
  53.                 tofile = i;
  54.  
  55.                 LHDRfile[i] = FILEopen;
  56.                 LMSGfile[i] = FILEopen;
  57.                 lastareawritten[i] = area;
  58.  
  59.                 sprintf (Mfile, "%s.MSG", Areapath [area] );
  60.                 
  61.                 if (findfirst (Mfile, &bkl, 0)) {
  62.                     Hdr ->Mstart = 0L;
  63.                 } else {
  64.                     Hdr->Mstart = blk.ff_fsize;
  65.                 }
  66.                 
  67.                 /*
  68.                 **    Alloc geheugen voor deze area.
  69.                 */
  70.  
  71.                 h_Mstart[i] = Hdr->Mstart;
  72. /*                h_Mstart[i] += (ULONG)Hdr->size; */
  73.                 if (!h_one_item)
  74.                     h_one_item = ((coreleft() / N_FASTTOTAL) / 2560 * 2048);
  75.  
  76.  
  77. #if defined EXTERNDEBUG
  78.         if (debugflag)
  79.         {
  80.             log_line(6,">Alloc h_headerbuf[%d]",i);
  81.             log_line(6,">Alloc h_msgbuf[%d]",i);
  82.             log_line(6,">Memory %ld", coreleft());
  83.         }
  84. #endif
  85.                 h_headerbuf[i] = (BYTE *)myalloc(h_one_item);
  86.                 h_msgbuf[i] = (BYTE *)myalloc(h_one_item);
  87.                 h_headeritems[i] = 0L;
  88.                 h_msgitems[i] = 0L;
  89.                 h_maxheader[i] = h_one_item;
  90.                 h_maxmsg[i] = h_one_item;
  91.                 break;
  92.             }
  93.         }
  94.  
  95.     /*
  96.     **    Als er geen gesloten kanalen meer te vinden zijn,
  97.     **    sluit dan een kanaal. Eerst dient dit kanaal weggeschreven
  98.     **    te worden naar de area op disk waar deze zich bevind.
  99.     */
  100.     
  101.         if ( i >= N_FASTAREAS) {
  102.             sprintf(Hfile, "%s.HDR", Areapath[ lastwrittenarea[0] ] );
  103.             sprintf(Mfile, "%s.MSG", Areapath[ lastwrittenarea[0] ] );
  104.     
  105.         /*
  106.         **    Open het kanaal voor deze area.
  107.         */
  108.     
  109.             if ((Hfp = fopen (Hfile, "r+b")) == NULL) {
  110.                 if ((Hfp = fopen (Hfile, "wb")) == NULL) {
  111.                     log_line(5,Logmessage[M__CANT_OPEN_HEADER], Mfile);
  112.                     terminate (10);
  113.                 }
  114.             } else {
  115.                 fseek (Hfp, 0L, SEEK_END);
  116.             }
  117.             
  118.             if ((Mfp = fopen (Mfile, "R+b")) == NULL) {
  119.                 if ((Mfp = fopen (Mfile, "wb")) == NULL) {
  120.                     log_line(5,Logmessage[M__CANT_OPEN_HEADER], Mfile);
  121.                     terminate (10);
  122.                 }
  123.             } else {
  124.                 fseek (Mfp, 0L, SEEK_END)
  125.             }
  126.     
  127.         /*
  128.         **    Schrijf de inhoud van het geheugengebied welke door deze
  129.         **    area is gebruikt op disk.
  130.         */
  131.                 
  132.             Fwrite(fileno (Hfp), h_headeritems[0], h_headerbuf[0]);
  133.             Fwrite(fileno (Mfp), h_msgitems[0], h_msgbuf[0]);
  134.             h_headeritems[0] = 0L;
  135.             h_msgitems[0] = 0L;
  136.     
  137.             fclose (Mfp);
  138.             fclose (Hfp);
  139.     
  140.         /*
  141.         **    Zet de attributen voor deze area, zodat deze niet opnieuw
  142.         **    gescand zal worden door IOSmail.
  143.         */
  144.         
  145.             attr = Fattrib(Hfile, 0, -1);
  146.     
  147.             if (attr != -33 && attr != -34 && attr & FA_ARCHIVE)
  148.             {
  149.                 if (intel (Sversion()) >= 0x0015U)
  150.                     Fattrib (fbuf, 1, 0);
  151.                 else
  152.                     Fattrib (Hfile, 1, FA_ARCHIVE);
  153.             }
  154.     
  155.         /*
  156.         **    Zet het areanummer op 0.
  157.         */
  158.                     
  159.             tofile = 0;
  160.             lastareawritten[0] = area;
  161.     
  162.         /*
  163.         **    Reset de waarden zodat er opnieuw begonnen kan worden.
  164.         */
  165.     
  166.             h_Mstart[0] = Hdr->Mstart;
  167.             h_Mstart[0] += (ULONG)Hdr->size;
  168.     
  169.         }
  170.     }
  171.  
  172.     Hdr->Mstart = h_Mstart [tofile];
  173.     h_Mstart += Hdr->size;
  174.  
  175.     addhdrbuf(Hdr, (UWORD)sizeof(MSGHEADER), tofile);
  176.     addmsgbuf(msg, (UWORD)strlen(msg), tofile);
  177. }
  178.