#ifdef __cplusplus extern "C" { #endif #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #ifdef __cplusplus } #endif #include #include #include static int constant(name) char *name; { errno = 0; switch (*name) { case 'A': break; case 'B': break; case 'C': break; case 'D': break; case 'E': break; case 'F': if (strEQ(name, "FAM_DEBUG_OFF")) #ifdef FAM_DEBUG_OFF return FAM_DEBUG_OFF; #else goto not_there; #endif if (strEQ(name, "FAM_DEBUG_ON")) #ifdef FAM_DEBUG_ON return FAM_DEBUG_ON; #else goto not_there; #endif if (strEQ(name, "FAM_DEBUG_VERBOSE")) #ifdef FAM_DEBUG_VERBOSE return FAM_DEBUG_VERBOSE; #else goto not_there; #endif /* enum FAMCodes--added by hand */ if (strEQ(name, "FAMChanged")) { return FAMChanged; } else if (strEQ(name, "FAMDeleted")) { return FAMDeleted; } else if (strEQ(name, "FAMStartExecuting")) { return FAMStartExecuting; } else if (strEQ(name, "FAMStopExecuting")) { return FAMStopExecuting; } else if (strEQ(name, "FAMCreated")) { return FAMCreated; } else if (strEQ(name, "FAMMoved")) { return FAMMoved; } else if (strEQ(name, "FAMAcknowledge")) { return FAMAcknowledge; } else if (strEQ(name, "FAMExists")) { return FAMExists; } else if (strEQ(name, "FAMEndExist")) { return FAMEndExist; } break; case 'G': break; case 'H': break; case 'I': break; case 'J': break; case 'K': break; case 'L': break; case 'M': break; case 'N': break; case 'O': break; case 'P': break; case 'Q': break; case 'R': break; case 'S': break; case 'T': break; case 'U': break; case 'V': break; case 'W': break; case 'X': break; case 'Y': break; case 'Z': break; case '_': break; } errno = EINVAL; return 0; not_there: errno = ENOENT; return 0; } static char *famerror() { return FAMErrno ? (char *) FamErrlist[FAMErrno] : ""; } static void famwarn(code, what) int code; char *what; { if (code==-1) warn("Sys::Gamin: %s: %s", what, FAMErrno ? FamErrlist[FAMErrno] : errno ? strerror(errno) : "(unidentified)"); } MODULE = Sys::Gamin PACKAGE = Sys::Gamin PROTOTYPES: ENABLE int constant(name) char * name char * famerror() MODULE = Sys::Gamin PACKAGE = FAMConnectionPtr PREFIX = FAM PROTOTYPES: ENABLE # int # FAMOpen(fc) # FAMConnection * fc int FAMOpen2(fc, appName) FAMConnection * fc char * appName int FAMClose(fc) FAMConnection * fc # int # FAMMonitorDirectory(fc, filename, fr, userData) # FAMConnection * fc # char * filename # FAMRequest * fr # void * userData # # int # FAMMonitorFile(fc, filename, fr, userData) # FAMConnection * fc # char * filename # FAMRequest * fr # void * userData int FAMMonitorCollection(fc, filename, fr, userData, depth, mask) FAMConnection * fc char * filename FAMRequest * fr void * userData int depth char * mask int FAMMonitorDirectory2(fc, filename, fr) FAMConnection * fc char * filename FAMRequest * fr int FAMMonitorFile2(fc, filename, fr) FAMConnection * fc char * filename FAMRequest * fr int FAMSuspendMonitor(fc, fr) FAMConnection * fc FAMRequest * fr int FAMResumeMonitor(fc, fr) FAMConnection * fc FAMRequest * fr int FAMCancelMonitor(fc, fr) FAMConnection * fc FAMRequest * fr int FAMNextEvent(fc, fe) FAMConnection * fc FAMEvent * fe int FAMPending(fc) FAMConnection * fc MODULE = Sys::Gamin PACKAGE = FAMConnectionPtr PREFIX = fc_ PROTOTYPES: ENABLE void fc_DESTROY(fc) FAMConnection * fc CODE: # warn("Freeing FAMConnection %p\n", (void *)fc); famwarn(FAMClose(fc), "Closing connection"); Safefree(fc); FAMConnection * fc_new(class) char * class CODE: New(0, RETVAL, 1, FAMConnection); # warn("Created FAMConnection %p\n", (void *)RETVAL); OUTPUT: RETVAL int fc_fd(fc) FAMConnection * fc CODE: RETVAL=FAMCONNECTION_GETFD(fc); OUTPUT: RETVAL MODULE = Sys::Gamin PACKAGE = FAMRequestPtr PREFIX = fr_ PROTOTYPES: ENABLE void fr_DESTROY(fr) FAMRequest * fr CODE: # warn("Freeing FAMRequest %p\n", (void *)fr); Safefree(fr); FAMRequest * fr_new(class) char * class CODE: New(0, RETVAL, 1, FAMRequest); # warn("Created FAMRequest %p\n", (void *)RETVAL); OUTPUT: RETVAL int fr_reqnum(fr) FAMRequest * fr CODE: RETVAL=FAMREQUEST_GETREQNUM(fr); OUTPUT: RETVAL void fr_setreqnum(fr, new) FAMRequest * fr int new CODE: FAMREQUEST_GETREQNUM(fr)=new; MODULE = Sys::Gamin PACKAGE = FAMEventPtr PREFIX = fe_ PROTOTYPES: ENABLE void fe_DESTROY(fe) FAMEvent * fe CODE: # warn("Freeing FAMEvent %p\n", (void *)fe); Safefree(fe); FAMEvent * fe_new(class) char * class CODE: New(0, RETVAL, 1, FAMEvent); # warn("Created FAMEvent %p\n", (void *)RETVAL); OUTPUT: RETVAL # /* # Properly, these next two should inc. the REFCNT of ST(0), once I # figure out how to do something like that, and return the original # object. Until then, we do not want gratuitous freeing. # */ FAMConnection * fe_fc(fe) FAMEvent * fe CODE: New(0, RETVAL, 1, FAMConnection); *RETVAL=*(fe->fc); OUTPUT: RETVAL FAMRequest * fe_fr(fe) FAMEvent * fe CODE: New(0, RETVAL, 1, FAMRequest); *RETVAL=fe->fr; OUTPUT: RETVAL char * fe_hostname(fe) FAMEvent * fe CODE: RETVAL=fe->hostname; OUTPUT: RETVAL char * fe_filename(fe) FAMEvent * fe CODE: RETVAL=fe->filename; OUTPUT: RETVAL FAMCodes fe_code(fe) FAMEvent * fe CODE: RETVAL=fe->code; OUTPUT: RETVAL