/******************************************************************** Mikro-Shell: Startprogramm fuer Okami-Shell Version 1.4 WR 1.11.89 Žnderungen: 18.02.90 Optional šbergabe der Konfigurationsdatei 01.03.90 Internes Kommando: echo 31.03.90 šbergabe mehrerer Konfigurationsdateien internes Kommando: incl 10.05.90 L„nge des Para-Strings in Pexec korrekt Zeilenumbruch mit \ am Ende einer Zeile 28.12.90 Kommandozeile mit -c und Kommandos internes Kommando: ver 05.03.91 interne Kommandos exit und wait 19.06.91 1.4: Steuersequenzen in echo *******************************************************************/ static char _M_ID_[]="@(#)Okami Microshell 1.4 - msh.c"; #include #include #include /* Die Include-Datei cmpdat.h wird von einem Okami-Script zum Compiler- ** Aufruf angelegt und enth„lt nur eine Zeile: #define _CMP_DAT "Datum, Uhrzeit" ** Wer diese Datei nicht anlegen will, kann diese Zeile anstelle der ** jetzt folgenden include-Anweisung benutzen. */ #include /* Ein paar Makros */ #define StrEqu(a,b) (!strcmp(a,b)) /* Test: Strings gleich */ #define StrNEqu(a,b,n) (!strncmp(a,b,n)) /* Test: Strings gleich */ #define StrLast(S) (*(S+strlen(S)-1)) /* String: letztes char.*/ /* Strings mit Programmname und Versionsnummer */ char TPName[]= "Okami Microshell"; char TPVersion[]= "1.4"; /* Weitere globale Variablen und defines */ char KONFFILE[]= "msh.inf"; /* Default bei argc==1 */ #define CMDLEN (3*80) #define ARGV0 "msh" /* eigentlich: argv[0] */ #define EXITCODE (-999) /* Script beenden */ short MsgFlag=1; /* Flag fr Meldungen */ /************************************************************************/ main(argc,argv) int argc; char *argv[]; { register int i; short ExFlag=0; /* 0: Script, 1: Kommando */ int Erg; if (argc==1) /* keine Parameter */ Erg=msh(KONFFILE); else for (i=1;i=0) SollDat = (Tag &15) | (Mon&7 )<<5 | ((Jahr-1980)&255)<<9; SollUhr = ((Sek/2)&15) | (Min&63)<<5 | (Hr &31 )<<11; if (MsgFlag) { fputs("Waiting",stdout); if (*Para) { fputs(" for ",stdout); fputs(Para,stdout); } puts("... press ESC to abort"); } /* Warteschleife... */ for(;;) { /* printf("Jetzt: %d %d, warte auf %d %d\n", Tgetdate(),Tgettime(),SollDat,SollUhr); */ if (Tag>=0) { if (Tgettime()==SollUhr && Tgetdate()==SollDat) return 0; } else if (Tgettime()==SollUhr) return 0; /* ESC gedrckt? */ if (Cconis()) if ((Cnecin()&0xff) == 0x1b) return EXITCODE; } } /* entspricht sscanf(*Ptr,"%02d",adr);(*Ptr)+=2 */ scan(Ptr,adr) char **Ptr; int *adr; { *adr = 10*((*(*Ptr)++)-'0'); *adr += (*(*Ptr)++)-'0'; }