CELLP open_f(CELLP args) // ファイルを開く { char type, fname[NAMELEN] = {0}; int i; FILE *lfp = NULL; NUMP np; STR mode; if (args->id != _CELL) { return error(NEA); } if (args->car->id != _ATOM) { return error(IAA); } getfname((STR)fname, (ATOMP)(args->car)); if ((args = args->cdr)->id != _CELL) { mode = (STR)"r"; } else if (args->car->id != _ATOM) { return error(IAA); } else { mode = ((ATOMP)(args->car))->name; } for (i = 3; i < NFILES; ++i) { if (fp[i].ptr == NULL) { switch (*mode) { case 'w': type = WRITEFILE; break; case 'a': type = APPENDFILE; break; default: type = READFILE; } if (*(mode+1) == 'b') { type |= BINF; } lfp = fopen(fname, modestr[type]); if (lfp == NULL) { return error(FNA); } fp[i].mode = type; fp[i].ptr = lfp; np = newnum(); ec; np->value.fix = (long)i; return (CELLP)np; } } return error(TMF); }
void DLLCALL js_PrepareToExecute(JSContext *cx, JSObject *obj, const char *filename, const char* startup_dir) { JSString* str; jsval val; if(JS_GetProperty(cx, obj, "js", &val) && JSVAL_IS_OBJECT(val)) { JSObject* js = JSVAL_TO_OBJECT(val); char dir[MAX_PATH+1]; if(filename!=NULL) { char* p; if((str=JS_NewStringCopyZ(cx, filename)) != NULL) JS_DefineProperty(cx, js, "exec_path", STRING_TO_JSVAL(str) ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY); if((str=JS_NewStringCopyZ(cx, getfname(filename))) != NULL) JS_DefineProperty(cx, js, "exec_file", STRING_TO_JSVAL(str) ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY); SAFECOPY(dir,filename); p=getfname(dir); *p=0; if((str=JS_NewStringCopyZ(cx, dir)) != NULL) JS_DefineProperty(cx, js, "exec_dir", STRING_TO_JSVAL(str) ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY); } if(startup_dir==NULL) startup_dir=""; if((str=JS_NewStringCopyZ(cx, startup_dir)) != NULL) JS_DefineProperty(cx, js, "startup_dir", STRING_TO_JSVAL(str) ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY); } #if defined(_MSC_VER) _set_invalid_parameter_handler(msvc_invalid_parameter_handler); #endif }
void sbbs_t::fileinfo(file_t* f) { char ext[513]; char tmp[512]; char path[MAX_PATH+1]; char fpath[MAX_PATH+1]; uint i,j; for(i=0;i<usrlibs;i++) if(usrlib[i]==cfg.dir[f->dir]->lib) break; for(j=0;j<usrdirs[i];j++) if(usrdir[i][j]==f->dir) break; getfilepath(&cfg,f,path); bprintf(text[FiLib],i+1,cfg.lib[cfg.dir[f->dir]->lib]->lname); bprintf(text[FiDir],j+1,cfg.dir[f->dir]->lname); bprintf(text[FiFilename],getfname(path)); SAFECOPY(fpath,path); fexistcase(fpath); if(strcmp(path,fpath) && strcmp(f->desc,getfname(fpath))) /* Different "actual" filename */ bprintf(text[FiFilename],getfname(fpath)); if(f->size!=-1L) bprintf(text[FiFileSize],ultoac(f->size,tmp)); bprintf(text[FiCredits] ,(cfg.dir[f->dir]->misc&DIR_FREE || !f->cdt) ? "FREE" : ultoac(f->cdt,tmp)); bprintf(text[FiDescription],f->desc); bprintf(text[FiUploadedBy],f->misc&FM_ANON ? text[UNKNOWN_USER] : f->uler); if(f->date) bprintf(text[FiFileDate],timestr(&f->date)); bprintf(text[FiDateUled],timestr(&f->dateuled)); bprintf(text[FiDateDled],f->datedled ? timestr(&f->datedled) : "Never"); bprintf(text[FiTimesDled],f->timesdled); if(f->size!=-1L) bprintf(text[FiTransferTime],sectostr(f->timetodl,tmp)); if(f->altpath) { if(f->altpath<=cfg.altpaths) { if(SYSOP) bprintf(text[FiAlternatePath],cfg.altpath[f->altpath-1]); } else bprintf(text[InvalidAlternatePathN],f->altpath); } CRLF; if(f->misc&FM_EXTDESC) { getextdesc(&cfg,f->dir,f->datoffset,ext); CRLF; putmsg(ext,P_NOATCODES); CRLF; } if(f->size==-1L) bprintf(text[FileIsNotOnline],f->name); if(f->opencount) bprintf(text[FileIsOpen],f->opencount,f->opencount>1 ? "s" : nulstr); }
CELLP load_f(CELLP arg) { FILE *lfp, *bak; char fname[NAMELEN] = {0}; if (arg->id != _CELL) { return error(NEA); } bak = cur_fpi; pushbuf(); for (;;) { if (arg->car->id != _ATOM) { return error(IAA); } getfname((STR)fname, (ATOMP)(arg->car)); fprintf(cur_fpo, "\nloading... %s\n", fname); if ((lfp = fopen(fname, "r")) == NULL) { return error(FNA); } cur_fpi = lfp; toplevel_function(); // トップレベルループを呼んでS式の読み込みと評価を行う fclose(lfp); ec; *txtp = '\0'; if ((arg = arg->cdr)->id != _CELL) { break; } } cur_fpi = bak; return (CELLP)t; }
void DLLCALL delfattach(scfg_t* cfg, smbmsg_t* msg) { char str[MAX_PATH+1]; char str2[MAX_PATH+1]; char *tp,*sp,*p; if(msg->idx.to==0) { /* netmail */ sprintf(str,"%sfile/%04u.out/%s" ,cfg->data_dir,msg->idx.from,getfname(msg->subj)); remove(str); sprintf(str,"%sfile/%04u.out" ,cfg->data_dir,msg->idx.from); rmdir(str); return; } strcpy(str,msg->subj); tp=str; while(1) { p=strchr(tp,' '); if(p) *p=0; sp=strrchr(tp,'/'); /* sp is slash pointer */ if(!sp) sp=strrchr(tp,'\\'); if(sp) tp=sp+1; sprintf(str2,"%sfile/%04u.in/%s" /* str2 is path/fname */ ,cfg->data_dir,msg->idx.to,tp); remove(str2); if(!p) break; tp=p+1; } sprintf(str,"%sfile/%04u.in",cfg->data_dir,msg->idx.to); rmdir(str); /* remove the dir if it's empty */ }
int usage(const char* fname) { printf("usage: %s [ini file] [options]\n" "\nOptions:" "\n" "\n-null No 'AT commands' sent to modem" "\n-com <device> Specify communications port device" "\n-baud <rate> Specify baud rate for communications port" "\n-live [handle] Communications port is already open/connected" "\n-nohangup Do not hangup (drop DTR) after call" "\n-host <addr | name> Specify TCP server hostname or IP address" "\n-port <number> Specify TCP port number" "\n-debug Enable debug log output" #if defined(_WIN32) "\n\nNT Service\n" "\n-install install and enable NT service (%s)" "\n-service run as an NT service (background execution)" "\n-remove remove NT service" "\n-enable enable NT service (auto-start during boot)" "\n-disable disable NT service" #endif "\n" ,getfname(fname) ,NAME); return 0; }
/* * NAME: cmdbuf->read() * DESCRIPTION: insert a file in the current edit buffer */ int cb_read(cmdbuf *cb) { char buffer[STRINGSZ]; io iob; not_in_global(cb); if (!getfname(cb, buffer)) { if (cb->fname[0] == '\0') { error("No current filename"); } /* read current file, by default. I don't know why, but ex has it that way. */ strcpy(buffer, cb->fname); } cb_do(cb, cb->first); output("\"%s\" ", buffer); if (!io_load(cb->edbuf, buffer, cb->first, &iob)) { error("is unreadable"); } io_show(&iob); cb->edit++; cb->cthis = cb->first + iob.lines; return 0; }
/* * NAME: cmdbuf->file() * DESCRIPTION: get/set the file name & current line, etc. */ int cb_file(cmdbuf *cb) { not_in_global(cb); if (getfname(cb, cb->fname)) { /* file name is changed: mark the file as "not edited" */ cb->flags |= CB_NOIMAGE; } /* give statistics */ if (cb->fname[0] == '\0') { output("No file"); } else { output("\"%s\"", cb->fname); } if (cb->flags & CB_NOIMAGE) { output(" [Not edited]"); } if (cb->edit > 0) { output(" [Modified]"); } output(" line %ld of %ld --%d%%--\012", /* LF */ (long) cb->cthis, (long) cb->edbuf->lines, (cb->edbuf->lines == 0) ? 0 : (int) ((100 * cb->cthis) / cb->edbuf->lines)); return 0; }
/* Open the output file, initialize the output stream, and return the file's length. If reload is true, first truncate any preexisting file */ unsigned long Download::openfile(char *url, bool reload, ofstream &fout, char *name) { char fname[MAX_FILENAME_SIZE]; if(!getfname(url, fname)) throw DLExc("File name error"); for(int i = 0; i < 5 && (!fout.is_open() || !fout); ++i) { if(!reload) fout.open(fname, ios::binary | ios::out | ios::app | ios::ate); else fout.open(fname, ios::binary | ios::out | ios::trunc); if(!fout.is_open() || !fout) { char buff[MAX_FILENAME_SIZE]; strcpy(buff, fname); sprintf(fname, "%s-%u", buff, time(0)-i); fout.clear(); } } if(!fout) throw DLExc("Could not open TEMP file!"); strcpy(name, fname); // get current file length return fout.tellp(); }
void subfunc2(void) { char fname[MAXSTRLEN]; strcpy(fname, FNAME); if (getfname ("File to browse:", fname, 50)) showfile(fname); }
void sbbs_t::errormsg(int line, const char *source, const char* action, const char *object ,ulong access, const char *extinfo) { const char* src; char str[2048]; /* prevent recursion */ if(errormsg_inside) return; errormsg_inside=true; /* Don't log path to source code */ src=getfname(source); safe_snprintf(str,sizeof(str),"ERROR %d (%s) " #ifdef _WIN32 "(WinError %u) " #endif "in %s line %u %s \"%s\" access=%ld %s%s" ,errno,STRERROR(errno) #ifdef _WIN32 ,GetLastError() #endif ,src, line, action, object, access ,extinfo==NULL ? "":"info=" ,extinfo==NULL ? "":extinfo); if(online==ON_LOCAL) eprintf(LOG_ERR,"%s",str); else { int savatr=curatr; lprintf(LOG_ERR,"Node %d !%s",cfg.node_num, str); attr(cfg.color[clr_err]); bprintf("\7\r\n!ERROR %s %s\r\n", action, object); /* tell user about error */ bputs("\r\nThe sysop has been notified.\r\n"); pause(); attr(savatr); CRLF; } safe_snprintf(str,sizeof(str),"ERROR %s %s", action, object); if(cfg.node_num>0) { getnodedat(cfg.node_num,&thisnode,1); if(thisnode.errors<UCHAR_MAX) thisnode.errors++; criterrs=thisnode.errors; putnodedat(cfg.node_num,&thisnode); } now=time(NULL); if(logfile_fp!=NULL) { if(logcol!=1) fprintf(logfile_fp,"\r\n"); fprintf(logfile_fp,"!! %s\r\n",str); logcol=1; fflush(logfile_fp); } errormsg_inside=false; }
int DLLCALL glob(const char *pattern, int flags, void* unused, glob_t* glob) { struct _finddata_t ff; long ff_handle; size_t found=0; char path[MAX_PATH+1]; char* p; char** new_pathv; if(!(flags&GLOB_APPEND)) { glob->gl_pathc=0; glob->gl_pathv=NULL; } ff_handle=_findfirst((char*)pattern,&ff); while(ff_handle!=-1) { if((flags&GLOB_PERIOD || (ff.name[0]!='.' && !(ff.attrib&_A_HIDDEN))) && (!(flags&GLOB_ONLYDIR) || ff.attrib&_A_SUBDIR)) { if((new_pathv=(char**)realloc(glob->gl_pathv ,(glob->gl_pathc+1)*sizeof(char*)))==NULL) { globfree(glob); return(GLOB_NOSPACE); } glob->gl_pathv=new_pathv; /* build the full pathname */ SAFECOPY(path,pattern); p=getfname(path); *p=0; strcat(path,ff.name); if((glob->gl_pathv[glob->gl_pathc]=(char*)malloc(strlen(path)+2))==NULL) { globfree(glob); return(GLOB_NOSPACE); } strcpy(glob->gl_pathv[glob->gl_pathc],path); if(flags&GLOB_MARK && ff.attrib&_A_SUBDIR) strcat(glob->gl_pathv[glob->gl_pathc],"/"); glob->gl_pathc++; found++; } if(_findnext(ff_handle, &ff)!=0) { _findclose(ff_handle); ff_handle=-1; } } if(found==0) return(GLOB_NOMATCH); if(!(flags&GLOB_NOSORT)) { qsort(glob->gl_pathv,found,sizeof(char*),glob_compare); } return(0); /* success */ }
char* DLLCALL getfext(const char* path) { char *fname; char *fext; fname=getfname(path); fext=strrchr(fname,'.'); if(fext==NULL || fext==fname) return(NULL); return(fext); }
int loadmap(void) { FILE *fp; char fname[MAXFILENAMELEN]=""; if (!getfname(5,7,"Enter map file to load:",ext,fname)) return(FALSE); fp=fopen(fname,"rb"); // must exist because getfname searches for it. fread( (char*) &map,sizeof(mapstruct),MLEN*MWID,fp); fread( (char*) &mm,sizeof(monmapstruct),LASTMM,fp); fclose(fp); strcpy((char*)mapcurfile,(char*)fname); return(TRUE); }
void Zwrite_file(void) { char path[PATHMAX + 1]; const char *prompt = Argp ? "Write Region: " : "Write File: "; Arg = 0; *path = '\0'; if (getfname(prompt, path) == 0) { free(Curbuff->fname); Curbuff->fname = strdup(path); Curbuff->mtime = 0; /* this is no longer valid */ Zsave_file(); Curwdo->modeflags = INVALID; } }
mat_ZZ getbasis(int n,int seed,double bit=10) { initialize(); std::ostringstream fname; fname << getfname(n,seed,bit,0); mat_ZZ L; if (FileExists(fname)==true) { LoadLattice(L,fname.str()); } else { gen_svpchallenge(L,n,to_ZZ(seed),bit); #ifdef _allow_cachefiles SaveLattice(L,fname.str()); #endif } return L; }
bool filesave(void) { char path[PATHMAX + 1]; Arg = 0; if (Curbuff->fname == NULL) { *path = '\0'; if (getfname("File Name: ", path) == 0) Curbuff->fname = strdup(path); else return false; Curwdo->modeflags = INVALID; } putpaw("Writing %s", lastpart(Curbuff->fname)); return zwritefile(Curbuff->fname); }
BOOL mimeattach(SOCKET socket, char* boundary, char* pathfile) { char* fname = getfname(pathfile); sockprintf(socket,"--%s",boundary); sockprintf(socket,"Content-Type: application/octet-stream;"); sockprintf(socket," name=\"%s\"",fname); sockprintf(socket,"Content-Transfer-Encoding: base64"); sockprintf(socket,"Content-Disposition: attachment;"); sockprintf(socket," filename=\"%s\"",fname); sockprintf(socket,""); if(!base64out(socket,pathfile)) return(FALSE); sockprintf(socket,""); return(TRUE); }
static int get_findfile(const char *prompt) { struct stat sbuf; if (!*Fname) zgetcwd(Fname, PATHMAX); else if (stat(Fname, &sbuf) == 0) /* If Fname is a file, convert to directory */ if (sbuf.st_mode & S_IFREG) { char *p = strrchr(Fname, '/'); if (p) *(p + 1) = '\0'; } return getfname(prompt, Fname); }
/* * NAME: cmdbuf->write() * DESCRIPTION: write a range of lines to a file */ int cb_write(cmdbuf *cb) { char buffer[STRINGSZ]; bool append; io iob; not_in_global(cb); if (strncmp(cb->cmd, ">>", 2) == 0) { append = TRUE; cb->cmd = skipst(cb->cmd + 2); } else { append = FALSE; } /* check if write can be done */ if (!getfname(cb, buffer)) { if (cb->fname[0] == '\0') { error("No current filename"); } strcpy(buffer, cb->fname); } if (strcmp(buffer, cb->fname) == 0) { if (cb->first == 1 && cb->last == cb->edbuf->lines) { if ((cb->flags & (CB_NOIMAGE|CB_EXCL)) == CB_NOIMAGE) { error("File is changed (use w! to override)"); } } else if (!(cb->flags & CB_EXCL)) { error("Use w! to write partial buffer"); } } output("\"%s\" ", buffer); if (!io_save(cb->edbuf, buffer, cb->first, cb->last, append, &iob)) { error("write failed"); } io_show(&iob); if (cb->first == 1 && cb->last == cb->edbuf->lines) { /* file is now perfect image of editbuffer in memory */ cb->flags &= ~CB_NOIMAGE; cb->edit = 0; } return 0; }
mat_ZZ getlllbasis(int n,int seed,double bit=10) { initialize(); std::ostringstream fname; fname << getfname(n,seed,bit,1); mat_ZZ L; if (FileExists(fname)==true) { LoadLattice(L,fname.str()); } else { L = getbasis(n,seed,bit); ::BigLLL(L,0,0.999,VL1); #ifdef _allow_cachefiles SaveLattice(L,fname.str()); #endif } return L; }
// load the contents of 290.rec and store in value_out. Returns 0 on success. // If there is no such file or an error occurs, writes 0 to value_out. bool niku_load(uint32_t *value_out) { FILE *fp; uint8_t buffer[20]; uint32_t *result = (uint32_t *)buffer; int i, j; const char *fname = getfname(); fp = fopen(fname, "rb"); if (!fp) { stat("niku_load: couldn't open file '%s'", fname); if (value_out) *value_out = 0; return 1; } fread(buffer, 20, 1, fp); fclose(fp); for(i=0;i<4;i++) { uint8_t key = buffer[i+16]; j = i * 4; buffer[j] -= key; buffer[j+1] -= key; buffer[j+2] -= key; buffer[j+3] -= (key / 2); } if ((result[0] != result[1]) || \ (result[0] != result[2]) || \ (result[0] != result[3])) { stat("niku_load: value mismatch; '%s' corrupt", fname); if (value_out) *value_out = 0; } else { stat("niku_load: loaded value 0x%x from %s", *result, fname); if (value_out) *value_out = *result; } return 0; }
// save the timestamp in value to 290.rec. bool niku_save(uint32_t value) { uint8_t buf_byte[20]; uint32_t *buf_dword = (uint32_t *)buf_byte; // place values buf_dword[0] = value; buf_dword[1] = value; buf_dword[2] = value; buf_dword[3] = value; // generate keys buf_byte[16] = random(0, 255); buf_byte[17] = random(0, 255); buf_byte[18] = random(0, 255); buf_byte[19] = random(0, 255); // encode each copy for(int i=0;i<4;i++) { uint8_t *ptr = (uint8_t *)&buf_dword[i]; uint8_t key = buf_byte[i+16]; ptr[0] += key; ptr[1] += key; ptr[2] += key; ptr[3] += key / 2; } const char *fname = getfname(); FILE *fp = fopen(fname, "wb"); if (!fp) { staterr("niku_save: failed to open '%s'", fname); return 1; } fwrite(buf_byte, 20, 1, fp); fclose(fp); stat("niku_save: wrote value 0x%08x", value); return 0; }
void DLLCALL _splitpath(const char *path, char *drive, char *dir, char *fname, char *ext) { char* p; ext[0]=0; drive[0]=0; /* no drive letters on Unix */ strcpy(dir,path); /* Optional directory path, including trailing slash. */ p=getfname(dir); strcpy(fname,p); /* Base filename (no extension) */ if(p==dir) dir[0]=0; /* no directory specified in path */ else *p=0; /* truncate dir at filename */ p=getfext(fname); if(p!=NULL) { strcpy(ext,p); /* Optional filename extension, including leading period (.) */ *p=0; } }
/* * NAME: cmdbuf->edit() * DESCRIPTION: edit a new file */ int cb_edit(cmdbuf *cb) { io iob; not_in_global(cb); if (cb->edit > 0 && !(cb->flags & CB_EXCL)) { error("No write since last change (edit! overrides)"); } getfname(cb, cb->fname); if (cb->fname[0] == '\0') { error("No current filename"); } Alloc::staticMode(); eb_clear(cb->edbuf); Alloc::dynamicMode(); cb->flags &= ~CB_NOIMAGE; cb->edit = 0; cb->first = cb->cthis = 0; memset(cb->mark, '\0', sizeof(cb->mark)); cb->buf = 0; memset(cb->zbuf, '\0', sizeof(cb->zbuf)); cb->undo = (block) -1; /* not 0! */ output("\"%s\" ", cb->fname); if (!io_load(cb->edbuf, cb->fname, cb->first, &iob)) { error("is unreadable"); } io_show(&iob); if (iob.zero > 0 || iob.split > 0 || iob.ill) { /* the editbuffer in memory is not a perfect image of the file read */ cb->flags |= CB_NOIMAGE; } cb->cthis = iob.lines; return 0; }
mat_ZZ getbasis(int n,int seed,vec_ZZ& phi,double bit=10) { initialize(); std::ostringstream fname; fname << getfname(n,seed,bit,0); mat_ZZ L; if (FileExists(fname)==true) { LoadLattice(L,fname.str()); fname << ".phi"; LoadElement(phi,fname.str()); } else { vec_ZZ phi; //n stands for index gen_idealsvpchallenge(L,n,to_ZZ(seed),phi); #ifdef _allow_cachefiles SaveLattice(L,fname.str()); fname << ".phi"; SaveElement(phi,fname.str()); #endif } return L; }
char* dszlog_filename(char* str) { char* p=str; static char path[MAX_PATH+1]; #ifdef _WIN32 char sfpath[MAX_PATH+1]; if(dszlog_short) { SAFECOPY(sfpath,str); GetShortPathName(str,sfpath,sizeof(sfpath)); p=sfpath; } #endif if(!dszlog_path) p=getfname(p); if(!dszlog_quotes) return(p); SAFEPRINTF(path,"\"%s\"",p); return(path); }
int removecase(const char *path) { char inpath[MAX_PATH+1]; char fname[MAX_PATH*4+1]; char tmp[5]; char *p; int i; if(strchr(path,'?') || strchr(path,'*')) return(-1); SAFECOPY(inpath,path); p=getfname(inpath); fname[0]=0; for(i=0;p[i];i++) { if(isalpha(p[i])) sprintf(tmp,"[%c%c]",toupper(p[i]),tolower(p[i])); else sprintf(tmp,"%c",p[i]); strncat(fname,tmp,MAX_PATH*4); } *p=0; return(delfiles(inpath,fname)?-1:0); }
BOOL DLLCALL fexistcase(char *path) { #if defined(_WIN32) char* fname; long handle; struct _finddata_t f; if(access(path,0)==-1 && !strchr(path,'*') && !strchr(path,'?')) return(FALSE); if((handle=_findfirst((char*)path,&f))==-1) return(FALSE); _findclose(handle); if(f.attrib&_A_SUBDIR) return(FALSE); fname=getfname(path); /* Find filename in path */ strcpy(fname,f.name); /* Correct filename */ return(TRUE); #else /* Unix or OS/2 */ char globme[MAX_PATH*4+1]; char fname[MAX_PATH+1]; char tmp[5]; char *p; int i; glob_t glb; if(path[0]==0) /* work around glibc bug 574274 */ return FALSE; if(!strchr(path,'*') && !strchr(path,'?') && fnameexist(path)) return(TRUE); SAFECOPY(globme,path); p=getfname(globme); SAFECOPY(fname,p); *p=0; for(i=0;fname[i];i++) { if(isalpha(fname[i])) sprintf(tmp,"[%c%c]",toupper(fname[i]),tolower(fname[i])); else sprintf(tmp,"%c",fname[i]); strncat(globme,tmp,MAX_PATH*4); } #if 0 if(strcspn(path,"?*")!=strlen(path)) { sprintf(path,"%.*s",MAX_PATH,globme); return(fexist(path)); } #endif if(glob(globme,GLOB_MARK,NULL,&glb) != 0) return(FALSE); if(glb.gl_pathc>0) { for(i=0;i<glb.gl_pathc;i++) { if(*lastchar(glb.gl_pathv[i]) != '/') break; } if(i<glb.gl_pathc) { sprintf(path,"%.*s",MAX_PATH,glb.gl_pathv[i]); globfree(&glb); return TRUE; } } globfree(&glb); return FALSE; #endif }
int main(int argc, char** argv) { int argn; char* arg; char* p; char path[MAX_PATH+1]; char fname[MAX_PATH+1]; char ini_fname[MAX_PATH+1]; /*******************************/ /* Generate and display banner */ /*******************************/ sscanf("$Revision$", "%*s %s", revision); sprintf(banner,"\n%s v%s-%s" " Copyright %s Rob Swindell" ,TITLE ,revision ,PLATFORM_DESC ,__DATE__+7 ); fprintf(stdout,"%s\n\n", banner); /**********************/ /* Parse command-line */ /**********************/ for(argn=1; argn<argc; argn++) { arg=argv[argn]; while(*arg=='-') arg++; if(stricmp(arg,"help")==0 || *arg=='?') return usage(argv[0]); #ifdef _WIN32 else if(stricmp(arg,"service")==0) daemonize=TRUE; else if(stricmp(arg,"install")==0) return install(); else if(stricmp(arg,"remove")==0) return uninstall(); else if(stricmp(arg,"disable")==0) return enable(FALSE); else if(stricmp(arg,"enable")==0) return enable(TRUE); #endif } /******************/ /* Read .ini file */ /******************/ /* Generate path/sexpots[.host].ini from path/sexpots[.exe] */ SAFECOPY(path,argv[0]); p=getfname(path); SAFECOPY(fname,p); *p=0; if((p=getfext(fname))!=NULL) *p=0; strcat(fname,".ini"); iniFileName(ini_fname,sizeof(ini_fname),path,fname); parse_ini_file(ini_fname); #if defined(_WIN32) if(daemonize) { SERVICE_TABLE_ENTRY ServiceDispatchTable[] = { { NAME, (void(WINAPI*)(DWORD, char**))service_loop }, { NULL, NULL } /* Terminator */ }; printf("Starting service control dispatcher.\n" ); printf("This may take several seconds. Please wait.\n" ); if(!StartServiceCtrlDispatcher(ServiceDispatchTable)) { lprintf(LOG_ERR,"StartServiceCtrlDispatcher ERROR %d",GetLastError()); return -1; } return 0; } SetConsoleCtrlHandler(ControlHandler, TRUE /* Add */); #endif service_loop(argc,argv); return 0; }