00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <cstring>
00026
00027 #include "global.h"
00028 #include "stack.h"
00029
00030
00031 #define stacksize 10000
00032
00033 char* stackpointer = NULL;
00034 int stackofs = 0;
00035
00036 const int magic = 0x12345678;
00037
00038 void push_data(char * daten,
00039 int size)
00040 {
00041 memcpy(stackpointer+stackofs, daten, size);
00042 stackofs+=size;
00043 }
00044
00045
00046
00047 void pop_data(char * daten,
00048 int size)
00049 {
00050 if (stackofs < size)
00051 throw fatalstackerror();
00052
00053 stackofs-=size;
00054 memcpy(daten, stackpointer + stackofs, size);
00055 }
00056
00057
00058 void pushdata(char * daten,
00059 int size)
00060 {
00061 if ( !stackpointer ) {
00062 stackpointer = new char [ stacksize ];
00063 stackofs = 0;
00064 }
00065 push_data ( daten, size );
00066 push_data ( (char*) &magic, sizeof ( magic ));
00067 }
00068
00069
00070 void popdata(char * daten,
00071 int size)
00072 {
00073 int m;
00074 pop_data ( (char*) &m, sizeof ( m ));
00075 if ( m != magic )
00076 throw fatalstackerror();
00077 pop_data ( daten, size );
00078 }
00079
00080
00081 int stackfree(void)
00082 {
00083 return ( stacksize - stackofs);
00084 }
00085