

// Written bye Michael Roth - DAC698@DBQ400


/*s*/ /*  Include - Define - Global*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>


#define sourcefilename argv[1]

/*     Debugphase (wel Argumente gesperrt in Demo)
#define quellfilename  "golded:anleitung"
#define sourcefilename "ram:test"
*/
/*e*/  /*   */

/*s*/ /* main */
main(int argc,char *argv[])
{


/*s*/ /*  Initialisierung */
   /* ggf. alles auf 0 Reinitialisieren. Hier meine testwerte */
   unsigned long anz[255];       /* Buffer zum auswerten der häufigkeit der Zeichen */
   FILE          *fhout;
   unsigned int  maxvorkom = 1;  /* Wie oft darf ein Zeichenn mehrfach vorkommen ? */
            int  count = 0;      /* Zählt wieviele Zeichen geschrieben wurden bisher */
            int  howoft = 80;    /* länge des Passwortes */
   unsigned char start = 32;     /* Ascii Zeichen , welches die Untere grenze angibt */
   unsigned char end = 255;      /* Ascii Zeichen, welches die  obere grenze darstellt */
            int  offset = 0;     /* Offset auf Quellfile */
   register long int  i;              /* Zähler*/
   unsigned  int d;
             char dd[] = {0};
            int  ret=20;
   time_t c;
   /* Wenn weniger als 6 Argumente angegeben werden */
/*e*/  /*   */

/*s*/ /* Parameterüberprüfung und auswertung */

   if (argc!=6)
      {
         printf("Usage: %s Zielfile/A, Start/N, End/N, Length/N, douple/n, Offset/N\n",argv[0]);
         printf("%s\n",argv[0]);
         return(20);

      }


   start     = atoi(argv[2]);
   end       = atoi(argv[3]);
   howoft    = atoi(argv[4]);
   maxvorkom = atoi(argv[5]);
   if (maxvorkom == 0)
      maxvorkom++;
   if (start == 0)
      start++;



/*e*/  /*   */

/*s*/ /* IO */


   if(((end-start)*maxvorkom < howoft) || (start > end) || start <0 || end > 255)
     {
        printf("Passwort kann mit diesen Parametern nicht generiert werden");
        return(20);
     }





   if (!(fhout = fopen(sourcefilename,"wb")))
      {
         printf("Can not open File %s",sourcefilename);
         return(20);
      }

/*e*/  /*   */
/*s*/ /* Passwort */
 srand(1);

    for (i=0;i < 255;i++)
        anz[i]=0;

    for (i=0;i < 256*howoft && count < howoft;i++)
    {
        time(&c);
        d = ((c^rand()|rand()^rand())&255);

        if ( d >= start && d <= end && d != 13)
        {
            if (anz[d]++ < maxvorkom)
            {
                count++;
                sprintf(dd,"%c",d);
                fwrite(dd,1,1,fhout);
            }
        }

        d = (char) ((c^rand()|rand()^rand())&127);
        if ( d >= start && d <= end && d != 13)
        {
            if (anz[d]++ < maxvorkom)
            {
                count++;
                sprintf(dd,"%c",d);
                fwrite(dd,1,1,fhout);
            }
        }


   }

    if (count >= howoft)
        ret=0;

/*e*/
/*s*/ /* cleanup */
     if (!fhout)
        fclose(fhout);
     return(ret);
/*e*/  /*   */


}



/*e*/


