home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / tvision / ide / spooler.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-05-03  |  2.9 KB  |  93 lines

  1. (* ------------------------------------------------------ *)
  2. (*                     SPOOLER.PAS                        *)
  3. (*        Drucken im Hintergrund über PRINT.COM           *)
  4. (*           (c) 1993 te-wi Verlag, München               *)
  5. (* ------------------------------------------------------ *)
  6. UNIT Spooler;
  7.  
  8. {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+,Y+}
  9. {$M 16384,0,655360}
  10.  
  11. INTERFACE
  12.  
  13. USES Dos;
  14.  
  15.   FUNCTION SpoolerError(Err : WORD) : STRING;
  16.   FUNCTION SpoolerState : BOOLEAN;
  17.   FUNCTION SubmitFile(FName : PathStr) : BOOLEAN;
  18.  
  19. IMPLEMENTATION
  20.  
  21. (* Interrupt 2Fh wurde von MS zunächst für das quasi-Multitasking
  22.   des Drucker-Spoolers PRINT.COM unter MS-DOS 3.3 verwendet, der das Drucken
  23.   im Hintergrund erlaubt.
  24.  
  25.   Später haben sich andere Programmierer dieses (undokumentierten) Interrupts
  26.   angenommen -- so die Entwickler des TSR-Standards TesSeRact -- und auch
  27.   Microsoft selbst hat in späteren DOS-Versionen weitere Funktionen des
  28.   Spooler-Interrupts implementiert und dokumentiert. Er heißt nun in der
  29.   offiziellen Dokumentation Multiplexer-Interrupt und ist inzwischen fast
  30.   so wichtig wie der INT 21h. *)
  31.  
  32. VAR
  33.   Regs      : Registers;
  34.   SpoolPack : RECORD
  35.                 Level   : BYTE;
  36.                 Ofset   : WORD;
  37.                 Segment : WORD;
  38.               END;
  39.  
  40. (* Die Funktion 01 des Multiplexers erlaubt den Zugriff auf Print.Com.
  41.    Zunächst muß abgefragt werden, ob das resident DOS-Utility überhaupt
  42.    installiert ist.
  43.    Anschließend wird über SubmitFile die zu druckende Datei ans
  44.    Ender der Warteschlange getsellt. Der Dateiname muß aus der vollen Pfadbezeichnung
  45.    bestehen, Wildcards sind nicht erlaubt. *)
  46.  
  47.   FUNCTION SpoolerError(Err : WORD) : STRING;
  48.   VAR
  49.     Msg : STRING;
  50.   BEGIN
  51.     CASE Err OF
  52.       $0001 : Msg := 'unbekannte Funktion';
  53.       $0002 : Msg := 'Datei nicht gefunden';
  54.       $0003 : Msg := 'Pfad nicht gefunden';
  55.       $0004 : Msg := 'zuviele geöffnete Dateien';
  56.       $0005 : Msg := 'Zugriff auf Datei verweigert';
  57.       $0008 : Msg := 'Druckerwarteschlange ist voll';
  58.       $000F : Msg := 'unbekanntes Gerät';
  59.       $00FF : Msg := 'PRINT.COM nicht installiert';
  60.     END;
  61.   END;
  62.  
  63.   FUNCTION SpoolerState : BOOLEAN;
  64.   BEGIN
  65.     Regs.AX := $0100;
  66.     Intr($2F, Regs);
  67.     SpoolerState := (Regs.AL = $FF);
  68.   END;
  69.  
  70.   FUNCTION SubmitFile(FName : PathStr) : BOOLEAN;
  71.   BEGIN
  72.     FillChar(Regs, SizeOf(Registers), $00);
  73.     FName[Length(FName) + 1] := ^@;
  74.     WITH SpoolPack DO BEGIN
  75.       Level   := $00;
  76.       Ofset   := Ofs(FName) + 1;
  77.       Segment := Seg(FName);
  78.     END;
  79.     Regs.AH := $01;
  80.     Regs.AL := $01;
  81.     Regs.DS := Seg(SpoolPack);
  82.     Regs.DX := Ofs(SpoolPack);
  83.     Intr($2F, Regs);
  84.     SubmitFile:= (Regs.Flags AND $01) = $00;
  85.   END;
  86.  
  87. END.
  88. (* ------------------------------------------------------ *)
  89. (*                Ende von SPOOLER.PAS                    *)
  90.  
  91.  
  92.  
  93.