home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 01 / tricks / nodeb.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-10-10  |  2.1 KB  |  77 lines

  1. (* ------------------------------------------------------ *)
  2. (*                   NODEB.PAS                            *)
  3. (*            -- No debuggers wanted --                   *)
  4. (* Unit zum Vergraulen von Debugging-künstlern in eigenen *)
  5. (* Programmen.                                            *)
  6. (*          (c) 1989 Jürgen Plehn  &  TOOLBOX             *)
  7. (* ------------------------------------------------------ *)
  8. UNIT nodeb;
  9.  
  10. INTERFACE
  11.  
  12. USES Dos;
  13.  
  14.   PROCEDURE timetrap(legal : WORD);
  15.  
  16.  
  17. IMPLEMENTATION
  18.  
  19. CONST
  20.   nobytes  = 40;          { diese beiden Werte können nach }
  21.   codebyte = $11;         { Belieben geändert werden       }
  22.  
  23. TYPE
  24.   bytearray = ARRAY[1..nobytes] OF BYTE;
  25.  
  26. VAR
  27.   fake : ^bytearray;
  28.   i     : WORD;
  29.  
  30.   FUNCTION Exor(byte1, byte2 : BYTE) : BYTE;
  31.   BEGIN
  32.     Exor := (byte1 AND NOT(byte2)) OR
  33.             (NOT(byte1) AND byte2);
  34.   END;
  35.  
  36.   PROCEDURE Kern(legal : WORD);
  37.   { Der Interrupt 1AH gibt die seit Mitternacht gezählten  }
  38.   { Timerticks, in der Form CX = HI- Byte , DX = LO- Byte, }
  39.   { zurück                                                 }
  40.  
  41.   CONST
  42.     time      : LONGINT = 0;
  43.   VAR
  44.     initime   : LONGINT ABSOLUTE time;
  45.     acttime   : LONGINT;
  46.     localregs : Registers;
  47.   BEGIN
  48.     localregs.AX := $0000;
  49.     Intr($1A, localregs);
  50.     IF (time = 0) OR (legal = 0) THEN    { Initialisierung }
  51.       initime := localregs.DX + (localregs.CX SHL 8)
  52.     ELSE BEGIN
  53.       acttime := localregs.DX + (localregs.CX SHL 8);
  54.       IF acttime > initime + legal THEN
  55.     Halt;                { oder andere "Schweinereien" }
  56.     END;
  57.   END;
  58.  
  59.   PROCEDURE Code;
  60.   BEGIN
  61.   fake := Addr(Kern);
  62.   FOR i := 1 TO nobytes DO
  63.     fake^[i] := Exor(fake^[i], codebyte);
  64.   END;
  65.  
  66.   PROCEDURE timetrap(legal : WORD);
  67.   BEGIN
  68.     Code;                { entschlüsseln }
  69.     Kern(legal);         { ausführen     }
  70.     Code;                { verschlüsseln }
  71.   END;
  72.  
  73. BEGIN
  74.   Code;                  { verschlüsselt den Code von Kern }
  75. END.
  76. (* ------------------------------------------------------ *)
  77. (*                Ende von NODEB.PAS                      *)