#include <stdio.h>
/* patchstr
 v1.0 (cr) csh 1991  (substr)
 v1.1    17.11.1993  v1.0 meldungen auf 80 zeichen (DOS)
 v1.2     1. 7.1994  <nach> kann weggelassen werden => <von> wird geloescht
 v2.0     1. 6.2001  gcc-Version (mingw)
                     -Code optimiert (printf statt Schleife; Puffer-ende nur 1x setzen)
 v3.0    14. 7.2008  linux-version (gcc)
 v3.1    27. 8.2008  kleine Anpassungen der Ausgabe, GPL
                     wird als Teil von sysdoc verwendet
*/
char VERSION[] = "patchstr v4.0 (cr) csh 93-2008";

main(anzahl,argument)

int anzahl;
char *argument[];

{
 int i;
 int c;
 int pufferpointer=0;
 char puffer[50];
 FILE *in;
 FILE *out;

 anzahl -= 1;           /* der programmname ist arg[0], daher anzahl 1 weniger */
 if (anzahl == 2 || anzahl == 3) {
    if ( in = fopen(argument[1],"r") ) {
       while ( (c=fgetc(in)) != EOF ) {
          puffer[pufferpointer]=c;
          if ( c==*(argument[2]+pufferpointer++) ) {
             if ( *(argument[2]+pufferpointer)=='\0' ) {
		if (anzahl == 3) {
		   fputs(argument[3],stdout); 
		}
		pufferpointer=0;
             }
          }
          else {
             puffer[pufferpointer]='\0';
             /* fputs(puffer,out); 
                does not work :-(  
              */
             for (i=0;i<=pufferpointer-1;i++) putc(puffer[i],stdout);
             pufferpointer=0;
          }
       }
    }
    else {
       printf("Datei \"%s\" konnte nicht geoeffnet werden !\n",argument[1]); 
    }
 }
 else {
    printf("Aufruf (PatchSTRing in Binaerdateien): %s <datei> <str-von> [<str-nach>]\n",argument[0]); 
    printf("        Ausgabe auf STDOUT; lizensiert unter GPL V2.0\n"); 
 }
}

