


DO3FMR @DB0GV    de:DO3FMR 14.01.00 23:47 UTC   5062 Bytes
CP DG3MMF: Hi!
*** Message-ID: FOCNMCOE9XPI ***

000114/2345z DB0CZ , 000114/2351z OE9XPI, 991227/1840z DB0CZ 
991227/1824z DB0GV 
From: DO3FMR @ DB0GV.#HES.DEU.EU (Michael)
To:   DG3MMF @ OE9XPI.AUT.EU

Ja, garnicht schlecht die Idee, die Ansi Sequenzen zu beruecksichtigen in der
laenge ;) Abernicht jedes Terminal kann die Ansi Sequencen. [32m Das sieht
bei Dir bestimmtnicht anderst aus wie vorher auch [0m

Naja, im prinzip ist es keine grosse sache sowas zu Programmieren...
Das raustuefteln der richtigen Parameter fuer die Nodes war schwiriger ;)
Ich geb Dir mal den C Quelltext

/*s*/ /*$VER: Version 000.001 (26 Dec 1999)  */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*e*/


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

FILE * fhin                = NULL;        /* FileHandle für Eingabefile */
FILE * fhout               = NULL;        /* FileHandle für Ausgabedatei */
long   lRet = 0;                          /* ReturnCode */
unsigned long   lFileSize  = 0;           /* Filelänge */
char * temp                = NULL;        /* Speicherblockadresse */
char * memoryblock         = NULL;        /* Speicherblockadresse */
char * memoryblockorig     = NULL;        /* Speicherblockadresse */
long start                 = 22;          /* Die erste Zeile ist x Zeichen breit - da noch was davor stehen wird */
long length                = 80;          /* Die Nutzzeile (ab Zeile 2 - 7) ist x Zeichen breit */
char fill                  = '.';         /* Als Standart den Punkt nehmen */

   if(argc < 3) /* Parameter abfragen */
   {
      printf("Usage: %s <SourceFile> <DestFile> [fill] [offset] [length]\n",argv[0]); /* Aufrufparameetr erläutern */
      lRet = 20; /* ReturnCode setzen */
      goto cleanup; /* Programm beenden */
   }

   if(argc >= 3)            /* Wenn Fillargument geändert werden soll  */
      fill = *argv[3];      /* Fllargument von Benutzer nehmen */
   if(argc >= 4)            /* Wenn der Offset geändert werden soll */
      start = atol(argv[4]);
   if(argc >= 5)            /* Wenn die länge geändert werden soll */
      length = atol(argv[5]);

   if((fhin = fopen(argv[1],"rb"))== NULL) /* File Eingabe öffnen */
   {
      printf("Konnte %s nicht öffnen\n",argv[1]); /* Fehlermeldung ausgeben */
      perror(" ");                                /* Und die des Betriebssystemes hinzugeben */
      lRet = 20;                                  /* Returncode setzen */
      goto  cleanup;                              /* Programm beenden */
   }

   if((memoryblock=malloc(length<<1))==NULL) /* Speicher allocieren */
   {
      printf("Konnte Speicher nicht allocieren. (%ld Bytes)",lFileSize);
      perror("");
      lRet = 20;
      goto  cleanup;
   }

   memset(memoryblock,0,length<<1);
   memoryblockorig = memoryblock; /* Zeiger retten */

   if((fhout = fopen(argv[2],"wb"))== NULL) /* File Ausgabe öffnen */
   {
      printf("Konnte %s nicht öffnen\n",argv[1]); /* Fehlermeldung ausgeben */
      perror(" ");                                /* Und die des Betriebssystemes hinzugeben */
      lRet = 20;                                  /* Returncode setzen */
      goto  cleanup;                              /* Programm beenden */
   }


   memset(memoryblock,'-',length);
   printf("%s",memoryblock);
   fgets(memoryblock,length<<1,fhin); /* Zeile auslesen */
   temp = strrchr(memoryblock,'\n');


   if((temp != NULL))
      *temp = ' ';

   if(strlen(memoryblock) < length) /* Wenn Zeile nicht maximale länge hat auffüllen */
      memset(memoryblock+strlen(memoryblock),' ',length-strlen(memoryblock));
   else
      *(memoryblock+length) = '\0';

   if(*(memoryblock+start) != ' ')
      fill=*(memoryblock+start);
   printf("*** current Toppic is: %c%s",fill,memoryblock+(start+1));
   fprintf(fhout,"/topic %c%s",fill,memoryblock+(start+1));

   while(!feof(fhin))
   {
   memset(memoryblock,0,length<<1);
      fgets(memoryblock,length<<1,fhin); /* Zeile auslesen */
      temp = strrchr(memoryblock,'\n');

      if((temp != NULL))
         *temp = ' ';

      if(strlen(memoryblock) < length) /* Wenn Zeile nicht maximale länge hat auffüllen */
         memset(memoryblock+strlen(memoryblock),' ',length-strlen(memoryblock)); /* Richtige länge erzeugen */
      else
         *(memoryblock+length) = '\0'; /* Ansonsten beschneiden */

      printf("%s",memoryblock);
      fprintf(fhout,"%s",memoryblock);
   }
      fprintf(fhout,"\n");



cleanup:
   if(fhin != NULL)
      fclose(fhin);
   if(fhout != NULL)
      fclose(fhout);
   if(memoryblockorig!=NULL)
      free(memoryblockorig);

   return(lRet);


}

Ciao
Micha

vy 73 de DO3FMR


15.01.00 09:42 DB0GV    R: DO3FMR

(DO3FMR) DO3FMR de DB0GV>
