Thema:
Und automatische Verlinkung flat
Autor: Transistor
Datum:04.12.24 19:11
Antwort auf:Re:Erinnerungen - unvollständig von Transistor

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#include "cgitools.h"
#include "bretttools.h"

/***********************************************************************************************************************/

void GetConfig(char*FileName,char*Key,char*Value,char*ADMIN_EMAIL)
{
 FILE* File;
 char Line[2048];
 File=fopen(FileName,"rt");
 if (File==NULL) {
   ConfigError(ADMIN_EMAIL);
   exit(0);
 }
 strcpy(Value,"");
 while (!feof(File)) {
   fgets(Line,2047,File);
   if ((strncmp(Line,Key,strlen(Key))==0)&&(Line[strlen(Key)]=='='))
     strcpy(Value,Line+strlen(Key)+1);
 }
 /* abschliessendes \n loeschen wenn vorhanden */
 if ((strlen(Value)>0)&&(Value[strlen(Value)-1]=='\n')) Value[strlen(Value)-1]='\0';
 fclose(File);
}

/***********************************************************************************************************************/

unsigned long GetElementLength(char* Data,char* Name)
{
char StringName[80];
char *Temp;

strcpy(StringName,Name);
strcat(StringName,"=");
Temp=strstr(Data,StringName);
if (Temp==NULL) return 0;
else return strcspn(Temp+strlen(StringName),"&");
}

/***********************************************************************************************************************/

void ReadElement(char* Daten,char* Name,char* Dest)
{
unsigned long quelle,ziel;
int code,CodeTeil1,CodeTeil2;
char StringName[80];
char *Temp;
unsigned long pos;

strcpy(StringName,Name);
strcat(StringName,"=");
Temp=strstr(Daten,StringName);
if (Temp==NULL) return;
pos=strcspn(Temp+strlen(StringName),"&");
strncpy(Dest,Temp+strlen(StringName),pos);
Dest[pos]='\0';

for(quelle=0,ziel=0;Dest[quelle]!='\0';++quelle,++ziel)?{
  switch (Dest[quelle]) {
?  case '+': Dest[ziel]=' ';
?            break;
?  case '%': if (strncmp(Dest+quelle,"%0D%0A",6)==0){
                Dest[ziel]='\n';
?????  quelle+=5;
?????}
?????else{
?????  CodeTeil1=toupper(Dest[quelle+1]);
?????  CodeTeil2=toupper(Dest[quelle+2]);
?????  code=(CodeTeil1>='A'?(CodeTeil1-'A')+10:(CodeTeil1-'0'));
?????  code*=16;
?????  code+=(CodeTeil2>='A'?(CodeTeil2-'A')+10:(CodeTeil2-'0'));
?????  if ((code<32)||(code>255)) code=32;
?????  Dest[ziel]=(char)code;
?????  quelle+=2;
?????};
?????break;
?  default: Dest[ziel]=Dest[quelle];
?}
}
Dest[ziel]='\0';
}

/***********************************************************************************************************************/

void ElementToHTMLFile(char*Daten,FILE*Datei,int linkfilter,int quote,unsigned long int umbruch)
{
 unsigned long int quelle,linkadd,umbr=0;
 int space=1,link=0;

 for(quelle=0;Daten[quelle];++quelle)
?{
   if (umbr<umbruch) umbr++;
? switch (Daten[quelle])
?  {
??case '\n':if (quote==1) fprintf(Datei,"\n&gt;");
????? else fprintf(Datei,"<BR>\n");
               umbr=0;
????? space=1;
????? break;
??case 'ü': fprintf(Datei,"&uuml;");space=0;break;
??case 'Ü': fprintf(Datei,"&Uuml;");space=0;break;
??case 'ö': fprintf(Datei,"&ouml;");space=0;break;
??case 'Ö': fprintf(Datei,"&Ouml;");space=0;break;
??case 'ä': fprintf(Datei,"&auml;");space=0;break;
??case 'Ä': fprintf(Datei,"&Auml;");space=0;break;
??case 'ß': fprintf(Datei,"&szlig;");space=0;break;
??case '"': fprintf(Datei,"&quot;");space=0;break;
??case '<': fprintf(Datei,"&lt;");space=0;break;
??case '>': fprintf(Datei,"&gt;");space=0;
               if (umbr==1) umbr=0;
????? break;
??case ' ': if (link==1)
?????  {
??????fprintf(Datei,"</A>] ");
??????link=0;
?????  }
????? else
?????  {
??????if ((space==0)||(quote==1))      /*falls noch kein " " vorher oder quotemodus*/
?????? {
                   if ((umbr<umbruch)||(umbruch==0))
                    {
                     space=1;
                     fprintf(Datei," ");
                    }
                   else
                    {
                     fprintf(Datei,"\n&gt;");
                     umbr=0;
                    }
?????? }
??????else fprintf(Datei,"&nbsp;");
?????  }
????? break;
??case ']': if (link==1) fprintf(Datei,"</A>]");
????? else fprintf(Datei,"]");
????? link=0;
????? space=0;
????? break;
??case '[': if (link==1) fprintf(Datei,"</A>]");
????? if ((linkfilter==1)&&((strncmp(Daten+quelle,"[http://",8)==0)||(strncmp(Daten+quelle,"[ftp://",7)==0)||(strncmp(Daten+quelle,"[www",4)==0))) ??????{ ??????]fprintf(Datei,"[<A HREF=\"");
                  if (strncmp(Daten+quelle,"[www",4)==0)]fprintf(Datei,"http://");  /*falschen link berichtigen*/
?????? for(linkadd=1;(Daten[quelle+linkadd]!='\0')&&(Daten[quelle+linkadd]!=']')&&(Daten[quelle+linkadd]!='[')&&(Daten[quelle+linkadd]!=' ');++linkadd)
???????{
??????? if ((Daten[quelle+linkadd]!='>')&&(Daten[quelle+linkadd]!='<')&&(Daten[quelle+linkadd]!='"')&&(Daten[quelle+linkadd]!='\n')) fprintf(Datei,"%c",Daten[quelle+linkadd]);
???????}
?????? fprintf(Datei,"\" TARGET=\"_blank\" class=tlink>");
?????? link=1;
??????}
????? else fprintf(Datei,"[");
????? space=0;
????? break;
?? default: if ((unsigned char)Daten[quelle]>128)?fprintf(Datei,"&#%03i;",(unsigned char)Daten[quelle]);
????? else fprintf(Datei,"%c",Daten[quelle]);
????? space=0;
?  }
 }
 if (link==1) fprintf(Datei,"</A>]");  /*zur sicherheit falls der link am ende steht*/
}

/***********************************************************************************************************************/

void ElementToHTML(char*Daten)
{
 unsigned long int quelle;
 int space=1;

 for(quelle=0;Daten[quelle];++quelle)
?{
? switch (Daten[quelle])
?  {
??case '\n':printf("<BR>\n");space=1;break;
??case 'ü': printf("&uuml;");space=0;break;
??case 'Ü': printf("&Uuml;");space=0;break;
??case 'ö': printf("&ouml;");space=0;break;
??case 'Ö': printf("&Ouml;");space=0;break;
??case 'ä': printf("&auml;");space=0;break;
??case 'Ä': printf("&Auml;");space=0;break;
??case 'ß': printf("&szlig;");space=0;break;
??case '"': printf("&quot;");space=0;break;
??case '<': printf("&lt;");space=0;break;
??case '>': printf("&gt;");space=0;break;
??case ' ': if (space==0)
?????? {
                   space=1;
                   printf(" ");
                  }
               else printf("&nbsp;");
????? break;
?? default: if ((unsigned char)Daten[quelle]>128)?printf("&#%03i;",(unsigned char)Daten[quelle]);
????? else printf("%c",Daten[quelle]);
????? space=0;
?  }
 }
}


< antworten >