1 | /*************************************************
|
2 | * b s p l 0 0 7 4 . c *
|
3 | *------------------------------------------------*
|
4 | * Aufgabe : Formatierter Druck von Textdateien *
|
5 | *------------------------------------------------*
|
6 | * Autor : Erlenkötter *
|
7 | * Stand : 28.05.99 *
|
8 | *------------------------------------------------*
|
9 | * Compiler: <hier Compiler-Optionen eintragen> *
|
10 | *************************************************/
|
11 |
|
12 | /*----- include files --------------------------*/
|
13 | #include <stdio.h>
|
14 | #include <string.h>
|
15 | #include <stdlib.h>
|
16 |
|
17 | /*----- define ---------------------------------*/
|
18 | #define SEITENLAENGE 65
|
19 | /* PCL-Steuerzeichen für Schmalschrift */
|
20 | #define SCHMAL "1B2873313648"
|
21 | /* Steuerzeichen für Seitenvorschub */
|
22 | #define NEUE_SEITE "0c"
|
23 | /* PCL-Steuerzeichen für normale Schrift */
|
24 | #define NORMAL "1B2873313248"
|
25 | /* maximale Zeilenlänge */
|
26 | #define MAX_EINGABE 200
|
27 |
|
28 | FILE *text; /* Druckausgabe */
|
29 |
|
30 | /*************************************************
|
31 | * Funktion : l e f t _ m a r g i n *
|
32 | *------------------------------------------------*
|
33 | * Aufgabe : Leerzeichen für Zeilenanfang *
|
34 | * Parameter : Anzahl der Leerstellen *
|
35 | * Return-Wert: keiner *
|
36 | *************************************************/
|
37 | void left_margin(int rand) {
|
38 | while(rand-- > 0)
|
39 | fprintf(text,"%c",32); /* 32 = ASCII-Code
|
40 | für Leerzeichen */
|
41 | }
|
42 |
|
43 | /*************************************************
|
44 | * Funktion : k o p f z e i l e *
|
45 | *------------------------------------------------*
|
46 | * Aufgabe : Kopfzeilenausgabe einer Liste *
|
47 | * Parameter : Name der zu druckenden Datei *
|
48 | * : Abstand vom linken Rand *
|
49 | * Return-Wert: keiner *
|
50 | *************************************************/
|
51 | void kopfzeile(char *dateiname,int linker_rand) {
|
52 | static int seite=1;
|
53 | fprintf(text,"\n"); /* 1 Leerzeile vor
|
54 | Druckbeginn */
|
55 | left_margin(linker_rand);
|
56 | fprintf(text,
|
57 | "<<< Seite %3i >>> von %s\n\n",
|
58 | seite++,dateiname);
|
59 | }
|
60 |
|
61 | /*************************************************
|
62 | * Funktion : s t e u e r z e i c h e n *
|
63 | *------------------------------------------------*
|
64 | * Aufgabe : Steuerzeichen an Drucker senden *
|
65 | * Parameter : Escape-Sequenz *
|
66 | * Return-Wert: keiner *
|
67 | *************************************************/
|
68 | void steuerzeichen(char *seq) {
|
69 | char wert;
|
70 | while(*seq) { /* Lies die gesamte
|
71 | Steuersequenz */
|
72 | sscanf(seq,"%2x",&wert);/* Hole jeweils 2
|
73 | Zeichen */
|
74 | fprintf(text,"%c",wert);
|
75 | seq+=2;
|
76 | }
|
77 | }
|
78 |
|
79 | /*----- Hauptprogramm --------------------------*/
|
80 | main() {
|
81 | FILE *stream;
|
82 | char dateiname[67]; /* zu druckende Datei */
|
83 | int zeile=0; /* aktuelle Druckzeile */
|
84 | int linker_rand=10; /* linke Randgröße */
|
85 | char schmal='J'; /* Schmalschrift J/N ? */
|
86 | char eingabe[MAX_EINGABE]; /* Dialogzeile */
|
87 | printf("\n\t\t<<< Formatierter Druck >>>");
|
88 | printf("\n\n<RETURN> beendet das Programm.\n");
|
89 |
|
90 | /*----- Dateinamen einlesen und öffnen */
|
91 | printf("\nWelche Datei drucken?\n>");
|
92 | gets(dateiname);
|
93 | if(strlen(dateiname) == 0)
|
94 | exit(0);
|
95 | while((stream = fopen(dateiname,"r")) == NULL) {
|
96 | printf("'%s' nicht gefunden!\a\n",dateiname);
|
97 | printf("\nWelche Datei drucken?\n>");
|
98 | gets(dateiname);
|
99 | if(strlen(dateiname) == 0)
|
100 | exit(0);
|
101 | }
|
102 |
|
103 | /*----- Druckparameter einlesen */
|
104 | printf("\n<RETURN> uebernimmt die Vorgaben.\n");
|
105 | printf("\nLinker Rand (%i): >",linker_rand);
|
106 | gets(eingabe);
|
107 | if(strlen(eingabe) != 0)
|
108 | linker_rand = atoi(eingabe);
|
109 | printf("\nSchmalschrift J/N (%c): >",schmal);
|
110 | gets(eingabe);
|
111 | if(strlen(eingabe) != 0) {
|
112 | if(eingabe[0] == 'N' || eingabe[0] == 'n')
|
113 | schmal = 'N';
|
114 | }
|
115 |
|
116 | /*----- Druckausgabe öffnen */
|
117 |
|
118 | text = fopen("Hauptdrucker","a");
|
119 | if (text == NULL) {
|
120 | printf("Fehler beim Oeffnen von LPT1");
|
121 | exit(1);
|
122 | }
|
123 |
|
124 | /*----- Schriftart einstellen */
|
125 | if(schmal == 'J')
|
126 | steuerzeichen(SCHMAL);
|
127 | else
|
128 | steuerzeichen(NORMAL);
|
129 |
|
130 | /*----- Liste drucken */
|
131 | kopfzeile(dateiname,linker_rand);
|
132 | while(fgets(eingabe,MAX_EINGABE,stream)!=NULL) {
|
133 | left_margin(linker_rand);
|
134 | fprintf(text,"%s",eingabe);
|
135 | if(++zeile > SEITENLAENGE-10) {
|
136 | steuerzeichen(NEUE_SEITE);
|
137 | kopfzeile(dateiname,linker_rand);
|
138 | zeile=0;
|
139 | }
|
140 | }
|
141 | steuerzeichen(NEUE_SEITE);
|
142 |
|
143 | /*----- Datei schliessen */
|
144 | fclose(stream);
|
145 |
|
146 | printf("\nDruck beendet!\a\n");
|
147 | }
|