home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / multtsk / cpmult / doku / mtprint.dok < prev    next >
Encoding:
Text File  |  1990-04-23  |  10.7 KB  |  314 lines

  1. .. //////////////////////////////////////////////////////////////////
  2. .. /// Dokumentation zum Multi-Tasking Subsystem V2.10 / April 1990
  3. .. /// Modul MTPRINT
  4. .. /// Format: DOCLIST 1.00-Format
  5. .. //////////////////////////////////////////////////////////////////
  6. .. /// Bitte passen Sie die nachfolgenden Zeile ggf. für Ihren
  7. .. /// Drucker an. Die Voreinstellung paßt auf einen EPSON FX-85
  8. .. /// mit Papierformat 12"
  9. .. //////////////////////////////////////////////////////////////////
  10. .PL 72      Seitenlänge 72 Zeilen
  11. .LL 80      Zeilenlänge 80 Zeichen
  12. .ID 5       Einrücken um 5 Zeichen vom linken Rand
  13. .RM 5       5 Zeichen bis zum rechten Rand Platz lassen -> 70
  14. ..          Zeichen Text je Zeile
  15. .HS =       Zeichen für Kopf-/Fuß-Trenner
  16. .RS -       Zeichen für Trennung von Referenz-Einträgen
  17. .CO (c) Copyright 1988..1990 Ch.Philipps Software-Technik
  18. .. //////////////////////////////////////////////////////////////////
  19. .SE Multi-Tasking Subsystem für Turbo-Pascal 5.x Version 2.10
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.             Turbo Pascal 5.x  Multi-Tasking Subsystem
  29.  
  30.  
  31.                    MTPRINT - Benutzerhandbuch
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.                  (c) Copyright 1988, 1989, 1990
  41.  
  42.                Christian Philipps Software-Technik
  43.  
  44.                      alle Rechte vorbehalten
  45.  
  46.  
  47.                    Version 2.10  / April 1990
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.          Anschrift:  Christian Philipps
  61.                      Software-Technik
  62.                      Düsseldorfer Str. 316
  63.  
  64.                      D-4130 Moers 1
  65.  
  66.          Telefon..:  02841 / 35932
  67.          Fido-Netz:  509/3.4
  68.  
  69. .SE Lizenzvereinbarung, Garantie- und Haftungsausschluß, Warenzeichen
  70. siehe hierzu CPMULTI.DOK
  71. .SE MTPRINT / Leistungsbeschreibung
  72. 1. Leistungsbeschreibung
  73.  
  74. Die Unit MtPrint ersetzt die standardmäßig mit Turbo Pascal
  75. ausgelieferte Unit PRINTER, verfügt jedoch über eine Vielzahl
  76. zusätzlicher Funktionen.
  77.  
  78. - kein Fehlerabbruch bei nicht bereitem Drucker
  79. - Abfrage, ob Drucker bereit
  80. - Abbruch der Druckausgabe; Löschen des Spooler-Puffers
  81. - Abfrage der Anzahl freier, bzw. belegter Pufferplätze
  82. - Veränderung der Größe des Spooler-Puffers
  83. - Ausgabe auch auf Lpt2: möglich, so zweiter Drucker vorhanden
  84.  
  85.  
  86. Hinweis für registrierte Anwender des Multi-Tasking Subsystems
  87. --------------------------------------------------------------
  88.  
  89. Bitte beachten Sie, daß für diese Unit gleichfalls die Lizenzver-
  90. einbarungen gelten, die in der Dokumentation zum Multi-Tasking Sub-
  91. system aufgeführt sind.
  92. Insbesondere bedeutet dies, daß Sie die lizenzierte Version dieses
  93. Produktes, seine Dokumentation und seinen Quellcode unter keinen
  94. Umständen an Dritte weitergeben dürfen, weder auszugsweise, noch
  95. vollständig. Diese Unit einschließnlich ihrer Dokumentation ist, wie
  96. auch CPMulti, in der lizenzierten Version KEINE ShareWare, sondern
  97. ausschließlich gemäß den Lizenzvereinbarungen (siehe CPMULTI.DOK) zu
  98. behandeln.
  99. .SE MTPRINT / Einbindung der Unit
  100. 2. Einbindung der Unit in eigene Programme
  101.  
  102. Wie beim Multi-Tasking-Subsystem selbst, gestaltet sich auch hier die
  103. Einbindung unproblematisch. Durch einen entsprechenden Eintrag in der
  104. USES-Klausel Ihres Programmes, wird MtPrint integriert. Beim Start
  105. des Anwendungsprogrammes initialisiert sich MtPrint automatisch
  106. selbst.
  107.  
  108. Es wird ein Hintergrundprozeß gestartet und ein Druckpuffer von 2 KB
  109. reserviert.
  110.  
  111. Beispiel:  USES CPMULTI, MtPrint;
  112.  
  113. Bitte beachten Sie die Reihenfolge der Einbindung, die in Kapitel 8
  114. des Handbuches zu CpMulti angegeben ist.
  115. .SE MTPRINT / Konzept
  116. 3. Konzept
  117.  
  118. Durch die Einbindung von MtPrint wird automatisch die TEXT-Datei
  119. "Lst" bereitgestellt, auf die, wie gewohnt, mittels Write/Writeln
  120. zugegriffen werden kann.
  121.  
  122. Beispiel: Writeln(Lst,'Dies ist eine Druckausgabe!');
  123.  
  124. Dies ist für die Anwender der Unit PRINTER keinesfalls etwas
  125. besonderes. Programme, die unter Verwendung von PRINTER geschrieben
  126. wurden, werden daher auch mit MTPRINT problemlos zusammenarbeiten.
  127. Neben der Abarbeitung der Druckaufträge im Hintergrund, bietet
  128. MTPRINT jedoch auch noch einige andere Vorteile.
  129.  
  130. Ist der Drucker nicht bereit, so wird nicht die übliche DOS-Fehler-
  131. meldung mit den Optionen Abbruch, Wiederholung, Ignorieren
  132. ausgegeben, sondern der Spooler wartet darauf, daß der Drucker
  133. eingeschaltet wird. Es gehen hierdurch keine Zeichen verloren.
  134. Ist der Spooler-Puffer jedoch voll, wird die zugreifende Task
  135. blockiert, bis durch Entnahme von Daten wieder Platz geschaffen wurde.
  136.  
  137. Um ggf. auf einen nicht bereiten Drucker programmgesteuert reagieren
  138. zu können, stellt die Unit MtPrint eine Funktion zur Verfügung, die
  139. den Druckerstatus ermittelt.
  140.  
  141. Eine globale Variable enthält die Nummer des Druckerports, der für
  142. die Ausgabe verwendet wird. Durch Verändern des Inhalts dieser
  143. Variablen können die Daten mit sofortiger Wirkung auf einen anderen
  144. Port umgeleitet werden.
  145.  
  146. Standardmäßig werden für den Druckerpuffer 2 KB reserviert. Dieser
  147. Wert läßt sich jedoch zur Laufzeit verändern. Die Anzahl aktuell
  148. belegter oder freier Pufferplätze, läßt sich jederzeit abfragen.
  149. Ferner kann zu jedem Zeitpunkt der aktuelle Inhalt des Druckpuffers
  150. gelöscht werden.
  151. .SE MTPRINT / Realisierung
  152. 4. Realisierung
  153.  
  154. MTPrint basiert auf der Unit MTPipe. Die TEXT-Datei Lst, die als
  155. Ausgabekanal zum Drucker verwendet wird, ist also eine Pipe. Durch
  156. diese Pipe wird einem Hintergrundprozeß, der standardmäßig mit der
  157. Priorität Pri_User abläuft, der Druckoutput zugeleitet.
  158. Ist kein Druckoutput vorhanden, so verbraucht der Hintergrundprozeß
  159. keine CPU-Zeit; er ist dann durch einen Lesezugriff auf die leere
  160. Pipe blockiert.
  161. Die Task-Nummer des Hintergrundprozesses wird in einer globalen
  162. Variablen hinterlegt, um externen Prozessen die Veränderung der
  163. Spooler-Priorität zu ermöglichen.
  164.  
  165. Der Spooler-Prozeß entnimmt der Pipe Lst die Druckdaten zeichenweise
  166. und gibt diese dann mittels des BIOS Interrupt 17H auf den in der
  167. globalen Variablen PrinterNo abgelegten Druckerport aus (siehe auch
  168. "Exportierte Daten"). Ist der Drucker nicht bereit, so prüft der
  169. Spooler sekündlich, ob eine Druckausgabe möglich ist oder aber der
  170. Druck abgebrochen wurde. Im letzteren Fall werden keine weiteren
  171. Versuche mehr unternommen der Drucker anzusprechen und der Prozeß
  172. wird wieder durch einen neuerlichen Lesezugriff auf die mittlerweile
  173. leere Pipe blockiert.
  174.  
  175. U. U. kann es für eine Anwendung sinnvoll sein, den Zustand des
  176. Puffers abzufragen (Füllstand) oder den Druckerstatus auszuwerten.
  177. Letzteres erfolgt ebenfalls über den Interrupt 17H, wobei in den
  178. meisten Fällen auch ein überhaupt nicht vorhandener Drucker sofort
  179. als "nicht bereit" erkannt werden kann.  Normalerweise führt ein
  180. Zugriff auf einen Druckerport, an dem kein Kabel angeschlossen ist,
  181. erst nach Ablauf einer längeren Timeout-Zeit zu einer DOS-
  182. Fehlermeldung. In der Zwischenzeit hat der nervöse Anwender jedoch
  183. zumeist bereits den Rechner mit einem Warmstart ins Leben
  184. zurückgeholt.
  185.  
  186. Wird z. B. während laufender Druckausgabe der Drucker ausgeschaltet,
  187. so kann es wünschenswert sein, daß die Anwendung ihrerseits den
  188. Puffer des Spoolers löscht. Dies ist mittels der Prozedur
  189. CancelPrint jederzeit möglich.
  190. Es ist hierbei jedoch zu beachten, daß ein Aufruf von CancelPrint
  191. NICHT eine evtl. beim Schreiben in den vollen Puffer blockierte Task
  192. reaktiviert. Vielmehr greift diese Prozedur direkt auf die internen
  193. Datenstrukturen der Pipe Lst zu und manipuliert diese an den
  194. Routinen des Pipe-Treibers vorbei. Gleiches gilt für die Funktionen,
  195. die den Füllstand des Puffers zurückliefern.
  196.  
  197. Wird sehr viel Druckoutput erwartet und Hauptspeicher ist
  198. ausreichend vorhanden, könnte es sinnvoll sein, den Druckpuffer zu
  199. vergrößern. Zu diesem Zweck steht eine entsprechende Prozedur zur
  200. Verfügung, die temporär die Pipe Lst abbaut, den Hintergrundprozeß
  201. beendet und dann die Unit mit neuer Pipe-Größe reinitialisiert.
  202. Zum Zeitpunkt dieser Aktion dürfen keine Zugriffe auf den Spooler
  203. erfolgen.
  204.  
  205. Registrierte Anwender, die ja über den Quellcode der Unit MtPrint
  206. verfügen, werden in dieser kleinen aber feinen Unit sicherlich eine
  207. Reihe nützlicher Anregungen für den Umgang mit Pipes finden.
  208. .SE MTPRINT / Exportierte Datendefinitionen
  209. 5. Exportierte Datendefinitionen
  210.  
  211. PrinterNo : Word = 0;
  212.  
  213.   Diese typisierte Konstante enthält die Nummer des zu verwendenden
  214.   Druckerports. Der Standardwert 0 bezeichnet Lpt1:; der Wert 1
  215.   bewirkt die Druckausgabe auf Lpt2:.
  216.  
  217.   Der Standardwert sollte nur dann verändert werden, wenn auch mit
  218.   Sicherheit ein zweiter Druckerport existiert!!!
  219.  
  220.  
  221. Lst : TEXT;
  222.  
  223.   Dies ist die Schreibseite der Pipe, über die die Daten an den
  224.   Spooler gesendet werden.
  225.  
  226.  
  227. SpoolerNo : TaskNoType;
  228.  
  229.   In dieser Variablen befindet sich die Task-Id des
  230.   Hintergrundprozesses. Sie kann verwendet werden, um die Priorität
  231.   des Spoolers zu verändern.
  232. .SE MTPRINT / Referenz
  233. 6. Funktionsbeschreibung (alphabetisch)
  234.  
  235.  
  236. .RE CancelPrint
  237. Deklaration
  238.  
  239.   PROCEDURE CancelPrint;
  240.  
  241. Funktion
  242.  
  243.   "CancelPrint" bewirkt ein sofortiges Löschen des Print-Buffers.
  244.  
  245. Kommentar
  246.  
  247.   Eine evtl. beim Schreiben in die volle Pipe Lst blockierte Task
  248.   wird dadurch NICHT reaktiviert!!!!!
  249. .EE
  250. ────────────────────────────────────────────────────────────────────
  251. .RE PrintBufferAvail
  252. Deklaration
  253.  
  254.   FUNCTION  PrintBufferAvail:Word;
  255.  
  256. Funktion
  257.  
  258.   "PrintBufferAvail" liefert die Anzahl freier Speicherplätze im
  259.   Puffer des Spoolers.
  260. .EE
  261. ────────────────────────────────────────────────────────────────────
  262. .RE PrintBufferFilled
  263. Deklaration
  264.  
  265.   FUNCTION  PrintBufferFilled:Word;
  266.  
  267. Funktion
  268.  
  269.   "PrintBufferFilled" liefert die Anzahl belegter Speicherplätze im
  270.   Puffer des Spoolers.
  271. .EE
  272. ────────────────────────────────────────────────────────────────────
  273. .RE PrinterReady
  274. Deklaration
  275.  
  276.   FUNCTION  PrinterReady:BOOLEAN;
  277.  
  278. Funktion
  279.  
  280.   "PrinterReady" liefert TRUE, wenn der Drucker, dessen Nummer in
  281.   "PrinterNo" steht gerade bereit ist. Anderenfalls wird FALSE
  282.   geliefert.
  283.   Dies kann auch bedeuten, daß überhaupt kein Drucker angeschlossen
  284.   ist!
  285. .EE
  286. ────────────────────────────────────────────────────────────────────
  287. .RE RestartSpooler
  288. Deklaration
  289.  
  290.   PROCEDURE RestartSpooler(Size:Word);
  291.  
  292. Funktion
  293.  
  294.   Neustarten des Spoolers mit veränderter Puffergröße
  295.  
  296. Kommentar
  297.  
  298.   Der genaue Ablauf des Neustarts ist im Abschnitt "Realisierung"
  299.   beschrieben. An dieser Stelle sei jedoch noch einmal ausführlich
  300.   darauf hingewiesen, daß zum Zeitpunkt des Neustarts KEINE Zugriffe
  301.   auf den Spooler erfolgen dürfen!
  302. .EE
  303. ────────────────────────────────────────────────────────────────────
  304. .RE SpoolerBusy
  305. Deklaration
  306.  
  307.   FUNCTION  SpoolerBusy:BOOLEAN;
  308.  
  309. Funktion
  310.  
  311.   Diese Funktion liefert TRUE, falls der Hintergrundprozeß gerade
  312.   Druckdaten in Bearbeitung hat. Ist die Spooler-Task nicht aktiv
  313.   und der Druckerpuffer leer, liefert "SpoolerBusy" FALSE.
  314.