home *** CD-ROM | disk | FTP | other *** search
- # include <stdio.h>
- # include <bench.h>
- # include <proc.io>
- # include "field.h"
- # include "screen.h"
- # include "iodef.h"
- # include "sup.h"
-
- /*
- * Get back to beginning of list
- */
- void head_list(tab, head, lptr, mode)
- struct _table *tab;
- struct a_line **head, **lptr;
- int mode;
- {
- if (*lptr != ANULL)
- while ((*lptr)->prev != ANULL)
- (*lptr) = (*lptr)->prev;
-
- *head = *lptr;
-
- if (*lptr != ANULL)
- bytecpy(tab->rec, (*lptr)->rec, tab->size);
-
- /*
- * Display the records
- */
- do_page_mode(tab, head, lptr, mode);
- }
-
-
- /*
- * Display full page of records
- */
- void do_page_mode(tab, head, lptr, mode)
- struct _table *tab;
- struct a_line **head, **lptr;
- int mode;
- {
- int idx, ln, off, curidx;
- struct a_line *tmp, *cur = ANULL;
-
- /*
- * Clear away any previous excess
- */
- tmp = *head;
-
- off = *(tab->offset);
- ln = 0;
-
- idx = *(tab->index);
- *(tab->index) = 0;
-
- while (ln < tab->maximum)
- {
- /*
- * Set current Record. Doesn't matter if it's NULL
- */
- *lptr = tmp;
- if (tmp != ANULL)
- bytecpy(tab->rec, (*lptr)->rec, tab->size);
-
- if (tab->dsp_fn != (void (*)())0)
- (*tab->dsp_fn)((*(tab->index) == idx) ? UNDERLINED : -1, (*lptr != ANULL) ? mode : CLR);
-
- if (tmp != ANULL)
- {
- /*
- * Save Ptr to Current Record
- */
- if (*(tab->index) == idx)
- {
- curidx = *(tab->index);
- cur = tmp;
- }
-
- tmp->index = *(tab->index);
- tmp = tmp->next;
- }
- ln++;
- off++;
- (*(tab->index))++;
- }
-
- /*
- * Don't continue if we are clearing the display
- */
- if (mode == CLR)
- return;
-
- *lptr = cur;
- if (*lptr != ANULL)
- bytecpy(tab->rec, (*lptr)->rec, tab->size);
- *(tab->index) = idx;
- }
-
-
- void before_input(dummy, tab, fld)
- FIELD *dummy;
- struct _table *tab;
- struct fldinfx *fld;
- {
- short tmpi;
- unsigned long tmpl;
- float tmpf;
- double tmpd;
-
- switch (fld->fldtype)
- {
- case CHRTYP : /* Don't copy - Use the buffer directly */
- case MEMTYP :
- dummy->fbuff = tab->rec + fld->fldstart;
- break;
- case INTTYP :
- bytecpy((char *)&tmpi, tab->rec + fld->fldstart, sizeof(short));
- sprintf(dummy->fbuff, "%d", tmpi);
- break;
- case LNGTYP :
- bytecpy((char *)&tmpl, tab->rec + fld->fldstart, sizeof(long));
- sprintf(dummy->fbuff, "%lu", tmpl);
- break;
- case FLTTYP :
- bytecpy((char *)&tmpf, tab->rec + fld->fldstart, sizeof(float));
- f_to_a(dummy->fbuff, tmpf, length_mask(dummy));
- break;
- case DBLTYP :
- bytecpy((char *)&tmpd, tab->rec + fld->fldstart, sizeof(double));
- f_to_a(dummy->fbuff, tmpd, length_mask(dummy));
- break;
- case DATTYP :
- switch (fld->fldlen)
- {
- case 6 :
- strcpy(dummy->fbuff, ltocon(dstrtol(tab->rec + fld->fldstart, dummy->fmask), dummy->fmask, 1));
- break;
- default :
- bytecpy((char *)&tmpl, tab->rec + fld->fldstart, sizeof(long));
- strcpy(dummy->fbuff, ltocon(tmpl, dummy->fmask, 1));
- }
- break;
- }
- }
-
-
- void after_input(dummy, tab, fld)
- FIELD *dummy;
- struct _table *tab;
- struct fldinfx *fld;
- {
- short tmpi;
- unsigned long tmpl;
- float tmpf;
- double tmpd;
-
- switch (fld->fldtype)
- {
- case CHRTYP : /* No Need to Copy - Buffer used directly */
- case MEMTYP :
- break;
- case INTTYP :
- tmpi = atoi(dummy->fbuff);
- bytecpy(tab->rec + fld->fldstart, (char *)&tmpi, sizeof(short));
- break;
- case LNGTYP :
- tmpl = atol(dummy->fbuff);
- bytecpy(tab->rec + fld->fldstart, (char *)&tmpl, sizeof(long));
- break;
- case FLTTYP :
- tmpf = (float) atof(dummy->fbuff);
- bytecpy(tab->rec + fld->fldstart, (char *)&tmpf, sizeof(float));
- break;
- case DBLTYP :
- tmpd = atof(dummy->fbuff);
- bytecpy(tab->rec + fld->fldstart, (char *)&tmpd, sizeof(double));
- break;
- case DATTYP :
- switch (fld->fldlen)
- {
- case 6 :
- bytecpy(tab->rec + fld->fldstart, ltocon(dstrtol(dummy->fbuff, dummy->fmask), dummy->fmask, 1), 6);
- break;
- default :
- tmpl = dstrtol(dummy->fbuff, dummy->fmask);
- bytecpy(tab->rec + fld->fldstart, (char *)&tmpl, sizeof(long));
- }
- break;
- }
- }
-
-
- void table_defaults(tab)
- struct _table *tab;
- {
- tab->inp_fn = (int (*)())0;
- tab->add_fn = (int (*)())0;
- tab->chg_fn = (int (*)())0;
- tab->dsp_fn = VNULL;
- tab->key_fn = VNULL;
- tab->sel_fn = VNULL;
- tab->extra_fn = VNULL;
- tab->goto_fn = (int (*)())0;
- tab->query_box = TRUE;
- tab->messages = TRUE;
- tab->auto_exit = FALSE;
- tab->no_menus = FALSE;
- tab->tp = FALSE;
- }
-
-