home *** CD-ROM | disk | FTP | other *** search
- #define PROGNAME "Examine"
-
- #include"bbs:bgcheck/bgcheck.h"
- #include "env:timedate.h"
- #include "aedoor.h"
-
-
-
- static const char VersionTag[] = "\0$VER: "PROGNAME" "REVISION" ("REVDATE")";
- #define ws WriteStr
-
- void Start(int node);
-
- void main(int argc, char *argv[])
- {
- int Node=0;
- if(argc<2)
- {
- printf("Sorry, %s must be called from S!X or /X\n",argv[0]);
- exit(0);
- }
- Node=atoi(argv[1]);
- Register(Node);
-
- XIM_Msg->Command=140;
- CheckMessage();
- SetTaskPri(FindTask(0),atol(XIM_Msg->String));
-
- Start(Node);
- ShutDown();
-
- }
-
-
-
- void Start(Node)
- {
- char buffer[255], handle[50],
- playpen[255], workpath[255],
- filename[255], confpath[255],
- **main_fileid=NULL,
- **main_config=NULL, *p=NULL,
- *ptr=NULL, slot[5];
- int lines=0, len=0, confnumber=0,
- axx=0,nodenumber=0, priority=0;
- BPTR readfh=NULL, writefh=NULL, lock=NULL;
- BOOL msgbase=FALSE, clearline=FALSE;
- ULONG dirinkbyte=0, pos=0, delaycount=0;
- struct Filedata *filedata=NULL;
- BOOL file_id_passed=FALSE,file_id=FALSE,all_passed=FALSE;
-
- ws("BGExtractor "REVISION" by Joe Cool",0);
-
- SendStrDataCmd(BB_MAINLINE,"",1);
- strcpy(buffer,XIM_Msg->String);
- ptr=strrchr(buffer,'/');
- strcpy(filename,ptr+1);
- upperstring(filename);
-
- sprintf(buffer," Processing: %s",filename);
- ws(buffer,1);
-
- sprintf(workpath,"bbs:node%d/work/",Node);
-
- sprintf(buffer,"EX: %s",filename);
- SendStrDataCmd(177,buffer,0);
-
- GetDT(913,"");
- dirinkbyte=XIM_Msg->Data;
-
- GetDT(BB_CONFLOCAL,"");
- strcpy(confpath,XIM_Msg->String);
-
- GetDT(DT_SLOTNUMBER,"");
- strcpy(slot,XIM_Msg->String);
-
- GetDT(DT_NAME,"");
- strcpy(handle,XIM_Msg->String);
-
- GetDT(SIG_PLAYPEN,"");
- strcpy(playpen,XIM_Msg->String);
-
- GetDT(DT_SECSTATUS,"");
- axx=atoi(XIM_Msg->String);
-
- GetDT(BB_CONFNUM,"");
- confnumber=atoi(XIM_Msg->String);
- confnumber++;
-
-
- sprintf(buffer,"t:MSGBASE.%d",Node);
- lock=Lock(buffer,ACCESS_READ);
- if (lock)
- {
- msgbase=TRUE;
- UnLock(lock);
- }
-
-
- pos=0;
- strcpy(buffer,"bbs:bgcheck/bgfilehandler.config");
- readfh=Open(buffer,MODE_OLDFILE);
- if (!readfh && pos!=60)
- {
- pos++;
- readfh=Open(buffer,MODE_OLDFILE);
- if (!readfh) Delay(TICKS_PER_SECOND);
- }
-
- main_config=(char **) realloc(main_config,sizeof(char *));
- main_config[0]=NULL;
-
- if (readfh)
- {
- for (pos=0;FGets(readfh,buffer,254);pos++)
- {
- main_config=(char **) realloc(main_config,(pos+1)*sizeof(char *));
- main_config[pos]=NULL;
- len=strlen(buffer);
- if (buffer[len-1]=='\n') buffer[--len]='\0';
- upperstring(buffer);
- main_config[pos]=(char *) malloc (len+1);
- if (main_config[pos]!=NULL)
- strcpy(main_config[pos],buffer);
- }
- Close(readfh);
- main_config=(char **) realloc(main_config,(pos+1)*sizeof(char *));
- main_config[pos]=NULL;
- }
-
- if (p=getconfig(main_config,"PRIORITY"))
- {
- priority=atoi(p);
- }
-
- Forbid();
- filedata=(struct Filedata *)FindSemaphore(filename);
- Permit();
- if (!filedata)
- {
- if (filedata=(struct Filedata *) AllocMem(sizeof(struct Filedata),MEMF_PUBLIC|MEMF_CLEAR))
- {
- filedata->semi.ss_Link.ln_Pri=0;
- filedata->semi.ss_Link.ln_Name=filedata->filename;
-
- strcpy(filedata->filename,filename);
- strcpy(filedata->filepath,playpen);
- sprintf(buffer,"%d",Node);
- strcpy(filedata->nodenumber,buffer);
- strcpy(filedata->handle,handle);
- strcpy(filedata->confpath,confpath);
- sprintf(buffer,"%d",dirinkbyte);
- strcpy(filedata->dirinkbyte,buffer);
- strcpy(filedata->slotnumber,slot);
- filedata->confnumber=confnumber;
- filedata->Main_Fileid=NULL;
- filedata->Filesize=0;
- filedata->MsgBase=msgbase;
- filedata->Hold=FALSE;
- filedata->axx=axx;
-
- sprintf(buffer,"t:UploadDelay.%d",Node);
- lock=Lock(buffer,ACCESS_READ);
- if (lock)
- {
- filedata->Delay=TRUE;
- UnLock(lock);
- }
- else
- {
- filedata->Delay=FALSE;
- }
-
- filedata->Immediately=FALSE;
- filedata->bghandler=FALSE;
- filedata->add_fileid=FALSE;
- filedata->Filecheck_passed=FALSE;
- filedata->Filecheck_ok=FALSE;
- filedata->file_id_passed=FALSE;
- filedata->file_id=FALSE;
- filedata->all_passed=FALSE;
- filedata->dupe=FALSE;
-
- AddSemaphore((struct SignalSemaphore *)filedata);
- sprintf(buffer,"run >nil: bbs:bgcheck/bgfilehandler \"%s\"",filename);
- SystemTags(buffer,NP_Priority,priority,NULL);
-
- }
-
- }
-
- all_passed=FALSE;
- file_id_passed=FALSE;
- file_id=FALSE;
- delaycount=0;
- while (!all_passed)
- {
- if (file_id_passed && !file_id)
- {
- ObtainSemaphore((struct SignalSemaphore *) filedata);
- filedata->file_id_passed=FALSE;
- ReleaseSemaphore((struct SignalSemaphore *) filedata);
-
- ws("c",1);
- ws("",1);
- ws("- -- --- ---- -----------------------------=[ bGCHECKER "REVISION" bY jOE cOOL ]=-",1);
- ws("",1);
- ws("C pUT \"/\" aS FIRST cHAR 2 mAKE uPLOAD 2 sYSOP!",1);
- ws("Please Enter a Description [---------|---------|---------|---------|----]",1);
- lines=0;
- XIM_Msg->String[0]=0;
- sprintf(buffer,"BA%-12.12sC[C]D",filename);
-
- while ((XIM_Msg->String[0]==0) && (XIM_Msg->Data!=-1) && (lines==0))
- {
- SendStrDataCmd(5,buffer,44);
- if (XIM_Msg->String[0]!=0)
- {
- lines++;
- main_fileid=(char **) realloc(main_fileid,(lines)*sizeof(char *));
- main_fileid[lines-1]=NULL;
- len=strlen(XIM_Msg->String);
- main_fileid[lines-1]=(char *) malloc (len+1);
- if (main_fileid[lines-1]!=NULL)
- strcpy(main_fileid[lines-1],XIM_Msg->String);
- }
- sprintf(buffer,"AC[C]D");
- }
- while (XIM_Msg->String[0]!=0 && XIM_Msg->Data!=-1 && lines<=14)
- {
- SendStrDataCmd(5,"C[C]D",44);
- if (XIM_Msg->String[0]!=0)
- {
- lines++;
- main_fileid=(char **) realloc(main_fileid,(lines)*sizeof(char *));
- main_fileid[lines-1]=NULL;
- len=strlen(XIM_Msg->String);
- main_fileid[lines-1]=(char *) malloc (len+1);
- if (main_fileid[lines-1]!=NULL)
- strcpy(main_fileid[lines-1],XIM_Msg->String);
- }
- }
- ws ("",0);
- {
-
- if (!lines)
- {
- lines++;
- main_fileid=(char **) realloc(main_fileid,(lines)*sizeof(char *));
- main_fileid[lines-1]=NULL;
- len=strlen("No Description -> Lost Carrier!");
- main_fileid[lines-1]=(char *) malloc (len+1);
- if (main_fileid[lines-1]!=NULL)
- strcpy(main_fileid[lines-1],"No Description -> Lost Carrier!");
- }
- main_fileid=(char **) realloc(main_fileid,(lines+1)*sizeof(char *));
- main_fileid[lines]=NULL;
-
- sprintf(buffer,"t:%s",filename);
- writefh=Open(buffer,MODE_NEWFILE);
-
- lines=0;
- while(main_fileid[lines])
- {
- sprintf(buffer,"%s\n",main_fileid[lines]);
- FPuts(writefh,buffer);
- lines++;
- }
- Close (writefh);
-
- for (lines=0;main_fileid[lines]!=NULL;lines++)
- free(main_fileid[lines]);
- if (main_fileid) free (main_fileid);
-
- }
-
- ObtainSemaphore((struct SignalSemaphore *) filedata);
- filedata->bghandler=FALSE;
- filedata->add_fileid=TRUE;
- ReleaseSemaphore((struct SignalSemaphore *) filedata);
-
- sprintf(buffer,"run >nil: bbs:bgcheck/bgfilehandler \"%s\"",filename);
- SystemTags(buffer,NP_Priority,priority,NULL);
-
- }
-
- ObtainSemaphore((struct SignalSemaphore *) filedata);
- all_passed=filedata->all_passed;
- file_id=filedata->file_id;
- file_id_passed=filedata->file_id_passed;
- ReleaseSemaphore((struct SignalSemaphore *) filedata);
- if (delaycount==8)
- {
- clearline=TRUE;
- ws(".",0);
- delaycount=0;
- }
- delaycount++;
- if (!all_passed) Delay(TICKS_PER_SECOND/5);
-
- }
-
- ObtainSemaphore((struct SignalSemaphore *) filedata);
- if (clearline) ws("",1);
- if (filedata->dupe) ws("Duplicate Upload!",1);
- if (!filedata->Filecheck_ok && !filedata->dupe) ws("Filecheck failed!",1);
- if (filedata->Delay) ws("Upload delayed!",1);
- if (filedata->Hold) ws("Upload moved into Hold-dir!",1);
- nodenumber=atoi(filedata->nodenumber);
-
- if (filedata->dupe || !filedata->Filecheck_ok || filedata->Hold)
- {
- sprintf(buffer,"%s%s",filedata->filepath,filedata->filename);
- DeleteFile(buffer);
- }
-
- ReleaseSemaphore((struct SignalSemaphore *) filedata);
-
-
-
-
-
- sprintf(buffer,"bbs:node%d/CallersLog",nodenumber);
- writefh=Open(buffer,MODE_READWRITE);
- while (!writefh)
- {
- Delay(20);
- writefh=Open(buffer,MODE_READWRITE);
- }
- Seek(writefh,0,OFFSET_END);
-
- ObtainSemaphore((struct SignalSemaphore *) filedata);
- sprintf(buffer,"\tUpload moved to %s\n",filedata->movetopath);
- ReleaseSemaphore((struct SignalSemaphore *) filedata);
-
- FPuts(writefh,buffer);
- Close(writefh);
-
-
- sprintf(buffer,"%s%s",workpath,filename);
- writefh=Open(buffer,MODE_NEWFILE);
- if (writefh) Close (writefh);
-
-
-
- pos=0;
- sprintf(buffer,"EXAMINE.%d",pos);
- while (p=getconfig(main_config,buffer))
- {
- if (p[0]!=0)
- {
- sprintf(buffer,"%s %d",p,Node);
- System(buffer,NULL);
- }
- pos++;
- sprintf(buffer,"EXAMINE.%d",pos);
- }
-
- if (msgbase)
- {
- RemSemaphore((struct SignalSemaphore *)filedata);
- ObtainSemaphore((struct SignalSemaphore *)filedata);
- ReleaseSemaphore((struct SignalSemaphore *)filedata);
- FreeMem(filedata,sizeof(struct Filedata));
- }
-
- for (pos=0;main_config[pos]!=NULL;pos++)
- free(main_config[pos]);
- if (main_config) free (main_config);
-
-
-
- }
-
-
-
-