home *** CD-ROM | disk | FTP | other *** search
/ Alde ADA 1: #1 / CCCC 8804 Volume 1 Number 1 - Alde.iso / C / MISC / FUNC / PROFF.ARC / STACK.C < prev   
Encoding:
C/C++ Source or Header  |  1988-02-21  |  2.3 KB  |  113 lines

  1. #include <stdio.h>
  2. #include "proff.h"
  3.  
  4. struct _proffitem {
  5.    int Xinval;
  6.    int Xrmval;
  7.    int Xoffset;
  8.    int Xlsval;
  9.    int Xplval;
  10.    int Xm1val;
  11.    int Xm2val;
  12.    int Xm3val;
  13.    int Xm4val;
  14.    int Xfill;
  15.    int Xrjust;
  16.  
  17.    char Xcchar;
  18.    char Xgenesc;
  19.    char Xroman;
  20.    char Xbolding;
  21.    char Xpaging;
  22.    char Xautopar;
  23.  
  24.    struct _proffitem *prev;
  25. };
  26.  
  27. static struct _proffitem *head = NULL;
  28. static struct _proffitem *top = NULL;
  29.  
  30. char *pusherr = "save: stack overflow.\n";
  31. char *poperr = "restore: stack underflow.\n";
  32.  
  33. /*
  34.  * save - save proff parameters
  35.  *
  36.  */
  37. save()
  38. {
  39.    struct _proffitem *sp;
  40.    char *malloc();
  41.  
  42.    if ((sp = (struct _proffitem *) malloc(sizeof(*sp))) == NULL)
  43.    {
  44.       fprintf(stderr, pusherr);
  45.       return (FALSE);
  46.    }
  47.    else
  48.    {
  49.       p_memoryus += sizeof(struct _proffitem);
  50.       if (head == NULL)
  51.       {                                /* first element in stack */
  52.          head = sp;
  53.          top = NULL;
  54.       }
  55.  
  56.       sp->Xinval = inval;
  57.       sp->Xrmval = rmval;
  58.       sp->Xoffset = offset;
  59.       sp->Xlsval = lsval;
  60.       sp->Xplval = plval;
  61.       sp->Xm1val = m1val;
  62.       sp->Xm2val = m2val;
  63.       sp->Xm3val = m3val;
  64.       sp->Xm4val = m4val;
  65.       sp->Xfill = fill;
  66.       sp->Xrjust = rjust;
  67.       sp->Xcchar = cchar;
  68.       sp->Xgenesc = genesc;
  69.       sp->Xroman = roman;
  70.       sp->Xbolding = bolding;
  71.       sp->Xpaging = paging;
  72.       sp->Xautopar = autopar;
  73.  
  74.       sp->prev = top;
  75.       top = sp;
  76.    }
  77.    return (TRUE);
  78. }
  79.  
  80. restore()
  81. {
  82.    struct _proffitem *sp;
  83.  
  84.    if (top != NULL)
  85.    {
  86.       inval = top->Xinval;
  87.       rmval = top->Xrmval;
  88.       offset = top->Xoffset;
  89.       lsval = top->Xlsval;
  90.       plval = top->Xplval;
  91.       m1val = top->Xm1val;
  92.       m2val = top->Xm2val;
  93.       m3val = top->Xm3val;
  94.       m4val = top->Xm4val;
  95.       fill = top->Xfill;
  96.       rjust = top->Xrjust;
  97.       cchar = top->Xcchar;
  98.       genesc = top->Xgenesc;
  99.       roman = top->Xroman;
  100.       bolding = top->Xbolding;
  101.       paging = top->Xpaging;
  102.       autopar = top->Xautopar;
  103.  
  104.       sp = top->prev;
  105.       free(top);
  106.       p_memoryus -= sizeof(struct _proffitem);
  107.       if ((top = sp) == NULL)
  108.          head = NULL;
  109.    }
  110.    else
  111.       fprintf(stderr, poperr);
  112. }
  113.