Branch data Line data Source code
1 : : #include <assert.h> 2 : : #include <signal.h> 3 : : #include <stdio.h> 4 : : #include <stdlib.h> 5 : : #ifdef __VMS 6 : : #include <starlet.h> 7 : : #endif 8 : : 9 : : #define DIMLIB 10 : : #include <dim_core.hxx> 11 : : #include <dim.hxx> 12 : : 13 : : int DimCore::inCallback = 0; 14 : : int DimUtil::itsBufferSize = 0; 15 : : char *DimUtil::itsBuffer = (char *)0; 16 : : 17 : : extern "C" { 18 : 0 : static void timer_user_routine(void *tp) 19 : : { 20 : 0 : DimTimer *t = (DimTimer *)tp; 21 : 0 : DimCore::inCallback = 1; 22 : 0 : t->firedFlag = 1; 23 : 0 : t->runningFlag = 0; 24 : 0 : t->timerHandler(); 25 : 0 : DimCore::inCallback = 0; 26 : 0 : } 27 : : } 28 : : 29 : 0 : int DimTimer::start(int time) 30 : : { 31 : 0 : if(runningFlag) 32 : 0 : return 0; 33 : 0 : runningFlag = 1; 34 : 0 : firedFlag = 0; 35 : 0 : dtq_start_timer(time, timer_user_routine, this); 36 : 0 : return 1; 37 : : } 38 : : 39 : 0 : int DimTimer::stop() 40 : : { 41 : 0 : firedFlag = 0; 42 : 0 : runningFlag = 0; 43 : 0 : return dtq_stop_timer(this); 44 : : } 45 : : 46 : 10 : DimTimer::DimTimer() 47 : : { 48 : 10 : firedFlag = 0; 49 : 10 : runningFlag = 0; 50 : 10 : } 51 : : 52 : 0 : DimTimer::DimTimer(int time) 53 : : { 54 : 0 : firedFlag = 0; 55 : 0 : runningFlag = 0; 56 : 0 : start(time); 57 : 0 : } 58 : : 59 : 10 : DimTimer::~DimTimer() 60 : : { 61 : 10 : if(runningFlag) 62 : 0 : stop(); 63 : 10 : } 64 : : 65 : : // Threads 66 : : 67 : : extern "C" { 68 : 0 : static void thread_user_routine(void *tp) 69 : : { 70 : 0 : DimThread *t = (DimThread *)tp; 71 : : // DimCore::inCallback = 1; 72 : : // t->firedFlag = 1; 73 : : // t->runningFlag = 0; 74 : 0 : t->threadHandler(); 75 : 0 : t->itsId = 0; 76 : : // DimCore::inCallback = 0; 77 : 0 : } 78 : : } 79 : : 80 : 0 : DimThread::DimThread() 81 : : { 82 : : // start(); 83 : 0 : itsId = 0; 84 : 0 : } 85 : : 86 : 0 : DimThread::~DimThread() 87 : : { 88 : : // if(itsId) 89 : : // stop(); 90 : 0 : } 91 : : 92 : 0 : int DimThread::start() 93 : : { 94 : 0 : if(!itsId) 95 : : { 96 : 0 : itsId = (long)dim_start_thread(thread_user_routine, this); 97 : 0 : return 1; 98 : : } 99 : 0 : return 0; 100 : : } 101 : : /* 102 : : int DimThread::stop() 103 : : { 104 : : int ret = dim_stop_thread(itsId); 105 : : itsId = 0; 106 : : return ret; 107 : : } 108 : : */ 109 : : 110 : 0 : DimUtil::DimUtil() 111 : : { 112 : 0 : } 113 : : 114 : 0 : DimUtil::~DimUtil() 115 : : { 116 : 0 : } 117 : : 118 : 0 : char *DimUtil::getEnvVar(char *name) 119 : : { 120 : : int size; 121 : : 122 : 0 : size = dim_get_env_var(name, 0, 0); 123 : 0 : if(!size) 124 : 0 : return (char *)0; 125 : 0 : if((itsBufferSize < size ) && (itsBufferSize != 0)) 126 : : { 127 : 0 : delete[] itsBuffer; 128 : 0 : itsBufferSize = 0; 129 : : } 130 : 0 : if(!itsBufferSize) 131 : : { 132 : 0 : itsBuffer = new char[size]; 133 : 0 : itsBufferSize = size; 134 : : } 135 : 0 : dim_get_env_var(name, itsBuffer, itsBufferSize); 136 : 0 : return itsBuffer; 137 : : }