home *** CD-ROM | disk | FTP | other *** search
/ Jason Aller Floppy Collection / 125.img / PRO-C4.ZIP / BENCH1.ZIP / GENSUP / STDSUP.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-05-28  |  4.4 KB  |  210 lines

  1. # include <stdio.h>
  2. # include <bench.h>
  3. # include <proc.io>
  4. # include "field.h"
  5. # include "screen.h"
  6. # include "iodef.h"
  7. # include "sup.h"
  8.  
  9. /*
  10.  * Get back to beginning of list
  11. */
  12. void head_list(tab, head, lptr, mode)
  13. struct _table *tab;
  14. struct a_line **head, **lptr;
  15. int mode;
  16. {
  17.     if (*lptr != ANULL)
  18.         while ((*lptr)->prev != ANULL)
  19.           (*lptr) = (*lptr)->prev;
  20.  
  21.    *head = *lptr;
  22.  
  23.     if (*lptr != ANULL)
  24.        bytecpy(tab->rec, (*lptr)->rec, tab->size);
  25.  
  26.     /*
  27.      * Display the records
  28.     */
  29.    do_page_mode(tab, head, lptr, mode);
  30. }
  31.  
  32.  
  33. /*
  34.  * Display full page of records
  35. */
  36. void do_page_mode(tab, head, lptr, mode)
  37. struct _table *tab;
  38. struct a_line **head, **lptr;
  39. int mode;
  40. {
  41.     int idx, ln, off, curidx;
  42.     struct a_line *tmp, *cur = ANULL;
  43.  
  44.     /*
  45.      * Clear away any previous excess
  46.     */
  47.     tmp = *head;
  48.  
  49.     off = *(tab->offset);
  50.     ln = 0;
  51.  
  52.     idx = *(tab->index);
  53.     *(tab->index) = 0;
  54.  
  55.    while (ln < tab->maximum)
  56.     {
  57.         /*
  58.          * Set current Record.  Doesn't matter if it's NULL
  59.         */
  60.         *lptr = tmp;
  61.         if (tmp != ANULL)
  62.            bytecpy(tab->rec, (*lptr)->rec, tab->size);
  63.  
  64.       if (tab->dsp_fn != (void (*)())0) 
  65.             (*tab->dsp_fn)((*(tab->index) == idx) ? UNDERLINED : -1, (*lptr != ANULL) ? mode : CLR);
  66.  
  67.         if (tmp != ANULL)
  68.         {
  69.             /*
  70.               * Save Ptr to Current Record
  71.             */
  72.             if (*(tab->index) == idx)
  73.             {
  74.                 curidx = *(tab->index);
  75.                 cur = tmp;
  76.             }
  77.  
  78.             tmp->index = *(tab->index);
  79.           tmp = tmp->next;
  80.         }
  81.         ln++;
  82.         off++;
  83.         (*(tab->index))++;
  84.     }
  85.  
  86.     /*
  87.      * Don't continue if we are clearing the display
  88.     */
  89.     if (mode == CLR)
  90.         return;
  91.  
  92.     *lptr = cur;
  93.     if (*lptr != ANULL)
  94.           bytecpy(tab->rec, (*lptr)->rec, tab->size);
  95.     *(tab->index) = idx;
  96. }
  97.  
  98.  
  99. void before_input(dummy, tab, fld)
  100. FIELD *dummy;
  101. struct _table *tab;
  102. struct fldinfx *fld;
  103. {
  104.     short tmpi;
  105.     unsigned long tmpl;
  106.     float tmpf;
  107.     double tmpd;
  108.  
  109.     switch (fld->fldtype)
  110.     {
  111.    case CHRTYP :  /* Don't copy - Use the buffer directly */
  112.     case MEMTYP :
  113.         dummy->fbuff = tab->rec + fld->fldstart;
  114.         break;
  115.    case INTTYP :
  116.         bytecpy((char *)&tmpi, tab->rec + fld->fldstart, sizeof(short));
  117.           sprintf(dummy->fbuff, "%d", tmpi);
  118.         break;
  119.    case LNGTYP :
  120.         bytecpy((char *)&tmpl, tab->rec + fld->fldstart, sizeof(long));
  121.           sprintf(dummy->fbuff, "%lu", tmpl);
  122.         break;
  123.    case FLTTYP :
  124.         bytecpy((char *)&tmpf, tab->rec + fld->fldstart, sizeof(float));
  125.         f_to_a(dummy->fbuff, tmpf, length_mask(dummy));
  126.         break;
  127.    case DBLTYP :
  128.         bytecpy((char *)&tmpd, tab->rec + fld->fldstart, sizeof(double));
  129.         f_to_a(dummy->fbuff, tmpd, length_mask(dummy));
  130.         break;
  131.    case DATTYP :
  132.         switch (fld->fldlen)
  133.         {
  134.         case  6 :
  135.               strcpy(dummy->fbuff, ltocon(dstrtol(tab->rec + fld->fldstart, dummy->fmask), dummy->fmask, 1));
  136.             break;
  137.         default :
  138.             bytecpy((char *)&tmpl, tab->rec + fld->fldstart, sizeof(long));
  139.               strcpy(dummy->fbuff, ltocon(tmpl, dummy->fmask, 1));
  140.         }
  141.         break;
  142.     }
  143. }
  144.  
  145.  
  146. void after_input(dummy, tab, fld)
  147. FIELD *dummy;
  148. struct _table *tab;
  149. struct fldinfx *fld;
  150. {
  151.     short tmpi;
  152.     unsigned long tmpl;
  153.     float tmpf;
  154.     double tmpd;
  155.  
  156.     switch (fld->fldtype)
  157.     {
  158.    case CHRTYP :   /* No Need to Copy - Buffer used directly */
  159.     case MEMTYP :
  160.         break;
  161.    case INTTYP :
  162.         tmpi = atoi(dummy->fbuff);
  163.         bytecpy(tab->rec + fld->fldstart, (char *)&tmpi, sizeof(short));
  164.         break;
  165.    case LNGTYP :
  166.         tmpl = atol(dummy->fbuff);
  167.         bytecpy(tab->rec + fld->fldstart, (char *)&tmpl, sizeof(long));
  168.         break;
  169.    case FLTTYP :
  170.         tmpf = (float) atof(dummy->fbuff);
  171.         bytecpy(tab->rec + fld->fldstart, (char *)&tmpf, sizeof(float));
  172.         break;
  173.    case DBLTYP :
  174.         tmpd = atof(dummy->fbuff);
  175.         bytecpy(tab->rec + fld->fldstart, (char *)&tmpd, sizeof(double));
  176.         break;
  177.    case DATTYP :
  178.         switch (fld->fldlen)
  179.         {
  180.         case  6 :
  181.             bytecpy(tab->rec + fld->fldstart, ltocon(dstrtol(dummy->fbuff, dummy->fmask), dummy->fmask, 1), 6);
  182.             break;
  183.         default :
  184.             tmpl = dstrtol(dummy->fbuff, dummy->fmask);
  185.             bytecpy(tab->rec + fld->fldstart, (char *)&tmpl, sizeof(long));
  186.         }
  187.         break;
  188.     }
  189. }
  190.  
  191.  
  192. void table_defaults(tab)
  193. struct _table *tab;
  194. {
  195.    tab->inp_fn    = (int (*)())0;
  196.    tab->add_fn    = (int (*)())0;
  197.    tab->chg_fn    = (int (*)())0;
  198.    tab->dsp_fn    = VNULL;
  199.    tab->key_fn    = VNULL;
  200.    tab->sel_fn    = VNULL;
  201.    tab->extra_fn  = VNULL;
  202.    tab->goto_fn   = (int (*)())0;
  203.     tab->query_box = TRUE;
  204.     tab->messages  = TRUE;
  205.     tab->auto_exit = FALSE;
  206.     tab->no_menus  = FALSE;
  207.     tab->tp        = FALSE;
  208. }
  209.  
  210.