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

    {
    REYNIR STEFANSSON

    > I need a Procedure in the form of:
    > Type DelayHook = Function : Boolean;
    > Procedure DelayIt(S : Word; Hook : DelayHook);

    > What it needs to do is keep calling the hook Function Until it returns
    > True or the number of 1/100th's of seconds, S, is up.

    > Any ideas?  I know how to call the Hook Function, but I am concerned With
    > how to go about keeping up With the time Without using the Crt.Delay
    > Procedure. I am using this to play a tune (with Sound and NoSound) through
    > the speaker and quit when the user presses a key.  The tune is read from
    > a Text File of unknown length.  HELP!

    { More or less outta my head... }

    Uses
      Dos;

    Type
      Reg       : Registers;
      DelayHook : Function : Boolean;

    {
       This proc Uses the AT BIOS' Wait Function: INT 15h, FUNC 86h. It's
       called With a LongInt in CX:DX. Its resolution is ca. 1 microsecond.
    }

    Procedure DelayIt(S : Word; Hook : DelayHook);
    Var
      dly : LongInt;
      bdy : Boolean;
    begin
      Repeat
        Reg.AH := $86;
        Reg.CX := 0;
        Reg.DX := 10000; { Wait 0.01 sec. }
        Intr($15, Reg);
      Until Hook;
    end;

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