home *** CD-ROM | disk | FTP | other *** search
- {************************************************************************
- * *
- * Unit KL_API KEYBIT Lite API access module *
- * Public Domain 1996 Pino Navato *
- * *
- ************************************************************************}
-
- Unit KL_API; { ** BP 7+ required ** }
- {$X+}
-
- interface
-
- const KLACTIVE_FLAG = 128;
- EMAILSUPPORT_FLAG = 64;
-
- function Search4Keybit : word;
- function GetSBptr : pointer;
- procedure EnableEmailSupport;
- procedure RestoreKeybitStatus;
-
-
- implementation
-
- uses Strings, DOS;
-
-
- const AMIS_INSTCHECK = 0; { installation check }
- KLAPI_GET_SB_PTR = $10; { get pointer to status byte }
-
- AMIS_SUCCESSFUL = $FF;
-
-
- var mpx : byte;
- regs : registers;
-
-
-
- { +----- Search4Keybit -----------------------------------------------+
- | Purpose: Search for KEYBIT Lite v5+ in memory. |
- | Note: This function sets the global variable mpx used |
- | by GetSBptr. |
- | Return: Full version number if found, 0 if not found. |
- +---------------------------------------------------------------------+ }
-
- function Search4Keybit: word;
- const KL_sig : PChar = 'Pino NavKeybit '; { KEYBIT's AMIS signature }
- var sig : PChar; { generic AMIS signature }
- begin
- { loop through all 256 multiplex numbers, checking signatures we find }
- for mpx := 0 to 255 do
- begin
- regs.ah := mpx;
- regs.al := AMIS_INSTCHECK; { installation check }
- intr($2D, regs);
- if regs.al = AMIS_SUCCESSFUL then { installed? }
- begin
- sig := ptr(regs.dx, regs.di);
- if StrComp(sig, KL_sig) = 0 then { KEYBIT Lite? }
- if regs.ch >= 5 then { v5+ ? }
- begin
- Search4Keybit := regs.cx; { YES! Return full v. number }
- exit
- end
- else
- break { NO, it's an older version. Stop searching. }
- end
- end;
- Search4Keybit := 0
- end;
-
-
-
- { +----- GetSBptr ----------------------------------------------------+
- | Purpose: Get a far pointer to KEYBIT Lite status byte. |
- | Return: Far pointer to KEYBIT Lite status byte |
- | or nil if KEYBIT Lite v5+ not installed. |
- +---------------------------------------------------------------------+ }
-
- function GetSBptr: pointer;
- begin
- if Search4Keybit = 0 then
- GetSBptr := nil
- else
- begin
- regs.ah := mpx;
- regs.al := KLAPI_GET_SB_PTR;
- intr($2D, regs);
- GetSBptr := ptr(regs.dx, regs.bx)
- end
- end;
-
-
-
- const status_ptr : ^byte = nil;
- var old_status : byte;
-
- { +----- EnableEmailSupport ------------------------------------------+
- | Purpose: Set e-mail support flag to 1 and save original status |
- | in the global variable old_status. |
- | Note: This procedure has no effect if KEYBIT Lite isn't in |
- | memory. |
- +---------------------------------------------------------------------+ }
-
- procedure EnableEmailSupport;
- begin
- status_ptr := GetSBptr;
- if status_ptr <> nil then
- begin
- old_status := status_ptr^;
- status_ptr^ := status_ptr^ or EMAILSUPPORT_FLAG
- end
- end;
-
-
-
- { +----- RestoreKeybitStatus -----------------------------------------+
- | Purpose: Restore KEYBIT Lite's original status from the global |
- | variable old_status. |
- | Note: This procedure has no effect if KEYBIT Lite isn't in |
- | memory or if EnableEmailSupport hasn't been called. |
- +---------------------------------------------------------------------+ }
-
- procedure RestoreKeybitStatus;
- begin
- if status_ptr <> nil then
- status_ptr^ := old_status
- end;
-
-
- end.
-