/******************************************************************* ******************************************************************* ** Routinen aus Treiber.c (c)'93 m.pristovsek ** ** Diese Routinen sind in TREIBER.C und FAST_DVI.S definiert ** ******************************************************************* *******************************************************************/ /******************************************************************* * DIE Arbeitsroutine im eigentlichen Modul (als Parametercheck!) * * Diese Routine ist druckerspezifisch * ******************************************************************* * Die Kurzbeschreibung der Parameter: * * bitmap - Zeiger auf die Bitmap * * offset - Offset vom Rand (links bei quer, sonst von oben) * * weite - Breite der Bitmap in Pixel * * Die Breite einer Bitmap in Bytes erh„lt man durch: * * ((weite+15)/8)&0xFFFFFFFFFEL * * Die Breite ist immer eine gerade Anzahl von Bytes * * hoehe - H”he der Bitmap in Pixel (=Zeilen) * * h_dpi - Horizontale Aufl”sung in Dpi * * v_dpi - vertikale Aufl”sung in Dpi * * datei - Handle der Zieldatei (-3<= heižt keine angegeben) * * flag - Bitflag: * * flag&1 (Initialisierung n”tig) * * flag&2 (Daten auch Drucken) * * flag&4 (Seite beenden + Seitenvorschub) * * flag==7 heižt, Seite komplett drucken * * Unfertig k„me dann: 3, 2, ..., 2, 4 (oder 3, 2, 6) * * quer - Datei als Landscape ausdrucken * * option - Ein maximal 16 Byte langer String mit zus„tzlichen * * Optionen in beliegigem Format * ******************************************************************* * Eine Rckgabe <0 wird als Fehler interpretiert und an DVI zu- * * rckgegeben * ******************************************************************* * GROSSE VARIABLEN AUSSERHALB ALLER FUNKTIONEN UND STATISCH * * DEKLARIEREN, SONST GIBT ES U.U. STACKšBERLAUF! * *******************************************************************/ short drucke( char *bitmap, long offset, long weite, long hoehe, long h_dpi, long v_dpi, short datei, short flag, short quer, char *option ); /*==================================================================* " Folgende Routinen sind allgemein zur Eingrenzung des Bereiches, " " der gedruckt werden soll, interessant " *==================================================================*/ /******************************************************************* * Ist diese Zeile Leerzeile? (d.h. sind "offset" Bytes==0?) * ******************************************************************* * "ptr": Zeiger auf Bitmap "offset": Breite in Bytes * *******************************************************************/ int ist_leerzeile( char *ptr, long offset ); /* 16.1.93 */ /******************************************************************* * Sind in den n„chsten #next-Zeilen keine Zeichen? D.h. damit kann* * man z.B den linken Rand bestimmen. * ******************************************************************* * "ptr": Zeiger auf Bitmap "offset": Breite in Bytes * * "next": Anzahl zu testender Zeilen * *******************************************************************/ int ist_next_leer( char *ptr, long offset, long next ); /* 16.1.93 */ /******************************************************************* * Bitmap zeilenweise um 90 Grad drehen (in DREHE_90) * ******************************************************************* * Dabei ist "qweite" die Breite der Bitmap * * und "zweite" die H”he der (Bitmap+7)/8 * * ==> "ziel" muž mindestens "zweite"-Bytes grož sein! * *******************************************************************/ void drehe_90( char *quelle, char *ziel, long qweite, long zweite, long x ); /******************************************************************* * Bitmap fr Nadeln drehen (in BLOCK_BY) * ******************************************************************* * ende: Breite des Bereiches IN BYTES * * offset: Weite einer Bitmapzeile * * modus: Wieviel Bytes pro Zeile (9:1, 24:3, Jet:1-6) * *******************************************************************/ void block_it( char *dest, char *src, short ende, long offset, short mode ); /* 10.8.93 */ /******************************************************************* * Versucht Drucker zu ™ffnen und die Semaphore 'PRN:' zu bekommen * * Leider kann man die Datei "U:\dev\prn" nicht verriegeln; deshalb* * wurde die Semaphore eingefhrt. * ******************************************************************* * Der Rckgabewert ist 1 (Ok) oder 0 (Zu wenig Speicher) * *******************************************************************/ int open_printer( int handle ); /* 6.2.93 */ /******************************************************************* * Gibt die "len" Daten ab "blk" an Spooler weiter (umgeht GEMDOS) * * Gleichzeitig sorgt diese Funktion fr das Blinken /-\| ... * *******************************************************************/ long print_block( long len, char *blk, int fh ); /* 22.1.93 */ /******************************************************************* * Gibt den String "str" an Spooler weiter (s.o.) * *******************************************************************/ long print_str( char *str, int fh ); /* 3.9.94 */ /******************************************************************* * Leert Spoolerspeicher, MUSS vor dem Druckende aufgerufen werden!* *******************************************************************/ void flush_block( int fh ); /* 23.1.93 */