/******************************************************************** Mikro-Shell: Startprogramm fuer Okami-Shell von Wolfram R”sler 1.11.89 Usenet: wr@bara.oche.de Mausnetz: Wolfram Roesler @ AC2 ~~~ FREEWARE ~~~ Ž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 19.10.91 1.5: Anpassung an Ansi-C (PureC), Option -v fr Versionsnummer 28.01.92 1.6: Kommando "exec", MiNT-Untersttzung 20.08.92 wait-Bug korrigiert 30.08.92 1.7: neues Kommando "cd" *******************************************************************/ #include #include #include #include #include #include /* Das folgende auf 1 setzen, wenn Mint untersttzt werden soll: ** (der einzige Grund, es nicht auf 1 zu setzen, ist daž man ** kein mintbind.h hat) */ #define USEMINT 1 #if USEMINT #include #endif #define strlast(S) (*(S+strlen(S)-1)) /* String: letztes char.*/ /* Strings mit Programmname und Versionsnummer */ #define TPName "Okami Microshell" #define TPVersion "1.7" /* Weitere globale Variablen und defines */ const char KONFFILE[]= "msh.inf"; /* Default bei argc==1 */ #define CMDLEN (3*80) #define ARGV0 "msh" /* eigentlich: argv[0] */ #define EXITCODE (-999) /* Script beenden */ int MsgFlag=1; /* Flag fr Meldungen */ int MintThere=0; /* Flag: Mint ist installiert */ /* Prototypen */ int msh (char FName[]); int DoCom (char *Para); void Xputs (register char *s); void DoExec (char *Cmd); int DoWait (char *Para); /************************************************************************/ int main(int argc,char *argv[]) { register int i; short ExFlag=0; /* 0: Script, 1: Kommando */ int Erg; int DoFlag=0; #if USEMINT /* Herausfinden, ob Mint intalliert ist. Das geht durch Durchsuchen ** des Cookiejars nach dem MiNT-Eintrag. */ { register struct C {long tag,val;} *c; long s; s = Super(0L); c = *(struct C**)0x5a0; Super((void*)s); if (c) for(;c->tag;c++) if (c->tag == 'MiNT') { MintThere = 1; break; } } #endif if (argc>1) { if (argc==2 && !strcmp(argv[1],"-v")) { DoCom("ver"); return 0; } for (i=1;i