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

(*******************************************************************)
 Program RingDetector;  { TSR to detect telephone ring via modem    }
 {$M $400,0,0}
 Uses   Dos;            { import GetIntVec, SetIntVec               }
 Const  COMport     = $3FE;             { COM1 = $3FE, COM2 = $2FE  }
        RingMsg     : Array [0..7] of Byte =
                    ( $52,$40,$49,$40,$4E,$40,$47,$40 );   { "RinG" }
 Var    OldClock    : Procedure;        { For previous int vector   }
        GSpot       : Byte Absolute $B800:$072C;    { display area  }
        OldScreen   : Array [0..7] of Byte; { to save display are   }
 {$F+}
 Procedure RingDetect; Interrupt;
    begin
        if ODD(Port[COMport] SHR 6)
        then begin
            Move( GSpot, OldScreen, 8 );        { save screen area  }
            While ODD(PorT[COMport] SHR 6)
                do Move( RingMsg, GSpot, 8 );   { display "RinG"    }
            Move( OldScreen, GSpot, 8 );        { restore screen    }
        end; {if}
        InLine($9C);                            { to fake an inT    }
        OldClock;                               { chain ticker      }
    end {RingDetect};
 {$F-}

 begin
        GetIntVec($1C,@OldClock);               { save current isr  }
        SetIntVec($1C,ADDR(RingDetect));        { install this isr  }
        Keep(0);                                { tsr               }
 end {RingDetector}.
(*******************************************************************)

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