ein Kapitel zurück                                           ein Kapitel weiter

Nun am 3 Tag können wir jetzt mit dem Programm beginnen. Sie haben sich zwar einen Groben Umriss des Programms gemacht aber zuerst benötigen wir Variablen und Prototypen.

Zuerst benötigen wir die Schlüsselwörter in C. Holen sie sich Ihr Lieblingsbuch dazu aus dem Regal und los gehts......

/*keywords*/
static const char *C_key_words[] = {
"auto", "break", "case", "char", "const", "continue", "default",
"do", "double", "else", "enum", "extern", "float", "for",
"goto", "if", "int", "long", "register", "return", "short",
"signed", "sizeof", "static", "struct", "switch", "typedef",
"union", "unsigned", "void", "volatile", "while" };

Sollte ich welche vergessen haben, lassen sie es ich wissen. Nun fehlen noch die Präprozessordirektiven.....

/*preprocesor*/
static const char *P_key_words[] = {
"define", "defined", "elif", "else", "endif", "error", "if",
"ifdef", "ifndef", "include", "line", "pragma", "undef" };

Zu beiden Listen von Schlüsselworten benötigen wir noch die Anzahl die enthalten sind...



static const int C_keys = (sizeof(C_key_words) / sizeof(char *));
static const int P_keys = (sizeof(P_key_words) / sizeof(char *));


Nun wollen wir die Variablen für die Farbdefinition angeben. Wenn sie eine andere Farbe wollen müssen sie dies nur ändern oder hinzufügen...



#define WEISS "#FFFFFF"
#define ROT "#FF0000"
#define SCHWARZ "#000000"
#define GRAU "#B3B3B3"
#define BLAU "#0015CE"
#define GRUEN "#1ADD00"
#define PURPLE "#C909DA"




static char *background= WEISS; /*Hintergrundfarbe*/
static char *textcolor = BLAU; /*Textfarbe*/
static char *keyscolor = SCHWARZ; /*Schlüsselworte*/
static char *strings = ROT; /*Strings/Zeichen*/
static char *kommentar = GRAU; /*Kommentarfarbe*/
static char *preaproze = GRUEN; /*Präprozessordirektive*/


Nun wollen wir noch eigene Pseudokonstanten definieren die uns die Funktion zum Auslesen eines Zeichen-oder Wortes zurückgibt.......



#define ALPHABET 0x0001 /*A-Z, a-z*/
#define DEZIMAL 0x0002 /*0-9*/
#define KOMMENTAR_S 0x0003 /*Kommentaranfang*/
#define KOMMENTAR_E 0x0004 /*Kommentarende*/
#define BLOCK_S 0x0005 /*Blockanfang*/
#define BLOCK_E 0x0006 /*Blockende*/
#define QUOTING_A 0x0007 /*Stringanfang*/
#define QUOTING_E 0x0008 /*Stringende*/
#define CHAR_A 0x0009 /*Zeichenanfang*/
#define CHAR_E 0x000A /*Zeichenende*/
#define MASK 0x000B /*Maskierung*/


Jetzt noch die Funktionsprototypen......



/*Funktionsprototypen*/
static void c2html(void);
static int is_key_word(char *, const char *[],const int);
static int read_word(char *, int);
static void HTML_head(char *,int);
static void HTML_end(int);


Dies alles Packen wir jetzt aus Übersichtlichskeitgründen in eine Headerdatei. Hier nun der komplette Inhalt unserer Headerdatei.....

/*Download:c2html.h*/
#ifndef C_TO_HTML_H

/*Farbendefinition*/
#define WEISS "#FFFFFF"
#define ROT "#FF0000"
#define SCHWARZ "#000000"
#define GRAU "#B3B3B3"
#define BLAU "#0015CE"
#define GRUEN "#1ADD00"
#define PURPLE "#C909DA"

/*Zeichentypen für die Funktion read_word()*/
#define ALPHABET 0x0001 /*A-Z, a-z*/
#define DEZIMAL 0x0002 /*0-9*/
#define KOMMENTAR_S 0x0003 /*Kommentaranfang*/
#define KOMMENTAR_E 0x0004 /*Kommentarende*/
#define BLOCK_S 0x0005 /*Blockanfang*/
#define BLOCK_E 0x0006 /*Blockende*/
#define QUOTING_A 0x0007 /*Stringanfang*/
#define QUOTING_E 0x0008 /*Stringende*/
#define CHAR_A 0x0009 /*Zeichenanfang*/
#define CHAR_E 0x000A /*Zeichenende*/
#define MASK 0x000B /*Maskierung*/

#define MAXWORD 4096 /*Maximale Wortlänge*/

/*C-Schlüsselworte*/
static const char *C_key_words[] = {
"auto", "break", "case", "char", "const", "continue", "default",
"do", "double", "else", "enum", "extern", "float", "for",
"goto", "if", "int", "long", "register", "return", "short",
"signed", "sizeof", "static", "struct", "switch", "typedef",
"union", "unsigned", "void", "volatile", "while" };

/*Präprozessordirektiven*/
static const char *P_key_words[] = {
"define", "defined", "elif", "else", "endif", "error", "if",
"ifdef", "ifndef", "include", "line", "pragma", "undef" };

/*Anzahl der Elemente im Array*/
static const int C_keys = (sizeof(C_key_words) / sizeof(char *));
static const int P_keys = (sizeof(P_key_words) / sizeof(char *));

/*Syntaxhiglightning, Farbdefinition*/
static char *background= WEISS; /*Hintergrundfarbe*/
static char *textcolor = BLAU; /*Textfarbe*/
static char *keyscolor = SCHWARZ; /*Schlüsselworte*/
static char *strings = ROT; /*Strings/Zeichen*/
static char *kommentar = GRAU; /*Kommentarfarbe*/
static char *preaproze = GRUEN; /*Präprozessordirektive*/

/*Funktionsprototypen*/
static void c2html(void);
static int is_key_word(char *, const char *[],const int);
static int read_word(char *, int);
static void HTML_head(char *);
static void HTML_end(void);

#define C_TO_HTML_H
#endif

Nachdem wir jetzt unsere eigene Headerdatei geschrieben haben können wir uns endlich ans Coden machen. Wir dürften nun etwa 4 Tage mit der Vorbereitung benötigt haben. Als erstes wollen wir die main()- Funktion schreiben. Zuerst benötigen wir aber noch ein paar globale Zustandsflags.......


/*Zustandsflags*/
static int kommentar=0; /*Kommentarflag*/
static int single_quote=0; /*Einfaches Anführungszeichen*/
static int double_quote=0; /*Doppeltes Anführungszeichen*/
static int hash=0; /*Hash-Zeichen*/
static int newline=0; /*Neue Zeile*/


int main(int argc, char *argv[])
{
if(argc < 2)
{
fprintf(stderr, "usage: c2html file.c > file.html\n");
exit(0);
}
if( freopen(argv[1], "r", stdin) == NULL)
{
fprintf(stderr, "Konnte %s nicht öffnen......\n",argv[1]);
exit(0);
}
/*HTML-Kopfzeile schreiben*/
HTML_head(argv[1]);
/*Nun die Konvertierung........*/
c2html();
/*Nur noch das Ende der HTML-Datei schreiben*/
HTML_end();

return 0;
}

Somit hätten wir die main-Funktion. Jetzt benötigen wir nur noch die 4 Funktionen HTML_head(), c2html() und HTML_end. Für die Funktion c2html benötigen wir noch ein Funktion zum Einlesen von Zeichen/Wörter... die Funktion read_word(). Wollen wir zuerst schnell den Kopf und die Fuss-Zeile für das HTML-Dokument schreiben.......


/*Kopfzeile für HTML-Dokument.......*/
static void HTML_head(char *name)
{
fprintf(stdout,"<HTML>\n<HEAD>\n<TITLE>%s</TITLE>\n",name);
fprintf(stdout,"<BODY BGCOLOR=\"%s\" TEXT=%s>\n",background,textcolor);
fprintf(stdout,"<H2><A HREF=\"%s\">/*%s*/</A></H2>\n<P>\n",name,name);
}

/*Fusszeile für HTML-Dokument.......*/
static void HTML_end()
{
fprintf(stdout, "</P>\n</BODY>\n</HEAD>\n</HTML>\n
}

Somit hätten wir die Kleinstarbeit hinter uns. Nun benötigen wir die Funktion c2html() und read_word() für die Konvertierung. Zuerst die Funktion c2html()......


static void c2html()
{
char word[MAXWORD];
int ch,c;
int zeilennummer=1;

while( (ch = read_word(word, MAXWORD)) != EOF)
{
switch(ch)
{
case ALPHABET : if(komment || single_quote || double_quote)
fprintf(stdout, "%s", word); /*kommentar o. string*/
else if(hash && is_key_word(word,P_key_words,P_keys) >=0)
fprintf(stdout, "<FONT COLOR=%s><B>%s</B></FONT>",
praeproze,word); /*Präprozessordirekt.*/
else if(!hash && is_key_word(word,C_key_words,C_keys) >=0)
fprintf(stdout, "<FONT COLOR=%s><B>%s</B></FONT>",
keyscolor,word); /*Schlüsselwort*/
else
fprintf(stdout,"%s",word); /*sonstiges Wort*/
break;
/**/ case HASH : fprintf(stdout,"<FONT COLOR=%s>%s",praeproze,word);
fprintf(stdout,"</FONT>");
/**/ break;
case KOMMENTAR_S: fprintf(stdout,"<FONT COLOR=%s><I>%s",kommentar,word);
break;
case KOMMENTAR_E: fprintf(stdout,"%s</I></FONT>",word);
break;
case BLOCK_S : fprintf(stdout,"<B>%s</B>\n",word);
break;
case BLOCK_E : fprintf(stdout,"<B>%s</B>",word);
break;
case QUOTING_A : fprintf(stdout,"<FONT COLOR=%s>&quot;",strings);
break;
case QUOTING_E : fprintf(stdout,"&quot</FONT>");
break;
case CHAR_A : fprintf(stdout,"<FONT COLOR=%s>\'",zeichen);
break;
case CHAR_E : fprintf(stdout, "\'</FONT>");
break;
case MASK : fprintf(stdout,"%s",word);
break;
/*HTML - SONDERZEICHEN BEHANDELN*/
case '<' : fprintf(stdout, "&lt;"); break;
case '>' : fprintf(stdout, "&gt;"); break;
case '\"' : fprintf(stdout, "&quot;"); break;
case '&' : fprintf(stdout, "&amp;"); break;

case '\n' : if( (c=getc(stdin)) != EOF && newline)
{
ungetc(c, stdin);
if(komment)
{
fprintf(stdout,"</I></FONT>");
fprintf(stdout,"<FONT COLOR=%s><I>",kommentar);
}
else
{
fprintf(stdout,"<BR>");
nl++;
}
}
break;
default : fprintf(stdout, "%c", ch);
break;
}/*Ende switch*/
}/*Ende while....*/
}

Nun eine Funktion zum Suchen von Schlüsselworten.


/*Such nach einem Schlüsselwort oder Präprozessordirektive*/
static int is_key_word(char *word, const char *keys[],const int n)
{
int i;
for(i=0; i<n; i++)
{
if(strcmp(word,keys[i]) == 0)
return 1;
}
return -1;
}

Nun die Funktion zum Einlesen der Zeichen/Worte.


static int read_word(char *word, int n)
{
int c, cc, ch;
int flag=0;

c=getc(stdin); /*Ein Zeichen einlese*/
if(!isalpha(c))/*keine Buchstaben?*/
{
if(c=='\n') /*ist es ein newline*/
{
newline=1;
hash=0;
}
/*Ist das newline-flag gesetzt und c == # -> Präprozessordirektive*/
else if((newline || nl==1)&&!komment&&!single_quote&&!double_quote&& c == '#')
{
hash=1;
*word++=c;
while(--n > 0)
{
flag=0;
c=getc(stdin);
if(c != '\n')
{
if(c == '<'){ /*HTML-Sonderzeichen*/
*word++='&';*word++='l';*word++='t';*word++=';';
}
else if(c == '>'){ /*HTML-Sonderzeichen*/
*word++='&';*word++='g';*word++='t';*word++=';';
}
else
*word++=c;
}
else
{
ungetc(c,stdin); /*newline wieder zurück nach stdin*/
*word='\0';
break;
}
}
return HASH;
}
else if(newline) /*newline-flag gesetzt*/
newline=0;
/*Makierung*/
if(c=='\\' && !komment) /*c== \ und nicht das Kommentar-flag*/
{
cc=getc(stdin); /*Noch ein Zeichen einlesen*/
*word++=c;
*word++=cc;
if(isdigit(cc)) /*Eine dezimal Ziffer*/
{
while(--n > 2)
{
c=getc(stdin);
if(!isdigit(c)) /*Keine dazimal Ziffer*/
{
ungetc(c,stdin);
break;
}
*word++=c;
}
}
*word='\0'; /*Terminieren*/
return MASK;
}
/*Einfaches Zeichen*/
else if(c== '\'' && !komment && !double_quote)
{
if(single_quote) /*Das Flag bereits gesetzt?*/
{
single_quote=0; /*Flag wieder löschen*/
return CHAR_E; /*Zeichenende gefunden*/
}
else /*Flag noch nicht gesetzt....*/
{
single_quote=1;
return CHAR_A;
}
}
/*String*/
else if(c=='\"' && !komment && !single_quote)
{
if(double_quote) /*Flag bereits gesetzte*/
{
double_quote=0;
return QUOTING_E;
}
else
{
double_quote=1;
return QUOTING_A;
}
}
/*Beginn Anweisungsblock*/
else if(c=='{' && !komment && !double_quote && !single_quote)
{
*word++=c;
*word='\0';
return BLOCK_S;
}
else if(c=='}' && !komment && !double_quote && !single_quote)
{
*word++=c;
*word='\0';
return BLOCK_E;
}
/*Kommentar Beginn*/
else if(c=='/' && !komment && !double_quote && !single_quote)
{
if((cc = getc(stdin)) == '*')
{
komment=1;
*word++=c;
*word++=cc;
*word='\0';
return KOMMENTAR_S;
}
ungetc(cc, stdin);
}
/*Kommentar Ende*/
else if(c=='*' && komment && !double_quote && !single_quote)
{
if(( cc = getc(stdin)) == '/')
{
komment=0;
*word++=c;
*word++=cc;
*word='\0';
return KOMMENTAR_E;
}
ungetc(cc,stdin);
}
*word++=c;
*word='\0';
return c;
}/*Ende !isalpha*/
*word++=c;
while(--n > 0)
{
c=getc(stdin);
if(!isalpha(c) && !isdigit(c))
{
ungetc(c, stdin);
break;
}
*word++=c;
}
*word='\0';
return ALPHABET;
}

Ich denke mal der Quellcode ist einfach verständlich und gut Kommentiert. Hier also nochmals der gesamte Quellcode unseres Programms mit kleinen Veränderungen, wie zum Beispiel die Braunfärbung der einzelen Datentypen wie int, long, double.....usw. (siehe Headerdatei). Zuerst die Headerdatei "C2HTML.H"....

/*Download:c2htm.h*/
#ifndef C_TO_HTML_H

/*Farbendefinition*/
#define WEISS "#FFFFFF"
#define ROT "#FF0000"
#define SCHWARZ "#000000"
#define GRAU "#B3B3B3"
#define BLAU "#0015CE"
#define GRUEN "#1ADD00"
#define PURPLE "#C909DA"
#define BRAUN "#6C403C"

/*Zeichentypen für die Funktion read_word()*/
#define ALPHABET 0x0100 /*A-Z, a-z*/
#define DEZIMAL 0x0200 /*0-9*/
#define KOMMENTAR_S 0x0300 /*Kommentaranfang*/
#define KOMMENTAR_E 0x0400 /*Kommentarende*/
#define BLOCK_S 0x0500 /*Blockanfang*/
#define BLOCK_E 0x0600 /*Blockende*/
#define QUOTING_A 0x0700 /*Stringanfang*/
#define QUOTING_E 0x0800 /*Stringende*/
#define CHAR_A 0x0900 /*Zeichenanfang*/
#define CHAR_E 0x0A00 /*Zeichenende*/
#define MASK 0x0B00 /*Maskierung*/
#define HASH 0x0C00 /*HASH*/

#define MAXWORD 512 /*Maximale Wortlänge*/

/*C-Schlüsselworte*/
static const char *C_key_words[] = {
"auto", "break", "case", "continue", "default",
"do", "else", "enum", "for", "goto", "if", "return", "short",
"sizeof", "struct", "switch", "typedef", "union", "while" };

/*Präprozessordirektiven*/
static const char *P_key_words[] = {
"define", "defined", "elif", "else", "endif", "error", "if",
"ifdef", "ifndef", "include", "line", "pragma", "undef" };

/*Datentypen*/
static const char *C_typen[]= {
"char", "const", "double", "extern", "float", "int", "long",
"register", "short", "static", "unsigned", "void" "volatile" };

/*Anzahl der Elemente im Array*/
static const int C_keys = (sizeof(C_key_words) / sizeof(char *));
static const int P_keys = (sizeof(P_key_words) / sizeof(char *));
static const int C_typs = (sizeof(C_typen) / sizeof(char *));

/*Syntaxhiglightning, Farbdefinition*/
static char *background= WEISS; /*Hintergrundfarbe*/
static char *textcolor = SCHWARZ; /*Textfarbe*/
static char *keyscolor = SCHWARZ; /*Schlüsselworte*/
static char *strings = ROT; /*Strings/Zeichen*/
static char *kommentar = GRAU; /*Kommentarfarbe*/
static char *praeproze = GRUEN; /*Präprozessordirektive*/
static char *zeichen = PURPLE; /*einzelnes Zeichen*/
static char *types = BRAUN; /*Datentypen*/

/*Funktionsprototypen*/
static void c2html(void);
static int is_key_word(char *, const char *[],const int);
static int read_word(char *, int);
static void HTML_head(char *);
static void HTML_end(void);

#define C_TO_HTML_H
#endif


Und nun das Hauptprogramm mit seinen Funktionen.........

/*Download:c2html.c*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "c2html.h"


/*Zustandsflags*/
static int komment=0; /*Kommentarflag*/
static int single_quote=0; /*Einfaches Anführungszeichen*/
static int double_quote=0; /*Doppeltes Anführungszeichen*/
static int hash=0; /*Hash-Zeichen*/
static int newline=0; /*Neue Zeile*/
static int nl=1; /*Zeilenzähler*/


int main(int argc, char *argv[])
{
if(argc < 2)
{
fprintf(stderr, "usage: c2html file.c > file.html\n");
exit(0);
}
if( freopen(argv[1], "r", stdin) == NULL)
{
fprintf(stderr, "Konnte %s nicht öffnen......\n",argv[1]);
exit(0);
}
/*HTML-Kopfzeile schreiben*/
HTML_head(argv[1]);
/*Nun die Konvertierung........*/
c2html();
/*Nur noch das Ende der HTML-Datei schreiben*/
HTML_end();

return 0;
}


/*Kopfzeile für HTML-Dokument.......*/
static void HTML_head(char *name)
{
fprintf(stdout,"<HTML>\n<HEAD>\n<TITLE>%s</TITLE>\n",name);
fprintf(stdout,"<BODY BGCOLOR=\"%s\" TEXT=%s>\n",background,textcolor);
fprintf(stdout,"<H2><A HREF=\"%s\">/*%s*/</A></H2>\n<P><PRE>\n",name,name);
}

/*Fusszeile für HTML-Dokument.......*/
static void HTML_end()
{
fprintf(stdout, "</PRE></P>\n</BODY>\n</HEAD>\n</HTML>\n");
}


static void c2html()
{
char word[MAXWORD];
int ch,c;
int zeilennummer=1;

while( (ch = read_word(word, MAXWORD)) != EOF)
{
switch(ch)
{
case ALPHABET : if(komment || single_quote || double_quote)
fprintf(stdout, "%s", word); /*kommentar o. string*/
else if(hash && is_key_word(word,P_key_words,P_keys) >=0)
fprintf(stdout, "<FONT COLOR=%s><B>%s</B></FONT>",
praeproze,word); /*Präprozessordirekt.*/
else if(!hash && is_key_word(word,C_key_words,C_keys) >=0)
fprintf(stdout, "<FONT COLOR=%s><B>%s</B></FONT>",
keyscolor,word); /*Schlüsselwort*/
else if(!hash && is_key_word(word, C_typen, C_typs) >=0)
fprintf(stdout, "<FONT COLOR=%s>%s</FONT>",types,word);
/*Datentypen wie int, long.........*/
else
fprintf(stdout,"%s",word); /*sonstiges Wort*/
break;
case HASH : fprintf(stdout,"<FONT COLOR=%s>%s",praeproze,word);
fprintf(stdout,"</FONT>");
break;
case KOMMENTAR_S: fprintf(stdout,"<FONT COLOR=%s><I>%s",kommentar,word);
break;
case KOMMENTAR_E: fprintf(stdout,"%s</I></FONT>",word);
break;
case BLOCK_S : fprintf(stdout,"<B>%s</B>\n",word);
break;
case BLOCK_E : fprintf(stdout,"<B>%s</B>",word);
break;
case QUOTING_A : fprintf(stdout,"<FONT COLOR=%s>&quot;",strings);
break;
case QUOTING_E : fprintf(stdout,"&quot</FONT>");
break;
case CHAR_A : fprintf(stdout,"<FONT COLOR=%s>\'",zeichen);
break;
case CHAR_E : fprintf(stdout, "\'</FONT>");
break;
case MASK : fprintf(stdout,"%s",word);
break;
/*HTML - SONDERZEICHEN BEHANDELN*/
case '<' : fprintf(stdout, "&lt;"); break;
case '>' : fprintf(stdout, "&gt;"); break;
case '\"' : fprintf(stdout, "&quot;"); break;
case '&' : fprintf(stdout, "&amp;"); break;

case '\n' : if( (c=getc(stdin)) != EOF && newline)
{
ungetc(c, stdin);
if(komment)
{
fprintf(stdout,"</I></FONT>");
fprintf(stdout,"<FONT COLOR=%s><I>",kommentar);
}
else
{
fprintf(stdout,"<BR>");
nl++;
}
}
break;
default : fprintf(stdout, "%c", ch);
break;
}/*Ende switch*/
}/*Ende while....*/
}

/*Such nach einem Schlüsselwort oder Präprozessordirektive*/
static int is_key_word(char *word, const char *keys[],const int n)
{
int i;
for(i=0; i<n; i++)
{
if(strcmp(word,keys[i]) == 0)
return 1;
}
return -1;
}


static int read_word(char *word, int n)
{
int c, cc, ch;
int flag=0;

c=getc(stdin); /*Ein Zeichen einlese*/
if(!isalpha(c))/*keine Buchstaben?*/
{
if(c=='\n') /*ist es ein newline*/
{
newline=1;
hash=0;
}
/*Ist das newline-flag gesetzt und c == # -> Präprozessordirektive*/
else if((newline || nl==1)&&!komment&&!single_quote&&!double_quote&& c == '#')
{
hash=1;
*word++=c;
while(--n > 0)
{
flag=0;
c=getc(stdin);
if(c != '\n')
{
if(c == '<'){ /*HTML-Sonderzeichen*/
*word++='&';*word++='l';*word++='t';*word++=';';
}
else if(c == '>'){ /*HTML-Sonderzeichen*/
*word++='&';*word++='g';*word++='t';*word++=';';
}
else
*word++=c;
}
else
{
ungetc(c,stdin); /*newline wieder zurück nach stdin*/
*word='\0';
break;
}
}
return HASH;
}
else if(newline) /*newline-flag gesetzt*/
newline=0;
/*Makierung*/
if(c=='\\' && !komment) /*c== \ und nicht das Kommentar-flag*/
{
cc=getc(stdin); /*Noch ein Zeichen einlesen*/
*word++=c;
*word++=cc;
if(isdigit(cc)) /*Eine dezimal Ziffer*/
{
while(--n > 2)
{
c=getc(stdin);
if(!isdigit(c)) /*Keine dazimal Ziffer*/
{
ungetc(c,stdin);
break;
}
*word++=c;
}
}
*word='\0'; /*Terminieren*/
return MASK;
}
/*Einfaches Zeichen*/
else if(c== '\'' && !komment && !double_quote)
{
if(single_quote) /*Das Flag bereits gesetzt?*/
{
single_quote=0; /*Flag wieder löschen*/
return CHAR_E; /*Zeichenende gefunden*/
}
else /*Flag noch nicht gesetzt....*/
{
single_quote=1;
return CHAR_A;
}
}
/*String*/
else if(c=='\"' && !komment && !single_quote)
{
if(double_quote) /*Flag bereits gesetzte*/
{
double_quote=0;
return QUOTING_E;
}
else
{
double_quote=1;
return QUOTING_A;
}
}
/*Beginn Anweisungsblock*/
else if(c=='{' && !komment && !double_quote && !single_quote)
{
*word++=c;
*word='\0';
return BLOCK_S;
}
else if(c=='}' && !komment && !double_quote && !single_quote)
{
*word++=c;
*word='\0';
return BLOCK_E;
}
/*Kommentar Beginn*/
else if(c=='/' && !komment && !double_quote && !single_quote)
{
if((cc = getc(stdin)) == '*')
{
komment=1;
*word++=c;
*word++=cc;
*word='\0';
return KOMMENTAR_S;
}
ungetc(cc, stdin);
}
/*Kommentar Ende*/
else if(c=='*' && komment && !double_quote && !single_quote)
{
if(( cc = getc(stdin)) == '/')
{
komment=0;
*word++=c;
*word++=cc;
*word='\0';
return KOMMENTAR_E;
}
ungetc(cc,stdin);
}
*word++=c;
*word='\0';
return c;
}/*Ende !isalpha*/
*word++=c;
while(--n > 0)
{
c=getc(stdin);
if(!isalpha(c) && !isdigit(c))
{
ungetc(c, stdin);
break;
}
*word++=c;
}
*word='\0';
return ALPHABET;
}

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf