[Back to COMM SWAG index] [Back to Main SWAG index] [Original]

    Function ModemRinging(Port : Word) : Boolean;  { through the BIOS }
    Var
      Dummy : Byte;
    begin
      Asm
        dec port
        mov ah,03h
        mov dx,port
        int 14h
        mov dummy,al
      end;
      ModemRinging := (Dummy and RI) = RI       { ring indicated }
    end;

    or

    Function ModemRinging(Port : Byte) : Boolean;  { direct port access }
    Const
      RI = $40;
    begin
      Case Port of
        1 : ModemRinging := ($3FE and RI) = RI;   { com 1 }
        2 : ModemRinging := ($2FE and RI) = RI    { com 2 }
      end
    end;

    Function PhoneRinging(ComPort: Integer): Boolean;
    begin
        Case ComPort Of
            1: PhoneRinging := (Port[$3FE] And 64) = 64;
            2: PhoneRinging := (Port[$2FE] And 64) = 64;
            3: PhoneRinging := (Port[$3EE] And 64) = 64;
            4: PhoneRinging := (Port[$2EE] And 64) = 64;
            Else
                PhoneRinging := False;
        end;
    end;

    Function returns True if phone is ringing. Hope it helps.

    {
    > Function returns True if phone is ringing. Hope it helps.

    Just nitpicking but...

     PhoneRinging:=(Port[$3FE] and 64)<>0

    is more efficient, as is

     PhoneRinging:=Boolean(Port[$3FE] and 64)
    }

[Back to COMM SWAG index] [Back to Main SWAG index] [Original]