[Back to DOS SWAG index] [Back to Main SWAG index] [Original]
{===========================================================================
Date: 09-22-93 (08:41)
From: GREG VIGNEAULT
Subj: APPEND, ASSIGN, & SHARE
---------------------------------------------------------------------------
JS> How could I determine if DOS extension utilities (eg. Append,
> Assign, and Share) are installed, using Turbo Pascal? }
(* Turbo/Quick/StonyBrook Pascal: Determine if extensions installed *)
PROGRAM DosExt; { DOSEXT.PAS: Greg Vigneault 93.10.02 }
USES Dos; { Import Intr(), MsDos(), Registers }
TYPE Extension = (Append, Assign, Share); { the PC/MS-DOS extensions }
VAR Reg : Registers; { to access Intel 80x86 CPU registers }
Status : WORD; { to return system extension status }
Installed : Extension; { DOS extension (Append|Assign|Share) }
Okay : BOOLEAN; { success or failure (TRUE|FALSE) }
Func : BYTE; { the multiplex function number }
(*------------------------------------------------------------------*)
FUNCTION DosVersion : WORD; { to check DOS version }
BEGIN
Reg.AH := $30; { function:get DOS ver }
MsDos (Reg); { call DOS services }
DosVersion := Reg.AL * 100 + Reg.AH; { ...version times 100 }
END {DosVersion};
(*------------------------------------------------------------------*)
FUNCTION Multiplex (Func : WORD; VAR Status : WORD) : BOOLEAN;
BEGIN
Reg.AH := Func; { function number }
Reg.AL := 0; { subfunction:get status }
Intr ($2F,Reg); { do multiplex interrupt }
IF (Reg.Flags AND 1) <> 0 THEN BEGIN { an error condition? }
Status := Reg.AX; { the DOS error code }
Multiplex := FALSE; END { and flag the error }
ELSE BEGIN
Status := WORD(Reg.AL); { the function status }
Multiplex := TRUE; { and flag success }
END;
END {Multiplex};
(*------------------------------------------------------------------*)
BEGIN {DosExt}
WriteLn;
IF DosVersion < 330 THEN BEGIN
WriteLn ('PC/MS-DOS version is too low, sorry.');
Halt (1);
END;
FOR Installed := Append TO Share DO BEGIN
CASE Installed OF
Append : BEGIN Write ('APPEND '); Func := $B7; END;
Assign : BEGIN Write ('ASSIGN '); Func := $02; END;
Share : BEGIN Write ('SHARE '); Func := $10; END;
END; {CASE}
IF NOT Multiplex (Func,Status) THEN
WriteLn ('status unknown (MS-DOS error #',Status,').')
ELSE
CASE Status OF
0,1 : BEGIN
Write ('not installed: ');
IF Status = 1 THEN Write ('and NOT ');
WriteLn ('okay to install.');
END;
255 : WriteLn ('is installed.');
END; {CASE & IF}
END; {FOR}
END {DosExt}.
(********************************************************************)
[Back to DOS SWAG index] [Back to Main SWAG index] [Original]