DOCUMENT:Q80258  10-NOV-1999  [pcmail]
TITLE   :PC Gen: Contents of Modem Script File IBM5853.MDM
PRODUCT :Microsoft Mail For PC Networks
PROD/VER:WINDOWS:2.1e
OPER/SYS:
KEYWORDS:

======================================================================
-------------------------------------------------------------------------------
The information in this article applies to:

 - Microsoft Mail for PC Networks, version 2.1e 
-------------------------------------------------------------------------------

SUMMARY
=======

The following is the contents of the Microsoft Mail version 2.1e modem script
file IBM5853.MDM, which can be compiled with SCRCOMP.EXE:

   ;*********************************************************************
   ;
   ;                    Microsoft Mail Script File
   ;
   ;       Filename: ibm5853.mdm
   ;       Date    : March 21, 1990
   ;       Script  : Standard script file for IBM 2400 bps modems
   ;
   ;     This modem has a set of 8 switches on the rear panel.  These
   ;  switches should be set as follows:
   ;
   ;                      1  2  3  4  5  6  7  8
   ;                 ON   X  X  X  X     X  X  X
   ;                 OFF              X
   ;
   ;
   ;     This script file contains the standard modem setup strings used
   ;  by the External, Transmit and Listen programs. There are five
   ;  procedures defined in this script file for setting up the modem and
   ;  for connecting to a remote External machine.
   ;
   ;     The modem setup strings used here will be adequate for most
   ;  people but there may be some changes required if you are dialing
   ;  overseas and require a longer wait for Carrier Detect (S7 register)
   ;  or if you wish to change the speaker volume. Note that if you used
   ;  the -Innn option in version 1.0 or 2.0 that you will have to modify
   ;  the S7 register and recompile this script file.
   ;
   ;     Consult your modem manual for more information on setup options.
   ;
   ;  Script procedures defined:
   ;       INITIALIZE
   ;       RESET
   ;       CALL
   ;       ANSWER
   ;       DISCONNECT
   ;
   ;  Return codes for External, Transmit, Listen:
   ;       0  - OK
   ;       1  - CONNECT 300
   ;       2  - not defined
   ;       3  - NO CARRIER
   ;       4  - ERROR
   ;       5  - CONNECT 1200
   ;       6  - not defined
   ;       7  - BUSY
   ;       8  - NO ANSWER
   ;       9  - not defined
   ;      10  - CONNECT 2400
   ;      11  - not defined
   ;      12  - CONNECT 9600 (high speed connection)
   ;
   ;
   ;*********************************************************************

   ;  Special Notes Regarding the IBM 5853 Modem:
   ;  -------------------------------------------
   ;
   ;  While the line is ringing (you can here it ring), this modem will
   ;  not accept any modem commands, including "ATA", the command
   ;  required to answer the phone. Commands can be issued to the modem
   ;  only when the modem stops ringing completely, or when it is in
   ;  between rings.
   ;
   ;  "ATZ" cannot be issued safely between line rings, because this
   ;  command would cause this modem to go off-hook and goes into data
   ;  mode, and no further; modem commands are accepted until DTR is
   ;  dropped, or 50 seconds later. ( The "ATZ" command would not reset
   ;  the modem as well when the modem goes off-hook this way. The
   ;  sequence "+++" would not bring the modem back to AT command mode
   ;  either. )

   INITIALIZE:
           title "IBM 2400bps modem Script"

           baud 2400                 ; set the baud rate
           display "   Baud Rate : 2400"
           $attempts = 5

   init_retry:
           if (ri = 1)               ; see if phone is ringing
               goto init_retry

           dtr 0                     ; make sure modem is On-Hook
           wait 1
           dtr 1

           sendln "ATZ"              ; reset modem to default settings

           wait 2
           waitrsp 1

           if ("0" isin response)
               goto reset_okay

           if ("OK" isin response)
               {
   reset_okay:
               if (ri = 1)           ; see if phone is ringing
                   goto reset_okay

               sendln "ATE0M1V0X1"

               wait 1
               waitrsp 1

               if ("0^M" isin response)
                   {
   set_options:
                   if (ri = 1)      ; see if phone is ringing
                       goto set_options

                   sendln "ATS0=0S7=45S9=6S10=50S12=50"

                   waitrsp 1
                   if (response = "0^M")
                       return 0
                   }
                }
           dec $attempts
           if ($attempts > 0)
                   goto init_retry

           return 4

   RESET:
           baud 2400                 ; set the baud rate
           display "   Baud Rate : 2400"
           $attempts = 5

   init_retry:
           if (ri = 1)               ; see if phone is ringing
               goto init_retry

           dtr 0                     ; make sure modem is On-Hook
           wait 1
           dtr 1

           sendln "ATZ"              ; reset modem to default settings

           wait 2
           waitrsp 1

           if ("0" isin response)
               goto reset_okay

           if ("OK" isin response)
               {
   reset_okay:
               if (ri = 1)           ; see if phone is ringing
                   goto reset_okay

               sendln "ATE0M1V0X1"

               wait 1
               waitrsp 1

               if ("0^M" isin response)
                   {
   set_options:
                   if (ri = 1)      ; see if phone is ringing
                       goto set_options

                   sendln "ATS0=0S7=45S9=6S10=50S12=50"

                   waitrsp 1
                   if (response = "0^M")
                       return 0
                   }
                }
           dec $attempts
           if ($attempts > 0)
                   goto init_retry

           return 4

   CALL:
           $ret = 8               ; set default ret code to "no answer"

           clearrsp               ; clear the response buffer

           echo 0                 ; do not display phone number

           sendln "ATD" + dial_mode + phone_number  ; execute the dial up

           echo 1                 ; turn echo back on

           waitrsp 120            ; wait up to 2 minutes for return code
                                  ;    from modem

           if (response = "1^M")
             {
             baud 300
             display ">>> CONNECT 300 <<<"
             $ret = 1
             }
           else if (response = "3^M")
             {
             display ">>> NO CARRIER <<<"
             $ret = 8             ; no answer or no connect
             }
           else if (response = "5^M")
             {
             baud 1200
             display ">>> CONNECT 1200 <<<"
             $ret = 5
             }
           else if (response = "7^M")
             {
             display ">>> BUSY <<<"
             $ret = 7             ; busy
             }
           else if (response = "10^M")
             {
             baud 2400
             display ">>> CONNECT 2400 <<<"
             $ret = 10
             }
           else if (response = "25^M")
             {
             baud 1200
             display ">>> CONNECT 1200/ECL <<<"
             $ret = 5
             }
           else if (response = "30^M")
             {
             baud 2400
             display ">>> CONNECT 2400/ECL <<<"
             $ret = 10
             }

           return $ret            ; return connect baud rate to
                                  ;    application

   ANSWER:
           $ret = 8               ; set default ret code to "no answer"

           waitrsp 1              ; see if phone is ringing

           if ("2^M" isin response)  ; 2 is numeric form of "RING"
               {
   answer_retry:
               if (ri = 1)        ; if phone actually ringing at this
                                  ;    moment
                   goto answer_retry

               if (listen = 1)    ; see if Listen program is running or
                   sendln "ATD"   ; not answer phone in originate mode
                                  ;    (Listen)
               else
                   sendln "ATA"   ; answer the phone normally

               waitrsp 120        ; wait up to 2 minutes for return code
                                  ;    from modem

               if (response = "1^M")
                 {
                 baud 300
                 display ">>> CONNECT 300 <<<"
                 $ret = 1
                 }
               else if (response = "3^M")
                 {
                 display ">>> NO CARRIER <<<"
                 $ret = 8             ; no answer or no connect
                 }
               else if (response = "5^M")
                 {
                 baud 1200
                 display ">>> CONNECT 1200 <<<"
                 $ret = 5
                 }
               else if (response = "10^M")
                 {
                 baud 2400
                 display ">>> CONNECT 2400 <<<"
                 $ret = 10
                 }
               else if (response = "25^M")
                 {
                 baud 1200
                 display ">>> CONNECT 1200/ECL <<<"
                 $ret = 5
                 }
               else if (response = "30^M")
                 {
                 baud 2400
                 display ">>> CONNECT 2400/ECL <<<"
                 $ret = 10
                 }
               }

           return $ret            ; return connect baud rate to
                                  ;    application

   DISCONNECT:
           wait 2                 ; wait 2 seconds

           send "+++"             ; send escape sequence to put modem
                                  ;    back to command state
           wait 2                 ; wait 2 seconds

           clearrsp               ; clear the response buffer

           sendln "ATH0"          ; hang up the phone

           waitrsp 1              ; wait for a response

           if (response != "0^M") ; if hang up failed, drop DTR to force
                                  ;    hang up
               {
               DTR 0              ; drop DTR to reset modem
               wait 2             ; some modems require a delay here
               DTR 1              ; raise DTR
               clearrsp           ; clear response buffer
               }

           return 0               ; always return OK

Additional query words: 2.10 2.1 2.10e

======================================================================
Keywords          :  
Technology        : kbMailSearch kbZNotKeyword3 kbMailPCN210e
Version           : WINDOWS:2.1e

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS
PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.  MICROSOFT DISCLAIMS
ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO
EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR
ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL,
CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF
MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.  SOME STATES DO NOT ALLOW THE EXCLUSION
OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES
SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1999.