proboard/procfg/AREA.CPP

253 lines
3.2 KiB
C++

#define Use_DynamicArrayFile
#include <string.h>
#include <tswin.hpp>
#include "procfg.hpp"
#include "area.hpp"
_MsgArea
MsgArea::fEmpty(long r)
{
_MsgArea ma;
CLEAR_OBJECT(ma);
ma.areaNum = r+1;
return ma;
}
void
MsgArea::fMove(long /*r1*/,long r2,_MsgArea& ma)
{
ma.areaNum = r2+1;
}
_FileArea
FileArea::fEmpty(long)
{
_FileArea fa;
CLEAR_OBJECT(fa);
return fa;
}
static int
MsgArea_sortfunc(_MsgArea& ma1,_MsgArea& ma2)
{
return stricmp(ma2.name,ma1.name);
}
static int
FileArea_sortfunc(_FileArea& fa1,_FileArea& fa2)
{
return stricmp(fa2.name,fa1.name);
}
int Area::selected_start = -1;
int Area::selected_end = -1;
int MsgArea::file_count = 0;
File MsgArea::f;
DynamicArrayFile<_MsgArea> *MsgArea::df = NULL;
int FileArea::file_count = 0;
File FileArea::f;
DynamicArrayFile<_FileArea> *FileArea::df = NULL;
MsgArea::MsgArea()
{
if(file_count <= 0)
{
f.open(FileName(syspath,"MESSAGES.PB"),fmode_rw | fmode_copen);
file_count = 0;
if(!f.opened()) return;
df = new DynamicArrayFile<_MsgArea>(f);
df->setEmptyFunc(fEmpty);
df->setMoveFunc(fMove);
selStart(-1);
selEnd(-1);
}
file_count++;
}
MsgArea::~MsgArea()
{
if(file_count <= 1 && f.opened())
{
delete df;
f.close();
file_count = 1;
}
file_count--;
}
bool
MsgArea::read(int rec)
{
return df->read(rec-1,*this);
}
bool
MsgArea::write(int rec)
{
areaNum = rec;
return df->write(rec-1,*this);
}
bool
MsgArea::clear(int rec)
{
CLEAR_OBJECT(*((_MsgArea *)this));
return write(rec);
}
int
MsgArea::numAreas()
{
return int(df->numRecords());
}
bool
MsgArea::insert(int rec)
{
return df->insert(rec-1);
}
bool
MsgArea::remove(int rec)
{
return df->remove(rec-1);
}
dword
MsgArea::crc()
{
return crc32(this,sizeof(_MsgArea));
}
bool
MsgArea::sort(int from,int to)
{
return df->sort(from,to,MsgArea_sortfunc);
}
bool
MsgArea::move(int start,int end,int to)
{
return df->move(start,end,to);
}
FileArea::FileArea()
{
if(file_count <= 0)
{
f.open(FileName(syspath,"FILECFG.PRO"),fmode_rw | fmode_copen);
file_count = 0;
if(!f.opened()) return;
df = new DynamicArrayFile<_FileArea>(f);
df->setEmptyFunc(fEmpty);
selStart(-1);
selEnd(-1);
}
file_count++;
}
FileArea::~FileArea()
{
if(file_count <= 1 && f.opened())
{
delete df;
f.close();
file_count = 1;
}
file_count--;
}
bool
FileArea::read(int rec)
{
areaNum = rec;
return df->read(rec-1,*this);
}
bool
FileArea::write(int rec)
{
areaNum = rec;
return df->write(rec-1,*this);
}
bool
FileArea::clear(int rec)
{
CLEAR_OBJECT(*((_FileArea *)this));
return write(rec);
}
int
FileArea::numAreas()
{
return int(df->numRecords());
}
bool
FileArea::insert(int rec)
{
return df->insert(rec-1);
}
bool
FileArea::remove(int rec)
{
return df->remove(rec-1);
}
dword
FileArea::crc()
{
return crc32(this,sizeof(_FileArea));
}
bool
FileArea::sort(int from,int to)
{
return df->sort(from,to,FileArea_sortfunc);
}
bool
FileArea::move(int start,int end,int to)
{
return df->move(start,end,to);
}