home *** CD-ROM | disk | FTP | other *** search
- #define PROGNAME "BackGroundChecker"
- #include"bbs:bgcheck/bgcheck.h"
- #include "aedoor.h"
- #include "semis.h"
- static const char VersionTag[] = "\0$VER: "PROGNAME" "REVISION" ("REVDATE")";
-
- #define ws WriteStr
-
- #define CLEAR 0
- #define LOCAL 1
- #define ZMODEM 2
- #define HYDRA 3
- #define SMODEM 4
-
-
- void Start(int node);
- void upperstring(char *s);
- char *getconfig(char **main_search,char *lookfor);
- void timenow(char *buffer2);
- void Date(char *buffer,UBYTE format);
-
- 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);
- }
-
-
- VOID Shutdown(VOID)
- {
- Jhmsg->Command=2;
- PutMsg(port,(struct Message *)Jhmsg);
- Wait(1<<replymp->mp_SigBit);
- while(msg=(struct JHMessage *)GetMsg((struct MsgPort *)replymp));
- DeletePort((struct MsgPort *)replymp);
- FreeMem(Jhmsg,sizeof(struct JHMessage));
- }
-
-
- void Start(Node)
- {
- char buffer[255]="",
- handle[50]="",
- filetemp[200]="",
- filename[255]="",
- playpen[255],
- confpath[255],
- slot[6],
- date[10],
- time[6],
- postdate[10],
- posttime[10],
- axxstr[10],
- **main_config=NULL,
- **main_filename=NULL,
- *p=NULL;
- long transtype=CLEAR,
- dirinkbyte=0,
- axx=255,
- axx2=0,
- pos,
- len;
- int result=0,
- confnumber=0,
- status=0,
- laststatus=2,
- priority=0;
- BOOL successatt=FALSE,
- msgbase=FALSE,
- uploaddelay=FALSE,
- addsem=FALSE,
- nozmodembg=FALSE,
- nohydrabg=FALSE;
- BPTR readfh=NULL;
- struct SinglePort *Singleport;
- struct MultiPort *Nodes;
- struct HydraPort *hydra=NULL;
- struct DateTime *dtime=NULL;
- struct DateStamp *stmp=NULL,
- *stmp2=NULL;
-
- struct Filedata *filedata=NULL;
-
- ws("",1);
- ws("C BGCheck "REVISION" Joe Cool ",1);
- ws("",1);
-
- sprintf(buffer,"t:UploadDelay.%d",Node);
- DeleteFile(buffer);
-
- sprintf(buffer,"t:MSGBASE.%d",Node);
- readfh=Lock(buffer,ACCESS_READ);
- if (readfh)
- {
- UnLock(readfh);
- msgbase=TRUE;
- }
-
- Date(date,FORMAT_USA);
- timenow(time);
-
- GetDT(DT_NAME,"");
- strcpy(handle,XIM_Msg->String);
-
- GetDT(BB_CONFNUM,"");
- confnumber=atoi(XIM_Msg->String);
- confnumber++;
-
- strcpy(buffer,"bbs:bgcheck/bgfilehandler.config");
- readfh=Open(buffer,MODE_OLDFILE);
- pos=0;
- if (!readfh && pos!=60)
- {
- pos++;
- readfh=Open(buffer,MODE_OLDFILE);
- if (!readfh) Delay(TICKS_PER_SECOND/3);
- }
- 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;
-
- p=getconfig(main_config,"DELAY_UPLOAD_AXX");
- if (p)
- {
- strncpy(axxstr,p,9);
- if (atoi(axxstr))
- {
- axx=atoi(axxstr);
- }
- }
-
- if (p=getconfig(main_config,"PRIORITY")) priority=atoi(p);
-
- sprintf(buffer,"NO_HYDRA_BGCHECK_%d",Node);
- if (p=getconfig(main_config,buffer)) nohydrabg=TRUE;
- sprintf(buffer,"NO_ZMODEM_BGCHECK_%d",Node);
- if (p=getconfig(main_config,buffer)) nozmodembg=TRUE;
-
-
-
-
-
-
- GetDT(DT_SECSTATUS,"");
- axx2=atoi(XIM_Msg->String);
-
-
- upperstring(handle);
- sprintf(buffer,"DELAY_UPLOAD_AXX_%s",handle);
- p=getconfig(main_config,buffer);
- if (p)
- {
- axx2=axx+1;
- }
-
-
- for (pos=0;main_config[pos]!=NULL;pos++)
- free(main_config[pos]);
- free (main_config);
-
- SendCmd(SIG_PLAYPEN);
- strcpy(playpen,XIM_Msg->String);
-
- GetDT(BB_CONFLOCAL,"");
- strcpy(confpath,XIM_Msg->String);
-
- GetDT(913,"");
- dirinkbyte=XIM_Msg->Data;
-
- GetDT(DT_SLOTNUMBER,"");
- strcpy(slot,XIM_Msg->String);
-
- GetDT(531,"");
- Nodes=(struct MultiPort *)XIM_Msg->Semi;
-
- if (axx<=axx2 && !msgbase)
- {
- Hotkey(" Do you want your Uploads to be posted at a special time ? (y/N) ");
- if (XIM_Msg->String[0]=='y' || XIM_Msg->String[0]=='Y')
- {
- ws("yes!",1);
- ws("",1);
- ws(" Please enter the filenames (patterns allowed) and the delay time of uploading!",1);
- ws("",1);
-
- pos=0;
- do
- {
-
- sprintf(buffer,"CFilename [%2d]: ",pos);
- Prompt(30,buffer);
- strcpy (buffer,XIM_Msg->String);
- upperstring(buffer);
-
- main_filename=(char **) realloc(main_filename,(pos+1)*sizeof(char *));
- main_filename[pos]=NULL;
- len=strlen(buffer);
- main_filename[pos]=(char *) malloc (len+1);
- if (main_filename[pos]!=NULL)
- strcpy(main_filename[pos],buffer);
- pos++;
- }
- while (strlen(buffer));
- main_filename=(char **) realloc(main_filename,(pos+1)*sizeof(char *));
- main_filename[pos]=NULL;
-
- if (main_filename[0][0]!=0)
- {
- ws("",1);
- sprintf(buffer,"CThe local date and time is : %s %s",date,time);
- ws(buffer,1);
- sprintf(buffer,"CPlease enter date to post files: C[%s]D",date);
- Prompt(8,buffer);
- if (XIM_Msg->String[0]!=0) strcpy(postdate,XIM_Msg->String);
- else strcpy(postdate,date);
- sprintf(buffer,"CPlease enter time to post files: C[%s]D",time);
- Prompt(5,buffer);
- if (XIM_Msg->String[0]!=0) sprintf(posttime,"%s:00",XIM_Msg->String);
- else sprintf(posttime,"%s:00",time);
-
- stmp=(struct DateStamp *) malloc (sizeof(struct DateStamp));
- dtime=(struct DateTime *) malloc (sizeof(struct DateTime));
-
- dtime->dat_Format=FORMAT_USA;
- dtime->dat_Flags=DTF_SUBST; /*ignored*/
- dtime->dat_StrDay=NULL; /*ignored*/
- dtime->dat_StrDate=postdate;
- dtime->dat_StrTime=posttime;
-
- if (!StrToDate(dtime))
-
- {
- ws("",1);
- ws("C Couldn`t convert your time information ",1);
- ws("",1);
- ws("Your time Information couldn`t be converted!",1);
- }
- else
- {
-
- stmp2=(struct DateStamp *) malloc (sizeof(struct DateStamp));
- stmp=&dtime->dat_Stamp;
- DateStamp( stmp2 );
- result=CompareDates(stmp,stmp2);
- free(stmp2);
-
- if (result>=0)
- {
- ws("",1);
- ws("C There is no need to delay your files ",1);
- ws("C because your time is earlier than the current ",1);
- ws("",1);
- }
- else
- {
-
- ws("",1);
-
- sprintf(buffer,"CYour files will be posted at : %s %s",postdate,posttime);
- ws(buffer,1);
- ws("",1);
- sprintf(buffer,"t:UploadDelay.%d",Node);
- readfh=Open(buffer,MODE_NEWFILE);
- if(readfh)
- {
- FPuts(readfh,postdate);
- FPuts(readfh,"\n");
- FPuts(readfh,posttime);
- FPuts(readfh,"\n");
- for(pos=0;main_filename[pos];pos++)
- {
- FPuts(readfh,main_filename[pos]);
- FPuts(readfh,"\n");
-
- }
- Close(readfh);
- uploaddelay=TRUE;
- }
- }
- }
- free (stmp);
- free(dtime);
- }
- for(pos=0;main_filename[pos];pos++)
- free(main_filename[pos]);
- free(main_filename);
-
-
-
-
-
- }
- else
- {
- ws("",1);
- }
-
- }
-
-
-
- SendCmd(BB_LOGONTYPE);
- if (XIM_Msg->Data==1 || XIM_Msg->Data==2) transtype=LOCAL;
-
- GetDT(DT_SECSTATUS,"");
- axx=atoi(XIM_Msg->String);
-
- Shutdown();
-
- ObtainSemaphore((struct SignalSemaphore *)Nodes);
- Singleport=(struct SinglePort *)Nodes->MyNode[Node].s;
- ReleaseSemaphore((struct SignalSemaphore *)Nodes);
-
- ObtainSemaphore((struct SignalSemaphore *)Singleport);
- status=Singleport->Status;
- ReleaseSemaphore((struct SignalSemaphore *)Singleport);
-
- while (status==2 || status==30 || status==1 || status==3)
- {
-
-
- if (status==30 && !nohydrabg)
- {
- sprintf(buffer,"HydraPort%d",Node);
- if (!hydra)
- {
- Forbid();
- hydra=(struct HydraPort *)FindSemaphore(buffer);
- Permit();
- }
- if (hydra)
- {
- successatt=AttemptSemaphore((struct SignalSemaphore *)hydra);
- if (successatt)
- {
- strcpy(filename,hydra->UpFileName);
- ReleaseSemaphore((struct SignalSemaphore *)hydra);
- }
-
-
- if (strcmp(filetemp,filename))
- {
- if (strncmp(filetemp,"Init",4) && strncmp(filetemp,"End of batch",12) && filetemp[0]!=0 && (strlen(filetemp)<13))
- {
- strcpy(buffer,filetemp);
- upperstring(buffer);
- Forbid();
- filedata=(struct Filedata *)FindSemaphore(buffer);
- Permit();
- addsem=FALSE;
- if (!filedata)
- {
- filedata=(struct Filedata *) AllocMem(sizeof(struct Filedata),MEMF_PUBLIC|MEMF_CLEAR);
- addsem=TRUE;
- }
- if (filedata)
- {
- if (!addsem)
- {
- ObtainSemaphore((struct SignalSemaphore *) filedata);
- }
- else
- {
- filedata->semi.ss_Link.ln_Pri=0;
- filedata->semi.ss_Link.ln_Name=filedata->filename;
- strcpy(filedata->filename,buffer);
- }
-
- strcpy(filedata->filepath,playpen);
- sprintf(buffer,"%d",Node);
- strcpy(filedata->nodenumber,buffer);
-
- ObtainSemaphore((struct SignalSemaphore *)Singleport);
- strcpy(filedata->handle,Singleport->Handle);
- ReleaseSemaphore((struct SignalSemaphore *)Singleport);
-
- 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->Delay=uploaddelay;
- filedata->Immediately=FALSE;
-
- filedata->bghandler=FALSE;
- filedata->add_fileid=FALSE;
- filedata->axx=axx;
-
- filedata->Filecheck_passed=FALSE;
- filedata->Filecheck_ok=FALSE;
- filedata->file_id_passed=FALSE;
- filedata->file_id=FALSE;
- filedata->all_passed=FALSE;
- filedata->dupe=FALSE;
-
- if (addsem) AddSemaphore((struct SignalSemaphore *)filedata);
- else ReleaseSemaphore((struct SignalSemaphore *) filedata);
-
- sprintf(buffer,"run >nil: bbs:bgcheck/bgfilehandler \"%s\"",filetemp);
- SystemTags(buffer,NP_Priority,priority,NULL);
- }
- filedata=NULL;
- }
-
- strcpy(filetemp,filename);
- }
- if (filetemp[0]==0) strcpy(filetemp,filename);
- }
- }
-
-
-
- if ( (status==2) && (transtype!=LOCAL) && !nozmodembg)
- {
-
- ObtainSemaphore((struct SignalSemaphore *)Singleport);
- strcpy (filename,Singleport->Misc1);
- ReleaseSemaphore((struct SignalSemaphore *)Singleport);
- if (strcmp(filetemp,filename))
- {
-
-
- if (filetemp[0]!=0 && strlen(filetemp)<13 && strcmp(filename,"UPLOAD FINISHED"))
- {
-
- strcpy(buffer,filetemp);
- upperstring(buffer);
- addsem=FALSE;
- Forbid();
- filedata=(struct Filedata *)FindSemaphore(buffer);
- Permit();
- if (!filedata)
- {
- filedata=(struct Filedata *) AllocMem(sizeof(struct Filedata),MEMF_PUBLIC|MEMF_CLEAR);
- addsem=TRUE;
- }
- if (filedata)
- {
-
- if (!addsem)
- {
- ObtainSemaphore((struct SignalSemaphore *) filedata);
- }
- else
- {
- filedata->semi.ss_Link.ln_Pri=0;
- filedata->semi.ss_Link.ln_Name=filedata->filename;
- strcpy(filedata->filename,buffer);
- }
-
- strcpy(filedata->filepath,playpen);
- sprintf(buffer,"%d",Node);
- strcpy(filedata->nodenumber,buffer);
-
- ObtainSemaphore((struct SignalSemaphore *)Singleport);
- strcpy(filedata->handle,Singleport->Handle);
- ReleaseSemaphore((struct SignalSemaphore *)Singleport);
-
- 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->Delay=uploaddelay;
- filedata->Immediately=FALSE;
-
- filedata->bghandler=FALSE;
- filedata->add_fileid=FALSE;
- filedata->axx=axx;
-
- filedata->Filecheck_passed=FALSE;
- filedata->Filecheck_ok=FALSE;
- filedata->file_id_passed=FALSE;
- filedata->file_id=FALSE;
- filedata->all_passed=FALSE;
- filedata->dupe=FALSE;
-
-
- if (addsem) AddSemaphore((struct SignalSemaphore *)filedata);
- else ReleaseSemaphore((struct SignalSemaphore *) filedata);
-
- sprintf(buffer,"run >nil: bbs:bgcheck/bgfilehandler \"%s\"",filetemp);
- SystemTags(buffer,NP_Priority,priority,NULL);
-
- }
- filedata=NULL;
- }
- strcpy(filetemp,filename);
- }
- if (filetemp[0]==0) strcpy(filetemp,filename);
- }
-
-
-
-
- ObtainSemaphore((struct SignalSemaphore *)Nodes);
- Singleport=(struct SinglePort *)Nodes->MyNode[Node].s;
- ReleaseSemaphore((struct SignalSemaphore *)Nodes);
-
- ObtainSemaphore((struct SignalSemaphore *)Singleport);
- status=Singleport->Status;
- ReleaseSemaphore((struct SignalSemaphore *)Singleport);
-
- Delay (10);
- }
- }
-