#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include #include #include "../sh.h" ptSh sh; int semId; void semLock(int lock) { static struct sembuf sb; sb.sem_num = 0; sb.sem_flg = SEM_UNDO; if (lock) { sb.sem_op = -1; /* set to allocate resource */ } else { sb.sem_op = 1; /* free resource */ } if (semop(semId, &sb, 1) == -1) { perror("semop"); exit(1); } } MODULE = PX14Mon PACKAGE = PX14Mon int initShm() PROTOTYPE: CODE: key_t shKey=0x76736962; // 'VSIB' key_t semKey=0x76736963; int shId; // Connect to semiphore used to lock shared memory semId = semget(semKey, 1, 0); if (semId==-1) { perror("semget failed"); exit(1); } semLock(1); shId = shmget(shKey, 0, 0); if (shId==-1) { perror("shmget failed"); exit(1); } sh = (ptSh)shmat(shId, NULL, 0); if (sh == (void *)-1 ) { perror("shmat failed"); exit(1); } semLock(0); RETVAL = 0; OUTPUT: RETVAL char * getCurrentFile() PROTOTYPE: CODE: semLock(1); RETVAL = sh->currentfile; semLock(0); OUTPUT: RETVAL char * getLastFile() PROTOTYPE: CODE: semLock(1); RETVAL = sh->lastfile; semLock(0); OUTPUT: RETVAL char * getRecPath() PROTOTYPE: CODE: semLock(1); RETVAL = sh->recpath; semLock(0); OUTPUT: RETVAL char * getExperiment() PROTOTYPE: CODE: semLock(1); RETVAL = sh->exper; semLock(0); OUTPUT: RETVAL int getRecording() PROTOTYPE: CODE: semLock(1); RETVAL = sh->recording; semLock(0); OUTPUT: RETVAL int getMark5b() PROTOTYPE: CODE: semLock(1); RETVAL = sh->mark5b; semLock(0); OUTPUT: RETVAL int getInvert() PROTOTYPE: CODE: semLock(1); RETVAL = sh->invert; semLock(0); OUTPUT: RETVAL int getRoundstart() PROTOTYPE: CODE: semLock(1); RETVAL = sh->roundstart; semLock(0); OUTPUT: RETVAL int getFilesize() PROTOTYPE: CODE: semLock(1); RETVAL = sh->filesize; semLock(0); OUTPUT: RETVAL int getRectime() PROTOTYPE: CODE: semLock(1); RETVAL = sh->recordtime; semLock(0); OUTPUT: RETVAL int getBufsize() PROTOTYPE: CODE: semLock(1); RETVAL = sh->bufsize; semLock(0); OUTPUT: RETVAL int getBufdone() PROTOTYPE: CODE: semLock(1); RETVAL = sh->bufdone; semLock(0); OUTPUT: RETVAL int getRecsec() PROTOTYPE: CODE: semLock(1); RETVAL = sh->recsec; semLock(0); OUTPUT: RETVAL int getStarttime() PROTOTYPE: CODE: semLock(1); RETVAL = sh->starttime; semLock(0); OUTPUT: RETVAL int getFiletime() PROTOTYPE: CODE: semLock(1); RETVAL = sh->filetime; semLock(0); OUTPUT: RETVAL double getTimeoffset() PROTOTYPE: CODE: semLock(1); RETVAL = sh->timeoffset; semLock(0); OUTPUT: RETVAL float getRate() PROTOTYPE: CODE: semLock(1); RETVAL = sh->rate; semLock(0); OUTPUT: RETVAL int getBits() PROTOTYPE: CODE: semLock(1); RETVAL = sh->bits; semLock(0); OUTPUT: RETVAL int getChans() PROTOTYPE: CODE: semLock(1); RETVAL = sh->nchan; semLock(0); OUTPUT: RETVAL float getBandwidth() PROTOTYPE: CODE: semLock(1); RETVAL = sh->bandwidth; semLock(0); OUTPUT: RETVAL float getStddev(i) int i PROTOTYPE: $ CODE: semLock(1); RETVAL = sh->stddev[i]; semLock(0); OUTPUT: RETVAL