00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __TOYMEM_INTERNAL_H__
00012 #define __TOYMEM_INTERNAL_H__
00013
00014 #ifdef __cplusplus
00015 extern "C" {
00016 #endif
00017
00029 #define ERR_PREFIX "******* ERROR: "
00030
00031 #define LINE_RULE "+--------------------------------------------------\n"
00032
00033 #define LINE_PREFIX "| "
00034
00035 #define LINE_NUMBER_FORMAT "%4d"
00036
00037 #define PRINT_ERROR(error) if(error!=ERR_UNKNOWN) printf(ERR_PREFIX"%s\n",ErrMessages[error])
00038
00039
00041 extern const char *ErrMessages[];
00043 ErrMessage_t TMM_StoreInteger(ToyMM *tm,int process,int addr,int val);
00045 ErrMessage_t TMM_StoreString(ToyMM *tm, int process, int addr, const char *str);
00047 ErrMessage_t TMM_StoreHeapInteger(ToyMM *tm, int process, int addr, int value);
00049 ErrMessage_t TMM_StoreHeapString(ToyMM *tm, int process, int addr, const char *str);
00051 ErrMessage_t TMM_PrintProcessTable(ToyMM *tm, int process);
00053 ErrMessage_t TMM_PrintProcessMemory(ToyMM *tm, int process);
00055 ErrMessage_t TMM_TerminateProcess(ToyMM *tm, int process);
00057 ErrMessage_t TMM_PrintAllMemory(ToyMM *tm);
00059 ErrMessage_t TMM_AllocateHeap(ToyMM *tm, int process, int size);
00061 ErrMessage_t TMM_ReallocateHeap(ToyMM *tm, int process, int addr, int size);
00063 ErrMessage_t TMM_FreeHeap(ToyMM *tm, int process, int addr);
00065 ErrMessage_t TMM_PrintHeap(ToyMM *tm, int process);
00069 ErrMessage_t TMM_AllocateSegmentAt(ToyMM *tmm, int pos, int size);
00070
00072 ErrMessage_t TMM_AllocateProcessAt(ToyMM *tm,int pID, int addr,int segs, int sizes[]);
00073
00075 int TMM_AllocateSegment(ToyMM *tmm, int size);
00076
00078 ErrMessage_t TMM_FreeSegment(ToyMM *tmm, int pos, int size);
00079
00081 int TMM_FindFreeMem(ToyMM *tmm, int size);
00082
00084 ErrMessage_t TMM_CopyMem(ToyMM *tmm, int destaddr, int srcaddr, int len);
00086 ErrMessage_t TMM_MarkMemEmpty(ToyMM *tmm,int addr, int len);
00087
00089 void TMM_PrintMem(ToyMM *tmm, int addr);
00090
00092 struct Process *TMM_GetProcess(ToyMM *tmm, int process);
00093
00094
00095
00096 int TMM_GetSegmentAddr(ToyMM *tm, int process, SegType_e seg);
00097
00098 struct SegList *TMM_GetSegmentNode(ToyMM *tm, int process, SegType_e seg);
00099
00100
00101
00102 #ifdef __cplusplus
00103 }
00104 #endif
00105
00106 #endif
00107