home *** CD-ROM | disk | FTP | other *** search
-
- --------------------------------
- | |
- | F D D K |
- | |
- | FAXDRIVER DEVELOPMENT KIT |
- | |
- --------------------------------
-
- Der Inhalt dieses Folders darf kopiert und weitergegeben
- werden, solange er nicht verändert wird.
-
- Folgende Dateien gehören dazu:
-
-
- FDDK.TXT (diese Datei)
- QFAXDRV.O (das eigentliche Faxmodul)
- QFAXDRV.H (der dazugehörige ANSI-C-Header)
- MINIDEMO.C (wie der Name schon sagt..)
- MINIDEMO.PRJ (das dazugehörige Turbo-C Project-File)
- ASC_FAX.C (konvertiert ASCII zu FAX)
- ASC_FAX.PRJ (das dazugehörige Turbo-C Project-File)
- QFAX.INF (die Konfig-Datei für die fertigen Treiber)
- TESTFAX.F01 (1/4 Seite im Faxformat)
- PEEKFAX.PRG (zum 'Ansehen' von Faxseiten)
- PEEKFAX.RSC
-
-
- Erzeugen von Faxseiten mit jeder beliebigen Applikation
- -------------------------------------------------------
-
- "Ganz einfach nur Druckfunktion starten, Faxnummer eingeben
- und ferig?" Ein kleines Object-Modul ermöglicht es einem
- C-Programmierer mit jeder beliebigen Applikation Faxseiten
- zu erzeugen. Auf das eher unbequeme Arbeiten mit Programmen,
- die das Erzeugen von Faxseiten selbst übernehmen könnte man
- dann verzichten. Das Besondere: dieses Modul ist
- Public-Domain und die damit erzeugten Faxtreiber können
- problemlos weitergegeben werden!
-
- Ich möchte hier die nötigen Funktionsaufrufe
- beschreiben, und die Benutzung anhand eines kleinen
- C-Programmes demonstrieren. An dieser Stelle sollte nicht
- verschwiegen werden, daß das Erzeugen von Faxseiten auf
- anderen Betriebssystemen zentral übernommen wird (siehe
- Next). Das ist natürlich besonders bequem. Durch den hier
- vorgeschlagene Weg ergibt sich aber ein anderer,
- entscheidenden Vorteil: jeder einzelne, der rund 4.000.000
- Pixel auf einer Faxseite, wird von der Applikation gesetzt.
- Dadurch können mögliche Qualtiätsverluste durch eine
- Wandlung der vorgesehenen Auflösung nach 200 dpi sicher
- vermieden werden. Faxtreiber für Calamus, CyPress und andere
- Programme liegen schon vor.
-
-
-
- WIE FUNKTIONIERT ES ?
-
- Zunächst möchte ich die Funktionsweise eines solchen 'Fax-
- Treibers' erläutern. Diese werden vom Benutzer wie normale
- Druckertreiber nachgeladen und nehmen dann die Daten von der
- Applikation entgegen. Allerdings wird zu diesem Zeitpunkt
- noch nicht gefaxt. Statt dessen werden die Daten komprimiert
- und in einer Art Warteschlange auf die Festplatte
- zwischengespeichert. Der verwendete Huffman-Algorithmus
- komprimiert die Daten auf bis zu 10% der ursprünglichen
- Größe. Die Seiten in der Fax-Queue werden später auf Wunsch
- und in einem Rutsch versendet. Ein positiver Effekt dieses
- Verfahrens ergibt sich aus der Möglichkeit ein Fax mit Hilfe
- mehrerer Applikationen zu erstellen. So könnte man z.B die
- erste Seite mit der Textverarbeitung erstellen und eine
- zweite Seite mit Calamus erstellen.
-
-
-
- 5 plus 1 Funktionen
-
- Das Object-Modul 'QFAXDRV.O', setzt sich aus den hier
- aufgeführten 6 Funktionen zusammen. In der Datei 'QFAXDRV.H'
- befinden sich neben den Funktionsprototypen auch die
- Definitionen für Fehlermeldungen.
-
- int qfax_init (void)
-
- Diese Funktion dient zur Initialisierung des Treibers und
- sollte einmal, zu allererst aufgerufen werden. Parameter
- werden hier keine übergeben. Wird (in Register D0) ein Wert
- ungleich Null zurückgegeben, liegt ein Fehler vor. Der Wert
- ERR_INIT deutet auf eine nicht vorhandene, bzw. fehlerhafte
- Konfigurationsdatei. Die Rückgabe des Wertes ERR_PATH
- bedeutet, daß der Pfad in der Konfiguration nicht gefunden
- werden konnte.
-
-
- int qfax_open (char *applic)
-
- Zu Beginn einer neuen Seite wird diese Funktion aufgerufen.
- Sie erstellt die Ausgabedatei inklusive Fax-Header. Als
- Argument muß (in A0) ein Dateiname übergeben werden
- (Null-Terminiert, nicht vergessen). Dieser sollte mindestens
- 6 aber maximal 8 Zeichen lang sein und auf die erzeugende
- Applikation deuten (z.B.: 'CALFAX', 'CYPFAX' etc.). Ein
- Return-Wert ungleich 0 deutet auch hier auf einen Fehler.
- Der Wert ERR_CREATE weist darauf hin, daß nicht geschrieben
- werden konnte.
-
-
- int qfax_pix (unsigned char *pixptr, int lines)
-
- Diese Funktion wird benutzt um Bitmap zu erzeugen.
- Dabei wird in 'lines' angegeben, wie oft die Pixelzeile
- in 'pixptr' wiederholt werden soll. In der Regel
- wird also in 'lines' eine '1' übergegeben. Der Parameter
- 'pixptr' zeigt auf einen genau 216 Bytes großen
- Speicherbereich, indem sich eine Zeile Pixel befinden. Die
- Applikation stellt diesen Bereich zur Verfügung. 216 * 8 =
- 1728 Pixel pro Zeile sind das Standard-Format für die Breite
- von 200 dpi-Faxseiten und müssen unbedingt eingehalten werden.
- Evtl. muß die Vorlage gestaucht werden. Eine Vorlage in einer
- Auflösung von 300 dpi muß also zuvor auf 2/3 gestaucht werden.
- Nicht vergessen, daß dann auch die Vertikale im selben
- Verhältniss gestaucht werden muß!
- Die Pixelzeile wird nun komprimiert und gespeichert.
- Hierbei benutzt der Treiber einen internen, 8 KByte großen
- Cachespeicher. Diese Funktion gibt den Wert ERR_WRITE
- zurück, wenn ein Fehler beim schreiben aufgetreten ist. Bei
- fehlerfreier Funktion wird ein Wert größer '0' zurückgegeben
- der aussagt, auf wieviele Bytes komprimiert wurde. Es spielt
- absolut keine Rolle wie oft diese Funktion aufgerufen wird,
- weil eine Faxseite beliebig lang bzw. kurz sein kann. 2240
- Pixelzeilen ergeben eine Faxseite von 29.68 cm höhe (= DIN-A
- 4). Etwa 75 Aufrufe ergeben 1 cm Fax!
-
-
- int qfax_text (char *string)
-
- Diese Funktion wird benutzt um Text auf eine Faxseite zu
- schreiben. Es wird ein im Modul integrierter Font verwendet,
- der sich besonders für die Übertragung im Faxformat eignet.
- Der Font erzeugt nämlich besonders 'wenig' Hufman-Code und
- beschleunigt damit die Übertragung. Pro Textzeile werden 32
- Pixelzeilen erzeugt. Auf eine A4-Seite maximal 70 Zeilen
- Text. Pro Zeile können bis zu 98 Zeichen untergebracht
- werden. Es dürfen keine Steuerzeichen, auch kein Linefeed
- übergeben werden. Diese Funktion gibt ebenfalls den Wert
- ERR_WRITE zurück, wenn ein Fehler beim Schreiben aufgetreten
- ist. Bei fehlerfreier Funktion wird ein Wert größer '0'
- zurückgegeben der aussagt, wieviel Bytes erzeugt wurden.
-
-
- int qfax_close (void)
-
- Diese Funktion wird am Seitenende aufgerufen. Sie füllt den
- Fax-Header mit den richtigen Werten und schließt die Datei.
- Ein Return-Wert ungleich '0' deutet auf einen Fehler beim
- Schreiben. Wenn alles fehlerfrei funktioniert hat, kann die
- nächste Seite geöffnet werden.
-
-
- int qfax_clr (void)
-
- Mit dieser Funktion kann die Queue, z.B. vor dem erzeugen
- neuer Seiten, gelöscht werden. Wird danach eine neue
- Faxseite angelegt, erhält diese die Erweiterung '.F01' im
- Dateinamen. Die nächste Seite '.F02' usw.
- Das geschieht ganz automatisch.
-
- Der Treiber kann übrigens problemlos wieder entfernt werden.
- Die Erzeugten Seiten werden in der Fax-Queue gespeichert,
- was nichts anderes ist als ein Directory, das speziell dafür
- angelegt wurde. Hier zum Beispiel der Inhalt dieses
- Verzeichnisses nachdem drei Seite mit verschiedenen
- Applikationen erzeugt wurden:
-
- "CYPRESS .F01"
- "ASCII .F02"
- "CALAMUS .F03"
-
- Für jede Seite wurde eine Datei angelegt. Die nächste Seite
- würde die Erweiterung ".F04" erhalten. Der Dateiname vor der
- Erweiterung spielt für das Versenden keine Rolle. Er gibt
- dem Benutzer nur Auskunft darüber, welches Programm die
- Seiten erzeugt hat.
-
-
-
- FORMAT DER FAX-DATEI
- --------------------
-
- 01-24 : reserved
- 25 : 01 = 1-Dim, 02 = 2-Dim
- 26-27 : Seiten in Pixelzeilen (sorry: INTEL-Format)
- 28-29 : Breite in Pixeln, z.Z. immer 1728 (sorry: INTEL-Format)
- 30 : Auflösung 0 = 100 dpi, 1 = 200 dpi
- 31-255 : reserved
- 256-eof : huffman-code
-
-
- DEMO-PROGRAMME IN ANSI-C
- ------------------------
-
- Die beiliegenden C-Sourcen 'MINIDEMO.C' und 'ASC_FAX.C' zeigen,
- wie einfach die Benutzung der hier vorgestellten Funktionen ist.
-
- Das Accessory "QFAX.ACC" gestattet das Versenden der
- erzeugten Seiten an einen oder mehrere Empfänger. Die mit
- dem Modul erzeugten Faxseiten und das Modul selbst dürfen
- frei weitergegeben werden. Eine V e r m a r k t u n g solcher
- Treiber bedarf der schriftlichen Genehmigung des Autors.
-
- Neben den hier vorgestellten Möglichkeiten zum Erzeugen von
- Faxseiten existiert ein erweitertes Modul, daß einer beliebigen
- Applikation das direkte Versenden von Faxen gestattet.
-
- Informationen hierzu erhalten Sie bei:
-
- Computer & Design
- Eppenhauser Straße 59
- 5800 Hagen-1
- Telefon (02331) - 58 98 42
- Telefax (02331) - 5 42 03
-
- Wenn Sie bis hier hin gelesen haben, bedanke ich mich herzlich für
- Ihre Geduld.
-
- Tim Mehrvarz
-