"Fossies" - the Fresh Open Source Software Archive

Member "mapm_4.9.5a/mapmstck.c" (21 Feb 2010, 3913 Bytes) of package /linux/misc/old/mapm-4.9.5a.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "mapmstck.c" see the Fossies "Dox" file reference documentation.

    1 
    2 /* 
    3  *  M_APM  -  mapmstck.c
    4  *
    5  *  Copyright (C) 1999 - 2007   Michael C. Ring
    6  *
    7  *  Permission to use, copy, and distribute this software and its
    8  *  documentation for any purpose with or without fee is hereby granted,
    9  *  provided that the above copyright notice appear in all copies and
   10  *  that both that copyright notice and this permission notice appear
   11  *  in supporting documentation.
   12  *
   13  *  Permission to modify the software is granted. Permission to distribute
   14  *  the modified code is granted. Modifications are to be distributed by
   15  *  using the file 'license.txt' as a template to modify the file header.
   16  *  'license.txt' is available in the official MAPM distribution.
   17  *
   18  *  This software is provided "as is" without express or implied warranty.
   19  */
   20 
   21 /*
   22  *      $Id: mapmstck.c,v 1.11 2007/12/03 01:58:05 mike Exp $
   23  *
   24  *      This file contains the stack implementation for using 
   25  *  local M_APM variables.
   26  *
   27  *      $Log: mapmstck.c,v $
   28  *      Revision 1.11  2007/12/03 01:58:05  mike
   29  *      Update license
   30  *
   31  *      Revision 1.10  2003/07/21 20:39:38  mike
   32  *      Modify error messages to be in a consistent format.
   33  *
   34  *      Revision 1.9  2003/03/31 21:49:08  mike
   35  *      call generic error handling function
   36  *
   37  *      Revision 1.8  2002/11/03 22:42:05  mike
   38  *      Updated function parameters to use the modern style
   39  *
   40  *      Revision 1.7  2002/05/17 22:05:00  mike
   41  *      the stack is now dynamically allocated and will grow
   42  *      at run-time if needed
   43  *
   44  *      Revision 1.6  2001/07/16 19:47:04  mike
   45  *      add function M_free_all_stck
   46  *
   47  *      Revision 1.5  2000/09/23 19:27:52  mike
   48  *      increase stack size for new functionality
   49  *
   50  *      Revision 1.4  1999/07/09 00:04:47  mike
   51  *      tweak stack again
   52  *
   53  *      Revision 1.3  1999/07/09 00:02:24  mike
   54  *      increase stack size for new functions
   55  *
   56  *      Revision 1.2  1999/06/20 21:13:18  mike
   57  *      comment out printf debug and set max stack depth
   58  *
   59  *      Revision 1.1  1999/06/19 20:32:43  mike
   60  *      Initial revision
   61  */
   62 
   63 #include "m_apm_lc.h"
   64 
   65 static  int M_stack_ptr  = -1;
   66 static  int M_last_init  = -1;
   67 static  int M_stack_size = 0;
   68 
   69 static  char    *M_stack_err_msg = "\'M_get_stack_var\', Out of memory";
   70 
   71 static  M_APM   *M_stack_array;
   72 
   73 /****************************************************************************/
   74 void    M_free_all_stck()
   75 {
   76 int k;
   77 
   78 if (M_last_init >= 0)
   79   {
   80    for (k=0; k <= M_last_init; k++)
   81      m_apm_free(M_stack_array[k]);
   82 
   83    M_stack_ptr  = -1;
   84    M_last_init  = -1;
   85    M_stack_size = 0;
   86 
   87    MAPM_FREE(M_stack_array);
   88   }
   89 }
   90 /****************************************************************************/
   91 M_APM   M_get_stack_var()
   92 {
   93 void    *vp;
   94 
   95 if (++M_stack_ptr > M_last_init)
   96   {
   97    if (M_stack_size == 0)
   98      {
   99       M_stack_size = 18;
  100       if ((vp = MAPM_MALLOC(M_stack_size * sizeof(M_APM))) == NULL)
  101         {
  102          /* fatal, this does not return */
  103 
  104          M_apm_log_error_msg(M_APM_FATAL, M_stack_err_msg);
  105         }
  106 
  107       M_stack_array = (M_APM *)vp;
  108      }
  109 
  110    if ((M_last_init + 4) >= M_stack_size)
  111      {
  112       M_stack_size += 12;
  113       if ((vp = MAPM_REALLOC(M_stack_array, 
  114                     (M_stack_size * sizeof(M_APM)))) == NULL)
  115         {
  116          /* fatal, this does not return */
  117 
  118          M_apm_log_error_msg(M_APM_FATAL, M_stack_err_msg);
  119         }
  120 
  121       M_stack_array = (M_APM *)vp;
  122      }
  123 
  124    M_stack_array[M_stack_ptr]     = m_apm_init();
  125    M_stack_array[M_stack_ptr + 1] = m_apm_init();
  126    M_stack_array[M_stack_ptr + 2] = m_apm_init();
  127    M_stack_array[M_stack_ptr + 3] = m_apm_init();
  128 
  129    M_last_init = M_stack_ptr + 3;
  130 
  131    /* printf("M_last_init = %d \n",M_last_init); */
  132   }
  133 
  134 return(M_stack_array[M_stack_ptr]);
  135 }
  136 /****************************************************************************/
  137 void    M_restore_stack(int count)
  138 {
  139 M_stack_ptr -= count;
  140 }
  141 /****************************************************************************/
  142