00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "dthdr.h"
00018
00019 #ifdef DMALLOC
00020 #include "dmalloc.h"
00021 #endif
00022
00023
00024
00025
00026
00027 #if __STD_C
00028 int dtclose(reg Dt_t * dt)
00029 #else
00030 int dtclose(dt)
00031 reg Dt_t *dt;
00032 #endif
00033 {
00034 if (dt->nview > 0)
00035 return -1;
00036
00037 if (dt->view)
00038 dtview(dt, NIL(Dt_t *));
00039
00040
00041 if (dt->disc->eventf &&
00042 (*dt->disc->eventf) (dt, DT_CLOSE, NIL(Void_t *), dt->disc) < 0)
00043 return -1;
00044
00045
00046 (void) (*(dt->meth->searchf)) (dt, NIL(Void_t *), DT_CLEAR);
00047 if (dtsize(dt) > 0)
00048 return -1;
00049
00050 if (dt->data->ntab > 0)
00051 (*dt->memoryf) (dt, (Void_t *) dt->data->htab, 0, dt->disc);
00052 (*dt->memoryf) (dt, (Void_t *) dt->data, 0, dt->disc);
00053
00054 free((Void_t *) dt);
00055
00056 return 0;
00057 }