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

{
 GL> I am writing a simple dialer and would like to know how do
 GL> I recieve the mode String like "BUSY" and "NO CARRIER" , I
 GL> tried opening the Comport For reading but i just hung the
 GL> Computer. Could you please tell me how ?
 GL> Regards , Gareth

  Gareth,
  I didn't see any replies to your message, but I've been looking
  For the same inFormation myself.  I saw the following code, based
  on a message from Norbert Igl, last year.  When I dial my own
  phone number, it gives me a busy signal For a second or two, and
  then hangs up.  I don't know what makes the busy signal stop.  and
  I don't know how to receive the modem String "BUSY" or "NO CARRIER"
  or "NO DIALtoNE".

  I noticed in my modem manual that modem command X4 will
  generate the following responses:

  Number Response       Word Response
  (V0 command)           (V1 command)

     6                      NO DIALtoNE
     7                      BUSY
     8                      NO ANSWER
                            (The modem responds With 8 if you send
                            the @ command [Wait For Quiet Answer],
                            and it didn't subsequently detect 5
                            seconds of silence.)

     I wish I could figure out a way to "capture" the response, either the
     number (say, 7) or the Word ('BUSY').  if I could detect a busy
     signal, I could then create a loop that would make the
     Program continually redial if it detected busy signals.

     if you figure it out, could you post your solution?

     Here's how Norbert's code With a few modifications:

 Date: 29 Jun 92  23:15:00
 From: Norbert Igl
 to:   Jud Mccranie
 Subj: Dialing the phone

   here's a COM3-able version...(:-)}

   Program Dialing;
   Uses Crt;
   (* no error checking... *)

   Var ch : Char;
       num : String;

   Function Dial( Nb:String; ComPort:Byte ):Char;
            Const  DialCmd = 'ATDT';
                   OnHook  = 'ATH';
                   CR      =  #13;
                   Status  =  5;
            Var    UserKey : Char;
            PortAdr : Word;

            Procedure Com_Write( S: String );
                      Var i:Byte;

                      Function OutputOk:Boolean;
                          begin
                          OutPutOk := ( Port[PortAdr+Status] and $20) > 0;
                          end;

                      Procedure ComWriteCh( Var CH:Char);
                          begin
                          Repeat Until OutPutOk;
                          Port[PortAdr] := Byte(CH);
                          end;

                      begin
                      For i := 1 to length(s) do ComWriteCh(S[i]);
                      end;

            Procedure Com_Writeln( S : String );
                      begin
                      Com_Write( S + CR )
                      end;

   { DIAL.Main }
   begin
   if (ComPort < 1) or ( ComPort > 4) then Exit;
   PortAdr := MemW[$40:(ComPort-1)*2 ];
   if PortAdr = 0 then Exit;
   Repeat
       Com_Writeln( OnHook );
       Delay( 500 );
       Com_Write  ( DialCmd );
       Com_Writeln( Nb );
       UserKey := ReadKey;
       Until UserKey <> ' ';         { Hit [SPACE] to redial ! }
   Com_Writeln( OnHook );        { switch the line to the handset ...}
   Dial := UserKey;              { see what key the user pressed... }
   end;

  begin
    ClrScr;
    Write ('Enter your own phone number:  ');
    Readln(Num);
    Writeln('Dialing now... Should get a busy signal.');
    ch := dial(Num,2);
  end.

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