#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include extern struct ExecBase *SysBase; #include #include extern struct DosLibrary *DOSBase; #include #include extern struct RxsLib *RexxSysBase; #include #include extern struct Library *IconBase; #include #include extern struct timerequest TimerIO; #define TimerBase (TimerIO.tr_node.io_Device) #include #include #include #include #include #include #include #include /* for __emit() prototype */ #define SECSINDAY (86400) /* this struct holds a system time in a way we can easily use it */ typedef struct { ULONG st_tvsecs; /* as returned by the timer device */ UWORD st_Year; UWORD st_Month; UWORD st_Day; UWORD st_Hour; UWORD st_Min; UWORD st_Sec; UBYTE st_DOW; } SystemTime_t; struct CyberNode { struct Node cn_Node; #define cn_Name cn_Node.ln_Name STRPTR cn_Command; STRPTR cn_ReDirIn; STRPTR cn_ReDirOut; STRPTR cn_ReDirErr; STRPTR cn_CustomShell; STRPTR cn_SendToUser; ULONG cn_Stack; BYTE cn_Priority; UBYTE cn_DayOfWeek; UWORD cn_Month; ULONG cn_Day; ULONG cn_Hour; ULONG cn_HiMin; ULONG cn_LoMin; UBYTE cn_ObeyQueue; UBYTE cn_Flags; }; /* these are the possible values for the flags in cn_Flags */ #define CNB_NOLOG 0 /* don't to log when running the command */ #define CNB_REXX 1 /* start command as a rexx script */ #define CNB_CRONTAB 2 /* node was generated by an entry in crontab * file */ #define CNB_SYSSH 3 /* use system shell instead of user shell */ #define CNB_OUTAPP 4 /* append to output redirection instead of overwrite */ #define CNB_ERRAPP 5 /* append to error redirection instead of overwrite */ #define CNB_EXECONE 6 /* run job once and then delete it */ #define CNB_DELAYED 7 /* queued job was delayed due to queue limits */ #define CNF_NOLOG (1L << CNB_NOLOG) #define CNF_REXX (1L << CNB_REXX) #define CNF_CRONTAB (1L << CNB_CRONTAB) #define CNF_SYSSH (1L << CNB_SYSSH) #define CNF_OUTAPP (1L << CNB_OUTAPP) #define CNF_ERRAPP (1L << CNB_ERRAPP) #define CNF_EXECONE (1L << CNB_EXECONE) #define CNF_DELAYED (1L << CNB_DELAYED) struct JobQueue { ULONG jq_Max; ULONG jq_Cur; }; struct SystemECdata { UWORD jobNo; UBYTE queueNo; UBYTE flags; }; /* * here we have prototypes for all functions contained in or used by this * file */ struct CyberNode *ParseEvent(STRPTR); void ParseBits(ULONG *, STRPTR); void UnParseBits(ULONG *, STRPTR, int, int); UWORD GetJobNum(void); void FreeJobNum(UWORD); void __stdargs Log(STRPTR, ...); void __stdargs MySPrintf(STRPTR, STRPTR, ...); int __regargs main(char *cmdptr, int cmdlen, struct WBStartup *WBMsg); void ReadCronTab(void); BOOL GetARexxLib(void); void FreeARexxLib(void); void __stdargs ErrorMsg(char *fmt, ...); void MyExit(int); void FreeEvents(BOOL); STRPTR WBtoCLIargs(struct WBStartup *WBMsg); void StartSystemJob(struct CyberNode *cn); void StartRexxJob(struct CyberNode *cn); int __saveds __asm EndSystemJob(register __d0 int rc, register __d1 struct SystemECData *data); void GetSystemTime(SystemTime_t *st); void ScanForJobs(void); void HandleRexxEvents(void); struct CyberNode *FindEvent(STRPTR name); BPTR SetupSendMail(STRPTR cmdName, STRPTR userName); extern void DoMsg(struct RexxMsg *, APTR, int, int); void rx_Shutdown(void); STRPTR rx_Version(void); void rx_Suspend(void); void rx_Resume(void); int rx_NewEventFile(STRPTR); void rx_CloseEventFile(void); int rx_AddEvent(STRPTR); int rx_DeleteRexxEvent(STRPTR); int rx_DeleteEvent(STRPTR); void rx_PurgeRexxEvents(void); STRPTR rx_ShowEvent(STRPTR); STRPTR rx_ListEvents(void); STRPTR rx_ShowStatus(void); int rx_NewLogFile(STRPTR); void rx_CloseLogFile(void); int rx_SetQueueMax(STRPTR); int rx_GetQueueMax(STRPTR);