home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 06_07 / snap / snapshot.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1988-04-06  |  3.3 KB  |  79 lines

  1. (* ------------------------------------------------------ *)
  2. (*                  SNAPSHOT.PAS                          *)
  3. (*   Steuerprogramm von SNAPSHOT. Terminiert und bleibt   *)
  4. (*                      resident                          *)
  5. (* -------------------------------------------------------*)
  6.     
  7. PROGRAM SNAPSHOT;
  8.     
  9. (*$C-*)                 (* keine Unterbrechung mit CTRL-C *)
  10. (*$I REGS8088.INC *)    (* Register-Type des Prozessors   *)
  11.  
  12. CONST                   (* Scan-Code der Taste zum        *)
  13.                         (* aktivieren des residenten      *)
  14.                         (* Programms:                     *)
  15.    TSR_Char  = 113;     (* hier <Alt><F10>, nach Bedarf   *)
  16.                         (* aendern                        *)
  17.    TSR_Int   = $60;     (* Nummer des neuen Interrupts    *)
  18.                         (* typisierte Konstanten =        *)
  19.                         (* vorbesetzte Variablen:         *)
  20.    Regs: Regs8088_ =
  21.      (Ax:0;Bx:0;Cx:0;Dx:0;Bp:0;Si:0;Di:0;Ds:0;Es:0;Flags:0);
  22.  
  23.    TSRDseg: INTEGER = 0;        (* TSR Data Segment       *)
  24.    TSRSseg: INTEGER = 0;        (* TSR Stack Segment      *)
  25.    DosSseg: INTEGER = 0;        (* DOS Stack Segment      *)
  26.    TSR_InUse : BOOLEAN = FALSE; (* Flag fuer Rekursion    *)
  27.    TSR_IntIP : INTEGER = 0;     (* urspruenglicher IP Int *)
  28.    TSR_IntCs : INTEGER = 0;     (* urspruenglicher CS Int *)
  29.    StackSize : INTEGER = 0;
  30.  
  31. VAR
  32.    SaveRegs      : Regs8088_;
  33.    HalfRegs      : Regs8088_ ABSOLUTE Regs;
  34.    TSR_terminate : BOOLEAN;
  35.    Segm, Offs    : INTEGER;
  36.  
  37. (*$I MAKEINT.INC  *)  (* Hilfsprozeduren aus PASCAL 6/87  *)
  38. (*$I SCREENIO.INC *)  (* Routinen fuer CGA [oder EGA/HGC] *)
  39. (*$I TSRINIT.INC  *)  (* Initialisierungsprozedur fuer    *)
  40.                       (* ersten Aufruf                    *)
  41. (*$I TSRPGM.INC   *)  (* Anwenderprogramm als parameter-  *)
  42.                       (* lose Prozedur                    *)
  43. (*$I INTERRPT.INC *)  (* Interrupt-Handler                *)
  44.  
  45. BEGIN
  46.   TSR_InUse := FALSE;  TSR_terminate := FALSE;
  47.   TSRDseg := Dseg;
  48.   TSRSseg := Sseg;
  49.   Segm := 0;
  50.   IntGet(TSR_Int,Segm,Offs);
  51.                         (* Interrupt-Vektor Nr. $60 holen *)
  52.   IF Segm <> 0 THEN
  53.     WriteLn ('Interruptvektor schon benutzt',
  54.              ' - Programm nicht resistent!')
  55.   ELSE BEGIN
  56.           (* Adresse des alten Keyboard-Interrupts holen: *)
  57.     IntGet(IntKeyBoard,Segm,Offs);
  58.                        (* und als neuen Interrupt setzen: *)
  59.     IntSet(TSR_Int,Segm,Offs);
  60.           (* unsere Interrupt-Routine fuer den Keyboard-  *)
  61.           (* Interrupt einsetzen:                         *)
  62.     IntSet(IntKeyBoard,Cseg,Ofs(Interrpt));
  63.     TSR_IntIP := MemW[0:TSR_Int*4];       (* Interrupt Ip *)
  64.     TSR_IntCs := MemW[0:TSR_Int*4+2];     (* Interrupt Cs *)
  65.  
  66.     TSRInit;               (* Initialisierungen vornehmen *)
  67.  
  68. (* Terminieren und resident machen.                       *)
  69. (* Ggfs. mAx free dynamic allocation-Option beim          *)
  70. (* Compilieren aendern, wenn beim Aufruf des Programms    *)
  71. (* Fehler auftreten! 300-400 Paragraphen reichen im       *)
  72. (* allgemeinen.                                           *)
  73.  
  74.     MakeResident;
  75.   END;
  76. END.
  77. (* ------------------------------------------------------ *)
  78. (*               Ende von SNAPSHOT.PAS                    *)
  79.