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

{
Hi Gayle, this is a complete Print Screen handling unit.
It can Enable/Disable that key (and get status) and/or install a new handler.
I'm looking forward for next SWAG releases!!!
}


Unit PrtScr;

{This is a COMPLETE print screen unit.}
{(C) 1997 SALVATORE MESCHINI - smeschini@ermes.it -
 - http://www.ermes.it/pws/mesk - Feel free to write me!}
{This unit is copyrighted FREEWARE -}

{Getstatus return print screen handler status (see below)
 Setstatus enable (00) or disable (01) print screen (see below)
 NicePrtScr is my own print screen handler (you can modify it, to suit your
 needs.
 GetInt get interrupt vector for restoring (you can use it in your programs)
 SetInt as you can imagine by yourself, set interrupt vector to our routine
 (can be useful in other programs)}

Interface

uses DOS;

var oldint:pointer;

Function  GetStatus:byte; {00=Enabled 01=Disabled FFh=Error}
Procedure SetStatus(mode:word); {This procedure Enable/Disable printscreen}
Procedure NicePrtScr;

Implementation

Function Getstatus;Assembler;
 asm
 mov ax,0050h
 xor bx,bx
 mov es,ax
 mov ax,es:[bx]
 end;

Procedure Setstatus(mode:word);assembler; {00=Enabled 01=Disabled}
 asm
  mov dx,mode
  mov ax,0050h
  xor bx,bx
  mov es,ax
  mov es:[bx],dx
 end;

 PROCEDURE JmpToInt(OldIntVector: pointer);
 INLINE (
    $5B/   {POP BX - Get Segment}
    $58/   {POP AX - Get Offset}
    $89/   {MOV SP,BP}
    $EC/
    $5D/   {POP BP}
    $07/   {POP ES}
    $1F/   {POP DS}
    $5F/   {POP DI}
    $5E/   {POP SI}
    $5A/   {POP DX}
    $59/   {POP CX}
    $87/   {XCHG SP,BP}
    $EC/
    $87/   {XCHG [BP],BX}
    $5E/
    $00/
    $87/   {XCHG [BP+2],AX}
    $46/
    $02/
    $87/   {XCHG SP,BP}
    $EC/
    $CB);  {RETF}

function GetKey: Char;

  var
    AsciiK: byte;

  begin
    asm
     xor ah,ah
     int 16h
     mov asciik,al
    end;
    GetKey := chr(asciik);
  end;


procedure MyInt(Flags, CS, IP, AX, BX, CX, DX, SI, DI, DS, ES, BP: Word);
interrupt;
var x:char;
begin
 {asm cli end;}
 write('Are you sure?');  {Here you can put your routines}
 x:=getkey;               {Suggestions: You can make a TSR to print in
                           compressed font or write additional information
                           on paper (i.e. date/time, your name...) etc.}
 if (x = 'Y') or (x = 'y') then jmptoint(oldint);
 {asm sti end;}
end;

Procedure NicePrtScr;

 begin
 setintvec(05,@MyInt);
 end;

 begin
 getintvec(05,oldint);
 end.

 {-----------------------------------------------------------------------}

 Program Demo; {Just an idea}

 {$M 4096,0,0}

 uses Dos,PrtScr;

 begin
 if getstatus <> 0 then setstatus(0); {If disabled the enable printscreen}
 niceprtscr;
 keep(0);
 end.

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