summaryrefslogtreecommitdiff
path: root/support/asc2tex2/asc2tex.c
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/asc2tex2/asc2tex.c
Initial commit
Diffstat (limited to 'support/asc2tex2/asc2tex.c')
-rw-r--r--support/asc2tex2/asc2tex.c1195
1 files changed, 1195 insertions, 0 deletions
diff --git a/support/asc2tex2/asc2tex.c b/support/asc2tex2/asc2tex.c
new file mode 100644
index 0000000000..7b41facf14
--- /dev/null
+++ b/support/asc2tex2/asc2tex.c
@@ -0,0 +1,1195 @@
+/* Das Programm ASC2TeX dient zum Konvertieren von Text-Bildschirm-
+ Hardcopies. Das "Bild" muá als ASCII-Datei vorliegen und den
+ Suffix ".SCR" haben.
+ Aufruf: ASC2TEX Datei_ohne_Suffix */
+
+#include<stdio.h>
+#include<string.h>
+#include<string2.h>
+
+/* Ascii - Codes fr die einfachen Linien */
+#define ObLi 218 /* Ecke Oben Links: Ú */
+#define ObRe 191 /* Ecke Oben Rechts: ¿ */
+#define UnLi 192 /* Ecke Unten Links: À */
+#define UnRe 217 /* Ecke Unten Rechts: Ù */
+#define Hori 196 /* Horizontale Linie: Ä */
+#define Senk 179 /* Senkrechte Linie: ³ */
+#define TOb 194 /* T-Stck Oben: Â */
+#define TUn 193 /* T-Stck Unten: Á */
+#define TLi 195 /* T-Stck Links: Ã */
+#define TRe 180 /* T-Stck Rechts: ´ */
+#define Kreuz 197 /* Kreuz zw. Hori und Senk: Å */
+
+/* Ascii - Codes fr die doppelten Linien */
+#define DoObLi 201 /* Ecke Oben Links: É */
+#define DoObRe 187 /* Ecke Oben Rechts: » */
+#define DoUnLi 200 /* Ecke Unten Links: È */
+#define DoUnRe 188 /* Ecke Unten Rechts: ¼ */
+#define DoHori 205 /* Horizontale Linie: Í */
+#define DoSenk 186 /* Senkrechte Linie: º */
+#define DoTOb 203 /* T-Stck Oben: Ë */
+#define DoTUn 202 /* T-Stck Unten: Ê */
+#define DoTLi 204 /* T-Stck Links: Ì */
+#define DoTRe 185 /* T-Stck Rechts: ¹ */
+#define DoKreuz 206 /* Kreuz zw. Hori und Senk: Î */
+
+#define Unterstrich 95 /* _ */
+
+#define Muster1 176 /* dnnes Punktmuster ° */
+#define Muster2 177 /* mitteldichtes Punktmuster ± */
+#define Muster3 178 /* dichtes Punktmuster ²*/
+#define Block 219 /* dichter gehts nicht Û */
+#define Topblock 223 /* obere H„lfte ß */
+#define Buttomblock 220 /* untere H„lfte Ü */
+
+#define ZeichBreite (long)122
+#define ZeichHoehe (long)235
+
+/* Hintergrundzeichen, die in Leerzeichen gewandelt werden sollen,
+ und zwar bevor das Bild um unntze Leerzeichen verkleinert wird. */
+#define hi0 1
+#define hi1 2
+#define hi2 7
+#define hi3 8
+#define hi4 9
+#define hi5 16
+#define hi6 17
+#define hi7 127
+#define hi8 32
+#define hi9 32
+
+
+unsigned char codepage850 [256][40] =
+/* 0 1 2 3 4 */
+/* 5 6 7 8 9 */
+/* 0*/ {"" ,"" ,"" ,"$\\heartsuit$","$\\diamondsuit$",
+ "$\\clubsuit$","$\\spadesuit$","" ,"" ,"" ,
+
+/* 1*/ "" ,"" ,"" ,"" ,"" ,
+ "" ,"" ,"" ,"$\\updownarrow$","" ,
+
+/* 2*/ "\\P" ,"\\S" ,"" ,"" ,"$\\uparrow$",
+ "$\\downarrow$","$\\rightarrow$","$\\leftarrow$","","$\\leftrightarrow$",
+
+/* 3*/ "" ,"" ,"" ,"!" ,"{\\dq}",
+ "\\#" ,"\\$" ,"\\%" ,"\\&" ,"\'" ,
+
+/* 4*/ "(" ,")" ,"*" ,"+" ,"," ,
+ "-" ,"." ,"/" ,"0" ,"1" ,
+
+/* 5*/ "2" ,"3" ,"4" ,"5" ,"6" ,
+ "7" ,"8" ,"9" ,":" ,";" ,
+
+/* 6*/ "$<$" ,"=" ,"$>$" ,"?" ,"@" ,
+ "A" ,"B" ,"C" ,"D" ,"E" ,
+
+/* 7*/ "F" ,"G" ,"H" ,"I" ,"J" ,
+ "K" ,"L" ,"M" ,"N" ,"O" ,
+
+/* 8*/ "P" ,"Q" ,"R" ,"S" ,"T" ,
+ "U" ,"V" ,"W" ,"X" ,"Y" ,
+
+/* 9*/ "Z" ,"[" ,"$\\backslash$","]" ,"\\^{}" ,
+ "" ,"\\`{\\ }" ,"a" ,"b" ,"c" ,
+
+/*10*/ "d" ,"e" ,"f" ,"g" ,"h" ,
+ "i" ,"j" ,"k" ,"l" ,"m" ,
+
+/*11*/ "n" ,"o" ,"p" ,"q" ,"r" ,
+ "s" ,"t" ,"u" ,"v" ,"w" ,
+
+/*12*/ "x" ,"y" ,"z" ,"\\{" ,"{|}" ,
+ "\\}" ,"$\\tilde{\\ }$","" ,"\\c{C}" ,"\\\"u" ,
+
+/*13*/ "\\\'e" ,"\\^a" ,"\\\"a" ,"\\`a" ,"{\\aa}",
+ "\\c{c}" ,"\\^e" ,"\\\"e" ,"\\`e" ,"\\\"{\\i}",
+
+/*14*/ "\\^{\\i}" ,"\\`{\\i}" ,"\\\"A" ,"{\\AA}" ,"\\\'E" ,
+ "{\\ae}" ,"{\\AE}" ,"\\^o" ,"\\\"o" ,"\\`o" ,
+
+/*15*/ "\\^u" ,"\\`u" ,"\\\"y" ,"\\\"O" ,"\\\"U" ,
+ "{\\o}" ,"\\pounds" ,"{\\O}" ,"$\\times$" ,"$f$" ,
+
+/*16*/ "\\\'a" ,"\\\'{\\i}" ,"\\\'o" ,"\\\'u" ,"\\~n" ,
+ "\\~N" ,"$^a$" ,"$^\\circ$" ,"?`" ,"$\\bigcirc\\!\\!\\!\\!\\!{\\rm R}$",
+
+/*17*/ "$\\neg$","$\\frac{1}{2}$","$\\frac{1}{4}$","!`" ,"{\\flqq}",
+ "{\\frqq}" ,"" ,"" ,"" ,"" ,
+
+/*18*/ "" ,"\\\'A" ,"\\^A" ,"\\`A" ,"{\\copyright}",
+ "" ,"" ,"" ,"" ,"" ,
+
+/*19*/ "Y" ,"" ,"" ,"" ,"" ,
+ "" ,"" ,"" ,"\\~a" ,"\\~A" ,
+
+/*20*/ "" ,"" ,"" ,"" ,"" ,
+ "" ,"" ,"" ,"" ,"" ,
+
+/*21*/ "\\^E" ,"\\\"E" ,"\\`E" ,"\\i" ,"\\\'I" ,
+ "\\^I" ,"\\\"I" ,"" ,"" ,"",
+
+/*22*/ "","" ,"\\`I" ,"","\\\'O" ,
+ "{\\ss}" ,"\\^O" ,"\\`O" ,"\\~o" ,"\\~O" ,
+
+/*23*/ "$\\mu$" ,"" ,"" ,"\\\'U" ,"\\^U" ,
+ "\\`U" ,"\\\'y" ,"\\\'Y" ,"" ,"" ,
+
+/*24*/ "-" ,"$\\pm$" ,"$_=$" ,"$\\frac{3}{4}$","\\P" ,
+ "\\S" ,"$\\div$" ,"" ,"" ,"" ,
+
+/*25*/ "" ,"$^1$" ,"$^2$" ,"$^3$" ,"" ,
+ "" };
+
+
+
+struct tFlaeche { long int x1, y1, x2, y2, flaeche; };
+struct tzeile { unsigned char zeile[256]; };
+struct tzeile bild[101];
+long int breite;
+long int hoehe;
+
+
+int BildLaden ( char *name )
+{
+ long int x = -1;
+ long int y = 0;
+ char dateiname[255];
+ FILE *datei;
+ long int zeichen;
+
+ strcpy (dateiname, name); strcat (dateiname, ".SCR");
+ if ( (datei = fopen (dateiname, "rb")) == NULL ) {
+ printf ("Fehler beim ™ffnen der Quelldatei %s", dateiname);
+ return -1;
+ };
+
+ do {
+ zeichen = getc (datei);
+ if (zeichen == 13 || zeichen == EOF) {
+ x++;
+ bild[y].zeile[x] = '\0';
+ x = -1; y++;
+ }
+ else if (zeichen != 10) {
+ x++;
+ bild[y].zeile[x] = (unsigned char) zeichen;
+ };
+ } while ( zeichen != EOF );
+ bild[y].zeile[0] = (unsigned char) 255;
+
+ /* Ist ein eof-Zeichen (26) am Ende der Datei gewesen ? */
+ y--;
+ if ( y >= 0 ) {
+ for ( x = 0; bild[y].zeile[x] != '\0'; x++ );
+ x--;
+ if ( x >= 0 && bild[y].zeile[x] == (unsigned char) 26 ) {
+ bild[y].zeile[x] = '\0';
+ };
+ };
+ return 0;
+};
+
+
+int KopfSchreiben ( FILE *datei )
+{
+ fprintf ( datei, "\\begin{tt}\n" );
+ fprintf ( datei, "\\unitlength=1.00ex\n" );
+ fprintf ( datei, "\\begin{picture}" );
+ return 0;
+};
+
+
+int RestSchreiben ( FILE *datei )
+{
+ fprintf ( datei, "\\end{picture}\n" );
+ fprintf ( datei, "\\end{tt}\n" );
+ return 0;
+};
+
+
+int LeerzeichenSetzen ()
+/* Bild wird gescannt, die oben definierten Zeichen
+ werden in Leerzeichen umgesetzt */
+{
+ long int x = 0;
+ long int y = 0;
+
+ do {
+ if ( bild[y].zeile[x] == hi0 || bild[y].zeile[x] == hi1 ||
+ bild[y].zeile[x] == hi2 || bild[y].zeile[x] == hi3 ||
+ bild[y].zeile[x] == hi4 || bild[y].zeile[x] == hi5 ||
+ bild[y].zeile[x] == hi6 || bild[y].zeile[x] == hi7 ||
+ bild[y].zeile[x] == hi8 || bild[y].zeile[x] == hi9 )
+ {
+ bild [y].zeile[x] = (unsigned char) 32;
+ x++;
+ }
+ else if ( bild [y].zeile[x] == 0 ) {
+ y++; x = 0;
+ }
+ else {
+ x++;
+ }
+ } while ( bild [y].zeile[x] != (unsigned char) 255 );
+ return 0;
+};
+
+
+int BildAusgeben ()
+{
+ long int y = 0;
+ while ( bild[y].zeile[0] != 255 ) {
+ printf ("%s\n", bild[y].zeile);
+ y++;
+ };
+ return 0;
+};
+
+
+int BildGroesseFeststellen ( FILE *datei, long int ZeiBrei,
+ long int ZeiHoe )
+{
+ long int x;
+ long int y;
+
+ breite = 0;
+ y = 0;
+ while ( bild[y].zeile[0] != 255 ) {
+ x = strlen ( bild[y].zeile );
+ if ( x > breite )
+ breite = x;
+ y++;
+ };
+ hoehe = y;
+ printf ( "Breite des Bildes: %4.2f ex, H”he des Bildes: %4.2f ex\n",
+ ((float) (breite * ZeiBrei)) / 100.0,
+ ((float) (y * ZeiHoe)) / 100.0 );
+ fprintf ( datei, "(%4.2f, %4.2f)\n",
+ ((float) (breite * ZeiBrei)) / 100.0,
+ ((float) (y * ZeiHoe)) / 100.0 );
+ return 0;
+};
+
+/* ------------------------------------------------------------------ */
+/* Leerzeichen (und -zeilen) ringsherum l”schen: */
+
+int RechtsLoeschen ()
+{
+ long int y = 0;
+ while ( bild[y].zeile[0] != 255 ) {
+ strcut ( bild[y].zeile );
+ y++;
+ };
+ return 0;
+};
+
+int LinksLoeschen ()
+{
+ long int x = 0;
+ long int y = 0;
+ long int minleer = 256;
+ while ( bild[y].zeile[0] != 255 ) {
+ if ( bild[y].zeile[0] != '\0' ) {
+ for ( x = 0; bild[y].zeile[x] == 32; x++ );
+ if ( x < minleer )
+ minleer = x;
+ };
+ y++;
+ };
+ y = 0;
+ while ( bild[y].zeile[0] != 255 ) {
+ if ( bild[y].zeile[0] != '\0' ) {
+ for ( x = 0; x < minleer; x++ )
+ strdel ( bild[y].zeile );
+ };
+ y++;
+ };
+ return 0;
+};
+
+
+int UntenLoeschen ()
+{
+ long int y = 0;
+ while ( bild[y].zeile[0] != 255 ) {
+ y++;
+ };
+ y--;
+ while ( bild[y].zeile[0] == '\0' && y >= 0 ) {
+ bild[y].zeile[0] = 255;
+ y--;
+ };
+ return 0;
+};
+
+int ObenLoeschen ()
+{
+ long int y = 0;
+ while ( bild[0].zeile[0] == '\0' ) {
+ y = 0;
+ while ( bild[y].zeile[0] != 255 ) {
+ strcpy (bild[y].zeile, bild[y+1].zeile);
+ y++;
+ };
+ };
+ return 0;
+};
+
+int LeerzeichenAbschneiden ()
+{
+ RechtsLoeschen ();
+ LinksLoeschen ();
+ UntenLoeschen ();
+ ObenLoeschen ();
+ return 0;
+};
+
+/* -------------------------------------------------------------- */
+/* Linien Scannen: */
+
+int HorLinie ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int start, long int ziel, long int y,
+ long int offsetZaehlerStart, long int offsetTeilerStart,
+ long int offsetZaehlerEnd, long int offsetTeilerEnd,
+ long int offsetZaehlerY, long int offsetTeilerY )
+{
+ fprintf ( datei, " \\put(%4.2f, %4.2f)",
+ ((float) ((start * ZeiBrei)
+ + ((ZeiBrei * offsetZaehlerStart) / offsetTeilerStart))) / 100.0,
+ ((float) (((hoehe - y) * ZeiHoe)
+ - ((ZeiHoe * offsetZaehlerY) / offsetTeilerY))) / 100.0 );
+ fprintf ( datei, "{\\line(1,0){%4.2f}}\n",
+ ((float) (((ziel - start) * ZeiBrei)
+ - ((ZeiBrei * offsetZaehlerStart) / offsetTeilerStart)
+ + ((ZeiBrei * offsetZaehlerEnd) / offsetTeilerEnd))) / 100.0 );
+ return 0;
+};
+
+
+int VerLinie ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int x, long int start, long int ziel,
+ long int offsetZaehlerX, long int offsetTeilerX,
+ long int offsetZaehlerStart, long int offsetTeilerStart,
+ long int offsetZaehlerEnd, long int offsetTeilerEnd )
+{
+ fprintf ( datei, " \\put(%4.2f, %4.2f)",
+ ((float) ((x * ZeiBrei)
+ + ((ZeiBrei * offsetZaehlerX) / offsetTeilerX))) / 100.0,
+ ((float) (((hoehe - start) * ZeiHoe)
+ - ((ZeiHoe * offsetZaehlerStart) / offsetTeilerStart))) / 100.0 );
+ fprintf ( datei, "{\\line(0,-1){%4.2f}}\n",
+ ((float) (((ziel - start) * ZeiHoe)
+ - ((ZeiHoe * offsetZaehlerStart) / offsetTeilerStart)
+ + ((ZeiHoe * offsetZaehlerEnd) / offsetTeilerEnd))) / 100.0 );
+ return 0;
+};
+
+
+int EinfHorLinie ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int *x, long int *y,
+ long int offsetZaehler, long int offsetTeiler )
+{
+ long int start;
+
+ start = *x;
+ if ( bild[*y].zeile[*x] != ObRe && bild[*y].zeile[*x] != UnRe &&
+ bild[*y].zeile[*x] != TRe )
+ {
+ *x += 1;
+ };
+
+ while ( bild[*y].zeile[*x] == Hori || bild[*y].zeile[*x] == TOb ||
+ bild[*y].zeile[*x] == TUn || bild[*y].zeile[*x] == Kreuz )
+ {
+ *x += 1;
+ };
+ if ( bild[*y].zeile[*x] == ObRe || bild[*y].zeile[*x] == UnRe ||
+ bild[*y].zeile[*x] == TRe )
+ {
+ HorLinie ( datei, ZeiBrei, ZeiHoe, start, *x, *y,
+ offsetZaehler, offsetTeiler, (long) 1, (long) 2,
+ (long) 1, (long) 2 );
+ }
+ else {
+ HorLinie ( datei, ZeiBrei, ZeiHoe, start, *x, *y,
+ offsetZaehler, offsetTeiler, (long) 0, (long) 1,
+ (long) 1, (long) 2 );
+ };
+ if ( bild[*y].zeile[*x] == ObRe || bild[*y].zeile[*x] == UnRe ||
+ bild[*y].zeile[*x] == TRe )
+ {
+ *x += 1;
+ };
+ return 0;
+};
+
+
+int EinfHorLinienScannen ( FILE *datei,
+ long int ZeiBrei, long int ZeiHoe )
+{
+ long int y;
+ long int x;
+
+ y = 0;
+ while ( bild[y].zeile[0] != 255 ) {
+ x = 0;
+ while ( bild[y].zeile[x] != '\0' ) {
+ if ( bild[y].zeile[x] == ObLi || bild[y].zeile[x] == UnLi ||
+ bild[y].zeile[x] == TLi )
+ {
+ EinfHorLinie ( datei, ZeiBrei, ZeiHoe, &x, &y, (long) 1, (long) 2 );
+ }
+ else if ( bild[y].zeile[x] == ObRe || bild[y].zeile[x] == UnRe ||
+ bild[y].zeile[x] == TRe || bild[y].zeile[x] == Hori ||
+ bild[y].zeile[x] == TOb || bild[y].zeile[x] == TUn ||
+ bild[y].zeile[x] == Kreuz )
+ {
+ EinfHorLinie ( datei, ZeiBrei, ZeiHoe, &x, &y, (long) 0, (long) 1 );
+ }
+ else {
+ x++;
+ };
+ };
+ y++;
+ };
+ return 0;
+};
+
+
+int EinfVerLinie ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int *x, long int *y,
+ long int offsetZaehler, long int offsetTeiler )
+{
+ long int start;
+ long int offsetZaehlerEnd;
+ long int offsetTeilerEnd;
+
+ start = *y;
+ if ( bild[*y].zeile[*x] != UnLi && bild[*y].zeile[*x] != UnRe &&
+ bild[*y].zeile[*x] != TUn )
+ {
+ *y += 1;
+ };
+
+ while ( bild[*y].zeile[*x] == Senk || bild[*y].zeile[*x] == TRe ||
+ bild[*y].zeile[*x] == TLi || bild[*y].zeile[*x] == Kreuz )
+ {
+ *y += 1;
+ };
+ if ( bild[*y].zeile[*x] == UnLi || bild[*y].zeile[*x] == UnRe ||
+ bild[*y].zeile[*x] == TUn )
+ {
+ offsetZaehlerEnd = 1;
+ offsetTeilerEnd = 2;
+ }
+ else {
+ offsetZaehlerEnd = 0;
+ offsetTeilerEnd = 1;
+ };
+ VerLinie ( datei, ZeiBrei, ZeiHoe, *x, start, *y, (long) 1, (long) 2,
+ offsetZaehler, offsetTeiler,
+ offsetZaehlerEnd, offsetTeilerEnd );
+ if ( bild[*y].zeile[*x] == UnLi || bild[*y].zeile[*x] == UnRe ||
+ bild[*y].zeile[*x] == TUn )
+ {
+ *y += 1;
+ };
+ return 0;
+};
+
+
+int EinfVerLinienScannen ( FILE *datei,
+ long int ZeiBrei, long int ZeiHoe )
+{
+ long int y;
+ long int x;
+
+ x = 0;
+ while ( x < breite ) {
+ y = 0;
+ while ( y < hoehe ) {
+ if ( bild[y].zeile[x] == ObLi || bild[y].zeile[x] == ObRe ||
+ bild[y].zeile[x] == TOb )
+ {
+ EinfVerLinie ( datei, ZeiBrei, ZeiHoe, &x, &y, (long) 1, (long) 2 );
+ }
+ else if ( bild[y].zeile[x] == UnLi || bild[y].zeile[x] == UnRe ||
+ bild[y].zeile[x] == TRe || bild[y].zeile[x] == Senk ||
+ bild[y].zeile[x] == TLi || bild[y].zeile[x] == TUn ||
+ bild[y].zeile[x] == Kreuz )
+ {
+ EinfVerLinie ( datei, ZeiBrei, ZeiHoe, &x, &y, (long) 0, (long) 1 );
+ }
+ else {
+ y++;
+ };
+ };
+ x++;
+ };
+ return 0;
+};
+
+
+int DoppHorLinie ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int *x, long int *y,
+ long int offsetZaehler1, long int offsetTeiler1,
+ long int offsetZaehler2, long int offsetTeiler2 )
+{
+ long int start1;
+ long int start2;
+
+ start1 = *x;
+ start2 = *x;
+ if ( bild[*y].zeile[*x] == DoObLi || bild[*y].zeile[*x] == DoUnLi ||
+ bild[*y].zeile[*x] == DoTLi )
+ {
+ *x += 1;
+ };
+
+ while ( bild[*y].zeile[*x] == DoHori || bild[*y].zeile[*x] == DoTOb ||
+ bild[*y].zeile[*x] == DoTUn || bild[*y].zeile[*x] == DoKreuz )
+ {
+ if ( bild[*y].zeile[*x] == DoTUn || bild[*y].zeile[*x] == DoKreuz ) {
+ HorLinie ( datei, ZeiBrei, ZeiHoe, start1, *x, *y,
+ offsetZaehler1, offsetTeiler1,
+ (long) 1, (long) 3, (long) 2, (long) 5 );
+ start1 = *x;
+ offsetZaehler1 = 2;
+ offsetTeiler1 = 3;
+ };
+ if ( bild[*y].zeile[*x] == DoTOb || bild[*y].zeile[*x] == DoKreuz ) {
+ HorLinie ( datei, ZeiBrei, ZeiHoe, start2, *x, *y,
+ offsetZaehler2, offsetTeiler2,
+ (long) 1, (long) 3, (long) 3, (long) 5 );
+ start2 = *x;
+ offsetZaehler2 = 2;
+ offsetTeiler2 = 3;
+ };
+ *x += 1;
+ }; /* while */
+ if ( bild[*y].zeile[*x] == DoObRe ) {
+ HorLinie ( datei, ZeiBrei, ZeiHoe, start1, *x, *y,
+ offsetZaehler1, offsetTeiler1,
+ (long) 2, (long) 3, (long) 2, (long) 5 );
+ HorLinie ( datei, ZeiBrei, ZeiHoe, start2, *x, *y,
+ offsetZaehler2, offsetTeiler2,
+ (long) 1, (long) 3, (long) 3, (long) 5 );
+ }
+ else if ( bild[*y].zeile[*x] == DoUnRe ) {
+ HorLinie ( datei, ZeiBrei, ZeiHoe, start1, *x, *y,
+ offsetZaehler1, offsetTeiler1,
+ (long) 1, (long) 3, (long) 2, (long) 5 );
+ HorLinie ( datei, ZeiBrei, ZeiHoe, start2, *x, *y,
+ offsetZaehler2, offsetTeiler2,
+ (long) 2, (long) 3, (long) 3, (long) 5 );
+ }
+ else if ( bild[*y].zeile[*x] == DoTRe ) {
+ HorLinie ( datei, ZeiBrei, ZeiHoe, start1, *x, *y,
+ offsetZaehler1, offsetTeiler1,
+ (long) 1, (long) 3, (long) 2, (long) 5 );
+ HorLinie ( datei, ZeiBrei, ZeiHoe, start2, *x, *y,
+ offsetZaehler2, offsetTeiler2,
+ (long) 1, (long) 3, (long) 3, (long) 5 );
+ }
+ else {
+ HorLinie ( datei, ZeiBrei, ZeiHoe, start1, *x, *y,
+ offsetZaehler1, offsetTeiler1,
+ (long) 0, (long) 1, (long) 2, (long) 5 );
+ HorLinie ( datei, ZeiBrei, ZeiHoe, start2, *x, *y,
+ offsetZaehler2, offsetTeiler2,
+ (long) 0, (long) 1, (long) 3, (long) 5 );
+ };
+ if ( bild[*y].zeile[*x] == DoObRe || bild[*y].zeile[*x] == DoUnRe ||
+ bild[*y].zeile[*x] == DoTRe )
+ {
+ *x += 1;
+ };
+ return 0;
+};
+
+
+int DoppHorLinienScannen ( FILE *datei,
+ long int ZeiBrei, long int ZeiHoe )
+{
+ long int y;
+ long int x;
+
+ y = 0;
+ while ( bild[y].zeile[0] != 255 ) {
+ x = 0;
+ while ( bild[y].zeile[x] != '\0' ) {
+ if ( bild[y].zeile[x] == DoObLi ) {
+ DoppHorLinie ( datei, ZeiBrei, ZeiHoe, &x, &y,
+ (long) 1, (long) 3, (long) 2, (long) 3 );
+ }
+ else if ( bild[y].zeile[x] == DoUnLi ) {
+ DoppHorLinie ( datei, ZeiBrei, ZeiHoe, &x, &y,
+ (long) 2, (long) 3, (long) 1, (long) 3 );
+ }
+ else if ( bild[y].zeile[x] == DoTLi ) {
+ DoppHorLinie ( datei, ZeiBrei, ZeiHoe, &x, &y,
+ (long) 2, (long) 3, (long) 2, (long) 3 );
+ }
+ else if ( bild[y].zeile[x] == DoObRe || bild[y].zeile[x] == DoUnRe ||
+ bild[y].zeile[x] == DoTRe || bild[y].zeile[x] == DoHori ||
+ bild[y].zeile[x] == DoTOb || bild[y].zeile[x] == DoTUn ||
+ bild[y].zeile[x] == DoKreuz )
+ {
+ DoppHorLinie ( datei, ZeiBrei, ZeiHoe, &x, &y,
+ (long) 0, (long) 1, (long) 0, (long) 1 );
+ }
+ else {
+ x++;
+ };
+ };
+ y++;
+ };
+ return 0;
+};
+
+
+int DoppVerLinie ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int *x, long int *y,
+ long int offsetZaehler1, long int offsetTeiler1,
+ long int offsetZaehler2, long int offsetTeiler2 )
+{
+ long int start1;
+ long int start2;
+
+ start1 = *y;
+ start2 = *y;
+ if ( bild[*y].zeile[*x] == DoObLi || bild[*y].zeile[*x] == DoObRe ||
+ bild[*y].zeile[*x] == DoTOb )
+ {
+ *y += 1;
+ };
+
+ while ( bild[*y].zeile[*x] == DoSenk || bild[*y].zeile[*x] == DoTLi ||
+ bild[*y].zeile[*x] == DoTRe || bild[*y].zeile[*x] == DoKreuz )
+ {
+ if ( bild[*y].zeile[*x] == DoTRe || bild[*y].zeile[*x] == DoKreuz ) {
+ VerLinie ( datei, ZeiBrei, ZeiHoe, *x, start1, *y, (long) 1, (long) 3,
+ offsetZaehler1, offsetTeiler1,
+ (long) 2, (long) 5 );
+ start1 = *y;
+ offsetZaehler1 = 3;
+ offsetTeiler1 = 5;
+ };
+ if ( bild[*y].zeile[*x] == DoTLi || bild[*y].zeile[*x] == DoKreuz ) {
+ VerLinie ( datei, ZeiBrei, ZeiHoe, *x, start2, *y, (long) 2, (long) 3,
+ offsetZaehler2, offsetTeiler2,
+ (long) 2, (long) 5 );
+ start2 = *y;
+ offsetZaehler2 = 3;
+ offsetTeiler2 = 5;
+ };
+ *y += 1;
+ }; /* while */
+ if ( bild[*y].zeile[*x] == DoUnLi ) {
+ VerLinie ( datei, ZeiBrei, ZeiHoe, *x, start1, *y, (long) 1, (long) 3,
+ offsetZaehler1, offsetTeiler1,
+ (long) 3, (long) 5 );
+ VerLinie ( datei, ZeiBrei, ZeiHoe, *x, start2, *y, (long) 2, (long) 3,
+ offsetZaehler2, offsetTeiler2,
+ (long) 2, (long) 5 );
+ }
+ else if ( bild[*y].zeile[*x] == DoUnRe ) {
+ VerLinie ( datei, ZeiBrei, ZeiHoe, *x, start1, *y, (long) 1, (long) 3,
+ offsetZaehler1, offsetTeiler1,
+ (long) 2, (long) 5 );
+ VerLinie ( datei, ZeiBrei, ZeiHoe, *x, start2, *y, (long) 2, (long) 3,
+ offsetZaehler2, offsetTeiler2,
+ (long) 3, (long) 5 );
+ }
+ else if ( bild[*y].zeile[*x] == DoTUn ) {
+ VerLinie ( datei, ZeiBrei, ZeiHoe, *x, start1, *y, (long) 1, (long) 3,
+ offsetZaehler1, offsetTeiler1,
+ (long) 2, (long) 5 );
+ VerLinie ( datei, ZeiBrei, ZeiHoe, *x, start2, *y, (long) 2, (long) 3,
+ offsetZaehler2, offsetTeiler2,
+ (long) 2, (long) 5 );
+ }
+ else {
+ VerLinie ( datei, ZeiBrei, ZeiHoe, *x, start1, *y, (long) 1, (long) 3,
+ offsetZaehler1, offsetTeiler1,
+ (long) 0, (long) 1 );
+ VerLinie ( datei, ZeiBrei, ZeiHoe, *x, start2, *y, (long) 2, (long) 3,
+ offsetZaehler2, offsetTeiler2,
+ (long) 0, (long) 1 );
+ };
+ if ( bild[*y].zeile[*x] == DoUnLi || bild[*y].zeile[*x] == DoUnRe ||
+ bild[*y].zeile[*x] == DoTUn )
+ {
+ *y += 1;
+ };
+ return 0;
+};
+
+
+int DoppVerLinienScannen ( FILE *datei,
+ long int ZeiBrei, long int ZeiHoe )
+{
+ long int y;
+ long int x;
+
+ x = 0;
+ while ( x < breite ) {
+ y = 0;
+ while ( y < hoehe ) {
+ if ( bild[y].zeile[x] == DoObLi ) {
+ DoppVerLinie ( datei, ZeiBrei, ZeiHoe, &x, &y,
+ (long) 2, (long) 5, (long) 3, (long) 5 );
+ }
+ else if ( bild[y].zeile[x] == DoObRe ) {
+ DoppVerLinie ( datei, ZeiBrei, ZeiHoe, &x, &y,
+ (long) 3, (long) 5, (long) 2, (long) 5 );
+ }
+ else if ( bild[y].zeile[x] == DoTOb ) {
+ DoppVerLinie ( datei, ZeiBrei, ZeiHoe, &x, &y,
+ (long) 3, (long) 5, (long) 3, (long) 5 );
+ }
+ else if ( bild[y].zeile[x] == DoUnLi || bild[y].zeile[x] == DoUnRe ||
+ bild[y].zeile[x] == DoTUn || bild[y].zeile[x] == DoSenk ||
+ bild[y].zeile[x] == DoTLi || bild[y].zeile[x] == DoTRe ||
+ bild[y].zeile[x] == DoKreuz )
+ {
+ DoppVerLinie ( datei, ZeiBrei, ZeiHoe, &x, &y,
+ (long) 0, (long) 1, (long) 0, (long) 1 );
+ }
+ else {
+ y++;
+ };
+ };
+ x++;
+ };
+ return 0;
+};
+
+
+int UnterstricheScannen ( FILE *datei,
+ long int ZeiBrei, long int ZeiHoe )
+{
+ long int y;
+ long int x;
+ long int start;
+
+ start = -1;
+ for ( y = 0; y < hoehe; y++ ) {
+ for ( x = 0; x <= breite; x++ ) {
+ if ( bild[y].zeile[x] == Unterstrich ) {
+ if ( start == -1 )
+ start = x;
+ }
+ else if ( start > -1 ) {
+ HorLinie ( datei, ZeiBrei, ZeiHoe, start, x, y,
+ (long) 0, (long) 1, (long) 0, (long) 1,
+ (long) 9, (long) 10 );
+ start = -1;
+ };
+ }; /* for ( x = 0...) */
+ }; /* for ( y = 0...) */
+ return 0;
+};
+
+int LinienScannen ( FILE *datei,
+ long int ZeiBrei, long int ZeiHoe )
+{
+ long int y;
+ long int x;
+ for ( y = 0; y < hoehe; y++ )
+ strextend ( bild[y].zeile, (short) breite );
+ for ( x = 0; x <= breite; x++ )
+ bild[y].zeile[x] = (unsigned char) 255;
+ EinfHorLinienScannen ( datei, ZeiBrei, ZeiHoe );
+ EinfVerLinienScannen ( datei, ZeiBrei, ZeiHoe );
+ DoppHorLinienScannen ( datei, ZeiBrei, ZeiHoe );
+ DoppVerLinienScannen ( datei, ZeiBrei, ZeiHoe );
+ UnterstricheScannen ( datei, ZeiBrei, ZeiHoe );
+ return 0;
+};
+
+
+/* -------------------------------------------------------------------- */
+/* Bl”cke Scannen (Punktmuster und Vollbl”cke) */
+
+int DotsSchreiben
+ ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int x1, long int y1, long int x2, long int y2,
+ float xBrei, float yHoe )
+/* Schreibt die geeigneten TeX-Befehle in die datei, so daá
+ ein Punktemuster auf der Fl„che lo=(x1,y1) bis ru=(x2,y2)
+ entsteht. Einschl. lu und ro */
+{
+ float yLauf;
+ float yDistanz;
+ float xLauf;
+ float xDistanz;
+ int xAnzahl;
+ int yAnzahl;
+ int i;
+
+ if ( (y2 - y1 + 1) * (long) 2 <= (x2 - x1 + 1) * (long) 3 )
+ /* Ist die Fl„che mehr horizontal oder mehr vertikal ?
+ Es sollen m”glichst wenige Multiputs verwendet werden.
+ Es werden ben”tigt: Breite * 6 Multiputs oder
+ H”he * 4 Multiputs */
+ { /* eine eher breite Box */
+ yLauf = ((float) ((hoehe - y2) * ZeiHoe)) / 100.0;
+ yDistanz = ((float) ZeiHoe) / 400.0;
+ xLauf = ((float) x1 * ZeiBrei) / 100.0;
+ xDistanz = ((float) ZeiBrei) / 300.0;
+ yAnzahl = ((int) y2 - (int) y1 + 1) * 2;
+ xAnzahl = ((int) x2 - (int) x1 + 1) * 3;
+ for ( i = 0; i < yAnzahl; i++ ) {
+ fprintf ( datei,
+ " \\multiput(%6.4f, %6.4f)(%6.4f, 0.00){%2d}{\\rule{%4.2f\\unitlength}{%4.2f\\unitlength}}\n",
+ xLauf + 0.5 * xDistanz, yLauf, xDistanz, xAnzahl, xBrei, yHoe );
+ yLauf = yLauf + yDistanz;
+ fprintf ( datei,
+ " \\multiput(%6.4f, %6.4f)(%6.4f, 0.00){%2d}{\\rule{%4.2f\\unitlength}{%4.2f\\unitlength}}\n",
+ xLauf, yLauf, xDistanz, xAnzahl, xBrei, yHoe );
+ yLauf = yLauf + yDistanz;
+ };
+ }
+ else { /* Eine mehr vertikale Fl„che */
+ yLauf = ((float) ((hoehe - y2) * ZeiHoe)) / 100.0;
+ yDistanz = ((float) ZeiHoe) / 200.0;
+ xLauf = ((float) x1 * ZeiBrei) / 100.0;
+ xDistanz = ((float) ZeiBrei) / 600.0;
+ yAnzahl = ((int) y2 - (int) y1 + 1) * 2;
+ xAnzahl = ((int) x2 - (int) x1 + 1) * 3;
+ for ( i = 0; i < xAnzahl; i++ ) {
+ fprintf ( datei,
+ " \\multiput(%6.4f, %6.4f)(0.00, %6.4f){%2d}{\\rule{%4.2f\\unitlength}{%4.2f\\unitlength}}\n",
+ xLauf, yLauf + 0.5 * yDistanz, yDistanz, yAnzahl, xBrei, yHoe );
+ xLauf = xLauf + xDistanz;
+ fprintf ( datei,
+ " \\multiput(%6.4f, %6.4f)(0.00, %6.4f){%2d}{\\rule{%4.2f\\unitlength}{%4.2f\\unitlength}}\n",
+ xLauf, yLauf, yDistanz, yAnzahl, xBrei, yHoe );
+ xLauf = xLauf + xDistanz;
+ };
+ };
+ return 0;
+};
+
+int DuennBlockSchreiben
+ ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int x1, long int y1, long int x2, long int y2 )
+{
+ return DotsSchreiben
+ (datei, ZeiBrei, ZeiHoe, x1, y1, x2, y2, (float) 0.15, (float) 0.2);
+};
+
+int MittelBlockSchreiben
+ ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int x1, long int y1, long int x2, long int y2 )
+{
+ return DotsSchreiben
+ (datei, ZeiBrei, ZeiHoe, x1, y1, x2, y2, (float) 0.2, (float) 0.3);
+};
+
+int DickBlockSchreiben
+ ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int x1, long int y1, long int x2, long int y2 )
+{
+ return DotsSchreiben
+ (datei, ZeiBrei, ZeiHoe, x1, y1, x2, y2, (float) 0.25, (float) 0.4);
+};
+
+int VollBlockSchreiben
+ ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int x1, long int y1, long int x2, long int y2 )
+{
+ fprintf ( datei,
+ " \\put(%6.4f, %6.4f){\\rule{%4.2f\\unitlength}{%4.2f\\unitlength}}\n",
+ ((float) x1 * ZeiBrei) / 100.0,
+ ((float) ((hoehe - y2) * ZeiHoe)) / 100.0,
+ ((float) (x2 - x1 + 1) * ZeiBrei) / 100.0,
+ ((float) (y2 - y1 + 1) * ZeiHoe) / 100.0 );
+ return 0;
+};
+
+/* Nur fr Debugging-Zwecke :
+int RahmenBlockSchreiben
+ ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int x1, long int y1, long int x2, long int y2 )
+{
+ static int i = 0;
+ i++;
+ fprintf ( datei,
+ " \\put(%6.4f, %6.4f){\\framebox(%4.2f, %4.2f){%2d}}\n",
+ ((float) x1 * ZeiBrei) / 100.0,
+ ((float) ((hoehe - y2) * ZeiHoe)) / 100.0,
+ ((float) (x2 - x1 + 1) * ZeiBrei) / 100.0,
+ ((float) (y2 - y1 + 1) * ZeiHoe) / 100.0,
+ i );
+ return 0;
+};
+*/
+
+
+int TopBlockSchreiben
+ ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int x1, long int y1, long int x2, long int y2 )
+{
+ if (y1 == y2) {
+ fprintf ( datei,
+ " \\put(%6.4f, %6.4f){\\rule{%4.2f\\unitlength}{%4.2f\\unitlength}}\n",
+ ((float) x1 * ZeiBrei) / 100.0,
+ (((float) ((hoehe - y2) * ZeiHoe))
+ + (float) ZeiHoe / 2.0)
+ / 100.0,
+ ((float) (x2 - x1 + 1) * ZeiBrei) / 100.0,
+ (float) ZeiHoe / 200.0 );
+ }
+ else {
+ fprintf ( datei,
+ " \\multiput(%6.4f, %6.4f)(0.00, %6.4f){%2d}{\\rule{%4.2f\\unitlength}{%4.2f\\unitlength}}\n",
+ ((float) x1 * ZeiBrei) / 100.0,
+ (((float) ((hoehe - y2) * ZeiHoe))
+ + (float) ZeiHoe / 2.0)
+ / 100.0,
+ (float) ZeiHoe / 100.0,
+ (int) y2 - (int) y1 + 1,
+ ((float) (x2 - x1 + 1) * ZeiBrei) / 100.0,
+ (float) ZeiHoe / 200.0 );
+ };
+ return 0;
+};
+
+
+int ButtomBlockSchreiben
+ ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int x1, long int y1, long int x2, long int y2 )
+{
+ if (y1 == y2) {
+ fprintf ( datei,
+ " \\put(%6.4f, %6.4f){\\rule{%4.2f\\unitlength}{%4.2f\\unitlength}}\n",
+ ((float) x1 * ZeiBrei) / 100.0,
+ ((float) ((hoehe - y2) * ZeiHoe)) / 100.0,
+ ((float) (x2 - x1 + 1) * ZeiBrei) / 100.0,
+ (float) ZeiHoe / 200.0 );
+ }
+ else {
+ fprintf ( datei,
+ " \\multiput(%6.4f, %6.4f)(0.00, %6.4f){%2d}{\\rule{%4.2f\\unitlength}{%4.2f\\unitlength}}\n",
+ ((float) x1 * ZeiBrei) / 100.0,
+ ((float) ((hoehe - y2) * ZeiHoe)) / 100.0,
+ (float) ZeiHoe / 100.0,
+ (int) y2 - (int) y1 + 1,
+ ((float) (x2 - x1 + 1) * ZeiBrei) / 100.0,
+ (float) ZeiHoe / 200.0 );
+ };
+ return 0;
+};
+
+
+int EinBlockScannen
+ ( unsigned char Zeichen, long int x, long int y,
+ struct tFlaeche *flaeche )
+{
+ struct tFlaeche flaeche1, flaeche2;
+ long int br1, br2, i;
+ int ende;
+
+ flaeche1.x1 = x;
+ flaeche1.y1 = y;
+ flaeche2.x1 = -1; /* Um zu erkennen, ob beschreiben */
+ /* potentielle Breite feststellen: */
+ for (br1 = 0 ; bild[y].zeile[x+br1] == Zeichen; br1++ );
+ ende = 0;
+ do {
+ y++;
+ for (br2 = 0 ; bild[y].zeile[x+br2] == Zeichen; br2++ );
+ /* Nimmt man die neue Zeile dazu, darf die Fl„che nicht
+ kleiner werden: */
+ if ( (y - flaeche1.y1 + 1) * br2 < (y - flaeche1.y1) * br1 ) {
+ flaeche1.y2 = y - 1;
+ flaeche1.x2 = flaeche1.x1 + br1 - 1;
+ flaeche1.flaeche = (y - flaeche1.y1) * br1;
+ ende = 1;
+ }
+ else {
+ if ( br2 < br1 )
+ br1 = br2;
+ };
+ /* Einen Tip feststellen */
+ if ( flaeche2.x1 == -1 && bild[y].zeile[x] == Zeichen ) {
+ i = x;
+ for (; i >= 0 && bild[y].zeile[i] == Zeichen; i-- );
+ i++;
+ for (br2 = 0 ; bild[y].zeile[i+br2] == Zeichen; br2++ );
+ if ( br2 > br1 ) {
+ /* Dann ist's ein Tip fr eine gr”áere Fl„che */
+ flaeche2.x1 = i;
+ flaeche2.y1 = y;
+ };
+ };
+ } while (!ende);
+ if ( flaeche2.x1 == -1 ) { /* kein (weiterer) Tip, also vorbei */
+ *flaeche = flaeche1;
+ }
+ else {
+ EinBlockScannen ( Zeichen,flaeche2.x1,flaeche2.y1,&flaeche2 );
+ if (flaeche1.flaeche >= flaeche2.flaeche)
+ *flaeche = flaeche1;
+ else
+ *flaeche = flaeche2;
+ };
+ return 0;
+};
+
+
+int BlockRausnehmen ( struct tFlaeche flaeche )
+{
+ long int x, y;
+
+ for ( y = flaeche.y1; y <= flaeche.y2; y++ ) {
+ for ( x = flaeche.x1; x <= flaeche.x2; x++ ) {
+ bild[y].zeile[x] = ' ';
+ };
+ };
+ return 0;
+};
+
+
+int BlockZeichenScannen
+ ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ unsigned char Zeichen, int Schreiben() )
+{
+ long int x, y;
+ struct tFlaeche flaeche;
+
+ do {
+ y = 0; x = 0;
+ while ( y < hoehe && bild[y].zeile[x] != Zeichen ) {
+ x++;
+ if ( x == breite ) {
+ y++; x = 0;
+ };
+ };
+ if ( y < hoehe ) { /* Was gefunden */
+ EinBlockScannen ( Zeichen, x, y, &flaeche );
+ Schreiben ( datei, ZeiBrei, ZeiHoe, flaeche.x1, flaeche.y1+1,
+ flaeche.x2, flaeche.y2+1 );
+ BlockRausnehmen ( flaeche );
+ };
+ } while ( y < hoehe );
+ return 0;
+};
+
+
+
+int BloeckeScannen ( FILE *datei, long int ZeiBrei, long int ZeiHoe)
+{
+ BlockZeichenScannen
+ ( datei, ZeiBrei, ZeiHoe, Muster1, DuennBlockSchreiben );
+ BlockZeichenScannen
+ ( datei, ZeiBrei, ZeiHoe, Muster2, MittelBlockSchreiben );
+ BlockZeichenScannen
+ ( datei, ZeiBrei, ZeiHoe, Muster3, DickBlockSchreiben );
+ BlockZeichenScannen
+ ( datei, ZeiBrei, ZeiHoe, Block, VollBlockSchreiben );
+ BlockZeichenScannen
+ ( datei, ZeiBrei, ZeiHoe, Topblock, TopBlockSchreiben );
+ BlockZeichenScannen
+ ( datei, ZeiBrei, ZeiHoe, Buttomblock, ButtomBlockSchreiben );
+ return 0;
+};
+
+
+/* -------------------------------------------------------------------- */
+/* Text Scannen */
+
+
+int WortScannen ( FILE *datei, long int ZeiBrei, long int ZeiHoe,
+ long int *x, long int *y )
+{
+ long int start;
+ unsigned char zeile [2048];
+ int zeichen;
+
+ zeile[0] = '\0';
+ start = *x;
+
+ zeichen = (int) bild[(int)*y].zeile[(int)*x];
+ while ( strcmp (codepage850 [zeichen], "") != 0 )
+ {
+ strcat ( zeile, codepage850 [zeichen] );
+ *x += 1;
+ zeichen = (int) bild[(int)*y].zeile[(int)*x];
+ };
+ fprintf ( datei, " \\put(%4.2f, %4.2f){\\makebox(%4.2f, %4.2f)[lb]{%s}}\n",
+ ((float) (start * ZeiBrei)) / 100.0,
+ ((float) ((hoehe - *y) * ZeiHoe
+ - (ZeiHoe * (long)7) / (long)10)) / 100.0,
+ ((float) ((*x - start) * ZeiBrei)) / 100.0,
+ ((float) ZeiHoe) / 100.0,
+ zeile );
+ return 0;
+};
+
+
+int TextScannen ( FILE *datei, long int ZeiBrei, long int ZeiHoe )
+{
+ long int y;
+ long int x;
+ int zeichen;
+
+ y = 0;
+ while ( bild[y].zeile[0] != 255 ) {
+ x = 0;
+ while ( bild[y].zeile[x] != '\0' ) {
+ zeichen = (int) bild[(int)y].zeile[(int)x];
+ if ( strcmp (codepage850 [zeichen], "") != 0 )
+ {
+ WortScannen ( datei, ZeiBrei, ZeiHoe, &x, &y );
+ }
+ else
+ x++;
+ }; /* while */
+ y++;
+ };
+ return 0;
+};
+
+
+/* -------------------------------------------------------------------- */
+/* Pascal-like: Das Hauptprogramm am Ende */
+
+int main ( int argc, char *argv[] )
+{
+ char dateiname [256];
+ FILE *datei;
+ long int ZeiBrei = ZeichBreite;
+ long int ZeiHoe = ZeichHoehe;
+
+ if ( argc < 2 ) {
+ printf ( "Aufruf: ASC2TEX Datei_ohne_Suffix\n" );
+ printf ( "Die Datei muá den Suffix \".SCR\" haben.\n" );
+ return -1;
+ }
+
+ if ( BildLaden ( argv[1] ) < 0 )
+ return -1;
+ strcpy ( dateiname, argv[1] );
+ strcat ( dateiname, ".TEX" );
+ if ( (datei = fopen (dateiname, "w")) == NULL ) {
+ printf ("Fehler beim ™ffnen von %s\n", dateiname);
+ return -1;
+ };
+ KopfSchreiben ( datei ); fflush ( datei );
+
+ LeerzeichenSetzen ();
+ LeerzeichenAbschneiden ();
+ BildAusgeben ();
+ printf ("Erzeuge Datei %s\n", dateiname );
+ BildGroesseFeststellen ( datei, ZeiBrei, ZeiHoe );
+ LinienScannen ( datei, ZeiBrei, ZeiHoe );
+ BloeckeScannen ( datei, ZeiBrei, ZeiHoe );
+ TextScannen ( datei, ZeiBrei, ZeiHoe );
+ RestSchreiben ( datei );
+ fclose (datei);
+ return 0;
+};
+