[Back to PRINTING SWAG index] [Back to Main SWAG index] [Original]

    Program SPOOLIT;

    { Example program to demonstrate the PRINT spooler interface }

    { Define the data structure we need for spooling files }

    Uses DOS;

    Type

      SpoolRecType = Record
        Priority : Byte;
        Filename : Pointer;
      end;

    Var

      SpoolFile   : PathStr;
      SpoolBuffer : Array[1..70] of char;
      SpoolRec    : SpoolRecType;
      Regs        : Registers;
      SpooledOk   : Boolean;

    Begin

      With Regs do begin
        AX := $100;
        Intr($2F,Regs);
        If AL = 0 then Begin
          WriteLn('PRINT is not loaded.');
          Halt
          end
        end;

      { Query user for the name of a file to spool }

      Write('Enter the filename to print: ');
      ReadLn(SpoolFile);

      If Length(SpoolFile) = 0 then Halt;  {Nothing to do, so quit}

      FillChar(SpoolBuffer,SizeOf(SpoolBuffer),0);

      Move(SpoolFile[1],SpoolBuffer,Length(SpoolFile));

      SpoolRec.Priority := 0;
      SpoolRec.Filename := Addr(SpoolBuffer);

      { Send the file on its way }

      With Regs do Begin
        AX := $101;
        DS := DSeg;
        DX := Ofs(SpoolRec);
        Intr($2F,Regs);

        { Isolate the status fo the spool operation }

        SpooledOK := Not ((Flags and 1) = 1);

        If SpooledOk then
          WriteLn('Your file has been placed in the queue.')
        else
          WriteLn('Could not spool your file, error code is ',AL)
        end

    End.

[Back to PRINTING SWAG index] [Back to Main SWAG index] [Original]