home *** CD-ROM | disk | FTP | other *** search
/ ftp.update.uu.se / ftp.update.uu.se.2014.03.zip / ftp.update.uu.se / pub / rainbow / msdos / misc2 / dialv23.lzh / HAYES.INC < prev    next >
Text File  |  1985-08-03  |  4KB  |  140 lines

  1.  
  2. {********* This file is an "include" file to be used with DIAL.PAS. *********}
  3.  
  4.  
  5. Function GetHayesRsp( secs : Integer ) : Integer;
  6. {
  7. Use this function to get the modem's response for any given command.  Response
  8. is returned as an integer value 0 through 5.  Call with the maximum number of
  9. seconds you wish to wait.
  10. }
  11. Var
  12.   intchr  : char;
  13.   rspcod  : integer;
  14.   rspstr  : string[15];
  15.   goodrsp : array[1..6] of string[15];
  16.   j       : integer;
  17.   result  : boolean;
  18. Begin
  19.   goodrsp[1] := 'OK';
  20.   goodrsp[2] := 'CONNECT';
  21.   goodrsp[3] := 'RING';
  22.   goodrsp[4] := 'NO CARRIER';
  23.   goodrsp[5] := 'ERROR';
  24.   goodrsp[6] := 'CONNECT 1200';
  25.   MsgLine('Waiting for modem response ...',FNormal);
  26.   rspcod := -1;                                 {-1 means timeout}
  27.   Repeat
  28.     Begin
  29.       GotoXY(70,24);
  30.       Write(secs:2);
  31.       result := ReadCommChar;                   {Get a char from the port}
  32.       If CommIn.Char <> chr(0) Then
  33.         Begin
  34.           If CommIn.Char in ['0'..'5'] Then     {Numeric response}
  35.             Begin
  36.               rspcod := ord(commin.char) - ord('0');
  37.               GetCommChar;                      {Get the carriage return}
  38.               secs := 0;                        {Say done}
  39.             End
  40.           Else If CommIn.Char = chr(13) Then    {Word response}
  41.                  Begin
  42.                    GetCommChar;                 {Get the linefeed}
  43.                    rspstr := '';                {Init the response buffer}
  44.                    GetCommChar;                 {Get first char of response}
  45.                    While commin.char in [' ','0'..'2','A'..'Z'] Do
  46.                      Begin
  47.                        rspstr := rspstr + commin.char;
  48.                        GetCommChar;
  49.                      End;
  50.                    GetCommChar;                 {Get the linefeed}
  51.                    For j := 1 to 6 Do
  52.                      Begin
  53.                        If rspstr = goodrsp[j] Then
  54.                          Begin
  55.                            rspcod := j-1;
  56.                            secs   := 0;
  57.                          End;
  58.                      End;
  59.                  End;
  60.         End;
  61.       If secs > 0 Then                   {Don't wait if already done}
  62.         Begin
  63.           Delay(1000);
  64.           secs := secs-1;
  65.           If KeyPressed Then             {User wants to abort call}
  66.             Begin
  67.               Read(KBD,intchr);
  68.               result := WriteCommChar(chr(13));
  69.             End;
  70.         End;
  71.     End;
  72.   Until secs <= 0;
  73.   GetHayesRsp := rspcod;
  74. End; {Function GetHayesRsp}
  75.  
  76.  
  77. Function InitHayes : Boolean;
  78. {
  79. Initialize the Hayes SmartModem.  Return false if this failed so top level can
  80. abort.
  81. }
  82. Var
  83.   Init_String     : Stringlong;
  84.   J               : Integer;
  85.   result          : boolean;
  86. Begin
  87.   MsgLine('Initializing the modem ...',FNormal);
  88.   result := DisconnectModem;
  89.   result := InitPort;
  90.   init_string := 'ATE0F1H0M1Q0TV1X1S7=45' + chr(13);
  91.   For j := 1 to length(init_string) Do
  92.     Begin
  93.       result := WriteCommChar(init_string[j]);
  94.       Delay(hayes_delay);
  95.     End;
  96.   j := GetHayesRsp(10);
  97.   WrtModemRsp(j);
  98.   If j = 0 Then Inithayes := True Else InitHayes := False;
  99. End; {Function INITHAYES}
  100.  
  101.  
  102. Procedure DialHayes;
  103. {
  104. Dial the Hayes with the user selected string.
  105. }
  106. Const
  107.   validchar : Set of Char = [',','0'..'9'];
  108. Var
  109.   ndx                   : integer;
  110.   thenum                : String[15];
  111.   onenum                : Str133;
  112.   numlen                : integer;
  113.   result                : Boolean;
  114.   pnc                   : char;
  115. Begin
  116.   MsgLine('Dialing the phone ...',FNormal);
  117.   Numlen := length(dir_entry[cur_dir_ent].num);
  118.   thenum := dir_entry[cur_dir_ent].num;
  119.   Result := WriteCommChar('A');  Delay(hayes_delay);
  120.   Result := WriteCommChar('T');  Delay(hayes_delay);
  121.   Result := WriteCommChar('D');  Delay(hayes_delay);
  122.   Result := WriteCommChar('T');  Delay(hayes_delay);
  123.   ndx := 1;
  124.   Repeat
  125.     Begin
  126.       If (thenum[ndx] in validchar) THEN
  127.         Begin
  128.           onenum := thenum[ndx];
  129.           pnc    := thenum[ndx];
  130.           FastVideo(onenum,FBoldReverse,Char_Attrib,1,cur_dir_ent-top_dir_ent+fsl, ndx+4);
  131.           result := WriteCommChar(pnc);
  132.           delay(hayes_delay);
  133.         End;
  134.       ndx := ndx+1;
  135.       numlen := numlen - 1;
  136.     End;
  137.   Until numlen = 0;
  138.   Result := WriteCommChar(Chr(13));
  139. End; {procedure DialHayes}
  140.