!  Supra 56k V.90!	Author:	Kris Kreutzman!!	Copyright:	(c) 1991-1996 Apple Computer, Inc.	All Rights Reserved.!!	revision history:!		v2.1	as shipped with the ARA 2.1!!  'mlts' resource info for this modem:!    byte 1 == 01 -> modem HAS built-in error correction protocols!    byte 2 == 01 -> modem HAS built-in data compression protocols!    byte 3 == 40 -> max number of chars in varstr 7!    byte 4 == 40 -> max number of chars in varstr 8!    byte 5 == 40 -> max number of chars in varstr 9!	!	!	Changes Copyright:	(c) 1998 Diamond Multimedia	All Rights Reserved.!!	revision history:!		v2.1D	to accomodate 56k connections!!		Set DTE to 115200 BPS!		Added result codes 32000 - 54000 (Label 110-120)!		Omitted code 48000 (already included as Label 55)!		Relabeled Label 59 as: Connection Established!		Changed Label 98 to initialize with &F1!		Corrected spelling in Label 3 & 27 "Response"!		Removed addition of Calling Tone (\^) at Label 15 & 19!		Added result codes for V.90 compatibility (Label 73-79, 83-89)!		Added "L" to init string for volume adjustment!@ORIGINATE@ANSWER!! ---- Initial modem setup ----!! Set serial port speed depending upon the compression flag!	A higher rate with compression on to handle expanded data from the modem!	A lower rate closer to the DCE when compression is off! ifstr 5 1 "0"serreset 115200, 0, 8, 1jump 2!@LABEL 1serreset 57600, 0, 8, 1!@LABEL 2hsreset 0 0 0 0 0 0settries 0!! Get the modem's attention!matchclrmatchstr 1 3 "OK\13\10"write "AT\13"matchread 30!@LABEL 3!! Setup the modem for the following:!   Reset to factory settings!   Standard compression/reliablity!   Lock serial port speed!   Serial port hardware handshaking, turn off software handshaking!   Verbose responses and compression/protocol results!   CONNECT returns DCE speed!   Turn off answering!   Reset or return to command mode on DTR toggle (optional)!matchclrmatchstr 1 4   "OK\13\10"matchstr 2 101 "ERROR\13\10"write "AT&F \13"matchread 30inctriesiftries 3 101!! Reset the Modem on setup failure!DTRClearpause 5DTRSetflushjump 3!!@LABEL 4! Varstring 4 , reliable link protocol:!    = 0, handled by computer (ARAP)!    = 1, handled by modem (PPP)!    = 2, MNP10 protocol (Cellular protocol, no longer supported)ifstr 4 5 "1"ifstr 4 5 "2"!! Varstring 4 == 0, turn off reliable link protocol in modem (ARAP)matchclrmatchstr 1 9 "OK\13\10"write "AT\\N0\13"matchread 30jump 101!!@LABEL 5! Varstring 5, compression protocol:!    = 0, handled by computer !    = 1, handled by modemifstr 5 9 "1"!! Varstring 5 == 0, turn off compression protocol in modem.matchclrmatchstr 1 9 "OK\13\10"write "AT%C0\13"matchread 30jump 101!!@LABEL 9! Varstring 2, modem speaker:!    = 0, speaker off!    = 1, speaker onifstr 2 13 "1"pause 5matchclrmatchstr 1 13 "OK\13\10"write "ATM0\13"matchread 30jump 101!! Modem ready, wait for a call or originate a call!@LABEL 13ifANSWER 32!!! ---- Originating a call ----!! Varstring 6, dialing mode:!    = 0, normal dialing!    = 1, blind dialing!    = 2, manual dialingifstr 6 17 "1"ifstr 6 15 "2"jump 19!@LABEL 15! Display ASK dialog with message.  Goto label 107 if dialog canceled.ASK 2 "Pick up the phone & dial ^1.  Hit OK when the phone rings, then hangup." 107note "Manual dialing initiated" 3! X1 to ignore dialtone & busy, D to dial, \^ for data tone!	(\^ removed with v2.1D)write "ATX1D\13"jump 32!@LABEL 17note "Dialing without tone" 3matchclrmatchstr 1 19 "OK\13\10"! X1 to ignore dialtone & busywrite "ATX1\13"matchread 30jump 101!!@LABEL 19! Display the full dialstring contained in Varstring 1note "Dialing ^1" 3!! Varstrings 7, 8 and 9, contain dialstring fragments!    Long phone numbers may need to be split into smaller groups!    for the modem to use!! Varstring 3:  "p" for pulse & "t" for tone dialing! Varstring 8 == blank (dialstring in varstring 7)! Varstring 9 == blank (dialstring in varstrings 7 & 8)! Otherwise (dialstring in varstrings 7, 8 & 9)! \^ is added to the dialstring to force the modem to generate a data tone!	(removed with v2.1D)ifstr 8 27 " "ifstr 9 24 " "!!  Write dialstring in varstrings 7, 8 & 9matchclrmatchstr 1 21 "OK\13\10"write "ATD^3^7;\13"matchread 400jump 101@LABEL 21matchclrmatchstr 1 22 "OK\13\10"write "ATD^3^8;\13"matchread 400jump 101@LABEL 22write "ATD^3^9\13"jump 32!!@LABEL 24!  Write dialstring in varstrings 7 & 8matchclrmatchstr 1 25 "OK\13\10"write "ATD^3\^^7;\13"matchread 400jump 101@LABEL 25write "ATD^3^8\13"jump 32!@LABEL 27!  Write dialstring in varstring 7write "ATD^3\^^7\13"!!!    ---- Connection response ----!! The following section will parse modem responses of two types:!   1) PROTOCOL: xxx, COMPRESSION: xxx, CONNECT xxx!   2) CONNECT xxx/ARQ/V42!@LABEL 32matchclrmatchstr  1 81  "RING\13\10"matchstr  2 102 "NO DIALTONE\13\10"matchstr  3 103 "NO CARRIER"matchstr  4 103 "ERROR\13\10"matchstr  5 104 "BUSY\13\10"matchstr  6 105 "NO ANSWER\13\10"matchstr  7 33  "CONNECT "matchstr  8 32  "CARRIER"matchstr  9 40  "CONNECT\13\10"matchstr 10 62  "PROTOCOL: LAP"matchstr 11 62  "PROTOCOL: MNP"matchstr 12 62  "PROTOCOL: ALT"matchstr 13 67  "COMPRESSION: V"matchstr 14 67  "COMPRESSION: MNP5"matchstr 15 67  "COMPRESSION: CLASS"matchread 700ifANSWER 32jump 101!!  Parse the speed of connect result codes!  2400 and 4800 have two entries each!  to distinguish them from 24000 and 48000!@LABEL 33matchclrmatchstr  1 40 "2400\13"matchstr  2 40 "2400/"matchstr  3 41 "4800\13"matchstr  4 41 "4800/"matchstr  5 42 "7200"matchstr  6 43 "9600"matchstr  7 44 "12000"matchstr  8 45 "14400"matchstr  9 46 "16800"matchstr 10 47 "19200"matchstr 11 48 "21600"matchstr 12 49 "24000"matchstr 13 50 "26400"matchstr 14 51 "28800"matchstr 15 52 "31200"matchstr 16 53 "33600"matchstr 17 54 "38400"matchstr 18 55 "48000"matchstr 19 56 "56000"matchstr 20 57 "57600"matchstr 21 58 "64000"matchstr 22 110 "32000"matchstr 23 111 "34000"matchstr 24 112 "36000"matchstr 25 113 "38000"matchstr 26 114 "40000"matchstr 27 115 "42000"matchstr 28 116 "44000"matchstr 29 117 "46000"matchstr 30 118 "50000"matchstr 31 119 "52000"matchstr 32 120 "54000"matchstr 33 73 "2933"matchstr 34 74 "3066"matchstr 35 75 "3333"matchstr 36 76 "3466"matchstr 37 77 "3733"matchstr 38 78 "3866"matchstr 39 79 "4133"matchstr 40 83 "4266"matchstr 41 84 "4533"matchstr 42 85 "4666"matchstr 43 86 "4933"matchstr 44 87 "5066"matchstr 45 88 "5333"matchstr 46 89 "5466"matchread 30jump 59!! -- Connection rates --! CommunicatingAt informs ARA of the raw modem to modem! connection speed.!@LABEL 40note "Communicating at 2400 bps." 2CommunicatingAt 2400jump 60!@LABEL 41note "Communicating at 4800 bps." 2CommunicatingAt 4800jump 60!@LABEL 42note "Communicating at 7200 bps." 2CommunicatingAt 7200jump 60!@LABEL 43note "Communicating at 9600 bps." 2CommunicatingAt 9600jump 60!@LABEL 44note "Communicating at 12400 bps." 2CommunicatingAt 12400jump 60!@LABEL 45note "Communicating at 14400 bps." 2CommunicatingAt 14400jump 60!@LABEL 46note "Communicating at 16800 bps." 2CommunicatingAt 16800jump 60!@LABEL 47note "Communicating at 19200 bps." 2CommunicatingAt 19200jump 60!@LABEL 48note "Communicating at 21600 bps." 2CommunicatingAt 21600jump 60!@LABEL 49note "Communicating at 24000 bps." 2CommunicatingAt 24000jump 60!@LABEL 50note "Communicating at 26400 bps." 2CommunicatingAt 26400jump 60!@LABEL 51note "Communicating at 28800 bps." 2CommunicatingAt 28800jump 60!@LABEL 52note "Communicating at 31200 bps." 2CommunicatingAt 31200jump 60!@LABEL 53note "Communicating at 33600 bps." 2CommunicatingAt 33600jump 60!@LABEL 54note "Communicating at 38400 bps." 2CommunicatingAt 38400jump 60!@LABEL 55note "Communicating at 48000 bps." 2CommunicatingAt 48000jump 60!@LABEL 56note "Communicating at 56000 bps." 2CommunicatingAt 56000jump 60!@LABEL 57note "Communicating at 57600 bps." 2CommunicatingAt 57600jump 60!@LABEL 58note "Communicating at 64000 bps." 2CommunicatingAt 64000jump 60!@LABEL 110note "Communicating at 32000 bps." 2CommunicatingAt 32000jump 60! @LABEL 111note "Communicating at 34000 bps." 2CommunicatingAt 34000jump 60! @LABEL 112note "Communicating at 36000 bps." 2CommunicatingAt 36000jump 60! @LABEL 113note "Communicating at 38000 bps." 2CommunicatingAt 38000jump 60! @LABEL 114note "Communicating at 40000 bps." 2CommunicatingAt 40000jump 60! @LABEL 115note "Communicating at 42000 bps." 2CommunicatingAt 42000jump 60! @LABEL 116note "Communicating at 44000 bps." 2CommunicatingAt 44000jump 60! @LABEL 117note "Communicating at 46000 bps." 2CommunicatingAt 46000jump 60!@LABEL 118note "Communicating at 50000 bps." 2CommunicatingAt 50000jump 60! @LABEL 119note "Communicating at 52000 bps." 2CommunicatingAt 52000jump 60! @LABEL 120note "Communicating at 54000 bps." 2CommunicatingAt 54000jump 60! @LABEL 73note "Communicating at 29333 bps." 2CommunicatingAt 29333jump 60! @LABEL 74note "Communicating at 30666 bps." 2CommunicatingAt 30666jump 60! @LABEL 75note "Communicating at 33333 bps." 2CommunicatingAt 33333jump 60! @LABEL 76note "Communicating at 34666 bps." 2CommunicatingAt 34666jump 60! @LABEL 77note "Communicating at 37333 bps." 2CommunicatingAt 37333jump 60! @LABEL 78note "Communicating at 38666 bps." 2CommunicatingAt 38666jump 60! @LABEL 79note "Communicating at 41333 bps." 2CommunicatingAt 41333jump 60! @LABEL 83note "Communicating at 42666 bps." 2CommunicatingAt 42666jump 60! @LABEL 84note "Communicating at 45333 bps." 2CommunicatingAt 45333jump 60! @LABEL 85note "Communicating at 46666 bps." 2CommunicatingAt 46666jump 60! @LABEL 86note "Communicating at 49333 bps." 2CommunicatingAt 49333jump 60! @LABEL 87note "Communicating at 50666 bps." 2CommunicatingAt 50666jump 60! @LABEL 88note "Communicating at 53333 bps." 2CommunicatingAt 53333jump 60! @LABEL 89note "Communicating at 54666 bps." 2CommunicatingAt 54666jump 60!@LABEL 59note "Connection Established." 2jump 60!! Look for reliablilty and compression results ! at the end of the connect result.!@LABEL 60matchclrmatchstr  1 63 "LAPM"matchstr  2 63 "REL"matchstr  3 63 "ARQ"matchstr  4 68 "COMP/"matchstr  5 68 "COMP\13"matchstr  6 63 "V42/"matchstr  7 63 "V42\13"matchstr  8 68 "V42BIS"matchstr  9 68 "V42bis"matchstr 10 63 "MNP\13"matchstr 11 68 "MNP5"matchstr 12 70 "\10"matchread 30jump 70! -- Modem error correction link negotiation --! Userhook 2 informs ARA that a modem-to-modem error! correcting protocol has been negotiated!!@LABEL 62note "Modem Reliable Link Established." 2userhook 2jump 32!@LABEL 63note "Modem Reliable Link Established." 2userhook 2jump 60!! -- Compression negotiation --! Userhook 3 informs ARA that a modem-to-modem compression! protocol has been negotiated!@LABEL 67note "Modem Compression Established." 2userhook 3jump 32!@LABEL 68note "Modem Compression Established." 2userhook 3jump 60!!! -- Normal exit after "CONNECT" --!!  This modem has been setup to do CTS handshaking,!  and we assume that a CTS handshaking cable is being used.!@LABEL 70! Turn on CTS handshaking.HSReset 0 1 0 0 0 0!ifANSWER 71pause 30@LABEL 71exit 0!!! ---- Answer calls ----!!	A RING result from the modem and in ANSWERING mode!	claims the serial port and answering the phone!@LABEL 81ifORIGINATE 32userhook 1note "Answering phone..." 2write "ATA\13"jump 32!!! ---- Hang up and reset modem ----!@HANGUP@LABEL 90settries 0HSReset 0 0 0 0 0 0!@LABEL 92!  Escape from data to command modematchclrmatchstr 1 96 "OK\13\10"write "+++"matchread 20!@LABEL 94! Force a hangupmatchclrmatchstr 1 98 "NO CARRIER\13\10"matchstr 2 98 "OK\13\10"matchstr 3 98 "ERROR\13\10"matchstr 4 98 "0\13\10"write "ATH\13"matchread 30! ! Try to get control of the modem by toggling DTRDTRClearpause 5DTRSetflush!! Try the hangup sequence three times otherwise declare and errorinctriesiftries 3 101jump 92!@LABEL 96! Pause between data and command modepause 50jump 94!!@LABEL 98! Recall the factory settingspause 15matchclrmatchstr 1 99 "OK\13\10"write "AT&F0\13"matchread 30jump 101!@LABEL 99exit 0!! ---- Error messages -----!! Modem Not Responding@LABEL 101exit -6019!! No Dial Tone@LABEL 102exit -6020!! No Carrier or Error@LABEL 103exit -6021!! Busy@LABEL 104exit -6022!! No Answer@LABEL 105exit -6023!! User Cancellation@LABEL 107exit -6008