home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software of the Month Club 1995 December
/
SOFM_Dec1995.bin
/
pc
/
dos
/
biz
/
pbase
/
grpacct.edt
< prev
next >
Wrap
Text File
|
1995-10-31
|
8KB
|
261 lines
/*
******************************************
* Variable Declaration Section
******************************************
*/
typedef struct {
bool abort,
noneedited,
bypass,
edited,
finished,
fld_in_range;
int sno,
fno,
incy,
last_fld;
winptr winp,
edtwin;
} editGlobalVars;
typedef struct {
int sno,
fno,
incy;
winptr winp;
} dispGlobalVars;
editGlobalVars edt;
dispGlobalVars dsp;
/*
******************************************
* Function Declaration Section
******************************************
*/
void dspf(int x, int y, byte a, byte s, byte l, fldtyp *f)
{
if (dsp.incy == (tabidx[dsp.fno] - 1) && (tabsize[dsp.fno] > 1))
dsp_fld((byte)x, (byte)(y + dsp.incy), f->faddr, f->typ, f->pic, s, l, 0, dsp.winp);
else
dsp_fld((byte)x, (byte)(y + dsp.incy), f->faddr, f->typ, f->pic, s, l, a, dsp.winp);
}
/*************************************************************************/
void GRPACCT_dsp(int fno, int sno, byte incy)
{
dsp.fno = fno;
dsp.sno = sno;
dsp.incy = incy;
dsp.winp = uw.wa[sno];
switch(sno) {
case 1 :
if (dsp.fno == 1) {
if ((dsp.fno <= filno) && (dsp.incy == tabidx[dsp.fno]-1)) attrib = _av; else attrib = _iv;
dspf( 1, 1,0,0,16,&GRPACCT1._GROUPS);
dspf(18, 1,0,0,0,&GRPACCT1._GROUP_DESC);
}
break;
}
}
/*************************************************************************/
bool skipfield(int fnum)
{
bool tb;
tb = False;
if (edt.sno == 1) switch (fnum) {
case 0 : break;
}
return(tb);
}
/*************************************************************************/
bool chk_fld(int chknum)
{
string estr;
*estr = '\0';
if (edt.sno == 1) switch (chknum) {
case 0 : break;
}
if (*estr != '\0') {
if (strcmp(estr,LSC_BaseError) != 0) {
audible(Error);
message(edt.winp, estr);
}
}
return (bool)(*estr == '\0');
}
/*************************************************************************/
void edt_n_chk(byte x, byte y, byte l, byte a, winptr h, fldtyp *f, int fldno)
{
if (!skipfield(fldno)) {
do {
if (!edt.bypass) {
edt_fld(x, y + edt.incy, f->faddr, f->typ, f->pic, l, a, edt.winp);
edt.noneedited = False;
edt.edited = True;
edt.abort = False;
if (exitcode == HlpKey) disphelp(h);
if (custom_key(scrno, edt.fno, &fldnum, &exitcode)) exitcode = QitKey;
}
if ((exitcode != QitKey) && (exitcode != UArr) && (exitcode != HlpKey)) {
edt.fld_in_range = chk_fld(fldno);
if (tabsize[dsp.fno] > 1 && (edt.incy == (tabidx[edt.fno] - 1) || command == Cmd_Add_Record)) {
dsp_fld(x, y+edt.incy, f->faddr, f->typ, f->pic, 0, l, 0, edt.winp);
}
else
dsp_fld(x, y+edt.incy, f->faddr, f->typ, f->pic, 0, l, a, edt.winp);
if (!edt.fld_in_range) {
fldnum = fldno;
edt.bypass = False;
}
}
} while (!edt.fld_in_range && (exitcode != QitKey) && (exitcode != UArr));
message(NULL,"");
}
}
/*************************************************************************/
void openedtmnu(void)
{
string editHelpString;
strcpy(editHelpString, _EdtHelp);
if (openwin(0, (byte)(scrwid - strlen(editHelpString) + 1), scrhgt, (byte)(strlen(editHelpString)), 1, 0x4F, 0x4F, 0, "\0┐│┘─└│┌", TopCnt,"")) {
edt.edtwin = curwin;
writewxy(editHelpString, 0, 1, 1, edt.edtwin);
hidewin(T_ON, edt.edtwin);
}
else edt.edtwin = NULL;
}
/*************************************************************************/
void GRPACCT_edt(int fno, int fld, int incy)
{
openedtmnu();
attrib = _av;
exitcode = Nul;
edt.fno = fno;
edt.sno = scrno;
edt.incy = incy;
edt.winp = uw.wa[edt.sno];
edt.abort = True;
edt.noneedited = True;
edt.bypass = False;
edt.finished = False;
fldnum = (fld == 0) ? 1 : fld;
do {
if (fldnum == 1) edt.noneedited = True;
if (edt_spos && (edt.last_fld != fldnum)) edt_spos = 1;
edt.last_fld = fldnum;
edt.edited = False;
if (edt.sno == 1) switch (fldnum) {
case 1 : if (edt.fno == 1) edt_n_chk( 1, 1,16,0,hw.wa[1],&GRPACCT1._GROUPS,fldnum); break;
case 2 : if (edt.fno == 1) edt_n_chk(18, 1,0,0,hw.wa[1],&GRPACCT1._GROUP_DESC,fldnum); break;
default : if (edt.noneedited) {
edt.finished = True;
if (edt.abort) {
exitcode = QitKey;
dberrm(_NoneEdited);
}
}
else if (exitcode == XeptKey) edt.finished = True; else fldnum = 0;
}
if (edt.bypass || !edt.edited) {
if (_upward && (fldnum > 1)) fldnum--;
else fldnum++;
}
if (exitcode == XeptKey) edt.bypass = True;
if (exitcode == QitKey) edt.finished = True;
if (fldnum > edt.last_fld) _upward = False;
} while (!edt.finished);
if (edt.edtwin != NULL) closewin(&edt.edtwin);
}
/*************************************************************************/
void editdefaultdata(int fno, ptr fb)
{
byte lengthOfText,
lengthOfPrompt,
windowX,
windowY,
windowWidth,
windowHeight;
int fieldNumber,
saveFieldNumber;
winptr aWindowPtr;
fldblk *aFieldBlock;
fldtyp *aFieldType;
string tempString;
fldtyp editArray[23];
char colon[10];
strcpy(colon, " : ");
aFieldBlock = fb;
saveFieldNumber = fldnum;
lengthOfPrompt = lengthOfText = windowWidth = windowHeight = 0;
for (fieldNumber=0; fieldNumber < aFieldBlock->numf; fieldNumber++) {
aFieldType = &(*aFieldBlock->farr)[fieldNumber];
if (aFieldType->typ != _Memo && gvar->sec >= aFieldType->dsec && windowHeight < 23) {
windowHeight++;
if (strlen(aFieldType->fname) > lengthOfPrompt) lengthOfPrompt = strlen(aFieldType->fname);
if (strlen(aFieldType->faddr) > lengthOfText) lengthOfText = strlen(aFieldType->faddr);
memmove(&editArray[windowHeight], aFieldType, sizeof(fldtyp));
}
}
lengthOfPrompt = lengthOfPrompt + 3;
if ((lengthOfPrompt + lengthOfText) > (scrwid - 2)) lengthOfText = scrwid - 2 - lengthOfPrompt;
if (windowHeight > (scrhgt - 2)) windowHeight = scrhgt - 2;
windowWidth = lengthOfPrompt + lengthOfText;
windowX = (int)((scrwid - windowWidth) / 2);
windowY = (int)((scrhgt - windowHeight) / 2);
if (openwin(0, windowX, windowY, windowWidth, windowHeight, 15, 31, 8, "─┐│┘─└│┌", TopCnt, "")) {
aWindowPtr = curwin;
for (fieldNumber = 1; fieldNumber <= windowHeight; fieldNumber++) {
aFieldType = &editArray[fieldNumber];
strcpy(tempString, aFieldType->fname);
strcat(tempString, colon);
writewxy(tempString, 0, 1, (byte)(fieldNumber), aWindowPtr);
dsp_fld(lengthOfPrompt + 1, fieldNumber, aFieldType->faddr, aFieldType->typ, aFieldType->pic, 0, lengthOfText, 0, aWindowPtr);
}
hidewin(T_ON, aWindowPtr);
fieldNumber = 1;
do {
aFieldType = &editArray[fieldNumber];
edt_fld(lengthOfPrompt + 1, fieldNumber, aFieldType->faddr, aFieldType->typ, aFieldType->pic, lengthOfText, 0, aWindowPtr);
if (_upward) fieldNumber--;
else fieldNumber++;
if (!fieldNumber) fieldNumber = windowHeight;
if (fieldNumber > windowHeight) fieldNumber = 1;
} while(exitcode != QitKey && exitcode != XeptKey);
closewin(&aWindowPtr);
}
fldnum = saveFieldNumber;
}