home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 2
/
crawlyvol2.bin
/
program
/
c
/
ios_src
/
fastimp.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-01-31
|
4KB
|
178 lines
#include <stdio.h>
#include <stdlib.h>
#include "portab.h"
#include "vars.h"
void FASTsave (MSGHEADER *Hdr, BYTE *msg, WORD area) {
BYTE Hfile [128],
Mfile [128],
buffer[128];
WORD i,
tofile,
attrib;
struct ffblk blk;
FILE *Mfp, *Hfp;
Hdr->mailer[7] |= SCANNED;
Hdr->flags &=~(DELETED);
/*
** Bekijk of deze area al geopend is. Als deze area geopend is
** dan kan er gewoon doorgegaan worden zonder dat er een nieuwe
** area geopend dient te worden.
*/
for (i=0; i < N_FASTAREAS; i++) {
if (lastareawritten[i] == area) {
tofile = i;
break;
}
}
/*
** Als er nog geen geopende file bestaat voor deze area,
** kijk dan of er nog gesloten kanalen zijn die geopend kunnen
** worden.
*/
if (i >= N_FASTAREAS) {
for (i=0; i < N_FASTAREAS; i++) {
if (LHDRfile[i] == FILEclosed &&
LMSGfile[i] == FILEclosed)
{
/*
** Er bestaat nog een gesloten kanaal waar deze area
** gebruik van kan maken.
*/
tofile = i;
LHDRfile[i] = FILEopen;
LMSGfile[i] = FILEopen;
lastareawritten[i] = area;
sprintf (Mfile, "%s.MSG", Areapath [area] );
if (findfirst (Mfile, &bkl, 0)) {
Hdr ->Mstart = 0L;
} else {
Hdr->Mstart = blk.ff_fsize;
}
/*
** Alloc geheugen voor deze area.
*/
h_Mstart[i] = Hdr->Mstart;
/* h_Mstart[i] += (ULONG)Hdr->size; */
if (!h_one_item)
h_one_item = ((coreleft() / N_FASTTOTAL) / 2560 * 2048);
#if defined EXTERNDEBUG
if (debugflag)
{
log_line(6,">Alloc h_headerbuf[%d]",i);
log_line(6,">Alloc h_msgbuf[%d]",i);
log_line(6,">Memory %ld", coreleft());
}
#endif
h_headerbuf[i] = (BYTE *)myalloc(h_one_item);
h_msgbuf[i] = (BYTE *)myalloc(h_one_item);
h_headeritems[i] = 0L;
h_msgitems[i] = 0L;
h_maxheader[i] = h_one_item;
h_maxmsg[i] = h_one_item;
break;
}
}
/*
** Als er geen gesloten kanalen meer te vinden zijn,
** sluit dan een kanaal. Eerst dient dit kanaal weggeschreven
** te worden naar de area op disk waar deze zich bevind.
*/
if ( i >= N_FASTAREAS) {
sprintf(Hfile, "%s.HDR", Areapath[ lastwrittenarea[0] ] );
sprintf(Mfile, "%s.MSG", Areapath[ lastwrittenarea[0] ] );
/*
** Open het kanaal voor deze area.
*/
if ((Hfp = fopen (Hfile, "r+b")) == NULL) {
if ((Hfp = fopen (Hfile, "wb")) == NULL) {
log_line(5,Logmessage[M__CANT_OPEN_HEADER], Mfile);
terminate (10);
}
} else {
fseek (Hfp, 0L, SEEK_END);
}
if ((Mfp = fopen (Mfile, "R+b")) == NULL) {
if ((Mfp = fopen (Mfile, "wb")) == NULL) {
log_line(5,Logmessage[M__CANT_OPEN_HEADER], Mfile);
terminate (10);
}
} else {
fseek (Mfp, 0L, SEEK_END)
}
/*
** Schrijf de inhoud van het geheugengebied welke door deze
** area is gebruikt op disk.
*/
Fwrite(fileno (Hfp), h_headeritems[0], h_headerbuf[0]);
Fwrite(fileno (Mfp), h_msgitems[0], h_msgbuf[0]);
h_headeritems[0] = 0L;
h_msgitems[0] = 0L;
fclose (Mfp);
fclose (Hfp);
/*
** Zet de attributen voor deze area, zodat deze niet opnieuw
** gescand zal worden door IOSmail.
*/
attr = Fattrib(Hfile, 0, -1);
if (attr != -33 && attr != -34 && attr & FA_ARCHIVE)
{
if (intel (Sversion()) >= 0x0015U)
Fattrib (fbuf, 1, 0);
else
Fattrib (Hfile, 1, FA_ARCHIVE);
}
/*
** Zet het areanummer op 0.
*/
tofile = 0;
lastareawritten[0] = area;
/*
** Reset de waarden zodat er opnieuw begonnen kan worden.
*/
h_Mstart[0] = Hdr->Mstart;
h_Mstart[0] += (ULONG)Hdr->size;
}
}
Hdr->Mstart = h_Mstart [tofile];
h_Mstart += Hdr->size;
addhdrbuf(Hdr, (UWORD)sizeof(MSGHEADER), tofile);
addmsgbuf(msg, (UWORD)strlen(msg), tofile);
}